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

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

 




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

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





[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