Commit e9919e11 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 quirks for the Elan touchpad driver, another Thinkpad is being
  switched over from PS/2 to native RMI4 interface, and we gave a brand
  new SW_MACHINE_COVER switch definition"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
  Input: elan_i2c - add more hardware ID for Lenovo laptops
  Input: i8042 - add Lenovo XiaoXin Air 12 to i8042 nomux list
  Revert "Input: elants_i2c - report resolution information for touch major"
  Input: elan_i2c - only increment wakeup count on touch
  Input: synaptics - enable InterTouch for ThinkPad X1E 1st gen
  ARM: dts: n900: remove mmc1 card detect gpio
  Input: add `SW_MACHINE_COVER`
parents 0dc589da a50ca295
...@@ -105,6 +105,14 @@ proximity_sensor { ...@@ -105,6 +105,14 @@ proximity_sensor {
linux,code = <SW_FRONT_PROXIMITY>; linux,code = <SW_FRONT_PROXIMITY>;
linux,can-disable; linux,can-disable;
}; };
machine_cover {
label = "Machine Cover";
gpios = <&gpio6 0 GPIO_ACTIVE_LOW>; /* 160 */
linux,input-type = <EV_SW>;
linux,code = <SW_MACHINE_COVER>;
linux,can-disable;
};
}; };
isp1707: isp1707 { isp1707: isp1707 {
...@@ -819,10 +827,6 @@ &mmc1 { ...@@ -819,10 +827,6 @@ &mmc1 {
pinctrl-0 = <&mmc1_pins>; pinctrl-0 = <&mmc1_pins>;
vmmc-supply = <&vmmc1>; vmmc-supply = <&vmmc1>;
bus-width = <4>; bus-width = <4>;
/* For debugging, it is often good idea to remove this GPIO.
It means you can remove back cover (to reboot by removing
battery) and still use the MMC card. */
cd-gpios = <&gpio6 0 GPIO_ACTIVE_LOW>; /* 160 */
}; };
/* most boards use vaux3, only some old versions use vmmc2 instead */ /* most boards use vaux3, only some old versions use vmmc2 instead */
......
...@@ -951,6 +951,8 @@ static void elan_report_absolute(struct elan_tp_data *data, u8 *packet) ...@@ -951,6 +951,8 @@ static void elan_report_absolute(struct elan_tp_data *data, u8 *packet)
u8 hover_info = packet[ETP_HOVER_INFO_OFFSET]; u8 hover_info = packet[ETP_HOVER_INFO_OFFSET];
bool contact_valid, hover_event; bool contact_valid, hover_event;
pm_wakeup_event(&data->client->dev, 0);
hover_event = hover_info & 0x40; hover_event = hover_info & 0x40;
for (i = 0; i < ETP_MAX_FINGERS; i++) { for (i = 0; i < ETP_MAX_FINGERS; i++) {
contact_valid = tp_info & (1U << (3 + i)); contact_valid = tp_info & (1U << (3 + i));
...@@ -974,6 +976,8 @@ static void elan_report_trackpoint(struct elan_tp_data *data, u8 *report) ...@@ -974,6 +976,8 @@ static void elan_report_trackpoint(struct elan_tp_data *data, u8 *report)
u8 *packet = &report[ETP_REPORT_ID_OFFSET + 1]; u8 *packet = &report[ETP_REPORT_ID_OFFSET + 1];
int x, y; int x, y;
pm_wakeup_event(&data->client->dev, 0);
if (!data->tp_input) { if (!data->tp_input) {
dev_warn_once(&data->client->dev, dev_warn_once(&data->client->dev,
"received a trackpoint report while no trackpoint device has been created. Please report upstream.\n"); "received a trackpoint report while no trackpoint device has been created. Please report upstream.\n");
...@@ -998,7 +1002,6 @@ static void elan_report_trackpoint(struct elan_tp_data *data, u8 *report) ...@@ -998,7 +1002,6 @@ static void elan_report_trackpoint(struct elan_tp_data *data, u8 *report)
static irqreturn_t elan_isr(int irq, void *dev_id) static irqreturn_t elan_isr(int irq, void *dev_id)
{ {
struct elan_tp_data *data = dev_id; struct elan_tp_data *data = dev_id;
struct device *dev = &data->client->dev;
int error; int error;
u8 report[ETP_MAX_REPORT_LEN]; u8 report[ETP_MAX_REPORT_LEN];
...@@ -1016,8 +1019,6 @@ static irqreturn_t elan_isr(int irq, void *dev_id) ...@@ -1016,8 +1019,6 @@ static irqreturn_t elan_isr(int irq, void *dev_id)
if (error) if (error)
goto out; goto out;
pm_wakeup_event(dev, 0);
switch (report[ETP_REPORT_ID_OFFSET]) { switch (report[ETP_REPORT_ID_OFFSET]) {
case ETP_REPORT_ID: case ETP_REPORT_ID:
elan_report_absolute(data, report); elan_report_absolute(data, report);
...@@ -1026,7 +1027,7 @@ static irqreturn_t elan_isr(int irq, void *dev_id) ...@@ -1026,7 +1027,7 @@ static irqreturn_t elan_isr(int irq, void *dev_id)
elan_report_trackpoint(data, report); elan_report_trackpoint(data, report);
break; break;
default: default:
dev_err(dev, "invalid report id data (%x)\n", dev_err(&data->client->dev, "invalid report id data (%x)\n",
report[ETP_REPORT_ID_OFFSET]); report[ETP_REPORT_ID_OFFSET]);
} }
......
...@@ -179,6 +179,7 @@ static const char * const smbus_pnp_ids[] = { ...@@ -179,6 +179,7 @@ static const char * const smbus_pnp_ids[] = {
"LEN0093", /* T480 */ "LEN0093", /* T480 */
"LEN0096", /* X280 */ "LEN0096", /* X280 */
"LEN0097", /* X280 -> ALPS trackpoint */ "LEN0097", /* X280 -> ALPS trackpoint */
"LEN0099", /* X1 Extreme 1st */
"LEN009b", /* T580 */ "LEN009b", /* T580 */
"LEN200f", /* T450s */ "LEN200f", /* T450s */
"LEN2044", /* L470 */ "LEN2044", /* L470 */
......
...@@ -425,6 +425,13 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = { ...@@ -425,6 +425,13 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "076804U"), DMI_MATCH(DMI_PRODUCT_NAME, "076804U"),
}, },
}, },
{
/* Lenovo XiaoXin Air 12 */
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_NAME, "80UN"),
},
},
{ {
.matches = { .matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Acer"), DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
......
...@@ -1325,7 +1325,6 @@ static int elants_i2c_probe(struct i2c_client *client, ...@@ -1325,7 +1325,6 @@ static int elants_i2c_probe(struct i2c_client *client,
0, MT_TOOL_PALM, 0, 0); 0, MT_TOOL_PALM, 0, 0);
input_abs_set_res(ts->input, ABS_MT_POSITION_X, ts->x_res); input_abs_set_res(ts->input, ABS_MT_POSITION_X, ts->x_res);
input_abs_set_res(ts->input, ABS_MT_POSITION_Y, ts->y_res); input_abs_set_res(ts->input, ABS_MT_POSITION_Y, ts->y_res);
input_abs_set_res(ts->input, ABS_MT_TOUCH_MAJOR, 1);
touchscreen_parse_properties(ts->input, true, &ts->prop); touchscreen_parse_properties(ts->input, true, &ts->prop);
......
...@@ -67,8 +67,15 @@ static const struct acpi_device_id elan_acpi_id[] = { ...@@ -67,8 +67,15 @@ static const struct acpi_device_id elan_acpi_id[] = {
{ "ELAN062B", 0 }, { "ELAN062B", 0 },
{ "ELAN062C", 0 }, { "ELAN062C", 0 },
{ "ELAN062D", 0 }, { "ELAN062D", 0 },
{ "ELAN062E", 0 }, /* Lenovo V340 Whiskey Lake U */
{ "ELAN062F", 0 }, /* Lenovo V340 Comet Lake U */
{ "ELAN0631", 0 }, { "ELAN0631", 0 },
{ "ELAN0632", 0 }, { "ELAN0632", 0 },
{ "ELAN0633", 0 }, /* Lenovo S145 */
{ "ELAN0634", 0 }, /* Lenovo V340 Ice lake */
{ "ELAN0635", 0 }, /* Lenovo V1415-IIL */
{ "ELAN0636", 0 }, /* Lenovo V1415-Dali */
{ "ELAN0637", 0 }, /* Lenovo V1415-IGLR */
{ "ELAN1000", 0 }, { "ELAN1000", 0 },
{ } { }
}; };
......
...@@ -318,7 +318,7 @@ struct pcmcia_device_id { ...@@ -318,7 +318,7 @@ struct pcmcia_device_id {
#define INPUT_DEVICE_ID_LED_MAX 0x0f #define INPUT_DEVICE_ID_LED_MAX 0x0f
#define INPUT_DEVICE_ID_SND_MAX 0x07 #define INPUT_DEVICE_ID_SND_MAX 0x07
#define INPUT_DEVICE_ID_FF_MAX 0x7f #define INPUT_DEVICE_ID_FF_MAX 0x7f
#define INPUT_DEVICE_ID_SW_MAX 0x0f #define INPUT_DEVICE_ID_SW_MAX 0x10
#define INPUT_DEVICE_ID_PROP_MAX 0x1f #define INPUT_DEVICE_ID_PROP_MAX 0x1f
#define INPUT_DEVICE_ID_MATCH_BUS 1 #define INPUT_DEVICE_ID_MATCH_BUS 1
......
...@@ -888,7 +888,8 @@ ...@@ -888,7 +888,8 @@
#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_PEN_INSERTED 0x0f /* set = pen inserted */
#define SW_MAX 0x0f #define SW_MACHINE_COVER 0x10 /* set = cover closed */
#define SW_MAX 0x10
#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