@ -2237,54 +2237,16 @@ void wacom_setup_device_quirks(struct wacom *wacom)
}
}
static void wacom_abs_set_axis ( struct input_dev * input_dev ,
struct wacom_wac * wacom_wac )
{
struct wacom_features * features = & wacom_wac - > features ;
if ( features - > device_type & WACOM_DEVICETYPE_PEN ) {
input_set_abs_params ( input_dev , ABS_X , features - > x_min ,
features - > x_max , features - > x_fuzz , 0 ) ;
input_set_abs_params ( input_dev , ABS_Y , features - > y_min ,
features - > y_max , features - > y_fuzz , 0 ) ;
input_set_abs_params ( input_dev , ABS_PRESSURE , 0 ,
features - > pressure_max , features - > pressure_fuzz , 0 ) ;
/* penabled devices have fixed resolution for each model */
input_abs_set_res ( input_dev , ABS_X , features - > x_resolution ) ;
input_abs_set_res ( input_dev , ABS_Y , features - > y_resolution ) ;
} else if ( features - > device_type & WACOM_DEVICETYPE_TOUCH ) {
if ( features - > touch_max = = 1 ) {
input_set_abs_params ( input_dev , ABS_X , 0 ,
features - > x_max , features - > x_fuzz , 0 ) ;
input_set_abs_params ( input_dev , ABS_Y , 0 ,
features - > y_max , features - > y_fuzz , 0 ) ;
input_abs_set_res ( input_dev , ABS_X ,
features - > x_resolution ) ;
input_abs_set_res ( input_dev , ABS_Y ,
features - > y_resolution ) ;
}
if ( features - > touch_max > 1 ) {
input_set_abs_params ( input_dev , ABS_MT_POSITION_X , 0 ,
features - > x_max , features - > x_fuzz , 0 ) ;
input_set_abs_params ( input_dev , ABS_MT_POSITION_Y , 0 ,
features - > y_max , features - > y_fuzz , 0 ) ;
input_abs_set_res ( input_dev , ABS_MT_POSITION_X ,
features - > x_resolution ) ;
input_abs_set_res ( input_dev , ABS_MT_POSITION_Y ,
features - > y_resolution ) ;
}
}
}
int wacom_setup_pentouch_input_capabilities ( struct input_dev * input_dev ,
int wacom_setup_pen_input_capabilities ( struct input_dev * input_dev ,
struct wacom_wac * wacom_wac )
{
struct wacom_features * features = & wacom_wac - > features ;
input_dev - > evbit [ 0 ] | = BIT_MASK ( EV_KEY ) | BIT_MASK ( EV_ABS ) ;
if ( ! ( features - > device_type & WACOM_DEVICETYPE_PEN ) )
return - ENODEV ;
if ( features - > type = = HID_GENERIC )
/* setup has already been done */
return 0 ;
@ -2292,7 +2254,17 @@ int wacom_setup_pentouch_input_capabilities(struct input_dev *input_dev,
__set_bit ( BTN_TOUCH , input_dev - > keybit ) ;
__set_bit ( ABS_MISC , input_dev - > absbit ) ;
wacom_abs_set_axis ( input_dev , wacom_wac ) ;
input_set_abs_params ( input_dev , ABS_X , features - > x_min ,
features - > x_max , features - > x_fuzz , 0 ) ;
input_set_abs_params ( input_dev , ABS_Y , features - > y_min ,
features - > y_max , features - > y_fuzz , 0 ) ;
input_set_abs_params ( input_dev , ABS_PRESSURE , 0 ,
features - > pressure_max , features - > pressure_fuzz , 0 ) ;
/* penabled devices have fixed resolution for each model */
input_abs_set_res ( input_dev , ABS_X , features - > x_resolution ) ;
input_abs_set_res ( input_dev , ABS_Y , features - > y_resolution ) ;
switch ( features - > type ) {
case GRAPHIRE_BT :
@ -2361,53 +2333,25 @@ int wacom_setup_pentouch_input_capabilities(struct input_dev *input_dev,
case INTUOSPS :
__set_bit ( INPUT_PROP_POINTER , input_dev - > propbit ) ;
if ( features - > device_type & WACOM_DEVICETYPE_PEN ) {
input_set_abs_params ( input_dev , ABS_DISTANCE , 0 ,
features - > distance_max ,
0 , 0 ) ;
input_set_abs_params ( input_dev , ABS_Z , - 900 , 899 , 0 , 0 ) ;
input_abs_set_res ( input_dev , ABS_Z , 287 ) ;
input_set_abs_params ( input_dev , ABS_DISTANCE , 0 ,
features - > distance_max ,
0 , 0 ) ;
wacom_setup_intuos ( wacom_wac ) ;
} else if ( features - > device_type & WACOM_DEVICETYPE_TOUCH ) {
__clear_bit ( ABS_MISC , input_dev - > absbit ) ;
input_set_abs_params ( input_dev , ABS_Z , - 900 , 899 , 0 , 0 ) ;
input_abs_set_res ( input_dev , ABS_Z , 287 ) ;
input_set_abs_params ( input_dev , ABS_MT_TOUCH_MAJOR ,
0 , features - > x_max , 0 , 0 ) ;
input_set_abs_params ( input_dev , ABS_MT_TOUCH_MINOR ,
0 , features - > y_max , 0 , 0 ) ;
input_mt_init_slots ( input_dev , features - > touch_max , INPUT_MT_POINTER ) ;
}
wacom_setup_intuos ( wacom_wac ) ;
break ;
case WACOM_24HDT :
if ( features - > device_type & WACOM_DEVICETYPE_TOUCH ) {
input_set_abs_params ( input_dev , ABS_MT_TOUCH_MAJOR , 0 , features - > x_max , 0 , 0 ) ;
input_set_abs_params ( input_dev , ABS_MT_WIDTH_MAJOR , 0 , features - > x_max , 0 , 0 ) ;
input_set_abs_params ( input_dev , ABS_MT_WIDTH_MINOR , 0 , features - > y_max , 0 , 0 ) ;
input_set_abs_params ( input_dev , ABS_MT_ORIENTATION , 0 , 1 , 0 , 0 ) ;
}
/* fall through */
case WACOM_27QHDT :
case MTSCREEN :
case MTTPC :
case MTTPC_B :
case TABLETPC2FG :
if ( features - > device_type & WACOM_DEVICETYPE_TOUCH & & features - > touch_max > 1 )
input_mt_init_slots ( input_dev , features - > touch_max , INPUT_MT_DIRECT ) ;
/* fall through */
case TABLETPC :
case TABLETPCE :
__clear_bit ( ABS_MISC , input_dev - > absbit ) ;
__set_bit ( INPUT_PROP_DIRECT , input_dev - > propbit ) ;
if ( ! ( features - > device_type & WACOM_DEVICETYPE_PEN ) )
break ; /* no need to process stylus stuff */
/* fall through */
case DTUS :
@ -2435,48 +2379,114 @@ int wacom_setup_pentouch_input_capabilities(struct input_dev *input_dev,
break ;
case INTUOSHT :
if ( features - > device_type & WACOM_DEVICETYPE_TOUCH ) {
input_dev - > evbit [ 0 ] | = BIT_MASK ( EV_SW ) ;
__set_bit ( SW_MUTE_DEVICE , input_dev - > swbit ) ;
}
/* fall through */
case BAMBOO_PT :
__clear_bit ( ABS_MISC , input_dev - > absbit ) ;
if ( features - > device_type & WACOM_DEVICETYPE_TOUCH ) {
if ( features - > pktlen = = WACOM_PKGLEN_BBTOUCH3 ) {
input_set_abs_params ( input_dev ,
ABS_MT_TOUCH_MAJOR ,
0 , features - > x_max , 0 , 0 ) ;
input_set_abs_params ( input_dev ,
ABS_MT_TOUCH_MINOR ,
0 , features - > y_max , 0 , 0 ) ;
}
input_mt_init_slots ( input_dev , features - > touch_max , INPUT_MT_POINTER ) ;
}
if ( features - > device_type & WACOM_DEVICETYPE_PAD ) {
/* buttons/keys only interface */
__clear_bit ( ABS_X , input_dev - > absbit ) ;
__clear_bit ( ABS_Y , input_dev - > absbit ) ;
__clear_bit ( BTN_TOUCH , input_dev - > keybit ) ;
__set_bit ( INPUT_PROP_POINTER , input_dev - > propbit ) ;
__set_bit ( BTN_TOOL_RUBBER , input_dev - > keybit ) ;
__set_bit ( BTN_TOOL_PEN , input_dev - > keybit ) ;
__set_bit ( BTN_STYLUS , input_dev - > keybit ) ;
__set_bit ( BTN_STYLUS2 , input_dev - > keybit ) ;
input_set_abs_params ( input_dev , ABS_DISTANCE , 0 ,
features - > distance_max ,
0 , 0 ) ;
break ;
case BAMBOO_PAD :
__clear_bit ( ABS_MISC , input_dev - > absbit ) ;
break ;
}
return 0 ;
}
/* PAD is setup by wacom_setup_pad_input_capabilities later */
return 1 ;
}
if ( features - > device_type & WACOM_DEVICETYPE_PEN ) {
__set_bit ( INPUT_PROP_POINTER , input_dev - > propbit ) ;
__set_bit ( BTN_TOOL_RUBBER , input_dev - > keybit ) ;
__set_bit ( BTN_TOOL_PEN , input_dev - > keybit ) ;
__set_bit ( BTN_STYLUS , input_dev - > keybit ) ;
__set_bit ( BTN_STYLUS2 , input_dev - > keybit ) ;
input_set_abs_params ( input_dev , ABS_DISTANCE , 0 ,
features - > distance_max ,
0 , 0 ) ;
int wacom_setup_touch_input_capabilities ( struct input_dev * input_dev ,
struct wacom_wac * wacom_wac )
{
struct wacom_features * features = & wacom_wac - > features ;
input_dev - > evbit [ 0 ] | = BIT_MASK ( EV_KEY ) | BIT_MASK ( EV_ABS ) ;
if ( ! ( features - > device_type & WACOM_DEVICETYPE_TOUCH ) )
return - ENODEV ;
if ( features - > type = = HID_GENERIC )
/* setup has already been done */
return 0 ;
__set_bit ( BTN_TOUCH , input_dev - > keybit ) ;
if ( features - > touch_max = = 1 ) {
input_set_abs_params ( input_dev , ABS_X , 0 ,
features - > x_max , features - > x_fuzz , 0 ) ;
input_set_abs_params ( input_dev , ABS_Y , 0 ,
features - > y_max , features - > y_fuzz , 0 ) ;
input_abs_set_res ( input_dev , ABS_X ,
features - > x_resolution ) ;
input_abs_set_res ( input_dev , ABS_Y ,
features - > y_resolution ) ;
}
else if ( features - > touch_max > 1 ) {
input_set_abs_params ( input_dev , ABS_MT_POSITION_X , 0 ,
features - > x_max , features - > x_fuzz , 0 ) ;
input_set_abs_params ( input_dev , ABS_MT_POSITION_Y , 0 ,
features - > y_max , features - > y_fuzz , 0 ) ;
input_abs_set_res ( input_dev , ABS_MT_POSITION_X ,
features - > x_resolution ) ;
input_abs_set_res ( input_dev , ABS_MT_POSITION_Y ,
features - > y_resolution ) ;
}
switch ( features - > type ) {
case INTUOS5 :
case INTUOS5L :
case INTUOSPM :
case INTUOSPL :
case INTUOS5S :
case INTUOSPS :
__set_bit ( INPUT_PROP_POINTER , input_dev - > propbit ) ;
input_set_abs_params ( input_dev , ABS_MT_TOUCH_MAJOR , 0 , features - > x_max , 0 , 0 ) ;
input_set_abs_params ( input_dev , ABS_MT_TOUCH_MINOR , 0 , features - > y_max , 0 , 0 ) ;
input_mt_init_slots ( input_dev , features - > touch_max , INPUT_MT_POINTER ) ;
break ;
case WACOM_24HDT :
input_set_abs_params ( input_dev , ABS_MT_TOUCH_MAJOR , 0 , features - > x_max , 0 , 0 ) ;
input_set_abs_params ( input_dev , ABS_MT_WIDTH_MAJOR , 0 , features - > x_max , 0 , 0 ) ;
input_set_abs_params ( input_dev , ABS_MT_WIDTH_MINOR , 0 , features - > y_max , 0 , 0 ) ;
input_set_abs_params ( input_dev , ABS_MT_ORIENTATION , 0 , 1 , 0 , 0 ) ;
/* fall through */
case WACOM_27QHDT :
case MTSCREEN :
case MTTPC :
case MTTPC_B :
case TABLETPC2FG :
input_mt_init_slots ( input_dev , features - > touch_max , INPUT_MT_DIRECT ) ;
/*fall through */
case TABLETPC :
case TABLETPCE :
__set_bit ( INPUT_PROP_DIRECT , input_dev - > propbit ) ;
break ;
case INTUOSHT :
input_dev - > evbit [ 0 ] | = BIT_MASK ( EV_SW ) ;
__set_bit ( SW_MUTE_DEVICE , input_dev - > swbit ) ;
/* fall through */
case BAMBOO_PT :
if ( features - > pktlen = = WACOM_PKGLEN_BBTOUCH3 ) {
input_set_abs_params ( input_dev ,
ABS_MT_TOUCH_MAJOR ,
0 , features - > x_max , 0 , 0 ) ;
input_set_abs_params ( input_dev ,
ABS_MT_TOUCH_MINOR ,
0 , features - > y_max , 0 , 0 ) ;
}
input_mt_init_slots ( input_dev , features - > touch_max , INPUT_MT_POINTER ) ;
break ;
case BAMBOO_PAD :
__clear_bit ( ABS_MISC , input_dev - > absbit ) ;
input_mt_init_slots ( input_dev , features - > touch_max ,
INPUT_MT_POINTER ) ;
__set_bit ( BTN_LEFT , input_dev - > keybit ) ;