Hi Jaikumar On Sat, Sep 17, 2011 at 12:12 AM, Jaikumar Ganesh <jaikumarg@xxxxxxxxxxx> wrote: > magicmouse_select_input was being called after device This should be "*setup_input" not "*select_input". > registration. Hence, any thread scanning "/dev" for new > devices will see the input bits change on an open file > descriptor. Fix this by calling select_input inside > input_mapping. Isn't input_mapped more appropriate here? Otherwise hidinput_configure_usage could probably overwrite your abs values. > Based on discussions with Michael Poole <mdpoole@xxxxxxxxxxx> > > Change-Id: I289a37a850977c2cbbc9eb76fbf6c9a28d1833c5 > Signed-off-by: Jaikumar Ganesh <jaikumarg@xxxxxxxxxxx> > --- > drivers/hid/hid-magicmouse.c | 13 +++++++------ > 1 files changed, 7 insertions(+), 6 deletions(-) > > diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c > index 56d0539..1175452 100644 > --- a/drivers/hid/hid-magicmouse.c > +++ b/drivers/hid/hid-magicmouse.c > @@ -98,6 +98,7 @@ struct magicmouse_sc { > int ntouches; > int scroll_accel; > unsigned long scroll_jiffies; > + bool setup_input; > > struct { > short x; > @@ -437,6 +438,11 @@ static int magicmouse_input_mapping(struct hid_device *hdev, > if (!msc->input) > msc->input = hi->input; > > + if (!msc->setup_input) { > + magicmouse_setup_input(msc->input, hdev); > + msc->setup_input = true; > + } > + > /* Magic Trackpad does not give relative data after switching to MT */ > if (hi->input->id.product == USB_DEVICE_ID_APPLE_MAGICTRACKPAD && > field->flags & HID_MAIN_ITEM_RELATIVE) > @@ -465,6 +471,7 @@ static int magicmouse_probe(struct hid_device *hdev, > hid_set_drvdata(hdev, msc); > > msc->single_touch_id = NO_TOUCHES; > + msc->setup_input = false; > > ret = hid_parse(hdev); > if (ret) { > @@ -478,12 +485,6 @@ static int magicmouse_probe(struct hid_device *hdev, > goto err_free; > } > > - /* We do this after hid-input is done parsing reports so that > - * hid-input uses the most natural button and axis IDs. > - */ > - if (msc->input) > - magicmouse_setup_input(msc->input, hdev); > - > if (id->product == USB_DEVICE_ID_APPLE_MAGICMOUSE) > report = hid_register_report(hdev, HID_INPUT_REPORT, > MOUSE_REPORT_ID); > -- > 1.7.3.1 > > -- > 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 > I think this is the same problem as: http://thread.gmane.org/gmane.linux.kernel.input/21660/focus=21669 Several drivers need to set additional flags on the input device. I'd recommend an "input_register" callback that is called after hidinput_configure_usage() is called but before the input device is registered. But it is only called once and not for every hid-descr field. Then we could skip the "msc->setup_input" boolean flag. However, until then this fix seems fine, although I'd use input_mapped instead of input_mapping. Regards David -- 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