linux/drivers/pwm
Uwe Kleine-König 9dd42d019e pwm: Allow pwm state transitions from an invalid state
While driving a PWM via the sysfs API it's hard to determine the right
order of writes to the pseudo files "period" and "duty_cycle":

If you want to go from duty_cycle/period = 50/100 to 150/300 you have to
write period first (because 150/100 is invalid). If however you start at
400/500 the duty_cycle must be configured first. The rule that works is:
If you increase period write period first, otherwise write duty_cycle
first. A complication however is that it's usually sensible to configure
the polarity before both period and duty_cycle. This can only be done if
the current state's duty_cycle and period configuration isn't bogus
though. It is still worse (but I think only theoretic) if you have a PWM
that only supports inverted polarity and you start with period = 0 and
polarity = normal. Then you can change neither period (because polarity
= normal is refused) nor polarity (because there is still period = 0).

To simplify the corner cases for userspace, let invalid target states
pass if the current state is invalid already.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Link: https://lore.kernel.org/r/20240628103519.105020-2-u.kleine-koenig@baylibre.com
Signed-off-by: Uwe Kleine-König <ukleinek@kernel.org>
2024-07-10 17:53:52 +02:00
..
core.c pwm: Allow pwm state transitions from an invalid state 2024-07-10 17:53:52 +02:00
Kconfig pwm: Add GPIO PWM driver 2024-07-10 17:52:47 +02:00
Makefile pwm: Add GPIO PWM driver 2024-07-10 17:52:47 +02:00
pwm-ab8500.c
pwm-apple.c
pwm-atmel-hlcdc.c
pwm-atmel-tcb.c pwm: atmel-tcb: Fix race condition and convert to guards 2024-07-10 17:51:04 +02:00
pwm-atmel.c
pwm-axi-pwmgen.c pwm: axi-pwmgen: Make use of regmap_clear_bits() 2024-07-10 17:52:46 +02:00
pwm-bcm2835.c pwm: bcm2835: Drop open coded variant of devm_clk_rate_exclusive_get() 2024-04-30 18:57:08 +02:00
pwm-bcm-iproc.c
pwm-bcm-kona.c
pwm-berlin.c
pwm-brcmstb.c
pwm-clk.c
pwm-clps711x.c
pwm-crc.c
pwm-cros-ec.c pwm: cros-ec: Simplify device tree xlation 2024-07-10 17:52:47 +02:00
pwm-dwc-core.c pwm: dwc: allow suspend/resume for 16 channels 2024-04-15 17:28:13 +02:00
pwm-dwc.c pwm: dwc: allow suspend/resume for 16 channels 2024-04-15 17:28:13 +02:00
pwm-dwc.h pwm: dwc: allow suspend/resume for 16 channels 2024-04-15 17:28:13 +02:00
pwm-ep93xx.c
pwm-fsl-ftm.c
pwm-gpio.c pwm: Add GPIO PWM driver 2024-07-10 17:52:47 +02:00
pwm-hibvt.c
pwm-img.c pwm: img: fix pwm clock lookup 2024-03-25 07:31:26 +01:00
pwm-imx1.c pwm: add missing MODULE_DESCRIPTION() macros 2024-07-10 17:52:46 +02:00
pwm-imx27.c pwm: add missing MODULE_DESCRIPTION() macros 2024-07-10 17:52:46 +02:00
pwm-imx-tpm.c pwm: imx-tpm: Enable pinctrl setting for sleep state 2024-07-10 17:53:51 +02:00
pwm-intel-lgm.c pwm: add missing MODULE_DESCRIPTION() macros 2024-07-10 17:52:46 +02:00
pwm-iqs620a.c
pwm-jz4740.c pwm: jz4740: Another few conversions to regmap_{set,clear}_bits() 2024-07-10 17:52:46 +02:00
pwm-keembay.c
pwm-lp3943.c
pwm-lpc18xx-sct.c
pwm-lpc32xx.c
pwm-lpss-pci.c pwm: lpss: drop redundant runtime PM handles 2024-07-10 17:53:51 +02:00
pwm-lpss-platform.c pwm: lpss: use devm_pm_runtime_enable() helper 2024-07-10 17:53:51 +02:00
pwm-lpss.c
pwm-lpss.h
pwm-mediatek.c pwm: add missing MODULE_DESCRIPTION() macros 2024-07-10 17:52:46 +02:00
pwm-meson.c pwm: meson: Add support for Amlogic S4 PWM 2024-07-10 17:52:47 +02:00
pwm-microchip-core.c
pwm-mtk-disp.c
pwm-mxs.c
pwm-ntxec.c
pwm-omap-dmtimer.c
pwm-pca9685.c pwm: pca9685: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-05-10 07:30:27 +02:00
pwm-pxa.c pwm: add missing MODULE_DESCRIPTION() macros 2024-07-10 17:52:46 +02:00
pwm-raspberrypi-poe.c
pwm-rcar.c
pwm-renesas-tpu.c
pwm-rockchip.c
pwm-rz-mtu3.c
pwm-samsung.c pwm: add missing MODULE_DESCRIPTION() macros 2024-07-10 17:52:46 +02:00
pwm-sifive.c
pwm-sl28cpld.c
pwm-spear.c pwm: add missing MODULE_DESCRIPTION() macros 2024-07-10 17:52:46 +02:00
pwm-sprd.c
pwm-sti.c pwm: sti: Prefer local variable over pointer dereference 2024-04-26 21:29:17 +02:00
pwm-stm32-lp.c
pwm-stm32.c pwm-stm32: Make use of parametrised register definitions 2024-07-10 17:53:51 +02:00
pwm-stmpe.c
pwm-sun4i.c
pwm-sunplus.c
pwm-tegra.c
pwm-tiecap.c
pwm-tiehrpwm.c
pwm-twl-led.c
pwm-twl.c
pwm-visconti.c pwm: add missing MODULE_DESCRIPTION() macros 2024-07-10 17:52:46 +02:00
pwm-vt8500.c
pwm-xilinx.c pwm: xilinx: Simplify using devm_ functions 2024-07-10 17:53:52 +02:00