mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 07:30:54 +07:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
Pull more input updates from Dmitry Torokhov: - Apple SPI keyboard and trackpad driver for newer Macs - ALPS driver will ignore trackpoint-only devices to give the trackpoint driver a chance to handle them properly - another Lenovo is switched over to SMbus from PS/2 - assorted driver fixups. * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: Input: alps - fix a mismatch between a condition check and its comment Input: psmouse - fix build error of multiple definition Input: applespi - remove set but not used variables 'sts' Input: add Apple SPI keyboard and trackpad driver Input: alps - don't handle ALPS cs19 trackpoint-only device Input: hyperv-keyboard - remove dependencies on PAGE_SIZE for ring buffer Input: adp5589 - initialize GPIO controller parent device Input: iforce - remove empty multiline comments Input: synaptics - fix misuse of strlcpy Input: auo-pixcir-ts - switch to using devm_add_action_or_reset() Input: gtco - bounds check collection indent level Input: mtk-pmic-keys - add of_node_put() before return Input: sun4i-lradc-keys - add of_node_put() before return Input: synaptics - whitelist Lenovo T580 SMBus intertouch
This commit is contained in:
commit
f1a3b43cc1
@ -6,9 +6,6 @@
|
||||
* USB/RS232 I-Force joysticks and wheels.
|
||||
*/
|
||||
|
||||
/*
|
||||
*/
|
||||
|
||||
#include "iforce.h"
|
||||
|
||||
/*
|
||||
|
@ -6,9 +6,6 @@
|
||||
* USB/RS232 I-Force joysticks and wheels.
|
||||
*/
|
||||
|
||||
/*
|
||||
*/
|
||||
|
||||
#include <asm/unaligned.h>
|
||||
#include "iforce.h"
|
||||
|
||||
|
@ -6,9 +6,6 @@
|
||||
* USB/RS232 I-Force joysticks and wheels.
|
||||
*/
|
||||
|
||||
/*
|
||||
*/
|
||||
|
||||
#include <asm/unaligned.h>
|
||||
#include "iforce.h"
|
||||
|
||||
|
@ -6,9 +6,6 @@
|
||||
* USB/RS232 I-Force joysticks and wheels.
|
||||
*/
|
||||
|
||||
/*
|
||||
*/
|
||||
|
||||
#include <linux/serio.h>
|
||||
#include "iforce.h"
|
||||
|
||||
|
@ -6,9 +6,6 @@
|
||||
* USB/RS232 I-Force joysticks and wheels.
|
||||
*/
|
||||
|
||||
/*
|
||||
*/
|
||||
|
||||
#include <linux/usb.h>
|
||||
#include "iforce.h"
|
||||
|
||||
|
@ -6,9 +6,6 @@
|
||||
* USB/RS232 I-Force joysticks and wheels.
|
||||
*/
|
||||
|
||||
/*
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/input.h>
|
||||
|
@ -71,6 +71,22 @@ config KEYBOARD_AMIGA
|
||||
config ATARI_KBD_CORE
|
||||
bool
|
||||
|
||||
config KEYBOARD_APPLESPI
|
||||
tristate "Apple SPI keyboard and trackpad"
|
||||
depends on ACPI && EFI
|
||||
depends on SPI
|
||||
depends on X86 || COMPILE_TEST
|
||||
help
|
||||
Say Y here if you are running Linux on any Apple MacBook8,1 or later,
|
||||
or any MacBookPro13,* or MacBookPro14,*.
|
||||
|
||||
You will also need to enable appropriate SPI master controllers:
|
||||
spi_pxa2xx_platform and spi_pxa2xx_pci for MacBook8,1, and
|
||||
spi_pxa2xx_platform and intel_lpss_pci for the rest.
|
||||
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called applespi.
|
||||
|
||||
config KEYBOARD_ATARI
|
||||
tristate "Atari keyboard"
|
||||
depends on ATARI
|
||||
|
@ -10,6 +10,7 @@ obj-$(CONFIG_KEYBOARD_ADP5520) += adp5520-keys.o
|
||||
obj-$(CONFIG_KEYBOARD_ADP5588) += adp5588-keys.o
|
||||
obj-$(CONFIG_KEYBOARD_ADP5589) += adp5589-keys.o
|
||||
obj-$(CONFIG_KEYBOARD_AMIGA) += amikbd.o
|
||||
obj-$(CONFIG_KEYBOARD_APPLESPI) += applespi.o
|
||||
obj-$(CONFIG_KEYBOARD_ATARI) += atakbd.o
|
||||
obj-$(CONFIG_KEYBOARD_ATKBD) += atkbd.o
|
||||
obj-$(CONFIG_KEYBOARD_BCM) += bcm-keypad.o
|
||||
|
@ -505,6 +505,7 @@ static int adp5589_gpio_add(struct adp5589_kpad *kpad)
|
||||
if (!gpio_data)
|
||||
return 0;
|
||||
|
||||
kpad->gc.parent = dev;
|
||||
kpad->gc.ngpio = adp5589_build_gpiomap(kpad, pdata);
|
||||
if (kpad->gc.ngpio == 0) {
|
||||
dev_info(dev, "No unused gpios left to export\n");
|
||||
|
1977
drivers/input/keyboard/applespi.c
Normal file
1977
drivers/input/keyboard/applespi.c
Normal file
File diff suppressed because it is too large
Load Diff
29
drivers/input/keyboard/applespi.h
Normal file
29
drivers/input/keyboard/applespi.h
Normal file
@ -0,0 +1,29 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* MacBook (Pro) SPI keyboard and touchpad driver
|
||||
*
|
||||
* Copyright (c) 2015-2019 Federico Lorenzi
|
||||
* Copyright (c) 2017-2019 Ronald Tschalär
|
||||
*/
|
||||
|
||||
#ifndef _APPLESPI_H_
|
||||
#define _APPLESPI_H_
|
||||
|
||||
enum applespi_evt_type {
|
||||
ET_CMD_TP_INI = BIT(0),
|
||||
ET_CMD_BL = BIT(1),
|
||||
ET_CMD_CL = BIT(2),
|
||||
ET_RD_KEYB = BIT(8),
|
||||
ET_RD_TPAD = BIT(9),
|
||||
ET_RD_UNKN = BIT(10),
|
||||
ET_RD_IRQ = BIT(11),
|
||||
ET_RD_CRC = BIT(12),
|
||||
};
|
||||
|
||||
enum applespi_pkt_type {
|
||||
PT_READ,
|
||||
PT_WRITE,
|
||||
PT_STATUS,
|
||||
};
|
||||
|
||||
#endif /* _APPLESPI_H_ */
|
93
drivers/input/keyboard/applespi_trace.h
Normal file
93
drivers/input/keyboard/applespi_trace.h
Normal file
@ -0,0 +1,93 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* MacBook (Pro) SPI keyboard and touchpad driver
|
||||
*
|
||||
* Copyright (c) 2015-2019 Federico Lorenzi
|
||||
* Copyright (c) 2017-2019 Ronald Tschalär
|
||||
*/
|
||||
|
||||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM applespi
|
||||
|
||||
#if !defined(_APPLESPI_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _APPLESPI_TRACE_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/tracepoint.h>
|
||||
|
||||
#include "applespi.h"
|
||||
|
||||
DECLARE_EVENT_CLASS(dump_message_template,
|
||||
TP_PROTO(enum applespi_evt_type evt_type,
|
||||
enum applespi_pkt_type pkt_type,
|
||||
u8 *buf,
|
||||
size_t len),
|
||||
|
||||
TP_ARGS(evt_type, pkt_type, buf, len),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(enum applespi_evt_type, evt_type)
|
||||
__field(enum applespi_pkt_type, pkt_type)
|
||||
__field(size_t, len)
|
||||
__dynamic_array(u8, buf, len)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->evt_type = evt_type;
|
||||
__entry->pkt_type = pkt_type;
|
||||
__entry->len = len;
|
||||
memcpy(__get_dynamic_array(buf), buf, len);
|
||||
),
|
||||
|
||||
TP_printk("%-6s: %s",
|
||||
__print_symbolic(__entry->pkt_type,
|
||||
{ PT_READ, "read" },
|
||||
{ PT_WRITE, "write" },
|
||||
{ PT_STATUS, "status" }
|
||||
),
|
||||
__print_hex(__get_dynamic_array(buf), __entry->len))
|
||||
);
|
||||
|
||||
#define DEFINE_DUMP_MESSAGE_EVENT(name) \
|
||||
DEFINE_EVENT(dump_message_template, name, \
|
||||
TP_PROTO(enum applespi_evt_type evt_type, \
|
||||
enum applespi_pkt_type pkt_type, \
|
||||
u8 *buf, \
|
||||
size_t len), \
|
||||
TP_ARGS(evt_type, pkt_type, buf, len) \
|
||||
)
|
||||
|
||||
DEFINE_DUMP_MESSAGE_EVENT(applespi_tp_ini_cmd);
|
||||
DEFINE_DUMP_MESSAGE_EVENT(applespi_backlight_cmd);
|
||||
DEFINE_DUMP_MESSAGE_EVENT(applespi_caps_lock_cmd);
|
||||
DEFINE_DUMP_MESSAGE_EVENT(applespi_keyboard_data);
|
||||
DEFINE_DUMP_MESSAGE_EVENT(applespi_touchpad_data);
|
||||
DEFINE_DUMP_MESSAGE_EVENT(applespi_unknown_data);
|
||||
DEFINE_DUMP_MESSAGE_EVENT(applespi_bad_crc);
|
||||
|
||||
TRACE_EVENT(applespi_irq_received,
|
||||
TP_PROTO(enum applespi_evt_type evt_type,
|
||||
enum applespi_pkt_type pkt_type),
|
||||
|
||||
TP_ARGS(evt_type, pkt_type),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(enum applespi_evt_type, evt_type)
|
||||
__field(enum applespi_pkt_type, pkt_type)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->evt_type = evt_type;
|
||||
__entry->pkt_type = pkt_type;
|
||||
),
|
||||
|
||||
"\n"
|
||||
);
|
||||
|
||||
#endif /* _APPLESPI_TRACE_H_ */
|
||||
|
||||
/* This part must be outside protection */
|
||||
#undef TRACE_INCLUDE_PATH
|
||||
#define TRACE_INCLUDE_PATH ../../drivers/input/keyboard
|
||||
#define TRACE_INCLUDE_FILE applespi_trace
|
||||
#include <trace/define_trace.h>
|
@ -277,8 +277,10 @@ static int mtk_pmic_keys_probe(struct platform_device *pdev)
|
||||
keys->keys[index].regs = &mtk_pmic_regs->keys_regs[index];
|
||||
|
||||
keys->keys[index].irq = platform_get_irq(pdev, index);
|
||||
if (keys->keys[index].irq < 0)
|
||||
if (keys->keys[index].irq < 0) {
|
||||
of_node_put(child);
|
||||
return keys->keys[index].irq;
|
||||
}
|
||||
|
||||
error = of_property_read_u32(child,
|
||||
"linux,keycodes", &keys->keys[index].keycode);
|
||||
@ -286,6 +288,7 @@ static int mtk_pmic_keys_probe(struct platform_device *pdev)
|
||||
dev_err(keys->dev,
|
||||
"failed to read key:%d linux,keycode property: %d\n",
|
||||
index, error);
|
||||
of_node_put(child);
|
||||
return error;
|
||||
}
|
||||
|
||||
@ -293,8 +296,10 @@ static int mtk_pmic_keys_probe(struct platform_device *pdev)
|
||||
keys->keys[index].wakeup = true;
|
||||
|
||||
error = mtk_pmic_key_setup(keys, &keys->keys[index]);
|
||||
if (error)
|
||||
if (error) {
|
||||
of_node_put(child);
|
||||
return error;
|
||||
}
|
||||
|
||||
index++;
|
||||
}
|
||||
|
@ -198,18 +198,21 @@ 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, "%pOFn: Inval channel prop\n", pp);
|
||||
of_node_put(pp);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
error = of_property_read_u32(pp, "voltage", &map->voltage);
|
||||
if (error) {
|
||||
dev_err(dev, "%pOFn: Inval voltage prop\n", pp);
|
||||
of_node_put(pp);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
error = of_property_read_u32(pp, "linux,code", &map->keycode);
|
||||
if (error) {
|
||||
dev_err(dev, "%pOFn: Inval linux,code prop\n", pp);
|
||||
of_node_put(pp);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -21,6 +21,7 @@
|
||||
|
||||
#include "psmouse.h"
|
||||
#include "alps.h"
|
||||
#include "trackpoint.h"
|
||||
|
||||
/*
|
||||
* Definitions for ALPS version 3 and 4 command mode protocol
|
||||
@ -2861,6 +2862,23 @@ static const struct alps_protocol_info *alps_match_table(unsigned char *e7,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static bool alps_is_cs19_trackpoint(struct psmouse *psmouse)
|
||||
{
|
||||
u8 param[2] = { 0 };
|
||||
|
||||
if (ps2_command(&psmouse->ps2dev,
|
||||
param, MAKE_PS2_CMD(0, 2, TP_READ_ID)))
|
||||
return false;
|
||||
|
||||
/*
|
||||
* param[0] contains the trackpoint device variant_id while
|
||||
* param[1] contains the firmware_id. So far all alps
|
||||
* trackpoint-only devices have their variant_ids equal
|
||||
* TP_VARIANT_ALPS and their firmware_ids are in 0x20~0x2f range.
|
||||
*/
|
||||
return param[0] == TP_VARIANT_ALPS && ((param[1] & 0xf0) == 0x20);
|
||||
}
|
||||
|
||||
static int alps_identify(struct psmouse *psmouse, struct alps_data *priv)
|
||||
{
|
||||
const struct alps_protocol_info *protocol;
|
||||
@ -3161,6 +3179,20 @@ int alps_detect(struct psmouse *psmouse, bool set_properties)
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
/*
|
||||
* ALPS cs19 is a trackpoint-only device, and uses different
|
||||
* protocol than DualPoint ones, so we return -EINVAL here and let
|
||||
* trackpoint.c drive this device. If the trackpoint driver is not
|
||||
* enabled, the device will fall back to a bare PS/2 mouse.
|
||||
* If ps2_command() fails here, we depend on the immediately
|
||||
* followed psmouse_reset() to reset the device to normal state.
|
||||
*/
|
||||
if (alps_is_cs19_trackpoint(psmouse)) {
|
||||
psmouse_dbg(psmouse,
|
||||
"ALPS CS19 trackpoint-only device detected, ignoring\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Reset the device to make sure it is fully operational:
|
||||
* on some laptops, like certain Dell Latitudes, we may
|
||||
|
@ -176,6 +176,7 @@ static const char * const smbus_pnp_ids[] = {
|
||||
"LEN0093", /* T480 */
|
||||
"LEN0096", /* X280 */
|
||||
"LEN0097", /* X280 -> ALPS trackpoint */
|
||||
"LEN009b", /* T580 */
|
||||
"LEN200f", /* T450s */
|
||||
"LEN2054", /* E480 */
|
||||
"LEN2055", /* E580 */
|
||||
@ -705,7 +706,7 @@ static void synaptics_pt_create(struct psmouse *psmouse)
|
||||
|
||||
serio->id.type = SERIO_PS_PSTHRU;
|
||||
strlcpy(serio->name, "Synaptics pass-through", sizeof(serio->name));
|
||||
strlcpy(serio->phys, "synaptics-pt/serio0", sizeof(serio->name));
|
||||
strlcpy(serio->phys, "synaptics-pt/serio0", sizeof(serio->phys));
|
||||
serio->write = synaptics_pt_write;
|
||||
serio->start = synaptics_pt_start;
|
||||
serio->stop = synaptics_pt_stop;
|
||||
|
@ -158,7 +158,8 @@ struct trackpoint_data {
|
||||
#ifdef CONFIG_MOUSE_PS2_TRACKPOINT
|
||||
int trackpoint_detect(struct psmouse *psmouse, bool set_properties);
|
||||
#else
|
||||
inline int trackpoint_detect(struct psmouse *psmouse, bool set_properties)
|
||||
static inline int trackpoint_detect(struct psmouse *psmouse,
|
||||
bool set_properties)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
@ -75,8 +75,8 @@ struct synth_kbd_keystroke {
|
||||
|
||||
#define HK_MAXIMUM_MESSAGE_SIZE 256
|
||||
|
||||
#define KBD_VSC_SEND_RING_BUFFER_SIZE (10 * PAGE_SIZE)
|
||||
#define KBD_VSC_RECV_RING_BUFFER_SIZE (10 * PAGE_SIZE)
|
||||
#define KBD_VSC_SEND_RING_BUFFER_SIZE (40 * 1024)
|
||||
#define KBD_VSC_RECV_RING_BUFFER_SIZE (40 * 1024)
|
||||
|
||||
#define XTKBD_EMUL0 0xe0
|
||||
#define XTKBD_EMUL1 0xe1
|
||||
|
@ -78,6 +78,7 @@ Scott Hill shill@gtcocalcomp.com
|
||||
|
||||
/* Max size of a single report */
|
||||
#define REPORT_MAX_SIZE 10
|
||||
#define MAX_COLLECTION_LEVELS 10
|
||||
|
||||
|
||||
/* Bitmask whether pen is in range */
|
||||
@ -223,8 +224,7 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report,
|
||||
char maintype = 'x';
|
||||
char globtype[12];
|
||||
int indent = 0;
|
||||
char indentstr[10] = "";
|
||||
|
||||
char indentstr[MAX_COLLECTION_LEVELS + 1] = { 0 };
|
||||
|
||||
dev_dbg(ddev, "======>>>>>>PARSE<<<<<<======\n");
|
||||
|
||||
@ -350,6 +350,13 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report,
|
||||
case TAG_MAIN_COL_START:
|
||||
maintype = 'S';
|
||||
|
||||
if (indent == MAX_COLLECTION_LEVELS) {
|
||||
dev_err(ddev, "Collection level %d would exceed limit of %d\n",
|
||||
indent + 1,
|
||||
MAX_COLLECTION_LEVELS);
|
||||
break;
|
||||
}
|
||||
|
||||
if (data == 0) {
|
||||
dev_dbg(ddev, "======>>>>>> Physical\n");
|
||||
strcpy(globtype, "Physical");
|
||||
@ -369,8 +376,15 @@ static void parse_hid_report_descriptor(struct gtco *device, char * report,
|
||||
break;
|
||||
|
||||
case TAG_MAIN_COL_END:
|
||||
dev_dbg(ddev, "<<<<<<======\n");
|
||||
maintype = 'E';
|
||||
|
||||
if (indent == 0) {
|
||||
dev_err(ddev, "Collection level already at zero\n");
|
||||
break;
|
||||
}
|
||||
|
||||
dev_dbg(ddev, "<<<<<<======\n");
|
||||
|
||||
indent--;
|
||||
for (x = 0; x < indent; x++)
|
||||
indentstr[x] = '-';
|
||||
|
@ -602,9 +602,8 @@ static int auo_pixcir_probe(struct i2c_client *client,
|
||||
return error;
|
||||
}
|
||||
|
||||
error = devm_add_action(&client->dev, auo_pixcir_reset, ts);
|
||||
error = devm_add_action_or_reset(&client->dev, auo_pixcir_reset, ts);
|
||||
if (error) {
|
||||
auo_pixcir_reset(ts);
|
||||
dev_err(&client->dev, "failed to register reset action, %d\n",
|
||||
error);
|
||||
return error;
|
||||
|
Loading…
Reference in New Issue
Block a user