Merge branch 'for-linus' of git://github.com/dtor/input
* 'for-linus' of git://github.com/dtor/input: Input: wacom - fix touch parsing on newer Bamboos Input: bcm5974 - add MacBookAir4,1 trackpad support Input: wacom - add POINTER and DIRECT device properties Input: adp5588-keys - remove incorrect modalias Input: cm109 - fix checking return value of usb_control_msg Input: wacom - advertise BTN_TOOL_PEN and BTN_STYLUS for PenPartner Input: wacom - remove pressure for touch devices
This commit is contained in:
commit
279b1e0fd9
7 changed files with 60 additions and 26 deletions
|
@ -373,6 +373,8 @@ static int wacom_probe(struct hid_device *hdev,
|
|||
hidinput = list_entry(hdev->inputs.next, struct hid_input, list);
|
||||
input = hidinput->input;
|
||||
|
||||
__set_bit(INPUT_PROP_POINTER, input->propbit);
|
||||
|
||||
/* Basics */
|
||||
input->evbit[0] |= BIT(EV_KEY) | BIT(EV_ABS) | BIT(EV_REL);
|
||||
|
||||
|
|
|
@ -668,4 +668,3 @@ module_exit(adp5588_exit);
|
|||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
|
||||
MODULE_DESCRIPTION("ADP5588/87 Keypad driver");
|
||||
MODULE_ALIAS("platform:adp5588-keys");
|
||||
|
|
|
@ -475,7 +475,7 @@ static void cm109_toggle_buzzer_sync(struct cm109_dev *dev, int on)
|
|||
le16_to_cpu(dev->ctl_req->wIndex),
|
||||
dev->ctl_data,
|
||||
USB_PKT_LEN, USB_CTRL_SET_TIMEOUT);
|
||||
if (error && error != EINTR)
|
||||
if (error < 0 && error != -EINTR)
|
||||
err("%s: usb_control_msg() failed %d", __func__, error);
|
||||
}
|
||||
|
||||
|
|
|
@ -67,6 +67,10 @@
|
|||
#define USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI 0x0245
|
||||
#define USB_DEVICE_ID_APPLE_WELLSPRING5_ISO 0x0246
|
||||
#define USB_DEVICE_ID_APPLE_WELLSPRING5_JIS 0x0247
|
||||
/* MacbookAir4,1 (unibody, July 2011) */
|
||||
#define USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI 0x0249
|
||||
#define USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO 0x024a
|
||||
#define USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS 0x024b
|
||||
/* MacbookAir4,2 (unibody, July 2011) */
|
||||
#define USB_DEVICE_ID_APPLE_WELLSPRING6_ANSI 0x024c
|
||||
#define USB_DEVICE_ID_APPLE_WELLSPRING6_ISO 0x024d
|
||||
|
@ -112,6 +116,10 @@ static const struct usb_device_id bcm5974_table[] = {
|
|||
BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI),
|
||||
BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING5_ISO),
|
||||
BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING5_JIS),
|
||||
/* MacbookAir4,1 */
|
||||
BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI),
|
||||
BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO),
|
||||
BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS),
|
||||
/* MacbookAir4,2 */
|
||||
BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING6_ANSI),
|
||||
BCM5974_DEVICE(USB_DEVICE_ID_APPLE_WELLSPRING6_ISO),
|
||||
|
@ -334,6 +342,18 @@ static const struct bcm5974_config bcm5974_config_table[] = {
|
|||
{ DIM_X, DIM_X / SN_COORD, -4750, 5280 },
|
||||
{ DIM_Y, DIM_Y / SN_COORD, -150, 6730 }
|
||||
},
|
||||
{
|
||||
USB_DEVICE_ID_APPLE_WELLSPRING6A_ANSI,
|
||||
USB_DEVICE_ID_APPLE_WELLSPRING6A_ISO,
|
||||
USB_DEVICE_ID_APPLE_WELLSPRING6A_JIS,
|
||||
HAS_INTEGRATED_BUTTON,
|
||||
0x84, sizeof(struct bt_data),
|
||||
0x81, TYPE2, FINGER_TYPE2, FINGER_TYPE2 + SIZEOF_ALL_FINGERS,
|
||||
{ DIM_PRESSURE, DIM_PRESSURE / SN_PRESSURE, 0, 300 },
|
||||
{ DIM_WIDTH, DIM_WIDTH / SN_WIDTH, 0, 2048 },
|
||||
{ DIM_X, DIM_X / SN_COORD, -4620, 5140 },
|
||||
{ DIM_Y, DIM_Y / SN_COORD, -150, 6600 }
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
|
|
|
@ -229,13 +229,6 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi
|
|||
get_unaligned_le16(&report[i + 3]);
|
||||
i += 4;
|
||||
}
|
||||
} else if (usage == WCM_DIGITIZER) {
|
||||
/* max pressure isn't reported
|
||||
features->pressure_max = (unsigned short)
|
||||
(report[i+4] << 8 | report[i + 3]);
|
||||
*/
|
||||
features->pressure_max = 255;
|
||||
i += 4;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -291,13 +284,6 @@ static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hi
|
|||
pen = 1;
|
||||
i++;
|
||||
break;
|
||||
|
||||
case HID_USAGE_UNDEFINED:
|
||||
if (usage == WCM_DESKTOP && finger) /* capacity */
|
||||
features->pressure_max =
|
||||
get_unaligned_le16(&report[i + 3]);
|
||||
i += 4;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -800,25 +800,26 @@ static int wacom_bpt_touch(struct wacom_wac *wacom)
|
|||
int i;
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
int p = data[9 * i + 2];
|
||||
bool touch = p && !wacom->shared->stylus_in_proximity;
|
||||
int offset = (data[1] & 0x80) ? (8 * i) : (9 * i);
|
||||
bool touch = data[offset + 3] & 0x80;
|
||||
|
||||
input_mt_slot(input, i);
|
||||
input_mt_report_slot_state(input, MT_TOOL_FINGER, touch);
|
||||
/*
|
||||
* Touch events need to be disabled while stylus is
|
||||
* in proximity because user's hand is resting on touchpad
|
||||
* and sending unwanted events. User expects tablet buttons
|
||||
* to continue working though.
|
||||
*/
|
||||
touch = touch && !wacom->shared->stylus_in_proximity;
|
||||
|
||||
input_mt_slot(input, i);
|
||||
input_mt_report_slot_state(input, MT_TOOL_FINGER, touch);
|
||||
if (touch) {
|
||||
int x = get_unaligned_be16(&data[9 * i + 3]) & 0x7ff;
|
||||
int y = get_unaligned_be16(&data[9 * i + 5]) & 0x7ff;
|
||||
int x = get_unaligned_be16(&data[offset + 3]) & 0x7ff;
|
||||
int y = get_unaligned_be16(&data[offset + 5]) & 0x7ff;
|
||||
if (features->quirks & WACOM_QUIRK_BBTOUCH_LOWRES) {
|
||||
x <<= 5;
|
||||
y <<= 5;
|
||||
}
|
||||
input_report_abs(input, ABS_MT_PRESSURE, p);
|
||||
input_report_abs(input, ABS_MT_POSITION_X, x);
|
||||
input_report_abs(input, ABS_MT_POSITION_Y, y);
|
||||
}
|
||||
|
@ -1056,10 +1057,11 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
|||
features->x_fuzz, 0);
|
||||
input_set_abs_params(input_dev, ABS_Y, 0, features->y_max,
|
||||
features->y_fuzz, 0);
|
||||
input_set_abs_params(input_dev, ABS_PRESSURE, 0, features->pressure_max,
|
||||
features->pressure_fuzz, 0);
|
||||
|
||||
if (features->device_type == BTN_TOOL_PEN) {
|
||||
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);
|
||||
|
@ -1098,6 +1100,8 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
|||
__set_bit(BTN_TOOL_MOUSE, input_dev->keybit);
|
||||
__set_bit(BTN_STYLUS, input_dev->keybit);
|
||||
__set_bit(BTN_STYLUS2, input_dev->keybit);
|
||||
|
||||
__set_bit(INPUT_PROP_POINTER, input_dev->propbit);
|
||||
break;
|
||||
|
||||
case WACOM_21UX2:
|
||||
|
@ -1126,6 +1130,9 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
|||
}
|
||||
|
||||
input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
|
||||
|
||||
__set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
|
||||
|
||||
wacom_setup_cintiq(wacom_wac);
|
||||
break;
|
||||
|
||||
|
@ -1150,6 +1157,8 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
|||
/* fall through */
|
||||
|
||||
case INTUOS:
|
||||
__set_bit(INPUT_PROP_POINTER, input_dev->propbit);
|
||||
|
||||
wacom_setup_intuos(wacom_wac);
|
||||
break;
|
||||
|
||||
|
@ -1165,6 +1174,8 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
|||
|
||||
input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
|
||||
wacom_setup_intuos(wacom_wac);
|
||||
|
||||
__set_bit(INPUT_PROP_POINTER, input_dev->propbit);
|
||||
break;
|
||||
|
||||
case TABLETPC2FG:
|
||||
|
@ -1183,26 +1194,40 @@ void wacom_setup_input_capabilities(struct input_dev *input_dev,
|
|||
case TABLETPC:
|
||||
__clear_bit(ABS_MISC, input_dev->absbit);
|
||||
|
||||
__set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
|
||||
|
||||
if (features->device_type != BTN_TOOL_PEN)
|
||||
break; /* no need to process stylus stuff */
|
||||
|
||||
/* fall through */
|
||||
|
||||
case PL:
|
||||
case PTU:
|
||||
case DTU:
|
||||
__set_bit(BTN_TOOL_PEN, input_dev->keybit);
|
||||
__set_bit(BTN_TOOL_RUBBER, input_dev->keybit);
|
||||
__set_bit(BTN_STYLUS, input_dev->keybit);
|
||||
__set_bit(BTN_STYLUS2, input_dev->keybit);
|
||||
|
||||
__set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
|
||||
break;
|
||||
|
||||
case PTU:
|
||||
__set_bit(BTN_STYLUS2, input_dev->keybit);
|
||||
/* fall through */
|
||||
|
||||
case PENPARTNER:
|
||||
__set_bit(BTN_TOOL_PEN, input_dev->keybit);
|
||||
__set_bit(BTN_TOOL_RUBBER, input_dev->keybit);
|
||||
__set_bit(BTN_STYLUS, input_dev->keybit);
|
||||
|
||||
__set_bit(INPUT_PROP_POINTER, input_dev->propbit);
|
||||
break;
|
||||
|
||||
case BAMBOO_PT:
|
||||
__clear_bit(ABS_MISC, input_dev->absbit);
|
||||
|
||||
__set_bit(INPUT_PROP_POINTER, input_dev->propbit);
|
||||
|
||||
if (features->device_type == BTN_TOOL_DOUBLETAP) {
|
||||
__set_bit(BTN_LEFT, input_dev->keybit);
|
||||
__set_bit(BTN_FORWARD, input_dev->keybit);
|
||||
|
|
|
@ -383,6 +383,8 @@ static int w8001_setup(struct w8001 *w8001)
|
|||
dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
|
||||
strlcat(w8001->name, "Wacom Serial", sizeof(w8001->name));
|
||||
|
||||
__set_bit(INPUT_PROP_DIRECT, dev->propbit);
|
||||
|
||||
/* penabled? */
|
||||
error = w8001_command(w8001, W8001_CMD_QUERY, true);
|
||||
if (!error) {
|
||||
|
|
Loading…
Reference in a new issue