From: Lamarque Vieira Souza <lamarque@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: linux-bluetooth@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] Fix for Acer Bluetooth Optical Rechargeable Mouse
Date: Thu, 23 Jul 2009 18:30:57 -0300 [thread overview]
Message-ID: <200907231830.57719.lamarque@gmail.com> (raw)
In-Reply-To: <20090723132810.6a7aa3dc.akpm@linux-foundation.org>
Hi,
Em Quinta-feira 23 Julho 2009, Andrew Morton escreveu:
> On Fri, 17 Jul 2009 03:01:43 -0300
>
> Lamarque Vieira Souza <lamarque@gmail.com> wrote:
> > This patch works around one problem with my Acer Bluetooth Optical
> > Rechargeable Mouse where the cursor gets stuck at screen's upper-left
> > corner. Even my notebook's touchpad is not able to move cursor when the
> > bluetooth mouse is connected to my Acer Ferrari 4005 notebook. Using
> > input session instead of hid session solves this problem although the
> > cursor still moves a little sluggishly with the bluetooth mouse, cursor
> > moves correctly using the touchpad. My bluetooth mouse used to work well
> > (no sluggish) until kernel 2.6.21, since then the problems are getting
> > worse with each kernel release (it got sluggish in 2.6.22 and this this
> > upper-left corner problem appeared in 2.6.28 or 2.6.27).
By the way, I have found that bug
http://bugzilla.kernel.org/show_bug.cgi?id=13314 is the cause of the sluggish
in my mouse.
> The patch also adds a new general quirk infrastructure to the hidp
> core. That's worth noting in the changelog! I added this:
>
> The patch adds a general quirk handling framework to the HIDP
> core and then uses this framework to implement a quirk for this
> device.
Ok, that is better.
> > linux-2.6.30.1-lvs/net/bluetooth/hidp/core.c
> > --- linux-2.6.30.1-orig/net/bluetooth/hidp/core.c 2009-07-16
> > 23:53:04.697925121 -0300
> > +++ linux-2.6.30.1-lvs/net/bluetooth/hidp/core.c 2009-07-17
> > 02:35:03.969927384 -0300
> > @@ -73,6 +73,43 @@ static unsigned char hidp_keycode[256] =
> >
> > static unsigned char hidp_mkeyspat[] = { 0x01, 0x01, 0x01, 0x01, 0x01,
> > 0x01 };
> >
> > +/* HIDP device quirks */
> > +enum {
> > + HIDP_QUIRK_USE_INPUT_SESSION
> > +};
> > +
> > +struct quirk_id {
> > + __u16 vendor;
> > + __u16 product;
> > + unsigned long quirks;
> > +};
> > +
> > +static const struct quirk_id hidp_quirks[] = {
> > + {
> > + /* Lamarque: Acer Bluetooth Optical Rechargeable Mouse
> > + * does not work properly with hid session since 2.6.27. */
> > + .vendor = 0x0458,
> > + .product = 0x0058,
> > + .quirks = 1 << HIDP_QUIRK_USE_INPUT_SESSION
> > + },
> > +
> > + { /* end: all zeroes */ }
> > +};
> > +
> > +static int quirk_test_bit(__u16 vendor, __u16 product, int quirk)
> > +{
> > + const struct quirk_id *q = &hidp_quirks[0];
> > +
> > + while (q->vendor != vendor && q->product != product &&
> > + q->vendor && q->product)
> > + q++;
> > +
> > + if (q->vendor == vendor && q->product == product)
> > + return test_bit(quirk, &q->quirks);
> > +
> > + return 0;
> > +}
>
> Looks OK, but...
>
> It's a bit neater (IMO) and probably more efficient to replace the
> null-terminated search with a fixed-size one, using ARRAY_SIZE().
>
> How does this look?
It really looks better. Thanks for the tip about ARRAY_SIZE.
> static const struct quirk_id hidp_quirks[] = {
> {
> /* Lamarque: Acer Bluetooth Optical Rechargeable Mouse
> * does not work properly with hid session since 2.6.27. */
> .vendor = 0x0458,
> .product = 0x0058,
> .quirks = 1 << HIDP_QUIRK_USE_INPUT_SESSION
> },
> };
>
> static int quirk_test_bit(__u16 vendor, __u16 product, int quirk)
> {
> int i;
>
> for (i = 0; i < ARRAY_SIZE(hidp_quirks); i++) {
> const struct quirk_id *q = hidp_quirks + i;
>
> if (q->vendor == vendor && q->product == product)
> return test_bit(quirk, &q->quirks);
> }
>
> return 0;
> }
>
>
>
> Incremental patch:
>
> ---
> a/net/bluetooth/hidp/core.c~bluetooth-fix-for-acer-bluetooth-optical-rechar
>geable-mouse-fix +++ a/net/bluetooth/hidp/core.c
> @@ -92,20 +92,18 @@ static const struct quirk_id hidp_quirks
> .product = 0x0058,
> .quirks = 1 << HIDP_QUIRK_USE_INPUT_SESSION
> },
> -
> - { /* end: all zeroes */ }
> };
>
> static int quirk_test_bit(__u16 vendor, __u16 product, int quirk)
> {
> - const struct quirk_id *q = &hidp_quirks[0];
> + int i;
>
> - while (q->vendor != vendor && q->product != product &&
> - q->vendor && q->product)
> - q++;
> + for (i = 0; i < ARRAY_SIZE(hidp_quirks); i++) {
> + const struct quirk_id *q = hidp_quirks + i;
>
> - if (q->vendor == vendor && q->product == product)
> - return test_bit(quirk, &q->quirks);
> + if (q->vendor == vendor && q->product == product)
> + return test_bit(quirk, &q->quirks);
> + }
>
> return 0;
> }
> _
--
Lamarque V. Souza
http://www.geographicguide.com/brazil.htm
Linux User #57137 - http://counter.li.org/
next prev parent reply other threads:[~2009-07-23 21:31 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-07-17 6:01 [PATCH] Fix for Acer Bluetooth Optical Rechargeable Mouse Lamarque Vieira Souza
2009-07-23 20:28 ` Andrew Morton
2009-07-23 21:30 ` Lamarque Vieira Souza [this message]
2009-07-23 21:43 ` Andrew Morton
2009-07-23 22:00 ` Lamarque Vieira Souza
2009-07-23 22:06 ` Andrew Morton
2009-07-23 22:21 ` Lamarque Vieira Souza
2009-07-23 23:05 ` Anthony Waters
2009-07-23 23:59 ` Lamarque Vieira Souza
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200907231830.57719.lamarque@gmail.com \
--to=lamarque@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=linux-bluetooth@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox