Re: [PATCH] Input: ad7879: Drop platform data support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Nov 14, 2018 at 07:16:46AM +0000, Hennerich, Michael wrote:
> 
> 
> > -----Original Message-----
> > From: Linus Walleij [mailto:linus.walleij@xxxxxxxxxx]
> > Sent: Mittwoch, 14. November 2018 01:23
> > To: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx>; linux-input@xxxxxxxxxxxxxxx
> > Cc: Linus Walleij <linus.walleij@xxxxxxxxxx>; Hennerich, Michael <Michael.Hennerich@xxxxxxxxxx>
> > 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@xxxxxxxxxx>
> > Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx>
> 
> Acked-by: Michael Hennerich <michael.hennerich@xxxxxxxxxx>

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
> > 
> 

-- 
Dmitry



[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux