Commit adac0753 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:
 "Mostly new IDs for Elan/Synaptics touchpads, plus a few small fixups"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
  Input: omap-keypad - fix keyboard debounce configuration
  Input: xpad - quirk all PDP Xbox One gamepads
  Input: synaptics - enable SMBus for HP 15-ay000
  Input: synaptics - add PNP ID for ThinkPad P50 to SMBus
  Input: elan_i2c - add ACPI ID for Lenovo IdeaPad 330-15ARR
  Input: elan_i2c - add support for ELAN0621 touchpad
  Input: hyper-v - fix wakeup from suspend-to-idle
  Input: atkbd - clean up indentation issue
  Input: st1232 - convert to SPDX identifiers
  Input: migor_ts - convert to SPDX identifiers
  Input: dt-bindings - fix a typo in file input-reset.txt
  Input: cros_ec_keyb - fix button/switch capability reports
  Input: elan_i2c - add ELAN0620 to the ACPI table
  Input: matrix_keypad - check for errors from of_get_named_gpio()
parents 0072a0c1 6c3516fe
...@@ -12,7 +12,7 @@ The /chosen node should contain a 'linux,sysrq-reset-seq' child node to define ...@@ -12,7 +12,7 @@ The /chosen node should contain a 'linux,sysrq-reset-seq' child node to define
a set of keys. a set of keys.
Required property: Required property:
sysrq-reset-seq: array of Linux keycodes, one keycode per cell. keyset: array of Linux keycodes, one keycode per cell.
Optional property: Optional property:
timeout-ms: duration keys must be pressed together in milliseconds before timeout-ms: duration keys must be pressed together in milliseconds before
......
...@@ -309,7 +309,7 @@ static void mousevsc_on_receive(struct hv_device *device, ...@@ -309,7 +309,7 @@ static void mousevsc_on_receive(struct hv_device *device,
hid_input_report(input_dev->hid_device, HID_INPUT_REPORT, hid_input_report(input_dev->hid_device, HID_INPUT_REPORT,
input_dev->input_buf, len, 1); input_dev->input_buf, len, 1);
pm_wakeup_event(&input_dev->device->device, 0); pm_wakeup_hard_event(&input_dev->device->device);
break; break;
default: default:
......
...@@ -480,18 +480,18 @@ static const u8 xboxone_hori_init[] = { ...@@ -480,18 +480,18 @@ static const u8 xboxone_hori_init[] = {
}; };
/* /*
* This packet is required for some of the PDP pads to start * This packet is required for most (all?) of the PDP pads to start
* sending input reports. These pads include: (0x0e6f:0x02ab), * sending input reports. These pads include: (0x0e6f:0x02ab),
* (0x0e6f:0x02a4). * (0x0e6f:0x02a4), (0x0e6f:0x02a6).
*/ */
static const u8 xboxone_pdp_init1[] = { static const u8 xboxone_pdp_init1[] = {
0x0a, 0x20, 0x00, 0x03, 0x00, 0x01, 0x14 0x0a, 0x20, 0x00, 0x03, 0x00, 0x01, 0x14
}; };
/* /*
* This packet is required for some of the PDP pads to start * This packet is required for most (all?) of the PDP pads to start
* sending input reports. These pads include: (0x0e6f:0x02ab), * sending input reports. These pads include: (0x0e6f:0x02ab),
* (0x0e6f:0x02a4). * (0x0e6f:0x02a4), (0x0e6f:0x02a6).
*/ */
static const u8 xboxone_pdp_init2[] = { static const u8 xboxone_pdp_init2[] = {
0x06, 0x20, 0x00, 0x02, 0x01, 0x00 0x06, 0x20, 0x00, 0x02, 0x01, 0x00
...@@ -527,12 +527,8 @@ static const struct xboxone_init_packet xboxone_init_packets[] = { ...@@ -527,12 +527,8 @@ static const struct xboxone_init_packet xboxone_init_packets[] = {
XBOXONE_INIT_PKT(0x0e6f, 0x0165, xboxone_hori_init), XBOXONE_INIT_PKT(0x0e6f, 0x0165, xboxone_hori_init),
XBOXONE_INIT_PKT(0x0f0d, 0x0067, xboxone_hori_init), XBOXONE_INIT_PKT(0x0f0d, 0x0067, xboxone_hori_init),
XBOXONE_INIT_PKT(0x0000, 0x0000, xboxone_fw2015_init), XBOXONE_INIT_PKT(0x0000, 0x0000, xboxone_fw2015_init),
XBOXONE_INIT_PKT(0x0e6f, 0x02ab, xboxone_pdp_init1), XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_init1),
XBOXONE_INIT_PKT(0x0e6f, 0x02ab, xboxone_pdp_init2), XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_init2),
XBOXONE_INIT_PKT(0x0e6f, 0x02a4, xboxone_pdp_init1),
XBOXONE_INIT_PKT(0x0e6f, 0x02a4, xboxone_pdp_init2),
XBOXONE_INIT_PKT(0x0e6f, 0x02a6, xboxone_pdp_init1),
XBOXONE_INIT_PKT(0x0e6f, 0x02a6, xboxone_pdp_init2),
XBOXONE_INIT_PKT(0x24c6, 0x541a, xboxone_rumblebegin_init), XBOXONE_INIT_PKT(0x24c6, 0x541a, xboxone_rumblebegin_init),
XBOXONE_INIT_PKT(0x24c6, 0x542a, xboxone_rumblebegin_init), XBOXONE_INIT_PKT(0x24c6, 0x542a, xboxone_rumblebegin_init),
XBOXONE_INIT_PKT(0x24c6, 0x543a, xboxone_rumblebegin_init), XBOXONE_INIT_PKT(0x24c6, 0x543a, xboxone_rumblebegin_init),
......
...@@ -841,7 +841,7 @@ static int atkbd_select_set(struct atkbd *atkbd, int target_set, int allow_extra ...@@ -841,7 +841,7 @@ static int atkbd_select_set(struct atkbd *atkbd, int target_set, int allow_extra
if (param[0] != 3) { if (param[0] != 3) {
param[0] = 2; param[0] = 2;
if (ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET)) if (ps2_command(ps2dev, param, ATKBD_CMD_SSCANSET))
return 2; return 2;
} }
ps2_command(ps2dev, param, ATKBD_CMD_SETALL_MBR); ps2_command(ps2dev, param, ATKBD_CMD_SETALL_MBR);
......
...@@ -493,7 +493,8 @@ static int cros_ec_keyb_register_bs(struct cros_ec_keyb *ckdev) ...@@ -493,7 +493,8 @@ static int cros_ec_keyb_register_bs(struct cros_ec_keyb *ckdev)
for (i = 0; i < ARRAY_SIZE(cros_ec_keyb_bs); i++) { for (i = 0; i < ARRAY_SIZE(cros_ec_keyb_bs); i++) {
const struct cros_ec_bs_map *map = &cros_ec_keyb_bs[i]; const struct cros_ec_bs_map *map = &cros_ec_keyb_bs[i];
if (buttons & BIT(map->bit)) if ((map->ev_type == EV_KEY && (buttons & BIT(map->bit))) ||
(map->ev_type == EV_SW && (switches & BIT(map->bit))))
input_set_capability(idev, map->ev_type, map->code); input_set_capability(idev, map->ev_type, map->code);
} }
......
...@@ -407,7 +407,7 @@ matrix_keypad_parse_dt(struct device *dev) ...@@ -407,7 +407,7 @@ matrix_keypad_parse_dt(struct device *dev)
struct matrix_keypad_platform_data *pdata; struct matrix_keypad_platform_data *pdata;
struct device_node *np = dev->of_node; struct device_node *np = dev->of_node;
unsigned int *gpios; unsigned int *gpios;
int i, nrow, ncol; int ret, i, nrow, ncol;
if (!np) { if (!np) {
dev_err(dev, "device lacks DT data\n"); dev_err(dev, "device lacks DT data\n");
...@@ -452,12 +452,19 @@ matrix_keypad_parse_dt(struct device *dev) ...@@ -452,12 +452,19 @@ matrix_keypad_parse_dt(struct device *dev)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
} }
for (i = 0; i < pdata->num_row_gpios; i++) for (i = 0; i < nrow; i++) {
gpios[i] = of_get_named_gpio(np, "row-gpios", i); ret = of_get_named_gpio(np, "row-gpios", i);
if (ret < 0)
return ERR_PTR(ret);
gpios[i] = ret;
}
for (i = 0; i < pdata->num_col_gpios; i++) for (i = 0; i < ncol; i++) {
gpios[pdata->num_row_gpios + i] = ret = of_get_named_gpio(np, "col-gpios", i);
of_get_named_gpio(np, "col-gpios", i); if (ret < 0)
return ERR_PTR(ret);
gpios[nrow + i] = ret;
}
pdata->row_gpios = gpios; pdata->row_gpios = gpios;
pdata->col_gpios = &gpios[pdata->num_row_gpios]; pdata->col_gpios = &gpios[pdata->num_row_gpios];
...@@ -484,10 +491,8 @@ static int matrix_keypad_probe(struct platform_device *pdev) ...@@ -484,10 +491,8 @@ static int matrix_keypad_probe(struct platform_device *pdev)
pdata = dev_get_platdata(&pdev->dev); pdata = dev_get_platdata(&pdev->dev);
if (!pdata) { if (!pdata) {
pdata = matrix_keypad_parse_dt(&pdev->dev); pdata = matrix_keypad_parse_dt(&pdev->dev);
if (IS_ERR(pdata)) { if (IS_ERR(pdata))
dev_err(&pdev->dev, "no platform data defined\n");
return PTR_ERR(pdata); return PTR_ERR(pdata);
}
} else if (!pdata->keymap_data) { } else if (!pdata->keymap_data) {
dev_err(&pdev->dev, "no keymap data defined\n"); dev_err(&pdev->dev, "no keymap data defined\n");
return -EINVAL; return -EINVAL;
......
...@@ -60,8 +60,18 @@ ...@@ -60,8 +60,18 @@
/* OMAP4 values */ /* OMAP4 values */
#define OMAP4_VAL_IRQDISABLE 0x0 #define OMAP4_VAL_IRQDISABLE 0x0
#define OMAP4_VAL_DEBOUNCINGTIME 0x7
#define OMAP4_VAL_PVT 0x7 /*
* Errata i689: If a key is released for a time shorter than debounce time,
* the keyboard will idle and never detect the key release. The workaround
* is to use at least a 12ms debounce time. See omap5432 TRM chapter
* "26.4.6.2 Keyboard Controller Timer" for more information.
*/
#define OMAP4_KEYPAD_PTV_DIV_128 0x6
#define OMAP4_KEYPAD_DEBOUNCINGTIME_MS(dbms, ptv) \
((((dbms) * 1000) / ((1 << ((ptv) + 1)) * (1000000 / 32768))) - 1)
#define OMAP4_VAL_DEBOUNCINGTIME_16MS \
OMAP4_KEYPAD_DEBOUNCINGTIME_MS(16, OMAP4_KEYPAD_PTV_DIV_128)
enum { enum {
KBD_REVISION_OMAP4 = 0, KBD_REVISION_OMAP4 = 0,
...@@ -181,9 +191,9 @@ static int omap4_keypad_open(struct input_dev *input) ...@@ -181,9 +191,9 @@ static int omap4_keypad_open(struct input_dev *input)
kbd_writel(keypad_data, OMAP4_KBD_CTRL, kbd_writel(keypad_data, OMAP4_KBD_CTRL,
OMAP4_DEF_CTRL_NOSOFTMODE | OMAP4_DEF_CTRL_NOSOFTMODE |
(OMAP4_VAL_PVT << OMAP4_DEF_CTRL_PTV_SHIFT)); (OMAP4_KEYPAD_PTV_DIV_128 << OMAP4_DEF_CTRL_PTV_SHIFT));
kbd_writel(keypad_data, OMAP4_KBD_DEBOUNCINGTIME, kbd_writel(keypad_data, OMAP4_KBD_DEBOUNCINGTIME,
OMAP4_VAL_DEBOUNCINGTIME); OMAP4_VAL_DEBOUNCINGTIME_16MS);
/* clear pending interrupts */ /* clear pending interrupts */
kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS, kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS,
kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS)); kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS));
......
...@@ -1348,6 +1348,9 @@ static const struct acpi_device_id elan_acpi_id[] = { ...@@ -1348,6 +1348,9 @@ static const struct acpi_device_id elan_acpi_id[] = {
{ "ELAN0618", 0 }, { "ELAN0618", 0 },
{ "ELAN061C", 0 }, { "ELAN061C", 0 },
{ "ELAN061D", 0 }, { "ELAN061D", 0 },
{ "ELAN061E", 0 },
{ "ELAN0620", 0 },
{ "ELAN0621", 0 },
{ "ELAN0622", 0 }, { "ELAN0622", 0 },
{ "ELAN1000", 0 }, { "ELAN1000", 0 },
{ } { }
......
...@@ -170,6 +170,7 @@ static const char * const smbus_pnp_ids[] = { ...@@ -170,6 +170,7 @@ static const char * const smbus_pnp_ids[] = {
"LEN0048", /* X1 Carbon 3 */ "LEN0048", /* X1 Carbon 3 */
"LEN0046", /* X250 */ "LEN0046", /* X250 */
"LEN004a", /* W541 */ "LEN004a", /* W541 */
"LEN005b", /* P50 */
"LEN0071", /* T480 */ "LEN0071", /* T480 */
"LEN0072", /* X1 Carbon Gen 5 (2017) - Elan/ALPS trackpoint */ "LEN0072", /* X1 Carbon Gen 5 (2017) - Elan/ALPS trackpoint */
"LEN0073", /* X1 Carbon G5 (Elantech) */ "LEN0073", /* X1 Carbon G5 (Elantech) */
...@@ -177,6 +178,7 @@ static const char * const smbus_pnp_ids[] = { ...@@ -177,6 +178,7 @@ static const char * const smbus_pnp_ids[] = {
"LEN0096", /* X280 */ "LEN0096", /* X280 */
"LEN0097", /* X280 -> ALPS trackpoint */ "LEN0097", /* X280 -> ALPS trackpoint */
"LEN200f", /* T450s */ "LEN200f", /* T450s */
"SYN3221", /* HP 15-ay000 */
NULL NULL
}; };
......
...@@ -177,7 +177,7 @@ static void hv_kbd_on_receive(struct hv_device *hv_dev, ...@@ -177,7 +177,7 @@ static void hv_kbd_on_receive(struct hv_device *hv_dev,
* state because the Enter-UP can trigger a wakeup at once. * state because the Enter-UP can trigger a wakeup at once.
*/ */
if (!(info & IS_BREAK)) if (!(info & IS_BREAK))
pm_wakeup_event(&hv_dev->device, 0); pm_wakeup_hard_event(&hv_dev->device);
break; break;
......
// SPDX-License-Identifier: GPL-2.0+
/* /*
* Touch Screen driver for Renesas MIGO-R Platform * Touch Screen driver for Renesas MIGO-R Platform
* *
* Copyright (c) 2008 Magnus Damm * Copyright (c) 2008 Magnus Damm
* Copyright (c) 2007 Ujjwal Pande <ujjwal@kenati.com>, * Copyright (c) 2007 Ujjwal Pande <ujjwal@kenati.com>,
* Kenati Technologies Pvt Ltd. * Kenati Technologies Pvt Ltd.
*
* This file is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#include <linux/module.h> #include <linux/module.h>
#include <linux/kernel.h> #include <linux/kernel.h>
......
// SPDX-License-Identifier: GPL-2.0
/* /*
* ST1232 Touchscreen Controller Driver * ST1232 Touchscreen Controller Driver
* *
...@@ -7,15 +8,6 @@ ...@@ -7,15 +8,6 @@
* Using code from: * Using code from:
* - android.git.kernel.org: projects/kernel/common.git: synaptics_i2c_rmi.c * - android.git.kernel.org: projects/kernel/common.git: synaptics_i2c_rmi.c
* Copyright (C) 2007 Google, Inc. * Copyright (C) 2007 Google, Inc.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/ */
#include <linux/delay.h> #include <linux/delay.h>
...@@ -295,4 +287,4 @@ module_i2c_driver(st1232_ts_driver); ...@@ -295,4 +287,4 @@ module_i2c_driver(st1232_ts_driver);
MODULE_AUTHOR("Tony SIM <chinyeow.sim.xt@renesas.com>"); MODULE_AUTHOR("Tony SIM <chinyeow.sim.xt@renesas.com>");
MODULE_DESCRIPTION("SITRONIX ST1232 Touchscreen Controller Driver"); MODULE_DESCRIPTION("SITRONIX ST1232 Touchscreen Controller Driver");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL v2");
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