commit d09eaa7b1b65acfa38cf3cabd32004ff81b3eeed Author: liyj Date: Thu Jun 27 16:37:58 2024 +0800 fix: adp5585 fix gpio can not set to input diff --git a/kernel/drivers/gpio/gpio-adp5585.c b/kernel/drivers/gpio/gpio-adp5585.c index ee34defac7..ba618b2286 100755 --- a/kernel/drivers/gpio/gpio-adp5585.c +++ b/kernel/drivers/gpio/gpio-adp5585.c @@ -85,6 +85,7 @@ static int adp5585_gpio_direction_input(struct gpio_chip *chip, unsigned int off struct adp5585_gpio_dev *adp5585_gpio; unsigned int bank, bit; int ret; + u8 val; adp5585_gpio = gpiochip_get_data(chip); bank = ADP5585_BANK(off); @@ -92,7 +93,11 @@ static int adp5585_gpio_direction_input(struct gpio_chip *chip, unsigned int off mutex_lock(&adp5585_gpio->lock); adp5585_gpio->dir[bank] &= ~bit; - ret = adp5585_gpio_reg_write(adp5585_gpio, ADP5585_GPIO_DIRECTION_A + bank, + adp5585_gpio_reg_read(adp5585_gpio, ADP5585_GENERAL_CFG, &val); + val |= ADP5585_GENERAL_CFG_OSC_EN; + ret = adp5585_gpio_reg_write(adp5585_gpio, ADP5585_GENERAL_CFG, val); + + ret |= adp5585_gpio_reg_write(adp5585_gpio, ADP5585_GPIO_DIRECTION_A + bank, adp5585_gpio->dir[bank]); mutex_unlock(&adp5585_gpio->lock); return ret;