linux-stable/drivers/pwm
Jon Hunter 984f35f57f pwm: tegra: Ensure the clock rate is not less than needed
[ Upstream commit 5eccd0d9fa ]

When dynamically scaling the PWM clock, the function
dev_pm_opp_set_rate() may set the PWM clock to a rate that is lower than
what is required. The clock rate requested when calling
dev_pm_opp_set_rate() is the minimum clock rate that is needed to drive
the PWM to achieve the required period. Hence, if the actual clock
rate is less than the requested clock rate, then the required period
cannot be achieved and configuring the PWM fails. Fix this by
calling clk_round_rate() to check if the clock rate that will be provided
is sufficient and if not, double the required clock rate to ensure the
required period can be attained.

Fixes: 8c193f4714 ("pwm: tegra: Optimize period calculation")
Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-12-31 13:32:48 +01:00
..
core.c pwm: Changes for v6.1-rc1 2022-10-07 11:32:10 -07:00
Kconfig pwm: Add clock based PWM output driver 2022-07-29 13:41:18 +02:00
Makefile pwm: Add clock based PWM output driver 2022-07-29 13:41:18 +02:00
pwm-ab8500.c pwm: ab8500: Simplify using devm_pwmchip_add() 2021-09-02 21:38:40 +02:00
pwm-atmel-hlcdc.c pwm: atmel-hlcdc: Don't check the return code of pwmchip_remove() 2021-09-02 21:38:49 +02:00
pwm-atmel-tcb.c pwm: atmel-tcb: Fix typo in comment 2022-06-22 15:33:13 +02:00
pwm-atmel.c pwm: atmel: Remove redundant initialization of variable timeout 2022-02-24 13:54:05 +01:00
pwm-bcm-iproc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_30.RULE (part 2) 2022-06-10 14:51:35 +02:00
pwm-bcm-kona.c treewide: Replace GPLv2 boilerplate/reference with SPDX - gpl-2.0_30.RULE (part 2) 2022-06-10 14:51:35 +02:00
pwm-bcm2835.c pwm: Simplify all drivers with explicit of_pwm_n_cells = 3 2021-05-25 18:19:15 +02:00
pwm-berlin.c pwm: berlin: Ensure configuring period and duty_cycle isn't wrongly skipped 2021-07-08 16:09:17 +02:00
pwm-brcmstb.c pwm: brcmstb: Remove useless locking 2022-02-24 14:46:24 +01:00
pwm-clk.c pwm: Add clock based PWM output driver 2022-07-29 13:41:18 +02:00
pwm-clps711x.c pwm: clps71xx: Implement .apply() callback 2022-04-22 18:52:30 +02:00
pwm-crc.c pwm: crc: Simplify using devm_pwmchip_add() 2021-06-28 13:25:04 +02:00
pwm-cros-ec.c pwm: pwm-cros-ec: Add channel type support 2022-05-20 16:40:01 +02:00
pwm-dwc.c pwm: Always allocate PWM chip base ID dynamically 2021-03-22 11:53:00 +01:00
pwm-ep93xx.c pwm: ep93xx: Simplify using devm_pwmchip_add() 2021-09-02 21:38:41 +02:00
pwm-fsl-ftm.c pwm: fsl-ftm: Simplify using devm_pwmchip_add() 2021-09-02 21:38:41 +02:00
pwm-hibvt.c pwm: hibvt: Disable the clock only after the PWM was unregistered 2021-09-02 21:38:37 +02:00
pwm-img.c pwm: img: Rename variable pointing to driver private data 2022-02-02 17:06:05 +01:00
pwm-imx-tpm.c pwm: imx-tpm: Don't check the return code of pwmchip_remove() 2021-09-02 21:38:52 +02:00
pwm-imx1.c pwm: imx1: Implement .apply callback 2022-02-02 17:05:19 +01:00
pwm-imx27.c pwm: imx27: Simplify using devm_pwmchip_add() 2021-09-02 21:38:42 +02:00
pwm-intel-lgm.c pwm: intel-lgm: Simplify using devm_pwmchip_add() 2021-09-02 21:38:42 +02:00
pwm-iqs620a.c pwm: iqs620a: Simplify using devm_pwmchip_add() 2021-09-02 21:38:43 +02:00
pwm-jz4740.c pwm: jz4740: Add support for X1000 SoC 2022-02-24 14:37:21 +01:00
pwm-keembay.c pwm: keembay: Simplify using devm_pwmchip_add() 2021-09-02 21:38:44 +02:00
pwm-lp3943.c pwm: lp3943: Implement .apply() callback 2022-04-22 18:43:09 +02:00
pwm-lpc18xx-sct.c pwm: lpc18xx: Fix period handling 2022-07-29 13:41:18 +02:00
pwm-lpc32xx.c pwm: lpc32xx: Implement .apply() callback 2022-05-20 16:29:01 +02:00
pwm-lpss-pci.c pwm: lpss: Use DEFINE_RUNTIME_DEV_PM_OPS() and pm_ptr() macros 2022-09-28 16:18:57 +02:00
pwm-lpss-platform.c pwm: lpss: Use device_get_match_data() to get device data 2022-09-28 16:18:11 +02:00
pwm-lpss.c pwm: lpss: Make use of bits.h macros for all masks 2022-09-28 16:19:43 +02:00
pwm-lpss.h pwm: lpss: Add a comment to the bypass field 2022-09-28 16:21:46 +02:00
pwm-mediatek.c pwm: mediatek: Add MT8365 support 2022-06-22 15:59:43 +02:00
pwm-meson.c pwm: meson: Drop always false check from .apply() 2022-02-01 08:38:10 +01:00
pwm-mtk-disp.c pwm: mtk-disp: Implement atomic API .get_state() 2021-09-02 22:27:46 +02:00
pwm-mxs.c pwm: mxs: Simplify using devm_pwmchip_add() 2021-09-02 21:38:45 +02:00
pwm-ntxec.c pwm: ntxec: Simplify using devm_pwmchip_add() 2021-09-02 21:38:46 +02:00
pwm-omap-dmtimer.c pwm: omap-dmtimer: Don't check the return code of pwmchip_remove() 2021-09-02 21:38:52 +02:00
pwm-pca9685.c i2c: Make remove callback return void 2022-08-16 12:46:26 +02:00
pwm-pxa.c pwm: pxa: Implement .apply() callback 2022-02-02 18:03:05 +01:00
pwm-raspberrypi-poe.c pwm: raspberrypi-poe: Fix endianness in firmware struct 2022-04-22 18:50:51 +02:00
pwm-rcar.c pwm: rcar: Simplify multiplication/shift logic 2022-02-24 15:14:56 +01:00
pwm-renesas-tpu.c pwm: renesas-tpu: Improve precision of period and duty_cycle calculation 2022-05-20 16:18:40 +02:00
pwm-rockchip.c pwm: rockchip: Convert to use dev_err_probe() 2022-09-28 14:01:19 +02:00
pwm-samsung.c pwm: samsung: Implement .apply() callback 2022-05-20 15:59:34 +02:00
pwm-sifive.c pwm: sifive: Shut down hardware only after pwmchip_remove() completed 2022-07-29 13:41:13 +02:00
pwm-sl28cpld.c pwm: sl28cpld: Simplify using devm_pwmchip_add() 2021-09-02 21:38:47 +02:00
pwm-spear.c pwm: spear: Ensure configuring period and duty_cycle isn't wrongly skipped 2021-07-08 16:08:38 +02:00
pwm-sprd.c pwm: sprd: Ensure configuring period and duty_cycle isn't wrongly skipped 2021-07-08 16:08:08 +02:00
pwm-sti.c pwm: sti: Implement .apply() callback 2022-05-20 16:28:18 +02:00
pwm-stm32-lp.c pwm: stm32-lp: Simplify using devm_pwmchip_add() 2021-09-02 21:38:47 +02:00
pwm-stm32.c pwm: Simplify all drivers with explicit of_pwm_n_cells = 3 2021-05-25 18:19:15 +02:00
pwm-stmpe.c pwm: stmpe: Implement .apply() callback 2022-05-20 16:28:35 +02:00
pwm-sun4i.c pwm-sun4i: Calculate the delay without rounding down to jiffies 2022-04-22 17:44:48 +02:00
pwm-sunplus.c pwm: sunplus-pwm: Add Sunplus SoC SP7021 PWM Driver 2022-04-22 18:34:24 +02:00
pwm-tegra.c pwm: tegra: Ensure the clock rate is not less than needed 2022-12-31 13:32:48 +01:00
pwm-tiecap.c pwm: tiecap: Simplify using devm_pwmchip_add() 2021-09-02 21:38:48 +02:00
pwm-tiehrpwm.c pwm: tiehrpwm: Implement .apply() callback 2022-02-24 13:52:59 +01:00
pwm-twl-led.c pwm: twl-led: Document some limitations and link to the reference manual 2022-07-29 13:41:18 +02:00
pwm-twl.c pwm: twl: Implement .apply() callback 2021-11-17 17:12:42 +01:00
pwm-visconti.c pwm: visconti: Simplify using devm_pwmchip_add() 2021-11-05 11:51:41 +01:00
pwm-vt8500.c pwm: vt8500: Rename variable pointing to driver private data 2022-02-24 14:35:20 +01:00
pwm-xilinx.c pwm: Add support for Xilinx AXI Timer 2022-04-22 18:30:44 +02:00
sysfs.c pwm: sysfs: Replace sprintf() with sysfs_emit() 2022-09-28 17:52:02 +02:00