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