HID: wacom - Bamboo pen-only tablet does not support PAD
Bamboo models do not support HID_DG_CONTACTMAX. Plus, Bamboo pen-only has touch descriptor. This leads to some complications in the code. This patch also fixes duplicated PAD interfeaces for Intuos Pen models. Signed-off-by: Ping Cheng <pingc@wacom.com> Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
97edcad813
commit
30ebc1aea8
3 changed files with 23 additions and 13 deletions
|
@ -140,7 +140,7 @@ extern const struct hid_device_id wacom_ids[];
|
|||
|
||||
void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len);
|
||||
void wacom_setup_device_quirks(struct wacom_features *features);
|
||||
int wacom_setup_input_capabilities(struct input_dev *input_dev,
|
||||
int wacom_setup_pentouch_input_capabilities(struct input_dev *input_dev,
|
||||
struct wacom_wac *wacom_wac);
|
||||
int wacom_setup_pad_input_capabilities(struct input_dev *input_dev,
|
||||
struct wacom_wac *wacom_wac);
|
||||
|
|
|
@ -192,9 +192,15 @@ static void wacom_usage_mapping(struct hid_device *hdev,
|
|||
if (!pen && !finger)
|
||||
return;
|
||||
|
||||
if (finger && !features->touch_max)
|
||||
/* touch device at least supports one touch point */
|
||||
features->touch_max = 1;
|
||||
/*
|
||||
* Bamboo models do not support HID_DG_CONTACTMAX.
|
||||
* And, Bamboo Pen only descriptor contains touch.
|
||||
*/
|
||||
if (features->type != BAMBOO_PT) {
|
||||
/* ISDv4 touch devices at least supports one touch point */
|
||||
if (finger && !features->touch_max)
|
||||
features->touch_max = 1;
|
||||
}
|
||||
|
||||
switch (usage->hid) {
|
||||
case HID_GD_X:
|
||||
|
@ -1151,13 +1157,12 @@ static int wacom_register_inputs(struct wacom *wacom)
|
|||
if (!input_dev || !pad_input_dev)
|
||||
return -EINVAL;
|
||||
|
||||
error = wacom_setup_input_capabilities(input_dev, wacom_wac);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
error = input_register_device(input_dev);
|
||||
if (error)
|
||||
return error;
|
||||
error = wacom_setup_pentouch_input_capabilities(input_dev, wacom_wac);
|
||||
if (!error) {
|
||||
error = input_register_device(input_dev);
|
||||
if (error)
|
||||
return error;
|
||||
}
|
||||
|
||||
error = wacom_setup_pad_input_capabilities(pad_input_dev, wacom_wac);
|
||||
if (error) {
|
||||
|
|
|
@ -2032,7 +2032,7 @@ static void wacom_abs_set_axis(struct input_dev *input_dev,
|
|||
}
|
||||
}
|
||||
|
||||
int wacom_setup_input_capabilities(struct input_dev *input_dev,
|
||||
int wacom_setup_pentouch_input_capabilities(struct input_dev *input_dev,
|
||||
struct wacom_wac *wacom_wac)
|
||||
{
|
||||
struct wacom_features *features = &wacom_wac->features;
|
||||
|
@ -2246,6 +2246,9 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev,
|
|||
__clear_bit(ABS_X, input_dev->absbit);
|
||||
__clear_bit(ABS_Y, input_dev->absbit);
|
||||
__clear_bit(BTN_TOUCH, input_dev->keybit);
|
||||
|
||||
/* PAD is setup by wacom_setup_pad_input_capabilities later */
|
||||
return 1;
|
||||
}
|
||||
} else if (features->device_type == BTN_TOOL_PEN) {
|
||||
__set_bit(INPUT_PROP_POINTER, input_dev->propbit);
|
||||
|
@ -2444,7 +2447,9 @@ int wacom_setup_pad_input_capabilities(struct input_dev *input_dev,
|
|||
case INTUOSHT:
|
||||
case BAMBOO_PT:
|
||||
/* pad device is on the touch interface */
|
||||
if (features->device_type != BTN_TOOL_FINGER)
|
||||
if ((features->device_type != BTN_TOOL_FINGER) ||
|
||||
/* Bamboo Pen only tablet does not have pad */
|
||||
((features->type == BAMBOO_PT) && !features->touch_max))
|
||||
return -ENODEV;
|
||||
|
||||
__clear_bit(ABS_MISC, input_dev->absbit);
|
||||
|
|
Loading…
Reference in a new issue