Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 253753
b: refs/heads/master
c: b84bd27
h: refs/heads/master
i:
  253751: 730fd30
v: v3
  • Loading branch information
Benjamin Tissoires authored and Jiri Kosina committed Jun 12, 2011
1 parent 2bfe5d6 commit 77ab5e7
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 19 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c2f019713df67e09d32e1b3c12f147a83a579d25
refs/heads/master: b84bd27fe70206f9253c395958134e4e4b7e55f0
57 changes: 39 additions & 18 deletions trunk/drivers/hid/hid-multitouch.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ struct mt_device {
struct mt_class *mtclass; /* our mt device class */
unsigned last_field_index; /* last field index of the report */
unsigned last_slot_field; /* the last field of a slot */
int last_mt_collection; /* last known mt-related collection */
__s8 inputmode; /* InputMode HID feature, -1 if non-existent */
__u8 num_received; /* how many contacts we received */
__u8 num_expected; /* expected last contact index */
Expand Down Expand Up @@ -225,8 +226,10 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
cls->sn_move);
/* touchscreen emulation */
set_abs(hi->input, ABS_X, field, cls->sn_move);
td->last_slot_field = usage->hid;
td->last_field_index = field->index;
if (td->last_mt_collection == usage->collection_index) {
td->last_slot_field = usage->hid;
td->last_field_index = field->index;
}
return 1;
case HID_GD_Y:
if (quirks & MT_QUIRK_EGALAX_XYZ_FIXUP)
Expand All @@ -237,40 +240,51 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
cls->sn_move);
/* touchscreen emulation */
set_abs(hi->input, ABS_Y, field, cls->sn_move);
td->last_slot_field = usage->hid;
td->last_field_index = field->index;
if (td->last_mt_collection == usage->collection_index) {
td->last_slot_field = usage->hid;
td->last_field_index = field->index;
}
return 1;
}
return 0;

case HID_UP_DIGITIZER:
switch (usage->hid) {
case HID_DG_INRANGE:
td->last_slot_field = usage->hid;
td->last_field_index = field->index;
if (td->last_mt_collection == usage->collection_index) {
td->last_slot_field = usage->hid;
td->last_field_index = field->index;
}
return 1;
case HID_DG_CONFIDENCE:
td->last_slot_field = usage->hid;
td->last_field_index = field->index;
if (td->last_mt_collection == usage->collection_index) {
td->last_slot_field = usage->hid;
td->last_field_index = field->index;
}
return 1;
case HID_DG_TIPSWITCH:
hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH);
input_set_capability(hi->input, EV_KEY, BTN_TOUCH);
td->last_slot_field = usage->hid;
td->last_field_index = field->index;
if (td->last_mt_collection == usage->collection_index) {
td->last_slot_field = usage->hid;
td->last_field_index = field->index;
}
return 1;
case HID_DG_CONTACTID:
input_mt_init_slots(hi->input, td->maxcontacts);
td->last_slot_field = usage->hid;
td->last_field_index = field->index;
td->last_mt_collection = usage->collection_index;
return 1;
case HID_DG_WIDTH:
hid_map_usage(hi, usage, bit, max,
EV_ABS, ABS_MT_TOUCH_MAJOR);
set_abs(hi->input, ABS_MT_TOUCH_MAJOR, field,
cls->sn_width);
td->last_slot_field = usage->hid;
td->last_field_index = field->index;
if (td->last_mt_collection == usage->collection_index) {
td->last_slot_field = usage->hid;
td->last_field_index = field->index;
}
return 1;
case HID_DG_HEIGHT:
hid_map_usage(hi, usage, bit, max,
Expand All @@ -279,8 +293,10 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
cls->sn_height);
input_set_abs_params(hi->input,
ABS_MT_ORIENTATION, 0, 1, 0, 0);
td->last_slot_field = usage->hid;
td->last_field_index = field->index;
if (td->last_mt_collection == usage->collection_index) {
td->last_slot_field = usage->hid;
td->last_field_index = field->index;
}
return 1;
case HID_DG_TIPPRESSURE:
if (quirks & MT_QUIRK_EGALAX_XYZ_FIXUP)
Expand All @@ -292,16 +308,20 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
/* touchscreen emulation */
set_abs(hi->input, ABS_PRESSURE, field,
cls->sn_pressure);
td->last_slot_field = usage->hid;
td->last_field_index = field->index;
if (td->last_mt_collection == usage->collection_index) {
td->last_slot_field = usage->hid;
td->last_field_index = field->index;
}
return 1;
case HID_DG_CONTACTCOUNT:
td->last_field_index = field->index;
if (td->last_mt_collection == usage->collection_index)
td->last_field_index = field->index;
return 1;
case HID_DG_CONTACTMAX:
/* we don't set td->last_slot_field as contactcount and
* contact max are global to the report */
td->last_field_index = field->index;
if (td->last_mt_collection == usage->collection_index)
td->last_field_index = field->index;
return -1;
}
/* let hid-input decide for the others */
Expand Down Expand Up @@ -516,6 +536,7 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
}
td->mtclass = mtclass;
td->inputmode = -1;
td->last_mt_collection = -1;
hid_set_drvdata(hdev, td);

ret = hid_parse(hdev);
Expand Down

0 comments on commit 77ab5e7

Please sign in to comment.