diff mbox

input: silead: Disable interrupt during suspend

Message ID 20170519140642.31800-1-hdegoede@redhat.com (mailing list archive)
State Accepted
Headers show

Commit Message

Hans de Goede May 19, 2017, 2:06 p.m. UTC
When we put the touchscreen controller in low-power mode the irq
pin may trigger (float) and if we then try to read a data packet we
get the following error in dmesg:

[  478.801017] silead_ts i2c-MSSL1680:00: Data read error -121

This commit disables the irq during suspend/resume fixing this error.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 drivers/input/touchscreen/silead.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Dmitry Torokhov May 23, 2017, 12:21 a.m. UTC | #1
Hi Hans,

On Fri, May 19, 2017 at 04:06:42PM +0200, Hans de Goede wrote:
> When we put the touchscreen controller in low-power mode the irq
> pin may trigger (float) and if we then try to read a data packet we
> get the following error in dmesg:
> 
> [  478.801017] silead_ts i2c-MSSL1680:00: Data read error -121
> 
> This commit disables the irq during suspend/resume fixing this error.

Out of curiosity, what interrupt type does silead device use on your
platform?

> 
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
>  drivers/input/touchscreen/silead.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/input/touchscreen/silead.c b/drivers/input/touchscreen/silead.c
> index 9b36f2750b9f..52c878a20a92 100644
> --- a/drivers/input/touchscreen/silead.c
> +++ b/drivers/input/touchscreen/silead.c
> @@ -536,6 +536,7 @@ static int __maybe_unused silead_ts_suspend(struct device *dev)
>  {
>  	struct i2c_client *client = to_i2c_client(dev);
>  
> +	disable_irq(client->irq);
>  	silead_ts_set_power(client, SILEAD_POWER_OFF);
>  	return 0;
>  }
> @@ -561,6 +562,8 @@ static int __maybe_unused silead_ts_resume(struct device *dev)
>  		return -ENODEV;
>  	}
>  
> +	enable_irq(client->irq);
> +
>  	return 0;
>  }
>  
> -- 
> 2.12.2
> 

Thanks.
Hans de Goede May 23, 2017, 6:47 a.m. UTC | #2
Hi,

On 23-05-17 02:21, Dmitry Torokhov wrote:
> Hi Hans,
> 
> On Fri, May 19, 2017 at 04:06:42PM +0200, Hans de Goede wrote:
>> When we put the touchscreen controller in low-power mode the irq
>> pin may trigger (float) and if we then try to read a data packet we
>> get the following error in dmesg:
>>
>> [  478.801017] silead_ts i2c-MSSL1680:00: Data read error -121
>>
>> This commit disables the irq during suspend/resume fixing this error.
> 
> Out of curiosity, what interrupt type does silead device use on your
> platform?

On the tablet where I was seeing this problem the irq is declared as:

                         GpioInt (Edge, ActiveHigh, Shared, PullDefault, 0x0000,

In the DSDT.

Regards,

Hans


> 
>>
>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>> ---
>>   drivers/input/touchscreen/silead.c | 3 +++
>>   1 file changed, 3 insertions(+)
>>
>> diff --git a/drivers/input/touchscreen/silead.c b/drivers/input/touchscreen/silead.c
>> index 9b36f2750b9f..52c878a20a92 100644
>> --- a/drivers/input/touchscreen/silead.c
>> +++ b/drivers/input/touchscreen/silead.c
>> @@ -536,6 +536,7 @@ static int __maybe_unused silead_ts_suspend(struct device *dev)
>>   {
>>   	struct i2c_client *client = to_i2c_client(dev);
>>   
>> +	disable_irq(client->irq);
>>   	silead_ts_set_power(client, SILEAD_POWER_OFF);
>>   	return 0;
>>   }
>> @@ -561,6 +562,8 @@ static int __maybe_unused silead_ts_resume(struct device *dev)
>>   		return -ENODEV;
>>   	}
>>   
>> +	enable_irq(client->irq);
>> +
>>   	return 0;
>>   }
>>   
>> -- 
>> 2.12.2
>>
> 
> Thanks.
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Dmitry Torokhov May 26, 2017, 11:10 p.m. UTC | #3
On Fri, May 19, 2017 at 04:06:42PM +0200, Hans de Goede wrote:
> When we put the touchscreen controller in low-power mode the irq
> pin may trigger (float) and if we then try to read a data packet we
> get the following error in dmesg:
> 
> [  478.801017] silead_ts i2c-MSSL1680:00: Data read error -121
> 
> This commit disables the irq during suspend/resume fixing this error.
> 
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>

Applied, thank you.

> ---
>  drivers/input/touchscreen/silead.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/input/touchscreen/silead.c b/drivers/input/touchscreen/silead.c
> index 9b36f2750b9f..52c878a20a92 100644
> --- a/drivers/input/touchscreen/silead.c
> +++ b/drivers/input/touchscreen/silead.c
> @@ -536,6 +536,7 @@ static int __maybe_unused silead_ts_suspend(struct device *dev)
>  {
>  	struct i2c_client *client = to_i2c_client(dev);
>  
> +	disable_irq(client->irq);
>  	silead_ts_set_power(client, SILEAD_POWER_OFF);
>  	return 0;
>  }
> @@ -561,6 +562,8 @@ static int __maybe_unused silead_ts_resume(struct device *dev)
>  		return -ENODEV;
>  	}
>  
> +	enable_irq(client->irq);
> +
>  	return 0;
>  }
>  
> -- 
> 2.12.2
>
diff mbox

Patch

diff --git a/drivers/input/touchscreen/silead.c b/drivers/input/touchscreen/silead.c
index 9b36f2750b9f..52c878a20a92 100644
--- a/drivers/input/touchscreen/silead.c
+++ b/drivers/input/touchscreen/silead.c
@@ -536,6 +536,7 @@  static int __maybe_unused silead_ts_suspend(struct device *dev)
 {
 	struct i2c_client *client = to_i2c_client(dev);
 
+	disable_irq(client->irq);
 	silead_ts_set_power(client, SILEAD_POWER_OFF);
 	return 0;
 }
@@ -561,6 +562,8 @@  static int __maybe_unused silead_ts_resume(struct device *dev)
 		return -ENODEV;
 	}
 
+	enable_irq(client->irq);
+
 	return 0;
 }