Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f6f12427 authored by Jiri Kosina's avatar Jiri Kosina
Browse files

Merge branch 'upstream-fixes' into for-linus

Conflicts:
	drivers/hid/hid-wacom.c
parents b0eae38c bca62142
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -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);
+43 −38
Original line number Original line Diff line number Diff line
@@ -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)
+5 −3
Original line number Original line Diff line number Diff line
@@ -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);


+1 −1
Original line number Original line Diff line number Diff line
@@ -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);
+2 −0
Original line number Original line Diff line number Diff line
@@ -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;