Skip to content

Commit

Permalink
leds: pwm-multicolor: Support active-low LEDs
Browse files Browse the repository at this point in the history
Add support for LEDs wired up to light when the PWM output is low, just
like the regular PWM LEDs.

Signed-off-by: Emil Renner Berthing <[email protected]>
Reviewed-by: Geert Uytterhoeven <[email protected]>
Signed-off-by: Pavel Machek <[email protected]>
  • Loading branch information
esmil authored and pavelmachek committed Jul 17, 2022
1 parent 83543c6 commit 3dd7ed5
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions drivers/leds/rgb/leds-pwm-multicolor.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
struct pwm_led {
struct pwm_device *pwm;
struct pwm_state state;
bool active_low;
};

struct pwm_mc_led {
Expand All @@ -45,6 +46,9 @@ static int led_pwm_mc_set(struct led_classdev *cdev,
duty *= mc_cdev->subled_info[i].brightness;
do_div(duty, cdev->max_brightness);

if (priv->leds[i].active_low)
duty = priv->leds[i].state.period - duty;

priv->leds[i].state.duty_cycle = duty;
priv->leds[i].state.enabled = duty > 0;
ret = pwm_apply_state(priv->leds[i].pwm,
Expand Down Expand Up @@ -76,6 +80,7 @@ static int iterate_subleds(struct device *dev, struct pwm_mc_led *priv,
goto release_fwnode;
}
pwm_init_state(pwmled->pwm, &pwmled->state);
pwmled->active_low = fwnode_property_read_bool(fwnode, "active-low");

ret = fwnode_property_read_u32(fwnode, "color", &color);
if (ret) {
Expand Down

0 comments on commit 3dd7ed5

Please sign in to comment.