diff --git a/drivers/gpio/pcal6408/gpio-pcal6408.c b/drivers/gpio/pcal6408/gpio-pcal6408.c index 74fbb291d38b..486f39bca255 100755 --- a/drivers/gpio/pcal6408/gpio-pcal6408.c +++ b/drivers/gpio/pcal6408/gpio-pcal6408.c @@ -273,6 +273,16 @@ static int pcal6048_direction_in(struct gpio_chip *gc, unsigned offset) return ret; } +static void pcal6048_set_gpio(struct gpio_chip *gc, unsigned offset, int value) +{ + struct pcal6048_dev *chip = gpiochip_get_data(gc); + + if (value) + pcal6048_set_reg(chip, offset, chip->conf->output); + else + pcal6048_clear_reg(chip, offset, chip->conf->output); +} + static int pcal6048_direction_out(struct gpio_chip *gc, unsigned offset, int value) { struct pcal6048_dev *chip = gpiochip_get_data(gc); @@ -287,6 +297,8 @@ static int pcal6048_direction_out(struct gpio_chip *gc, unsigned offset, int val else ret = pcal6048_clear_reg(chip, offset, chip->conf->direction); + pcal6048_set_gpio(gc, offset, value); + return ret; } @@ -310,16 +322,6 @@ static int pcal6048_get_gpio(struct gpio_chip *gc, unsigned offset) return pcal6048_read_reg(chip, offset, chip->conf->input); } -static void pcal6048_set_gpio(struct gpio_chip *gc, unsigned offset, int value) -{ - struct pcal6048_dev *chip = gpiochip_get_data(gc); - - if (value) - pcal6048_set_reg(chip, offset, chip->conf->output); - else - pcal6048_clear_reg(chip, offset, chip->conf->output); -} - static int pcal6048_set_config(struct gpio_chip *gc, unsigned int offset, unsigned long config) { struct pcal6048_dev *chip = gpiochip_get_data(gc);