mirror of https://gitee.com/openkylin/linux.git
Merge branch 'next' into for-linus
Prepare input updates for 4.20 merge window.
This commit is contained in:
commit
cacd9759ee
|
@ -58,8 +58,8 @@ Example from Motorola Droid 4:
|
|||
|
||||
vibrator {
|
||||
compatible = "pwm-vibrator";
|
||||
pwms = <&pwm8 0 1000000000 0>,
|
||||
<&pwm9 0 1000000000 0>;
|
||||
pwms = <&pwm9 0 1000000000 0>,
|
||||
<&pwm8 0 1000000000 0>;
|
||||
pwm-names = "enable", "direction";
|
||||
direction-duty-cycle-ns = <1000000000>;
|
||||
};
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
General Touchscreen Properties:
|
||||
|
||||
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
|
||||
(in pixels)
|
||||
(maximum x coordinate reported + 1)
|
||||
- touchscreen-size-y : vertical resolution of touchscreen
|
||||
(in pixels)
|
||||
(maximum y coordinate reported + 1)
|
||||
- touchscreen-max-pressure : maximum reported pressure (arbitrary range
|
||||
dependent on the controller)
|
||||
- touchscreen-fuzz-x : horizontal noise value of the absolute input
|
||||
|
|
|
@ -3953,7 +3953,7 @@ D-LINK DIR-685 TOUCHKEYS DRIVER
|
|||
M: Linus Walleij <linus.walleij@linaro.org>
|
||||
L: linux-input@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/input/dlink-dir685-touchkeys.c
|
||||
F: drivers/input/keyboard/dlink-dir685-touchkeys.c
|
||||
|
||||
DALLAS/MAXIM DS1685-FAMILY REAL TIME CLOCK
|
||||
M: Joshua Kinard <kumba@gentoo.org>
|
||||
|
|
|
@ -185,19 +185,19 @@ static int sun4i_lradc_load_dt_keymap(struct device *dev,
|
|||
|
||||
error = of_property_read_u32(pp, "channel", &channel);
|
||||
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;
|
||||
}
|
||||
|
||||
error = of_property_read_u32(pp, "voltage", &map->voltage);
|
||||
if (error) {
|
||||
dev_err(dev, "%s: Inval voltage prop\n", pp->name);
|
||||
dev_err(dev, "%pOFn: Inval voltage prop\n", pp);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
error = of_property_read_u32(pp, "linux,code", &map->keycode);
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -524,7 +524,7 @@ static void xenkbd_backend_changed(struct xenbus_device *dev,
|
|||
case XenbusStateClosed:
|
||||
if (dev->state == XenbusStateClosed)
|
||||
break;
|
||||
/* Missed the backend's CLOSING state -- fallthrough */
|
||||
/* fall through - Missed the backend's CLOSING state */
|
||||
case XenbusStateClosing:
|
||||
xenbus_frontend_closed(dev);
|
||||
break;
|
||||
|
|
|
@ -1067,7 +1067,7 @@ static int cyapa_gen3_do_operational_check(struct cyapa *cyapa)
|
|||
return error;
|
||||
}
|
||||
|
||||
/* Fallthrough state */
|
||||
/* Fall through */
|
||||
case CYAPA_STATE_BL_IDLE:
|
||||
/* Try to get firmware version in bootloader mode. */
|
||||
cyapa_gen3_bl_query_data(cyapa);
|
||||
|
@ -1078,7 +1078,7 @@ static int cyapa_gen3_do_operational_check(struct cyapa *cyapa)
|
|||
return error;
|
||||
}
|
||||
|
||||
/* Fallthrough state */
|
||||
/* Fall through */
|
||||
case CYAPA_STATE_OP:
|
||||
/*
|
||||
* Reading query data before going back to the full mode
|
||||
|
|
|
@ -99,9 +99,7 @@ static int synaptics_mode_cmd(struct psmouse *psmouse, u8 mode)
|
|||
int synaptics_detect(struct psmouse *psmouse, bool set_properties)
|
||||
{
|
||||
struct ps2dev *ps2dev = &psmouse->ps2dev;
|
||||
u8 param[4];
|
||||
|
||||
param[0] = 0;
|
||||
u8 param[4] = { 0 };
|
||||
|
||||
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)
|
|||
unsigned int irq;
|
||||
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 */
|
||||
error = of_address_to_resource(dev->of_node, 0, &r_mem);
|
||||
|
|
|
@ -29,7 +29,6 @@
|
|||
#include <linux/property.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/property.h>
|
||||
#include <asm/unaligned.h>
|
||||
#include <media/v4l2-device.h>
|
||||
#include <media/v4l2-ioctl.h>
|
||||
|
@ -489,7 +488,7 @@ static int mxt_lookup_bootloader_address(struct mxt_data *data, bool retry)
|
|||
bootloader = appmode - 0x24;
|
||||
break;
|
||||
}
|
||||
/* Fall through for normal case */
|
||||
/* Fall through - for normal case */
|
||||
case 0x4c:
|
||||
case 0x4d:
|
||||
case 0x5a:
|
||||
|
|
|
@ -147,10 +147,11 @@ struct elants_data {
|
|||
u8 cmd_resp[HEADER_SIZE];
|
||||
struct completion cmd_done;
|
||||
|
||||
u8 buf[MAX_PACKET_SIZE];
|
||||
|
||||
bool wake_irq_enabled;
|
||||
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,
|
||||
|
@ -863,7 +864,7 @@ static irqreturn_t elants_i2c_irq(int irq, void *_dev)
|
|||
int i;
|
||||
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) {
|
||||
dev_err(&client->dev, "%s: failed to read data: %d\n",
|
||||
__func__, len);
|
||||
|
|
|
@ -35,7 +35,7 @@ static bool touchscreen_get_prop_u32(struct device *dev,
|
|||
|
||||
static void touchscreen_set_params(struct input_dev *dev,
|
||||
unsigned long axis,
|
||||
int max, int fuzz)
|
||||
int min, int max, int fuzz)
|
||||
{
|
||||
struct input_absinfo *absinfo;
|
||||
|
||||
|
@ -47,6 +47,7 @@ static void touchscreen_set_params(struct input_dev *dev,
|
|||
}
|
||||
|
||||
absinfo = &dev->absinfo[axis];
|
||||
absinfo->minimum = min;
|
||||
absinfo->maximum = max;
|
||||
absinfo->fuzz = fuzz;
|
||||
}
|
||||
|
@ -68,8 +69,9 @@ void touchscreen_parse_properties(struct input_dev *input, bool multitouch,
|
|||
struct touchscreen_properties *prop)
|
||||
{
|
||||
struct device *dev = input->dev.parent;
|
||||
struct input_absinfo *absinfo;
|
||||
unsigned int axis;
|
||||
unsigned int maximum, fuzz;
|
||||
unsigned int minimum, maximum, fuzz;
|
||||
bool data_present;
|
||||
|
||||
input_alloc_absinfo(input);
|
||||
|
@ -77,7 +79,10 @@ void touchscreen_parse_properties(struct input_dev *input, bool multitouch,
|
|||
return;
|
||||
|
||||
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,
|
||||
axis) + 1,
|
||||
&maximum) |
|
||||
|
@ -85,10 +90,13 @@ void touchscreen_parse_properties(struct input_dev *input, bool multitouch,
|
|||
input_abs_get_fuzz(input, axis),
|
||||
&fuzz);
|
||||
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;
|
||||
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,
|
||||
axis) + 1,
|
||||
&maximum) |
|
||||
|
@ -96,7 +104,7 @@ void touchscreen_parse_properties(struct input_dev *input, bool multitouch,
|
|||
input_abs_get_fuzz(input, axis),
|
||||
&fuzz);
|
||||
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;
|
||||
data_present = touchscreen_get_prop_u32(dev,
|
||||
|
@ -108,7 +116,7 @@ void touchscreen_parse_properties(struct input_dev *input, bool multitouch,
|
|||
input_abs_get_fuzz(input, axis),
|
||||
&fuzz);
|
||||
if (data_present)
|
||||
touchscreen_set_params(input, axis, maximum, fuzz);
|
||||
touchscreen_set_params(input, axis, 0, maximum, fuzz);
|
||||
|
||||
if (!prop)
|
||||
return;
|
||||
|
@ -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_y = input_abs_get_max(input, axis + 1);
|
||||
|
||||
prop->invert_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 =
|
||||
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 =
|
||||
device_property_read_bool(dev, "touchscreen-swapped-x-y");
|
||||
|
||||
if (prop->swap_x_y)
|
||||
swap(input->absinfo[axis], input->absinfo[axis + 1]);
|
||||
}
|
||||
|
|
|
@ -558,20 +558,33 @@ static int __maybe_unused silead_ts_suspend(struct device *dev)
|
|||
static int __maybe_unused silead_ts_resume(struct device *dev)
|
||||
{
|
||||
struct i2c_client *client = to_i2c_client(dev);
|
||||
bool second_try = false;
|
||||
int error, status;
|
||||
|
||||
silead_ts_set_power(client, SILEAD_POWER_ON);
|
||||
|
||||
retry:
|
||||
error = silead_ts_reset(client);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
if (second_try) {
|
||||
error = silead_ts_load_fw(client);
|
||||
if (error)
|
||||
return error;
|
||||
}
|
||||
|
||||
error = silead_ts_startup(client);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
status = silead_ts_get_status(client);
|
||||
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);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
|
|
@ -195,6 +195,7 @@ static int st1232_ts_probe(struct i2c_client *client,
|
|||
input_dev->id.bustype = BUS_I2C;
|
||||
input_dev->dev.parent = &client->dev;
|
||||
|
||||
__set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
|
||||
__set_bit(EV_SYN, input_dev->evbit);
|
||||
__set_bit(EV_KEY, input_dev->evbit);
|
||||
__set_bit(EV_ABS, input_dev->evbit);
|
||||
|
|
|
@ -929,7 +929,8 @@ static int __init wm97xx_init(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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue