* [PATCH 1/1] Input: hanwang - add support for Art Master II tablet
@ 2012-06-29 14:14 weixing
2012-07-10 6:42 ` Dmitry Torokhov
0 siblings, 1 reply; 3+ messages in thread
From: weixing @ 2012-06-29 14:14 UTC (permalink / raw)
To: dmitry.torokhov; +Cc: linux-input, xing_wei777, weixing
this adds support for old hanwang Art master II tablet
Signed-off-by: weixing <weixing@hanwang.com.cn>
---
drivers/input/tablet/hanwang.c | 50 ++++++++++++++++++++++++++++------------
1 files changed, 35 insertions(+), 15 deletions(-)
diff --git a/drivers/input/tablet/hanwang.c b/drivers/input/tablet/hanwang.c
index b2db3cf..b652de3 100644
--- a/drivers/input/tablet/hanwang.c
+++ b/drivers/input/tablet/hanwang.c
@@ -63,6 +63,7 @@ MODULE_LICENSE(DRIVER_LICENSE);
enum hanwang_tablet_type {
HANWANG_ART_MASTER_III,
HANWANG_ART_MASTER_HD,
+ HANWANG_ART_MASTER_II,
};
struct hanwang {
@@ -99,6 +100,8 @@ static const struct hanwang_features features_array[] = {
ART_MASTER_PKGLEN_MAX, 0x7f00, 0x4f60, 0x3f, 0x7f, 2048 },
{ 0x8401, "Hanwang Art Master HD 5012", HANWANG_ART_MASTER_HD,
ART_MASTER_PKGLEN_MAX, 0x678e, 0x4150, 0x3f, 0x7f, 1024 },
+ { 0x8503, "Hanwang Art Master II", HANWANG_ART_MASTER_II,
+ ART_MASTER_PKGLEN_MAX, 0x27de, 0x1cfe, 0x3f, 0x7f, 1024 },
};
static const int hw_eventtypes[] = {
@@ -127,16 +130,30 @@ static void hanwang_parse_packet(struct hanwang *hanwang)
struct usb_device *dev = hanwang->usbdev;
enum hanwang_tablet_type type = hanwang->features->type;
int i;
- u16 x, y, p;
+ u16 p;
+
+ if (type == HANWANG_ART_MASTER_II) {
+ hanwang->current_tool = BTN_TOOL_PEN;
+ hanwang->current_id = STYLUS_DEVICE_ID;
+ }
switch (data[0]) {
case 0x02: /* data packet */
switch (data[1]) {
case 0x80: /* tool prox out */
- hanwang->current_id = 0;
- input_report_key(input_dev, hanwang->current_tool, 0);
+ if (type != HANWANG_ART_MASTER_II) {
+ hanwang->current_id = 0;
+ input_report_key(input_dev,
+ hanwang->current_tool, 0);
+ }
+ break;
+ case 0x00: /* artmaster ii pen leave */
+ if (type == HANWANG_ART_MASTER_II) {
+ hanwang->current_id = 0;
+ input_report_key(input_dev,
+ hanwang->current_tool, 0);
+ }
break;
-
case 0xc2: /* first time tool prox in */
switch (data[3] & 0xf0) {
case 0x20: /* art_master III */
@@ -154,23 +171,20 @@ static void hanwang_parse_packet(struct hanwang *hanwang)
default:
hanwang->current_id = 0;
dev_dbg(&dev->dev,
- "unknown tablet tool %02x ", data[0]);
+ "unknown tablet tool %02x\n", data[0]);
break;
}
break;
default: /* tool data packet */
- x = (data[2] << 8) | data[3];
- y = (data[4] << 8) | data[5];
-
switch (type) {
case HANWANG_ART_MASTER_III:
p = (data[6] << 3) |
((data[7] & 0xc0) >> 5) |
(data[1] & 0x01);
break;
-
case HANWANG_ART_MASTER_HD:
+ case HANWANG_ART_MASTER_II:
p = (data[7] >> 6) | (data[6] << 2);
break;
@@ -180,15 +194,18 @@ static void hanwang_parse_packet(struct hanwang *hanwang)
}
input_report_abs(input_dev, ABS_X,
- le16_to_cpup((__le16 *)&x));
+ be16_to_cpup((__be16 *)&data[2]));
input_report_abs(input_dev, ABS_Y,
- le16_to_cpup((__le16 *)&y));
- input_report_abs(input_dev, ABS_PRESSURE,
- le16_to_cpup((__le16 *)&p));
+ be16_to_cpup((__be16 *)&data[4]));
+ input_report_abs(input_dev, ABS_PRESSURE, p);
input_report_abs(input_dev, ABS_TILT_X, data[7] & 0x3f);
input_report_abs(input_dev, ABS_TILT_Y, data[8] & 0x7f);
input_report_key(input_dev, BTN_STYLUS, data[1] & 0x02);
- input_report_key(input_dev, BTN_STYLUS2, data[1] & 0x04);
+ if (type != HANWANG_ART_MASTER_II)
+ input_report_key(input_dev, BTN_STYLUS2,
+ data[1] & 0x04);
+ else
+ input_report_key(input_dev, BTN_TOOL_PEN, 1);
break;
}
input_report_abs(input_dev, ABS_MISC, hanwang->current_id);
@@ -227,6 +244,9 @@ static void hanwang_parse_packet(struct hanwang *hanwang)
BTN_5 + i, data[6] & (1 << i));
}
break;
+ case HANWANG_ART_MASTER_II:
+ dev_dbg(&dev->dev, "error packet %02x\n", data[0]);
+ return;
}
input_report_abs(input_dev, ABS_MISC, hanwang->current_id);
@@ -234,7 +254,7 @@ static void hanwang_parse_packet(struct hanwang *hanwang)
break;
default:
- dev_dbg(&dev->dev, "error packet %02x ", data[0]);
+ dev_dbg(&dev->dev, "error packet %02x\n", data[0]);
break;
}
--
1.7.4.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 1/1] Input: hanwang - add support for Art Master II tablet
2012-06-29 14:14 [PATCH 1/1] Input: hanwang - add support for Art Master II tablet weixing
@ 2012-07-10 6:42 ` Dmitry Torokhov
2012-07-10 7:15 ` weixing
0 siblings, 1 reply; 3+ messages in thread
From: Dmitry Torokhov @ 2012-07-10 6:42 UTC (permalink / raw)
To: weixing; +Cc: linux-input, xing_wei777
Hi,
On Fri, Jun 29, 2012 at 10:14:06PM +0800, weixing wrote:
>
> switch (data[0]) {
> case 0x02: /* data packet */
> switch (data[1]) {
> case 0x80: /* tool prox out */
> - hanwang->current_id = 0;
> - input_report_key(input_dev, hanwang->current_tool, 0);
> + if (type != HANWANG_ART_MASTER_II) {
> + hanwang->current_id = 0;
> + input_report_key(input_dev,
> + hanwang->current_tool, 0);
> + }
> + break;
> + case 0x00: /* artmaster ii pen leave */
> + if (type == HANWANG_ART_MASTER_II) {
> + hanwang->current_id = 0;
> + input_report_key(input_dev,
> + hanwang->current_tool, 0);
> + }
> break;
OK, so this will ignore 0x02 0x80 reports on HANWANG_ART_MASTER_II and
0x02 0x00 reports on other tablets. I just want to make sure that was
the intention of the patch.
Thanks.
--
Dmitry
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Re: [PATCH 1/1] Input: hanwang - add support for Art Master II tablet
2012-07-10 6:42 ` Dmitry Torokhov
@ 2012-07-10 7:15 ` weixing
0 siblings, 0 replies; 3+ messages in thread
From: weixing @ 2012-07-10 7:15 UTC (permalink / raw)
To: Dmitry Torokhov; +Cc: linux-input, xing_wei777
Hi Dmitry Torokhov,
On 2012-07-10 14:43:51,you wrote:
>
>Hi,
>
>On Fri, Jun 29, 2012 at 10:14:06PM +0800, weixing wrote:
>>
>> switch (data[0]) {
>> case 0x02: /* data packet */
>> switch (data[1]) {
>> case 0x80: /* tool prox out */
>> - hanwang->current_id = 0;
>> - input_report_key(input_dev, hanwang->current_tool, 0);
>> + if (type != HANWANG_ART_MASTER_II) {
>> + hanwang->current_id = 0;
>> + input_report_key(input_dev,
>> + hanwang->current_tool, 0);
>> + }
>> + break;
>> + case 0x00: /* artmaster ii pen leave */
>> + if (type == HANWANG_ART_MASTER_II) {
>> + hanwang->current_id = 0;
>> + input_report_key(input_dev,
>> + hanwang->current_tool, 0);
>> + }
>> break;
>
>OK, so this will ignore 0x02 0x80 reports on HANWANG_ART_MASTER_II and
>0x02 0x00 reports on other tablets. I just want to make sure that was
>the intention of the patch.
>
yes.
>Thanks.
>
>--
>Dmitry
>--
>To unsubscribe from this list: send the line "unsubscribe linux-input" in
>the body of a message to majordomo@vger.kernel.org
>More majordomo info at http://vger.kernel.org/majordomo-info.html
>
Thanks.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-07-10 7:15 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-06-29 14:14 [PATCH 1/1] Input: hanwang - add support for Art Master II tablet weixing
2012-07-10 6:42 ` Dmitry Torokhov
2012-07-10 7:15 ` weixing
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.