Message ID | 1416871934-14133-3-git-send-email-killertofu@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Jiri Kosina |
Headers | show |
On Mon, Nov 24, 2014 at 6:32 PM, Jason Gerecke <killertofu@gmail.com> wrote: > If a HID descriptor places HID_DG_CONTACTID before HID_DG_X and HID_DG_Y then > the ABS_X and ABS_Y will not be automatically initialized by the call to > input_mt_init_slots. Here we move the setup of those axes outside of the > 'if' statement so that they're always present if the associated HID field > is. No, I am afraid, that this does not work. The solution is to call input_mt_init_slot once the mapping has been done. I am complaining here because input_mt_init_slot will set the fuzz to 0 for ABS_X and 4 for ABS_MT_POSITION_X. If both have a fuzz of 4, there will be a double de-fuzzing while sending out the single touch emulation. Likewise, the pressure should be initialized with ABS_MT_PRESSURE only (not implemented right now, I know). At the end of wacom_parse_hid in wacom_sys, there should be a call to a function which would finalize the initialization. And then, input_mt_init_slot will be called after ABS_MT_*, no matter what the order of the fields is. Cheers, Benjamin > > Signed-off-by: Jason Gerecke <killertofu@gmail.com> > --- > drivers/hid/wacom_wac.c | 10 ++++------ > 1 file changed, 4 insertions(+), 6 deletions(-) > > diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c > index 1468f00..a55e0ed 100644 > --- a/drivers/hid/wacom_wac.c > +++ b/drivers/hid/wacom_wac.c > @@ -1382,16 +1382,14 @@ static void wacom_wac_finger_usage_mapping(struct hid_device *hdev, > > switch (usage->hid) { > case HID_GD_X: > - if (touch_max == 1) > - wacom_map_usage(wacom, usage, field, EV_ABS, ABS_X, 4); > - else > + wacom_map_usage(wacom, usage, field, EV_ABS, ABS_X, 4); > + if (touch_max > 1) > wacom_map_usage(wacom, usage, field, EV_ABS, > ABS_MT_POSITION_X, 4); > break; > case HID_GD_Y: > - if (touch_max == 1) > - wacom_map_usage(wacom, usage, field, EV_ABS, ABS_Y, 4); > - else > + wacom_map_usage(wacom, usage, field, EV_ABS, ABS_Y, 4); > + if (touch_max > 1) > wacom_map_usage(wacom, usage, field, EV_ABS, > ABS_MT_POSITION_Y, 4); > break; > -- > 2.1.3 > -- 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
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c index 1468f00..a55e0ed 100644 --- a/drivers/hid/wacom_wac.c +++ b/drivers/hid/wacom_wac.c @@ -1382,16 +1382,14 @@ static void wacom_wac_finger_usage_mapping(struct hid_device *hdev, switch (usage->hid) { case HID_GD_X: - if (touch_max == 1) - wacom_map_usage(wacom, usage, field, EV_ABS, ABS_X, 4); - else + wacom_map_usage(wacom, usage, field, EV_ABS, ABS_X, 4); + if (touch_max > 1) wacom_map_usage(wacom, usage, field, EV_ABS, ABS_MT_POSITION_X, 4); break; case HID_GD_Y: - if (touch_max == 1) - wacom_map_usage(wacom, usage, field, EV_ABS, ABS_Y, 4); - else + wacom_map_usage(wacom, usage, field, EV_ABS, ABS_Y, 4); + if (touch_max > 1) wacom_map_usage(wacom, usage, field, EV_ABS, ABS_MT_POSITION_Y, 4); break;
If a HID descriptor places HID_DG_CONTACTID before HID_DG_X and HID_DG_Y then the ABS_X and ABS_Y will not be automatically initialized by the call to input_mt_init_slots. Here we move the setup of those axes outside of the 'if' statement so that they're always present if the associated HID field is. Signed-off-by: Jason Gerecke <killertofu@gmail.com> --- drivers/hid/wacom_wac.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)