input: wacom - add 0xE5 (MT device) support
Subsystems (2)
PATCH v2 4/4 input: wacom - add 0xE5 (MT device) support
And getting rid of duplicate code since X/Y will always be present.
Tested-by Chris Bagwell <[email protected]>
Reviewed-by Chris Bagwell <[email protected]>
Signed-off-by Ping Cheng <[email protected]>
---
v2: updated with Chris' comments.
drivers/input/tablet/wacom_sys.c | 57 ++++++++++++------------ drivers/input/tablet/wacom_wac.c | 88 ++++++++++++++++++++++++++++++++++++- drivers/input/tablet/wacom_wac.h | 8 +++ 3 files changed, 122 insertions(+), 31 deletions(-)
drivers/input/tablet/wacom_sys.c +29 -28
@@ -308,6 +308,10 @@ static int wacom_parse_hid(struct usb_interface *intf, features->pktlen =WACOM_PKGLEN_TPC2FG ; features->touch_max =2 ; } + +if (features->type ==MTSCREEN ) + features->pktlen =WACOM_PKGLEN_MTOUCH ; +if (features->type ==BAMBOO_PT ) {/* need to reset back */ features->pktlen =WACOM_PKGLEN_BBTOUCH ;
@@ -342,18 +346,15 @@ static int wacom_parse_hid(struct usb_interface *intf,case HID_USAGE_Y :if (usage ==WCM_DESKTOP ) {if (finger) { - features->device_type =BTN_TOOL_FINGER ; -if (features->type ==TABLETPC2FG ) { -/* need to reset back */ - features->pktlen =WACOM_PKGLEN_TPC2FG ; +int type = features->type; + +if (type ==TABLETPC2FG || type ==MTSCREEN ) { features->y_max =get_unaligned_le16 (&report[i +3 ]); features->y_phy =get_unaligned_le16 (&report[i +6 ]); i +=7 ; - }else if (features->type ==BAMBOO_PT ) { -/* need to reset back */ - features->pktlen =WACOM_PKGLEN_BBTOUCH ; + }else if (type ==BAMBOO_PT ) { features->y_phy =get_unaligned_le16 (&report[i +3 ]); features->y_max =
@@ -367,10 +368,6 @@ static int wacom_parse_hid(struct usb_interface *intf, i +=4 ; } }else if (pen) { -/* penabled only accepts exact bytes of data */ -if (features->type ==TABLETPC2FG ) - features->pktlen =WACOM_PKGLEN_GRAPHIRE ; - features->device_type =BTN_TOOL_PEN ; features->y_max =get_unaligned_le16 (&report[i +3 ]); i +=4 ;
@@ -433,24 +430,28 @@ static int wacom_query_tablet_data(struct usb_interface *intf, struct wacom_featif (!rep_data)return error; -/* ask to report tablet data if it is MT Tablet PC or -* not a Tablet PC */ -if (features->type ==TABLETPC2FG ) { -do { - rep_data[0 ] =3 ; - rep_data[1 ] =4 ; - rep_data[2 ] =0 ; - rep_data[3 ] =0 ; - report_id =3 ; - error =wacom_set_report (intf,WAC_HID_FEATURE_REPORT , +/* ask to report Wacom data */ +if (features->device_type ==BTN_TOOL_FINGER ) { +/* if it is an MT Tablet PC touch */ +if ((features->type ==TABLETPC2FG ) || + (features->type ==MTSCREEN )) { +do { + rep_data[0 ] =3 ; + rep_data[1 ] =4 ; + rep_data[2 ] =0 ; + rep_data[3 ] =0 ; + report_id =3 ; + error =wacom_set_report (intf, +WAC_HID_FEATURE_REPORT , report_id, rep_data,4 ,1 ); -if (error >=0 ) - error =wacom_get_report (intf, +if (error >=0 ) + error =wacom_get_report (intf,WAC_HID_FEATURE_REPORT , report_id, rep_data,4 ,1 ); - }while ((error <0 || rep_data[1 ] !=4 ) && limit++ <WAC_MSG_RETRIES ); - }else if (features->type !=TABLETPC && - features->device_type ==BTN_TOOL_PEN ) { + }while ((error <0 || rep_data[1 ] !=4 ) && + limit++ <WAC_MSG_RETRIES ); + } + }else if (features->type !=TABLETPC ) {/* or not a Tablet PC pen */ do { rep_data[0] = 2; rep_data[1] = 2;
@@ -482,9 +483,9 @@ static int wacom_retrieve_hid_descriptor(struct usb_interface *intf, features->pressure_fuzz =0 ; features->distance_fuzz =0 ; -/* only Tablet PCs and Bamboo P&T need to retrieve the info */ +/* only devices that support touch need to retrieve the info */ if ((features->type !=TABLETPC ) && (features->type !=TABLETPC2FG ) && - (features->type !=BAMBOO_PT )) + (features->type !=BAMBOO_PT ) && (features->type !=MTSCREEN )) goto out;if (usb_get_extra_descriptor (interface,HID_DEVICET_HID , &hid_desc)) {
drivers/input/tablet/wacom_wac.c +85 -3
144 lines not on this page · raw message
drivers/input/tablet/wacom_wac.h +8 -0
@@ -24,6 +24,10 @@#define WACOM_PKGLEN_BBTOUCH 20#define WACOM_PKGLEN_BBTOUCH3 64#define WACOM_PKGLEN_BBPEN 10 +#define WACOM_PKGLEN_MTOUCH 62 + +/* wacom data size per MT contact */ +#define WACOM_BYTES_PER_MT_PACKET 11/* device IDs */ #define STYLUS_DEVICE_ID 0x02
@@ -39,6 +43,7 @@#define WACOM_REPORT_INTUOSPAD 12#define WACOM_REPORT_TPC1FG 6#define WACOM_REPORT_TPC2FG 13 +#define WACOM_REPORT_TPCMT 13#define WACOM_REPORT_TPCHID 15#define WACOM_REPORT_TPCST 16
@@ -68,6 +73,7 @@ enum {WACOM_MO ,TABLETPC ,TABLETPC2FG , +MTSCREEN , MAX_TYPE };
@@ -92,6 +98,8 @@ struct wacom_features {int distance_fuzz;unsigned quirks;unsigned touch_max; +unsigned num_contacts; +unsigned num_contacts_left; };struct wacom_shared {
Signature · 1 line
1.7.6.4