> Commit 338de0ca (extcon: gpio: Use gpio driver/chip debounce if supported) > introduced a call to gpio_set_debounce() before actually requesting the > respective gpio pin from the gpio subsystem. > > The gpio subsystem expects that a gpio pin was requested before modifying its > state. Not doing so results in a warning from gpiolib, and the gpio pin is > auto-requested. This in turn causes the subsequent devm_gpio_request_one() > to fail. So devm_gpio_request_one() must be called prior to calling > gpio_set_debounce(). > > Signed-off-by: Guenter Roeck <li...@roeck-us.net>
Thank you. Acked-by: MyungJoo Ham <myungjoo....@samsung.com> > --- > drivers/extcon/extcon-gpio.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/drivers/extcon/extcon-gpio.c b/drivers/extcon/extcon-gpio.c > index 7e0dff5..4736a9c 100644 > --- a/drivers/extcon/extcon-gpio.c > +++ b/drivers/extcon/extcon-gpio.c > @@ -105,6 +105,12 @@ static int gpio_extcon_probe(struct platform_device > *pdev) > extcon_data->state_off = pdata->state_off; > if (pdata->state_on && pdata->state_off) > extcon_data->edev.print_state = extcon_gpio_print_state; > + > + ret = devm_gpio_request_one(&pdev->dev, extcon_data->gpio, GPIOF_DIR_IN, > + pdev->name); > + if (ret < 0) > + return ret; > + > if (pdata->debounce) { > ret = gpio_set_debounce(extcon_data->gpio, > pdata->debounce * 1000); > @@ -117,11 +123,6 @@ static int gpio_extcon_probe(struct platform_device > *pdev) > if (ret < 0) > return ret; > > - ret = devm_gpio_request_one(&pdev->dev, extcon_data->gpio, GPIOF_DIR_IN, > - pdev->name); > - if (ret < 0) > - goto err; > - > INIT_DELAYED_WORK(&extcon_data->work, gpio_extcon_work); > > extcon_data->irq = gpio_to_irq(extcon_data->gpio); > -- > 1.7.9.7 > >