Input: wacom: Add support for 0x116 sensor on Win8 Panasonic CF-H2
Subsystems (2)
PATCH 1/2 Input: wacom: Add support for 0x116 sensor on Win8 Panasonic CF-H2
The Win8 version of the Panasonic CF-H2 includes a new Wacom device. The pen interface appears to use the same protocol as before, but the touch interface has been tweaked to send Win8-compatible reports.
--- drivers/input/tablet/wacom_wac.c | 8 ++++++++ drivers/input/tablet/wacom_wac.h | 1 + 2 files changed, 9 insertions(+)
drivers/input/tablet/wacom_wac.c +8 -0
@@ -1107,6 +1107,10 @@ static int wacom_tpc_single_touch(struct wacom_wac *wacom, size_t len) prox = data[0 ] &0x01 ; x =get_unaligned_le16 (&data[1 ]); y =get_unaligned_le16 (&data[3 ]); + }else if (len ==WACOM_PKGLEN_TPC1FG_B ) { + prox = data[2 ] &0x01 ; + x =le16_to_cpup ((__le16 *)&data[3 ]); + y =le16_to_cpup ((__le16 *)&data[5 ]); }else { prox = data[1 ] &0x01 ; x =le16_to_cpup ((__le16 *)&data[2 ]);
@@ -2298,6 +2302,9 @@ static const struct wacom_features wacom_features_0x10E =static const struct wacom_features wacom_features_0x10F = {"Wacom ISDv4 10F" ,WACOM_PKGLEN_MTTPC ,27760 ,15694 ,255 ,0 ,MTTPC ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES }; +static const struct wacom_features wacom_features_0x116 = + {"Wacom ISDv4 116" ,WACOM_PKGLEN_GRAPHIRE ,26202 ,16325 ,255 , +0 ,TABLETPCE ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES };static const struct wacom_features wacom_features_0x4001 = {"Wacom ISDv4 4001" ,WACOM_PKGLEN_MTTPC ,26202 ,16325 ,255 ,0 ,MTTPC ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES };
@@ -2512,6 +2519,7 @@ const struct usb_device_id wacom_ids[] = { { USB_DEVICE_WACOM(0x10D) }, { USB_DEVICE_WACOM(0x10E) }, { USB_DEVICE_WACOM(0x10F) }, + { USB_DEVICE_WACOM(0x116) }, { USB_DEVICE_WACOM(0x300) }, { USB_DEVICE_WACOM(0x301) }, { USB_DEVICE_DETAILED(0x302, USB_CLASS_HID, 0, 0) },
drivers/input/tablet/wacom_wac.h +1 -0
@@ -22,6 +22,7 @@#define WACOM_PKGLEN_BBFUN 9#define WACOM_PKGLEN_INTUOS 10#define WACOM_PKGLEN_TPC1FG 5 +#define WACOM_PKGLEN_TPC1FG_B 10#define WACOM_PKGLEN_TPC2FG 14#define WACOM_PKGLEN_BBTOUCH 20#define WACOM_PKGLEN_BBTOUCH3 64
Signature · 1 line
1.9.2
PATCH 2/2 Input: wacom: Add support for three new ISDv4 sensors
This patch adds support for the 0x4004, 0x5000, and 0x5002 sensors found on what should be the Motion R12, Fujitsu Q704, and Fujitsu T904. These tablets use a new report ID (3) for their touch packets and a slightly different HID descriptor format, but are otherwise largely identical in protocol to the "MTTPC" tablets.
Note:
* The R12 uses its 0x4004 sensor for touch input only. A pen interface is not present in its HID descriptor, though its possible a 0x4004 may be used for pen input by other tablet PCs in the future.
* The 0x5002 sensor appears to use a new report ID (8) for its pen packets. The other sensors continue to use the traditional report ID (2).
--- drivers/input/tablet/wacom_sys.c | 19 +++++++++++++++++++ drivers/input/tablet/wacom_wac.c | 20 +++++++++++++++++++- drivers/input/tablet/wacom_wac.h | 3 +++ 3 files changed, 41 insertions(+), 1 deletion(-)
drivers/input/tablet/wacom_sys.c +19 -0
@@ -364,6 +364,7 @@ static int wacom_parse_hid(struct usb_interface *intf,break ;case MTTPC : +case MTTPC_B : features->pktlen =WACOM_PKGLEN_MTTPC ;break ;
@@ -395,6 +396,16 @@ static int wacom_parse_hid(struct usb_interface *intf, i +=12 ;break ; +case MTTPC_B : + features->x_max = +get_unaligned_le16 (&report[i +3 ]); + features->x_phy = +get_unaligned_le16 (&report[i +6 ]); + features->unit = report[i -5 ]; + features->unitExpo = report[i -3 ]; + i +=9 ; +break ; +default : features->x_max =get_unaligned_le16 (&report[i +3 ]);
@@ -447,6 +458,14 @@ static int wacom_parse_hid(struct usb_interface *intf, i +=12 ;break ; +case MTTPC_B : + features->y_max = +get_unaligned_le16 (&report[i +3 ]); + features->y_phy = +get_unaligned_le16 (&report[i +6 ]); + i +=9 ; +break ; +default : features->y_max = features->x_max;
drivers/input/tablet/wacom_wac.c +19 -1
@@ -1022,7 +1022,7 @@ static int wacom_mt_touch(struct wacom_wac *wacom)int x_offset =0 ;/* MTTPC does not support Height and Width */ -if (wacom->features.type ==MTTPC ) +if (wacom->features.type ==MTTPC || wacom->features.type ==MTTPC_B ) x_offset =-4 ;/*
@@ -1179,6 +1179,9 @@ static int wacom_tpc_irq(struct wacom_wac *wacom, size_t len)case WACOM_PKGLEN_TPC2FG :return wacom_tpc_mt_touch (wacom); +case WACOM_PKGLEN_PENABLED : +return wacom_tpc_pen (wacom); +default :switch (data[0 ]) {case WACOM_REPORT_TPC1FG :
@@ -1188,6 +1191,7 @@ static int wacom_tpc_irq(struct wacom_wac *wacom, size_t len)return wacom_tpc_single_touch (wacom, len);case WACOM_REPORT_TPCMT : +case WACOM_REPORT_TPCMT2 :return wacom_mt_touch (wacom);case WACOM_REPORT_PENABLED :
@@ -1530,6 +1534,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)case TABLETPC2FG :case MTSCREEN :case MTTPC : +case MTTPC_B : sync =wacom_tpc_irq (wacom_wac, len);break ;
@@ -1871,6 +1876,7 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev,case MTSCREEN :case MTTPC : +case MTTPC_B :case TABLETPC2FG :if (features->device_type ==BTN_TOOL_FINGER ) {unsigned int flags =INPUT_MT_DIRECT ;
@@ -2308,6 +2314,15 @@ static const struct wacom_features wacom_features_0x116 =static const struct wacom_features wacom_features_0x4001 = {"Wacom ISDv4 4001" ,WACOM_PKGLEN_MTTPC ,26202 ,16325 ,255 ,0 ,MTTPC ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES }; +static const struct wacom_features wacom_features_0x4004 = + {"Wacom ISDv4 4004" ,WACOM_PKGLEN_MTTPC ,11060 ,6220 ,255 , +0 ,MTTPC_B ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES }; +static const struct wacom_features wacom_features_0x5000 = + {"Wacom ISDv4 5000" ,WACOM_PKGLEN_MTTPC ,27848 ,15752 ,1023 , +0 ,MTTPC_B ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES }; +static const struct wacom_features wacom_features_0x5002 = + {"Wacom ISDv4 5002" ,WACOM_PKGLEN_MTTPC ,29576 ,16724 ,1023 , +0 ,MTTPC_B ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES };static const struct wacom_features wacom_features_0x47 = {"Wacom Intuos2 6x8" ,WACOM_PKGLEN_INTUOS ,20320 ,16240 ,1023 ,31 ,INTUOS ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES };
@@ -2530,6 +2545,9 @@ const struct usb_device_id wacom_ids[] = { { USB_DEVICE_DETAILED(0x315, USB_CLASS_HID, 0, 0) }, { USB_DEVICE_DETAILED(0x317, USB_CLASS_HID, 0, 0) }, { USB_DEVICE_WACOM(0x4001) }, + { USB_DEVICE_WACOM(0x4004) }, + { USB_DEVICE_WACOM(0x5000) }, + { USB_DEVICE_WACOM(0x5002) }, { USB_DEVICE_WACOM(0x47) }, { USB_DEVICE_WACOM(0xF4) }, { USB_DEVICE_WACOM(0xF8) },
drivers/input/tablet/wacom_wac.h +3 -0
@@ -31,6 +31,7 @@#define WACOM_PKGLEN_MTOUCH 62#define WACOM_PKGLEN_MTTPC 40#define WACOM_PKGLEN_DTUS 68 +#define WACOM_PKGLEN_PENABLED 8/* wacom data size per MT contact */ #define WACOM_BYTES_PER_MT_PACKET 11
@@ -53,6 +54,7 @@#define WACOM_REPORT_TPC1FG 6#define WACOM_REPORT_TPC2FG 13#define WACOM_REPORT_TPCMT 13 +#define WACOM_REPORT_TPCMT2 3#define WACOM_REPORT_TPCHID 15#define WACOM_REPORT_TPCST 16#define WACOM_REPORT_DTUS 17
@@ -106,6 +108,7 @@ enum {TABLETPC2FG ,MTSCREEN ,MTTPC , +MTTPC_B , MAX_TYPE };
Signature · 1 line
1.9.2
Dmitry Torokhov
maintainerRe: [PATCH 2/2] Input: wacom: Add support for three new ISDv4 sensors
Quoted 11 lines · Jason Gerecke
This patch adds support for the
0x4004,0x5000, and0x5002sensors found on what should be the Motion R12, Fujitsu Q704, and Fujitsu T904. These tablets use a new report ID (3) for their touch packets and a slightly different HID descriptor format, but are otherwise largely identical in protocol to the "MTTPC" tablets.Note:
* The R12 uses its0x4004sensor for touch input only. A pen interface is not present in its HID descriptor, though its possible a0x4004may be used for pen input by other tablet PCs in the future.
Quoted 5 lines
* The
0x5002sensor appears to use a new report ID (8) for its pen packets. The other sensors continue to use the traditional report ID (2).Signed-off-by Jason Gerecke <[email protected]>
Hmm, that does not apply to my next branch, could it be because I pulled out a patch unifying some reports that Ping asked me to pull out?
Thanks.
Signature · 1 line
Dmitry
PATCH v2 1/1 Input: wacom: Add support for three new ISDv4 sensors
This patch adds support for the 0x4004, 0x5000, and 0x5002 sensors found on what should be the Motion R12, Fujitsu Q704, and Fujitsu T904. These tablets use a new report ID (3) for their touch packets and a slightly different HID descriptor format, but are otherwise largely identical in protocol to the "MTTPC" tablets.
Note:
* The R12 uses its 0x4004 sensor for touch input only. A pen interface is not present in its HID descriptor, though its possible a 0x4004 may be used for pen input by other tablet PCs in the future.
* The 0x5002 sensor appears to use a new report ID (8) for its pen packets. The other sensors continue to use the traditional report ID (2).
---
Changes from v1:
* None; rebased.
drivers/input/tablet/wacom_sys.c | 19 +++++++++++++++++++ drivers/input/tablet/wacom_wac.c | 20 +++++++++++++++++++- drivers/input/tablet/wacom_wac.h | 3 +++ 3 files changed, 41 insertions(+), 1 deletion(-)
drivers/input/tablet/wacom_sys.c +19 -0
@@ -364,6 +364,7 @@ static int wacom_parse_hid(struct usb_interface *intf,break ;case MTTPC : +case MTTPC_B : features->pktlen =WACOM_PKGLEN_MTTPC ;break ;
@@ -395,6 +396,16 @@ static int wacom_parse_hid(struct usb_interface *intf, i +=12 ;break ; +case MTTPC_B : + features->x_max = +get_unaligned_le16 (&report[i +3 ]); + features->x_phy = +get_unaligned_le16 (&report[i +6 ]); + features->unit = report[i -5 ]; + features->unitExpo = report[i -3 ]; + i +=9 ; +break ; +default : features->x_max =get_unaligned_le16 (&report[i +3 ]);
@@ -447,6 +458,14 @@ static int wacom_parse_hid(struct usb_interface *intf, i +=12 ;break ; +case MTTPC_B : + features->y_max = +get_unaligned_le16 (&report[i +3 ]); + features->y_phy = +get_unaligned_le16 (&report[i +6 ]); + i +=9 ; +break ; +default : features->y_max = features->x_max;
drivers/input/tablet/wacom_wac.c +19 -1
@@ -1022,7 +1022,7 @@ static int wacom_mt_touch(struct wacom_wac *wacom)int x_offset =0 ;/* MTTPC does not support Height and Width */ -if (wacom->features.type ==MTTPC ) +if (wacom->features.type ==MTTPC || wacom->features.type ==MTTPC_B ) x_offset =-4 ;/*
@@ -1179,6 +1179,9 @@ static int wacom_tpc_irq(struct wacom_wac *wacom, size_t len)case WACOM_PKGLEN_TPC2FG :return wacom_tpc_mt_touch (wacom); +case WACOM_PKGLEN_PENABLED : +return wacom_tpc_pen (wacom); +default :switch (data[0 ]) {case WACOM_REPORT_TPC1FG :
@@ -1188,6 +1191,7 @@ static int wacom_tpc_irq(struct wacom_wac *wacom, size_t len)return wacom_tpc_single_touch (wacom, len);case WACOM_REPORT_TPCMT : +case WACOM_REPORT_TPCMT2 :return wacom_mt_touch (wacom);case WACOM_REPORT_PENABLED :
@@ -1530,6 +1534,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)case TABLETPC2FG :case MTSCREEN :case MTTPC : +case MTTPC_B : sync =wacom_tpc_irq (wacom_wac, len);break ;
@@ -1871,6 +1876,7 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev,case MTSCREEN :case MTTPC : +case MTTPC_B :case TABLETPC2FG :if (features->device_type ==BTN_TOOL_FINGER ) {unsigned int flags =INPUT_MT_DIRECT ;
@@ -2308,6 +2314,15 @@ static const struct wacom_features wacom_features_0x116 =static const struct wacom_features wacom_features_0x4001 = {"Wacom ISDv4 4001" ,WACOM_PKGLEN_MTTPC ,26202 ,16325 ,255 ,0 ,MTTPC ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES }; +static const struct wacom_features wacom_features_0x4004 = + {"Wacom ISDv4 4004" ,WACOM_PKGLEN_MTTPC ,11060 ,6220 ,255 , +0 ,MTTPC_B ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES }; +static const struct wacom_features wacom_features_0x5000 = + {"Wacom ISDv4 5000" ,WACOM_PKGLEN_MTTPC ,27848 ,15752 ,1023 , +0 ,MTTPC_B ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES }; +static const struct wacom_features wacom_features_0x5002 = + {"Wacom ISDv4 5002" ,WACOM_PKGLEN_MTTPC ,29576 ,16724 ,1023 , +0 ,MTTPC_B ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES };static const struct wacom_features wacom_features_0x47 = {"Wacom Intuos2 6x8" ,WACOM_PKGLEN_INTUOS ,20320 ,16240 ,1023 ,31 ,INTUOS ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES };
@@ -2530,6 +2545,9 @@ const struct usb_device_id wacom_ids[] = { { USB_DEVICE_DETAILED(0x315, USB_CLASS_HID, 0, 0) }, { USB_DEVICE_DETAILED(0x317, USB_CLASS_HID, 0, 0) }, { USB_DEVICE_WACOM(0x4001) }, + { USB_DEVICE_WACOM(0x4004) }, + { USB_DEVICE_WACOM(0x5000) }, + { USB_DEVICE_WACOM(0x5002) }, { USB_DEVICE_WACOM(0x47) }, { USB_DEVICE_WACOM(0xF4) }, { USB_DEVICE_WACOM(0xF8) },
drivers/input/tablet/wacom_wac.h +3 -0
@@ -31,6 +31,7 @@#define WACOM_PKGLEN_MTOUCH 62#define WACOM_PKGLEN_MTTPC 40#define WACOM_PKGLEN_DTUS 68 +#define WACOM_PKGLEN_PENABLED 8/* wacom data size per MT contact */ #define WACOM_BYTES_PER_MT_PACKET 11
@@ -53,6 +54,7 @@#define WACOM_REPORT_TPC1FG 6#define WACOM_REPORT_TPC2FG 13#define WACOM_REPORT_TPCMT 13 +#define WACOM_REPORT_TPCMT2 3#define WACOM_REPORT_TPCHID 15#define WACOM_REPORT_TPCST 16#define WACOM_REPORT_DTUS 17
@@ -106,6 +108,7 @@ enum {TABLETPC2FG ,MTSCREEN ,MTTPC , +MTTPC_B , MAX_TYPE };
Signature · 1 line
1.9.2
Quoted 15 lines · Jason Gerecke
The Win8 version of the Panasonic CF-H2 includes a new Wacom device. The pen interface appears to use the same protocol as before, but the touch interface has been tweaked to send Win8-compatible reports.
Signed-off-by Jason Gerecke <[email protected]>--- drivers/input/tablet/wacom_wac.c | 8 ++++++++ drivers/input/tablet/wacom_wac.h | 1 + 2 files changed, 9 insertions(+)drivers/input/tablet/wacom_wac.c +0
-0
drivers/input/tablet/wacom_wac.c static int wacom_tpc_single_touch(struct wacom_wac *wacom, size_t len) · line 1113
Quoted 7 lines
drivers/input/tablet/wacom_wac.c +4
-0@@ -1107,6 +1107,10 @@ static int wacom_tpc_single_touch(struct wacom_wac *wacom, size_t len) prox = data[0 ] &0x01 ; x =get_unaligned_le16 (&data[1 ]); y =get_unaligned_le16 (&data[3 ]); + }else if (len ==WACOM_PKGLEN_TPC1FG_B ) { + prox = data[2 ] &0x01 ; + x =le16_to_cpup ((__le16 *)&data[3 ]); + y =le16_to_cpup ((__le16 *)&data[5 ]);
Above two lines should use get_unaligned_le16() instead. wacom_mt_touch() needs some cleanup too.
Except that, the whole patchset looks good to me.
Ping
Quoted 40 lines
drivers/input/tablet/wacom_wac.c +4
-0}else { prox = data[1 ] &0x01 ; x =le16_to_cpup ((__le16 *)&data[2 ]);@@ -2298,6 +2302,9 @@ static const struct wacom_features wacom_features_0x10E =static const struct wacom_features wacom_features_0x10F = {"Wacom ISDv4 10F" ,WACOM_PKGLEN_MTTPC ,27760 ,15694 ,255 ,0 ,MTTPC ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES }; +static const struct wacom_features wacom_features_0x116 = + {"Wacom ISDv4 116" ,WACOM_PKGLEN_GRAPHIRE ,26202 ,16325 ,255 , +0 ,TABLETPCE ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES };static const struct wacom_features wacom_features_0x4001 = {"Wacom ISDv4 4001" ,WACOM_PKGLEN_MTTPC ,26202 ,16325 ,255 ,0 ,MTTPC ,WACOM_INTUOS_RES ,WACOM_INTUOS_RES };@@ -2512,6 +2519,7 @@ const struct usb_device_id wacom_ids[] = { { USB_DEVICE_WACOM(0x10D) }, { USB_DEVICE_WACOM(0x10E) }, { USB_DEVICE_WACOM(0x10F) }, + { USB_DEVICE_WACOM(0x116) }, { USB_DEVICE_WACOM(0x300) }, { USB_DEVICE_WACOM(0x301) }, { USB_DEVICE_DETAILED(0x302, USB_CLASS_HID, 0, 0) },drivers/input/tablet/wacom_wac.h +1
-1@@ -22,6 +22,7 @@#define WACOM_PKGLEN_BBFUN 9#define WACOM_PKGLEN_INTUOS 10#define WACOM_PKGLEN_TPC1FG 5 +#define WACOM_PKGLEN_TPC1FG_B 10#define WACOM_PKGLEN_TPC2FG 14#define WACOM_PKGLEN_BBTOUCH 20#define WACOM_PKGLEN_BBTOUCH3 64 --1.9.2
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Dmitry Torokhov
maintainerQuoted 27 lines · Ping Cheng
Quoted 15 lines · Jason Gerecke
The Win8 version of the Panasonic CF-H2 includes a new Wacom device. The pen interface appears to use the same protocol as before, but the touch interface has been tweaked to send Win8-compatible reports.
Signed-off-by Jason Gerecke <[email protected]>--- drivers/input/tablet/wacom_wac.c | 8 ++++++++ drivers/input/tablet/wacom_wac.h | 1 + 2 files changed, 9 insertions(+)drivers/input/tablet/wacom_wac.c +0
-0drivers/input/tablet/wacom_wac.c static int wacom_tpc_single_touch(struct wacom_wac *wacom, size_t len) · line 1113
Quoted 7 lines
drivers/input/tablet/wacom_wac.c +4
-0@@ -1107,6 +1107,10 @@ static int wacom_tpc_single_touch(struct wacom_wac *wacom, size_t len) prox = data[0 ] &0x01 ; x =get_unaligned_le16 (&data[1 ]); y =get_unaligned_le16 (&data[3 ]); + }else if (len ==WACOM_PKGLEN_TPC1FG_B ) { + prox = data[2 ] &0x01 ; + x =le16_to_cpup ((__le16 *)&data[3 ]); + y =le16_to_cpup ((__le16 *)&data[5 ]);Above two lines should use
get_unaligned_le16()instead.wacom_mt_touch()needs some cleanup too.
Quoted 3 lines
Except that, the whole patchset looks good to me.
Reviewed-by Ping Cheng <[email protected]>
I changed le16_to_cpup to get_unaligned_le16 locally and applied, thank you.
Signature · 1 line
Dmitry