* [PATCH 1/4] Input: navpoint - Convert to use GPIO descriptor
2023-11-29 13:51 [PATCH 0/4] Convert some input drivers to use GPIO descriptors Linus Walleij
@ 2023-11-29 13:51 ` Linus Walleij
2023-12-13 7:13 ` Dmitry Torokhov
2023-11-29 13:51 ` [PATCH 2/4] Input: tca6416-keypad - Drop unused include Linus Walleij
` (2 subsequent siblings)
3 siblings, 1 reply; 11+ messages in thread
From: Linus Walleij @ 2023-11-29 13:51 UTC (permalink / raw)
To: Dmitry Torokhov, Tony Lindgren; +Cc: linux-input, Linus Walleij
The Navpoint driver uses a GPIO line, convert this to use
a GPIO descriptor. There are no in-kernel users but outoftree
users can easily be added or converted using a GPIO descriptor
table as with numerous other drivers.
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
drivers/input/mouse/navpoint.c | 41 +++++++++++++++--------------------------
include/linux/input/navpoint.h | 1 -
2 files changed, 15 insertions(+), 27 deletions(-)
diff --git a/drivers/input/mouse/navpoint.c b/drivers/input/mouse/navpoint.c
index c00dc1275da2..ba757783c258 100644
--- a/drivers/input/mouse/navpoint.c
+++ b/drivers/input/mouse/navpoint.c
@@ -10,7 +10,7 @@
#include <linux/platform_device.h>
#include <linux/clk.h>
#include <linux/delay.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
#include <linux/input.h>
#include <linux/input/navpoint.h>
#include <linux/interrupt.h>
@@ -32,7 +32,7 @@ struct navpoint {
struct ssp_device *ssp;
struct input_dev *input;
struct device *dev;
- int gpio;
+ struct gpio_desc *gpiod;
int index;
u8 data[1 + HEADER_LENGTH(0xff)];
};
@@ -170,16 +170,14 @@ static void navpoint_up(struct navpoint *navpoint)
dev_err(navpoint->dev,
"timeout waiting for SSSR[CSS] to clear\n");
- if (gpio_is_valid(navpoint->gpio))
- gpio_set_value(navpoint->gpio, 1);
+ gpiod_set_value(navpoint->gpiod, 1);
}
static void navpoint_down(struct navpoint *navpoint)
{
struct ssp_device *ssp = navpoint->ssp;
- if (gpio_is_valid(navpoint->gpio))
- gpio_set_value(navpoint->gpio, 0);
+ gpiod_set_value(navpoint->gpiod, 0);
pxa_ssp_write_reg(ssp, SSCR0, 0);
@@ -216,18 +214,9 @@ static int navpoint_probe(struct platform_device *pdev)
return -EINVAL;
}
- if (gpio_is_valid(pdata->gpio)) {
- error = gpio_request_one(pdata->gpio, GPIOF_OUT_INIT_LOW,
- "SYNAPTICS_ON");
- if (error)
- return error;
- }
-
ssp = pxa_ssp_request(pdata->port, pdev->name);
- if (!ssp) {
- error = -ENODEV;
- goto err_free_gpio;
- }
+ if (!ssp)
+ return -ENODEV;
/* HaRET does not disable devices before jumping into Linux */
if (pxa_ssp_read_reg(ssp, SSCR0) & SSCR0_SSE) {
@@ -242,10 +231,18 @@ static int navpoint_probe(struct platform_device *pdev)
goto err_free_mem;
}
+ navpoint->gpiod = gpiod_get_optional(&pdev->dev,
+ NULL, GPIOD_OUT_LOW);
+ if (IS_ERR(navpoint->gpiod)) {
+ error = PTR_ERR(navpoint->gpiod);
+ dev_err(&pdev->dev, "error getting GPIO\n");
+ goto err_free_mem;
+ }
+ gpiod_set_consumer_name(navpoint->gpiod, "SYNAPTICS_ON");
+
navpoint->ssp = ssp;
navpoint->input = input;
navpoint->dev = &pdev->dev;
- navpoint->gpio = pdata->gpio;
input->name = pdev->name;
input->dev.parent = &pdev->dev;
@@ -288,17 +285,12 @@ static int navpoint_probe(struct platform_device *pdev)
input_free_device(input);
kfree(navpoint);
pxa_ssp_free(ssp);
-err_free_gpio:
- if (gpio_is_valid(pdata->gpio))
- gpio_free(pdata->gpio);
return error;
}
static void navpoint_remove(struct platform_device *pdev)
{
- const struct navpoint_platform_data *pdata =
- dev_get_platdata(&pdev->dev);
struct navpoint *navpoint = platform_get_drvdata(pdev);
struct ssp_device *ssp = navpoint->ssp;
@@ -308,9 +300,6 @@ static void navpoint_remove(struct platform_device *pdev)
kfree(navpoint);
pxa_ssp_free(ssp);
-
- if (gpio_is_valid(pdata->gpio))
- gpio_free(pdata->gpio);
}
static int navpoint_suspend(struct device *dev)
diff --git a/include/linux/input/navpoint.h b/include/linux/input/navpoint.h
index d464ffb4db52..5192ae3f5ec1 100644
--- a/include/linux/input/navpoint.h
+++ b/include/linux/input/navpoint.h
@@ -5,5 +5,4 @@
struct navpoint_platform_data {
int port; /* PXA SSP port for pxa_ssp_request() */
- int gpio; /* GPIO for power on/off */
};
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/4] Input: tca6416-keypad - Drop unused include
2023-11-29 13:51 [PATCH 0/4] Convert some input drivers to use GPIO descriptors Linus Walleij
2023-11-29 13:51 ` [PATCH 1/4] Input: navpoint - Convert to use GPIO descriptor Linus Walleij
@ 2023-11-29 13:51 ` Linus Walleij
2023-12-13 7:13 ` Dmitry Torokhov
2023-11-29 13:51 ` [PATCH 3/4] Input: omap-keypad - Drop optional GPIO support Linus Walleij
2023-11-29 13:51 ` [PATCH 4/4] Input: as5011 - Convert to GPIO descriptor Linus Walleij
3 siblings, 1 reply; 11+ messages in thread
From: Linus Walleij @ 2023-11-29 13:51 UTC (permalink / raw)
To: Dmitry Torokhov, Tony Lindgren; +Cc: linux-input, Linus Walleij
The TCA6416 keypad driver is including the legacy GPIO
header <linux/gpio.h> for no reason, it is not using any
of its symbols. Drop the header.
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
drivers/input/keyboard/tca6416-keypad.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/input/keyboard/tca6416-keypad.c b/drivers/input/keyboard/tca6416-keypad.c
index 8af59ced1ec2..677bc4baa5d1 100644
--- a/drivers/input/keyboard/tca6416-keypad.c
+++ b/drivers/input/keyboard/tca6416-keypad.c
@@ -14,7 +14,6 @@
#include <linux/slab.h>
#include <linux/interrupt.h>
#include <linux/workqueue.h>
-#include <linux/gpio.h>
#include <linux/i2c.h>
#include <linux/input.h>
#include <linux/tca6416_keypad.h>
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/4] Input: omap-keypad - Drop optional GPIO support
2023-11-29 13:51 [PATCH 0/4] Convert some input drivers to use GPIO descriptors Linus Walleij
2023-11-29 13:51 ` [PATCH 1/4] Input: navpoint - Convert to use GPIO descriptor Linus Walleij
2023-11-29 13:51 ` [PATCH 2/4] Input: tca6416-keypad - Drop unused include Linus Walleij
@ 2023-11-29 13:51 ` Linus Walleij
2023-11-30 12:15 ` Tony Lindgren
2023-12-13 7:10 ` Dmitry Torokhov
2023-11-29 13:51 ` [PATCH 4/4] Input: as5011 - Convert to GPIO descriptor Linus Walleij
3 siblings, 2 replies; 11+ messages in thread
From: Linus Walleij @ 2023-11-29 13:51 UTC (permalink / raw)
To: Dmitry Torokhov, Tony Lindgren; +Cc: linux-input, Linus Walleij
The driver supports passing some GPIO lines for rows and columns
through the driver data, but there is no in-kernel user of this.
Further the use seems convoluted because the GPIO lines are unused
in the driver, then explicitly free:ed when removing it without
being requested when probing it, which is assymetric and just
a recepie for disaster.
Remove the support for these unused GPIOs, if need be support can
be reestablished in an organized fashion using GPIO descriptors.
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
drivers/input/keyboard/omap-keypad.c | 16 +---------------
include/linux/platform_data/keypad-omap.h | 3 ---
2 files changed, 1 insertion(+), 18 deletions(-)
diff --git a/drivers/input/keyboard/omap-keypad.c b/drivers/input/keyboard/omap-keypad.c
index 454fb8675657..99023b9de35f 100644
--- a/drivers/input/keyboard/omap-keypad.c
+++ b/drivers/input/keyboard/omap-keypad.c
@@ -21,7 +21,6 @@
#include <linux/mutex.h>
#include <linux/errno.h>
#include <linux/slab.h>
-#include <linux/gpio.h>
#include <linux/platform_data/gpio-omap.h>
#include <linux/platform_data/keypad-omap.h>
#include <linux/soc/ti/omap1-io.h>
@@ -49,9 +48,6 @@ struct omap_kp {
static DECLARE_TASKLET_DISABLED_OLD(kp_tasklet, omap_kp_tasklet);
-static unsigned int *row_gpios;
-static unsigned int *col_gpios;
-
static irqreturn_t omap_kp_interrupt(int irq, void *dev_id)
{
/* disable keyboard interrupt and schedule for handling */
@@ -180,7 +176,7 @@ static int omap_kp_probe(struct platform_device *pdev)
struct omap_kp *omap_kp;
struct input_dev *input_dev;
struct omap_kp_platform_data *pdata = dev_get_platdata(&pdev->dev);
- int i, col_idx, row_idx, ret;
+ int col_idx, row_idx, ret;
unsigned int row_shift, keycodemax;
if (!pdata->rows || !pdata->cols || !pdata->keymap_data) {
@@ -209,11 +205,6 @@ static int omap_kp_probe(struct platform_device *pdev)
if (pdata->delay)
omap_kp->delay = pdata->delay;
- if (pdata->row_gpios && pdata->col_gpios) {
- row_gpios = pdata->row_gpios;
- col_gpios = pdata->col_gpios;
- }
-
omap_kp->rows = pdata->rows;
omap_kp->cols = pdata->cols;
@@ -276,11 +267,6 @@ static int omap_kp_probe(struct platform_device *pdev)
err3:
device_remove_file(&pdev->dev, &dev_attr_enable);
err2:
- for (i = row_idx - 1; i >= 0; i--)
- gpio_free(row_gpios[i]);
- for (i = col_idx - 1; i >= 0; i--)
- gpio_free(col_gpios[i]);
-
kfree(omap_kp);
input_free_device(input_dev);
diff --git a/include/linux/platform_data/keypad-omap.h b/include/linux/platform_data/keypad-omap.h
index 3e7c64c854f4..f3f1311cdf3a 100644
--- a/include/linux/platform_data/keypad-omap.h
+++ b/include/linux/platform_data/keypad-omap.h
@@ -19,9 +19,6 @@ struct omap_kp_platform_data {
bool rep;
unsigned long delay;
bool dbounce;
- /* specific to OMAP242x*/
- unsigned int *row_gpios;
- unsigned int *col_gpios;
};
/* Group (0..3) -- when multiple keys are pressed, only the
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 3/4] Input: omap-keypad - Drop optional GPIO support
2023-11-29 13:51 ` [PATCH 3/4] Input: omap-keypad - Drop optional GPIO support Linus Walleij
@ 2023-11-30 12:15 ` Tony Lindgren
2023-12-13 7:10 ` Dmitry Torokhov
1 sibling, 0 replies; 11+ messages in thread
From: Tony Lindgren @ 2023-11-30 12:15 UTC (permalink / raw)
To: Linus Walleij; +Cc: Dmitry Torokhov, linux-input
* Linus Walleij <linus.walleij@linaro.org> [231129 13:51]:
> Remove the support for these unused GPIOs, if need be support can
> be reestablished in an organized fashion using GPIO descriptors.
Sounds good to me:
Reviewed-by: Tony Lindgren <tony@atomide.com>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 3/4] Input: omap-keypad - Drop optional GPIO support
2023-11-29 13:51 ` [PATCH 3/4] Input: omap-keypad - Drop optional GPIO support Linus Walleij
2023-11-30 12:15 ` Tony Lindgren
@ 2023-12-13 7:10 ` Dmitry Torokhov
2023-12-13 8:19 ` Linus Walleij
1 sibling, 1 reply; 11+ messages in thread
From: Dmitry Torokhov @ 2023-12-13 7:10 UTC (permalink / raw)
To: Linus Walleij; +Cc: Tony Lindgren, linux-input
On Wed, Nov 29, 2023 at 02:51:47PM +0100, Linus Walleij wrote:
> @@ -180,7 +176,7 @@ static int omap_kp_probe(struct platform_device *pdev)
> struct omap_kp *omap_kp;
> struct input_dev *input_dev;
> struct omap_kp_platform_data *pdata = dev_get_platdata(&pdev->dev);
> - int i, col_idx, row_idx, ret;
> + int col_idx, row_idx, ret;
col_idx and row_idx are not longer needed wither, I dropped them and
applied the patch.
Thanks.
--
Dmitry
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 3/4] Input: omap-keypad - Drop optional GPIO support
2023-12-13 7:10 ` Dmitry Torokhov
@ 2023-12-13 8:19 ` Linus Walleij
0 siblings, 0 replies; 11+ messages in thread
From: Linus Walleij @ 2023-12-13 8:19 UTC (permalink / raw)
To: Dmitry Torokhov; +Cc: Tony Lindgren, linux-input
On Wed, Dec 13, 2023 at 8:10 AM Dmitry Torokhov
<dmitry.torokhov@gmail.com> wrote:
> On Wed, Nov 29, 2023 at 02:51:47PM +0100, Linus Walleij wrote:
> > @@ -180,7 +176,7 @@ static int omap_kp_probe(struct platform_device *pdev)
> > struct omap_kp *omap_kp;
> > struct input_dev *input_dev;
> > struct omap_kp_platform_data *pdata = dev_get_platdata(&pdev->dev);
> > - int i, col_idx, row_idx, ret;
> > + int col_idx, row_idx, ret;
>
> col_idx and row_idx are not longer needed wither, I dropped them and
> applied the patch.
Thanks for fixing this up Dmitry!
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 4/4] Input: as5011 - Convert to GPIO descriptor
2023-11-29 13:51 [PATCH 0/4] Convert some input drivers to use GPIO descriptors Linus Walleij
` (2 preceding siblings ...)
2023-11-29 13:51 ` [PATCH 3/4] Input: omap-keypad - Drop optional GPIO support Linus Walleij
@ 2023-11-29 13:51 ` Linus Walleij
2023-12-13 7:13 ` Dmitry Torokhov
3 siblings, 1 reply; 11+ messages in thread
From: Linus Walleij @ 2023-11-29 13:51 UTC (permalink / raw)
To: Dmitry Torokhov, Tony Lindgren; +Cc: linux-input, Linus Walleij
This driver does not have any in-tree users but is passing a
legacy GPIO number through platform data.
Convert it to use a GPIO descriptor, new users or outoftree
users can easily be implemented using GPIO descriptor tables
or software nodes.
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
drivers/input/joystick/as5011.c | 24 +++++++++++-------------
include/linux/input/as5011.h | 1 -
2 files changed, 11 insertions(+), 14 deletions(-)
diff --git a/drivers/input/joystick/as5011.c b/drivers/input/joystick/as5011.c
index bf8b1cc0ea9c..f1822c19a289 100644
--- a/drivers/input/joystick/as5011.c
+++ b/drivers/input/joystick/as5011.c
@@ -13,7 +13,7 @@
#include <linux/i2c.h>
#include <linux/interrupt.h>
#include <linux/input.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
#include <linux/delay.h>
#include <linux/input/as5011.h>
#include <linux/slab.h>
@@ -61,7 +61,7 @@ MODULE_LICENSE("GPL");
struct as5011_device {
struct input_dev *input_dev;
struct i2c_client *i2c_client;
- unsigned int button_gpio;
+ struct gpio_desc *button_gpiod;
unsigned int button_irq;
unsigned int axis_irq;
};
@@ -114,7 +114,7 @@ static int as5011_i2c_read(struct i2c_client *client,
static irqreturn_t as5011_button_interrupt(int irq, void *dev_id)
{
struct as5011_device *as5011 = dev_id;
- int val = gpio_get_value_cansleep(as5011->button_gpio);
+ int val = gpiod_get_value_cansleep(as5011->button_gpiod);
input_report_key(as5011->input_dev, BTN_JOYSTICK, !val);
input_sync(as5011->input_dev);
@@ -248,7 +248,6 @@ static int as5011_probe(struct i2c_client *client)
as5011->i2c_client = client;
as5011->input_dev = input_dev;
- as5011->button_gpio = plat_data->button_gpio;
as5011->axis_irq = plat_data->axis_irq;
input_dev->name = "Austria Microsystem as5011 joystick";
@@ -262,18 +261,20 @@ static int as5011_probe(struct i2c_client *client)
input_set_abs_params(as5011->input_dev, ABS_Y,
AS5011_MIN_AXIS, AS5011_MAX_AXIS, AS5011_FUZZ, AS5011_FLAT);
- error = gpio_request(as5011->button_gpio, "AS5011 button");
- if (error < 0) {
- dev_err(&client->dev, "Failed to request button gpio\n");
+ as5011->button_gpiod = devm_gpiod_get(&client->dev, NULL, GPIOD_IN);
+ if (IS_ERR(as5011->button_gpiod)) {
+ error = PTR_ERR(as5011->button_gpiod);
+ dev_err(&client->dev, "Failed to request button GPIO\n");
goto err_free_mem;
}
+ gpiod_set_consumer_name(as5011->button_gpiod, "AS5011 button");
- irq = gpio_to_irq(as5011->button_gpio);
+ irq = gpiod_to_irq(as5011->button_gpiod);
if (irq < 0) {
dev_err(&client->dev,
"Failed to get irq number for button gpio\n");
error = irq;
- goto err_free_button_gpio;
+ goto err_free_mem;
}
as5011->button_irq = irq;
@@ -286,7 +287,7 @@ static int as5011_probe(struct i2c_client *client)
if (error < 0) {
dev_err(&client->dev,
"Can't allocate button irq %d\n", as5011->button_irq);
- goto err_free_button_gpio;
+ goto err_free_mem;
}
error = as5011_configure_chip(as5011, plat_data);
@@ -317,8 +318,6 @@ static int as5011_probe(struct i2c_client *client)
free_irq(as5011->axis_irq, as5011);
err_free_button_irq:
free_irq(as5011->button_irq, as5011);
-err_free_button_gpio:
- gpio_free(as5011->button_gpio);
err_free_mem:
input_free_device(input_dev);
kfree(as5011);
@@ -332,7 +331,6 @@ static void as5011_remove(struct i2c_client *client)
free_irq(as5011->axis_irq, as5011);
free_irq(as5011->button_irq, as5011);
- gpio_free(as5011->button_gpio);
input_unregister_device(as5011->input_dev);
kfree(as5011);
diff --git a/include/linux/input/as5011.h b/include/linux/input/as5011.h
index 5fba52a56cd6..5705d5de3aea 100644
--- a/include/linux/input/as5011.h
+++ b/include/linux/input/as5011.h
@@ -7,7 +7,6 @@
*/
struct as5011_platform_data {
- unsigned int button_gpio;
unsigned int axis_irq; /* irq number */
unsigned long axis_irqflags;
char xp, xn; /* threshold for x axis */
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread