Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Input: improve usage of gpiod API

Since 39b2bbe3d715 (gpio: add flags argument to gpiod_get*() functions)
which appeared in v3.17-rc1, the gpiod_get* functions take an additional
parameter that allows to specify direction and initial value for
output. Simplify drivers accordingly.

Note that in the case of the drv260x driver error checking is more
strict now because -ENOSYS is reported to the caller now. But this
should only be returned if GPIOLIB is disabled which shouldn't happen as
the driver depends on GPIOLIB.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

authored by

Uwe Kleine-König and committed by
Dmitry Torokhov
ea0afac4 eeb64c14

+6 -21
+1 -6
drivers/input/keyboard/clps711x-keypad.c
··· 120 120 for (i = 0; i < priv->row_count; i++) { 121 121 struct clps711x_gpio_data *data = &priv->gpio_data[i]; 122 122 123 - data->desc = devm_gpiod_get_index(dev, "row", i); 124 - if (!data->desc) 125 - return -EINVAL; 126 - 123 + data->desc = devm_gpiod_get_index(dev, "row", i, GPIOD_IN); 127 124 if (IS_ERR(data->desc)) 128 125 return PTR_ERR(data->desc); 129 - 130 - gpiod_direction_input(data->desc); 131 126 } 132 127 133 128 err = of_property_read_u32(np, "poll-interval", &poll_interval);
+4 -9
drivers/input/misc/drv260x.c
··· 580 580 return error; 581 581 } 582 582 583 - haptics->enable_gpio = devm_gpiod_get(&client->dev, "enable"); 584 - if (IS_ERR(haptics->enable_gpio)) { 585 - error = PTR_ERR(haptics->enable_gpio); 586 - if (error != -ENOENT && error != -ENOSYS) 587 - return error; 588 - haptics->enable_gpio = NULL; 589 - } else { 590 - gpiod_direction_output(haptics->enable_gpio, 1); 591 - } 583 + haptics->enable_gpio = devm_gpiod_get_optional(&client->dev, "enable", 584 + GPIOD_OUT_HIGH); 585 + if (IS_ERR(haptics->enable_gpio)) 586 + return PTR_ERR(haptics->enable_gpio); 592 587 593 588 haptics->input_dev = devm_input_allocate_device(&client->dev); 594 589 if (!haptics->input_dev) {
+1 -6
drivers/input/misc/gpio-beeper.c
··· 66 66 { 67 67 struct gpio_beeper *beep; 68 68 struct input_dev *input; 69 - int err; 70 69 71 70 beep = devm_kzalloc(&pdev->dev, sizeof(*beep), GFP_KERNEL); 72 71 if (!beep) 73 72 return -ENOMEM; 74 73 75 - beep->desc = devm_gpiod_get(&pdev->dev, NULL); 74 + beep->desc = devm_gpiod_get(&pdev->dev, NULL, GPIOD_OUT_LOW); 76 75 if (IS_ERR(beep->desc)) 77 76 return PTR_ERR(beep->desc); 78 77 ··· 90 91 input->event = gpio_beeper_event; 91 92 92 93 input_set_capability(input, EV_SND, SND_BELL); 93 - 94 - err = gpiod_direction_output(beep->desc, 0); 95 - if (err) 96 - return err; 97 94 98 95 input_set_drvdata(input, beep); 99 96