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

Commit 63151703 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull input fixes from Dmitry Torokhov:
 "A few last-minute updates for the input subsystem"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
  Input: ts4800-ts - add missing of_node_put after calling of_parse_phandle
  Input: synaptics-rmi4 - use of_get_child_by_name() to fix refcount
  Revert "Input: wacom_w8001 - drop use of ABS_MT_TOOL_TYPE"
  Input: xpad - validate USB endpoint count during probe
  Input: add SW_PEN_INSERTED define
parents 8dcf5a80 6a5029e6
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -1431,6 +1431,9 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
	int ep_irq_in_idx;
	int ep_irq_in_idx;
	int i, error;
	int i, error;


	if (intf->cur_altsetting->desc.bNumEndpoints != 2)
		return -ENODEV;

	for (i = 0; xpad_device[i].idVendor; i++) {
	for (i = 0; xpad_device[i].idVendor; i++) {
		if ((le16_to_cpu(udev->descriptor.idVendor) == xpad_device[i].idVendor) &&
		if ((le16_to_cpu(udev->descriptor.idVendor) == xpad_device[i].idVendor) &&
		    (le16_to_cpu(udev->descriptor.idProduct) == xpad_device[i].idProduct))
		    (le16_to_cpu(udev->descriptor.idProduct) == xpad_device[i].idProduct))
+2 −2
Original line number Original line Diff line number Diff line
@@ -157,11 +157,11 @@ static int rmi_function_match(struct device *dev, struct device_driver *drv)
static void rmi_function_of_probe(struct rmi_function *fn)
static void rmi_function_of_probe(struct rmi_function *fn)
{
{
	char of_name[9];
	char of_name[9];
	struct device_node *node = fn->rmi_dev->xport->dev->of_node;


	snprintf(of_name, sizeof(of_name), "rmi4-f%02x",
	snprintf(of_name, sizeof(of_name), "rmi4-f%02x",
		fn->fd.function_number);
		fn->fd.function_number);
	fn->dev.of_node = of_find_node_by_name(
	fn->dev.of_node = of_get_child_by_name(node, of_name);
				fn->rmi_dev->xport->dev->of_node, of_name);
}
}
#else
#else
static inline void rmi_function_of_probe(struct rmi_function *fn)
static inline void rmi_function_of_probe(struct rmi_function *fn)
+7 −6
Original line number Original line Diff line number Diff line
@@ -118,6 +118,13 @@ static int ts4800_parse_dt(struct platform_device *pdev,
		return -ENODEV;
		return -ENODEV;
	}
	}


	ts->regmap = syscon_node_to_regmap(syscon_np);
	of_node_put(syscon_np);
	if (IS_ERR(ts->regmap)) {
		dev_err(dev, "cannot get parent's regmap\n");
		return PTR_ERR(ts->regmap);
	}

	error = of_property_read_u32_index(np, "syscon", 1, &reg);
	error = of_property_read_u32_index(np, "syscon", 1, &reg);
	if (error < 0) {
	if (error < 0) {
		dev_err(dev, "no offset in syscon\n");
		dev_err(dev, "no offset in syscon\n");
@@ -134,12 +141,6 @@ static int ts4800_parse_dt(struct platform_device *pdev,


	ts->bit = BIT(bit);
	ts->bit = BIT(bit);


	ts->regmap = syscon_node_to_regmap(syscon_np);
	if (IS_ERR(ts->regmap)) {
		dev_err(dev, "cannot get parent's regmap\n");
		return PTR_ERR(ts->regmap);
	}

	return 0;
	return 0;
}
}


+3 −0
Original line number Original line Diff line number Diff line
@@ -155,6 +155,7 @@ static void parse_multi_touch(struct w8001 *w8001)
		bool touch = data[0] & (1 << i);
		bool touch = data[0] & (1 << i);


		input_mt_slot(dev, i);
		input_mt_slot(dev, i);
		input_mt_report_slot_state(dev, MT_TOOL_FINGER, touch);
		if (touch) {
		if (touch) {
			x = (data[6 * i + 1] << 7) | data[6 * i + 2];
			x = (data[6 * i + 1] << 7) | data[6 * i + 2];
			y = (data[6 * i + 3] << 7) | data[6 * i + 4];
			y = (data[6 * i + 3] << 7) | data[6 * i + 4];
@@ -522,6 +523,8 @@ static int w8001_setup_touch(struct w8001 *w8001, char *basename,
					0, touch.x, 0, 0);
					0, touch.x, 0, 0);
		input_set_abs_params(dev, ABS_MT_POSITION_Y,
		input_set_abs_params(dev, ABS_MT_POSITION_Y,
					0, touch.y, 0, 0);
					0, touch.y, 0, 0);
		input_set_abs_params(dev, ABS_MT_TOOL_TYPE,
					0, MT_TOOL_MAX, 0, 0);


		strlcat(basename, " 2FG", basename_sz);
		strlcat(basename, " 2FG", basename_sz);
		if (w8001->max_pen_x && w8001->max_pen_y)
		if (w8001->max_pen_x && w8001->max_pen_y)
+1 −0
Original line number Original line Diff line number Diff line
@@ -780,6 +780,7 @@
#define SW_ROTATE_LOCK		0x0c  /* set = rotate locked/disabled */
#define SW_ROTATE_LOCK		0x0c  /* set = rotate locked/disabled */
#define SW_LINEIN_INSERT	0x0d  /* set = inserted */
#define SW_LINEIN_INSERT	0x0d  /* set = inserted */
#define SW_MUTE_DEVICE		0x0e  /* set = device disabled */
#define SW_MUTE_DEVICE		0x0e  /* set = device disabled */
#define SW_PEN_INSERTED		0x0f  /* set = pen inserted */
#define SW_MAX			0x0f
#define SW_MAX			0x0f
#define SW_CNT			(SW_MAX+1)
#define SW_CNT			(SW_MAX+1)