Re: [PATCH] HID: magicmouse: ignore 'ivalid report id' while switching modes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 23 Aug 2011, Jaikumar Ganesh wrote:

> > From: Jiri Kosina <jkosina@xxxxxxx>
> > Subject: [PATCH] HID: magicmouse: ignore 'ivalid report id' while switching modes, v2
> >
> > This is basically a more generic respin of 23746a6 ("HID: magicmouse: ignore
> > 'ivalid report id' while switching modes") which got reverted later by
> > c3a492.
> >
> > It turns out that on some configurations, this is actually still the case
> > and we are not able to detect in runtime.
> >
> > The device reponds with 'invalid report id' when feature report switching it
> > into multitouch mode is sent to it.
> >
> > This has been silently ignored before 0825411ade ("HID: bt: Wait for ACK
> > on Sent Reports"), but since this commit, it propagates -EIO from the _raw
> > callback .
> >
> > So let the driver ignore -EIO as response to 0xd7,0x01 report, as that's
> > how the device reacts in normal mode.
> >
> > Sad, but following reality.
> >
> > This fixes https://bugzilla.kernel.org/show_bug.cgi?id=35022
> >
> > Reported-by: Chase Douglas <chase.douglas@xxxxxxxxxxxxx>
> > Reported-by: Jaikumar Ganesh <jaikumarg@xxxxxxxxxxx>
> > Tested-by: Chase Douglas <chase.douglas@xxxxxxxxxxxxx>
> > Signed-off-by: Jiri Kosina <jkosina@xxxxxxx>
> > ---
> >  drivers/hid/hid-magicmouse.c |   10 +++++++++-
> >  1 files changed, 9 insertions(+), 1 deletions(-)
> >
> > diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c
> > index b5bdab3..f0fbd7b 100644
> > --- a/drivers/hid/hid-magicmouse.c
> > +++ b/drivers/hid/hid-magicmouse.c
> > @@ -537,9 +537,17 @@ static int magicmouse_probe(struct hid_device *hdev,
> >        }
> >        report->size = 6;
> >
> > +       /*
> > +        * Some devices repond with 'invalid report id' when feature
> > +        * report switching it into multitouch mode is sent to it.
> > +        *
> > +        * This results in -EIO from the _raw low-level transport callback,
> > +        * but there seems to be no other way of switching the mode.
> > +        * Thus the super-ugly hacky success check below.
> > +        */
> >        ret = hdev->hid_output_raw_report(hdev, feature, sizeof(feature),
> >                        HID_FEATURE_REPORT);
> > -       if (ret != sizeof(feature)) {
> > +       if (ret != -EIO && ret != sizeof(feature)) {
> >                hid_err(hdev, "unable to request touch data (%d)\n", ret);
> >                goto err_stop_hw;
> >        }
> > --
> > 1.7.3.1
> 
> Tested. Please push.

Okay, I have queued it with your Tested-by. Thanks,

-- 
Jiri Kosina
SUSE Labs
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux