All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] ads7846: fix support for ADS7845
@ 2022-07-14  8:43 Luca Ellero
  2022-07-14  8:43 ` [PATCH 1/3] ads7846: don't report pressure for ads7845 Luca Ellero
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Luca Ellero @ 2022-07-14  8:43 UTC (permalink / raw)
  To: dmitry.torokhov, daniel, m.felsch, andriy.shevchenko,
	u.kleine-koenig, mkl, miquel.raynal, imre.deak
  Cc: linux-input, linux-kernel, Luca Ellero

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

Luca Ellero (3):
  ads7846: don't report pressure for ads7845
  ads7846: always set last command to PWRDOWN
  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] ads7846: don't report pressure for ads7845
  2022-07-14  8:43 [PATCH 0/3] ads7846: fix support for ADS7845 Luca Ellero
@ 2022-07-14  8:43 ` Luca Ellero
  2022-07-14 11:32   ` Andy Shevchenko
  2022-07-14  8:43 ` [PATCH 2/3] ads7846: always set last command to PWRDOWN Luca Ellero
  2022-07-14  8:43 ` [PATCH 3/3] ads7846: don't check penirq immediately for 7845 Luca Ellero
  2 siblings, 1 reply; 11+ messages in thread
From: Luca Ellero @ 2022-07-14  8:43 UTC (permalink / raw)
  To: dmitry.torokhov, daniel, m.felsch, andriy.shevchenko,
	u.kleine-koenig, mkl, miquel.raynal, imre.deak
  Cc: linux-input, linux-kernel, Luca Ellero

From: Luca Ellero <l.ellero@asem.it>

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 bed68a68f330..24605c40d039 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] ads7846: always set last command to PWRDOWN
  2022-07-14  8:43 [PATCH 0/3] ads7846: fix support for ADS7845 Luca Ellero
  2022-07-14  8:43 ` [PATCH 1/3] ads7846: don't report pressure for ads7845 Luca Ellero
@ 2022-07-14  8:43 ` Luca Ellero
  2022-07-14 11:34   ` Andy Shevchenko
  2022-07-14  8:43 ` [PATCH 3/3] ads7846: don't check penirq immediately for 7845 Luca Ellero
  2 siblings, 1 reply; 11+ messages in thread
From: Luca Ellero @ 2022-07-14  8:43 UTC (permalink / raw)
  To: dmitry.torokhov, daniel, m.felsch, andriy.shevchenko,
	u.kleine-koenig, mkl, miquel.raynal, imre.deak
  Cc: linux-input, linux-kernel, Luca Ellero

From: Luca Ellero <l.ellero@asem.it>

This was broken on controllers with 3 commands as ads7845.
READ_Z1 was sent instead.

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 24605c40d039..9e15cdf6faa0 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] ads7846: don't check penirq immediately for 7845
  2022-07-14  8:43 [PATCH 0/3] ads7846: fix support for ADS7845 Luca Ellero
  2022-07-14  8:43 ` [PATCH 1/3] ads7846: don't report pressure for ads7845 Luca Ellero
  2022-07-14  8:43 ` [PATCH 2/3] ads7846: always set last command to PWRDOWN Luca Ellero
@ 2022-07-14  8:43 ` Luca Ellero
  2022-07-14 11:35   ` Andy Shevchenko
  2 siblings, 1 reply; 11+ messages in thread
From: Luca Ellero @ 2022-07-14  8:43 UTC (permalink / raw)
  To: dmitry.torokhov, daniel, m.felsch, andriy.shevchenko,
	u.kleine-koenig, mkl, miquel.raynal, imre.deak
  Cc: linux-input, linux-kernel, Luca Ellero

From: Luca Ellero <l.ellero@asem.it>

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 9e15cdf6faa0..122d3a13b7c5 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] ads7846: don't report pressure for ads7845
  2022-07-14  8:43 ` [PATCH 1/3] ads7846: don't report pressure for ads7845 Luca Ellero
@ 2022-07-14 11:32   ` Andy Shevchenko
  2022-07-15 14:36     ` Luca Ellero
  0 siblings, 1 reply; 11+ messages in thread
From: Andy Shevchenko @ 2022-07-14 11:32 UTC (permalink / raw)
  To: Luca Ellero
  Cc: dmitry.torokhov, daniel, m.felsch, u.kleine-koenig, mkl,
	miquel.raynal, imre.deak, linux-input, linux-kernel, Luca Ellero

On Thu, Jul 14, 2022 at 10:43:17AM +0200, Luca Ellero wrote:
> From: Luca Ellero <l.ellero@asem.it>
> 
> 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"

Missed period, otherwise looks good.

Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

> 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 bed68a68f330..24605c40d039 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
> 

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH 2/3] ads7846: always set last command to PWRDOWN
  2022-07-14  8:43 ` [PATCH 2/3] ads7846: always set last command to PWRDOWN Luca Ellero
@ 2022-07-14 11:34   ` Andy Shevchenko
  0 siblings, 0 replies; 11+ messages in thread
From: Andy Shevchenko @ 2022-07-14 11:34 UTC (permalink / raw)
  To: Luca Ellero
  Cc: dmitry.torokhov, daniel, m.felsch, u.kleine-koenig, mkl,
	miquel.raynal, imre.deak, linux-input, linux-kernel, Luca Ellero

On Thu, Jul 14, 2022 at 10:43:18AM +0200, Luca Ellero wrote:
> From: Luca Ellero <l.ellero@asem.it>
> 
> This was broken on controllers with 3 commands as ads7845.
> READ_Z1 was sent instead.

What is "This"? Please, make commit message more understandable by its own.
With that fixed,
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

> 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 24605c40d039..9e15cdf6faa0 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
> 

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH 3/3] ads7846: don't check penirq immediately for 7845
  2022-07-14  8:43 ` [PATCH 3/3] ads7846: don't check penirq immediately for 7845 Luca Ellero
@ 2022-07-14 11:35   ` Andy Shevchenko
  0 siblings, 0 replies; 11+ messages in thread
From: Andy Shevchenko @ 2022-07-14 11:35 UTC (permalink / raw)
  To: Luca Ellero
  Cc: dmitry.torokhov, daniel, m.felsch, u.kleine-koenig, mkl,
	miquel.raynal, imre.deak, linux-input, linux-kernel, Luca Ellero

On Thu, Jul 14, 2022 at 10:43:19AM +0200, Luca Ellero wrote:
> From: Luca Ellero <l.ellero@asem.it>
> 
> 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.

Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

> 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 9e15cdf6faa0..122d3a13b7c5 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
> 

-- 
With Best Regards,
Andy Shevchenko



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

* Re: [PATCH 1/3] ads7846: don't report pressure for ads7845
  2022-07-14 11:32   ` Andy Shevchenko
@ 2022-07-15 14:36     ` Luca Ellero
  0 siblings, 0 replies; 11+ messages in thread
From: Luca Ellero @ 2022-07-15 14:36 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: dmitry.torokhov, daniel, m.felsch, u.kleine-koenig, mkl,
	miquel.raynal, imre.deak, linux-input, linux-kernel, Luca Ellero

On 14/07/2022 13:32, Andy Shevchenko wrote:
> On Thu, Jul 14, 2022 at 10:43:17AM +0200, Luca Ellero wrote:
>> From: Luca Ellero <l.ellero@asem.it>
>>
>> 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"
> 
> Missed period, otherwise looks good.
> 
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> 
>> 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 bed68a68f330..24605c40d039 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
>>
> 

Hi Andy,
thank you for your comments.
I will resend v2 of the patches.
Regards
Luca

-- 
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] ads7846: don't report pressure for ads7845
  2022-11-29 16:23   ` Andy Shevchenko
@ 2022-11-30  8:25     ` Luca Ellero
  0 siblings, 0 replies; 11+ messages in thread
From: Luca Ellero @ 2022-11-30  8:25 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 29/11/2022 17:23, Andy Shevchenko wrote:
> On Tue, Nov 29, 2022 at 04:19:57PM +0100, Luca Ellero wrote:
>> 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".
> 
> Fixes tag?
> 
> If you run
> 
> 	git log --no-merges -- drivers/input/touchscreen/ads7846.c
> 
> you can get what prefix should be for these patches.
> 

Hi Andy,
thank you for your comments.
I will fix the patches and resend.
Regards

-- 
Luca Ellero



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

* Re: [PATCH 1/3] ads7846: don't report pressure for ads7845
  2022-11-29 15:19 ` [PATCH 1/3] ads7846: don't report pressure for ads7845 Luca Ellero
@ 2022-11-29 16:23   ` Andy Shevchenko
  2022-11-30  8:25     ` Luca Ellero
  0 siblings, 1 reply; 11+ messages in thread
From: Andy Shevchenko @ 2022-11-29 16:23 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 Tue, Nov 29, 2022 at 04:19:57PM +0100, Luca Ellero wrote:
> 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".

Fixes tag?

If you run

	git log --no-merges -- drivers/input/touchscreen/ads7846.c

you can get what prefix should be for these patches.

-- 
With Best Regards,
Andy Shevchenko



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

* [PATCH 1/3] ads7846: don't report pressure for ads7845
  2022-11-29 15:19 [PATCH 0/3 RESEND] ads7846: fix support for ADS7845 Luca Ellero
@ 2022-11-29 15:19 ` Luca Ellero
  2022-11-29 16:23   ` Andy Shevchenko
  0 siblings, 1 reply; 11+ messages in thread
From: Luca Ellero @ 2022-11-29 15:19 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 bed68a68f330..24605c40d039 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

end of thread, other threads:[~2022-11-30  8:31 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-14  8:43 [PATCH 0/3] ads7846: fix support for ADS7845 Luca Ellero
2022-07-14  8:43 ` [PATCH 1/3] ads7846: don't report pressure for ads7845 Luca Ellero
2022-07-14 11:32   ` Andy Shevchenko
2022-07-15 14:36     ` Luca Ellero
2022-07-14  8:43 ` [PATCH 2/3] ads7846: always set last command to PWRDOWN Luca Ellero
2022-07-14 11:34   ` Andy Shevchenko
2022-07-14  8:43 ` [PATCH 3/3] ads7846: don't check penirq immediately for 7845 Luca Ellero
2022-07-14 11:35   ` Andy Shevchenko
2022-11-29 15:19 [PATCH 0/3 RESEND] ads7846: fix support for ADS7845 Luca Ellero
2022-11-29 15:19 ` [PATCH 1/3] ads7846: don't report pressure for ads7845 Luca Ellero
2022-11-29 16:23   ` Andy Shevchenko
2022-11-30  8:25     ` Luca Ellero

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.