Commit ed3f4e23 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 updates from Dmitry Torokhov:
 "Just random driver fixups, nothing exiting"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
  Input: synaptics - avoid using uninitialized variable when probing
  Input: xen-kbdfront - mark expected switch fall-through
  Input: atmel_mxt_ts - mark expected switch fall-through
  Input: cyapa - mark expected switch fall-throughs
  Input: wm97xx-ts - fix exit path
  Input: of_touchscreen - add support for touchscreen-min-x|y
  Input: Fix DIR-685 touchkeys MAINTAINERS entry
  Input: elants_i2c - use DMA safe i2c when possible
  Input: silead - try firmware reload after unsuccessful resume
  Input: st1232 - set INPUT_PROP_DIRECT property
  Input: xilinx_ps2 - convert to using %pOFn instead of device_node.name
  Input: atmel_mxt_ts - fix multiple <linux/property.h> includes
  Input: sun4i-lradc - convert to using %pOFn instead of device_node.name
  Input: pwm-vibrator - correct pwms in DT binding example
parents c7b7eefa cacd9759
...@@ -58,8 +58,8 @@ Example from Motorola Droid 4: ...@@ -58,8 +58,8 @@ Example from Motorola Droid 4:
vibrator { vibrator {
compatible = "pwm-vibrator"; compatible = "pwm-vibrator";
pwms = <&pwm8 0 1000000000 0>, pwms = <&pwm9 0 1000000000 0>,
<&pwm9 0 1000000000 0>; <&pwm8 0 1000000000 0>;
pwm-names = "enable", "direction"; pwm-names = "enable", "direction";
direction-duty-cycle-ns = <1000000000>; direction-duty-cycle-ns = <1000000000>;
}; };
......
General Touchscreen Properties: General Touchscreen Properties:
Optional properties for Touchscreens: Optional properties for Touchscreens:
- touchscreen-min-x : minimum x coordinate reported (0 if not set)
- touchscreen-min-y : minimum y coordinate reported (0 if not set)
- touchscreen-size-x : horizontal resolution of touchscreen - touchscreen-size-x : horizontal resolution of touchscreen
(in pixels) (maximum x coordinate reported + 1)
- touchscreen-size-y : vertical resolution of touchscreen - touchscreen-size-y : vertical resolution of touchscreen
(in pixels) (maximum y coordinate reported + 1)
- touchscreen-max-pressure : maximum reported pressure (arbitrary range - touchscreen-max-pressure : maximum reported pressure (arbitrary range
dependent on the controller) dependent on the controller)
- touchscreen-min-pressure : minimum pressure on the touchscreen to be - touchscreen-min-pressure : minimum pressure on the touchscreen to be
......
...@@ -4099,7 +4099,7 @@ D-LINK DIR-685 TOUCHKEYS DRIVER ...@@ -4099,7 +4099,7 @@ D-LINK DIR-685 TOUCHKEYS DRIVER
M: Linus Walleij <linus.walleij@linaro.org> M: Linus Walleij <linus.walleij@linaro.org>
L: linux-input@vger.kernel.org L: linux-input@vger.kernel.org
S: Supported S: Supported
F: drivers/input/dlink-dir685-touchkeys.c F: drivers/input/keyboard/dlink-dir685-touchkeys.c
DALLAS/MAXIM DS1685-FAMILY REAL TIME CLOCK DALLAS/MAXIM DS1685-FAMILY REAL TIME CLOCK
M: Joshua Kinard <kumba@gentoo.org> M: Joshua Kinard <kumba@gentoo.org>
......
...@@ -185,19 +185,19 @@ static int sun4i_lradc_load_dt_keymap(struct device *dev, ...@@ -185,19 +185,19 @@ static int sun4i_lradc_load_dt_keymap(struct device *dev,
error = of_property_read_u32(pp, "channel", &channel); error = of_property_read_u32(pp, "channel", &channel);
if (error || channel != 0) { if (error || channel != 0) {
dev_err(dev, "%s: Inval channel prop\n", pp->name); dev_err(dev, "%pOFn: Inval channel prop\n", pp);
return -EINVAL; return -EINVAL;
} }
error = of_property_read_u32(pp, "voltage", &map->voltage); error = of_property_read_u32(pp, "voltage", &map->voltage);
if (error) { if (error) {
dev_err(dev, "%s: Inval voltage prop\n", pp->name); dev_err(dev, "%pOFn: Inval voltage prop\n", pp);
return -EINVAL; return -EINVAL;
} }
error = of_property_read_u32(pp, "linux,code", &map->keycode); error = of_property_read_u32(pp, "linux,code", &map->keycode);
if (error) { if (error) {
dev_err(dev, "%s: Inval linux,code prop\n", pp->name); dev_err(dev, "%pOFn: Inval linux,code prop\n", pp);
return -EINVAL; return -EINVAL;
} }
......
...@@ -524,7 +524,7 @@ static void xenkbd_backend_changed(struct xenbus_device *dev, ...@@ -524,7 +524,7 @@ static void xenkbd_backend_changed(struct xenbus_device *dev,
case XenbusStateClosed: case XenbusStateClosed:
if (dev->state == XenbusStateClosed) if (dev->state == XenbusStateClosed)
break; break;
/* Missed the backend's CLOSING state -- fallthrough */ /* fall through - Missed the backend's CLOSING state */
case XenbusStateClosing: case XenbusStateClosing:
xenbus_frontend_closed(dev); xenbus_frontend_closed(dev);
break; break;
......
...@@ -1067,7 +1067,7 @@ static int cyapa_gen3_do_operational_check(struct cyapa *cyapa) ...@@ -1067,7 +1067,7 @@ static int cyapa_gen3_do_operational_check(struct cyapa *cyapa)
return error; return error;
} }
/* Fallthrough state */ /* Fall through */
case CYAPA_STATE_BL_IDLE: case CYAPA_STATE_BL_IDLE:
/* Try to get firmware version in bootloader mode. */ /* Try to get firmware version in bootloader mode. */
cyapa_gen3_bl_query_data(cyapa); cyapa_gen3_bl_query_data(cyapa);
...@@ -1078,7 +1078,7 @@ static int cyapa_gen3_do_operational_check(struct cyapa *cyapa) ...@@ -1078,7 +1078,7 @@ static int cyapa_gen3_do_operational_check(struct cyapa *cyapa)
return error; return error;
} }
/* Fallthrough state */ /* Fall through */
case CYAPA_STATE_OP: case CYAPA_STATE_OP:
/* /*
* Reading query data before going back to the full mode * Reading query data before going back to the full mode
......
...@@ -99,9 +99,7 @@ static int synaptics_mode_cmd(struct psmouse *psmouse, u8 mode) ...@@ -99,9 +99,7 @@ static int synaptics_mode_cmd(struct psmouse *psmouse, u8 mode)
int synaptics_detect(struct psmouse *psmouse, bool set_properties) int synaptics_detect(struct psmouse *psmouse, bool set_properties)
{ {
struct ps2dev *ps2dev = &psmouse->ps2dev; struct ps2dev *ps2dev = &psmouse->ps2dev;
u8 param[4]; u8 param[4] = { 0 };
param[0] = 0;
ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES); ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES);
ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES); ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES);
......
...@@ -245,7 +245,7 @@ static int xps2_of_probe(struct platform_device *ofdev) ...@@ -245,7 +245,7 @@ static int xps2_of_probe(struct platform_device *ofdev)
unsigned int irq; unsigned int irq;
int error; int error;
dev_info(dev, "Device Tree Probing \'%s\'\n", dev->of_node->name); dev_info(dev, "Device Tree Probing \'%pOFn\'\n", dev->of_node);
/* Get iospace for the device */ /* Get iospace for the device */
error = of_address_to_resource(dev->of_node, 0, &r_mem); error = of_address_to_resource(dev->of_node, 0, &r_mem);
......
...@@ -29,7 +29,6 @@ ...@@ -29,7 +29,6 @@
#include <linux/property.h> #include <linux/property.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/gpio/consumer.h> #include <linux/gpio/consumer.h>
#include <linux/property.h>
#include <asm/unaligned.h> #include <asm/unaligned.h>
#include <media/v4l2-device.h> #include <media/v4l2-device.h>
#include <media/v4l2-ioctl.h> #include <media/v4l2-ioctl.h>
...@@ -489,7 +488,7 @@ static int mxt_lookup_bootloader_address(struct mxt_data *data, bool retry) ...@@ -489,7 +488,7 @@ static int mxt_lookup_bootloader_address(struct mxt_data *data, bool retry)
bootloader = appmode - 0x24; bootloader = appmode - 0x24;
break; break;
} }
/* Fall through for normal case */ /* Fall through - for normal case */
case 0x4c: case 0x4c:
case 0x4d: case 0x4d:
case 0x5a: case 0x5a:
......
...@@ -147,10 +147,11 @@ struct elants_data { ...@@ -147,10 +147,11 @@ struct elants_data {
u8 cmd_resp[HEADER_SIZE]; u8 cmd_resp[HEADER_SIZE];
struct completion cmd_done; struct completion cmd_done;
u8 buf[MAX_PACKET_SIZE];
bool wake_irq_enabled; bool wake_irq_enabled;
bool keep_power_in_suspend; bool keep_power_in_suspend;
/* Must be last to be used for DMA operations */
u8 buf[MAX_PACKET_SIZE] ____cacheline_aligned;
}; };
static int elants_i2c_send(struct i2c_client *client, static int elants_i2c_send(struct i2c_client *client,
...@@ -863,7 +864,7 @@ static irqreturn_t elants_i2c_irq(int irq, void *_dev) ...@@ -863,7 +864,7 @@ static irqreturn_t elants_i2c_irq(int irq, void *_dev)
int i; int i;
int len; int len;
len = i2c_master_recv(client, ts->buf, sizeof(ts->buf)); len = i2c_master_recv_dmasafe(client, ts->buf, sizeof(ts->buf));
if (len < 0) { if (len < 0) {
dev_err(&client->dev, "%s: failed to read data: %d\n", dev_err(&client->dev, "%s: failed to read data: %d\n",
__func__, len); __func__, len);
......
...@@ -35,7 +35,7 @@ static bool touchscreen_get_prop_u32(struct device *dev, ...@@ -35,7 +35,7 @@ static bool touchscreen_get_prop_u32(struct device *dev,
static void touchscreen_set_params(struct input_dev *dev, static void touchscreen_set_params(struct input_dev *dev,
unsigned long axis, unsigned long axis,
int max, int fuzz) int min, int max, int fuzz)
{ {
struct input_absinfo *absinfo; struct input_absinfo *absinfo;
...@@ -47,6 +47,7 @@ static void touchscreen_set_params(struct input_dev *dev, ...@@ -47,6 +47,7 @@ static void touchscreen_set_params(struct input_dev *dev,
} }
absinfo = &dev->absinfo[axis]; absinfo = &dev->absinfo[axis];
absinfo->minimum = min;
absinfo->maximum = max; absinfo->maximum = max;
absinfo->fuzz = fuzz; absinfo->fuzz = fuzz;
} }
...@@ -68,8 +69,9 @@ void touchscreen_parse_properties(struct input_dev *input, bool multitouch, ...@@ -68,8 +69,9 @@ void touchscreen_parse_properties(struct input_dev *input, bool multitouch,
struct touchscreen_properties *prop) struct touchscreen_properties *prop)
{ {
struct device *dev = input->dev.parent; struct device *dev = input->dev.parent;
struct input_absinfo *absinfo;
unsigned int axis; unsigned int axis;
unsigned int maximum, fuzz; unsigned int minimum, maximum, fuzz;
bool data_present; bool data_present;
input_alloc_absinfo(input); input_alloc_absinfo(input);
...@@ -77,7 +79,10 @@ void touchscreen_parse_properties(struct input_dev *input, bool multitouch, ...@@ -77,7 +79,10 @@ void touchscreen_parse_properties(struct input_dev *input, bool multitouch,
return; return;
axis = multitouch ? ABS_MT_POSITION_X : ABS_X; axis = multitouch ? ABS_MT_POSITION_X : ABS_X;
data_present = touchscreen_get_prop_u32(dev, "touchscreen-size-x", data_present = touchscreen_get_prop_u32(dev, "touchscreen-min-x",
input_abs_get_min(input, axis),
&minimum) |
touchscreen_get_prop_u32(dev, "touchscreen-size-x",
input_abs_get_max(input, input_abs_get_max(input,
axis) + 1, axis) + 1,
&maximum) | &maximum) |
...@@ -85,10 +90,13 @@ void touchscreen_parse_properties(struct input_dev *input, bool multitouch, ...@@ -85,10 +90,13 @@ void touchscreen_parse_properties(struct input_dev *input, bool multitouch,
input_abs_get_fuzz(input, axis), input_abs_get_fuzz(input, axis),
&fuzz); &fuzz);
if (data_present) if (data_present)
touchscreen_set_params(input, axis, maximum - 1, fuzz); touchscreen_set_params(input, axis, minimum, maximum - 1, fuzz);
axis = multitouch ? ABS_MT_POSITION_Y : ABS_Y; axis = multitouch ? ABS_MT_POSITION_Y : ABS_Y;
data_present = touchscreen_get_prop_u32(dev, "touchscreen-size-y", data_present = touchscreen_get_prop_u32(dev, "touchscreen-min-y",
input_abs_get_min(input, axis),
&minimum) |
touchscreen_get_prop_u32(dev, "touchscreen-size-y",
input_abs_get_max(input, input_abs_get_max(input,
axis) + 1, axis) + 1,
&maximum) | &maximum) |
...@@ -96,7 +104,7 @@ void touchscreen_parse_properties(struct input_dev *input, bool multitouch, ...@@ -96,7 +104,7 @@ void touchscreen_parse_properties(struct input_dev *input, bool multitouch,
input_abs_get_fuzz(input, axis), input_abs_get_fuzz(input, axis),
&fuzz); &fuzz);
if (data_present) if (data_present)
touchscreen_set_params(input, axis, maximum - 1, fuzz); touchscreen_set_params(input, axis, minimum, maximum - 1, fuzz);
axis = multitouch ? ABS_MT_PRESSURE : ABS_PRESSURE; axis = multitouch ? ABS_MT_PRESSURE : ABS_PRESSURE;
data_present = touchscreen_get_prop_u32(dev, data_present = touchscreen_get_prop_u32(dev,
...@@ -108,7 +116,7 @@ void touchscreen_parse_properties(struct input_dev *input, bool multitouch, ...@@ -108,7 +116,7 @@ void touchscreen_parse_properties(struct input_dev *input, bool multitouch,
input_abs_get_fuzz(input, axis), input_abs_get_fuzz(input, axis),
&fuzz); &fuzz);
if (data_present) if (data_present)
touchscreen_set_params(input, axis, maximum, fuzz); touchscreen_set_params(input, axis, 0, maximum, fuzz);
if (!prop) if (!prop)
return; return;
...@@ -117,13 +125,25 @@ void touchscreen_parse_properties(struct input_dev *input, bool multitouch, ...@@ -117,13 +125,25 @@ void touchscreen_parse_properties(struct input_dev *input, bool multitouch,
prop->max_x = input_abs_get_max(input, axis); prop->max_x = input_abs_get_max(input, axis);
prop->max_y = input_abs_get_max(input, axis + 1); prop->max_y = input_abs_get_max(input, axis + 1);
prop->invert_x = prop->invert_x =
device_property_read_bool(dev, "touchscreen-inverted-x"); device_property_read_bool(dev, "touchscreen-inverted-x");
if (prop->invert_x) {
absinfo = &input->absinfo[axis];
absinfo->maximum -= absinfo->minimum;
absinfo->minimum = 0;
}
prop->invert_y = prop->invert_y =
device_property_read_bool(dev, "touchscreen-inverted-y"); device_property_read_bool(dev, "touchscreen-inverted-y");
if (prop->invert_y) {
absinfo = &input->absinfo[axis + 1];
absinfo->maximum -= absinfo->minimum;
absinfo->minimum = 0;
}
prop->swap_x_y = prop->swap_x_y =
device_property_read_bool(dev, "touchscreen-swapped-x-y"); device_property_read_bool(dev, "touchscreen-swapped-x-y");
if (prop->swap_x_y) if (prop->swap_x_y)
swap(input->absinfo[axis], input->absinfo[axis + 1]); swap(input->absinfo[axis], input->absinfo[axis + 1]);
} }
......
...@@ -558,20 +558,33 @@ static int __maybe_unused silead_ts_suspend(struct device *dev) ...@@ -558,20 +558,33 @@ static int __maybe_unused silead_ts_suspend(struct device *dev)
static int __maybe_unused silead_ts_resume(struct device *dev) static int __maybe_unused silead_ts_resume(struct device *dev)
{ {
struct i2c_client *client = to_i2c_client(dev); struct i2c_client *client = to_i2c_client(dev);
bool second_try = false;
int error, status; int error, status;
silead_ts_set_power(client, SILEAD_POWER_ON); silead_ts_set_power(client, SILEAD_POWER_ON);
retry:
error = silead_ts_reset(client); error = silead_ts_reset(client);
if (error) if (error)
return error; return error;
if (second_try) {
error = silead_ts_load_fw(client);
if (error)
return error;
}
error = silead_ts_startup(client); error = silead_ts_startup(client);
if (error) if (error)
return error; return error;
status = silead_ts_get_status(client); status = silead_ts_get_status(client);
if (status != SILEAD_STATUS_OK) { if (status != SILEAD_STATUS_OK) {
if (!second_try) {
second_try = true;
dev_dbg(dev, "Reloading firmware after unsuccessful resume\n");
goto retry;
}
dev_err(dev, "Resume error, status: 0x%02x\n", status); dev_err(dev, "Resume error, status: 0x%02x\n", status);
return -ENODEV; return -ENODEV;
} }
......
...@@ -195,6 +195,7 @@ static int st1232_ts_probe(struct i2c_client *client, ...@@ -195,6 +195,7 @@ static int st1232_ts_probe(struct i2c_client *client,
input_dev->id.bustype = BUS_I2C; input_dev->id.bustype = BUS_I2C;
input_dev->dev.parent = &client->dev; input_dev->dev.parent = &client->dev;
__set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
__set_bit(EV_SYN, input_dev->evbit); __set_bit(EV_SYN, input_dev->evbit);
__set_bit(EV_KEY, input_dev->evbit); __set_bit(EV_KEY, input_dev->evbit);
__set_bit(EV_ABS, input_dev->evbit); __set_bit(EV_ABS, input_dev->evbit);
......
...@@ -929,7 +929,8 @@ static int __init wm97xx_init(void) ...@@ -929,7 +929,8 @@ static int __init wm97xx_init(void)
static void __exit wm97xx_exit(void) static void __exit wm97xx_exit(void)
{ {
driver_unregister(&wm97xx_driver); if (IS_BUILTIN(CONFIG_AC97_BUS))
driver_unregister(&wm97xx_driver);
platform_driver_unregister(&wm97xx_mfd_driver); platform_driver_unregister(&wm97xx_mfd_driver);
} }
......
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