@@ -1220,7 +1220,8 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom)
1220
1220
unsigned char * data = wacom -> data ;
1221
1221
int i ;
1222
1222
1223
- if (wacom -> features .type == INTUOSP2_BT ) {
1223
+ if (wacom -> features .type == INTUOSP2_BT ||
1224
+ wacom -> features .type == INTUOSP2S_BT ) {
1224
1225
wacom -> serial [0 ] = get_unaligned_le64 (& data [99 ]);
1225
1226
wacom -> id [0 ] = get_unaligned_le16 (& data [107 ]);
1226
1227
pen_frame_len = 14 ;
@@ -1257,7 +1258,8 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom)
1257
1258
input_report_abs (pen_input , ABS_X , get_unaligned_le16 (& frame [1 ]));
1258
1259
input_report_abs (pen_input , ABS_Y , get_unaligned_le16 (& frame [3 ]));
1259
1260
1260
- if (wacom -> features .type == INTUOSP2_BT ) {
1261
+ if (wacom -> features .type == INTUOSP2_BT ||
1262
+ wacom -> features .type == INTUOSP2S_BT ) {
1261
1263
/* Fix rotation alignment: userspace expects zero at left */
1262
1264
int16_t rotation =
1263
1265
(int16_t )get_unaligned_le16 (& frame [9 ]);
@@ -1276,7 +1278,8 @@ static void wacom_intuos_pro2_bt_pen(struct wacom_wac *wacom)
1276
1278
}
1277
1279
}
1278
1280
input_report_abs (pen_input , ABS_PRESSURE , get_unaligned_le16 (& frame [5 ]));
1279
- if (wacom -> features .type == INTUOSP2_BT ) {
1281
+ if (wacom -> features .type == INTUOSP2_BT ||
1282
+ wacom -> features .type == INTUOSP2S_BT ) {
1280
1283
input_report_abs (pen_input , ABS_DISTANCE ,
1281
1284
range ? frame [13 ] : wacom -> features .distance_max );
1282
1285
} else {
@@ -1436,7 +1439,8 @@ static int wacom_intuos_pro2_bt_irq(struct wacom_wac *wacom, size_t len)
1436
1439
}
1437
1440
1438
1441
wacom_intuos_pro2_bt_pen (wacom );
1439
- if (wacom -> features .type == INTUOSP2_BT ) {
1442
+ if (wacom -> features .type == INTUOSP2_BT ||
1443
+ wacom -> features .type == INTUOSP2S_BT ) {
1440
1444
wacom_intuos_pro2_bt_touch (wacom );
1441
1445
wacom_intuos_pro2_bt_pad (wacom );
1442
1446
wacom_intuos_pro2_bt_battery (wacom );
@@ -3204,6 +3208,7 @@ void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len)
3204
3208
break ;
3205
3209
3206
3210
case INTUOSP2_BT :
3211
+ case INTUOSP2S_BT :
3207
3212
case INTUOSHT3_BT :
3208
3213
sync = wacom_intuos_pro2_bt_irq (wacom_wac , len );
3209
3214
break ;
@@ -3384,7 +3389,8 @@ void wacom_setup_device_quirks(struct wacom *wacom)
3384
3389
if (features -> type == REMOTE )
3385
3390
features -> device_type = WACOM_DEVICETYPE_PAD ;
3386
3391
3387
- if (features -> type == INTUOSP2_BT ) {
3392
+ if (features -> type == INTUOSP2_BT ||
3393
+ features -> type == INTUOSP2S_BT ) {
3388
3394
features -> device_type |= WACOM_DEVICETYPE_PEN |
3389
3395
WACOM_DEVICETYPE_PAD |
3390
3396
WACOM_DEVICETYPE_TOUCH ;
@@ -3565,6 +3571,7 @@ int wacom_setup_pen_input_capabilities(struct input_dev *input_dev,
3565
3571
case INTUOS5S :
3566
3572
case INTUOSPS :
3567
3573
case INTUOSP2_BT :
3574
+ case INTUOSP2S_BT :
3568
3575
input_set_abs_params (input_dev , ABS_DISTANCE , 0 ,
3569
3576
features -> distance_max ,
3570
3577
features -> distance_fuzz , 0 );
@@ -3676,6 +3683,7 @@ int wacom_setup_touch_input_capabilities(struct input_dev *input_dev,
3676
3683
3677
3684
switch (features -> type ) {
3678
3685
case INTUOSP2_BT :
3686
+ case INTUOSP2S_BT :
3679
3687
input_dev -> evbit [0 ] |= BIT_MASK (EV_SW );
3680
3688
__set_bit (SW_MUTE_DEVICE , input_dev -> swbit );
3681
3689
@@ -3691,6 +3699,12 @@ int wacom_setup_touch_input_capabilities(struct input_dev *input_dev,
3691
3699
input_set_abs_params (input_dev , ABS_MT_POSITION_Y ,
3692
3700
0 , 5920 , 4 , 0 );
3693
3701
}
3702
+ else if (wacom_wac -> shared -> touch -> product == 0x393 ) {
3703
+ input_set_abs_params (input_dev , ABS_MT_POSITION_X ,
3704
+ 0 , 6400 , 4 , 0 );
3705
+ input_set_abs_params (input_dev , ABS_MT_POSITION_Y ,
3706
+ 0 , 4000 , 4 , 0 );
3707
+ }
3694
3708
input_abs_set_res (input_dev , ABS_MT_POSITION_X , 40 );
3695
3709
input_abs_set_res (input_dev , ABS_MT_POSITION_Y , 40 );
3696
3710
@@ -3997,6 +4011,7 @@ int wacom_setup_pad_input_capabilities(struct input_dev *input_dev,
3997
4011
case INTUOS5S :
3998
4012
case INTUOSPS :
3999
4013
case INTUOSP2_BT :
4014
+ case INTUOSP2S_BT :
4000
4015
input_set_abs_params (input_dev , ABS_WHEEL , 0 , 71 , 0 , 0 );
4001
4016
break ;
4002
4017
@@ -4574,6 +4589,10 @@ static const struct wacom_features wacom_features_0x37A =
4574
4589
static const struct wacom_features wacom_features_0x37B =
4575
4590
{ "Wacom One by Wacom M" , 21600 , 13500 , 2047 , 63 ,
4576
4591
BAMBOO_PEN , WACOM_INTUOS_RES , WACOM_INTUOS_RES };
4592
+ static const struct wacom_features wacom_features_0x393 =
4593
+ { "Wacom Intuos Pro S" , 31920 , 19950 , 8191 , 63 ,
4594
+ INTUOSP2S_BT , WACOM_INTUOS3_RES , WACOM_INTUOS3_RES , 7 ,
4595
+ .touch_max = 10 };
4577
4596
4578
4597
static const struct wacom_features wacom_features_HID_ANY_ID =
4579
4598
{ "Wacom HID" , .type = HID_GENERIC , .oVid = HID_ANY_ID , .oPid = HID_ANY_ID };
@@ -4746,6 +4765,7 @@ const struct hid_device_id wacom_ids[] = {
4746
4765
{ BT_DEVICE_WACOM (0x379 ) },
4747
4766
{ USB_DEVICE_WACOM (0x37A ) },
4748
4767
{ USB_DEVICE_WACOM (0x37B ) },
4768
+ { BT_DEVICE_WACOM (0x393 ) },
4749
4769
{ USB_DEVICE_WACOM (0x4001 ) },
4750
4770
{ USB_DEVICE_WACOM (0x4004 ) },
4751
4771
{ USB_DEVICE_WACOM (0x5000 ) },
0 commit comments