Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
Pull input updates from Dmitry Torokhov: - the main change is a fix for my brain-dead patch to PS/2 button reporting for some protocols that made it in 4.17 - there is a new driver for Spreadtum vibrator that I intended to send during merge window but ended up not sending the 2nd pull request. Given that this is a brand new driver we should not see regressions here - a fixup to Elantech PS/2 driver to avoid decoding errors on Thinkpad P52 - addition of few more ACPI IDs for Silead and Elan drivers - RMI4 is switched to using IRQ domain code instead of rolling its own implementation * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: Input: psmouse - fix button reporting for basic protocols Input: xpad - fix GPD Win 2 controller name Input: elan_i2c_smbus - fix more potential stack buffer overflows Input: elan_i2c - add ELAN0618 (Lenovo v330 15IKB) ACPI ID Input: elantech - fix V4 report decoding for module with middle key Input: elantech - enable middle button of touchpads on ThinkPad P52 Input: do not assign new tracking ID when changing tool type Input: make input_report_slot_state() return boolean Input: synaptics-rmi4 - fix axis-swap behavior Input: synaptics-rmi4 - fix the error return code in rmi_probe_interrupts() Input: synaptics-rmi4 - convert irq distribution to irq_domain Input: silead - add MSSL0002 ACPI HID Input: goldfish_events - fix checkpatch warnings Input: add Spreadtrum vibrator driver
此提交包含在:
@@ -27,6 +27,8 @@
|
||||
#define ETP_DISABLE_POWER 0x0001
|
||||
#define ETP_PRESSURE_OFFSET 25
|
||||
|
||||
#define ETP_CALIBRATE_MAX_LEN 3
|
||||
|
||||
/* IAP Firmware handling */
|
||||
#define ETP_PRODUCT_ID_FORMAT_STRING "%d.0"
|
||||
#define ETP_FW_NAME "elan_i2c_" ETP_PRODUCT_ID_FORMAT_STRING ".bin"
|
||||
|
@@ -613,7 +613,7 @@ static ssize_t calibrate_store(struct device *dev,
|
||||
int tries = 20;
|
||||
int retval;
|
||||
int error;
|
||||
u8 val[3];
|
||||
u8 val[ETP_CALIBRATE_MAX_LEN];
|
||||
|
||||
retval = mutex_lock_interruptible(&data->sysfs_mutex);
|
||||
if (retval)
|
||||
@@ -1345,6 +1345,7 @@ static const struct acpi_device_id elan_acpi_id[] = {
|
||||
{ "ELAN060C", 0 },
|
||||
{ "ELAN0611", 0 },
|
||||
{ "ELAN0612", 0 },
|
||||
{ "ELAN0618", 0 },
|
||||
{ "ELAN1000", 0 },
|
||||
{ }
|
||||
};
|
||||
|
@@ -56,7 +56,7 @@
|
||||
static int elan_smbus_initialize(struct i2c_client *client)
|
||||
{
|
||||
u8 check[ETP_SMBUS_HELLOPACKET_LEN] = { 0x55, 0x55, 0x55, 0x55, 0x55 };
|
||||
u8 values[ETP_SMBUS_HELLOPACKET_LEN] = { 0, 0, 0, 0, 0 };
|
||||
u8 values[I2C_SMBUS_BLOCK_MAX] = {0};
|
||||
int len, error;
|
||||
|
||||
/* Get hello packet */
|
||||
@@ -117,12 +117,16 @@ static int elan_smbus_calibrate(struct i2c_client *client)
|
||||
static int elan_smbus_calibrate_result(struct i2c_client *client, u8 *val)
|
||||
{
|
||||
int error;
|
||||
u8 buf[I2C_SMBUS_BLOCK_MAX] = {0};
|
||||
|
||||
BUILD_BUG_ON(ETP_CALIBRATE_MAX_LEN > sizeof(buf));
|
||||
|
||||
error = i2c_smbus_read_block_data(client,
|
||||
ETP_SMBUS_CALIBRATE_QUERY, val);
|
||||
ETP_SMBUS_CALIBRATE_QUERY, buf);
|
||||
if (error < 0)
|
||||
return error;
|
||||
|
||||
memcpy(val, buf, ETP_CALIBRATE_MAX_LEN);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -472,6 +476,8 @@ static int elan_smbus_get_report(struct i2c_client *client, u8 *report)
|
||||
{
|
||||
int len;
|
||||
|
||||
BUILD_BUG_ON(I2C_SMBUS_BLOCK_MAX > ETP_SMBUS_REPORT_LEN);
|
||||
|
||||
len = i2c_smbus_read_block_data(client,
|
||||
ETP_SMBUS_PACKET_QUERY,
|
||||
&report[ETP_SMBUS_REPORT_OFFSET]);
|
||||
|
@@ -799,7 +799,7 @@ static int elantech_packet_check_v4(struct psmouse *psmouse)
|
||||
else if (ic_version == 7 && etd->info.samples[1] == 0x2A)
|
||||
sanity_check = ((packet[3] & 0x1c) == 0x10);
|
||||
else
|
||||
sanity_check = ((packet[0] & 0x0c) == 0x04 &&
|
||||
sanity_check = ((packet[0] & 0x08) == 0x00 &&
|
||||
(packet[3] & 0x1c) == 0x10);
|
||||
|
||||
if (!sanity_check)
|
||||
@@ -1175,6 +1175,12 @@ static const struct dmi_system_id elantech_dmi_has_middle_button[] = {
|
||||
{ }
|
||||
};
|
||||
|
||||
static const char * const middle_button_pnp_ids[] = {
|
||||
"LEN2131", /* ThinkPad P52 w/ NFC */
|
||||
"LEN2132", /* ThinkPad P52 */
|
||||
NULL
|
||||
};
|
||||
|
||||
/*
|
||||
* Set the appropriate event bits for the input subsystem
|
||||
*/
|
||||
@@ -1194,7 +1200,8 @@ static int elantech_set_input_params(struct psmouse *psmouse)
|
||||
__clear_bit(EV_REL, dev->evbit);
|
||||
|
||||
__set_bit(BTN_LEFT, dev->keybit);
|
||||
if (dmi_check_system(elantech_dmi_has_middle_button))
|
||||
if (dmi_check_system(elantech_dmi_has_middle_button) ||
|
||||
psmouse_matches_pnp_id(psmouse, middle_button_pnp_ids))
|
||||
__set_bit(BTN_MIDDLE, dev->keybit);
|
||||
__set_bit(BTN_RIGHT, dev->keybit);
|
||||
|
||||
|
@@ -192,8 +192,8 @@ psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse)
|
||||
else
|
||||
input_report_rel(dev, REL_WHEEL, -wheel);
|
||||
|
||||
input_report_key(dev, BTN_SIDE, BIT(4));
|
||||
input_report_key(dev, BTN_EXTRA, BIT(5));
|
||||
input_report_key(dev, BTN_SIDE, packet[3] & BIT(4));
|
||||
input_report_key(dev, BTN_EXTRA, packet[3] & BIT(5));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -203,13 +203,13 @@ psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse)
|
||||
input_report_rel(dev, REL_WHEEL, -(s8) packet[3]);
|
||||
|
||||
/* Extra buttons on Genius NewNet 3D */
|
||||
input_report_key(dev, BTN_SIDE, BIT(6));
|
||||
input_report_key(dev, BTN_EXTRA, BIT(7));
|
||||
input_report_key(dev, BTN_SIDE, packet[0] & BIT(6));
|
||||
input_report_key(dev, BTN_EXTRA, packet[0] & BIT(7));
|
||||
break;
|
||||
|
||||
case PSMOUSE_THINKPS:
|
||||
/* Extra button on ThinkingMouse */
|
||||
input_report_key(dev, BTN_EXTRA, BIT(3));
|
||||
input_report_key(dev, BTN_EXTRA, packet[0] & BIT(3));
|
||||
|
||||
/*
|
||||
* Without this bit of weirdness moving up gives wildly
|
||||
@@ -223,7 +223,7 @@ psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse)
|
||||
* Cortron PS2 Trackball reports SIDE button in the
|
||||
* 4th bit of the first byte.
|
||||
*/
|
||||
input_report_key(dev, BTN_SIDE, BIT(3));
|
||||
input_report_key(dev, BTN_SIDE, packet[0] & BIT(3));
|
||||
packet[0] |= BIT(3);
|
||||
break;
|
||||
|
||||
|
新增問題並參考
封鎖使用者