All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 1/1] HID:hid-multitouch: Add ELAN production request when resume.
@ 2012-08-15  9:21 Scott Liu
  2012-08-15  9:38 ` Jiri Kosina
  0 siblings, 1 reply; 2+ messages in thread
From: Scott Liu @ 2012-08-15  9:21 UTC (permalink / raw)
  To: benjamin.tissoires, Dmitry Torokhov, Jiri Kosina, linux-input,
	linux-kernel, eleghost
  Cc: Scott Liu

Add ELAN production request when resume.

Some Elan legacy devices require SET_IDLE to be set on resume.
It should be safe to send it to other devices too.
Tested on 3M, Stantum, Cypress, Zytronic, eGalax, and Elan panels. 


Signed-off-by: Scott Liu <scott.liu@emc.com.tw>
Suggested-off-by: Benjamin Tissoires <benjamin.tissoires@enac.fr>
---
 drivers/hid/hid-multitouch.c |   27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index 59c8b5c..e824c37 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -767,6 +767,32 @@ static int mt_reset_resume(struct hid_device *hdev)
 	mt_set_input_mode(hdev);
 	return 0;
 }
+
+static int mt_resume(struct hid_device *hdev)
+{
+	struct usb_interface *intf;
+	struct usb_host_interface *interface;
+	struct usb_device *dev;
+
+	if (hdev->bus != BUS_USB)
+		return 0;
+
+	intf = to_usb_interface(hdev->dev.parent);
+	interface = intf->cur_altsetting;
+	dev = hid_to_usb_dev(hdev);
+
+	/* Some Elan legacy devices require SET_IDLE to be set on resume.
+	 * It should be safe to send it to other devices too.
+	 * Tested on 3M, Stantum, Cypress, Zytronic, eGalax, and Elan panels. */
+
+	usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
+			HID_REQ_SET_IDLE,
+			USB_TYPE_CLASS | USB_RECIP_INTERFACE,
+			0, interface->desc.bInterfaceNumber,
+			NULL, 0, USB_CTRL_SET_TIMEOUT);
+
+	return 0;
+}
 #endif
 
 static void mt_remove(struct hid_device *hdev)
@@ -1092,6 +1118,7 @@ static struct hid_driver mt_driver = {
 	.event = mt_event,
 #ifdef CONFIG_PM
 	.reset_resume = mt_reset_resume,
+	.resume = mt_resume,
 #endif
 };
 
-- 
1.7.9.5


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

* Re: [PATCH v4 1/1] HID:hid-multitouch: Add ELAN production request when resume.
  2012-08-15  9:21 [PATCH v4 1/1] HID:hid-multitouch: Add ELAN production request when resume Scott Liu
@ 2012-08-15  9:38 ` Jiri Kosina
  0 siblings, 0 replies; 2+ messages in thread
From: Jiri Kosina @ 2012-08-15  9:38 UTC (permalink / raw)
  To: Scott Liu
  Cc: benjamin.tissoires, Dmitry Torokhov, linux-input, linux-kernel, eleghost

On Wed, 15 Aug 2012, Scott Liu wrote:

> Add ELAN production request when resume.
> 
> Some Elan legacy devices require SET_IDLE to be set on resume.
> It should be safe to send it to other devices too.
> Tested on 3M, Stantum, Cypress, Zytronic, eGalax, and Elan panels. 
> 
> 
> Signed-off-by: Scott Liu <scott.liu@emc.com.tw>
> Suggested-off-by: Benjamin Tissoires <benjamin.tissoires@enac.fr>
> ---
>  drivers/hid/hid-multitouch.c |   27 +++++++++++++++++++++++++++
>  1 file changed, 27 insertions(+)
> 
> diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
> index 59c8b5c..e824c37 100644
> --- a/drivers/hid/hid-multitouch.c
> +++ b/drivers/hid/hid-multitouch.c
> @@ -767,6 +767,32 @@ static int mt_reset_resume(struct hid_device *hdev)
>  	mt_set_input_mode(hdev);
>  	return 0;
>  }
> +
> +static int mt_resume(struct hid_device *hdev)
> +{
> +	struct usb_interface *intf;
> +	struct usb_host_interface *interface;
> +	struct usb_device *dev;
> +
> +	if (hdev->bus != BUS_USB)
> +		return 0;
> +
> +	intf = to_usb_interface(hdev->dev.parent);
> +	interface = intf->cur_altsetting;
> +	dev = hid_to_usb_dev(hdev);
> +
> +	/* Some Elan legacy devices require SET_IDLE to be set on resume.
> +	 * It should be safe to send it to other devices too.
> +	 * Tested on 3M, Stantum, Cypress, Zytronic, eGalax, and Elan panels. */
> +
> +	usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
> +			HID_REQ_SET_IDLE,
> +			USB_TYPE_CLASS | USB_RECIP_INTERFACE,
> +			0, interface->desc.bInterfaceNumber,
> +			NULL, 0, USB_CTRL_SET_TIMEOUT);
> +
> +	return 0;
> +}
>  #endif
>  
>  static void mt_remove(struct hid_device *hdev)
> @@ -1092,6 +1118,7 @@ static struct hid_driver mt_driver = {
>  	.event = mt_event,
>  #ifdef CONFIG_PM
>  	.reset_resume = mt_reset_resume,
> +	.resume = mt_resume,
>  #endif
>  };

I am now queuing this one in my tree. If it later turns out that some 
devices actually don't like this request (which one would hope is very 
unlinkely to happen), we'll have to make it device specific.

Thanks,

-- 
Jiri Kosina
SUSE Labs

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

end of thread, other threads:[~2012-08-15  9:38 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-08-15  9:21 [PATCH v4 1/1] HID:hid-multitouch: Add ELAN production request when resume Scott Liu
2012-08-15  9:38 ` Jiri Kosina

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.