Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
Pull input updates from Dmitry Torokhov: "Small driver fixups" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: Input: elants_i2c - avoid divide by 0 errors on bad touchscreen data Input: adxl34x - make it enumerable in ACPI environment Input: ALPS - fix TrackStick Y axis handling for SS5 hardware Input: synaptics-rmi4 - fix F03 build error when serio is module Input: xpad - use correct product id for x360w controllers Input: synaptics_i2c - change msleep to usleep_range for small msecs Input: i8042 - add Pegatron touchpad to noloop table Input: joydev - remove unused linux/miscdevice.h include
This commit is contained in:
@@ -22,7 +22,6 @@
|
|||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/miscdevice.h>
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/poll.h>
|
#include <linux/poll.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
@@ -1377,6 +1377,12 @@ static int xpad_init_input(struct usb_xpad *xpad)
|
|||||||
input_dev->name = xpad->name;
|
input_dev->name = xpad->name;
|
||||||
input_dev->phys = xpad->phys;
|
input_dev->phys = xpad->phys;
|
||||||
usb_to_input_id(xpad->udev, &input_dev->id);
|
usb_to_input_id(xpad->udev, &input_dev->id);
|
||||||
|
|
||||||
|
if (xpad->xtype == XTYPE_XBOX360W) {
|
||||||
|
/* x360w controllers and the receiver have different ids */
|
||||||
|
input_dev->id.product = 0x02a1;
|
||||||
|
}
|
||||||
|
|
||||||
input_dev->dev.parent = &xpad->intf->dev;
|
input_dev->dev.parent = &xpad->intf->dev;
|
||||||
|
|
||||||
input_set_drvdata(input_dev, xpad);
|
input_set_drvdata(input_dev, xpad);
|
||||||
|
@@ -136,7 +136,6 @@ static const struct i2c_device_id adxl34x_id[] = {
|
|||||||
|
|
||||||
MODULE_DEVICE_TABLE(i2c, adxl34x_id);
|
MODULE_DEVICE_TABLE(i2c, adxl34x_id);
|
||||||
|
|
||||||
#ifdef CONFIG_OF
|
|
||||||
static const struct of_device_id adxl34x_of_id[] = {
|
static const struct of_device_id adxl34x_of_id[] = {
|
||||||
/*
|
/*
|
||||||
* The ADXL346 is backward-compatible with the ADXL345. Differences are
|
* The ADXL346 is backward-compatible with the ADXL345. Differences are
|
||||||
@@ -153,13 +152,12 @@ static const struct of_device_id adxl34x_of_id[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
MODULE_DEVICE_TABLE(of, adxl34x_of_id);
|
MODULE_DEVICE_TABLE(of, adxl34x_of_id);
|
||||||
#endif
|
|
||||||
|
|
||||||
static struct i2c_driver adxl34x_driver = {
|
static struct i2c_driver adxl34x_driver = {
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "adxl34x",
|
.name = "adxl34x",
|
||||||
.pm = &adxl34x_i2c_pm,
|
.pm = &adxl34x_i2c_pm,
|
||||||
.of_match_table = of_match_ptr(adxl34x_of_id),
|
.of_match_table = adxl34x_of_id,
|
||||||
},
|
},
|
||||||
.probe = adxl34x_i2c_probe,
|
.probe = adxl34x_i2c_probe,
|
||||||
.remove = adxl34x_i2c_remove,
|
.remove = adxl34x_i2c_remove,
|
||||||
|
@@ -114,7 +114,7 @@ enum SS4_PACKET_ID {
|
|||||||
(_b[1] & 0x7F) \
|
(_b[1] & 0x7F) \
|
||||||
)
|
)
|
||||||
|
|
||||||
#define SS4_TS_Y_V2(_b) (s8)( \
|
#define SS4_TS_Y_V2(_b) -(s8)( \
|
||||||
((_b[3] & 0x01) << 7) | \
|
((_b[3] & 0x01) << 7) | \
|
||||||
(_b[2] & 0x7F) \
|
(_b[2] & 0x7F) \
|
||||||
)
|
)
|
||||||
|
@@ -29,7 +29,7 @@
|
|||||||
* after soft reset, we should wait for 1 ms
|
* after soft reset, we should wait for 1 ms
|
||||||
* before the device becomes operational
|
* before the device becomes operational
|
||||||
*/
|
*/
|
||||||
#define SOFT_RESET_DELAY_MS 3
|
#define SOFT_RESET_DELAY_US 3000
|
||||||
/* and after hard reset, we should wait for max 500ms */
|
/* and after hard reset, we should wait for max 500ms */
|
||||||
#define HARD_RESET_DELAY_MS 500
|
#define HARD_RESET_DELAY_MS 500
|
||||||
|
|
||||||
@@ -311,7 +311,7 @@ static int synaptics_i2c_reset_config(struct i2c_client *client)
|
|||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(&client->dev, "Unable to reset device\n");
|
dev_err(&client->dev, "Unable to reset device\n");
|
||||||
} else {
|
} else {
|
||||||
msleep(SOFT_RESET_DELAY_MS);
|
usleep_range(SOFT_RESET_DELAY_US, SOFT_RESET_DELAY_US + 100);
|
||||||
ret = synaptics_i2c_config(client);
|
ret = synaptics_i2c_config(client);
|
||||||
if (ret)
|
if (ret)
|
||||||
dev_err(&client->dev, "Unable to config device\n");
|
dev_err(&client->dev, "Unable to config device\n");
|
||||||
|
@@ -41,7 +41,8 @@ config RMI4_SMB
|
|||||||
|
|
||||||
config RMI4_F03
|
config RMI4_F03
|
||||||
bool "RMI4 Function 03 (PS2 Guest)"
|
bool "RMI4 Function 03 (PS2 Guest)"
|
||||||
depends on RMI4_CORE && SERIO
|
depends on RMI4_CORE
|
||||||
|
depends on SERIO=y || RMI4_CORE=SERIO
|
||||||
help
|
help
|
||||||
Say Y here if you want to add support for RMI4 function 03.
|
Say Y here if you want to add support for RMI4 function 03.
|
||||||
|
|
||||||
|
@@ -211,6 +211,12 @@ static const struct dmi_system_id __initconst i8042_dmi_noloop_table[] = {
|
|||||||
DMI_MATCH(DMI_PRODUCT_VERSION, "Rev 1"),
|
DMI_MATCH(DMI_PRODUCT_VERSION, "Rev 1"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "PEGATRON CORPORATION"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "C15B"),
|
||||||
|
},
|
||||||
|
},
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -914,9 +914,9 @@ static irqreturn_t elants_i2c_irq(int irq, void *_dev)
|
|||||||
|
|
||||||
case QUEUE_HEADER_NORMAL:
|
case QUEUE_HEADER_NORMAL:
|
||||||
report_count = ts->buf[FW_HDR_COUNT];
|
report_count = ts->buf[FW_HDR_COUNT];
|
||||||
if (report_count > 3) {
|
if (report_count == 0 || report_count > 3) {
|
||||||
dev_err(&client->dev,
|
dev_err(&client->dev,
|
||||||
"too large report count: %*ph\n",
|
"bad report count: %*ph\n",
|
||||||
HEADER_SIZE, ts->buf);
|
HEADER_SIZE, ts->buf);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user