diff mbox series

Input: ad7879: Drop platform data support

Message ID 20181114002254.20333-1-linus.walleij@linaro.org (mailing list archive)
State Accepted
Headers show
Series Input: ad7879: Drop platform data support | expand

Commit Message

Linus Walleij Nov. 14, 2018, 12:22 a.m. UTC
This driver supports configuration via platform data but
absolutely nothing in the upstream kernel uses it. Since this
configuration allows harmful practices such as encoding the
GPIO base for the chip, delete platform data support so that
no new platform using it gets introduced.

Also: include the right driver header, not <linux/gpio.h>.

Cc: Michael Hennerich <michael.hennerich@analog.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
 drivers/input/touchscreen/ad7879.c   | 107 +++++++++------------------
 include/linux/platform_data/ad7879.h |  42 -----------
 2 files changed, 33 insertions(+), 116 deletions(-)
 delete mode 100644 include/linux/platform_data/ad7879.h

Comments

Hennerich, Michael Nov. 14, 2018, 7:16 a.m. UTC | #1
> -----Original Message-----
> From: Linus Walleij [mailto:linus.walleij@linaro.org]
> Sent: Mittwoch, 14. November 2018 01:23
> To: Dmitry Torokhov <dmitry.torokhov@gmail.com>; linux-input@vger.kernel.org
> Cc: Linus Walleij <linus.walleij@linaro.org>; Hennerich, Michael <Michael.Hennerich@analog.com>
> Subject: [PATCH] Input: ad7879: Drop platform data support
> 
> This driver supports configuration via platform data but
> absolutely nothing in the upstream kernel uses it. Since this
> configuration allows harmful practices such as encoding the
> GPIO base for the chip, delete platform data support so that
> no new platform using it gets introduced.
> 
> Also: include the right driver header, not <linux/gpio.h>.
> 
> Cc: Michael Hennerich <michael.hennerich@analog.com>
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

Acked-by: Michael Hennerich <michael.hennerich@analog.com>

> ---
>  drivers/input/touchscreen/ad7879.c   | 107 +++++++++------------------
>  include/linux/platform_data/ad7879.h |  42 -----------
>  2 files changed, 33 insertions(+), 116 deletions(-)
>  delete mode 100644 include/linux/platform_data/ad7879.h
> 
> diff --git a/drivers/input/touchscreen/ad7879.c b/drivers/input/touchscreen/ad7879.c
> index 6bad23ee47a1..2aae880c8aa6 100644
> --- a/drivers/input/touchscreen/ad7879.c
> +++ b/drivers/input/touchscreen/ad7879.c
> @@ -29,10 +29,9 @@
>  #include <linux/property.h>
>  #include <linux/regmap.h>
>  #include <linux/slab.h>
> -#include <linux/gpio.h>
> +#include <linux/gpio/driver.h>
> 
>  #include <linux/input/touchscreen.h>
> -#include <linux/platform_data/ad7879.h>
>  #include <linux/module.h>
>  #include "ad7879.h"
> 
> @@ -452,47 +451,36 @@ static void ad7879_gpio_set_value(struct gpio_chip *chip,
>  	mutex_unlock(&ts->mutex);
>  }
> 
> -static int ad7879_gpio_add(struct ad7879 *ts,
> -			   const struct ad7879_platform_data *pdata)
> +static int ad7879_gpio_add(struct ad7879 *ts)
>  {
> -	bool gpio_export;
> -	int gpio_base;
>  	int ret = 0;
> 
> -	if (pdata) {
> -		gpio_export = pdata->gpio_export;
> -		gpio_base = pdata->gpio_base;
> -	} else {
> -		gpio_export = device_property_read_bool(ts->dev,
> -							"gpio-controller");
> -		gpio_base = -1;
> -	}
> -
>  	mutex_init(&ts->mutex);
> 
> -	if (gpio_export) {
> -		ts->gc.direction_input = ad7879_gpio_direction_input;
> -		ts->gc.direction_output = ad7879_gpio_direction_output;
> -		ts->gc.get = ad7879_gpio_get_value;
> -		ts->gc.set = ad7879_gpio_set_value;
> -		ts->gc.can_sleep = 1;
> -		ts->gc.base = gpio_base;
> -		ts->gc.ngpio = 1;
> -		ts->gc.label = "AD7879-GPIO";
> -		ts->gc.owner = THIS_MODULE;
> -		ts->gc.parent = ts->dev;
> -
> -		ret = devm_gpiochip_add_data(ts->dev, &ts->gc, ts);
> -		if (ret)
> -			dev_err(ts->dev, "failed to register gpio %d\n",
> -				ts->gc.base);
> -	}
> +	/* Do not create a chip unless flagged for it */
> +	if (!device_property_read_bool(ts->dev, "gpio-controller"))
> +		return 0;
> +
> +	ts->gc.direction_input = ad7879_gpio_direction_input;
> +	ts->gc.direction_output = ad7879_gpio_direction_output;
> +	ts->gc.get = ad7879_gpio_get_value;
> +	ts->gc.set = ad7879_gpio_set_value;
> +	ts->gc.can_sleep = 1;
> +	ts->gc.base = -1;
> +	ts->gc.ngpio = 1;
> +	ts->gc.label = "AD7879-GPIO";
> +	ts->gc.owner = THIS_MODULE;
> +	ts->gc.parent = ts->dev;
> +
> +	ret = devm_gpiochip_add_data(ts->dev, &ts->gc, ts);
> +	if (ret)
> +		dev_err(ts->dev, "failed to register gpio %d\n",
> +			ts->gc.base);
> 
>  	return ret;
>  }
>  #else
> -static int ad7879_gpio_add(struct ad7879 *ts,
> -			   const struct ad7879_platform_data *pdata)
> +static int ad7879_gpio_add(struct ad7879 *ts)
>  {
>  	return 0;
>  }
> @@ -527,7 +515,6 @@ static int ad7879_parse_dt(struct device *dev, struct ad7879 *ts)
>  int ad7879_probe(struct device *dev, struct regmap *regmap,
>  		 int irq, u16 bustype, u8 devid)
>  {
> -	struct ad7879_platform_data *pdata = dev_get_platdata(dev);
>  	struct ad7879 *ts;
>  	struct input_dev *input_dev;
>  	int err;
> @@ -542,22 +529,9 @@ int ad7879_probe(struct device *dev, struct regmap *regmap,
>  	if (!ts)
>  		return -ENOMEM;
> 
> -	if (pdata) {
> -		/* Platform data use swapped axis (backward compatibility) */
> -		ts->swap_xy = !pdata->swap_xy;
> -
> -		ts->x_plate_ohms = pdata->x_plate_ohms ? : 400;
> -
> -		ts->first_conversion_delay = pdata->first_conversion_delay;
> -		ts->acquisition_time = pdata->acquisition_time;
> -		ts->averaging = pdata->averaging;
> -		ts->pen_down_acc_interval = pdata->pen_down_acc_interval;
> -		ts->median = pdata->median;
> -	} else {
> -		err = ad7879_parse_dt(dev, ts);
> -		if (err)
> -			return err;
> -	}
> +	err = ad7879_parse_dt(dev, ts);
> +	if (err)
> +		return err;
> 
>  	input_dev = devm_input_allocate_device(dev);
>  	if (!input_dev) {
> @@ -585,28 +559,13 @@ int ad7879_probe(struct device *dev, struct regmap *regmap,
> 
>  	input_set_capability(input_dev, EV_KEY, BTN_TOUCH);
> 
> -	if (pdata) {
> -		input_set_abs_params(input_dev, ABS_X,
> -				pdata->x_min ? : 0,
> -				pdata->x_max ? : MAX_12BIT,
> -				0, 0);
> -		input_set_abs_params(input_dev, ABS_Y,
> -				pdata->y_min ? : 0,
> -				pdata->y_max ? : MAX_12BIT,
> -				0, 0);
> -		input_set_abs_params(input_dev, ABS_PRESSURE,
> -				pdata->pressure_min,
> -				pdata->pressure_max ? : ~0,
> -				0, 0);
> -	} else {
> -		input_set_abs_params(input_dev, ABS_X, 0, MAX_12BIT, 0, 0);
> -		input_set_abs_params(input_dev, ABS_Y, 0, MAX_12BIT, 0, 0);
> -		input_set_capability(input_dev, EV_ABS, ABS_PRESSURE);
> -		touchscreen_parse_properties(input_dev, false, NULL);
> -		if (!input_abs_get_max(input_dev, ABS_PRESSURE)) {
> -			dev_err(dev, "Touchscreen pressure is not specified\n");
> -			return -EINVAL;
> -		}
> +	input_set_abs_params(input_dev, ABS_X, 0, MAX_12BIT, 0, 0);
> +	input_set_abs_params(input_dev, ABS_Y, 0, MAX_12BIT, 0, 0);
> +	input_set_capability(input_dev, EV_ABS, ABS_PRESSURE);
> +	touchscreen_parse_properties(input_dev, false, NULL);
> +	if (!input_abs_get_max(input_dev, ABS_PRESSURE)) {
> +		dev_err(dev, "Touchscreen pressure is not specified\n");
> +		return -EINVAL;
>  	}
> 
>  	err = ad7879_write(ts, AD7879_REG_CTRL2, AD7879_RESET);
> @@ -655,7 +614,7 @@ int ad7879_probe(struct device *dev, struct regmap *regmap,
>  	if (err)
>  		return err;
> 
> -	err = ad7879_gpio_add(ts, pdata);
> +	err = ad7879_gpio_add(ts);
>  	if (err)
>  		return err;
> 
> diff --git a/include/linux/platform_data/ad7879.h b/include/linux/platform_data/ad7879.h
> deleted file mode 100644
> index 6655cc8453ac..000000000000
> --- a/include/linux/platform_data/ad7879.h
> +++ /dev/null
> @@ -1,42 +0,0 @@
> -/* SPDX-License-Identifier: GPL-2.0 */
> -/* linux/platform_data/ad7879.h */
> -
> -/* Touchscreen characteristics vary between boards and models.  The
> - * platform_data for the device's "struct device" holds this information.
> - *
> - * It's OK if the min/max values are zero.
> - */
> -struct ad7879_platform_data {
> -	u16	model;			/* 7879 */
> -	u16	x_plate_ohms;
> -	u16	x_min, x_max;
> -	u16	y_min, y_max;
> -	u16	pressure_min, pressure_max;
> -
> -	bool	swap_xy;		/* swap x and y axes */
> -
> -	/* [0..255] 0=OFF Starts at 1=550us and goes
> -	 * all the way to 9.440ms in steps of 35us.
> -	 */
> -	u8	pen_down_acc_interval;
> -	/* [0..15] Starts at 0=128us and goes all the
> -	 * way to 4.096ms in steps of 128us.
> -	 */
> -	u8	first_conversion_delay;
> -	/* [0..3] 0 = 2us, 1 = 4us, 2 = 8us, 3 = 16us */
> -	u8	acquisition_time;
> -	/* [0..3] Average X middle samples 0 = 2, 1 = 4, 2 = 8, 3 = 16 */
> -	u8	averaging;
> -	/* [0..3] Perform X measurements 0 = OFF,
> -	 * 1 = 4, 2 = 8, 3 = 16 (median > averaging)
> -	 */
> -	u8	median;
> -	/* 1 = AUX/VBAT/GPIO export GPIO to gpiolib
> -	 * requires CONFIG_GPIOLIB
> -	 */
> -	bool	gpio_export;
> -	/* identifies the first GPIO number handled by this chip;
> -	 * or, if negative, requests dynamic ID allocation.
> -	 */
> -	s32	gpio_base;
> -};
> --
> 2.17.2
>
Dmitry Torokhov Nov. 15, 2018, 5:51 p.m. UTC | #2
On Wed, Nov 14, 2018 at 07:16:46AM +0000, Hennerich, Michael wrote:
> 
> 
> > -----Original Message-----
> > From: Linus Walleij [mailto:linus.walleij@linaro.org]
> > Sent: Mittwoch, 14. November 2018 01:23
> > To: Dmitry Torokhov <dmitry.torokhov@gmail.com>; linux-input@vger.kernel.org
> > Cc: Linus Walleij <linus.walleij@linaro.org>; Hennerich, Michael <Michael.Hennerich@analog.com>
> > Subject: [PATCH] Input: ad7879: Drop platform data support
> > 
> > This driver supports configuration via platform data but
> > absolutely nothing in the upstream kernel uses it. Since this
> > configuration allows harmful practices such as encoding the
> > GPIO base for the chip, delete platform data support so that
> > no new platform using it gets introduced.
> > 
> > Also: include the right driver header, not <linux/gpio.h>.
> > 
> > Cc: Michael Hennerich <michael.hennerich@analog.com>
> > Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
> 
> Acked-by: Michael Hennerich <michael.hennerich@analog.com>

Applied, thank you.

> 
> > ---
> >  drivers/input/touchscreen/ad7879.c   | 107 +++++++++------------------
> >  include/linux/platform_data/ad7879.h |  42 -----------
> >  2 files changed, 33 insertions(+), 116 deletions(-)
> >  delete mode 100644 include/linux/platform_data/ad7879.h
> > 
> > diff --git a/drivers/input/touchscreen/ad7879.c b/drivers/input/touchscreen/ad7879.c
> > index 6bad23ee47a1..2aae880c8aa6 100644
> > --- a/drivers/input/touchscreen/ad7879.c
> > +++ b/drivers/input/touchscreen/ad7879.c
> > @@ -29,10 +29,9 @@
> >  #include <linux/property.h>
> >  #include <linux/regmap.h>
> >  #include <linux/slab.h>
> > -#include <linux/gpio.h>
> > +#include <linux/gpio/driver.h>
> > 
> >  #include <linux/input/touchscreen.h>
> > -#include <linux/platform_data/ad7879.h>
> >  #include <linux/module.h>
> >  #include "ad7879.h"
> > 
> > @@ -452,47 +451,36 @@ static void ad7879_gpio_set_value(struct gpio_chip *chip,
> >  	mutex_unlock(&ts->mutex);
> >  }
> > 
> > -static int ad7879_gpio_add(struct ad7879 *ts,
> > -			   const struct ad7879_platform_data *pdata)
> > +static int ad7879_gpio_add(struct ad7879 *ts)
> >  {
> > -	bool gpio_export;
> > -	int gpio_base;
> >  	int ret = 0;
> > 
> > -	if (pdata) {
> > -		gpio_export = pdata->gpio_export;
> > -		gpio_base = pdata->gpio_base;
> > -	} else {
> > -		gpio_export = device_property_read_bool(ts->dev,
> > -							"gpio-controller");
> > -		gpio_base = -1;
> > -	}
> > -
> >  	mutex_init(&ts->mutex);
> > 
> > -	if (gpio_export) {
> > -		ts->gc.direction_input = ad7879_gpio_direction_input;
> > -		ts->gc.direction_output = ad7879_gpio_direction_output;
> > -		ts->gc.get = ad7879_gpio_get_value;
> > -		ts->gc.set = ad7879_gpio_set_value;
> > -		ts->gc.can_sleep = 1;
> > -		ts->gc.base = gpio_base;
> > -		ts->gc.ngpio = 1;
> > -		ts->gc.label = "AD7879-GPIO";
> > -		ts->gc.owner = THIS_MODULE;
> > -		ts->gc.parent = ts->dev;
> > -
> > -		ret = devm_gpiochip_add_data(ts->dev, &ts->gc, ts);
> > -		if (ret)
> > -			dev_err(ts->dev, "failed to register gpio %d\n",
> > -				ts->gc.base);
> > -	}
> > +	/* Do not create a chip unless flagged for it */
> > +	if (!device_property_read_bool(ts->dev, "gpio-controller"))
> > +		return 0;
> > +
> > +	ts->gc.direction_input = ad7879_gpio_direction_input;
> > +	ts->gc.direction_output = ad7879_gpio_direction_output;
> > +	ts->gc.get = ad7879_gpio_get_value;
> > +	ts->gc.set = ad7879_gpio_set_value;
> > +	ts->gc.can_sleep = 1;
> > +	ts->gc.base = -1;
> > +	ts->gc.ngpio = 1;
> > +	ts->gc.label = "AD7879-GPIO";
> > +	ts->gc.owner = THIS_MODULE;
> > +	ts->gc.parent = ts->dev;
> > +
> > +	ret = devm_gpiochip_add_data(ts->dev, &ts->gc, ts);
> > +	if (ret)
> > +		dev_err(ts->dev, "failed to register gpio %d\n",
> > +			ts->gc.base);
> > 
> >  	return ret;
> >  }
> >  #else
> > -static int ad7879_gpio_add(struct ad7879 *ts,
> > -			   const struct ad7879_platform_data *pdata)
> > +static int ad7879_gpio_add(struct ad7879 *ts)
> >  {
> >  	return 0;
> >  }
> > @@ -527,7 +515,6 @@ static int ad7879_parse_dt(struct device *dev, struct ad7879 *ts)
> >  int ad7879_probe(struct device *dev, struct regmap *regmap,
> >  		 int irq, u16 bustype, u8 devid)
> >  {
> > -	struct ad7879_platform_data *pdata = dev_get_platdata(dev);
> >  	struct ad7879 *ts;
> >  	struct input_dev *input_dev;
> >  	int err;
> > @@ -542,22 +529,9 @@ int ad7879_probe(struct device *dev, struct regmap *regmap,
> >  	if (!ts)
> >  		return -ENOMEM;
> > 
> > -	if (pdata) {
> > -		/* Platform data use swapped axis (backward compatibility) */
> > -		ts->swap_xy = !pdata->swap_xy;
> > -
> > -		ts->x_plate_ohms = pdata->x_plate_ohms ? : 400;
> > -
> > -		ts->first_conversion_delay = pdata->first_conversion_delay;
> > -		ts->acquisition_time = pdata->acquisition_time;
> > -		ts->averaging = pdata->averaging;
> > -		ts->pen_down_acc_interval = pdata->pen_down_acc_interval;
> > -		ts->median = pdata->median;
> > -	} else {
> > -		err = ad7879_parse_dt(dev, ts);
> > -		if (err)
> > -			return err;
> > -	}
> > +	err = ad7879_parse_dt(dev, ts);
> > +	if (err)
> > +		return err;
> > 
> >  	input_dev = devm_input_allocate_device(dev);
> >  	if (!input_dev) {
> > @@ -585,28 +559,13 @@ int ad7879_probe(struct device *dev, struct regmap *regmap,
> > 
> >  	input_set_capability(input_dev, EV_KEY, BTN_TOUCH);
> > 
> > -	if (pdata) {
> > -		input_set_abs_params(input_dev, ABS_X,
> > -				pdata->x_min ? : 0,
> > -				pdata->x_max ? : MAX_12BIT,
> > -				0, 0);
> > -		input_set_abs_params(input_dev, ABS_Y,
> > -				pdata->y_min ? : 0,
> > -				pdata->y_max ? : MAX_12BIT,
> > -				0, 0);
> > -		input_set_abs_params(input_dev, ABS_PRESSURE,
> > -				pdata->pressure_min,
> > -				pdata->pressure_max ? : ~0,
> > -				0, 0);
> > -	} else {
> > -		input_set_abs_params(input_dev, ABS_X, 0, MAX_12BIT, 0, 0);
> > -		input_set_abs_params(input_dev, ABS_Y, 0, MAX_12BIT, 0, 0);
> > -		input_set_capability(input_dev, EV_ABS, ABS_PRESSURE);
> > -		touchscreen_parse_properties(input_dev, false, NULL);
> > -		if (!input_abs_get_max(input_dev, ABS_PRESSURE)) {
> > -			dev_err(dev, "Touchscreen pressure is not specified\n");
> > -			return -EINVAL;
> > -		}
> > +	input_set_abs_params(input_dev, ABS_X, 0, MAX_12BIT, 0, 0);
> > +	input_set_abs_params(input_dev, ABS_Y, 0, MAX_12BIT, 0, 0);
> > +	input_set_capability(input_dev, EV_ABS, ABS_PRESSURE);
> > +	touchscreen_parse_properties(input_dev, false, NULL);
> > +	if (!input_abs_get_max(input_dev, ABS_PRESSURE)) {
> > +		dev_err(dev, "Touchscreen pressure is not specified\n");
> > +		return -EINVAL;
> >  	}
> > 
> >  	err = ad7879_write(ts, AD7879_REG_CTRL2, AD7879_RESET);
> > @@ -655,7 +614,7 @@ int ad7879_probe(struct device *dev, struct regmap *regmap,
> >  	if (err)
> >  		return err;
> > 
> > -	err = ad7879_gpio_add(ts, pdata);
> > +	err = ad7879_gpio_add(ts);
> >  	if (err)
> >  		return err;
> > 
> > diff --git a/include/linux/platform_data/ad7879.h b/include/linux/platform_data/ad7879.h
> > deleted file mode 100644
> > index 6655cc8453ac..000000000000
> > --- a/include/linux/platform_data/ad7879.h
> > +++ /dev/null
> > @@ -1,42 +0,0 @@
> > -/* SPDX-License-Identifier: GPL-2.0 */
> > -/* linux/platform_data/ad7879.h */
> > -
> > -/* Touchscreen characteristics vary between boards and models.  The
> > - * platform_data for the device's "struct device" holds this information.
> > - *
> > - * It's OK if the min/max values are zero.
> > - */
> > -struct ad7879_platform_data {
> > -	u16	model;			/* 7879 */
> > -	u16	x_plate_ohms;
> > -	u16	x_min, x_max;
> > -	u16	y_min, y_max;
> > -	u16	pressure_min, pressure_max;
> > -
> > -	bool	swap_xy;		/* swap x and y axes */
> > -
> > -	/* [0..255] 0=OFF Starts at 1=550us and goes
> > -	 * all the way to 9.440ms in steps of 35us.
> > -	 */
> > -	u8	pen_down_acc_interval;
> > -	/* [0..15] Starts at 0=128us and goes all the
> > -	 * way to 4.096ms in steps of 128us.
> > -	 */
> > -	u8	first_conversion_delay;
> > -	/* [0..3] 0 = 2us, 1 = 4us, 2 = 8us, 3 = 16us */
> > -	u8	acquisition_time;
> > -	/* [0..3] Average X middle samples 0 = 2, 1 = 4, 2 = 8, 3 = 16 */
> > -	u8	averaging;
> > -	/* [0..3] Perform X measurements 0 = OFF,
> > -	 * 1 = 4, 2 = 8, 3 = 16 (median > averaging)
> > -	 */
> > -	u8	median;
> > -	/* 1 = AUX/VBAT/GPIO export GPIO to gpiolib
> > -	 * requires CONFIG_GPIOLIB
> > -	 */
> > -	bool	gpio_export;
> > -	/* identifies the first GPIO number handled by this chip;
> > -	 * or, if negative, requests dynamic ID allocation.
> > -	 */
> > -	s32	gpio_base;
> > -};
> > --
> > 2.17.2
> > 
>
diff mbox series

Patch

diff --git a/drivers/input/touchscreen/ad7879.c b/drivers/input/touchscreen/ad7879.c
index 6bad23ee47a1..2aae880c8aa6 100644
--- a/drivers/input/touchscreen/ad7879.c
+++ b/drivers/input/touchscreen/ad7879.c
@@ -29,10 +29,9 @@ 
 #include <linux/property.h>
 #include <linux/regmap.h>
 #include <linux/slab.h>
-#include <linux/gpio.h>
+#include <linux/gpio/driver.h>
 
 #include <linux/input/touchscreen.h>
-#include <linux/platform_data/ad7879.h>
 #include <linux/module.h>
 #include "ad7879.h"
 
@@ -452,47 +451,36 @@  static void ad7879_gpio_set_value(struct gpio_chip *chip,
 	mutex_unlock(&ts->mutex);
 }
 
-static int ad7879_gpio_add(struct ad7879 *ts,
-			   const struct ad7879_platform_data *pdata)
+static int ad7879_gpio_add(struct ad7879 *ts)
 {
-	bool gpio_export;
-	int gpio_base;
 	int ret = 0;
 
-	if (pdata) {
-		gpio_export = pdata->gpio_export;
-		gpio_base = pdata->gpio_base;
-	} else {
-		gpio_export = device_property_read_bool(ts->dev,
-							"gpio-controller");
-		gpio_base = -1;
-	}
-
 	mutex_init(&ts->mutex);
 
-	if (gpio_export) {
-		ts->gc.direction_input = ad7879_gpio_direction_input;
-		ts->gc.direction_output = ad7879_gpio_direction_output;
-		ts->gc.get = ad7879_gpio_get_value;
-		ts->gc.set = ad7879_gpio_set_value;
-		ts->gc.can_sleep = 1;
-		ts->gc.base = gpio_base;
-		ts->gc.ngpio = 1;
-		ts->gc.label = "AD7879-GPIO";
-		ts->gc.owner = THIS_MODULE;
-		ts->gc.parent = ts->dev;
-
-		ret = devm_gpiochip_add_data(ts->dev, &ts->gc, ts);
-		if (ret)
-			dev_err(ts->dev, "failed to register gpio %d\n",
-				ts->gc.base);
-	}
+	/* Do not create a chip unless flagged for it */
+	if (!device_property_read_bool(ts->dev, "gpio-controller"))
+		return 0;
+
+	ts->gc.direction_input = ad7879_gpio_direction_input;
+	ts->gc.direction_output = ad7879_gpio_direction_output;
+	ts->gc.get = ad7879_gpio_get_value;
+	ts->gc.set = ad7879_gpio_set_value;
+	ts->gc.can_sleep = 1;
+	ts->gc.base = -1;
+	ts->gc.ngpio = 1;
+	ts->gc.label = "AD7879-GPIO";
+	ts->gc.owner = THIS_MODULE;
+	ts->gc.parent = ts->dev;
+
+	ret = devm_gpiochip_add_data(ts->dev, &ts->gc, ts);
+	if (ret)
+		dev_err(ts->dev, "failed to register gpio %d\n",
+			ts->gc.base);
 
 	return ret;
 }
 #else
-static int ad7879_gpio_add(struct ad7879 *ts,
-			   const struct ad7879_platform_data *pdata)
+static int ad7879_gpio_add(struct ad7879 *ts)
 {
 	return 0;
 }
@@ -527,7 +515,6 @@  static int ad7879_parse_dt(struct device *dev, struct ad7879 *ts)
 int ad7879_probe(struct device *dev, struct regmap *regmap,
 		 int irq, u16 bustype, u8 devid)
 {
-	struct ad7879_platform_data *pdata = dev_get_platdata(dev);
 	struct ad7879 *ts;
 	struct input_dev *input_dev;
 	int err;
@@ -542,22 +529,9 @@  int ad7879_probe(struct device *dev, struct regmap *regmap,
 	if (!ts)
 		return -ENOMEM;
 
-	if (pdata) {
-		/* Platform data use swapped axis (backward compatibility) */
-		ts->swap_xy = !pdata->swap_xy;
-
-		ts->x_plate_ohms = pdata->x_plate_ohms ? : 400;
-
-		ts->first_conversion_delay = pdata->first_conversion_delay;
-		ts->acquisition_time = pdata->acquisition_time;
-		ts->averaging = pdata->averaging;
-		ts->pen_down_acc_interval = pdata->pen_down_acc_interval;
-		ts->median = pdata->median;
-	} else {
-		err = ad7879_parse_dt(dev, ts);
-		if (err)
-			return err;
-	}
+	err = ad7879_parse_dt(dev, ts);
+	if (err)
+		return err;
 
 	input_dev = devm_input_allocate_device(dev);
 	if (!input_dev) {
@@ -585,28 +559,13 @@  int ad7879_probe(struct device *dev, struct regmap *regmap,
 
 	input_set_capability(input_dev, EV_KEY, BTN_TOUCH);
 
-	if (pdata) {
-		input_set_abs_params(input_dev, ABS_X,
-				pdata->x_min ? : 0,
-				pdata->x_max ? : MAX_12BIT,
-				0, 0);
-		input_set_abs_params(input_dev, ABS_Y,
-				pdata->y_min ? : 0,
-				pdata->y_max ? : MAX_12BIT,
-				0, 0);
-		input_set_abs_params(input_dev, ABS_PRESSURE,
-				pdata->pressure_min,
-				pdata->pressure_max ? : ~0,
-				0, 0);
-	} else {
-		input_set_abs_params(input_dev, ABS_X, 0, MAX_12BIT, 0, 0);
-		input_set_abs_params(input_dev, ABS_Y, 0, MAX_12BIT, 0, 0);
-		input_set_capability(input_dev, EV_ABS, ABS_PRESSURE);
-		touchscreen_parse_properties(input_dev, false, NULL);
-		if (!input_abs_get_max(input_dev, ABS_PRESSURE)) {
-			dev_err(dev, "Touchscreen pressure is not specified\n");
-			return -EINVAL;
-		}
+	input_set_abs_params(input_dev, ABS_X, 0, MAX_12BIT, 0, 0);
+	input_set_abs_params(input_dev, ABS_Y, 0, MAX_12BIT, 0, 0);
+	input_set_capability(input_dev, EV_ABS, ABS_PRESSURE);
+	touchscreen_parse_properties(input_dev, false, NULL);
+	if (!input_abs_get_max(input_dev, ABS_PRESSURE)) {
+		dev_err(dev, "Touchscreen pressure is not specified\n");
+		return -EINVAL;
 	}
 
 	err = ad7879_write(ts, AD7879_REG_CTRL2, AD7879_RESET);
@@ -655,7 +614,7 @@  int ad7879_probe(struct device *dev, struct regmap *regmap,
 	if (err)
 		return err;
 
-	err = ad7879_gpio_add(ts, pdata);
+	err = ad7879_gpio_add(ts);
 	if (err)
 		return err;
 
diff --git a/include/linux/platform_data/ad7879.h b/include/linux/platform_data/ad7879.h
deleted file mode 100644
index 6655cc8453ac..000000000000
--- a/include/linux/platform_data/ad7879.h
+++ /dev/null
@@ -1,42 +0,0 @@ 
-/* SPDX-License-Identifier: GPL-2.0 */
-/* linux/platform_data/ad7879.h */
-
-/* Touchscreen characteristics vary between boards and models.  The
- * platform_data for the device's "struct device" holds this information.
- *
- * It's OK if the min/max values are zero.
- */
-struct ad7879_platform_data {
-	u16	model;			/* 7879 */
-	u16	x_plate_ohms;
-	u16	x_min, x_max;
-	u16	y_min, y_max;
-	u16	pressure_min, pressure_max;
-
-	bool	swap_xy;		/* swap x and y axes */
-
-	/* [0..255] 0=OFF Starts at 1=550us and goes
-	 * all the way to 9.440ms in steps of 35us.
-	 */
-	u8	pen_down_acc_interval;
-	/* [0..15] Starts at 0=128us and goes all the
-	 * way to 4.096ms in steps of 128us.
-	 */
-	u8	first_conversion_delay;
-	/* [0..3] 0 = 2us, 1 = 4us, 2 = 8us, 3 = 16us */
-	u8	acquisition_time;
-	/* [0..3] Average X middle samples 0 = 2, 1 = 4, 2 = 8, 3 = 16 */
-	u8	averaging;
-	/* [0..3] Perform X measurements 0 = OFF,
-	 * 1 = 4, 2 = 8, 3 = 16 (median > averaging)
-	 */
-	u8	median;
-	/* 1 = AUX/VBAT/GPIO export GPIO to gpiolib
-	 * requires CONFIG_GPIOLIB
-	 */
-	bool	gpio_export;
-	/* identifies the first GPIO number handled by this chip;
-	 * or, if negative, requests dynamic ID allocation.
-	 */
-	s32	gpio_base;
-};