All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/4] Input: ad7879 - make sure we set up drvdata
@ 2017-02-28 22:08 Dmitry Torokhov
  2017-02-28 22:08 ` [PATCH 2/4] Input: ad7879 - return plain error code from ad7879_probe() Dmitry Torokhov
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Dmitry Torokhov @ 2017-02-28 22:08 UTC (permalink / raw)
  To: Michael Hennerich; +Cc: linux-input, linux-kernel

The conversion to devm accidentally removed setting up of I2C client data
upon successful probe of the touchscreen. Let's move this setting into the
core, so we do not forger about it again.

Fixes: 381f688eee3d ("Input: ad7879 - use more devm interfaces")
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
 drivers/input/touchscreen/ad7879-spi.c | 2 --
 drivers/input/touchscreen/ad7879.c     | 2 ++
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/input/touchscreen/ad7879-spi.c b/drivers/input/touchscreen/ad7879-spi.c
index c73798297b98..59486ccba37d 100644
--- a/drivers/input/touchscreen/ad7879-spi.c
+++ b/drivers/input/touchscreen/ad7879-spi.c
@@ -49,8 +49,6 @@ static int ad7879_spi_probe(struct spi_device *spi)
 	if (IS_ERR(ts))
 		return PTR_ERR(ts);
 
-	spi_set_drvdata(spi, ts);
-
 	return 0;
 }
 
diff --git a/drivers/input/touchscreen/ad7879.c b/drivers/input/touchscreen/ad7879.c
index 1bd870277e1a..52daaa4edc67 100644
--- a/drivers/input/touchscreen/ad7879.c
+++ b/drivers/input/touchscreen/ad7879.c
@@ -680,6 +680,8 @@ struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
 	if (err)
 		return ERR_PTR(err);
 
+	dev_set_drvdata(dev, ts);
+
 	return 0;
 }
 EXPORT_SYMBOL(ad7879_probe);
-- 
2.11.0.483.g087da7b7c-goog

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/4] Input: ad7879 - return plain error code from ad7879_probe()
  2017-02-28 22:08 [PATCH 1/4] Input: ad7879 - make sure we set up drvdata Dmitry Torokhov
@ 2017-02-28 22:08 ` Dmitry Torokhov
  2017-03-01  7:40   ` Michael Hennerich
  2017-02-28 22:08 ` [PATCH 3/4] Input: ad7879 - try parsing properties on non-DT systems Dmitry Torokhov
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Dmitry Torokhov @ 2017-02-28 22:08 UTC (permalink / raw)
  To: Michael Hennerich; +Cc: linux-input, linux-kernel

With the switch to devm, there is no need for ad7879_probe() to return the
touchscreen structure, we can use plain error code. This also fixes issue
introduced with devm concersion, where we returned 0 on success (which
worked OK since IS_ERR(0) would not trigger, but was not correct
regardless).

Fixes: 381f688eee3d ("Input: ad7879 - use more devm interfaces")
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
 drivers/input/touchscreen/ad7879-i2c.c |  9 ++-------
 drivers/input/touchscreen/ad7879-spi.c |  7 +------
 drivers/input/touchscreen/ad7879.c     | 28 ++++++++++++++--------------
 drivers/input/touchscreen/ad7879.h     |  5 ++---
 4 files changed, 19 insertions(+), 30 deletions(-)

diff --git a/drivers/input/touchscreen/ad7879-i2c.c b/drivers/input/touchscreen/ad7879-i2c.c
index a282d1c9e2c6..49b902b10c5f 100644
--- a/drivers/input/touchscreen/ad7879-i2c.c
+++ b/drivers/input/touchscreen/ad7879-i2c.c
@@ -27,7 +27,6 @@ static const struct regmap_config ad7879_i2c_regmap_config = {
 static int ad7879_i2c_probe(struct i2c_client *client,
 				      const struct i2c_device_id *id)
 {
-	struct ad7879 *ts;
 	struct regmap *regmap;
 
 	if (!i2c_check_functionality(client->adapter,
@@ -40,12 +39,8 @@ static int ad7879_i2c_probe(struct i2c_client *client,
 	if (IS_ERR(regmap))
 		return PTR_ERR(regmap);
 
-	ts = ad7879_probe(&client->dev, regmap, client->irq,
-			  BUS_I2C, AD7879_DEVID);
-	if (IS_ERR(ts))
-		return PTR_ERR(ts);
-
-	return 0;
+	return ad7879_probe(&client->dev, regmap, client->irq,
+			    BUS_I2C, AD7879_DEVID);
 }
 
 static const struct i2c_device_id ad7879_id[] = {
diff --git a/drivers/input/touchscreen/ad7879-spi.c b/drivers/input/touchscreen/ad7879-spi.c
index 59486ccba37d..3457a5626d75 100644
--- a/drivers/input/touchscreen/ad7879-spi.c
+++ b/drivers/input/touchscreen/ad7879-spi.c
@@ -32,7 +32,6 @@ static const struct regmap_config ad7879_spi_regmap_config = {
 
 static int ad7879_spi_probe(struct spi_device *spi)
 {
-	struct ad7879 *ts;
 	struct regmap *regmap;
 
 	/* don't exceed max specified SPI CLK frequency */
@@ -45,11 +44,7 @@ static int ad7879_spi_probe(struct spi_device *spi)
 	if (IS_ERR(regmap))
 		return PTR_ERR(regmap);
 
-	ts = ad7879_probe(&spi->dev, regmap, spi->irq, BUS_SPI, AD7879_DEVID);
-	if (IS_ERR(ts))
-		return PTR_ERR(ts);
-
-	return 0;
+	return ad7879_probe(&spi->dev, regmap, spi->irq, BUS_SPI, AD7879_DEVID);
 }
 
 #ifdef CONFIG_OF
diff --git a/drivers/input/touchscreen/ad7879.c b/drivers/input/touchscreen/ad7879.c
index 52daaa4edc67..7118f611e222 100644
--- a/drivers/input/touchscreen/ad7879.c
+++ b/drivers/input/touchscreen/ad7879.c
@@ -531,8 +531,8 @@ static void ad7879_cleanup_sysfs(void *_ts)
 	sysfs_remove_group(&ts->dev->kobj, &ad7879_attr_group);
 }
 
-struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
-			    int irq, u16 bustype, u8 devid)
+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;
@@ -542,12 +542,12 @@ struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
 
 	if (irq <= 0) {
 		dev_err(dev, "No IRQ specified\n");
-		return ERR_PTR(-EINVAL);
+		return -EINVAL;
 	}
 
 	ts = devm_kzalloc(dev, sizeof(*ts), GFP_KERNEL);
 	if (!ts)
-		return ERR_PTR(-ENOMEM);
+		return -ENOMEM;
 
 	if (pdata) {
 		/* Platform data use swapped axis (backward compatibility) */
@@ -564,13 +564,13 @@ struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
 		ad7879_parse_dt(dev, ts);
 	} else {
 		dev_err(dev, "No platform data\n");
-		return ERR_PTR(-EINVAL);
+		return -EINVAL;
 	}
 
 	input_dev = devm_input_allocate_device(dev);
 	if (!input_dev) {
 		dev_err(dev, "Failed to allocate input device\n");
-		return ERR_PTR(-ENOMEM);
+		return -ENOMEM;
 	}
 
 	ts->dev = dev;
@@ -618,14 +618,14 @@ struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
 		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 ERR_PTR(-EINVAL);
+			return -EINVAL;
 		}
 	}
 
 	err = ad7879_write(ts, AD7879_REG_CTRL2, AD7879_RESET);
 	if (err < 0) {
 		dev_err(dev, "Failed to write %s\n", input_dev->name);
-		return ERR_PTR(err);
+		return err;
 	}
 
 	revid = ad7879_read(ts, AD7879_REG_REVID);
@@ -634,7 +634,7 @@ struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
 	if (input_dev->id.product != devid) {
 		dev_err(dev, "Failed to probe %s (%x vs %x)\n",
 			input_dev->name, devid, revid);
-		return ERR_PTR(-ENODEV);
+		return -ENODEV;
 	}
 
 	ts->cmd_crtl3 = AD7879_YPLUS_BIT |
@@ -659,26 +659,26 @@ struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
 					dev_name(dev), ts);
 	if (err) {
 		dev_err(dev, "Failed to request IRQ: %d\n", err);
-		return ERR_PTR(err);
+		return err;
 	}
 
 	__ad7879_disable(ts);
 
 	err = sysfs_create_group(&dev->kobj, &ad7879_attr_group);
 	if (err)
-		return ERR_PTR(err);
+		return err;
 
 	err = devm_add_action_or_reset(dev, ad7879_cleanup_sysfs, ts);
 	if (err)
-		return ERR_PTR(err);
+		return err;
 
 	err = ad7879_gpio_add(ts, pdata);
 	if (err)
-		return ERR_PTR(err);
+		return err;
 
 	err = input_register_device(input_dev);
 	if (err)
-		return ERR_PTR(err);
+		return err;
 
 	dev_set_drvdata(dev, ts);
 
diff --git a/drivers/input/touchscreen/ad7879.h b/drivers/input/touchscreen/ad7879.h
index d3d2e9dc31ae..7e43066a4b68 100644
--- a/drivers/input/touchscreen/ad7879.h
+++ b/drivers/input/touchscreen/ad7879.h
@@ -11,13 +11,12 @@
 
 #include <linux/types.h>
 
-struct ad7879;
 struct device;
 struct regmap;
 
 extern const struct dev_pm_ops ad7879_pm_ops;
 
-struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
-			    int irq, u16 bustype, u8 devid);
+int ad7879_probe(struct device *dev, struct regmap *regmap,
+		 int irq, u16 bustype, u8 devid);
 
 #endif
-- 
2.11.0.483.g087da7b7c-goog

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/4] Input: ad7879 - try parsing properties on non-DT systems
  2017-02-28 22:08 [PATCH 1/4] Input: ad7879 - make sure we set up drvdata Dmitry Torokhov
  2017-02-28 22:08 ` [PATCH 2/4] Input: ad7879 - return plain error code from ad7879_probe() Dmitry Torokhov
@ 2017-02-28 22:08 ` Dmitry Torokhov
  2017-03-01  7:38   ` Michael Hennerich
  2017-02-28 22:08 ` [PATCH 4/4] Input: ad7879 - do not manipulate capability bits directly Dmitry Torokhov
  2017-03-01  7:40 ` [PATCH 1/4] Input: ad7879 - make sure we set up drvdata Michael Hennerich
  3 siblings, 1 reply; 8+ messages in thread
From: Dmitry Torokhov @ 2017-02-28 22:08 UTC (permalink / raw)
  To: Michael Hennerich; +Cc: linux-input, linux-kernel

We have switched the driver to use generic device properties API, so there
is no need to check for presence of DT node before trying parse properties.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
 drivers/input/touchscreen/ad7879.c | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/input/touchscreen/ad7879.c b/drivers/input/touchscreen/ad7879.c
index 7118f611e222..c415614ada68 100644
--- a/drivers/input/touchscreen/ad7879.c
+++ b/drivers/input/touchscreen/ad7879.c
@@ -560,11 +560,10 @@ int ad7879_probe(struct device *dev, struct regmap *regmap,
 		ts->averaging = pdata->averaging;
 		ts->pen_down_acc_interval = pdata->pen_down_acc_interval;
 		ts->median = pdata->median;
-	} else if (dev->of_node) {
-		ad7879_parse_dt(dev, ts);
 	} else {
-		dev_err(dev, "No platform data\n");
-		return -EINVAL;
+		err = ad7879_parse_dt(dev, ts);
+		if (err)
+			return err;
 	}
 
 	input_dev = devm_input_allocate_device(dev);
-- 
2.11.0.483.g087da7b7c-goog

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 4/4] Input: ad7879 - do not manipulate capability bits directly
  2017-02-28 22:08 [PATCH 1/4] Input: ad7879 - make sure we set up drvdata Dmitry Torokhov
  2017-02-28 22:08 ` [PATCH 2/4] Input: ad7879 - return plain error code from ad7879_probe() Dmitry Torokhov
  2017-02-28 22:08 ` [PATCH 3/4] Input: ad7879 - try parsing properties on non-DT systems Dmitry Torokhov
@ 2017-02-28 22:08 ` Dmitry Torokhov
  2017-03-01  7:37   ` Michael Hennerich
  2017-03-01  7:40 ` [PATCH 1/4] Input: ad7879 - make sure we set up drvdata Michael Hennerich
  3 siblings, 1 reply; 8+ messages in thread
From: Dmitry Torokhov @ 2017-02-28 22:08 UTC (permalink / raw)
  To: Michael Hennerich; +Cc: linux-input, linux-kernel

Instead of manipulating capabilities bits of input device directly, let's
use input_set_capability() API.

Also, stop setting ABS_X/Y bits explicitly as input_set_abs_params() does
this for us.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
 drivers/input/touchscreen/ad7879.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/input/touchscreen/ad7879.c b/drivers/input/touchscreen/ad7879.c
index c415614ada68..196028c45210 100644
--- a/drivers/input/touchscreen/ad7879.c
+++ b/drivers/input/touchscreen/ad7879.c
@@ -590,13 +590,7 @@ int ad7879_probe(struct device *dev, struct regmap *regmap,
 
 	input_set_drvdata(input_dev, ts);
 
-	__set_bit(EV_ABS, input_dev->evbit);
-	__set_bit(ABS_X, input_dev->absbit);
-	__set_bit(ABS_Y, input_dev->absbit);
-	__set_bit(ABS_PRESSURE, input_dev->absbit);
-
-	__set_bit(EV_KEY, input_dev->evbit);
-	__set_bit(BTN_TOUCH, input_dev->keybit);
+	input_set_capability(input_dev, EV_KEY, BTN_TOUCH);
 
 	if (pdata) {
 		input_set_abs_params(input_dev, ABS_X,
@@ -614,6 +608,7 @@ int ad7879_probe(struct device *dev, struct regmap *regmap,
 	} 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");
-- 
2.11.0.483.g087da7b7c-goog

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 4/4] Input: ad7879 - do not manipulate capability bits directly
  2017-02-28 22:08 ` [PATCH 4/4] Input: ad7879 - do not manipulate capability bits directly Dmitry Torokhov
@ 2017-03-01  7:37   ` Michael Hennerich
  0 siblings, 0 replies; 8+ messages in thread
From: Michael Hennerich @ 2017-03-01  7:37 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, linux-kernel

On 28.02.2017 23:08, Dmitry Torokhov wrote:
> Instead of manipulating capabilities bits of input device directly, let's
> use input_set_capability() API.
>
> Also, stop setting ABS_X/Y bits explicitly as input_set_abs_params() does
> this for us.
>
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

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

> ---
>  drivers/input/touchscreen/ad7879.c | 9 ++-------
>  1 file changed, 2 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/input/touchscreen/ad7879.c b/drivers/input/touchscreen/ad7879.c
> index c415614ada68..196028c45210 100644
> --- a/drivers/input/touchscreen/ad7879.c
> +++ b/drivers/input/touchscreen/ad7879.c
> @@ -590,13 +590,7 @@ int ad7879_probe(struct device *dev, struct regmap *regmap,
>
>  	input_set_drvdata(input_dev, ts);
>
> -	__set_bit(EV_ABS, input_dev->evbit);
> -	__set_bit(ABS_X, input_dev->absbit);
> -	__set_bit(ABS_Y, input_dev->absbit);
> -	__set_bit(ABS_PRESSURE, input_dev->absbit);
> -
> -	__set_bit(EV_KEY, input_dev->evbit);
> -	__set_bit(BTN_TOUCH, input_dev->keybit);
> +	input_set_capability(input_dev, EV_KEY, BTN_TOUCH);
>
>  	if (pdata) {
>  		input_set_abs_params(input_dev, ABS_X,
> @@ -614,6 +608,7 @@ int ad7879_probe(struct device *dev, struct regmap *regmap,
>  	} 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");
>


-- 
Greetings,
Michael

--
Analog Devices GmbH      Otl-Aicher Strasse 60-64      80807 München
Sitz der Gesellschaft München, Registergericht München HRB 40368,
Geschäftsführer: Peter Kolberg, Ali Raza Husain, Eileen Wynne

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 3/4] Input: ad7879 - try parsing properties on non-DT systems
  2017-02-28 22:08 ` [PATCH 3/4] Input: ad7879 - try parsing properties on non-DT systems Dmitry Torokhov
@ 2017-03-01  7:38   ` Michael Hennerich
  0 siblings, 0 replies; 8+ messages in thread
From: Michael Hennerich @ 2017-03-01  7:38 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, linux-kernel

On 28.02.2017 23:08, Dmitry Torokhov wrote:
> We have switched the driver to use generic device properties API, so there
> is no need to check for presence of DT node before trying parse properties.
>
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

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

> ---
>  drivers/input/touchscreen/ad7879.c | 7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/input/touchscreen/ad7879.c b/drivers/input/touchscreen/ad7879.c
> index 7118f611e222..c415614ada68 100644
> --- a/drivers/input/touchscreen/ad7879.c
> +++ b/drivers/input/touchscreen/ad7879.c
> @@ -560,11 +560,10 @@ int ad7879_probe(struct device *dev, struct regmap *regmap,
>  		ts->averaging = pdata->averaging;
>  		ts->pen_down_acc_interval = pdata->pen_down_acc_interval;
>  		ts->median = pdata->median;
> -	} else if (dev->of_node) {
> -		ad7879_parse_dt(dev, ts);
>  	} else {
> -		dev_err(dev, "No platform data\n");
> -		return -EINVAL;
> +		err = ad7879_parse_dt(dev, ts);
> +		if (err)
> +			return err;
>  	}
>
>  	input_dev = devm_input_allocate_device(dev);
>


-- 
Greetings,
Michael

--
Analog Devices GmbH      Otl-Aicher Strasse 60-64      80807 München
Sitz der Gesellschaft München, Registergericht München HRB 40368,
Geschäftsführer: Peter Kolberg, Ali Raza Husain, Eileen Wynne

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/4] Input: ad7879 - return plain error code from ad7879_probe()
  2017-02-28 22:08 ` [PATCH 2/4] Input: ad7879 - return plain error code from ad7879_probe() Dmitry Torokhov
@ 2017-03-01  7:40   ` Michael Hennerich
  0 siblings, 0 replies; 8+ messages in thread
From: Michael Hennerich @ 2017-03-01  7:40 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, linux-kernel

On 28.02.2017 23:08, Dmitry Torokhov wrote:
> With the switch to devm, there is no need for ad7879_probe() to return the
> touchscreen structure, we can use plain error code. This also fixes issue
> introduced with devm concersion, where we returned 0 on success (which
> worked OK since IS_ERR(0) would not trigger, but was not correct
> regardless).
>
> Fixes: 381f688eee3d ("Input: ad7879 - use more devm interfaces")
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

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

> ---
>  drivers/input/touchscreen/ad7879-i2c.c |  9 ++-------
>  drivers/input/touchscreen/ad7879-spi.c |  7 +------
>  drivers/input/touchscreen/ad7879.c     | 28 ++++++++++++++--------------
>  drivers/input/touchscreen/ad7879.h     |  5 ++---
>  4 files changed, 19 insertions(+), 30 deletions(-)
>
> diff --git a/drivers/input/touchscreen/ad7879-i2c.c b/drivers/input/touchscreen/ad7879-i2c.c
> index a282d1c9e2c6..49b902b10c5f 100644
> --- a/drivers/input/touchscreen/ad7879-i2c.c
> +++ b/drivers/input/touchscreen/ad7879-i2c.c
> @@ -27,7 +27,6 @@ static const struct regmap_config ad7879_i2c_regmap_config = {
>  static int ad7879_i2c_probe(struct i2c_client *client,
>  				      const struct i2c_device_id *id)
>  {
> -	struct ad7879 *ts;
>  	struct regmap *regmap;
>
>  	if (!i2c_check_functionality(client->adapter,
> @@ -40,12 +39,8 @@ static int ad7879_i2c_probe(struct i2c_client *client,
>  	if (IS_ERR(regmap))
>  		return PTR_ERR(regmap);
>
> -	ts = ad7879_probe(&client->dev, regmap, client->irq,
> -			  BUS_I2C, AD7879_DEVID);
> -	if (IS_ERR(ts))
> -		return PTR_ERR(ts);
> -
> -	return 0;
> +	return ad7879_probe(&client->dev, regmap, client->irq,
> +			    BUS_I2C, AD7879_DEVID);
>  }
>
>  static const struct i2c_device_id ad7879_id[] = {
> diff --git a/drivers/input/touchscreen/ad7879-spi.c b/drivers/input/touchscreen/ad7879-spi.c
> index 59486ccba37d..3457a5626d75 100644
> --- a/drivers/input/touchscreen/ad7879-spi.c
> +++ b/drivers/input/touchscreen/ad7879-spi.c
> @@ -32,7 +32,6 @@ static const struct regmap_config ad7879_spi_regmap_config = {
>
>  static int ad7879_spi_probe(struct spi_device *spi)
>  {
> -	struct ad7879 *ts;
>  	struct regmap *regmap;
>
>  	/* don't exceed max specified SPI CLK frequency */
> @@ -45,11 +44,7 @@ static int ad7879_spi_probe(struct spi_device *spi)
>  	if (IS_ERR(regmap))
>  		return PTR_ERR(regmap);
>
> -	ts = ad7879_probe(&spi->dev, regmap, spi->irq, BUS_SPI, AD7879_DEVID);
> -	if (IS_ERR(ts))
> -		return PTR_ERR(ts);
> -
> -	return 0;
> +	return ad7879_probe(&spi->dev, regmap, spi->irq, BUS_SPI, AD7879_DEVID);
>  }
>
>  #ifdef CONFIG_OF
> diff --git a/drivers/input/touchscreen/ad7879.c b/drivers/input/touchscreen/ad7879.c
> index 52daaa4edc67..7118f611e222 100644
> --- a/drivers/input/touchscreen/ad7879.c
> +++ b/drivers/input/touchscreen/ad7879.c
> @@ -531,8 +531,8 @@ static void ad7879_cleanup_sysfs(void *_ts)
>  	sysfs_remove_group(&ts->dev->kobj, &ad7879_attr_group);
>  }
>
> -struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
> -			    int irq, u16 bustype, u8 devid)
> +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;
> @@ -542,12 +542,12 @@ struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
>
>  	if (irq <= 0) {
>  		dev_err(dev, "No IRQ specified\n");
> -		return ERR_PTR(-EINVAL);
> +		return -EINVAL;
>  	}
>
>  	ts = devm_kzalloc(dev, sizeof(*ts), GFP_KERNEL);
>  	if (!ts)
> -		return ERR_PTR(-ENOMEM);
> +		return -ENOMEM;
>
>  	if (pdata) {
>  		/* Platform data use swapped axis (backward compatibility) */
> @@ -564,13 +564,13 @@ struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
>  		ad7879_parse_dt(dev, ts);
>  	} else {
>  		dev_err(dev, "No platform data\n");
> -		return ERR_PTR(-EINVAL);
> +		return -EINVAL;
>  	}
>
>  	input_dev = devm_input_allocate_device(dev);
>  	if (!input_dev) {
>  		dev_err(dev, "Failed to allocate input device\n");
> -		return ERR_PTR(-ENOMEM);
> +		return -ENOMEM;
>  	}
>
>  	ts->dev = dev;
> @@ -618,14 +618,14 @@ struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
>  		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 ERR_PTR(-EINVAL);
> +			return -EINVAL;
>  		}
>  	}
>
>  	err = ad7879_write(ts, AD7879_REG_CTRL2, AD7879_RESET);
>  	if (err < 0) {
>  		dev_err(dev, "Failed to write %s\n", input_dev->name);
> -		return ERR_PTR(err);
> +		return err;
>  	}
>
>  	revid = ad7879_read(ts, AD7879_REG_REVID);
> @@ -634,7 +634,7 @@ struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
>  	if (input_dev->id.product != devid) {
>  		dev_err(dev, "Failed to probe %s (%x vs %x)\n",
>  			input_dev->name, devid, revid);
> -		return ERR_PTR(-ENODEV);
> +		return -ENODEV;
>  	}
>
>  	ts->cmd_crtl3 = AD7879_YPLUS_BIT |
> @@ -659,26 +659,26 @@ struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
>  					dev_name(dev), ts);
>  	if (err) {
>  		dev_err(dev, "Failed to request IRQ: %d\n", err);
> -		return ERR_PTR(err);
> +		return err;
>  	}
>
>  	__ad7879_disable(ts);
>
>  	err = sysfs_create_group(&dev->kobj, &ad7879_attr_group);
>  	if (err)
> -		return ERR_PTR(err);
> +		return err;
>
>  	err = devm_add_action_or_reset(dev, ad7879_cleanup_sysfs, ts);
>  	if (err)
> -		return ERR_PTR(err);
> +		return err;
>
>  	err = ad7879_gpio_add(ts, pdata);
>  	if (err)
> -		return ERR_PTR(err);
> +		return err;
>
>  	err = input_register_device(input_dev);
>  	if (err)
> -		return ERR_PTR(err);
> +		return err;
>
>  	dev_set_drvdata(dev, ts);
>
> diff --git a/drivers/input/touchscreen/ad7879.h b/drivers/input/touchscreen/ad7879.h
> index d3d2e9dc31ae..7e43066a4b68 100644
> --- a/drivers/input/touchscreen/ad7879.h
> +++ b/drivers/input/touchscreen/ad7879.h
> @@ -11,13 +11,12 @@
>
>  #include <linux/types.h>
>
> -struct ad7879;
>  struct device;
>  struct regmap;
>
>  extern const struct dev_pm_ops ad7879_pm_ops;
>
> -struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
> -			    int irq, u16 bustype, u8 devid);
> +int ad7879_probe(struct device *dev, struct regmap *regmap,
> +		 int irq, u16 bustype, u8 devid);
>
>  #endif
>


-- 
Greetings,
Michael

--
Analog Devices GmbH      Otl-Aicher Strasse 60-64      80807 München
Sitz der Gesellschaft München, Registergericht München HRB 40368,
Geschäftsführer: Peter Kolberg, Ali Raza Husain, Eileen Wynne

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/4] Input: ad7879 - make sure we set up drvdata
  2017-02-28 22:08 [PATCH 1/4] Input: ad7879 - make sure we set up drvdata Dmitry Torokhov
                   ` (2 preceding siblings ...)
  2017-02-28 22:08 ` [PATCH 4/4] Input: ad7879 - do not manipulate capability bits directly Dmitry Torokhov
@ 2017-03-01  7:40 ` Michael Hennerich
  3 siblings, 0 replies; 8+ messages in thread
From: Michael Hennerich @ 2017-03-01  7:40 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, linux-kernel

On 28.02.2017 23:08, Dmitry Torokhov wrote:
> The conversion to devm accidentally removed setting up of I2C client data
> upon successful probe of the touchscreen. Let's move this setting into the
> core, so we do not forger about it again.
>
> Fixes: 381f688eee3d ("Input: ad7879 - use more devm interfaces")
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

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

> ---
>  drivers/input/touchscreen/ad7879-spi.c | 2 --
>  drivers/input/touchscreen/ad7879.c     | 2 ++
>  2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/input/touchscreen/ad7879-spi.c b/drivers/input/touchscreen/ad7879-spi.c
> index c73798297b98..59486ccba37d 100644
> --- a/drivers/input/touchscreen/ad7879-spi.c
> +++ b/drivers/input/touchscreen/ad7879-spi.c
> @@ -49,8 +49,6 @@ static int ad7879_spi_probe(struct spi_device *spi)
>  	if (IS_ERR(ts))
>  		return PTR_ERR(ts);
>
> -	spi_set_drvdata(spi, ts);
> -
>  	return 0;
>  }
>
> diff --git a/drivers/input/touchscreen/ad7879.c b/drivers/input/touchscreen/ad7879.c
> index 1bd870277e1a..52daaa4edc67 100644
> --- a/drivers/input/touchscreen/ad7879.c
> +++ b/drivers/input/touchscreen/ad7879.c
> @@ -680,6 +680,8 @@ struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
>  	if (err)
>  		return ERR_PTR(err);
>
> +	dev_set_drvdata(dev, ts);
> +
>  	return 0;
>  }
>  EXPORT_SYMBOL(ad7879_probe);
>


-- 
Greetings,
Michael

--
Analog Devices GmbH      Otl-Aicher Strasse 60-64      80807 München
Sitz der Gesellschaft München, Registergericht München HRB 40368,
Geschäftsführer: Peter Kolberg, Ali Raza Husain, Eileen Wynne

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-03-01 10:21 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-28 22:08 [PATCH 1/4] Input: ad7879 - make sure we set up drvdata Dmitry Torokhov
2017-02-28 22:08 ` [PATCH 2/4] Input: ad7879 - return plain error code from ad7879_probe() Dmitry Torokhov
2017-03-01  7:40   ` Michael Hennerich
2017-02-28 22:08 ` [PATCH 3/4] Input: ad7879 - try parsing properties on non-DT systems Dmitry Torokhov
2017-03-01  7:38   ` Michael Hennerich
2017-02-28 22:08 ` [PATCH 4/4] Input: ad7879 - do not manipulate capability bits directly Dmitry Torokhov
2017-03-01  7:37   ` Michael Hennerich
2017-03-01  7:40 ` [PATCH 1/4] Input: ad7879 - make sure we set up drvdata Michael Hennerich

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.