| From 64cffee13379c02c1e0f90f30dda7a5b7d9c6606 Mon Sep 17 00:00:00 2001 |
| From: Douglas Anderson <dianders@chromium.org> |
| Date: Tue, 9 Apr 2019 13:49:05 -0700 |
| Subject: soc: rockchip: Set the proper PWM for rk3288 |
| |
| [ Upstream commit bbdc00a7de24cc90315b1775fb74841373fe12f7 ] |
| |
| The rk3288 SoC has two PWM implementations available, the "old" |
| implementation and the "new" one. You can switch between the two of |
| them by flipping a bit in the grf. |
| |
| The "old" implementation is the default at chip power up but isn't the |
| one that's officially supposed to be used. ...and, in fact, the |
| driver that gets selected in Linux using the rk3288 device tree only |
| supports the "new" implementation. |
| |
| Long ago I tried to get a switch to the right IP block landed in the |
| PWM driver (search for "rk3288: Switch to use the proper PWM IP") but |
| that got rejected. In the mean time the grf has grown a full-fledged |
| driver that already sets other random bits like this. That means we |
| can now get the fix landed. |
| |
| For those wondering how things could have possibly worked for the last |
| 4.5 years, folks have mostly been relying on the bootloader to set |
| this bit. ...but occasionally folks have pointed back to my old patch |
| series [1] in downstream kernels. |
| |
| [1] https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg1391597.html |
| |
| Signed-off-by: Douglas Anderson <dianders@chromium.org> |
| Signed-off-by: Heiko Stuebner <heiko@sntech.de> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/soc/rockchip/grf.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| diff --git a/drivers/soc/rockchip/grf.c b/drivers/soc/rockchip/grf.c |
| index 96882ffde67e..3b81e1d75a97 100644 |
| --- a/drivers/soc/rockchip/grf.c |
| +++ b/drivers/soc/rockchip/grf.c |
| @@ -66,9 +66,11 @@ static const struct rockchip_grf_info rk3228_grf __initconst = { |
| }; |
| |
| #define RK3288_GRF_SOC_CON0 0x244 |
| +#define RK3288_GRF_SOC_CON2 0x24c |
| |
| static const struct rockchip_grf_value rk3288_defaults[] __initconst = { |
| { "jtag switching", RK3288_GRF_SOC_CON0, HIWORD_UPDATE(0, 1, 12) }, |
| + { "pwm select", RK3288_GRF_SOC_CON2, HIWORD_UPDATE(1, 1, 0) }, |
| }; |
| |
| static const struct rockchip_grf_info rk3288_grf __initconst = { |
| -- |
| 2.20.1 |
| |