Merge branch 'upstream-fixes' into for-linus
Conflicts: drivers/hid/hid-wacom.chifive-unleashed-5.1
commit
f6f1242784
|
@ -405,6 +405,13 @@ static void magicmouse_setup_input(struct input_dev *input, struct hid_device *h
|
||||||
__set_bit(REL_HWHEEL, input->relbit);
|
__set_bit(REL_HWHEEL, input->relbit);
|
||||||
}
|
}
|
||||||
} else { /* USB_DEVICE_ID_APPLE_MAGICTRACKPAD */
|
} else { /* USB_DEVICE_ID_APPLE_MAGICTRACKPAD */
|
||||||
|
/* input->keybit is initialized with incorrect button info
|
||||||
|
* for Magic Trackpad. There really is only one physical
|
||||||
|
* button (BTN_LEFT == BTN_MOUSE). Make sure we don't
|
||||||
|
* advertise buttons that don't exist...
|
||||||
|
*/
|
||||||
|
__clear_bit(BTN_RIGHT, input->keybit);
|
||||||
|
__clear_bit(BTN_MIDDLE, input->keybit);
|
||||||
__set_bit(BTN_MOUSE, input->keybit);
|
__set_bit(BTN_MOUSE, input->keybit);
|
||||||
__set_bit(BTN_TOOL_FINGER, input->keybit);
|
__set_bit(BTN_TOOL_FINGER, input->keybit);
|
||||||
__set_bit(BTN_TOOL_DOUBLETAP, input->keybit);
|
__set_bit(BTN_TOOL_DOUBLETAP, input->keybit);
|
||||||
|
|
|
@ -304,11 +304,51 @@ static int wacom_raw_event(struct hid_device *hdev, struct hid_report *report,
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int wacom_input_mapped(struct hid_device *hdev, struct hid_input *hi,
|
||||||
|
struct hid_field *field, struct hid_usage *usage, unsigned long **bit,
|
||||||
|
int *max)
|
||||||
|
{
|
||||||
|
struct input_dev *input = hi->input;
|
||||||
|
|
||||||
|
__set_bit(INPUT_PROP_POINTER, input->propbit);
|
||||||
|
|
||||||
|
/* Basics */
|
||||||
|
input->evbit[0] |= BIT(EV_KEY) | BIT(EV_ABS) | BIT(EV_REL);
|
||||||
|
|
||||||
|
__set_bit(REL_WHEEL, input->relbit);
|
||||||
|
|
||||||
|
__set_bit(BTN_TOOL_PEN, input->keybit);
|
||||||
|
__set_bit(BTN_TOUCH, input->keybit);
|
||||||
|
__set_bit(BTN_STYLUS, input->keybit);
|
||||||
|
__set_bit(BTN_STYLUS2, input->keybit);
|
||||||
|
__set_bit(BTN_LEFT, input->keybit);
|
||||||
|
__set_bit(BTN_RIGHT, input->keybit);
|
||||||
|
__set_bit(BTN_MIDDLE, input->keybit);
|
||||||
|
|
||||||
|
/* Pad */
|
||||||
|
input->evbit[0] |= BIT(EV_MSC);
|
||||||
|
|
||||||
|
__set_bit(MSC_SERIAL, input->mscbit);
|
||||||
|
|
||||||
|
__set_bit(BTN_0, input->keybit);
|
||||||
|
__set_bit(BTN_1, input->keybit);
|
||||||
|
__set_bit(BTN_TOOL_FINGER, input->keybit);
|
||||||
|
|
||||||
|
/* Distance, rubber and mouse */
|
||||||
|
__set_bit(BTN_TOOL_RUBBER, input->keybit);
|
||||||
|
__set_bit(BTN_TOOL_MOUSE, input->keybit);
|
||||||
|
|
||||||
|
input_set_abs_params(input, ABS_X, 0, 16704, 4, 0);
|
||||||
|
input_set_abs_params(input, ABS_Y, 0, 12064, 4, 0);
|
||||||
|
input_set_abs_params(input, ABS_PRESSURE, 0, 511, 0, 0);
|
||||||
|
input_set_abs_params(input, ABS_DISTANCE, 0, 32, 0, 0);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int wacom_probe(struct hid_device *hdev,
|
static int wacom_probe(struct hid_device *hdev,
|
||||||
const struct hid_device_id *id)
|
const struct hid_device_id *id)
|
||||||
{
|
{
|
||||||
struct hid_input *hidinput;
|
|
||||||
struct input_dev *input;
|
|
||||||
struct wacom_data *wdata;
|
struct wacom_data *wdata;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -370,42 +410,6 @@ static int wacom_probe(struct hid_device *hdev,
|
||||||
goto err_ac;
|
goto err_ac;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
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);
|
|
||||||
|
|
||||||
__set_bit(REL_WHEEL, input->relbit);
|
|
||||||
|
|
||||||
__set_bit(BTN_TOOL_PEN, input->keybit);
|
|
||||||
__set_bit(BTN_TOUCH, input->keybit);
|
|
||||||
__set_bit(BTN_STYLUS, input->keybit);
|
|
||||||
__set_bit(BTN_STYLUS2, input->keybit);
|
|
||||||
__set_bit(BTN_LEFT, input->keybit);
|
|
||||||
__set_bit(BTN_RIGHT, input->keybit);
|
|
||||||
__set_bit(BTN_MIDDLE, input->keybit);
|
|
||||||
|
|
||||||
/* Pad */
|
|
||||||
input->evbit[0] |= BIT(EV_MSC);
|
|
||||||
|
|
||||||
__set_bit(MSC_SERIAL, input->mscbit);
|
|
||||||
|
|
||||||
__set_bit(BTN_0, input->keybit);
|
|
||||||
__set_bit(BTN_1, input->keybit);
|
|
||||||
__set_bit(BTN_TOOL_FINGER, input->keybit);
|
|
||||||
|
|
||||||
/* Distance, rubber and mouse */
|
|
||||||
__set_bit(BTN_TOOL_RUBBER, input->keybit);
|
|
||||||
__set_bit(BTN_TOOL_MOUSE, input->keybit);
|
|
||||||
|
|
||||||
input_set_abs_params(input, ABS_X, 0, 16704, 4, 0);
|
|
||||||
input_set_abs_params(input, ABS_Y, 0, 12064, 4, 0);
|
|
||||||
input_set_abs_params(input, ABS_PRESSURE, 0, 511, 0, 0);
|
|
||||||
input_set_abs_params(input, ABS_DISTANCE, 0, 32, 0, 0);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
#ifdef CONFIG_HID_WACOM_POWER_SUPPLY
|
#ifdef CONFIG_HID_WACOM_POWER_SUPPLY
|
||||||
|
@ -448,6 +452,7 @@ static struct hid_driver wacom_driver = {
|
||||||
.probe = wacom_probe,
|
.probe = wacom_probe,
|
||||||
.remove = wacom_remove,
|
.remove = wacom_remove,
|
||||||
.raw_event = wacom_raw_event,
|
.raw_event = wacom_raw_event,
|
||||||
|
.input_mapped = wacom_input_mapped,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init wacom_init(void)
|
static int __init wacom_init(void)
|
||||||
|
|
|
@ -272,8 +272,10 @@ static int hidraw_open(struct inode *inode, struct file *file)
|
||||||
dev = hidraw_table[minor];
|
dev = hidraw_table[minor];
|
||||||
if (!dev->open++) {
|
if (!dev->open++) {
|
||||||
err = hid_hw_power(dev->hid, PM_HINT_FULLON);
|
err = hid_hw_power(dev->hid, PM_HINT_FULLON);
|
||||||
if (err < 0)
|
if (err < 0) {
|
||||||
|
dev->open--;
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
|
}
|
||||||
|
|
||||||
err = hid_hw_open(dev->hid);
|
err = hid_hw_open(dev->hid);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
|
@ -510,13 +512,12 @@ void hidraw_disconnect(struct hid_device *hid)
|
||||||
{
|
{
|
||||||
struct hidraw *hidraw = hid->hidraw;
|
struct hidraw *hidraw = hid->hidraw;
|
||||||
|
|
||||||
|
mutex_lock(&minors_lock);
|
||||||
hidraw->exist = 0;
|
hidraw->exist = 0;
|
||||||
|
|
||||||
device_destroy(hidraw_class, MKDEV(hidraw_major, hidraw->minor));
|
device_destroy(hidraw_class, MKDEV(hidraw_major, hidraw->minor));
|
||||||
|
|
||||||
mutex_lock(&minors_lock);
|
|
||||||
hidraw_table[hidraw->minor] = NULL;
|
hidraw_table[hidraw->minor] = NULL;
|
||||||
mutex_unlock(&minors_lock);
|
|
||||||
|
|
||||||
if (hidraw->open) {
|
if (hidraw->open) {
|
||||||
hid_hw_close(hid);
|
hid_hw_close(hid);
|
||||||
|
@ -524,6 +525,7 @@ void hidraw_disconnect(struct hid_device *hid)
|
||||||
} else {
|
} else {
|
||||||
kfree(hidraw);
|
kfree(hidraw);
|
||||||
}
|
}
|
||||||
|
mutex_unlock(&minors_lock);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(hidraw_disconnect);
|
EXPORT_SYMBOL_GPL(hidraw_disconnect);
|
||||||
|
|
||||||
|
|
|
@ -1270,7 +1270,7 @@ static void hid_cancel_delayed_stuff(struct usbhid_device *usbhid)
|
||||||
|
|
||||||
static void hid_cease_io(struct usbhid_device *usbhid)
|
static void hid_cease_io(struct usbhid_device *usbhid)
|
||||||
{
|
{
|
||||||
del_timer(&usbhid->io_retry);
|
del_timer_sync(&usbhid->io_retry);
|
||||||
usb_kill_urb(usbhid->urbin);
|
usb_kill_urb(usbhid->urbin);
|
||||||
usb_kill_urb(usbhid->urbctrl);
|
usb_kill_urb(usbhid->urbctrl);
|
||||||
usb_kill_urb(usbhid->urbout);
|
usb_kill_urb(usbhid->urbout);
|
||||||
|
|
|
@ -641,6 +641,8 @@ static long hiddev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||||
struct usb_device *dev = hid_to_usb_dev(hid);
|
struct usb_device *dev = hid_to_usb_dev(hid);
|
||||||
struct usbhid_device *usbhid = hid->driver_data;
|
struct usbhid_device *usbhid = hid->driver_data;
|
||||||
|
|
||||||
|
memset(&dinfo, 0, sizeof(dinfo));
|
||||||
|
|
||||||
dinfo.bustype = BUS_USB;
|
dinfo.bustype = BUS_USB;
|
||||||
dinfo.busnum = dev->bus->busnum;
|
dinfo.busnum = dev->bus->busnum;
|
||||||
dinfo.devnum = dev->devnum;
|
dinfo.devnum = dev->devnum;
|
||||||
|
|
Loading…
Reference in New Issue