mbox series

[v3,0/4] leds: pca9532: Use hardware for blinking LEDs

Message ID 20240711120129.100248-1-bastien.curutchet@bootlin.com
Headers show
Series leds: pca9532: Use hardware for blinking LEDs | expand

Message

Bastien Curutchet July 11, 2024, 12:01 p.m. UTC
Hi all,

This series aims to use hardware more often to blink LEDs.

The pca9532_set_blink() rejects asymmetric delays. So the core's software
fallback is almost always used when we want to blink a LED. Removing
this restriction revealed some conflicts between setting brightness and
blinking as the same PWM (PWM0) configuration is used by all LEDs for
both brightness and blinking.

Make use of the second available PWM (PWM1) to blink LEDs. This PWM1 was
reserved for beepers so hardware blinking is explicitly disabled if at
least one LED is used to drive a beeper to avoid conflicts.

Tested with PCA9532

Changes in v2:
 * Add defines to get rid of magic numbers
 * Replace every 'led' by 'LED'
 * Use dev_err() when returning errors
 * Remove unused struct pca9532_data from patch 2 to add it on patch 3
   where it's actually used

Changes in v3 (in PATCH 2/4):
 * Drop dev_err() messages for comments
 * Replace a -EINVAL with a -EBUSY

[v1] : https://lore.kernel.org/all/20240527125940.155260-1-bastien.curutchet@bootlin.com/
[v2] : https://lore.kernel.org/all/20240617143910.154546-1-bastien.curutchet@bootlin.com/

Bastien Curutchet (4):
  leds: pca9532: Use defines to select PWM instance
  leds: pca9532: Use PWM1 for hardware blinking
  leds: pca9532: Explicitly disable hardware blink when PWM1 is
    unavailable
  leds: pca9532: Change default blinking frequency to 1Hz

 drivers/leds/leds-pca9532.c | 80 ++++++++++++++++++++++++++++---------
 1 file changed, 62 insertions(+), 18 deletions(-)

Comments

Lee Jones July 25, 2024, 9:09 a.m. UTC | #1
On Thu, 11 Jul 2024, Bastien Curutchet wrote:

> Hi all,
> 
> This series aims to use hardware more often to blink LEDs.
> 
> The pca9532_set_blink() rejects asymmetric delays. So the core's software
> fallback is almost always used when we want to blink a LED. Removing
> this restriction revealed some conflicts between setting brightness and
> blinking as the same PWM (PWM0) configuration is used by all LEDs for
> both brightness and blinking.
> 
> Make use of the second available PWM (PWM1) to blink LEDs. This PWM1 was
> reserved for beepers so hardware blinking is explicitly disabled if at
> least one LED is used to drive a beeper to avoid conflicts.
> 
> Tested with PCA9532
> 
> Changes in v2:
>  * Add defines to get rid of magic numbers
>  * Replace every 'led' by 'LED'
>  * Use dev_err() when returning errors
>  * Remove unused struct pca9532_data from patch 2 to add it on patch 3
>    where it's actually used
> 
> Changes in v3 (in PATCH 2/4):
>  * Drop dev_err() messages for comments
>  * Replace a -EINVAL with a -EBUSY
> 
> [v1] : https://lore.kernel.org/all/20240527125940.155260-1-bastien.curutchet@bootlin.com/
> [v2] : https://lore.kernel.org/all/20240617143910.154546-1-bastien.curutchet@bootlin.com/
> 
> Bastien Curutchet (4):
>   leds: pca9532: Use defines to select PWM instance
>   leds: pca9532: Use PWM1 for hardware blinking
>   leds: pca9532: Explicitly disable hardware blink when PWM1 is
>     unavailable
>   leds: pca9532: Change default blinking frequency to 1Hz

This set was applied on the 20th June.

Please rebase and send follow-ups.