diff options
| -rw-r--r-- | drivers/hid/wacom_wac.c | 143 | ||||
| -rw-r--r-- | drivers/hid/wacom_wac.h | 19 |
2 files changed, 146 insertions, 16 deletions
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c index 3bb6dd6e4eea..70de1fa930cc 100644 --- a/drivers/hid/wacom_wac.c +++ b/drivers/hid/wacom_wac.c | |||
| @@ -41,6 +41,8 @@ MODULE_PARM_DESC(touch_arbitration, " on (Y) off (N)"); | |||
| 41 | static void wacom_report_numbered_buttons(struct input_dev *input_dev, | 41 | static void wacom_report_numbered_buttons(struct input_dev *input_dev, |
| 42 | int button_count, int mask); | 42 | int button_count, int mask); |
| 43 | 43 | ||
| 44 | static int wacom_numbered_button_to_key(int n); | ||
| 45 | |||
| 44 | /* | 46 | /* |
| 45 | * Percent of battery capacity for Graphire. | 47 | * Percent of battery capacity for Graphire. |
| 46 | * 8th value means AC online and show 100% capacity. | 48 | * 8th value means AC online and show 100% capacity. |
| @@ -1447,12 +1449,16 @@ static int wacom_equivalent_usage(int usage) | |||
| 1447 | int subpage = (usage & 0xFF00) << 8; | 1449 | int subpage = (usage & 0xFF00) << 8; |
| 1448 | int subusage = (usage & 0xFF); | 1450 | int subusage = (usage & 0xFF); |
| 1449 | 1451 | ||
| 1450 | if (subpage == WACOM_HID_SP_DIGITIZER || | 1452 | if (subpage == WACOM_HID_SP_PAD || |
| 1453 | subpage == WACOM_HID_SP_BUTTON || | ||
| 1454 | subpage == WACOM_HID_SP_DIGITIZER || | ||
| 1451 | subpage == WACOM_HID_SP_DIGITIZERINFO || | 1455 | subpage == WACOM_HID_SP_DIGITIZERINFO || |
| 1452 | usage == WACOM_HID_WD_SENSE || | 1456 | usage == WACOM_HID_WD_SENSE || |
| 1453 | usage == WACOM_HID_WD_SERIALHI || | 1457 | usage == WACOM_HID_WD_SERIALHI || |
| 1454 | usage == WACOM_HID_WD_TOOLTYPE || | 1458 | usage == WACOM_HID_WD_TOOLTYPE || |
| 1455 | usage == WACOM_HID_WD_DISTANCE) { | 1459 | usage == WACOM_HID_WD_DISTANCE || |
| 1460 | usage == WACOM_HID_WD_TOUCHRING || | ||
| 1461 | usage == WACOM_HID_WD_TOUCHRINGSTATUS) { | ||
| 1456 | return usage; | 1462 | return usage; |
| 1457 | } | 1463 | } |
| 1458 | 1464 | ||
| @@ -1509,6 +1515,98 @@ static void wacom_map_usage(struct input_dev *input, struct hid_usage *usage, | |||
| 1509 | } | 1515 | } |
| 1510 | } | 1516 | } |
| 1511 | 1517 | ||
| 1518 | static void wacom_wac_pad_usage_mapping(struct hid_device *hdev, | ||
| 1519 | struct hid_field *field, struct hid_usage *usage) | ||
| 1520 | { | ||
| 1521 | struct wacom *wacom = hid_get_drvdata(hdev); | ||
| 1522 | struct wacom_wac *wacom_wac = &wacom->wacom_wac; | ||
| 1523 | struct wacom_features *features = &wacom_wac->features; | ||
| 1524 | struct input_dev *input = wacom_wac->pad_input; | ||
| 1525 | unsigned equivalent_usage = wacom_equivalent_usage(usage->hid); | ||
| 1526 | |||
| 1527 | switch (equivalent_usage) { | ||
| 1528 | case WACOM_HID_WD_ACCELEROMETER_X: | ||
| 1529 | __set_bit(INPUT_PROP_ACCELEROMETER, input->propbit); | ||
| 1530 | wacom_map_usage(input, usage, field, EV_ABS, ABS_X, 0); | ||
| 1531 | break; | ||
| 1532 | case WACOM_HID_WD_ACCELEROMETER_Y: | ||
| 1533 | __set_bit(INPUT_PROP_ACCELEROMETER, input->propbit); | ||
| 1534 | wacom_map_usage(input, usage, field, EV_ABS, ABS_Y, 0); | ||
| 1535 | break; | ||
| 1536 | case WACOM_HID_WD_ACCELEROMETER_Z: | ||
| 1537 | __set_bit(INPUT_PROP_ACCELEROMETER, input->propbit); | ||
| 1538 | wacom_map_usage(input, usage, field, EV_ABS, ABS_Z, 0); | ||
| 1539 | break; | ||
| 1540 | case WACOM_HID_WD_BUTTONHOME: | ||
| 1541 | case WACOM_HID_WD_BUTTONUP: | ||
| 1542 | case WACOM_HID_WD_BUTTONDOWN: | ||
| 1543 | case WACOM_HID_WD_BUTTONLEFT: | ||
| 1544 | case WACOM_HID_WD_BUTTONRIGHT: | ||
| 1545 | wacom_map_usage(input, usage, field, EV_KEY, | ||
| 1546 | wacom_numbered_button_to_key(features->numbered_buttons), | ||
| 1547 | 0); | ||
| 1548 | features->numbered_buttons++; | ||
| 1549 | break; | ||
| 1550 | case WACOM_HID_WD_TOUCHRING: | ||
| 1551 | wacom_map_usage(input, usage, field, EV_ABS, ABS_WHEEL, 0); | ||
| 1552 | break; | ||
| 1553 | } | ||
| 1554 | |||
| 1555 | switch (equivalent_usage & 0xfffffff0) { | ||
| 1556 | case WACOM_HID_WD_EXPRESSKEY00: | ||
| 1557 | wacom_map_usage(input, usage, field, EV_KEY, | ||
| 1558 | wacom_numbered_button_to_key(features->numbered_buttons), | ||
| 1559 | 0); | ||
| 1560 | features->numbered_buttons++; | ||
| 1561 | break; | ||
| 1562 | } | ||
| 1563 | } | ||
| 1564 | |||
| 1565 | static int wacom_wac_pad_event(struct hid_device *hdev, struct hid_field *field, | ||
| 1566 | struct hid_usage *usage, __s32 value) | ||
| 1567 | { | ||
| 1568 | struct wacom *wacom = hid_get_drvdata(hdev); | ||
| 1569 | struct wacom_wac *wacom_wac = &wacom->wacom_wac; | ||
| 1570 | struct input_dev *input = wacom_wac->pad_input; | ||
| 1571 | unsigned equivalent_usage = wacom_equivalent_usage(usage->hid); | ||
| 1572 | |||
| 1573 | if (wacom_equivalent_usage(field->physical) == HID_DG_TABLETFUNCTIONKEY) { | ||
| 1574 | wacom_wac->hid_data.inrange_state |= value; | ||
| 1575 | } | ||
| 1576 | |||
| 1577 | if (equivalent_usage != WACOM_HID_WD_TOUCHRINGSTATUS) | ||
| 1578 | input_event(input, usage->type, usage->code, value); | ||
| 1579 | |||
| 1580 | return 0; | ||
| 1581 | } | ||
| 1582 | |||
| 1583 | static void wacom_wac_pad_pre_report(struct hid_device *hdev, | ||
| 1584 | struct hid_report *report) | ||
| 1585 | { | ||
| 1586 | struct wacom *wacom = hid_get_drvdata(hdev); | ||
| 1587 | struct wacom_wac *wacom_wac = &wacom->wacom_wac; | ||
| 1588 | |||
| 1589 | wacom_wac->hid_data.inrange_state = 0; | ||
| 1590 | } | ||
| 1591 | |||
| 1592 | static void wacom_wac_pad_report(struct hid_device *hdev, | ||
| 1593 | struct hid_report *report) | ||
| 1594 | { | ||
| 1595 | struct wacom *wacom = hid_get_drvdata(hdev); | ||
| 1596 | struct wacom_wac *wacom_wac = &wacom->wacom_wac; | ||
| 1597 | struct input_dev *input = wacom_wac->pad_input; | ||
| 1598 | bool active = wacom_wac->hid_data.inrange_state != 0; | ||
| 1599 | |||
| 1600 | /* | ||
| 1601 | * don't report prox for events like accelerometer | ||
| 1602 | * or battery status | ||
| 1603 | */ | ||
| 1604 | if (wacom_equivalent_usage(report->field[0]->physical) == HID_DG_TABLETFUNCTIONKEY) | ||
| 1605 | input_event(input, EV_ABS, ABS_MISC, active ? PAD_DEVICE_ID : 0); | ||
| 1606 | |||
| 1607 | input_sync(input); | ||
| 1608 | } | ||
| 1609 | |||
| 1512 | static void wacom_wac_pen_usage_mapping(struct hid_device *hdev, | 1610 | static void wacom_wac_pen_usage_mapping(struct hid_device *hdev, |
| 1513 | struct hid_field *field, struct hid_usage *usage) | 1611 | struct hid_field *field, struct hid_usage *usage) |
| 1514 | { | 1612 | { |
| @@ -1946,10 +2044,11 @@ void wacom_wac_usage_mapping(struct hid_device *hdev, | |||
| 1946 | /* currently, only direct devices have proper hid report descriptors */ | 2044 | /* currently, only direct devices have proper hid report descriptors */ |
| 1947 | features->device_type |= WACOM_DEVICETYPE_DIRECT; | 2045 | features->device_type |= WACOM_DEVICETYPE_DIRECT; |
| 1948 | 2046 | ||
| 1949 | if (WACOM_PEN_FIELD(field)) | 2047 | if (WACOM_PAD_FIELD(field)) |
| 2048 | return wacom_wac_pad_usage_mapping(hdev, field, usage); | ||
| 2049 | else if (WACOM_PEN_FIELD(field)) | ||
| 1950 | return wacom_wac_pen_usage_mapping(hdev, field, usage); | 2050 | return wacom_wac_pen_usage_mapping(hdev, field, usage); |
| 1951 | 2051 | else if (WACOM_FINGER_FIELD(field)) | |
| 1952 | if (WACOM_FINGER_FIELD(field)) | ||
| 1953 | return wacom_wac_finger_usage_mapping(hdev, field, usage); | 2052 | return wacom_wac_finger_usage_mapping(hdev, field, usage); |
| 1954 | } | 2053 | } |
| 1955 | 2054 | ||
| @@ -1961,10 +2060,11 @@ int wacom_wac_event(struct hid_device *hdev, struct hid_field *field, | |||
| 1961 | if (wacom->wacom_wac.features.type != HID_GENERIC) | 2060 | if (wacom->wacom_wac.features.type != HID_GENERIC) |
| 1962 | return 0; | 2061 | return 0; |
| 1963 | 2062 | ||
| 1964 | if (WACOM_PEN_FIELD(field)) | 2063 | if (WACOM_PAD_FIELD(field)) |
| 2064 | return wacom_wac_pad_event(hdev, field, usage, value); | ||
| 2065 | else if (WACOM_PEN_FIELD(field)) | ||
| 1965 | return wacom_wac_pen_event(hdev, field, usage, value); | 2066 | return wacom_wac_pen_event(hdev, field, usage, value); |
| 1966 | 2067 | else if (WACOM_FINGER_FIELD(field)) | |
| 1967 | if (WACOM_FINGER_FIELD(field)) | ||
| 1968 | return wacom_wac_finger_event(hdev, field, usage, value); | 2068 | return wacom_wac_finger_event(hdev, field, usage, value); |
| 1969 | 2069 | ||
| 1970 | return 0; | 2070 | return 0; |
| @@ -1998,18 +2098,20 @@ void wacom_wac_report(struct hid_device *hdev, struct hid_report *report) | |||
| 1998 | if (wacom_wac->features.type != HID_GENERIC) | 2098 | if (wacom_wac->features.type != HID_GENERIC) |
| 1999 | return; | 2099 | return; |
| 2000 | 2100 | ||
| 2001 | if (WACOM_PEN_FIELD(field)) | 2101 | if (WACOM_PAD_FIELD(field)) |
| 2102 | wacom_wac_pad_pre_report(hdev, report); | ||
| 2103 | else if (WACOM_PEN_FIELD(field)) | ||
| 2002 | wacom_wac_pen_pre_report(hdev, report); | 2104 | wacom_wac_pen_pre_report(hdev, report); |
| 2003 | 2105 | else if (WACOM_FINGER_FIELD(field)) | |
| 2004 | if (WACOM_FINGER_FIELD(field)) | ||
| 2005 | wacom_wac_finger_pre_report(hdev, report); | 2106 | wacom_wac_finger_pre_report(hdev, report); |
| 2006 | 2107 | ||
| 2007 | wacom_report_events(hdev, report); | 2108 | wacom_report_events(hdev, report); |
| 2008 | 2109 | ||
| 2009 | if (WACOM_PEN_FIELD(field)) | 2110 | if (WACOM_PAD_FIELD(field)) |
| 2111 | return wacom_wac_pad_report(hdev, report); | ||
| 2112 | else if (WACOM_PEN_FIELD(field)) | ||
| 2010 | return wacom_wac_pen_report(hdev, report); | 2113 | return wacom_wac_pen_report(hdev, report); |
| 2011 | 2114 | else if (WACOM_FINGER_FIELD(field)) | |
| 2012 | if (WACOM_FINGER_FIELD(field)) | ||
| 2013 | return wacom_wac_finger_report(hdev, report); | 2115 | return wacom_wac_finger_report(hdev, report); |
| 2014 | } | 2116 | } |
| 2015 | 2117 | ||
| @@ -2583,6 +2685,8 @@ void wacom_setup_device_quirks(struct wacom *wacom) | |||
| 2583 | struct wacom_features *features = &wacom->wacom_wac.features; | 2685 | struct wacom_features *features = &wacom->wacom_wac.features; |
| 2584 | 2686 | ||
| 2585 | /* The pen and pad share the same interface on most devices */ | 2687 | /* The pen and pad share the same interface on most devices */ |
| 2688 | if (features->numbered_buttons > 0) | ||
| 2689 | features->device_type |= WACOM_DEVICETYPE_PAD; | ||
| 2586 | if (features->type == GRAPHIRE_BT || features->type == WACOM_G4 || | 2690 | if (features->type == GRAPHIRE_BT || features->type == WACOM_G4 || |
| 2587 | features->type == DTUS || | 2691 | features->type == DTUS || |
| 2588 | (features->type >= INTUOS3S && features->type <= WACOM_MO)) { | 2692 | (features->type >= INTUOS3S && features->type <= WACOM_MO)) { |
| @@ -3104,8 +3208,12 @@ int wacom_setup_pad_input_capabilities(struct input_dev *input_dev, | |||
| 3104 | __set_bit(ABS_MISC, input_dev->absbit); | 3208 | __set_bit(ABS_MISC, input_dev->absbit); |
| 3105 | 3209 | ||
| 3106 | /* kept for making legacy xf86-input-wacom accepting the pad */ | 3210 | /* kept for making legacy xf86-input-wacom accepting the pad */ |
| 3107 | input_set_abs_params(input_dev, ABS_X, 0, 1, 0, 0); | 3211 | if (!(input_dev->absinfo && (input_dev->absinfo[ABS_X].minimum || |
| 3108 | input_set_abs_params(input_dev, ABS_Y, 0, 1, 0, 0); | 3212 | input_dev->absinfo[ABS_X].maximum))) |
| 3213 | input_set_abs_params(input_dev, ABS_X, 0, 1, 0, 0); | ||
| 3214 | if (!(input_dev->absinfo && (input_dev->absinfo[ABS_Y].minimum || | ||
| 3215 | input_dev->absinfo[ABS_Y].maximum))) | ||
| 3216 | input_set_abs_params(input_dev, ABS_Y, 0, 1, 0, 0); | ||
| 3109 | 3217 | ||
| 3110 | /* kept for making udev and libwacom accepting the pad */ | 3218 | /* kept for making udev and libwacom accepting the pad */ |
| 3111 | __set_bit(BTN_STYLUS, input_dev->keybit); | 3219 | __set_bit(BTN_STYLUS, input_dev->keybit); |
| @@ -3225,6 +3333,9 @@ int wacom_setup_pad_input_capabilities(struct input_dev *input_dev, | |||
| 3225 | input_set_abs_params(input_dev, ABS_WHEEL, 0, 71, 0, 0); | 3333 | input_set_abs_params(input_dev, ABS_WHEEL, 0, 71, 0, 0); |
| 3226 | break; | 3334 | break; |
| 3227 | 3335 | ||
| 3336 | case HID_GENERIC: | ||
| 3337 | break; | ||
| 3338 | |||
| 3228 | default: | 3339 | default: |
| 3229 | /* no pad supported */ | 3340 | /* no pad supported */ |
| 3230 | return -ENODEV; | 3341 | return -ENODEV; |
diff --git a/drivers/hid/wacom_wac.h b/drivers/hid/wacom_wac.h index b4c3c6425b85..1f7c4a86d91b 100644 --- a/drivers/hid/wacom_wac.h +++ b/drivers/hid/wacom_wac.h | |||
| @@ -86,19 +86,34 @@ | |||
| 86 | #define WACOM_DEVICETYPE_DIRECT 0x0010 | 86 | #define WACOM_DEVICETYPE_DIRECT 0x0010 |
| 87 | 87 | ||
| 88 | #define WACOM_HID_UP_WACOMDIGITIZER 0xff0d0000 | 88 | #define WACOM_HID_UP_WACOMDIGITIZER 0xff0d0000 |
| 89 | #define WACOM_HID_SP_PAD 0x00040000 | ||
| 90 | #define WACOM_HID_SP_BUTTON 0x00090000 | ||
| 89 | #define WACOM_HID_SP_DIGITIZER 0x000d0000 | 91 | #define WACOM_HID_SP_DIGITIZER 0x000d0000 |
| 90 | #define WACOM_HID_SP_DIGITIZERINFO 0x00100000 | 92 | #define WACOM_HID_SP_DIGITIZERINFO 0x00100000 |
| 91 | #define WACOM_HID_WD_DIGITIZER (WACOM_HID_UP_WACOMDIGITIZER | 0x01) | 93 | #define WACOM_HID_WD_DIGITIZER (WACOM_HID_UP_WACOMDIGITIZER | 0x01) |
| 92 | #define WACOM_HID_WD_SENSE (WACOM_HID_UP_WACOMDIGITIZER | 0x36) | 94 | #define WACOM_HID_WD_SENSE (WACOM_HID_UP_WACOMDIGITIZER | 0x36) |
| 95 | #define WACOM_HID_WD_DIGITIZERFNKEYS (WACOM_HID_UP_WACOMDIGITIZER | 0x39) | ||
| 93 | #define WACOM_HID_WD_SERIALHI (WACOM_HID_UP_WACOMDIGITIZER | 0x5c) | 96 | #define WACOM_HID_WD_SERIALHI (WACOM_HID_UP_WACOMDIGITIZER | 0x5c) |
| 94 | #define WACOM_HID_WD_TOOLTYPE (WACOM_HID_UP_WACOMDIGITIZER | 0x77) | 97 | #define WACOM_HID_WD_TOOLTYPE (WACOM_HID_UP_WACOMDIGITIZER | 0x77) |
| 95 | #define WACOM_HID_WD_DISTANCE (WACOM_HID_UP_WACOMDIGITIZER | 0x0132) | 98 | #define WACOM_HID_WD_DISTANCE (WACOM_HID_UP_WACOMDIGITIZER | 0x0132) |
| 99 | #define WACOM_HID_WD_TOUCHRING (WACOM_HID_UP_WACOMDIGITIZER | 0x0138) | ||
| 100 | #define WACOM_HID_WD_TOUCHRINGSTATUS (WACOM_HID_UP_WACOMDIGITIZER | 0x0139) | ||
| 101 | #define WACOM_HID_WD_ACCELEROMETER_X (WACOM_HID_UP_WACOMDIGITIZER | 0x0401) | ||
| 102 | #define WACOM_HID_WD_ACCELEROMETER_Y (WACOM_HID_UP_WACOMDIGITIZER | 0x0402) | ||
| 103 | #define WACOM_HID_WD_ACCELEROMETER_Z (WACOM_HID_UP_WACOMDIGITIZER | 0x0403) | ||
| 104 | #define WACOM_HID_WD_EXPRESSKEY00 (WACOM_HID_UP_WACOMDIGITIZER | 0x0910) | ||
| 105 | #define WACOM_HID_WD_BUTTONHOME (WACOM_HID_UP_WACOMDIGITIZER | 0x0990) | ||
| 106 | #define WACOM_HID_WD_BUTTONUP (WACOM_HID_UP_WACOMDIGITIZER | 0x0991) | ||
| 107 | #define WACOM_HID_WD_BUTTONDOWN (WACOM_HID_UP_WACOMDIGITIZER | 0x0992) | ||
| 108 | #define WACOM_HID_WD_BUTTONLEFT (WACOM_HID_UP_WACOMDIGITIZER | 0x0993) | ||
| 109 | #define WACOM_HID_WD_BUTTONRIGHT (WACOM_HID_UP_WACOMDIGITIZER | 0x0994) | ||
| 96 | #define WACOM_HID_WD_FINGERWHEEL (WACOM_HID_UP_WACOMDIGITIZER | 0x0d03) | 110 | #define WACOM_HID_WD_FINGERWHEEL (WACOM_HID_UP_WACOMDIGITIZER | 0x0d03) |
| 97 | #define WACOM_HID_WD_OFFSETLEFT (WACOM_HID_UP_WACOMDIGITIZER | 0x0d30) | 111 | #define WACOM_HID_WD_OFFSETLEFT (WACOM_HID_UP_WACOMDIGITIZER | 0x0d30) |
| 98 | #define WACOM_HID_WD_OFFSETTOP (WACOM_HID_UP_WACOMDIGITIZER | 0x0d31) | 112 | #define WACOM_HID_WD_OFFSETTOP (WACOM_HID_UP_WACOMDIGITIZER | 0x0d31) |
| 99 | #define WACOM_HID_WD_OFFSETRIGHT (WACOM_HID_UP_WACOMDIGITIZER | 0x0d32) | 113 | #define WACOM_HID_WD_OFFSETRIGHT (WACOM_HID_UP_WACOMDIGITIZER | 0x0d32) |
| 100 | #define WACOM_HID_WD_OFFSETBOTTOM (WACOM_HID_UP_WACOMDIGITIZER | 0x0d33) | 114 | #define WACOM_HID_WD_OFFSETBOTTOM (WACOM_HID_UP_WACOMDIGITIZER | 0x0d33) |
| 101 | #define WACOM_HID_WD_DATAMODE (WACOM_HID_UP_WACOMDIGITIZER | 0x1002) | 115 | #define WACOM_HID_WD_DATAMODE (WACOM_HID_UP_WACOMDIGITIZER | 0x1002) |
| 116 | #define WACOM_HID_WD_DIGITIZERINFO (WACOM_HID_UP_WACOMDIGITIZER | 0x1013) | ||
| 102 | #define WACOM_HID_UP_G9 0xff090000 | 117 | #define WACOM_HID_UP_G9 0xff090000 |
| 103 | #define WACOM_HID_G9_PEN (WACOM_HID_UP_G9 | 0x02) | 118 | #define WACOM_HID_G9_PEN (WACOM_HID_UP_G9 | 0x02) |
| 104 | #define WACOM_HID_G9_TOUCHSCREEN (WACOM_HID_UP_G9 | 0x11) | 119 | #define WACOM_HID_G9_TOUCHSCREEN (WACOM_HID_UP_G9 | 0x11) |
| @@ -106,6 +121,10 @@ | |||
| 106 | #define WACOM_HID_G11_PEN (WACOM_HID_UP_G11 | 0x02) | 121 | #define WACOM_HID_G11_PEN (WACOM_HID_UP_G11 | 0x02) |
| 107 | #define WACOM_HID_G11_TOUCHSCREEN (WACOM_HID_UP_G11 | 0x11) | 122 | #define WACOM_HID_G11_TOUCHSCREEN (WACOM_HID_UP_G11 | 0x11) |
| 108 | 123 | ||
| 124 | #define WACOM_PAD_FIELD(f) (((f)->physical == HID_DG_TABLETFUNCTIONKEY) || \ | ||
| 125 | ((f)->physical == WACOM_HID_WD_DIGITIZERFNKEYS) || \ | ||
| 126 | ((f)->physical == WACOM_HID_WD_DIGITIZERINFO)) | ||
| 127 | |||
| 109 | #define WACOM_PEN_FIELD(f) (((f)->logical == HID_DG_STYLUS) || \ | 128 | #define WACOM_PEN_FIELD(f) (((f)->logical == HID_DG_STYLUS) || \ |
| 110 | ((f)->physical == HID_DG_STYLUS) || \ | 129 | ((f)->physical == HID_DG_STYLUS) || \ |
| 111 | ((f)->physical == HID_DG_PEN) || \ | 130 | ((f)->physical == HID_DG_PEN) || \ |
