diff mbox

hid: Add a hid quirk for input sync override

Message ID 1282659569-10373-1-git-send-email-rydberg@euromail.se
State Accepted
Delegated to: Leann Ogasawara
Headers show

Commit Message

Henrik Rydberg Aug. 24, 2010, 2:19 p.m. UTC
As of lately, HID devices which send per-frame data split over several
HID reports have started to emerge. This patch adds a quirk which
allows the HID driver to take over the input layer synchronization,
and hence the control of the frame boundary.

Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
---
Ten days ago, there were reports on linux-input about broken
Multitouch HID drivers (egalax, 3m-pct) for new devices, including the
Joojoo. It turns out these are due to a new HID extension, pushed by a
large software company, which sends per-frame data in sequence.

I propose carrying the above patch for Maverick, to enable the process
of analyzing and fixing those drivers using dkms during the beta
cycle. I do not yet know what will happen upstream.

Henrik

 drivers/hid/hid-input.c |    3 +++
 include/linux/hid.h     |    1 +
 2 files changed, 4 insertions(+), 0 deletions(-)

Comments

Leann Ogasawara Aug. 24, 2010, 5:30 p.m. UTC | #1
Applied to Maverick linux master.

Thanks,
Leann

On Tue, 2010-08-24 at 16:19 +0200, Henrik Rydberg wrote:
> As of lately, HID devices which send per-frame data split over several
> HID reports have started to emerge. This patch adds a quirk which
> allows the HID driver to take over the input layer synchronization,
> and hence the control of the frame boundary.
> 
> Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
> ---
> Ten days ago, there were reports on linux-input about broken
> Multitouch HID drivers (egalax, 3m-pct) for new devices, including the
> Joojoo. It turns out these are due to a new HID extension, pushed by a
> large software company, which sends per-frame data in sequence.
> 
> I propose carrying the above patch for Maverick, to enable the process
> of analyzing and fixing those drivers using dkms during the beta
> cycle. I do not yet know what will happen upstream.
> 
> Henrik
> 
>  drivers/hid/hid-input.c |    3 +++
>  include/linux/hid.h     |    1 +
>  2 files changed, 4 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
> index 69d152e..9d97934 100644
> --- a/drivers/hid/hid-input.c
> +++ b/drivers/hid/hid-input.c
> @@ -656,6 +656,9 @@ void hidinput_report_event(struct hid_device *hid, struct hid_report *report)
>  {
>  	struct hid_input *hidinput;
>  
> +	if (hid->quirks & HID_QUIRK_NO_INPUT_SYNC)
> +		return;
> +
>  	list_for_each_entry(hidinput, &hid->inputs, list)
>  		input_sync(hidinput->input);
>  }
> diff --git a/include/linux/hid.h b/include/linux/hid.h
> index 895001f..8029883 100644
> --- a/include/linux/hid.h
> +++ b/include/linux/hid.h
> @@ -315,6 +315,7 @@ struct hid_item {
>  #define HID_QUIRK_FULLSPEED_INTERVAL		0x10000000
>  #define HID_QUIRK_NO_INIT_REPORTS		0x20000000
>  #define HID_QUIRK_NO_IGNORE			0x40000000
> +#define HID_QUIRK_NO_INPUT_SYNC			0x80000000
>  
>  /*
>   * This is the global environment of the parser. This information is
> -- 
> 1.7.1
> 
>
diff mbox

Patch

diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index 69d152e..9d97934 100644
--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -656,6 +656,9 @@  void hidinput_report_event(struct hid_device *hid, struct hid_report *report)
 {
 	struct hid_input *hidinput;
 
+	if (hid->quirks & HID_QUIRK_NO_INPUT_SYNC)
+		return;
+
 	list_for_each_entry(hidinput, &hid->inputs, list)
 		input_sync(hidinput->input);
 }
diff --git a/include/linux/hid.h b/include/linux/hid.h
index 895001f..8029883 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -315,6 +315,7 @@  struct hid_item {
 #define HID_QUIRK_FULLSPEED_INTERVAL		0x10000000
 #define HID_QUIRK_NO_INIT_REPORTS		0x20000000
 #define HID_QUIRK_NO_IGNORE			0x40000000
+#define HID_QUIRK_NO_INPUT_SYNC			0x80000000
 
 /*
  * This is the global environment of the parser. This information is