linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/3] Input: ads7846 - fix support for ADS7845
@ 2023-01-20 12:45 Luca Ellero
  2023-01-20 12:45 ` [PATCH 1/3] Input: ads7846 - don't report pressure for ads7845 Luca Ellero
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Luca Ellero @ 2023-01-20 12:45 UTC (permalink / raw)
  To: dmitry.torokhov, daniel, m.felsch, andriy.shevchenko,
	u.kleine-koenig, mkl, miquel.raynal, imre.deak, luca.ellero
  Cc: linux-input, linux-kernel, Luca Ellero

ADS7845 support is buggy in this driver.
These patches fix various issues to get it work properly.

Changes for v2:
 - add missing period in patch 0001 message
 - elaborate comment in patch 0002
 
Changes for v3:
 - send from the same email address of "Signed-off"

Changes for v4:
 - fix tag
 - fix comment in patch 0002

Luca Ellero (3):
  Input: ads7846 - don't report pressure for ads7845
  Input: ads7846 - always set last command to PWRDOWN
  Input: ads7846 - don't check penirq immediately for 7845

 drivers/input/touchscreen/ads7846.c | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

-- 
2.25.1


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

* [PATCH 1/3] Input: ads7846 - don't report pressure for ads7845
  2023-01-20 12:45 [PATCH v4 0/3] Input: ads7846 - fix support for ADS7845 Luca Ellero
@ 2023-01-20 12:45 ` Luca Ellero
  2023-01-20 15:16   ` Andy Shevchenko
  2023-01-20 12:45 ` [PATCH 2/3] Input: ads7846 - always set last command to PWRDOWN Luca Ellero
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 11+ messages in thread
From: Luca Ellero @ 2023-01-20 12:45 UTC (permalink / raw)
  To: dmitry.torokhov, daniel, m.felsch, andriy.shevchenko,
	u.kleine-koenig, mkl, miquel.raynal, imre.deak, luca.ellero
  Cc: linux-input, linux-kernel, Luca Ellero

ADS7845 doesn't support pressure.
This patch avoids the following error reported by libinput-list-devices:
"ADS7845 Touchscreen: kernel bug: device has min == max on ABS_PRESSURE".

Signed-off-by: Luca Ellero <l.ellero@asem.it>
---
 drivers/input/touchscreen/ads7846.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
index 4c3dd01902d0..f11b444f2138 100644
--- a/drivers/input/touchscreen/ads7846.c
+++ b/drivers/input/touchscreen/ads7846.c
@@ -1316,8 +1316,9 @@ static int ads7846_probe(struct spi_device *spi)
 			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);
+	if (ts->model != 7845)
+		input_set_abs_params(input_dev, ABS_PRESSURE,
+				pdata->pressure_min, pdata->pressure_max, 0, 0);
 
 	/*
 	 * Parse common framework properties. Must be done here to ensure the
-- 
2.25.1


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

* [PATCH 2/3] Input: ads7846 - always set last command to PWRDOWN
  2023-01-20 12:45 [PATCH v4 0/3] Input: ads7846 - fix support for ADS7845 Luca Ellero
  2023-01-20 12:45 ` [PATCH 1/3] Input: ads7846 - don't report pressure for ads7845 Luca Ellero
@ 2023-01-20 12:45 ` Luca Ellero
  2023-01-20 15:17   ` Andy Shevchenko
  2023-01-20 12:45 ` [PATCH 3/3] Input: ads7846 - don't check penirq immediately for 7845 Luca Ellero
  2023-01-20 15:18 ` [PATCH v4 0/3] Input: ads7846 - fix support for ADS7845 Andy Shevchenko
  3 siblings, 1 reply; 11+ messages in thread
From: Luca Ellero @ 2023-01-20 12:45 UTC (permalink / raw)
  To: dmitry.torokhov, daniel, m.felsch, andriy.shevchenko,
	u.kleine-koenig, mkl, miquel.raynal, imre.deak, luca.ellero
  Cc: linux-input, linux-kernel, Luca Ellero

Controllers that report pressure (e.g. ADS7846) use 5 commands and the
correct sequence is READ_X, READ_Y, READ_Z1, READ_Z2, PWRDOWN.

Controllers that don't report pressure (e.g. ADS7845/ADS7843) use only 3
commands and the correct sequence should be READ_X, READ_Y, PWRDOWN. But
the sequence sent was incorrect: READ_X, READ_Y, READ_Z1.

Fix this by setting the third (and last) command to PWRDOWN.

Signed-off-by: Luca Ellero <l.ellero@asem.it>
---
 drivers/input/touchscreen/ads7846.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
index f11b444f2138..15da1047a577 100644
--- a/drivers/input/touchscreen/ads7846.c
+++ b/drivers/input/touchscreen/ads7846.c
@@ -1066,6 +1066,9 @@ static int ads7846_setup_spi_msg(struct ads7846 *ts,
 		struct ads7846_buf_layout *l = &packet->l[cmd_idx];
 		unsigned int max_count;
 
+		if (cmd_idx == packet->cmds - 1)
+			cmd_idx = ADS7846_PWDOWN;
+
 		if (ads7846_cmd_need_settle(cmd_idx))
 			max_count = packet->count + packet->count_skip;
 		else
@@ -1102,7 +1105,12 @@ static int ads7846_setup_spi_msg(struct ads7846 *ts,
 
 	for (cmd_idx = 0; cmd_idx < packet->cmds; cmd_idx++) {
 		struct ads7846_buf_layout *l = &packet->l[cmd_idx];
-		u8 cmd = ads7846_get_cmd(cmd_idx, vref);
+		u8 cmd;
+
+		if (cmd_idx == packet->cmds - 1)
+			cmd_idx = ADS7846_PWDOWN;
+
+		cmd = ads7846_get_cmd(cmd_idx, vref);
 
 		for (b = 0; b < l->count; b++)
 			packet->tx[l->offset + b].cmd = cmd;
-- 
2.25.1


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

* [PATCH 3/3] Input: ads7846 - don't check penirq immediately for 7845
  2023-01-20 12:45 [PATCH v4 0/3] Input: ads7846 - fix support for ADS7845 Luca Ellero
  2023-01-20 12:45 ` [PATCH 1/3] Input: ads7846 - don't report pressure for ads7845 Luca Ellero
  2023-01-20 12:45 ` [PATCH 2/3] Input: ads7846 - always set last command to PWRDOWN Luca Ellero
@ 2023-01-20 12:45 ` Luca Ellero
  2023-01-20 15:18   ` Andy Shevchenko
  2023-01-20 15:18 ` [PATCH v4 0/3] Input: ads7846 - fix support for ADS7845 Andy Shevchenko
  3 siblings, 1 reply; 11+ messages in thread
From: Luca Ellero @ 2023-01-20 12:45 UTC (permalink / raw)
  To: dmitry.torokhov, daniel, m.felsch, andriy.shevchenko,
	u.kleine-koenig, mkl, miquel.raynal, imre.deak, luca.ellero
  Cc: linux-input, linux-kernel, Luca Ellero

To discard false readings, one should use "ti,penirq-recheck-delay-usecs".
Checking get_pendown_state() at the beginning, most of the time fails
causing malfunctioning.

Signed-off-by: Luca Ellero <l.ellero@asem.it>
---
 drivers/input/touchscreen/ads7846.c | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
index 15da1047a577..17f11bce8113 100644
--- a/drivers/input/touchscreen/ads7846.c
+++ b/drivers/input/touchscreen/ads7846.c
@@ -843,14 +843,8 @@ static void ads7846_report_state(struct ads7846 *ts)
 	if (x == MAX_12BIT)
 		x = 0;
 
-	if (ts->model == 7843) {
+	if (ts->model == 7843 || ts->model == 7845) {
 		Rt = ts->pressure_max / 2;
-	} else if (ts->model == 7845) {
-		if (get_pendown_state(ts))
-			Rt = ts->pressure_max / 2;
-		else
-			Rt = 0;
-		dev_vdbg(&ts->spi->dev, "x/y: %d/%d, PD %d\n", x, y, Rt);
 	} else if (likely(x && z1)) {
 		/* compute touch pressure resistance using equation #2 */
 		Rt = z2;
-- 
2.25.1


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

* Re: [PATCH 1/3] Input: ads7846 - don't report pressure for ads7845
  2023-01-20 12:45 ` [PATCH 1/3] Input: ads7846 - don't report pressure for ads7845 Luca Ellero
@ 2023-01-20 15:16   ` Andy Shevchenko
  2023-01-23  8:27     ` Luca Ellero
  0 siblings, 1 reply; 11+ messages in thread
From: Andy Shevchenko @ 2023-01-20 15:16 UTC (permalink / raw)
  To: Luca Ellero
  Cc: dmitry.torokhov, daniel, m.felsch, u.kleine-koenig, mkl,
	miquel.raynal, imre.deak, luca.ellero, linux-input, linux-kernel

On Fri, Jan 20, 2023 at 01:45:42PM +0100, Luca Ellero wrote:
> ADS7845 doesn't support pressure.
> This patch avoids the following error reported by libinput-list-devices:

s/This patch avoids/Avoid/

(This rule is written in Submitting Patches documentation.)

> "ADS7845 Touchscreen: kernel bug: device has min == max on ABS_PRESSURE".

Do you need a Fixes tag?

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH 2/3] Input: ads7846 - always set last command to PWRDOWN
  2023-01-20 12:45 ` [PATCH 2/3] Input: ads7846 - always set last command to PWRDOWN Luca Ellero
@ 2023-01-20 15:17   ` Andy Shevchenko
  0 siblings, 0 replies; 11+ messages in thread
From: Andy Shevchenko @ 2023-01-20 15:17 UTC (permalink / raw)
  To: Luca Ellero
  Cc: dmitry.torokhov, daniel, m.felsch, u.kleine-koenig, mkl,
	miquel.raynal, imre.deak, luca.ellero, linux-input, linux-kernel

On Fri, Jan 20, 2023 at 01:45:43PM +0100, Luca Ellero wrote:
> Controllers that report pressure (e.g. ADS7846) use 5 commands and the
> correct sequence is READ_X, READ_Y, READ_Z1, READ_Z2, PWRDOWN.
> 
> Controllers that don't report pressure (e.g. ADS7845/ADS7843) use only 3
> commands and the correct sequence should be READ_X, READ_Y, PWRDOWN. But
> the sequence sent was incorrect: READ_X, READ_Y, READ_Z1.
> 
> Fix this by setting the third (and last) command to PWRDOWN.

Provide a Fixes: tag?

> Signed-off-by: Luca Ellero <l.ellero@asem.it>

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH 3/3] Input: ads7846 - don't check penirq immediately for 7845
  2023-01-20 12:45 ` [PATCH 3/3] Input: ads7846 - don't check penirq immediately for 7845 Luca Ellero
@ 2023-01-20 15:18   ` Andy Shevchenko
  0 siblings, 0 replies; 11+ messages in thread
From: Andy Shevchenko @ 2023-01-20 15:18 UTC (permalink / raw)
  To: Luca Ellero
  Cc: dmitry.torokhov, daniel, m.felsch, u.kleine-koenig, mkl,
	miquel.raynal, imre.deak, luca.ellero, linux-input, linux-kernel

On Fri, Jan 20, 2023 at 01:45:44PM +0100, Luca Ellero wrote:
> To discard false readings, one should use "ti,penirq-recheck-delay-usecs".
> Checking get_pendown_state() at the beginning, most of the time fails
> causing malfunctioning.

Should it have a Fixes: tag?

> Signed-off-by: Luca Ellero <l.ellero@asem.it>

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH v4 0/3] Input: ads7846 - fix support for ADS7845
  2023-01-20 12:45 [PATCH v4 0/3] Input: ads7846 - fix support for ADS7845 Luca Ellero
                   ` (2 preceding siblings ...)
  2023-01-20 12:45 ` [PATCH 3/3] Input: ads7846 - don't check penirq immediately for 7845 Luca Ellero
@ 2023-01-20 15:18 ` Andy Shevchenko
  3 siblings, 0 replies; 11+ messages in thread
From: Andy Shevchenko @ 2023-01-20 15:18 UTC (permalink / raw)
  To: Luca Ellero
  Cc: dmitry.torokhov, daniel, m.felsch, u.kleine-koenig, mkl,
	miquel.raynal, imre.deak, luca.ellero, linux-input, linux-kernel

On Fri, Jan 20, 2023 at 01:45:41PM +0100, Luca Ellero wrote:
> ADS7845 support is buggy in this driver.
> These patches fix various issues to get it work properly.

Code-wise it's fine. It would be nice to amend the commit messages.

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH 1/3] Input: ads7846 - don't report pressure for ads7845
  2023-01-20 15:16   ` Andy Shevchenko
@ 2023-01-23  8:27     ` Luca Ellero
  2023-01-23 12:25       ` Andy Shevchenko
  0 siblings, 1 reply; 11+ messages in thread
From: Luca Ellero @ 2023-01-23  8:27 UTC (permalink / raw)
  To: Andy Shevchenko, Luca Ellero
  Cc: dmitry.torokhov, daniel, m.felsch, u.kleine-koenig, mkl,
	miquel.raynal, imre.deak, linux-input, linux-kernel

On 20/01/2023 16:16, Andy Shevchenko wrote:
> On Fri, Jan 20, 2023 at 01:45:42PM +0100, Luca Ellero wrote:
>> ADS7845 doesn't support pressure.
>> This patch avoids the following error reported by libinput-list-devices:
> 
> s/This patch avoids/Avoid/
> 
> (This rule is written in Submitting Patches documentation.)
> 
>> "ADS7845 Touchscreen: kernel bug: device has min == max on ABS_PRESSURE".
> 
> Do you need a Fixes tag?
> 

Hi Andy,
thank you for your reply.
I haven't found a specific bug report to apply to this patches.
Could you kindly provide a "Fixes:" tag that I can apply?

It's more like this driver has never been tested with ADS7845.
Maybe the patches should be considered as a new implementation instead 
than a bug fix?


Thanks
Regards
Luca Ellero




-- 
Luca Ellero

E-mail: luca.ellero@brickedbrain.com
Internet: www.brickedbrain.com



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

* Re: [PATCH 1/3] Input: ads7846 - don't report pressure for ads7845
  2023-01-23  8:27     ` Luca Ellero
@ 2023-01-23 12:25       ` Andy Shevchenko
  2023-01-24  8:40         ` Luca Ellero
  0 siblings, 1 reply; 11+ messages in thread
From: Andy Shevchenko @ 2023-01-23 12:25 UTC (permalink / raw)
  To: Luca Ellero
  Cc: Luca Ellero, dmitry.torokhov, daniel, m.felsch, u.kleine-koenig,
	mkl, miquel.raynal, imre.deak, linux-input, linux-kernel

On Mon, Jan 23, 2023 at 09:27:37AM +0100, Luca Ellero wrote:
> On 20/01/2023 16:16, Andy Shevchenko wrote:
> > On Fri, Jan 20, 2023 at 01:45:42PM +0100, Luca Ellero wrote:
> > > ADS7845 doesn't support pressure.
> > > This patch avoids the following error reported by libinput-list-devices:
> > 
> > s/This patch avoids/Avoid/
> > 
> > (This rule is written in Submitting Patches documentation.)
> > 
> > > "ADS7845 Touchscreen: kernel bug: device has min == max on ABS_PRESSURE".
> > 
> > Do you need a Fixes tag?
> > 
> 
> Hi Andy,
> thank you for your reply.
> I haven't found a specific bug report to apply to this patches.
> Could you kindly provide a "Fixes:" tag that I can apply?

The Fixes tag in accordance with the documentation should refer to the commit
in the Git history which brought the problem (regression).

> It's more like this driver has never been tested with ADS7845.
> Maybe the patches should be considered as a new implementation instead than
> a bug fix?

If it's indeed from day 1, then the initial commit can be considered as Fixes
tag, but I leave it to maintainer to decide.

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH 1/3] Input: ads7846 - don't report pressure for ads7845
  2023-01-23 12:25       ` Andy Shevchenko
@ 2023-01-24  8:40         ` Luca Ellero
  0 siblings, 0 replies; 11+ messages in thread
From: Luca Ellero @ 2023-01-24  8:40 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Luca Ellero, dmitry.torokhov, daniel, m.felsch, u.kleine-koenig,
	mkl, miquel.raynal, imre.deak, linux-input, linux-kernel

On 23/01/2023 13:25, Andy Shevchenko wrote:
> The Fixes tag in accordance with the documentation should refer to the commit
> in the Git history which brought the problem (regression).
> 
>> It's more like this driver has never been tested with ADS7845.
>> Maybe the patches should be considered as a new implementation instead than
>> a bug fix?
> If it's indeed from day 1, then the initial commit can be considered as Fixes
> tag, but I leave it to maintainer to decide.

Hi Andy,
thank you for your reply.
OK, I will add the initial commit as Fixes: tag and resend all the series.
Regards
Luca Ellero



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

end of thread, other threads:[~2023-01-24  8:42 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-20 12:45 [PATCH v4 0/3] Input: ads7846 - fix support for ADS7845 Luca Ellero
2023-01-20 12:45 ` [PATCH 1/3] Input: ads7846 - don't report pressure for ads7845 Luca Ellero
2023-01-20 15:16   ` Andy Shevchenko
2023-01-23  8:27     ` Luca Ellero
2023-01-23 12:25       ` Andy Shevchenko
2023-01-24  8:40         ` Luca Ellero
2023-01-20 12:45 ` [PATCH 2/3] Input: ads7846 - always set last command to PWRDOWN Luca Ellero
2023-01-20 15:17   ` Andy Shevchenko
2023-01-20 12:45 ` [PATCH 3/3] Input: ads7846 - don't check penirq immediately for 7845 Luca Ellero
2023-01-20 15:18   ` Andy Shevchenko
2023-01-20 15:18 ` [PATCH v4 0/3] Input: ads7846 - fix support for ADS7845 Andy Shevchenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).