mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
leds: pca9532: Fix inverted GPIO output polarity
The pca9532_gpio_set_value() function incorrectly mapped the requested
value to PCA9532_ON and PCA9532_OFF, inverting the GPIO output polarity.
A requested logical high (val=1) incorrectly enabled the LED output
driver, which on this open-drain device pulls the pin low, while a
requested logical low (val=0) released the pin.
Correct the mapping so that val=1 yields PCA9532_OFF (pin released /
high-impedance) and val=0 yields PCA9532_ON (pin driven low).
pca9532_gpio_direction_input() is also updated to pass val=1 to
pca9532_gpio_set_value() to align with the corrected polarity mapping,
ensuring the pin remains not driven when configured as an input.
Fixes: 3c1ab50d0a ("drivers/leds/leds-pca9532.c: add gpio capability")
Signed-off-by: Cosmo Chou <chou.cosmo@gmail.com>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Link: https://patch.msgid.link/20260703014201.69829-1-chou.cosmo@gmail.com
Signed-off-by: Lee Jones <lee@kernel.org>
This commit is contained in:
parent
f647a22662
commit
65a38a28a0
|
|
@ -327,9 +327,9 @@ static int pca9532_gpio_set_value(struct gpio_chip *gc, unsigned int offset,
|
|||
struct pca9532_led *led = &data->leds[offset];
|
||||
|
||||
if (val)
|
||||
led->state = PCA9532_ON;
|
||||
else
|
||||
led->state = PCA9532_OFF;
|
||||
else
|
||||
led->state = PCA9532_ON;
|
||||
|
||||
pca9532_setled(led);
|
||||
|
||||
|
|
@ -349,7 +349,7 @@ static int pca9532_gpio_get_value(struct gpio_chip *gc, unsigned offset)
|
|||
static int pca9532_gpio_direction_input(struct gpio_chip *gc, unsigned offset)
|
||||
{
|
||||
/* To use as input ensure pin is not driven */
|
||||
pca9532_gpio_set_value(gc, offset, 0);
|
||||
pca9532_gpio_set_value(gc, offset, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user