diff mbox

HID: alps: fix stick device not working after resume

Message ID 20160919074139.2551-1-kai.heng.feng@canonical.com
State New, archived
Headers show

Commit Message

Kai-Heng Feng Sept. 19, 2016, 7:41 a.m. UTC
The stick device does not work after resume, add U1_SP_ABS_MODE flag can
make the device work after resume.

Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
---
 drivers/hid/hid-alps.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Jiri Kosina Sept. 19, 2016, 12:37 p.m. UTC | #1
On Mon, 19 Sep 2016, Kai-Heng Feng wrote:

> The stick device does not work after resume, add U1_SP_ABS_MODE flag can
> make the device work after resume.

Do you happen to have any more details on why it doesn't work without 
U1_SP_ABS_MODE? Or was this a pure guesswork?

> 
> Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
> ---
>  drivers/hid/hid-alps.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/hid/hid-alps.c b/drivers/hid/hid-alps.c
> index 048befd..390f8d3 100644
> --- a/drivers/hid/hid-alps.c
> +++ b/drivers/hid/hid-alps.c
> @@ -244,13 +244,13 @@ static int alps_raw_event(struct hid_device *hdev,
>  static int alps_post_reset(struct hid_device *hdev)
>  {
>  	return u1_read_write_register(hdev, ADDRESS_U1_DEV_CTRL_1,
> -				NULL, U1_TP_ABS_MODE, false);
> +				NULL, U1_TP_ABS_MODE | U1_SP_ABS_MODE, false);
>  }
>  
>  static int alps_post_resume(struct hid_device *hdev)
>  {
>  	return u1_read_write_register(hdev, ADDRESS_U1_DEV_CTRL_1,
> -				NULL, U1_TP_ABS_MODE, false);
> +				NULL, U1_TP_ABS_MODE | U1_SP_ABS_MODE, false);
>  }
>  #endif /* CONFIG_PM */
Kai-Heng Feng Sept. 19, 2016, 3:57 p.m. UTC | #2
On Mon, Sep 19, 2016 at 8:37 PM, Jiri Kosina <jikos@kernel.org> wrote:
> On Mon, 19 Sep 2016, Kai-Heng Feng wrote:
>
>> The stick device does not work after resume, add U1_SP_ABS_MODE flag can
>> make the device work after resume.
>
> Do you happen to have any more details on why it doesn't work without
> U1_SP_ABS_MODE? Or was this a pure guesswork?

It' pure guesswork, based on how the existing code uses U1_TP_ABS_MODE flag
on both initialization and resume.

I also tested the the patch on an ALPS touchpad without stick device,
did not notice
any side effect on suspend/resume, so I made the U1_SP_ABS_MODE flag mandatory.

>
>>
>> Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
>> ---
>>  drivers/hid/hid-alps.c | 4 ++--
>>  1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/hid/hid-alps.c b/drivers/hid/hid-alps.c
>> index 048befd..390f8d3 100644
>> --- a/drivers/hid/hid-alps.c
>> +++ b/drivers/hid/hid-alps.c
>> @@ -244,13 +244,13 @@ static int alps_raw_event(struct hid_device *hdev,
>>  static int alps_post_reset(struct hid_device *hdev)
>>  {
>>       return u1_read_write_register(hdev, ADDRESS_U1_DEV_CTRL_1,
>> -                             NULL, U1_TP_ABS_MODE, false);
>> +                             NULL, U1_TP_ABS_MODE | U1_SP_ABS_MODE, false);
>>  }
>>
>>  static int alps_post_resume(struct hid_device *hdev)
>>  {
>>       return u1_read_write_register(hdev, ADDRESS_U1_DEV_CTRL_1,
>> -                             NULL, U1_TP_ABS_MODE, false);
>> +                             NULL, U1_TP_ABS_MODE | U1_SP_ABS_MODE, false);
>>  }
>>  #endif /* CONFIG_PM */
>
> --
> Jiri Kosina
> SUSE Labs
>
--
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
Jiri Kosina Sept. 21, 2016, noon UTC | #3
On Mon, 19 Sep 2016, Kai Heng Feng wrote:

> >> The stick device does not work after resume, add U1_SP_ABS_MODE flag can
> >> make the device work after resume.
> >
> > Do you happen to have any more details on why it doesn't work without
> > U1_SP_ABS_MODE? Or was this a pure guesswork?
> 
> It' pure guesswork, based on how the existing code uses U1_TP_ABS_MODE flag
> on both initialization and resume.
> 
> I also tested the the patch on an ALPS touchpad without stick device,
> did not notice
> any side effect on suspend/resume, so I made the U1_SP_ABS_MODE flag mandatory.

I'll fold this information into the patch changelog before comitting; if 
you disagree, please let me know.
Kai-Heng Feng Sept. 22, 2016, 5:12 a.m. UTC | #4
On Wed, Sep 21, 2016 at 8:00 PM, Jiri Kosina <jikos@kernel.org> wrote:
> On Mon, 19 Sep 2016, Kai Heng Feng wrote:
>
>> >> The stick device does not work after resume, add U1_SP_ABS_MODE flag can
>> >> make the device work after resume.
>> >
>> > Do you happen to have any more details on why it doesn't work without
>> > U1_SP_ABS_MODE? Or was this a pure guesswork?
>>
>> It' pure guesswork, based on how the existing code uses U1_TP_ABS_MODE flag
>> on both initialization and resume.
>>
>> I also tested the the patch on an ALPS touchpad without stick device,
>> did not notice
>> any side effect on suspend/resume, so I made the U1_SP_ABS_MODE flag mandatory.
>
> I'll fold this information into the patch changelog before comitting; if
> you disagree, please let me know.

That will be great.
Appreciate!

>
> --
> Jiri Kosina
> SUSE Labs
>
--
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
Jiri Kosina Sept. 22, 2016, 9:08 a.m. UTC | #5
On Mon, 19 Sep 2016, Kai-Heng Feng wrote:

> The stick device does not work after resume, add U1_SP_ABS_MODE flag can
> make the device work after resume.
> 
> Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>

Applied with ammended changelog. Thanks,
diff mbox

Patch

diff --git a/drivers/hid/hid-alps.c b/drivers/hid/hid-alps.c
index 048befd..390f8d3 100644
--- a/drivers/hid/hid-alps.c
+++ b/drivers/hid/hid-alps.c
@@ -244,13 +244,13 @@  static int alps_raw_event(struct hid_device *hdev,
 static int alps_post_reset(struct hid_device *hdev)
 {
 	return u1_read_write_register(hdev, ADDRESS_U1_DEV_CTRL_1,
-				NULL, U1_TP_ABS_MODE, false);
+				NULL, U1_TP_ABS_MODE | U1_SP_ABS_MODE, false);
 }
 
 static int alps_post_resume(struct hid_device *hdev)
 {
 	return u1_read_write_register(hdev, ADDRESS_U1_DEV_CTRL_1,
-				NULL, U1_TP_ABS_MODE, false);
+				NULL, U1_TP_ABS_MODE | U1_SP_ABS_MODE, false);
 }
 #endif /* CONFIG_PM */