[RFC PATCH 00/15] pwm: add support for atomic update

Boris Brezillon
2015-07-01T08:21:46Z

Hello Thierry,

This series adds support for atomic PWM update, or ITO, the capability
to update all the parameters of a PWM device (enabled/disabled, period,
duty and polarity) in one go.

This implementation is still experimental, and I may have missed some key
aspect, so any feedback are welcome.

Also note that I haven't protected the state update with any locking.
That's because the existing config does not protect against concurrent
access to a requested PWM device (see the pwm_config implementation).
I guess the PWM framework assume the user will implement the proper locking
scheme if it has to concurrently access the device.

The 5 first patches prepare the addition of the pwm_state concept, which
will be used to allow atomic updates.
The following patches introduce the pwm_state struct, initial state
retrieval and atomic update concepts.

Patches 12 and 13 are showing how one can implement the initial state
retrieval and atomic update features in a PWM driver (in this specific
case I implemented it in the rockchip driver).

The last 2 patches are making use of those changes to improve the
pwm-regulator driver (initializing the regulator state based on the
initial PWM state).

Best Regards,

Boris

Boris Brezillon (15):
pwm: add the pwm_is_enabled() helper
pwm: fix pwm_get_period and pwm_get_duty_cycle prototypes
pwm: add pwm_get_polarity helper function
pwm: make use of pwm_get_xxx helpers where appropriate
pwm: introduce default period and polarity concepts
pwm: define a new pwm_state struct
pwm: move the enabled/disabled info to pwm_state struct
backlight: pwm_bl: remove useless call to pwm_set_period
pwm: declare a default PWM state
pwm: add the PWM initial state retrieval infra
pwm: add the core infrastructure to allow atomic update
pwm: rockchip: add initial state retrieval
pwm: rockchip: add support for atomic update
regulator: pwm: implement ->enable(), ->disable() and ->is_enabled
methods
regulator: pwm: properly initialize the ->state field

drivers/leds/leds-pwm.c | 2 +-
drivers/pwm/core.c | 136 ++++++++++++++++++++++++++++++-----
drivers/pwm/pwm-atmel-tcb.c | 2 +-
drivers/pwm/pwm-atmel.c | 6 +-
drivers/pwm/pwm-bcm-kona.c | 7 +-
drivers/pwm/pwm-ep93xx.c | 4 +-
drivers/pwm/pwm-imx.c | 5 +-
drivers/pwm/pwm-mxs.c | 4 +-
drivers/pwm/pwm-pxa.c | 2 +-
drivers/pwm/pwm-renesas-tpu.c | 2 +-
drivers/pwm/pwm-rockchip.c | 122 ++++++++++++++++++++++++-------
drivers/pwm/pwm-sun4i.c | 3 +-
drivers/pwm/pwm-tegra.c | 6 +-
drivers/pwm/pwm-tiecap.c | 10 +--
drivers/pwm/pwm-tiehrpwm.c | 6 +-
drivers/pwm/sysfs.c | 13 ++--
drivers/regulator/pwm-regulator.c | 60 ++++++++++++++--
drivers/video/backlight/lm3630a_bl.c | 4 +-
drivers/video/backlight/pwm_bl.c | 6 +-
drivers/video/fbdev/ssd1307fb.c | 2 +-
include/linux/pwm.h | 82 ++++++++++++++++++---
21 files changed, 380 insertions(+), 104 deletions(-)

--
1.9.1