Commit 63151703 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input

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
...@@ -1431,6 +1431,9 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id ...@@ -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))
......
...@@ -157,11 +157,11 @@ static int rmi_function_match(struct device *dev, struct device_driver *drv) ...@@ -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)
......
...@@ -118,6 +118,13 @@ static int ts4800_parse_dt(struct platform_device *pdev, ...@@ -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, ...@@ -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;
} }
......
...@@ -155,6 +155,7 @@ static void parse_multi_touch(struct w8001 *w8001) ...@@ -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, ...@@ -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)
......
...@@ -780,6 +780,7 @@ ...@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment