diff mbox

elantech: Fix detection of touchpad on ASUS s301l

Message ID 1409754242-10196-1-git-send-email-hdegoede@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Hans de Goede Sept. 3, 2014, 2:24 p.m. UTC
http://mariusmonton.com/?p=489

Cc: stable@vger.kernel.org
Reported-and-tested-by: Màrius Monton <marius.monton@gmail.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 drivers/input/mouse/elantech.c | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

Dmitry Torokhov Sept. 8, 2014, 9:40 p.m. UTC | #1
On Wed, Sep 03, 2014 at 04:24:02PM +0200, Hans de Goede wrote:
> http://mariusmonton.com/?p=489
> 
> Cc: stable@vger.kernel.org
> Reported-and-tested-by: Màrius Monton <marius.monton@gmail.com>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>

Applied, thank you.

> ---
>  drivers/input/mouse/elantech.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
> index daaf82f..fad7367 100644
> --- a/drivers/input/mouse/elantech.c
> +++ b/drivers/input/mouse/elantech.c
> @@ -1331,6 +1331,13 @@ static bool elantech_is_signature_valid(const unsigned char *param)
>  	if (param[1] == 0)
>  		return true;
>  
> +	/*
> +	 * Some models have a revision higher then 20. Meaning param[2] may
> +	 * be 10 or 20, skip the rates check for these.
> +	 */
> +	if (param[0] == 0x46 && (param[1] & 0xef) == 0x0f && param[2] < 40)
> +		return true;
> +
>  	for (i = 0; i < ARRAY_SIZE(rates); i++)
>  		if (param[2] == rates[i])
>  			return false;
> -- 
> 2.1.0
>
diff mbox

Patch

diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
index daaf82f..fad7367 100644
--- a/drivers/input/mouse/elantech.c
+++ b/drivers/input/mouse/elantech.c
@@ -1331,6 +1331,13 @@  static bool elantech_is_signature_valid(const unsigned char *param)
 	if (param[1] == 0)
 		return true;
 
+	/*
+	 * Some models have a revision higher then 20. Meaning param[2] may
+	 * be 10 or 20, skip the rates check for these.
+	 */
+	if (param[0] == 0x46 && (param[1] & 0xef) == 0x0f && param[2] < 40)
+		return true;
+
 	for (i = 0; i < ARRAY_SIZE(rates); i++)
 		if (param[2] == rates[i])
 			return false;