mbox series

[0/3] ads7846: fix support for ADS7845

Message ID 20220714084319.107334-1-luca.ellero@brickedbrain.com
Headers show
Series ads7846: fix support for ADS7845 | expand

Message

Luca Ellero July 14, 2022, 8:43 a.m. UTC
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(-)

Comments

Andy Shevchenko July 14, 2022, 11:32 a.m. UTC | #1
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
>
Andy Shevchenko July 14, 2022, 11:35 a.m. UTC | #2
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
>
Luca Ellero July 15, 2022, 2:36 p.m. UTC | #3
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