mirror of https://gitee.com/openkylin/linux.git
pwm: rockchip: Enable APB clock during register access while probing
Commit457f74abbe
("pwm: rockchip: Keep enabled PWMs running while probing") modified rockchip_pwm_probe() to access a PWM device's registers directly to check whether or not the device is enabled, but did not also change the function so it first enables the device's APB clock to be certain the device can respond. This risks hanging the kernel on systems with PWM devices that use more than a single clock. Avoid this by enabling the device's APB clock before accessing its registers (and disabling the clock when register access is complete). Fixes:457f74abbe
("pwm: rockchip: Keep enabled PWMs running while probing") Reported-by: Thierry Reding <thierry.reding@gmail.com> Suggested-by: Trent Piepho <tpiepho@gmail.com> Signed-off-by: Simon South <simon@simonsouth.net> Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
This commit is contained in:
parent
a2bc9b21fd
commit
d9b657a5cd
|
@ -330,9 +330,9 @@ static int rockchip_pwm_probe(struct platform_device *pdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
ret = clk_prepare(pc->pclk);
|
||||
ret = clk_prepare_enable(pc->pclk);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Can't prepare APB clk: %d\n", ret);
|
||||
dev_err(&pdev->dev, "Can't prepare enable APB clk: %d\n", ret);
|
||||
goto err_clk;
|
||||
}
|
||||
|
||||
|
@ -362,10 +362,12 @@ static int rockchip_pwm_probe(struct platform_device *pdev)
|
|||
if ((ctrl & enable_conf) != enable_conf)
|
||||
clk_disable(pc->clk);
|
||||
|
||||
clk_disable(pc->pclk);
|
||||
|
||||
return 0;
|
||||
|
||||
err_pclk:
|
||||
clk_unprepare(pc->pclk);
|
||||
clk_disable_unprepare(pc->pclk);
|
||||
err_clk:
|
||||
clk_disable_unprepare(pc->clk);
|
||||
|
||||
|
|
Loading…
Reference in New Issue