diff options
| -rw-r--r-- | drivers/hid/wacom_wac.c | 62 | ||||
| -rw-r--r-- | drivers/hid/wacom_wac.h | 2 |
2 files changed, 27 insertions, 37 deletions
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c index 1eae13cdc502..347e459dc113 100644 --- a/drivers/hid/wacom_wac.c +++ b/drivers/hid/wacom_wac.c | |||
| @@ -1544,13 +1544,11 @@ static void wacom_wac_finger_usage_mapping(struct hid_device *hdev, | |||
| 1544 | { | 1544 | { |
| 1545 | struct wacom *wacom = hid_get_drvdata(hdev); | 1545 | struct wacom *wacom = hid_get_drvdata(hdev); |
| 1546 | struct wacom_wac *wacom_wac = &wacom->wacom_wac; | 1546 | struct wacom_wac *wacom_wac = &wacom->wacom_wac; |
| 1547 | struct wacom_features *features = &wacom_wac->features; | ||
| 1548 | struct input_dev *input = wacom_wac->touch_input; | 1547 | struct input_dev *input = wacom_wac->touch_input; |
| 1549 | unsigned touch_max = wacom_wac->features.touch_max; | 1548 | unsigned touch_max = wacom_wac->features.touch_max; |
| 1550 | 1549 | ||
| 1551 | switch (usage->hid) { | 1550 | switch (usage->hid) { |
| 1552 | case HID_GD_X: | 1551 | case HID_GD_X: |
| 1553 | features->last_slot_field = usage->hid; | ||
| 1554 | if (touch_max == 1) | 1552 | if (touch_max == 1) |
| 1555 | wacom_map_usage(input, usage, field, EV_ABS, ABS_X, 4); | 1553 | wacom_map_usage(input, usage, field, EV_ABS, ABS_X, 4); |
| 1556 | else | 1554 | else |
| @@ -1558,7 +1556,6 @@ static void wacom_wac_finger_usage_mapping(struct hid_device *hdev, | |||
| 1558 | ABS_MT_POSITION_X, 4); | 1556 | ABS_MT_POSITION_X, 4); |
| 1559 | break; | 1557 | break; |
| 1560 | case HID_GD_Y: | 1558 | case HID_GD_Y: |
| 1561 | features->last_slot_field = usage->hid; | ||
| 1562 | if (touch_max == 1) | 1559 | if (touch_max == 1) |
| 1563 | wacom_map_usage(input, usage, field, EV_ABS, ABS_Y, 4); | 1560 | wacom_map_usage(input, usage, field, EV_ABS, ABS_Y, 4); |
| 1564 | else | 1561 | else |
| @@ -1567,22 +1564,11 @@ static void wacom_wac_finger_usage_mapping(struct hid_device *hdev, | |||
| 1567 | break; | 1564 | break; |
| 1568 | case HID_DG_WIDTH: | 1565 | case HID_DG_WIDTH: |
| 1569 | case HID_DG_HEIGHT: | 1566 | case HID_DG_HEIGHT: |
| 1570 | features->last_slot_field = usage->hid; | ||
| 1571 | wacom_map_usage(input, usage, field, EV_ABS, ABS_MT_TOUCH_MAJOR, 0); | 1567 | wacom_map_usage(input, usage, field, EV_ABS, ABS_MT_TOUCH_MAJOR, 0); |
| 1572 | wacom_map_usage(input, usage, field, EV_ABS, ABS_MT_TOUCH_MINOR, 0); | 1568 | wacom_map_usage(input, usage, field, EV_ABS, ABS_MT_TOUCH_MINOR, 0); |
| 1573 | input_set_abs_params(input, ABS_MT_ORIENTATION, 0, 1, 0, 0); | 1569 | input_set_abs_params(input, ABS_MT_ORIENTATION, 0, 1, 0, 0); |
| 1574 | break; | 1570 | break; |
| 1575 | case HID_DG_CONTACTID: | ||
| 1576 | features->last_slot_field = usage->hid; | ||
| 1577 | break; | ||
| 1578 | case HID_DG_INRANGE: | ||
| 1579 | features->last_slot_field = usage->hid; | ||
| 1580 | break; | ||
| 1581 | case HID_DG_INVERT: | ||
| 1582 | features->last_slot_field = usage->hid; | ||
| 1583 | break; | ||
| 1584 | case HID_DG_TIPSWITCH: | 1571 | case HID_DG_TIPSWITCH: |
| 1585 | features->last_slot_field = usage->hid; | ||
| 1586 | wacom_map_usage(input, usage, field, EV_KEY, BTN_TOUCH, 0); | 1572 | wacom_map_usage(input, usage, field, EV_KEY, BTN_TOUCH, 0); |
| 1587 | break; | 1573 | break; |
| 1588 | case HID_DG_CONTACTCOUNT: | 1574 | case HID_DG_CONTACTCOUNT: |
| @@ -1660,7 +1646,7 @@ static int wacom_wac_finger_event(struct hid_device *hdev, | |||
| 1660 | 1646 | ||
| 1661 | 1647 | ||
| 1662 | if (usage->usage_index + 1 == field->report_count) { | 1648 | if (usage->usage_index + 1 == field->report_count) { |
| 1663 | if (usage->hid == wacom_wac->features.last_slot_field) | 1649 | if (usage->hid == wacom_wac->hid_data.last_slot_field) |
| 1664 | wacom_wac_finger_slot(wacom_wac, wacom_wac->touch_input); | 1650 | wacom_wac_finger_slot(wacom_wac, wacom_wac->touch_input); |
| 1665 | } | 1651 | } |
| 1666 | 1652 | ||
| @@ -1673,31 +1659,35 @@ static void wacom_wac_finger_pre_report(struct hid_device *hdev, | |||
| 1673 | struct wacom *wacom = hid_get_drvdata(hdev); | 1659 | struct wacom *wacom = hid_get_drvdata(hdev); |
| 1674 | struct wacom_wac *wacom_wac = &wacom->wacom_wac; | 1660 | struct wacom_wac *wacom_wac = &wacom->wacom_wac; |
| 1675 | struct hid_data* hid_data = &wacom_wac->hid_data; | 1661 | struct hid_data* hid_data = &wacom_wac->hid_data; |
| 1662 | int i; | ||
| 1676 | 1663 | ||
| 1677 | if (hid_data->cc_report != 0 && | 1664 | for (i = 0; i < report->maxfield; i++) { |
| 1678 | hid_data->cc_report != report->id) { | 1665 | struct hid_field *field = report->field[i]; |
| 1679 | int i; | 1666 | int j; |
| 1680 | 1667 | ||
| 1681 | hid_data->cc_report = report->id; | 1668 | for (j = 0; j < field->maxusage; j++) { |
| 1682 | hid_data->cc_index = -1; | 1669 | struct hid_usage *usage = &field->usage[j]; |
| 1683 | hid_data->cc_value_index = -1; | 1670 | |
| 1684 | 1671 | switch (usage->hid) { | |
| 1685 | for (i = 0; i < report->maxfield; i++) { | 1672 | case HID_GD_X: |
| 1686 | struct hid_field *field = report->field[i]; | 1673 | case HID_GD_Y: |
| 1687 | int j; | 1674 | case HID_DG_WIDTH: |
| 1688 | 1675 | case HID_DG_HEIGHT: | |
| 1689 | for (j = 0; j < field->maxusage; j++) { | 1676 | case HID_DG_CONTACTID: |
| 1690 | if (field->usage[j].hid == HID_DG_CONTACTCOUNT) { | 1677 | case HID_DG_INRANGE: |
| 1691 | hid_data->cc_index = i; | 1678 | case HID_DG_INVERT: |
| 1692 | hid_data->cc_value_index = j; | 1679 | case HID_DG_TIPSWITCH: |
| 1693 | 1680 | hid_data->last_slot_field = usage->hid; | |
| 1694 | /* break */ | 1681 | break; |
| 1695 | i = report->maxfield; | 1682 | case HID_DG_CONTACTCOUNT: |
| 1696 | j = field->maxusage; | 1683 | hid_data->cc_report = report->id; |
| 1697 | } | 1684 | hid_data->cc_index = i; |
| 1685 | hid_data->cc_value_index = j; | ||
| 1686 | break; | ||
| 1698 | } | 1687 | } |
| 1699 | } | 1688 | } |
| 1700 | } | 1689 | } |
| 1690 | |||
| 1701 | if (hid_data->cc_report != 0 && | 1691 | if (hid_data->cc_report != 0 && |
| 1702 | hid_data->cc_index >= 0) { | 1692 | hid_data->cc_index >= 0) { |
| 1703 | struct hid_field *field = report->field[hid_data->cc_index]; | 1693 | struct hid_field *field = report->field[hid_data->cc_index]; |
diff --git a/drivers/hid/wacom_wac.h b/drivers/hid/wacom_wac.h index 53d16537fd2a..b794e80aa72a 100644 --- a/drivers/hid/wacom_wac.h +++ b/drivers/hid/wacom_wac.h | |||
| @@ -185,7 +185,6 @@ struct wacom_features { | |||
| 185 | int pktlen; | 185 | int pktlen; |
| 186 | bool check_for_hid_type; | 186 | bool check_for_hid_type; |
| 187 | int hid_type; | 187 | int hid_type; |
| 188 | int last_slot_field; | ||
| 189 | }; | 188 | }; |
| 190 | 189 | ||
| 191 | struct wacom_shared { | 190 | struct wacom_shared { |
| @@ -214,6 +213,7 @@ struct hid_data { | |||
| 214 | int cc_report; | 213 | int cc_report; |
| 215 | int cc_index; | 214 | int cc_index; |
| 216 | int cc_value_index; | 215 | int cc_value_index; |
| 216 | int last_slot_field; | ||
| 217 | int num_expected; | 217 | int num_expected; |
| 218 | int num_received; | 218 | int num_received; |
| 219 | }; | 219 | }; |
