On Tue, 30 Mar 2021, John Chen wrote: > It is observed that, with 3 button emulation, when middle button is > clicked, either the left button or right button is clicked as well. It > is caused by hidinput "correctly" acting on the event, oblivious to the > 3 button emulation. > > As raw_event has taken care of everything, no further processing is > needed. However, the only way to stop at raw_event is to return an error > (negative) value. Therefore, the processing is stopped at event instead. > > Signed-off-by: John Chen <johnchen902@xxxxxxxxx> > --- > drivers/hid/hid-magicmouse.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c > index 7aad6ca56780..c646b4cd3783 100644 > --- a/drivers/hid/hid-magicmouse.c > +++ b/drivers/hid/hid-magicmouse.c > @@ -440,6 +440,21 @@ static int magicmouse_raw_event(struct hid_device *hdev, > return 1; > } > > +static int magicmouse_event(struct hid_device *hdev, struct hid_field *field, > + struct hid_usage *usage, __s32 value) > +{ > + struct magicmouse_sc *msc = hid_get_drvdata(hdev); > + if (msc->input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2 && > + field->report->id == MOUSE2_REPORT_ID) { > + // magic_mouse_raw_event has done all the work. Skip hidinput. > + // > + // Specifically, hidinput may modify BTN_LEFT and BTN_RIGHT, > + // breaking emulate_3button. > + return 1; I have fixed the comment style here, and applied the series. Thanks, -- Jiri Kosina SUSE Labs