* [PATCH 1/2] hid: ntrig NO_INIT_REPORTS @ 2011-03-10 4:33 Rafi Rubin 2011-03-10 4:33 ` [PATCH 2/2] hid-ntrig: init settle and mode check Rafi Rubin ` (2 more replies) 0 siblings, 3 replies; 6+ messages in thread From: Rafi Rubin @ 2011-03-10 4:33 UTC (permalink / raw) To: jkosina, linux-input; +Cc: linux-kernel, micki, rydberg, chatty, Rafi Rubin Probing reports does bad things with some ntrig firmwares, better to just leave them alone. Signed-off-by: Rafi Rubin <rafi@seas.upenn.edu> --- This resolves an annoying delay on initialization and reduces the chance of the device coming up in an odd state or crashing. --- drivers/hid/hid-ntrig.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/drivers/hid/hid-ntrig.c b/drivers/hid/hid-ntrig.c index b1e9cca..850ba14 100644 --- a/drivers/hid/hid-ntrig.c +++ b/drivers/hid/hid-ntrig.c @@ -837,7 +837,8 @@ static int ntrig_probe(struct hid_device *hdev, const struct hid_device_id *id) struct hid_report *report; if (id->driver_data) - hdev->quirks |= HID_QUIRK_MULTI_INPUT; + hdev->quirks |= HID_QUIRK_MULTI_INPUT + | HID_QUIRK_NO_INIT_REPORTS; nd = kmalloc(sizeof(struct ntrig_data), GFP_KERNEL); if (!nd) { -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] hid-ntrig: init settle and mode check 2011-03-10 4:33 [PATCH 1/2] hid: ntrig NO_INIT_REPORTS Rafi Rubin @ 2011-03-10 4:33 ` Rafi Rubin 2011-03-11 1:52 ` Peter Hutterer 2011-03-10 10:38 ` [PATCH 1/2] hid: ntrig NO_INIT_REPORTS Jiri Kosina 2011-03-11 1:42 ` Peter Hutterer 2 siblings, 1 reply; 6+ messages in thread From: Rafi Rubin @ 2011-03-10 4:33 UTC (permalink / raw) To: jkosina, linux-input; +Cc: linux-kernel, micki, rydberg, chatty, Rafi Rubin Adding a wait before the wakeup signal. As a precautionary measure sanity check the current sensor mode. If needed reset it to "dual". Signed-off-by: Rafi Rubin <rafi@seas.upenn.edu> When the device is responding poorly and needs the wakeup call, it was missing it. Giving it a chance to settle first improves the chances that signal gets through. I was also seeing the device come up in strange modes where it did not respond to physical stimulus. Hopefully the quirk will fix that, but even so it seems like a good idea to check. It also makes me curious what the "off" code is. --- drivers/hid/hid-ntrig.c | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 43 insertions(+), 2 deletions(-) diff --git a/drivers/hid/hid-ntrig.c b/drivers/hid/hid-ntrig.c index 850ba14..fa862c5 100644 --- a/drivers/hid/hid-ntrig.c +++ b/drivers/hid/hid-ntrig.c @@ -110,6 +110,36 @@ static int ntrig_version_string(unsigned char *raw, char *buf) return sprintf(buf, "%u.%u.%u.%u.%u", a, b, c, d, e); } +static inline int ntrig_get_mode(struct hid_device *hdev) +{ + struct hid_report *report = hdev->report_enum[HID_FEATURE_REPORT]. + report_id_hash[0x0d]; + + if (!report) + return -EINVAL; + + usbhid_submit_report(hdev, report, USB_DIR_IN); + usbhid_wait_io(hdev); + return (int)report->field[0]->value[0]; +} + +static inline void ntrig_set_mode(struct hid_device *hdev, const int mode) +{ + struct hid_report *report; + __u8 mode_commands[4] = { 0xe, 0xf, 0x1b, 0x10 }; + + if (mode < 0 || mode > 3) + return; + + report = hdev->report_enum[HID_FEATURE_REPORT]. + report_id_hash[mode_commands[mode]]; + + if (!report) + return; + + usbhid_submit_report(hdev, report, USB_DIR_IN); +} + static void ntrig_report_version(struct hid_device *hdev) { int ret; @@ -905,8 +935,19 @@ static int ntrig_probe(struct hid_device *hdev, const struct hid_device_id *id) /* This is needed for devices with more recent firmware versions */ report = hdev->report_enum[HID_FEATURE_REPORT].report_id_hash[0x0a]; - if (report) - usbhid_submit_report(hdev, report, USB_DIR_OUT); + if (report) { + /* Let the device settle to ensure the wakeup message gets + * through */ + usbhid_wait_io(hdev); + usbhid_submit_report(hdev, report, USB_DIR_IN); + + /* + * Sanity check: if the current mode is invalid reset it to + * something reasonable. + */ + if (ntrig_get_mode(hdev) >= 4) + ntrig_set_mode(hdev, 3); + } ntrig_report_version(hdev); -- 1.7.4.1 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] hid-ntrig: init settle and mode check 2011-03-10 4:33 ` [PATCH 2/2] hid-ntrig: init settle and mode check Rafi Rubin @ 2011-03-11 1:52 ` Peter Hutterer 2011-03-14 12:10 ` Jiri Kosina 0 siblings, 1 reply; 6+ messages in thread From: Peter Hutterer @ 2011-03-11 1:52 UTC (permalink / raw) To: Rafi Rubin; +Cc: jkosina, linux-input, linux-kernel, micki, rydberg, chatty On Wed, Mar 09, 2011 at 11:33:52PM -0500, Rafi Rubin wrote: > Adding a wait before the wakeup signal. > > As a precautionary measure sanity check the current sensor mode. If > needed reset it to "dual". > > Signed-off-by: Rafi Rubin <rafi@seas.upenn.edu> > > When the device is responding poorly and needs the wakeup call, it was > missing it. Giving it a chance to settle first improves the chances > that signal gets through. > > I was also seeing the device come up in strange modes where it did not > respond to physical stimulus. Hopefully the quirk will fix that, but > even so it seems like a good idea to check. It also makes me curious > what the "off" code is. > --- > drivers/hid/hid-ntrig.c | 45 +++++++++++++++++++++++++++++++++++++++++++-- > 1 files changed, 43 insertions(+), 2 deletions(-) no negative effects Tested-by: Peter Hutterer <peter.hutterer@who-t.net> Cheers, Peter > > diff --git a/drivers/hid/hid-ntrig.c b/drivers/hid/hid-ntrig.c > index 850ba14..fa862c5 100644 > --- a/drivers/hid/hid-ntrig.c > +++ b/drivers/hid/hid-ntrig.c > @@ -110,6 +110,36 @@ static int ntrig_version_string(unsigned char *raw, char *buf) > return sprintf(buf, "%u.%u.%u.%u.%u", a, b, c, d, e); > } > > +static inline int ntrig_get_mode(struct hid_device *hdev) > +{ > + struct hid_report *report = hdev->report_enum[HID_FEATURE_REPORT]. > + report_id_hash[0x0d]; > + > + if (!report) > + return -EINVAL; > + > + usbhid_submit_report(hdev, report, USB_DIR_IN); > + usbhid_wait_io(hdev); > + return (int)report->field[0]->value[0]; > +} > + > +static inline void ntrig_set_mode(struct hid_device *hdev, const int mode) > +{ > + struct hid_report *report; > + __u8 mode_commands[4] = { 0xe, 0xf, 0x1b, 0x10 }; > + > + if (mode < 0 || mode > 3) > + return; > + > + report = hdev->report_enum[HID_FEATURE_REPORT]. > + report_id_hash[mode_commands[mode]]; > + > + if (!report) > + return; > + > + usbhid_submit_report(hdev, report, USB_DIR_IN); > +} > + > static void ntrig_report_version(struct hid_device *hdev) > { > int ret; > @@ -905,8 +935,19 @@ static int ntrig_probe(struct hid_device *hdev, const struct hid_device_id *id) > > /* This is needed for devices with more recent firmware versions */ > report = hdev->report_enum[HID_FEATURE_REPORT].report_id_hash[0x0a]; > - if (report) > - usbhid_submit_report(hdev, report, USB_DIR_OUT); > + if (report) { > + /* Let the device settle to ensure the wakeup message gets > + * through */ > + usbhid_wait_io(hdev); > + usbhid_submit_report(hdev, report, USB_DIR_IN); > + > + /* > + * Sanity check: if the current mode is invalid reset it to > + * something reasonable. > + */ > + if (ntrig_get_mode(hdev) >= 4) > + ntrig_set_mode(hdev, 3); > + } > > ntrig_report_version(hdev); > > -- > 1.7.4.1 > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] hid-ntrig: init settle and mode check 2011-03-11 1:52 ` Peter Hutterer @ 2011-03-14 12:10 ` Jiri Kosina 0 siblings, 0 replies; 6+ messages in thread From: Jiri Kosina @ 2011-03-14 12:10 UTC (permalink / raw) To: Peter Hutterer Cc: Rafi Rubin, linux-input, linux-kernel, micki, rydberg, chatty On Fri, 11 Mar 2011, Peter Hutterer wrote: > > Adding a wait before the wakeup signal. > > > > As a precautionary measure sanity check the current sensor mode. If > > needed reset it to "dual". > > > > Signed-off-by: Rafi Rubin <rafi@seas.upenn.edu> > > > > When the device is responding poorly and needs the wakeup call, it was > > missing it. Giving it a chance to settle first improves the chances > > that signal gets through. > > > > I was also seeing the device come up in strange modes where it did not > > respond to physical stimulus. Hopefully the quirk will fix that, but > > even so it seems like a good idea to check. It also makes me curious > > what the "off" code is. > > --- > > drivers/hid/hid-ntrig.c | 45 +++++++++++++++++++++++++++++++++++++++++++-- > > 1 files changed, 43 insertions(+), 2 deletions(-) > > no negative effects > > Tested-by: Peter Hutterer <peter.hutterer@who-t.net> Applied, thanks. -- Jiri Kosina SUSE Labs, Novell Inc. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] hid: ntrig NO_INIT_REPORTS 2011-03-10 4:33 [PATCH 1/2] hid: ntrig NO_INIT_REPORTS Rafi Rubin 2011-03-10 4:33 ` [PATCH 2/2] hid-ntrig: init settle and mode check Rafi Rubin @ 2011-03-10 10:38 ` Jiri Kosina 2011-03-11 1:42 ` Peter Hutterer 2 siblings, 0 replies; 6+ messages in thread From: Jiri Kosina @ 2011-03-10 10:38 UTC (permalink / raw) To: Rafi Rubin; +Cc: linux-input, linux-kernel, micki, rydberg, chatty On Wed, 9 Mar 2011, Rafi Rubin wrote: > Probing reports does bad things with some ntrig firmwares, better to > just leave them alone. > > Signed-off-by: Rafi Rubin <rafi@seas.upenn.edu> > > --- > > This resolves an annoying delay on initialization and reduces the > chance of the device coming up in an odd state or crashing. Applied. > --- > drivers/hid/hid-ntrig.c | 3 ++- > 1 files changed, 2 insertions(+), 1 deletions(-) > > diff --git a/drivers/hid/hid-ntrig.c b/drivers/hid/hid-ntrig.c > index b1e9cca..850ba14 100644 > --- a/drivers/hid/hid-ntrig.c > +++ b/drivers/hid/hid-ntrig.c > @@ -837,7 +837,8 @@ static int ntrig_probe(struct hid_device *hdev, const struct hid_device_id *id) > struct hid_report *report; > > if (id->driver_data) > - hdev->quirks |= HID_QUIRK_MULTI_INPUT; > + hdev->quirks |= HID_QUIRK_MULTI_INPUT > + | HID_QUIRK_NO_INIT_REPORTS; > > nd = kmalloc(sizeof(struct ntrig_data), GFP_KERNEL); > if (!nd) { > -- > 1.7.4.1 > -- Jiri Kosina SUSE Labs, Novell Inc. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/2] hid: ntrig NO_INIT_REPORTS 2011-03-10 4:33 [PATCH 1/2] hid: ntrig NO_INIT_REPORTS Rafi Rubin 2011-03-10 4:33 ` [PATCH 2/2] hid-ntrig: init settle and mode check Rafi Rubin 2011-03-10 10:38 ` [PATCH 1/2] hid: ntrig NO_INIT_REPORTS Jiri Kosina @ 2011-03-11 1:42 ` Peter Hutterer 2 siblings, 0 replies; 6+ messages in thread From: Peter Hutterer @ 2011-03-11 1:42 UTC (permalink / raw) To: Rafi Rubin; +Cc: jkosina, linux-input, linux-kernel, micki, rydberg, chatty On Wed, Mar 09, 2011 at 11:33:51PM -0500, Rafi Rubin wrote: > Probing reports does bad things with some ntrig firmwares, better to > just leave them alone. > > Signed-off-by: Rafi Rubin <rafi@seas.upenn.edu> > > --- > > This resolves an annoying delay on initialization and reduces the > chance of the device coming up in an odd state or crashing. never saw those delays but this patch doesn't make anything worse for me. Tested-by: Peter Hutterer <peter.hutterer@who-t.net> Cheers, Peter > --- > drivers/hid/hid-ntrig.c | 3 ++- > 1 files changed, 2 insertions(+), 1 deletions(-) > > diff --git a/drivers/hid/hid-ntrig.c b/drivers/hid/hid-ntrig.c > index b1e9cca..850ba14 100644 > --- a/drivers/hid/hid-ntrig.c > +++ b/drivers/hid/hid-ntrig.c > @@ -837,7 +837,8 @@ static int ntrig_probe(struct hid_device *hdev, const struct hid_device_id *id) > struct hid_report *report; > > if (id->driver_data) > - hdev->quirks |= HID_QUIRK_MULTI_INPUT; > + hdev->quirks |= HID_QUIRK_MULTI_INPUT > + | HID_QUIRK_NO_INIT_REPORTS; > > nd = kmalloc(sizeof(struct ntrig_data), GFP_KERNEL); > if (!nd) { > -- > 1.7.4.1 > > -- > 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 > ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2011-03-14 12:10 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-03-10 4:33 [PATCH 1/2] hid: ntrig NO_INIT_REPORTS Rafi Rubin 2011-03-10 4:33 ` [PATCH 2/2] hid-ntrig: init settle and mode check Rafi Rubin 2011-03-11 1:52 ` Peter Hutterer 2011-03-14 12:10 ` Jiri Kosina 2011-03-10 10:38 ` [PATCH 1/2] hid: ntrig NO_INIT_REPORTS Jiri Kosina 2011-03-11 1:42 ` Peter Hutterer
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).