mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-23 12:43:55 +08:00
Input: wacom - add support for 2 new multi-touch tablets (0x100 and 0x101)
This adds support for the two new multi-touch tablets. Signed-off-by: Ping Cheng <pinglinux@gmail.com> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
parent
3699dd7e16
commit
6afdc289c9
@ -397,6 +397,10 @@ static int wacom_parse_hid(struct usb_interface *intf,
|
|||||||
features->pktlen = WACOM_PKGLEN_MTOUCH;
|
features->pktlen = WACOM_PKGLEN_MTOUCH;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MTTPC:
|
||||||
|
features->pktlen = WACOM_PKGLEN_MTTPC;
|
||||||
|
break;
|
||||||
|
|
||||||
case BAMBOO_PT:
|
case BAMBOO_PT:
|
||||||
features->pktlen = WACOM_PKGLEN_BBTOUCH;
|
features->pktlen = WACOM_PKGLEN_BBTOUCH;
|
||||||
break;
|
break;
|
||||||
@ -453,6 +457,7 @@ static int wacom_parse_hid(struct usb_interface *intf,
|
|||||||
switch (features->type) {
|
switch (features->type) {
|
||||||
case TABLETPC2FG:
|
case TABLETPC2FG:
|
||||||
case MTSCREEN:
|
case MTSCREEN:
|
||||||
|
case MTTPC:
|
||||||
features->y_max =
|
features->y_max =
|
||||||
get_unaligned_le16(&report[i + 3]);
|
get_unaligned_le16(&report[i + 3]);
|
||||||
features->y_phy =
|
features->y_phy =
|
||||||
|
@ -877,6 +877,11 @@ static int wacom_mt_touch(struct wacom_wac *wacom)
|
|||||||
int i;
|
int i;
|
||||||
int current_num_contacts = data[2];
|
int current_num_contacts = data[2];
|
||||||
int contacts_to_send = 0;
|
int contacts_to_send = 0;
|
||||||
|
int x_offset = 0;
|
||||||
|
|
||||||
|
/* MTTPC does not support Height and Width */
|
||||||
|
if (wacom->features.type == MTTPC)
|
||||||
|
x_offset = -4;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* First packet resets the counter since only the first
|
* First packet resets the counter since only the first
|
||||||
@ -889,7 +894,7 @@ static int wacom_mt_touch(struct wacom_wac *wacom)
|
|||||||
contacts_to_send = min(5, wacom->num_contacts_left);
|
contacts_to_send = min(5, wacom->num_contacts_left);
|
||||||
|
|
||||||
for (i = 0; i < contacts_to_send; i++) {
|
for (i = 0; i < contacts_to_send; i++) {
|
||||||
int offset = (WACOM_BYTES_PER_MT_PACKET * i) + 3;
|
int offset = (WACOM_BYTES_PER_MT_PACKET + x_offset) * i + 3;
|
||||||
bool touch = data[offset] & 0x1;
|
bool touch = data[offset] & 0x1;
|
||||||
int id = le16_to_cpup((__le16 *)&data[offset + 1]);
|
int id = le16_to_cpup((__le16 *)&data[offset + 1]);
|
||||||
int slot = find_slot_from_contactid(wacom, id);
|
int slot = find_slot_from_contactid(wacom, id);
|
||||||
@ -900,8 +905,8 @@ static int wacom_mt_touch(struct wacom_wac *wacom)
|
|||||||
input_mt_slot(input, slot);
|
input_mt_slot(input, slot);
|
||||||
input_mt_report_slot_state(input, MT_TOOL_FINGER, touch);
|
input_mt_report_slot_state(input, MT_TOOL_FINGER, touch);
|
||||||
if (touch) {
|
if (touch) {
|
||||||
int x = le16_to_cpup((__le16 *)&data[offset + 7]);
|
int x = le16_to_cpup((__le16 *)&data[offset + x_offset + 7]);
|
||||||
int y = le16_to_cpup((__le16 *)&data[offset + 9]);
|
int y = le16_to_cpup((__le16 *)&data[offset + x_offset + 9]);
|
||||||
input_report_abs(input, ABS_MT_POSITION_X, x);
|
input_report_abs(input, ABS_MT_POSITION_X, x);
|
||||||
input_report_abs(input, ABS_MT_POSITION_Y, y);
|
input_report_abs(input, ABS_MT_POSITION_Y, y);
|
||||||
}
|
}
|
||||||
@ -1336,6 +1341,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
|
|||||||
case TABLETPCE:
|
case TABLETPCE:
|
||||||
case TABLETPC2FG:
|
case TABLETPC2FG:
|
||||||
case MTSCREEN:
|
case MTSCREEN:
|
||||||
|
case MTTPC:
|
||||||
sync = wacom_tpc_irq(wacom_wac, len);
|
sync = wacom_tpc_irq(wacom_wac, len);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1657,6 +1663,7 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev,
|
|||||||
/* fall through */
|
/* fall through */
|
||||||
|
|
||||||
case MTSCREEN:
|
case MTSCREEN:
|
||||||
|
case MTTPC:
|
||||||
if (features->device_type == BTN_TOOL_FINGER) {
|
if (features->device_type == BTN_TOOL_FINGER) {
|
||||||
wacom_wac->slots = kmalloc(features->touch_max *
|
wacom_wac->slots = kmalloc(features->touch_max *
|
||||||
sizeof(int),
|
sizeof(int),
|
||||||
@ -2018,6 +2025,12 @@ static const struct wacom_features wacom_features_0xED =
|
|||||||
static const struct wacom_features wacom_features_0xEF =
|
static const struct wacom_features wacom_features_0xEF =
|
||||||
{ "Wacom ISDv4 EF", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255,
|
{ "Wacom ISDv4 EF", WACOM_PKGLEN_GRAPHIRE, 26202, 16325, 255,
|
||||||
0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
|
0, TABLETPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
|
||||||
|
static const struct wacom_features wacom_features_0x100 =
|
||||||
|
{ "Wacom ISDv4 100", WACOM_PKGLEN_MTTPC, 26202, 16325, 255,
|
||||||
|
0, MTTPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
|
||||||
|
static const struct wacom_features wacom_features_0x101 =
|
||||||
|
{ "Wacom ISDv4 101", WACOM_PKGLEN_MTTPC, 26202, 16325, 255,
|
||||||
|
0, MTTPC, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
|
||||||
static const struct wacom_features wacom_features_0x47 =
|
static const struct wacom_features wacom_features_0x47 =
|
||||||
{ "Wacom Intuos2 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023,
|
{ "Wacom Intuos2 6x8", WACOM_PKGLEN_INTUOS, 20320, 16240, 1023,
|
||||||
31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
|
31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
|
||||||
@ -2194,6 +2207,8 @@ const struct usb_device_id wacom_ids[] = {
|
|||||||
{ USB_DEVICE_WACOM(0xEC) },
|
{ USB_DEVICE_WACOM(0xEC) },
|
||||||
{ USB_DEVICE_WACOM(0xED) },
|
{ USB_DEVICE_WACOM(0xED) },
|
||||||
{ USB_DEVICE_WACOM(0xEF) },
|
{ USB_DEVICE_WACOM(0xEF) },
|
||||||
|
{ USB_DEVICE_WACOM(0x100) },
|
||||||
|
{ USB_DEVICE_WACOM(0x101) },
|
||||||
{ USB_DEVICE_WACOM(0x47) },
|
{ USB_DEVICE_WACOM(0x47) },
|
||||||
{ USB_DEVICE_WACOM(0xF4) },
|
{ USB_DEVICE_WACOM(0xF4) },
|
||||||
{ USB_DEVICE_WACOM(0xF8) },
|
{ USB_DEVICE_WACOM(0xF8) },
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#define WACOM_PKGLEN_BBPEN 10
|
#define WACOM_PKGLEN_BBPEN 10
|
||||||
#define WACOM_PKGLEN_WIRELESS 32
|
#define WACOM_PKGLEN_WIRELESS 32
|
||||||
#define WACOM_PKGLEN_MTOUCH 62
|
#define WACOM_PKGLEN_MTOUCH 62
|
||||||
|
#define WACOM_PKGLEN_MTTPC 40
|
||||||
|
|
||||||
/* wacom data size per MT contact */
|
/* wacom data size per MT contact */
|
||||||
#define WACOM_BYTES_PER_MT_PACKET 11
|
#define WACOM_BYTES_PER_MT_PACKET 11
|
||||||
@ -88,6 +89,7 @@ enum {
|
|||||||
TABLETPCE,
|
TABLETPCE,
|
||||||
TABLETPC2FG,
|
TABLETPC2FG,
|
||||||
MTSCREEN,
|
MTSCREEN,
|
||||||
|
MTTPC,
|
||||||
MAX_TYPE
|
MAX_TYPE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user