* [PATCH v8 1/2] HID: add driver for Valve Steam Controller
From: Rodrigo Rivas Costa @ 2018-04-02 18:28 UTC (permalink / raw)
To: Benjamin Tissoires, Pierre-Loup A. Griffais,
Clément VUCHENER, Jiri Kosina, Cameron Gutman, lkml,
linux-input
Cc: Rodrigo Rivas Costa
In-Reply-To: <20180402182807.19878-1-rodrigorivascosta@gmail.com>
There are two ways to connect the Steam Controller: directly to the USB
or with the USB wireless adapter. Both methods are similar, but the
wireless adapter can connect up to 4 devices at the same time.
The wired device will appear as 3 interfaces: a virtual mouse, a virtual
keyboard and a custom HID device.
The wireless device will appear as 5 interfaces: a virtual keyboard and
4 custom HID devices, that will remain silent until a device is actually
connected.
The custom HID device has a report descriptor with all vendor specific
usages, so the hid-generic is not very useful. In a PC/SteamBox Valve
Steam Client provices a software translation by using hidraw and a
creates a uinput virtual gamepad and XTest keyboard/mouse.
This driver intercepts the hidraw usage, so it can get out of the way
when the Steam Client is in use.
Signed-off-by: Rodrigo Rivas Costa <rodrigorivascosta@gmail.com>
---
drivers/hid/Kconfig | 8 +
drivers/hid/Makefile | 1 +
drivers/hid/hid-ids.h | 4 +
drivers/hid/hid-steam.c | 973 ++++++++++++++++++++++++++++++++++++++++++++++++
include/linux/hid.h | 1 +
5 files changed, 987 insertions(+)
create mode 100644 drivers/hid/hid-steam.c
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
index 779c5ae47f36..de5f4849bfe4 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
@@ -811,6 +811,14 @@ config HID_SPEEDLINK
---help---
Support for Speedlink Vicious and Divine Cezanne mouse.
+config HID_STEAM
+ tristate "Steam Controller support"
+ depends on HID
+ ---help---
+ Say Y here if you have a Steam Controller if you want to use it
+ without running the Steam Client. It supports both the wired and
+ the wireless adaptor.
+
config HID_STEELSERIES
tristate "Steelseries SRW-S1 steering wheel support"
depends on HID
diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
index 235bd2a7b333..e146c257285a 100644
--- a/drivers/hid/Makefile
+++ b/drivers/hid/Makefile
@@ -94,6 +94,7 @@ obj-$(CONFIG_HID_SAMSUNG) += hid-samsung.o
obj-$(CONFIG_HID_SMARTJOYPLUS) += hid-sjoy.o
obj-$(CONFIG_HID_SONY) += hid-sony.o
obj-$(CONFIG_HID_SPEEDLINK) += hid-speedlink.o
+obj-$(CONFIG_HID_STEAM) += hid-steam.o
obj-$(CONFIG_HID_STEELSERIES) += hid-steelseries.o
obj-$(CONFIG_HID_SUNPLUS) += hid-sunplus.o
obj-$(CONFIG_HID_GREENASIA) += hid-gaff.o
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index a0baa5ba5b84..3014991e5d4b 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -987,6 +987,10 @@
#define USB_VENDOR_ID_STANTUM_SITRONIX 0x1403
#define USB_DEVICE_ID_MTP_SITRONIX 0x5001
+#define USB_VENDOR_ID_VALVE 0x28de
+#define USB_DEVICE_ID_STEAM_CONTROLLER 0x1102
+#define USB_DEVICE_ID_STEAM_CONTROLLER_WIRELESS 0x1142
+
#define USB_VENDOR_ID_STEELSERIES 0x1038
#define USB_DEVICE_ID_STEELSERIES_SRWS1 0x1410
diff --git a/drivers/hid/hid-steam.c b/drivers/hid/hid-steam.c
new file mode 100644
index 000000000000..1e496075acbc
--- /dev/null
+++ b/drivers/hid/hid-steam.c
@@ -0,0 +1,973 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * HID driver for Valve Steam Controller
+ *
+ * Copyright (c) 2018 Rodrigo Rivas Costa <rodrigorivascosta@gmail.com>
+ *
+ * Supports both the wired and wireless interfaces.
+ *
+ * This controller has a builtin emulation of mouse and keyboard: the right pad
+ * can be used as a mouse, the shoulder buttons are mouse buttons, A and B
+ * buttons are ENTER and ESCAPE, and so on. This is implemented as additional
+ * HID interfaces.
+ *
+ * This is known as the "lizard mode", because apparently lizards like to use
+ * the computer from the coach, without a proper mouse and keyboard.
+ *
+ * This driver will disable the lizard mode when the input device is opened
+ * and re-enable it when the input device is closed, so as not to break user
+ * mode behaviour. The lizard_mode parameter can be used to change that.
+ *
+ * There are a few user space applications (notably Steam Client) that use
+ * the hidraw interface directly to create input devices (XTest, uinput...).
+ * In order to avoid breaking them this driver creates a layered hidraw device,
+ * so it can detect when the client is running and then:
+ * - it will not send any command to the controller.
+ * - this input device will be disabled, to avoid double input of the same
+ * user action.
+ *
+ * For additional functions, such as changing the right-pad margin or switching
+ * the led, you can use the user-space tool at:
+ *
+ * https://github.com/rodrigorc/steamctrl
+ */
+
+#include <linux/device.h>
+#include <linux/input.h>
+#include <linux/hid.h>
+#include <linux/module.h>
+#include <linux/workqueue.h>
+#include <linux/mutex.h>
+#include <linux/rcupdate.h>
+#include <linux/delay.h>
+#include "hid-ids.h"
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Rodrigo Rivas Costa <rodrigorivascosta@gmail.com>");
+
+static bool lizard_mode = true;
+
+static DEFINE_MUTEX(steam_devices_lock);
+static LIST_HEAD(steam_devices);
+
+#define STEAM_QUIRK_WIRELESS BIT(0)
+
+/* Touch pads are 40 mm in diameter and 65535 units */
+#define STEAM_PAD_RESOLUTION 1638
+/* Trigger runs are about 5 mm and 256 units */
+#define STEAM_TRIGGER_RESOLUTION 51
+/* Joystick runs are about 5 mm and 256 units */
+#define STEAM_JOYSTICK_RESOLUTION 51
+
+#define STEAM_PAD_FUZZ 256
+
+/* Several commands can be sent in a feature report */
+#define STEAM_CMD_DISABLE_KEYS_CURSOR 0x81
+#define STEAM_CMD_GET_VERSION 0x83
+#define STEAM_CMD_ENABLE_KEYS_CURSOR 0x85
+#define STEAM_CMD_WRITE_REGISTER 0x87
+#define STEAM_CMD_ENABLE_MOUSE 0x8e
+#define STEAM_CMD_FORCEFEEDBAK 0x8f
+#define STEAM_CMD_REQUEST_COMM_STATUS 0xb4
+#define STEAM_CMD_GET_SERIAL 0xae
+
+/* Registers for command 0x87 */
+#define STEAM_REG_CURSOR_EMULATION 0x07
+#define STEAM_REG_MOUSE_EMULATION 0x08
+#define STEAM_REG_RPAD_MARGIN 0x18
+#define STEAM_REG_LED 0x2d
+#define STEAM_REG_GYRO_MODE 0x30
+
+/* Raw event identifiers */
+#define STEAM_EV_INPUT_DATA 0x01
+#define STEAM_EV_CONNECT 0x03
+#define STEAM_EV_BATTERY 0x04
+
+/* Values for GYRO_MODE (bitmask) */
+#define STEAM_GYRO_MODE_OFF 0x0000
+#define STEAM_GYRO_MODE_STEERING 0x0001
+#define STEAM_GYRO_MODE_TILT 0x0002
+#define STEAM_GYRO_MODE_SEND_ORIENTATION 0x0004
+#define STEAM_GYRO_MODE_SEND_RAW_ACCEL 0x0008
+#define STEAM_GYRO_MODE_SEND_RAW_GYRO 0x0010
+
+/* Other random constants */
+#define STEAM_SERIAL_LEN 10
+
+struct steam_device {
+ struct list_head list;
+ spinlock_t lock;
+ struct hid_device *hdev, *client_hdev;
+ struct mutex mutex;
+ bool client_opened, input_opened;
+ struct input_dev __rcu *input;
+ unsigned long quirks;
+ struct work_struct work_connect;
+ bool connected;
+ char serial_no[STEAM_SERIAL_LEN + 1];
+};
+
+static int steam_recv_report(struct steam_device *steam,
+ u8 *data, int size)
+{
+ struct hid_report *r;
+ u8 *buf;
+ int ret;
+
+ r = steam->hdev->report_enum[HID_FEATURE_REPORT].report_id_hash[0];
+ if (hid_report_len(r) < 64)
+ return -EINVAL;
+
+ buf = hid_alloc_report_buf(r, GFP_KERNEL);
+ if (!buf)
+ return -ENOMEM;
+
+ /*
+ * The report ID is always 0, so strip the first byte from the output.
+ * hid_report_len() is not counting the report ID, so +1 to the length
+ * or else we get a EOVERFLOW. We are safe from a buffer overflow
+ * because hid_alloc_report_buf() allocates +7 bytes.
+ */
+ ret = hid_hw_raw_request(steam->hdev, 0x00,
+ buf, hid_report_len(r) + 1,
+ HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
+ if (ret > 0)
+ memcpy(data, buf + 1, min(size, ret - 1));
+ kfree(buf);
+ return ret;
+}
+
+static int steam_send_report(struct steam_device *steam,
+ u8 *cmd, int size)
+{
+ struct hid_report *r;
+ u8 *buf;
+ unsigned int retries = 10;
+ int ret;
+
+ r = steam->hdev->report_enum[HID_FEATURE_REPORT].report_id_hash[0];
+ if (hid_report_len(r) < 64)
+ return -EINVAL;
+
+ buf = hid_alloc_report_buf(r, GFP_KERNEL);
+ if (!buf)
+ return -ENOMEM;
+
+ /* The report ID is always 0 */
+ memcpy(buf + 1, cmd, size);
+
+ /*
+ * Sometimes the wireless controller fails with EPIPE
+ * when sending a feature report.
+ * Doing a HID_REQ_GET_REPORT and waiting for a while
+ * seems to fix that.
+ */
+ do {
+ ret = hid_hw_raw_request(steam->hdev, 0,
+ buf, size + 1,
+ HID_FEATURE_REPORT, HID_REQ_SET_REPORT);
+ if (ret != -EPIPE)
+ break;
+ steam_recv_report(steam, NULL, 0);
+ msleep(50);
+ } while (--retries);
+
+ kfree(buf);
+ if (ret < 0)
+ hid_err(steam->hdev, "%s: error %d (%*ph)\n", __func__,
+ ret, size, cmd);
+ return ret;
+}
+
+static inline int steam_send_report_byte(struct steam_device *steam, u8 cmd)
+{
+ return steam_send_report(steam, &cmd, 1);
+}
+
+static int steam_write_registers(struct steam_device *steam,
+ /* u8 reg, u16 val */...)
+{
+ /* Send: 0x87 len (reg valLo valHi)* */
+ u8 reg;
+ u16 val;
+ u8 cmd[64] = {STEAM_CMD_WRITE_REGISTER, 0x00};
+ va_list args;
+
+ va_start(args, steam);
+ for (;;) {
+ reg = va_arg(args, int);
+ if (reg == 0)
+ break;
+ val = va_arg(args, int);
+ cmd[cmd[1] + 2] = reg;
+ cmd[cmd[1] + 3] = val & 0xff;
+ cmd[cmd[1] + 4] = val >> 8;
+ cmd[1] += 3;
+ }
+ va_end(args);
+
+ return steam_send_report(steam, cmd, sizeof(cmd));
+}
+
+static int steam_get_serial(struct steam_device *steam)
+{
+ /*
+ * Send: 0xae 0x15 0x01
+ * Recv: 0xae 0x15 0x01 serialnumber (10 chars)
+ */
+ int ret;
+ u8 cmd[] = {STEAM_CMD_GET_SERIAL, 0x15, 0x01};
+ u8 reply[3 + STEAM_SERIAL_LEN + 1];
+
+ ret = steam_send_report(steam, cmd, sizeof(cmd));
+ if (ret < 0)
+ return ret;
+ ret = steam_recv_report(steam, reply, sizeof(reply));
+ if (ret < 0)
+ return ret;
+ reply[3 + STEAM_SERIAL_LEN] = 0;
+ strlcpy(steam->serial_no, reply + 3, sizeof(steam->serial_no));
+ return 0;
+}
+
+/*
+ * This command requests the wireless adaptor to post an event
+ * with the connection status. Useful if this driver is loaded when
+ * the controller is already connected.
+ */
+static inline int steam_request_conn_status(struct steam_device *steam)
+{
+ return steam_send_report_byte(steam, STEAM_CMD_REQUEST_COMM_STATUS);
+}
+
+static void steam_set_lizard_mode(struct steam_device *steam, bool enable)
+{
+ if (enable) {
+ /* enable esc, enter, cursors */
+ steam_send_report_byte(steam, STEAM_CMD_ENABLE_KEYS_CURSOR);
+ /* enable mouse */
+ steam_send_report_byte(steam, STEAM_CMD_ENABLE_MOUSE);
+ steam_write_registers(steam,
+ STEAM_REG_RPAD_MARGIN, 0x01, /* enable margin */
+ 0);
+ } else {
+ /* disable esc, enter, cursor */
+ steam_send_report_byte(steam, STEAM_CMD_DISABLE_KEYS_CURSOR);
+ steam_write_registers(steam,
+ STEAM_REG_MOUSE_EMULATION, 0x07, /* disable mouse */
+ STEAM_REG_RPAD_MARGIN, 0x00, /* disable margin */
+ 0);
+ }
+}
+
+static void steam_update_lizard_mode(struct steam_device *steam)
+{
+ mutex_lock(&steam->mutex);
+ if (!steam->client_opened) {
+ if (steam->input_opened)
+ steam_set_lizard_mode(steam, false);
+ else
+ steam_set_lizard_mode(steam, lizard_mode);
+ }
+ mutex_unlock(&steam->mutex);
+}
+
+static int steam_input_open(struct input_dev *dev)
+{
+ struct steam_device *steam = input_get_drvdata(dev);
+ int ret;
+
+ ret = hid_hw_open(steam->hdev);
+ if (ret)
+ return ret;
+
+ mutex_lock(&steam->mutex);
+ steam->input_opened = true;
+ if (!steam->client_opened && lizard_mode)
+ steam_set_lizard_mode(steam, false);
+ mutex_unlock(&steam->mutex);
+ return 0;
+}
+
+static void steam_input_close(struct input_dev *dev)
+{
+ struct steam_device *steam = input_get_drvdata(dev);
+
+ mutex_lock(&steam->mutex);
+ steam->input_opened = false;
+ if (!steam->client_opened && lizard_mode)
+ steam_set_lizard_mode(steam, true);
+ mutex_unlock(&steam->mutex);
+
+ hid_hw_close(steam->hdev);
+}
+
+static int steam_register(struct steam_device *steam)
+{
+ struct hid_device *hdev = steam->hdev;
+ struct input_dev *input;
+ int ret;
+
+ rcu_read_lock();
+ input = rcu_dereference(steam->input);
+ rcu_read_unlock();
+ if (input) {
+ dbg_hid("%s: already connected\n", __func__);
+ return 0;
+ }
+
+ ret = steam_get_serial(steam);
+ if (ret)
+ return ret;
+
+ hid_info(hdev, "Steam Controller '%s' connected",
+ steam->serial_no);
+
+ input = input_allocate_device();
+ if (!input)
+ return -ENOMEM;
+
+ input_set_drvdata(input, steam);
+ input->dev.parent = &hdev->dev;
+ input->open = steam_input_open;
+ input->close = steam_input_close;
+
+ input->name = (steam->quirks & STEAM_QUIRK_WIRELESS) ?
+ "Wireless Steam Controller" :
+ "Steam Controller";
+ input->phys = hdev->phys;
+ input->uniq = steam->serial_no;
+ input->id.bustype = hdev->bus;
+ input->id.vendor = hdev->vendor;
+ input->id.product = hdev->product;
+ input->id.version = hdev->version;
+
+ input_set_capability(input, EV_KEY, BTN_TR2);
+ input_set_capability(input, EV_KEY, BTN_TL2);
+ input_set_capability(input, EV_KEY, BTN_TR);
+ input_set_capability(input, EV_KEY, BTN_TL);
+ input_set_capability(input, EV_KEY, BTN_Y);
+ input_set_capability(input, EV_KEY, BTN_B);
+ input_set_capability(input, EV_KEY, BTN_X);
+ input_set_capability(input, EV_KEY, BTN_A);
+ input_set_capability(input, EV_KEY, BTN_DPAD_UP);
+ input_set_capability(input, EV_KEY, BTN_DPAD_RIGHT);
+ input_set_capability(input, EV_KEY, BTN_DPAD_LEFT);
+ input_set_capability(input, EV_KEY, BTN_DPAD_DOWN);
+ input_set_capability(input, EV_KEY, BTN_SELECT);
+ input_set_capability(input, EV_KEY, BTN_MODE);
+ input_set_capability(input, EV_KEY, BTN_START);
+ input_set_capability(input, EV_KEY, BTN_GEAR_DOWN);
+ input_set_capability(input, EV_KEY, BTN_GEAR_UP);
+ input_set_capability(input, EV_KEY, BTN_THUMBR);
+ input_set_capability(input, EV_KEY, BTN_THUMBL);
+ input_set_capability(input, EV_KEY, BTN_THUMB);
+ input_set_capability(input, EV_KEY, BTN_THUMB2);
+
+ input_set_abs_params(input, ABS_HAT2Y, 0, 255, 0, 0);
+ input_set_abs_params(input, ABS_HAT2X, 0, 255, 0, 0);
+ input_set_abs_params(input, ABS_X, -32767, 32767, 0, 0);
+ input_set_abs_params(input, ABS_Y, -32767, 32767, 0, 0);
+ input_set_abs_params(input, ABS_RX, -32767, 32767,
+ STEAM_PAD_FUZZ, 0);
+ input_set_abs_params(input, ABS_RY, -32767, 32767,
+ STEAM_PAD_FUZZ, 0);
+ input_set_abs_params(input, ABS_HAT0X, -32767, 32767,
+ STEAM_PAD_FUZZ, 0);
+ input_set_abs_params(input, ABS_HAT0Y, -32767, 32767,
+ STEAM_PAD_FUZZ, 0);
+ input_abs_set_res(input, ABS_X, STEAM_JOYSTICK_RESOLUTION);
+ input_abs_set_res(input, ABS_Y, STEAM_JOYSTICK_RESOLUTION);
+ input_abs_set_res(input, ABS_RX, STEAM_PAD_RESOLUTION);
+ input_abs_set_res(input, ABS_RY, STEAM_PAD_RESOLUTION);
+ input_abs_set_res(input, ABS_HAT0X, STEAM_PAD_RESOLUTION);
+ input_abs_set_res(input, ABS_HAT0Y, STEAM_PAD_RESOLUTION);
+ input_abs_set_res(input, ABS_HAT2Y, STEAM_TRIGGER_RESOLUTION);
+ input_abs_set_res(input, ABS_HAT2X, STEAM_TRIGGER_RESOLUTION);
+
+ ret = input_register_device(input);
+ if (ret)
+ goto input_register_fail;
+
+ rcu_assign_pointer(steam->input, input);
+
+ return 0;
+
+input_register_fail:
+ input_free_device(input);
+ return ret;
+}
+
+static void steam_unregister(struct steam_device *steam)
+{
+ struct input_dev *input;
+
+ rcu_read_lock();
+ input = rcu_dereference(steam->input);
+ rcu_read_unlock();
+
+ if (input) {
+ RCU_INIT_POINTER(steam->input, NULL);
+ synchronize_rcu();
+ hid_info(steam->hdev, "Steam Controller '%s' disconnected",
+ steam->serial_no);
+ input_unregister_device(input);
+ }
+}
+
+static void steam_work_connect_cb(struct work_struct *work)
+{
+ struct steam_device *steam = container_of(work, struct steam_device,
+ work_connect);
+ unsigned long flags;
+ bool connected;
+ int ret;
+
+ spin_lock_irqsave(&steam->lock, flags);
+ connected = steam->connected;
+ spin_unlock_irqrestore(&steam->lock, flags);
+
+ if (connected) {
+ ret = steam_register(steam);
+ if (ret) {
+ hid_err(steam->hdev,
+ "%s:steam_register failed with error %d\n",
+ __func__, ret);
+ }
+ } else {
+ steam_unregister(steam);
+ }
+}
+
+static bool steam_is_valve_interface(struct hid_device *hdev)
+{
+ struct hid_report_enum *rep_enum;
+
+ /*
+ * The wired device creates 3 interfaces:
+ * 0: emulated mouse.
+ * 1: emulated keyboard.
+ * 2: the real game pad.
+ * The wireless device creates 5 interfaces:
+ * 0: emulated keyboard.
+ * 1-4: slots where up to 4 real game pads will be connected to.
+ * We know which one is the real gamepad interface because they are the
+ * only ones with a feature report.
+ */
+ rep_enum = &hdev->report_enum[HID_FEATURE_REPORT];
+ return !list_empty(&rep_enum->report_list);
+}
+
+static int steam_client_ll_parse(struct hid_device *hdev)
+{
+ struct steam_device *steam = hid_get_drvdata(hdev);
+
+ return hid_parse_report(hdev, steam->hdev->dev_rdesc,
+ steam->hdev->dev_rsize);
+}
+
+static int steam_client_ll_start(struct hid_device *hdev)
+{
+ return 0;
+}
+
+static void steam_client_ll_stop(struct hid_device *hdev)
+{
+}
+
+static int steam_client_ll_open(struct hid_device *hdev)
+{
+ struct steam_device *steam = hid_get_drvdata(hdev);
+ int ret;
+
+ ret = hid_hw_open(steam->hdev);
+ if (ret)
+ return ret;
+
+ mutex_lock(&steam->mutex);
+ steam->client_opened = true;
+ mutex_unlock(&steam->mutex);
+ return ret;
+}
+
+static void steam_client_ll_close(struct hid_device *hdev)
+{
+ struct steam_device *steam = hid_get_drvdata(hdev);
+
+ mutex_lock(&steam->mutex);
+ steam->client_opened = false;
+ if (steam->input_opened)
+ steam_set_lizard_mode(steam, false);
+ else
+ steam_set_lizard_mode(steam, lizard_mode);
+ mutex_unlock(&steam->mutex);
+
+ hid_hw_close(steam->hdev);
+}
+
+static int steam_client_ll_raw_request(struct hid_device *hdev,
+ unsigned char reportnum, u8 *buf,
+ size_t count, unsigned char report_type,
+ int reqtype)
+{
+ struct steam_device *steam = hid_get_drvdata(hdev);
+
+ return hid_hw_raw_request(steam->hdev, reportnum, buf, count,
+ report_type, reqtype);
+}
+
+static struct hid_ll_driver steam_client_ll_driver = {
+ .parse = steam_client_ll_parse,
+ .start = steam_client_ll_start,
+ .stop = steam_client_ll_stop,
+ .open = steam_client_ll_open,
+ .close = steam_client_ll_close,
+ .raw_request = steam_client_ll_raw_request,
+};
+
+static struct hid_device *steam_create_client_hid(struct hid_device *hdev)
+{
+ struct hid_device *client_hdev;
+
+ client_hdev = hid_allocate_device();
+ if (IS_ERR(client_hdev))
+ return client_hdev;
+
+ client_hdev->ll_driver = &steam_client_ll_driver;
+ client_hdev->dev.parent = hdev->dev.parent;
+ client_hdev->bus = hdev->bus;
+ client_hdev->vendor = hdev->vendor;
+ client_hdev->product = hdev->product;
+ strlcpy(client_hdev->name, hdev->name,
+ sizeof(client_hdev->name));
+ strlcpy(client_hdev->phys, hdev->phys,
+ sizeof(client_hdev->phys));
+ /*
+ * Since we use the same device info than the real interface to
+ * trick userspace, we will be calling steam_probe recursively.
+ * We need to recognize the client interface somehow.
+ */
+ client_hdev->group = HID_GROUP_STEAM;
+ return client_hdev;
+}
+
+static int steam_probe(struct hid_device *hdev,
+ const struct hid_device_id *id)
+{
+ struct steam_device *steam;
+ int ret;
+
+ ret = hid_parse(hdev);
+ if (ret) {
+ hid_err(hdev,
+ "%s:parse of hid interface failed\n", __func__);
+ return ret;
+ }
+
+ /*
+ * The virtual client_dev is only used for hidraw.
+ * Also avoid the recursive probe.
+ */
+ if (hdev->group == HID_GROUP_STEAM)
+ return hid_hw_start(hdev, HID_CONNECT_HIDRAW);
+ /*
+ * The non-valve interfaces (mouse and keyboard emulation) are
+ * connected without changes.
+ */
+ if (!steam_is_valve_interface(hdev))
+ return hid_hw_start(hdev, HID_CONNECT_DEFAULT);
+
+ steam = devm_kzalloc(&hdev->dev, sizeof(*steam), GFP_KERNEL);
+ if (!steam) {
+ ret = -ENOMEM;
+ goto steam_alloc_fail;
+ }
+ steam->hdev = hdev;
+ hid_set_drvdata(hdev, steam);
+ spin_lock_init(&steam->lock);
+ mutex_init(&steam->mutex);
+ steam->quirks = id->driver_data;
+ INIT_WORK(&steam->work_connect, steam_work_connect_cb);
+
+ steam->client_hdev = steam_create_client_hid(hdev);
+ if (IS_ERR(steam->client_hdev)) {
+ ret = PTR_ERR(steam->client_hdev);
+ goto client_hdev_fail;
+ }
+ hid_set_drvdata(steam->client_hdev, steam);
+
+ /*
+ * With the real steam controller interface, do not connect hidraw.
+ * Instead, create the client_hid and connect that.
+ */
+ ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT & ~HID_CONNECT_HIDRAW);
+ if (ret)
+ goto hid_hw_start_fail;
+
+ ret = hid_add_device(steam->client_hdev);
+ if (ret)
+ goto client_hdev_add_fail;
+
+ if (steam->quirks & STEAM_QUIRK_WIRELESS) {
+ ret = hid_hw_open(hdev);
+ if (ret) {
+ hid_err(hdev,
+ "%s:hid_hw_open for wireless\n",
+ __func__);
+ goto hid_hw_open_fail;
+ }
+ hid_info(hdev, "Steam wireless receiver connected");
+ steam_request_conn_status(steam);
+ } else {
+ ret = steam_register(steam);
+ if (ret) {
+ hid_err(hdev,
+ "%s:steam_register failed with error %d\n",
+ __func__, ret);
+ goto input_register_fail;
+ }
+ }
+
+ mutex_lock(&steam_devices_lock);
+ steam_update_lizard_mode(steam);
+ list_add(&steam->list, &steam_devices);
+ mutex_unlock(&steam_devices_lock);
+
+ return 0;
+
+hid_hw_open_fail:
+input_register_fail:
+client_hdev_add_fail:
+ hid_hw_stop(hdev);
+hid_hw_start_fail:
+ hid_destroy_device(steam->client_hdev);
+client_hdev_fail:
+ cancel_work_sync(&steam->work_connect);
+steam_alloc_fail:
+ hid_err(hdev, "%s: failed with error %d\n",
+ __func__, ret);
+ return ret;
+}
+
+static void steam_remove(struct hid_device *hdev)
+{
+ struct steam_device *steam = hid_get_drvdata(hdev);
+
+ if (!steam || hdev->group == HID_GROUP_STEAM) {
+ hid_hw_stop(hdev);
+ return;
+ }
+
+ mutex_lock(&steam_devices_lock);
+ list_del(&steam->list);
+ mutex_unlock(&steam_devices_lock);
+
+ hid_destroy_device(steam->client_hdev);
+ steam->client_opened = false;
+ cancel_work_sync(&steam->work_connect);
+ if (steam->quirks & STEAM_QUIRK_WIRELESS) {
+ hid_info(hdev, "Steam wireless receiver disconnected");
+ hid_hw_close(hdev);
+ }
+ hid_hw_stop(hdev);
+ steam_unregister(steam);
+}
+
+static void steam_do_connect_event(struct steam_device *steam, bool connected)
+{
+ unsigned long flags;
+
+ spin_lock_irqsave(&steam->lock, flags);
+ steam->connected = connected;
+ spin_unlock_irqrestore(&steam->lock, flags);
+
+ if (schedule_work(&steam->work_connect) == 0)
+ dbg_hid("%s: connected=%d event already queued\n",
+ __func__, connected);
+}
+
+/*
+ * Some input data in the protocol has the opposite sign.
+ * Clamp the values to 32767..-32767 so that the range is
+ * symmetrical and can be negated safely.
+ */
+static inline s16 steam_le16(u8 *data)
+{
+ s16 x = (s16) le16_to_cpup((__le16 *)data);
+
+ return x == -32768 ? -32767 : x;
+}
+
+/*
+ * The size for this message payload is 60.
+ * The known values are:
+ * (* values are not sent through wireless)
+ * (* accelerator/gyro is disabled by default)
+ * Offset| Type | Mapped to |Meaning
+ * -------+-------+-----------+--------------------------
+ * 4-7 | u32 | -- | sequence number
+ * 8-10 | 24bit | see below | buttons
+ * 11 | u8 | ABS_HAT2Y | left trigger
+ * 12 | u8 | ABS_HAT2X | right trigger
+ * 13-15 | -- | -- | always 0
+ * 16-17 | s16 | ABS_X/ABS_HAT0X | X value
+ * 18-19 | s16 | ABS_Y/ABS_HAT0Y | Y value
+ * 20-21 | s16 | ABS_RX | right-pad X value
+ * 22-23 | s16 | ABS_RY | right-pad Y value
+ * 24-25 | s16 | -- | * left trigger
+ * 26-27 | s16 | -- | * right trigger
+ * 28-29 | s16 | -- | * accelerometer X value
+ * 30-31 | s16 | -- | * accelerometer Y value
+ * 32-33 | s16 | -- | * accelerometer Z value
+ * 34-35 | s16 | -- | gyro X value
+ * 36-36 | s16 | -- | gyro Y value
+ * 38-39 | s16 | -- | gyro Z value
+ * 40-41 | s16 | -- | quaternion W value
+ * 42-43 | s16 | -- | quaternion X value
+ * 44-45 | s16 | -- | quaternion Y value
+ * 46-47 | s16 | -- | quaternion Z value
+ * 48-49 | -- | -- | always 0
+ * 50-51 | s16 | -- | * left trigger (uncalibrated)
+ * 52-53 | s16 | -- | * right trigger (uncalibrated)
+ * 54-55 | s16 | -- | * joystick X value (uncalibrated)
+ * 56-57 | s16 | -- | * joystick Y value (uncalibrated)
+ * 58-59 | s16 | -- | * left-pad X value
+ * 60-61 | s16 | -- | * left-pad Y value
+ * 62-63 | u16 | -- | * battery voltage
+ *
+ * The buttons are:
+ * Bit | Mapped to | Description
+ * ------+------------+--------------------------------
+ * 8.0 | BTN_TR2 | right trigger fully pressed
+ * 8.1 | BTN_TL2 | left trigger fully pressed
+ * 8.2 | BTN_TR | right shoulder
+ * 8.3 | BTN_TL | left shoulder
+ * 8.4 | BTN_Y | button Y
+ * 8.5 | BTN_B | button B
+ * 8.6 | BTN_X | button X
+ * 8.7 | BTN_A | button A
+ * 9.0 | BTN_DPAD_UP | lef-pad up (but see diagonal issue below)
+ * 9.1 | BTN_DPAD_RIGHT | lef-pad right (ditto)
+ * 9.2 | BTN_DPAD_LEFT | lef-pad left (ditto)
+ * 9.3 | BTN_DPAD_DOWN | lef-pad down (ditto)
+ * 9.4 | BTN_SELECT | menu left
+ * 9.5 | BTN_MODE | steam logo
+ * 9.6 | BTN_START | menu right
+ * 9.7 | BTN_GEAR_DOWN | left back lever
+ * 10.0 | BTN_GEAR_UP | right back lever
+ * 10.1 | -- | left-pad clicked
+ * 10.2 | BTN_THUMBR | right-pad clicked
+ * 10.3 | BTN_THUMB | left-pad touched (but see explanation below)
+ * 10.4 | BTN_THUMB2 | right-pad touched
+ * 10.5 | -- | unknown
+ * 10.6 | BTN_THUMBL | joystick clicked
+ * 10.7 | -- | lpad_and_joy
+ */
+
+static void steam_do_input_event(struct steam_device *steam,
+ struct input_dev *input, u8 *data)
+{
+ /* 24 bits of buttons */
+ u8 b8, b9, b10;
+ s16 x, y;
+ bool lpad_touched, lpad_and_joy;
+
+ b8 = data[8];
+ b9 = data[9];
+ b10 = data[10];
+
+ input_report_abs(input, ABS_HAT2Y, data[11]);
+ input_report_abs(input, ABS_HAT2X, data[12]);
+
+ /*
+ * These two bits tells how to interpret the values X and Y.
+ * lpad_and_joy tells that the joystick and the lpad are used at the
+ * same time.
+ * lpad_touched tells whether X/Y are to be read as lpad coord or
+ * joystick values.
+ * (lpad_touched || lpad_and_joy) tells if the lpad is really touched.
+ */
+ lpad_touched = b10 & BIT(3);
+ lpad_and_joy = b10 & BIT(7);
+ x = steam_le16(data + 16);
+ y = -steam_le16(data + 18);
+
+ input_report_abs(input, lpad_touched ? ABS_HAT0X : ABS_X, x);
+ input_report_abs(input, lpad_touched ? ABS_HAT0Y : ABS_Y, y);
+ /* Check if joystick is centered */
+ if (lpad_touched && !lpad_and_joy) {
+ input_report_abs(input, ABS_X, 0);
+ input_report_abs(input, ABS_Y, 0);
+ }
+ /* Check if lpad is untouched */
+ if (!(lpad_touched || lpad_and_joy)) {
+ input_report_abs(input, ABS_HAT0X, 0);
+ input_report_abs(input, ABS_HAT0Y, 0);
+ }
+
+ input_report_abs(input, ABS_RX, steam_le16(data + 20));
+ input_report_abs(input, ABS_RY, -steam_le16(data + 22));
+
+ input_event(input, EV_KEY, BTN_TR2, !!(b8 & BIT(0)));
+ input_event(input, EV_KEY, BTN_TL2, !!(b8 & BIT(1)));
+ input_event(input, EV_KEY, BTN_TR, !!(b8 & BIT(2)));
+ input_event(input, EV_KEY, BTN_TL, !!(b8 & BIT(3)));
+ input_event(input, EV_KEY, BTN_Y, !!(b8 & BIT(4)));
+ input_event(input, EV_KEY, BTN_B, !!(b8 & BIT(5)));
+ input_event(input, EV_KEY, BTN_X, !!(b8 & BIT(6)));
+ input_event(input, EV_KEY, BTN_A, !!(b8 & BIT(7)));
+ input_event(input, EV_KEY, BTN_SELECT, !!(b9 & BIT(4)));
+ input_event(input, EV_KEY, BTN_MODE, !!(b9 & BIT(5)));
+ input_event(input, EV_KEY, BTN_START, !!(b9 & BIT(6)));
+ input_event(input, EV_KEY, BTN_GEAR_DOWN, !!(b9 & BIT(7)));
+ input_event(input, EV_KEY, BTN_GEAR_UP, !!(b10 & BIT(0)));
+ input_event(input, EV_KEY, BTN_THUMBR, !!(b10 & BIT(2)));
+ input_event(input, EV_KEY, BTN_THUMBL, !!(b10 & BIT(6)));
+ input_event(input, EV_KEY, BTN_THUMB, lpad_touched || lpad_and_joy);
+ input_event(input, EV_KEY, BTN_THUMB2, !!(b10 & BIT(4)));
+
+ /*
+ * I would like to map b9.0 to b9.3 to the BTN_DPAD_* but
+ * unfortunately they do not generate diagonals, and a DPAD
+ * without diagonals is worthless. So we synthesize the DPAD
+ * from the lpad coords and lpad_clicked
+ */
+ if (b10 & BIT(1)) {
+ if (lpad_touched) {
+ s16 x2 = abs(x / 2), y2 = abs(y / 2);
+
+ input_event(input, EV_KEY, BTN_DPAD_UP, y > x2);
+ input_event(input, EV_KEY, BTN_DPAD_RIGHT, x > y2);
+ input_event(input, EV_KEY, BTN_DPAD_LEFT, x < -y2);
+ input_event(input, EV_KEY, BTN_DPAD_DOWN, y < -x2);
+ }
+ } else {
+ input_event(input, EV_KEY, BTN_DPAD_UP, 0);
+ input_event(input, EV_KEY, BTN_DPAD_RIGHT, 0);
+ input_event(input, EV_KEY, BTN_DPAD_LEFT, 0);
+ input_event(input, EV_KEY, BTN_DPAD_DOWN, 0);
+ }
+
+ input_sync(input);
+}
+
+static int steam_raw_event(struct hid_device *hdev,
+ struct hid_report *report, u8 *data,
+ int size)
+{
+ struct steam_device *steam = hid_get_drvdata(hdev);
+ struct input_dev *input;
+
+ if (!steam)
+ return 0;
+
+ if (steam->client_opened)
+ hid_input_report(steam->client_hdev, HID_FEATURE_REPORT,
+ data, size, 0);
+ /*
+ * All messages are size=64, all values little-endian.
+ * The format is:
+ * Offset| Meaning
+ * -------+--------------------------------------------
+ * 0-1 | always 0x01, 0x00, maybe protocol version?
+ * 2 | type of message
+ * 3 | length of the real payload (not checked)
+ * 4-n | payload data, depends on the type
+ *
+ * There are these known types of message:
+ * 0x01: input data (60 bytes)
+ * 0x03: wireless connect/disconnect (1 byte)
+ * 0x04: battery status (11 bytes)
+ */
+
+ if (size != 64 || data[0] != 1 || data[1] != 0)
+ return 0;
+
+ switch (data[2]) {
+ case STEAM_EV_INPUT_DATA:
+ if (steam->client_opened)
+ return 0;
+ rcu_read_lock();
+ input = rcu_dereference(steam->input);
+ if (likely(input)) {
+ steam_do_input_event(steam, input, data);
+ } else {
+ dbg_hid("%s: input data without connect event\n",
+ __func__);
+ steam_do_connect_event(steam, true);
+ }
+ rcu_read_unlock();
+ break;
+ case STEAM_EV_CONNECT:
+ /*
+ * The payload of this event is a single byte:
+ * 0x01: disconnected.
+ * 0x02: connected.
+ */
+ switch (data[4]) {
+ case 0x01:
+ steam_do_connect_event(steam, false);
+ break;
+ case 0x02:
+ steam_do_connect_event(steam, true);
+ break;
+ }
+ break;
+ case STEAM_EV_BATTERY:
+ /* TODO: battery info */
+ break;
+ }
+ return 0;
+}
+
+static int steam_param_set_lizard_mode(const char *val,
+ const struct kernel_param *kp)
+{
+ struct steam_device *steam;
+ int ret;
+
+ ret = param_set_bool(val, kp);
+ if (ret)
+ return ret;
+
+ mutex_lock(&steam_devices_lock);
+ list_for_each_entry(steam, &steam_devices, list) {
+ steam_update_lizard_mode(steam);
+ }
+ mutex_unlock(&steam_devices_lock);
+ return 0;
+}
+
+static const struct kernel_param_ops steam_lizard_mode_ops = {
+ .set = steam_param_set_lizard_mode,
+ .get = param_get_bool,
+};
+
+module_param_cb(lizard_mode, &steam_lizard_mode_ops, &lizard_mode, 0644);
+MODULE_PARM_DESC(lizard_mode,
+ "Enable mouse and keyboard emulation (lizard mode) when the gamepad is not in use");
+
+static const struct hid_device_id steam_controllers[] = {
+ { /* Wired Steam Controller */
+ HID_USB_DEVICE(USB_VENDOR_ID_VALVE,
+ USB_DEVICE_ID_STEAM_CONTROLLER)
+ },
+ { /* Wireless Steam Controller */
+ HID_USB_DEVICE(USB_VENDOR_ID_VALVE,
+ USB_DEVICE_ID_STEAM_CONTROLLER_WIRELESS),
+ .driver_data = STEAM_QUIRK_WIRELESS
+ },
+ {}
+};
+
+MODULE_DEVICE_TABLE(hid, steam_controllers);
+
+static struct hid_driver steam_controller_driver = {
+ .name = "hid-steam",
+ .id_table = steam_controllers,
+ .probe = steam_probe,
+ .remove = steam_remove,
+ .raw_event = steam_raw_event,
+};
+
+module_hid_driver(steam_controller_driver);
diff --git a/include/linux/hid.h b/include/linux/hid.h
index d491027a7c22..5e5d76589954 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -364,6 +364,7 @@ struct hid_item {
#define HID_GROUP_RMI 0x0100
#define HID_GROUP_WACOM 0x0101
#define HID_GROUP_LOGITECH_DJ_DEVICE 0x0102
+#define HID_GROUP_STEAM 0x0103
/*
* HID protocol status
--
2.16.3
^ permalink raw reply related
* [PATCH v8 2/2] HID: steam: add battery device.
From: Rodrigo Rivas Costa @ 2018-04-02 18:28 UTC (permalink / raw)
To: Benjamin Tissoires, Pierre-Loup A. Griffais,
Clément VUCHENER, Jiri Kosina, Cameron Gutman, lkml,
linux-input
Cc: Rodrigo Rivas Costa
In-Reply-To: <20180402182807.19878-1-rodrigorivascosta@gmail.com>
The wireless Steam Controller is battery operated, so add the battery
device and power information.
---
drivers/hid/hid-steam.c | 141 +++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 140 insertions(+), 1 deletion(-)
diff --git a/drivers/hid/hid-steam.c b/drivers/hid/hid-steam.c
index 1e496075acbc..d4cb509999b7 100644
--- a/drivers/hid/hid-steam.c
+++ b/drivers/hid/hid-steam.c
@@ -40,6 +40,7 @@
#include <linux/mutex.h>
#include <linux/rcupdate.h>
#include <linux/delay.h>
+#include <linux/power_supply.h>
#include "hid-ids.h"
MODULE_LICENSE("GPL");
@@ -105,6 +106,10 @@ struct steam_device {
struct work_struct work_connect;
bool connected;
char serial_no[STEAM_SERIAL_LEN + 1];
+ struct power_supply_desc battery_desc;
+ struct power_supply __rcu *battery;
+ u8 battery_charge;
+ u16 voltage;
};
static int steam_recv_report(struct steam_device *steam,
@@ -302,6 +307,85 @@ static void steam_input_close(struct input_dev *dev)
hid_hw_close(steam->hdev);
}
+static enum power_supply_property steam_battery_props[] = {
+ POWER_SUPPLY_PROP_PRESENT,
+ POWER_SUPPLY_PROP_SCOPE,
+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
+ POWER_SUPPLY_PROP_CAPACITY,
+};
+
+static int steam_battery_get_property(struct power_supply *psy,
+ enum power_supply_property psp,
+ union power_supply_propval *val)
+{
+ struct steam_device *steam = power_supply_get_drvdata(psy);
+ unsigned long flags;
+ s16 volts;
+ u8 batt;
+ int ret = 0;
+
+ spin_lock_irqsave(&steam->lock, flags);
+ volts = steam->voltage;
+ batt = steam->battery_charge;
+ spin_unlock_irqrestore(&steam->lock, flags);
+
+ switch (psp) {
+ case POWER_SUPPLY_PROP_PRESENT:
+ val->intval = 1;
+ break;
+ case POWER_SUPPLY_PROP_SCOPE:
+ val->intval = POWER_SUPPLY_SCOPE_DEVICE;
+ break;
+ case POWER_SUPPLY_PROP_VOLTAGE_NOW:
+ val->intval = volts * 1000; /* mV -> uV */
+ break;
+ case POWER_SUPPLY_PROP_CAPACITY:
+ val->intval = batt;
+ break;
+ default:
+ ret = -EINVAL;
+ break;
+ }
+ return ret;
+}
+
+static int steam_battery_register(struct steam_device *steam)
+{
+ struct power_supply *battery;
+ struct power_supply_config battery_cfg = { .drv_data = steam, };
+ unsigned long flags;
+ int ret;
+
+ steam->battery_desc.type = POWER_SUPPLY_TYPE_BATTERY;
+ steam->battery_desc.properties = steam_battery_props;
+ steam->battery_desc.num_properties = ARRAY_SIZE(steam_battery_props);
+ steam->battery_desc.get_property = steam_battery_get_property;
+ steam->battery_desc.name = devm_kasprintf(&steam->hdev->dev,
+ GFP_KERNEL, "steam-controller-%s-battery",
+ steam->serial_no);
+ if (!steam->battery_desc.name)
+ return -ENOMEM;
+
+ /* avoid the warning of 0% battery while waiting for the first info */
+ spin_lock_irqsave(&steam->lock, flags);
+ steam->voltage = 3000;
+ steam->battery_charge = 100;
+ spin_unlock_irqrestore(&steam->lock, flags);
+
+ battery = power_supply_register(&steam->hdev->dev,
+ &steam->battery_desc, &battery_cfg);
+ if (IS_ERR(battery)) {
+ ret = PTR_ERR(battery);
+ hid_err(steam->hdev,
+ "%s:power_supply_register failed with error %d\n",
+ __func__, ret);
+ return ret;
+ }
+ rcu_assign_pointer(steam->battery, battery);
+ power_supply_powers(battery, &steam->hdev->dev);
+ return 0;
+}
+
static int steam_register(struct steam_device *steam)
{
struct hid_device *hdev = steam->hdev;
@@ -391,6 +475,10 @@ static int steam_register(struct steam_device *steam)
rcu_assign_pointer(steam->input, input);
+ /* ignore battery errors, we can live without it */
+ if (steam->quirks & STEAM_QUIRK_WIRELESS)
+ steam_battery_register(steam);
+
return 0;
input_register_fail:
@@ -401,11 +489,18 @@ static int steam_register(struct steam_device *steam)
static void steam_unregister(struct steam_device *steam)
{
struct input_dev *input;
+ struct power_supply *battery;
rcu_read_lock();
input = rcu_dereference(steam->input);
+ battery = rcu_dereference(steam->battery);
rcu_read_unlock();
+ if (battery) {
+ RCU_INIT_POINTER(steam->battery, NULL);
+ synchronize_rcu();
+ power_supply_unregister(battery);
+ }
if (input) {
RCU_INIT_POINTER(steam->input, NULL);
synchronize_rcu();
@@ -851,12 +946,44 @@ static void steam_do_input_event(struct steam_device *steam,
input_sync(input);
}
+/*
+ * The size for this message payload is 11.
+ * The known values are:
+ * Offset| Type | Meaning
+ * -------+-------+---------------------------
+ * 4-7 | u32 | sequence number
+ * 8-11 | -- | always 0
+ * 12-13 | u16 | voltage (mV)
+ * 14 | u8 | battery percent
+ */
+static void steam_do_battery_event(struct steam_device *steam,
+ struct power_supply *battery, u8 *data)
+{
+ unsigned long flags;
+
+ s16 volts = steam_le16(data + 12);
+ u8 batt = data[14];
+
+ /* Creating the battery may have failed */
+ rcu_read_lock();
+ battery = rcu_dereference(steam->battery);
+ if (likely(battery)) {
+ spin_lock_irqsave(&steam->lock, flags);
+ steam->voltage = volts;
+ steam->battery_charge = batt;
+ spin_unlock_irqrestore(&steam->lock, flags);
+ power_supply_changed(battery);
+ }
+ rcu_read_unlock();
+}
+
static int steam_raw_event(struct hid_device *hdev,
struct hid_report *report, u8 *data,
int size)
{
struct steam_device *steam = hid_get_drvdata(hdev);
struct input_dev *input;
+ struct power_supply *battery;
if (!steam)
return 0;
@@ -914,7 +1041,19 @@ static int steam_raw_event(struct hid_device *hdev,
}
break;
case STEAM_EV_BATTERY:
- /* TODO: battery info */
+ if (steam->quirks & STEAM_QUIRK_WIRELESS) {
+ rcu_read_lock();
+ battery = rcu_dereference(steam->battery);
+ if (likely(battery)) {
+ steam_do_battery_event(steam, battery, data);
+ } else {
+ dbg_hid(
+ "%s: battery data without connect event\n",
+ __func__);
+ steam_do_connect_event(steam, true);
+ }
+ rcu_read_unlock();
+ }
break;
}
return 0;
--
2.16.3
^ permalink raw reply related
* Re: Sony Vaio VGN-CS31S touch sensor buttons breaking touchpad
From: Ondrej Zary @ 2018-04-02 20:39 UTC (permalink / raw)
To: Dmitry Torokhov; +Cc: linux-input, linux-kernel
In-Reply-To: <201804012321.56423.linux@rainbow-software.org>
On Sunday 01 April 2018 23:21:55 Ondrej Zary wrote:
> Hello,
> I got a Sony Vaio VGN-CS31S laptop with Synaptics touchpad that exhibits
> weird behavior. It seems to work until I touch the "Touch Sensor Buttons"
> bar above the keyboard - then the buttons start to act weirdly: click or
> remain pressed (sometimes it breaks even without touching the bar).
>
> It seems to be a known problem with VGN-CS series:
> https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-input-synaptics/+bug
>/774877 https://wiki.freegeekvancouver.org/article/Laptop_Troubleshooting
> (mentions nasty partial workaround: psmouse.resetafter=1)
>
> Many models of the VGN-CS series have the Touch Sensor Buttons:
> ftp://124.40.41.224/PUB/MANUALS/SWT/Z009/Z009690111.PDF
>
> From the hardware side (can be found in MBX-196 Quanta GD2 schematic), the
> touch bar is a separate PS/2 device connected to third PS/2 port of the EC
> (Embedded Controller) WPC775L. The touchpad is on the 1st PS/2 port, 2nd
> port is unused. However, the i8042 does not seem to support multiplexing,
> the firmware probably combines the data internally somehow.
Good news: it supports multiplexing but i8042_nomux is set because of:
/*
* Most (all?) VAIOs do not have external PS/2 ports nor
* they implement active multiplexing properly, and
* MUX discovery usually messes up keyboard/touchpad.
*/
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
DMI_MATCH(DMI_BOARD_NAME, "VAIO"),
},
in drivers/input/serio/i8042-x86ia64io.h
(How can this be modified to exclude VGN-CS series?)
dmidecode:
BIOS Information
Vendor: INSYDE
Version: R2060Q2
Release Date: 09/01/2009
ROM Size: 1024 kB
Characteristics:
PCI is supported
PNP is supported
BIOS is upgradeable
BIOS shadowing is allowed
Boot from CD is supported
Selectable boot is supported
EDD is supported
8042 keyboard services are supported (int 9h)
CGA/mono video services are supported (int 10h)
ACPI is supported
USB legacy is supported
Smart battery is supported
BIOS boot specification is supported
Function key-initiated network boot is supported
Targeted content distribution is supported
BIOS Revision: 20.60
Firmware Revision: 20.60
Handle 0x0001, DMI type 1, 27 bytes
System Information
Manufacturer: Sony Corporation
Product Name: VGN-CS31S_P
Version: C103LR65
Wake-up Type: Power Switch
SKU Number: N/A
Family: N/A
Handle 0x0002, DMI type 2, 10 bytes
Base Board Information
Manufacturer: Sony Corporation
Product Name: VAIO
Version: N/A
Serial Number: N/A
Asset Tag: N/A
Features:
Board is a hosting board
Disabling that allows mux to work! Touchpad now works fine no matter how the
touch bar is touched.
Now only to write the touchbar driver... (seems to be detected at serio2 as
PS/2 Generic Mouse)
Apr 2 22:07:02 test kernel: [ 0.599056] i8042: PNP: PS/2 Controller [PNP0303:KBC,PNP0f13:MOUE] at 0x60,0x64 irq 1,12
Apr 2 22:07:02 test kernel: [ 0.599233] i8042: [0] d1 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.599290] i8042: [0] df -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.599295] i8042: [0] ff -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.599338] i8042: [0] 20 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.599449] i8042: [0] ef <- i8042 (return)
Apr 2 22:07:02 test kernel: [ 0.599502] i8042: [0] 20 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.599767] i8042: [0] ef <- i8042 (return)
Apr 2 22:07:02 test kernel: [ 0.599772] i8042: [0] 60 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.599829] i8042: [0] fe -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.599942] i8042: [0] d3 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.600051] i8042: [0] 5a -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.600163] i8042: [0] 5a <- i8042 (return)
Apr 2 22:07:02 test kernel: [ 0.600166] i8042: [0] a7 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.600376] i8042: [0] 20 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.600487] i8042: [0] fe <- i8042 (return)
Apr 2 22:07:02 test kernel: [ 0.600490] i8042: [0] a8 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.600545] i8042: [1] 20 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.600707] i8042: [1] de <- i8042 (return)
Apr 2 22:07:02 test kernel: [ 0.600710] i8042: [1] 60 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.600767] i8042: [1] fc -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.600979] i8042: [1] d3 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.601036] i8042: [1] f0 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.601149] i8042: [1] f0 <- i8042 (return)
Apr 2 22:07:02 test kernel: [ 0.601251] i8042: [1] d3 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.601360] i8042: [1] 56 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.601472] i8042: [1] 56 <- i8042 (return)
Apr 2 22:07:02 test kernel: [ 0.601577] i8042: [1] d3 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.601634] i8042: [1] a4 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.601798] i8042: [1] 11 <- i8042 (return)
Apr 2 22:07:02 test kernel: [ 0.601999] i8042: Detected active multiplexing controller, rev 1.1
Apr 2 22:07:02 test kernel: [ 0.602109] i8042: [1] 60 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.603717] i8042: [1] fc -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.603788] i8042: [1] 90 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.603844] i8042: [1] a8 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.603901] i8042: [1] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.603958] i8042: [1] a8 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.604015] i8042: [1] 92 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.604072] i8042: [1] a8 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.604128] i8042: [1] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.604185] i8042: [1] a8 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.604242] i8042: [1] 60 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.604299] i8042: [1] de -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.604312] i8042: [1] 60 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.604369] i8042: [1] cf -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.604373] serio: i8042 KBD port at 0x60,0x64 irq 1
Apr 2 22:07:02 test kernel: [ 0.604482] serio: i8042 AUX0 port at 0x60,0x64 irq 12
Apr 2 22:07:02 test kernel: [ 0.604629] serio: i8042 AUX1 port at 0x60,0x64 irq 12
Apr 2 22:07:02 test kernel: [ 0.604770] serio: i8042 AUX2 port at 0x60,0x64 irq 12
Apr 2 22:07:02 test kernel: [ 0.604907] serio: i8042 AUX3 port at 0x60,0x64 irq 12
Apr 2 22:07:02 test kernel: [ 0.605171] mousedev: PS/2 mouse device common for all mice
Apr 2 22:07:02 test kernel: [ 0.605483] i8042: [2] f2 -> i8042 (kbd-data)
Apr 2 22:07:02 test kernel: [ 0.608275] i8042: [2] fa <- i8042 (interrupt, 0, 1)
Apr 2 22:07:02 test kernel: [ 0.614872] i8042: [4] ab <- i8042 (interrupt, 0, 1)
Apr 2 22:07:02 test kernel: [ 0.616796] i8042: [5] 41 <- i8042 (interrupt, 0, 1)
Apr 2 22:07:02 test kernel: [ 0.616816] i8042: [5] f5 -> i8042 (kbd-data)
Apr 2 22:07:02 test kernel: [ 0.617258] i8042: [6] fa <- i8042 (interrupt, 0, 1)
Apr 2 22:07:02 test kernel: [ 0.617277] i8042: [6] ed -> i8042 (kbd-data)
Apr 2 22:07:02 test kernel: [ 0.617731] i8042: [7] fa <- i8042 (interrupt, 0, 1)
Apr 2 22:07:02 test kernel: [ 0.617750] i8042: [7] 00 -> i8042 (kbd-data)
Apr 2 22:07:02 test kernel: [ 0.618196] i8042: [8] fa <- i8042 (interrupt, 0, 1)
Apr 2 22:07:02 test kernel: [ 0.618216] i8042: [8] f3 -> i8042 (kbd-data)
Apr 2 22:07:02 test kernel: [ 0.618669] i8042: [9] fa <- i8042 (interrupt, 0, 1)
Apr 2 22:07:02 test kernel: [ 0.618688] i8042: [9] 00 -> i8042 (kbd-data)
Apr 2 22:07:02 test kernel: [ 0.620031] i8042: [10] fa <- i8042 (interrupt, 0, 1)
Apr 2 22:07:02 test kernel: [ 0.620068] i8042: [10] f4 -> i8042 (kbd-data)
Apr 2 22:07:02 test kernel: [ 0.620505] i8042: [11] fa <- i8042 (interrupt, 0, 1)
Apr 2 22:07:02 test kernel: [ 0.620614] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input4
Apr 2 22:07:02 test kernel: [ 0.620901] i8042: [11] 90 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.620959] i8042: [11] f2 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.633326] i8042: [16] MUX error, status is 35, data is fe
Apr 2 22:07:02 test kernel: [ 0.633329] i8042: [16] fe <- i8042 (interrupt, 2, 12, timeout)
Apr 2 22:07:02 test kernel: [ 0.633339] i8042: [16] 90 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.635413] i8042: [16] ed -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.647600] i8042: [21] MUX error, status is 35, data is fe
Apr 2 22:07:02 test kernel: [ 0.647603] i8042: [21] fe <- i8042 (interrupt, 2, 12, timeout)
Apr 2 22:07:02 test kernel: [ 0.647633] i8042: [21] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.648984] i8042: [22] f2 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.649042] i8042: [22] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.649663] i8042: [23] 00 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.649690] i8042: [23] 92 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.649750] i8042: [23] f2 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.661243] i8042: [28] MUX error, status is b5, data is fe
Apr 2 22:07:02 test kernel: [ 0.661246] i8042: [28] fe <- i8042 (interrupt, 4, 12, timeout)
Apr 2 22:07:02 test kernel: [ 0.661256] i8042: [28] 92 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.662813] i8042: [29] ed -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.667644] i8042: [34] MUX error, status is b5, data is fe
Apr 2 22:07:02 test kernel: [ 0.667647] i8042: [34] fe <- i8042 (interrupt, 4, 12, timeout)
Apr 2 22:07:02 test kernel: [ 0.667675] i8042: [34] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.669543] i8042: [34] f2 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.669854] i8042: [35] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 0.670231] i8042: [36] 00 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 0.670259] i8042: [36] 90 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.670317] i8042: [36] f2 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.674851] i8042: [40] MUX error, status is 35, data is fe
Apr 2 22:07:02 test kernel: [ 0.674854] i8042: [40] fe <- i8042 (interrupt, 2, 12, timeout)
Apr 2 22:07:02 test kernel: [ 0.674880] i8042: [40] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.676851] i8042: [41] f2 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.677006] i8042: [42] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.677132] i8042: [42] 00 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.677141] i8042: [42] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.678543] i8042: [42] f6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.680912] i8042: [43] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.680926] i8042: [43] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.681036] i8042: [43] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.681259] i8042: [44] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.681273] i8042: [44] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.683192] i8042: [44] 0a -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.683464] i8042: [45] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.683473] i8042: [45] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.683531] i8042: [45] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.683705] i8042: [45] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.683715] i8042: [45] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.685065] i8042: [46] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.685185] i8042: [46] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.685195] i8042: [46] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.685253] i8042: [46] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.685639] i8042: [47] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.685648] i8042: [47] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.687412] i8042: [47] 14 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.687511] i8042: [48] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.687521] i8042: [48] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.687579] i8042: [48] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.687903] i8042: [49] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.687912] i8042: [49] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.689469] i8042: [49] 3c -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.689584] i8042: [50] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.689593] i8042: [50] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.689708] i8042: [50] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.692040] i8042: [50] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.692049] i8042: [50] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.694122] i8042: [51] 28 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.696483] i8042: [51] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.696493] i8042: [51] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.696603] i8042: [51] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.698117] i8042: [52] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.698127] i8042: [52] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.699684] i8042: [52] 14 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.701040] i8042: [53] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.701050] i8042: [53] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.701160] i8042: [53] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.701271] i8042: [54] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.701285] i8042: [54] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.703048] i8042: [54] 14 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.705370] i8042: [55] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.705380] i8042: [55] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.705438] i8042: [55] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.705477] i8042: [55] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.705486] i8042: [55] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.706888] i8042: [56] 3c -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.706969] i8042: [56] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.706978] i8042: [56] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.707036] i8042: [56] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.707413] i8042: [57] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.707423] i8042: [57] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.709342] i8042: [57] 28 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.711047] i8042: [58] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.711057] i8042: [58] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.711167] i8042: [58] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.711389] i8042: [59] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.711399] i8042: [59] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.712955] i8042: [59] 14 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.715305] i8042: [60] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.715311] i8042: [60] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.715419] i8042: [60] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.715463] i8042: [60] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.715472] i8042: [60] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.717236] i8042: [61] 14 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.717282] i8042: [61] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.717292] i8042: [61] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.717349] i8042: [61] f2 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.718361] i8042: [62] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.718807] i8042: [63] 00 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.718825] i8042: [63] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.718934] i8042: [63] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.718978] i8042: [63] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.718988] i8042: [63] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.720958] i8042: [64] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.721006] i8042: [64] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.721016] i8042: [64] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.721074] i8042: [64] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.721453] i8042: [65] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.721463] i8042: [65] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.722813] i8042: [65] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.724573] i8042: [66] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.724583] i8042: [66] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.724692] i8042: [66] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.724997] i8042: [67] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.725003] i8042: [67] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.726973] i8042: [67] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.727518] i8042: [68] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.727527] i8042: [68] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.727637] i8042: [68] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.727753] i8042: [68] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.727763] i8042: [68] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.729113] i8042: [69] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.729159] i8042: [69] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.729169] i8042: [69] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.729227] i8042: [69] e9 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.730171] i8042: [70] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.730619] i8042: [71] 03 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.731070] i8042: [72] 43 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.731521] i8042: [73] 07 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.731532] i8042: [73] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.731589] i8042: [73] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.733065] i8042: [74] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.733074] i8042: [74] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.734631] i8042: [74] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.734897] i8042: [75] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.734906] i8042: [75] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.734964] i8042: [75] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.735122] i8042: [76] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.735136] i8042: [76] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.737055] i8042: [76] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.737404] i8042: [77] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.737414] i8042: [77] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.737472] i8042: [77] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.737514] i8042: [77] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.737524] i8042: [77] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.738874] i8042: [78] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.741276] i8042: [78] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.741287] i8042: [78] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.741345] i8042: [78] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.743733] i8042: [79] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.743743] i8042: [79] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.745712] i8042: [79] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.748060] i8042: [80] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.748070] i8042: [80] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 0.748179] i8042: [80] e9 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 0.750505] i8042: [81] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.753325] i8042: [81] 03 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.754669] i8042: [82] 43 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 0.756016] i8042: [82] 07 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.136249] i8042: [132] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.136308] i8042: [132] f6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.138850] i8042: [132] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.138865] i8042: [132] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.140841] i8042: [132] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.143403] i8042: [133] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.143417] i8042: [133] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.143475] i8042: [133] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.145934] i8042: [134] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.145949] i8042: [134] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.147356] i8042: [134] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.149932] i8042: [135] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.149942] i8042: [135] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.150000] i8042: [135] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.152368] i8042: [136] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.152383] i8042: [136] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.154353] i8042: [136] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.156877] i8042: [137] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.156891] i8042: [137] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.156949] i8042: [137] e9 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.159471] i8042: [137] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.162295] i8042: [138] 00 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.167834] i8042: [139] 00 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.172304] i8042: [141] 64 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.172320] i8042: [141] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.172378] i8042: [141] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.174920] i8042: [141] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.174934] i8042: [141] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.176698] i8042: [141] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.179266] i8042: [142] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.179280] i8042: [142] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.179338] i8042: [142] e7 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.181859] i8042: [143] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.181873] i8042: [143] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.183229] i8042: [143] e7 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.185780] i8042: [144] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.185794] i8042: [144] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.185852] i8042: [144] e7 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.188395] i8042: [145] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.188410] i8042: [145] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.190282] i8042: [145] e9 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.192857] i8042: [146] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.196229] i8042: [147] 10 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.201669] i8042: [148] 00 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.206238] i8042: [149] 64 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.206252] i8042: [149] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.206310] i8042: [149] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.208844] i8042: [150] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.208858] i8042: [150] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.210731] i8042: [150] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.213304] i8042: [151] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.213318] i8042: [151] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.213376] i8042: [151] ec -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.215918] i8042: [151] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.215932] i8042: [151] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.217282] i8042: [152] ec -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.219837] i8042: [152] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.219851] i8042: [152] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.219909] i8042: [152] ec -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.222430] i8042: [153] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.222444] i8042: [153] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.224213] i8042: [153] e9 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.226782] i8042: [154] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.230264] i8042: [155] 10 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.235865] i8042: [156] 00 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.240273] i8042: [158] 64 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.240288] i8042: [158] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.240346] i8042: [158] ea -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.242896] i8042: [158] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.242912] i8042: [158] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.244683] i8042: [158] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.247064] i8042: [159] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.247078] i8042: [159] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.247135] i8042: [159] 03 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.249683] i8042: [160] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.249698] i8042: [160] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.251054] i8042: [160] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.253608] i8042: [161] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.253623] i8042: [161] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.253681] i8042: [161] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.256062] i8042: [162] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.256077] i8042: [162] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.258104] i8042: [162] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.260645] i8042: [163] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.260660] i8042: [163] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.260718] i8042: [163] e9 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.263082] i8042: [163] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.265935] i8042: [164] 00 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.267426] i8042: [164] 03 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.271510] i8042: [165] 64 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.271525] i8042: [165] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.271583] i8042: [165] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.273935] i8042: [166] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.273946] i8042: [166] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.275509] i8042: [166] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.277934] i8042: [167] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.277956] i8042: [167] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.278015] i8042: [167] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.280556] i8042: [168] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.280569] i8042: [168] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.282442] i8042: [168] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.284937] i8042: [169] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.284952] i8042: [169] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.285010] i8042: [169] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.287540] i8042: [169] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.287555] i8042: [169] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.288912] i8042: [170] e9 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.291480] i8042: [170] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.295802] i8042: [171] 00 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.300393] i8042: [173] 00 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.305924] i8042: [174] 64 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.305940] i8042: [174] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.305998] i8042: [174] e1 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.308446] i8042: [175] fe <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.308461] i8042: [175] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.309919] i8042: [175] f5 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.312465] i8042: [176] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.312480] i8042: [176] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.312537] i8042: [176] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.314934] i8042: [176] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.314948] i8042: [176] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.316866] i8042: [176] 66 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.319419] i8042: [177] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.319433] i8042: [177] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.319491] i8042: [177] 88 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.321935] i8042: [178] fe <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.321949] i8042: [178] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.323357] i8042: [178] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.325929] i8042: [179] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.325943] i8042: [179] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.326001] i8042: [179] 66 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.328545] i8042: [180] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.328559] i8042: [180] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.330432] i8042: [180] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.332933] i8042: [181] fe <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.332947] i8042: [181] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.333005] i8042: [181] e9 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.335526] i8042: [181] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.338346] i8042: [182] 00 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.343782] i8042: [183] 00 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.348200] i8042: [185] 66 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.348401] i8042: [185] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.348458] i8042: [185] f4 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.350934] i8042: [185] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.350958] i8042: [185] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.353084] i8042: [186] f6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.355652] i8042: [186] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.355667] i8042: [186] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.355724] i8042: [186] ff -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.358095] i8042: [187] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.741353] i8042: [283] aa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.746884] i8042: [284] 00 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.746900] i8042: [284] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.746958] i8042: [284] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.749355] i8042: [285] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.749369] i8042: [285] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.750880] i8042: [285] c8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.753355] i8042: [286] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.753369] i8042: [286] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.753427] i8042: [286] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.755932] i8042: [286] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.755945] i8042: [286] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.757967] i8042: [286] 64 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.760354] i8042: [288] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.760368] i8042: [288] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.760426] i8042: [288] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.762934] i8042: [288] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.762948] i8042: [288] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.764298] i8042: [288] 50 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.766877] i8042: [289] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.766891] i8042: [289] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.766949] i8042: [289] f2 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.769354] i8042: [290] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.772745] i8042: [291] 00 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.772760] i8042: [291] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.772818] i8042: [291] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.775350] i8042: [291] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.775359] i8042: [291] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.776761] i8042: [292] c8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.779296] i8042: [292] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.779307] i8042: [292] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.779364] i8042: [292] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.781906] i8042: [293] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.781919] i8042: [293] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.783792] i8042: [293] c8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.786338] i8042: [294] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.786353] i8042: [294] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.786411] i8042: [294] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.788937] i8042: [295] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.788951] i8042: [295] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.790307] i8042: [295] 50 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.792879] i8042: [296] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.792893] i8042: [296] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.792951] i8042: [296] f2 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.795352] i8042: [296] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.798750] i8042: [297] 00 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.798765] i8042: [297] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.798823] i8042: [297] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.801352] i8042: [298] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.801366] i8042: [298] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.802722] i8042: [298] c8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.805298] i8042: [299] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.805312] i8042: [299] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.805370] i8042: [299] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.807913] i8042: [299] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.807927] i8042: [299] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.809845] i8042: [299] 64 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.812354] i8042: [301] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.812369] i8042: [301] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.812426] i8042: [301] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.814936] i8042: [301] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.814949] i8042: [301] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.816299] i8042: [301] 50 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.818877] i8042: [302] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.818891] i8042: [302] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.818949] i8042: [302] f2 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.821355] i8042: [303] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.824746] i8042: [304] 00 <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.824762] i8042: [304] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.824820] i8042: [304] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.827351] i8042: [304] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.827364] i8042: [304] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.828714] i8042: [304] 64 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.831297] i8042: [305] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.831311] i8042: [305] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.831369] i8042: [305] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.833912] i8042: [306] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.833926] i8042: [306] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.835850] i8042: [306] 03 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.838354] i8042: [307] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.838369] i8042: [307] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.838427] i8042: [307] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.840934] i8042: [308] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.841022] input: PS/2 Generic Mouse as /devices/platform/i8042/serio2/input/input10
Apr 2 22:07:02 test kernel: [ 1.841293] i8042: [308] 91 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.842332] i8042: [308] f4 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.844874] i8042: [309] fa <- i8042 (interrupt, 3, 12)
Apr 2 22:07:02 test kernel: [ 1.844914] i8042: [309] 92 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.844972] i8042: [309] f2 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.864710] i8042: [314] MUX error, status is b5, data is fe
Apr 2 22:07:02 test kernel: [ 1.864713] i8042: [314] fe <- i8042 (interrupt, 4, 12, timeout)
Apr 2 22:07:02 test kernel: [ 1.864746] i8042: [314] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.866510] i8042: [314] f2 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.868937] i8042: [315] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.872355] i8042: [316] 00 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.872369] i8042: [316] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.872428] i8042: [316] f6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.874893] i8042: [316] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.874910] i8042: [316] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.876833] i8042: [316] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.879255] i8042: [317] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.879268] i8042: [317] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.879326] i8042: [317] 0a -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.881751] i8042: [318] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.881766] i8042: [318] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.883121] i8042: [318] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.885585] i8042: [319] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.885599] i8042: [319] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.885657] i8042: [319] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.887932] i8042: [319] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.887946] i8042: [319] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.889870] i8042: [319] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.892198] i8042: [321] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.892240] i8042: [321] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.892298] i8042: [321] 14 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.894731] i8042: [321] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.894745] i8042: [321] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.896101] i8042: [321] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.898580] i8042: [322] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.898593] i8042: [322] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.898651] i8042: [322] 3c -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.900934] i8042: [323] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.900949] i8042: [323] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.903027] i8042: [323] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.905352] i8042: [324] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.905366] i8042: [324] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.905424] i8042: [324] 28 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.907850] i8042: [324] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.907863] i8042: [324] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.909213] i8042: [324] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.911481] i8042: [325] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.911495] i8042: [325] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.911552] i8042: [325] 14 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.913934] i8042: [326] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.913949] i8042: [326] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.915768] i8042: [326] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.918242] i8042: [327] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.918256] i8042: [327] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.918314] i8042: [327] 14 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.920748] i8042: [328] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.920762] i8042: [328] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.922118] i8042: [328] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.924413] i8042: [329] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.924427] i8042: [329] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.924485] i8042: [329] 3c -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.926882] i8042: [329] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.926896] i8042: [329] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.928763] i8042: [329] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.931251] i8042: [330] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.931265] i8042: [330] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.931323] i8042: [330] 28 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.933733] i8042: [331] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.933748] i8042: [331] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.935103] i8042: [331] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.937414] i8042: [332] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.937428] i8042: [332] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.937486] i8042: [332] 14 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.939898] i8042: [332] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.939912] i8042: [332] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.941727] i8042: [332] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.944177] i8042: [334] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.944191] i8042: [334] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.944249] i8042: [334] 14 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.946658] i8042: [334] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.946672] i8042: [334] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.948021] i8042: [334] f2 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.950350] i8042: [335] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.954936] i8042: [336] 00 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.954952] i8042: [336] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.955009] i8042: [336] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.957354] i8042: [337] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.957368] i8042: [337] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.958827] i8042: [337] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.961289] i8042: [338] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.961303] i8042: [338] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.961361] i8042: [338] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.963796] i8042: [338] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.963810] i8042: [338] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.965626] i8042: [338] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.967935] i8042: [339] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.967949] i8042: [339] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.968007] i8042: [339] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.970352] i8042: [340] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.970366] i8042: [340] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.971819] i8042: [340] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.974266] i8042: [341] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.974280] i8042: [341] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.974338] i8042: [341] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.976774] i8042: [342] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.976788] i8042: [342] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.978661] i8042: [342] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.980971] i8042: [343] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.980985] i8042: [343] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.981043] i8042: [343] e9 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.983352] i8042: [343] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.986231] i8042: [344] 00 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.991658] i8042: [345] 47 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.996250] i8042: [347] 17 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 1.996265] i8042: [347] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 1.996323] i8042: [347] ff -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 1.998774] i8042: [347] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.333313] i8042: [431] aa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.336881] i8042: [432] 00 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.336897] i8042: [432] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.336955] i8042: [432] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.339351] i8042: [432] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.339365] i8042: [432] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.341289] i8042: [432] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.343732] i8042: [433] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.343745] i8042: [433] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.343803] i8042: [433] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.346236] i8042: [434] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.346251] i8042: [434] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.347605] i8042: [434] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.349935] i8042: [435] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.349949] i8042: [435] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.350007] i8042: [435] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.352353] i8042: [436] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.352367] i8042: [436] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.354239] i8042: [436] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.356714] i8042: [437] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.356728] i8042: [437] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.356786] i8042: [437] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.359215] i8042: [437] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.359228] i8042: [437] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.360584] i8042: [437] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.362933] i8042: [438] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.362947] i8042: [438] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.363005] i8042: [438] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.365353] i8042: [439] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.365367] i8042: [439] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.367291] i8042: [439] e9 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.369807] i8042: [440] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.373183] i8042: [441] 00 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.378630] i8042: [442] 47 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.383211] i8042: [443] 17 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.383226] i8042: [443] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.383284] i8042: [443] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.385716] i8042: [444] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.385731] i8042: [444] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.387604] i8042: [444] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.389935] i8042: [445] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.389948] i8042: [445] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.390006] i8042: [445] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.392354] i8042: [446] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.392368] i8042: [446] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.393827] i8042: [446] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.396277] i8042: [447] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.396291] i8042: [447] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.396349] i8042: [447] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.398758] i8042: [447] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.398771] i8042: [447] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.400587] i8042: [447] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.402935] i8042: [448] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.402948] i8042: [448] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.403006] i8042: [448] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.405354] i8042: [449] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.405369] i8042: [449] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.406827] i8042: [449] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.409273] i8042: [450] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.409287] i8042: [450] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.409345] i8042: [450] 03 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.411754] i8042: [450] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.411768] i8042: [450] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.413693] i8042: [450] e9 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.416168] i8042: [452] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.419393] i8042: [452] 01 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.420803] i8042: [453] c0 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.424937] i8042: [454] b1 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.424951] i8042: [454] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.425009] i8042: [454] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.427353] i8042: [454] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.427366] i8042: [454] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.428820] i8042: [454] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.431279] i8042: [455] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.431293] i8042: [455] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.431351] i8042: [455] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.433764] i8042: [456] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.433779] i8042: [456] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.435755] i8042: [456] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.438218] i8042: [457] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.438233] i8042: [457] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.438291] i8042: [457] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.440721] i8042: [458] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.440735] i8042: [458] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.442090] i8042: [458] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.444401] i8042: [459] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.444415] i8042: [459] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.444473] i8042: [459] 02 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.446878] i8042: [459] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.446892] i8042: [459] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.448661] i8042: [459] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.450964] i8042: [460] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.450977] i8042: [460] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.451035] i8042: [460] 02 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.453355] i8042: [461] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.453370] i8042: [461] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.454828] i8042: [461] e9 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.457305] i8042: [462] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.461767] i8042: [463] 08 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.466236] i8042: [464] 4e <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.471679] i8042: [465] 26 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.471694] i8042: [465] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.471752] i8042: [465] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.474207] i8042: [466] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.474222] i8042: [466] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.475578] i8042: [466] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.477935] i8042: [467] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.477949] i8042: [467] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.478007] i8042: [467] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.480353] i8042: [468] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.480367] i8042: [468] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.482343] i8042: [468] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.484807] i8042: [469] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.484821] i8042: [469] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.484879] i8042: [469] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.487299] i8042: [469] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.487313] i8042: [469] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.488669] i8042: [469] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.490949] i8042: [470] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.490963] i8042: [470] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.491021] i8042: [470] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.493353] i8042: [471] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.493367] i8042: [471] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.495291] i8042: [471] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.497738] i8042: [472] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.497752] i8042: [472] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.497810] i8042: [472] 02 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.500221] i8042: [473] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.500236] i8042: [473] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.501591] i8042: [473] e9 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.503934] i8042: [473] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.508348] i8042: [475] d0 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.509781] i8042: [475] 47 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.512936] i8042: [476] 11 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.512950] i8042: [476] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.513008] i8042: [476] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.515351] i8042: [476] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.515365] i8042: [476] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.517284] i8042: [476] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.519736] i8042: [477] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.519750] i8042: [477] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.519807] i8042: [477] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.522229] i8042: [478] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.522243] i8042: [478] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.523599] i8042: [478] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.525936] i8042: [479] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.525950] i8042: [479] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.526008] i8042: [479] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.528354] i8042: [480] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.528368] i8042: [480] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.530344] i8042: [480] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.532804] i8042: [481] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.532818] i8042: [481] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.532876] i8042: [481] 02 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.535285] i8042: [481] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.535299] i8042: [481] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.536655] i8042: [481] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.538940] i8042: [482] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.538953] i8042: [482] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.539011] i8042: [482] 01 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.541354] i8042: [483] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.541369] i8042: [483] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.543240] i8042: [483] e9 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.545717] i8042: [484] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.549215] i8042: [485] a0 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.554827] i8042: [486] 00 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.559223] i8042: [487] 00 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.559238] i8042: [487] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.559296] i8042: [487] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.561741] i8042: [488] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.561755] i8042: [488] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.563525] i8042: [488] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.565934] i8042: [489] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.565948] i8042: [489] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.566006] i8042: [489] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.568355] i8042: [490] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.568370] i8042: [490] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.569776] i8042: [490] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.572239] i8042: [491] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.572253] i8042: [491] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.572311] i8042: [491] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.574743] i8042: [491] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.574757] i8042: [491] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.576682] i8042: [491] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.578948] i8042: [492] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.578958] i8042: [492] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.579016] i8042: [492] 03 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.581353] i8042: [493] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.581367] i8042: [493] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.582827] i8042: [493] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.585289] i8042: [494] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.585303] i8042: [494] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.585361] i8042: [494] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.587794] i8042: [494] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.587808] i8042: [494] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.589578] i8042: [494] e9 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.591932] i8042: [495] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.595418] i8042: [496] 02 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.596833] i8042: [497] 00 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.600940] i8042: [498] 00 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.600955] i8042: [498] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.601013] i8042: [498] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.603350] i8042: [498] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.603363] i8042: [498] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.604817] i8042: [498] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.607276] i8042: [499] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.607290] i8042: [499] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.607348] i8042: [499] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.609781] i8042: [500] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.609795] i8042: [500] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.611616] i8042: [500] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.613935] i8042: [501] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.613949] i8042: [501] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.614007] i8042: [501] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.616231] i8042: [502] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.616291] i8042: [502] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.617796] i8042: [502] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.620264] i8042: [503] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.620278] i8042: [503] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.620336] i8042: [503] 02 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.622768] i8042: [503] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.622781] i8042: [503] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.624654] i8042: [503] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.626941] i8042: [504] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.626955] i8042: [504] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.627013] i8042: [504] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.629352] i8042: [505] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.629367] i8042: [505] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.630774] i8042: [505] e9 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.633290] i8042: [506] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.637619] i8042: [507] 38 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.642210] i8042: [508] 80 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.647730] i8042: [509] 53 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.647745] i8042: [509] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.647803] i8042: [509] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.650236] i8042: [510] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.650250] i8042: [510] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.651606] i8042: [510] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.653934] i8042: [511] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.653948] i8042: [511] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.654006] i8042: [511] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.656354] i8042: [512] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.656368] i8042: [512] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.658241] i8042: [512] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.660703] i8042: [513] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.660718] i8042: [513] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.660776] i8042: [513] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.663185] i8042: [513] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.663198] i8042: [513] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.664554] i8042: [513] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.666934] i8042: [514] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.666948] i8042: [514] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.667006] i8042: [514] 03 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.669354] i8042: [515] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.669368] i8042: [515] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.671396] i8042: [515] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.673846] i8042: [516] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.673860] i8042: [516] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.673918] i8042: [516] 01 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.676337] i8042: [517] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.676351] i8042: [517] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.677707] i8042: [517] e9 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.680225] i8042: [518] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.684405] i8042: [519] a1 <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.685813] i8042: [519] 3f <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.688991] i8042: [520] 8d <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.689005] psmouse serio4: synaptics: queried max coordinates: x [..5182], y [..4518]
Apr 2 22:07:02 test kernel: [ 2.689148] i8042: [520] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.689206] i8042: [520] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.691660] i8042: [520] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.691674] i8042: [520] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.693651] i8042: [520] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.695937] i8042: [521] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.695950] i8042: [521] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.696008] i8042: [521] 03 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.698351] i8042: [522] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.698365] i8042: [522] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.699818] i8042: [522] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.702264] i8042: [523] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.702278] i8042: [523] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.702336] i8042: [523] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.704766] i8042: [524] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.704781] i8042: [524] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.706550] i8042: [524] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.708936] i8042: [525] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.708950] i8042: [525] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.709008] i8042: [525] 01 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.711351] i8042: [525] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.711365] i8042: [525] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.712818] i8042: [525] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.715293] i8042: [526] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.715307] i8042: [526] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.715364] i8042: [526] 01 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.717778] i8042: [527] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.717793] i8042: [527] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.719665] i8042: [527] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.721972] i8042: [528] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.721986] i8042: [528] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.722044] i8042: [528] 14 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.724285] i8042: [529] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.724302] psmouse serio4: synaptics: Touchpad model: 1, fw: 7.0, id: 0x1c0b1, caps: 0xd04711/0xa00000/0x20000/0x0, board id: 0, fw id: 544294
Apr 2 22:07:02 test kernel: [ 2.724456] i8042: [529] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.725805] i8042: [529] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.728284] i8042: [530] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.728299] i8042: [530] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.728357] i8042: [530] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.730768] i8042: [530] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.730782] i8042: [530] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.732545] i8042: [530] 03 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.734934] i8042: [531] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.734948] i8042: [531] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.735006] i8042: [531] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.737354] i8042: [532] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.737368] i8042: [532] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.738827] i8042: [532] 00 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.741268] i8042: [533] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.741283] i8042: [533] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.741341] i8042: [533] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.743753] i8042: [533] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.743767] i8042: [533] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.745686] i8042: [533] 01 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.747978] i8042: [534] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.747992] i8042: [534] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.748050] i8042: [534] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.750352] i8042: [535] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.750365] i8042: [535] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.751870] i8042: [535] 01 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.754296] i8042: [536] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.754310] i8042: [536] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.754368] i8042: [536] f3 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.756791] i8042: [537] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.756805] i8042: [537] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.758574] i8042: [537] 14 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.760935] i8042: [538] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.760949] i8042: [538] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.761007] i8042: [538] e8 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.763351] i8042: [538] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.763365] i8042: [538] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.764819] i8042: [538] 03 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.767267] i8042: [539] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.767281] i8042: [539] 93 -> i8042 (command)
Apr 2 22:07:02 test kernel: [ 2.767339] i8042: [539] e6 -> i8042 (parameter)
Apr 2 22:07:02 test kernel: [ 2.769775] i8042: [540] fa <- i8042 (interrupt, 5, 12)
Apr 2 22:07:02 test kernel: [ 2.769869] input: SynPS/2 Synaptics TouchPad as /devices/platform/i8042/serio4/input/input14
--
Ondrej Zary
^ permalink raw reply
* Re: Sony Vaio VGN-CS31S touch sensor buttons breaking touchpad
From: Dmitry Torokhov @ 2018-04-02 21:05 UTC (permalink / raw)
To: Ondrej Zary; +Cc: linux-input, linux-kernel
In-Reply-To: <201804022239.59370.linux@rainbow-software.org>
On Mon, Apr 02, 2018 at 10:39:59PM +0200, Ondrej Zary wrote:
> On Sunday 01 April 2018 23:21:55 Ondrej Zary wrote:
> > Hello,
> > I got a Sony Vaio VGN-CS31S laptop with Synaptics touchpad that exhibits
> > weird behavior. It seems to work until I touch the "Touch Sensor Buttons"
> > bar above the keyboard - then the buttons start to act weirdly: click or
> > remain pressed (sometimes it breaks even without touching the bar).
> >
> > It seems to be a known problem with VGN-CS series:
> > https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-input-synaptics/+bug
> >/774877 https://wiki.freegeekvancouver.org/article/Laptop_Troubleshooting
> > (mentions nasty partial workaround: psmouse.resetafter=1)
> >
> > Many models of the VGN-CS series have the Touch Sensor Buttons:
> > ftp://124.40.41.224/PUB/MANUALS/SWT/Z009/Z009690111.PDF
> >
> > From the hardware side (can be found in MBX-196 Quanta GD2 schematic), the
> > touch bar is a separate PS/2 device connected to third PS/2 port of the EC
> > (Embedded Controller) WPC775L. The touchpad is on the 1st PS/2 port, 2nd
> > port is unused. However, the i8042 does not seem to support multiplexing,
> > the firmware probably combines the data internally somehow.
>
> Good news: it supports multiplexing but i8042_nomux is set because of:
> /*
> * Most (all?) VAIOs do not have external PS/2 ports nor
> * they implement active multiplexing properly, and
> * MUX discovery usually messes up keyboard/touchpad.
> */
> .matches = {
> DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
> DMI_MATCH(DMI_BOARD_NAME, "VAIO"),
> },
> in drivers/input/serio/i8042-x86ia64io.h
> (How can this be modified to exclude VGN-CS series?)
I guess we'd need a whitelist for MUXes, because older VAIOs would
behave really really badly when one tried to probe for active
multiplexing...
If you enable MUX, does it survive suspend/resume?
Thanks.
--
Dmitry
^ permalink raw reply
* Re: Sony Vaio VGN-CS31S touch sensor buttons breaking touchpad
From: Ondrej Zary @ 2018-04-02 21:19 UTC (permalink / raw)
To: Dmitry Torokhov; +Cc: linux-input, linux-kernel
In-Reply-To: <20180402210529.GA62080@dtor-ws>
On Monday 02 April 2018 23:05:29 Dmitry Torokhov wrote:
> On Mon, Apr 02, 2018 at 10:39:59PM +0200, Ondrej Zary wrote:
> > On Sunday 01 April 2018 23:21:55 Ondrej Zary wrote:
> > > Hello,
> > > I got a Sony Vaio VGN-CS31S laptop with Synaptics touchpad that
> > > exhibits weird behavior. It seems to work until I touch the "Touch
> > > Sensor Buttons" bar above the keyboard - then the buttons start to act
> > > weirdly: click or remain pressed (sometimes it breaks even without
> > > touching the bar).
> > >
> > > It seems to be a known problem with VGN-CS series:
> > > https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-input-synaptics/
> > >+bug /774877
> > > https://wiki.freegeekvancouver.org/article/Laptop_Troubleshooting
> > > (mentions nasty partial workaround: psmouse.resetafter=1)
> > >
> > > Many models of the VGN-CS series have the Touch Sensor Buttons:
> > > ftp://124.40.41.224/PUB/MANUALS/SWT/Z009/Z009690111.PDF
> > >
> > > From the hardware side (can be found in MBX-196 Quanta GD2 schematic),
> > > the touch bar is a separate PS/2 device connected to third PS/2 port of
> > > the EC (Embedded Controller) WPC775L. The touchpad is on the 1st PS/2
> > > port, 2nd port is unused. However, the i8042 does not seem to support
> > > multiplexing, the firmware probably combines the data internally
> > > somehow.
> >
> > Good news: it supports multiplexing but i8042_nomux is set because of:
> > /*
> > * Most (all?) VAIOs do not have external PS/2 ports nor
> > * they implement active multiplexing properly, and
> > * MUX discovery usually messes up keyboard/touchpad.
> > */
> > .matches = {
> > DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
> > DMI_MATCH(DMI_BOARD_NAME, "VAIO"),
> > },
> > in drivers/input/serio/i8042-x86ia64io.h
> > (How can this be modified to exclude VGN-CS series?)
>
> I guess we'd need a whitelist for MUXes, because older VAIOs would
> behave really really badly when one tried to probe for active
> multiplexing...
>
> If you enable MUX, does it survive suspend/resume?
Yes, suspends and resumes fine.
(Suspend takes 20-25 seconds after the HDD stops but it's the same regardless
of MUX.)
--
Ondrej Zary
^ permalink raw reply
* Re: [PATCH] Input: synaptics-rmi4 - Fix an unchecked out of memory error path
From: Andrew Duggan @ 2018-04-03 0:52 UTC (permalink / raw)
To: Christophe JAILLET, dmitry.torokhov, benjamin.tissoires, gregkh
Cc: linux-input, linux-kernel, kernel-janitors
In-Reply-To: <20180402140327.7715-1-christophe.jaillet@wanadoo.fr>
On 04/02/2018 07:03 AM, Christophe JAILLET wrote:
> When extending the rmi_spi buffers, we must check that no out of memory
> error occurs, otherwise we may access data above the currently allocated
> memory.
>
> Propagate the error code returned by 'rmi_spi_manage_pools()' instead.
Yep, that definitely looks like an oversight on my part. Thanks for the fix.
Andrew
> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Reviewed-by: Andrew Duggan <aduggan@synaptics.com>
> ---
> drivers/input/rmi4/rmi_spi.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/input/rmi4/rmi_spi.c b/drivers/input/rmi4/rmi_spi.c
> index 76edbf2c1bce..082defc329a8 100644
> --- a/drivers/input/rmi4/rmi_spi.c
> +++ b/drivers/input/rmi4/rmi_spi.c
> @@ -147,8 +147,11 @@ static int rmi_spi_xfer(struct rmi_spi_xport *rmi_spi,
> if (len > RMI_SPI_XFER_SIZE_LIMIT)
> return -EINVAL;
>
> - if (rmi_spi->xfer_buf_size < len)
> - rmi_spi_manage_pools(rmi_spi, len);
> + if (rmi_spi->xfer_buf_size < len) {
> + ret = rmi_spi_manage_pools(rmi_spi, len);
> + if (ret < 0)
> + return ret;
> + }
>
> if (addr == 0)
> /*
^ permalink raw reply
* Re: [PATCH 2/2] HID: i2c-hid: Fix resume issue on Raydium touchscreen device
From: Aaron Ma @ 2018-04-03 9:16 UTC (permalink / raw)
To: Jiri Kosina; +Cc: Benjamin Tissoires, lkml, linux-input
In-Reply-To: <e8e8a5d2-ee14-54a8-b30b-66d5cc9404b1@canonical.com>
Hi Jiri:
This patch is pending for long time.
Could you merge this single patch to upstream?
Regards,
Aaron
^ permalink raw reply
* Re: [PATCH v3 2/4] mfd: add Gateworks System Controller core driver
From: Tim Harvey @ 2018-04-03 15:48 UTC (permalink / raw)
To: Lee Jones, Rob Herring, Mark Rutland, Mark Brown, Dmitry Torokhov,
Wim Van Sebroeck, Guenter Roeck
Cc: linux-kernel, devicetree, linux-arm-kernel, linux-hwmon,
linux-input, linux-watchdog, Randy Dunlap
In-Reply-To: <1522250043-8065-3-git-send-email-tharvey@gateworks.com>
On Wed, Mar 28, 2018 at 8:14 AM, Tim Harvey <tharvey@gateworks.com> wrote:
> The Gateworks System Controller (GSC) is an I2C slave controller
> implemented with an MSP430 micro-controller whose firmware embeds the
> following features:
> - I/O expander (16 GPIO's) using PCA955x protocol
> - Real Time Clock using DS1672 protocol
> - User EEPROM using AT24 protocol
> - HWMON using custom protocol
> - Interrupt controller with tamper detect, user pushbotton
> - Watchdog controller capable of full board power-cycle
> - Power Control capable of full board power-cycle
>
> see http://trac.gateworks.com/wiki/gsc for more details
>
<snip>
> +
> +/*
> + * gsc_powerdown - API to use GSC to power down board for a specific time
> + *
> + * secs - number of seconds to remain powered off
> + */
> +static int gsc_powerdown(struct gsc_dev *gsc, unsigned long secs)
> +{
> + int ret;
> + unsigned char regs[4];
> +
> + dev_info(&gsc->i2c->dev, "GSC powerdown for %ld seconds\n",
> + secs);
> + regs[0] = secs & 0xff;
> + regs[1] = (secs >> 8) & 0xff;
> + regs[2] = (secs >> 16) & 0xff;
> + regs[3] = (secs >> 24) & 0xff;
> + ret = regmap_bulk_write(gsc->regmap, GSC_TIME_ADD, regs, 4);
> +
> + return ret;
> +}
Any feedback on the 'powerdown' sysfs attribute that hooks to this
function? This allows the GSC to disable the board primary power
supply for 2^32 seconds and is often used to 'reset' the board
although it could also be used to put the board in a power down state
longer. I'm wondering if there is a more appropriate API for this in
the kernel that I don't know about.
I would also like to register a restart handler using this but I
believe that ARM restart handlers currently can not use I2C - is that
correct?
Regards,
Tim
^ permalink raw reply
* Re: [PATCH v3 2/4] mfd: add Gateworks System Controller core driver
From: Andrew Lunn @ 2018-04-03 16:47 UTC (permalink / raw)
To: Tim Harvey
Cc: Lee Jones, Rob Herring, Mark Rutland, Mark Brown, Dmitry Torokhov,
Wim Van Sebroeck, Guenter Roeck, linux-hwmon, devicetree,
linux-watchdog, Randy Dunlap, linux-kernel, linux-input,
linux-arm-kernel
In-Reply-To: <CAJ+vNU3-gaTcMAzo5wB6oSfE-JQC3NBVRJS5zFMTE-nVpD4F5g@mail.gmail.com>
On Tue, Apr 03, 2018 at 08:48:27AM -0700, Tim Harvey wrote:
> On Wed, Mar 28, 2018 at 8:14 AM, Tim Harvey <tharvey@gateworks.com> wrote:
> > The Gateworks System Controller (GSC) is an I2C slave controller
> > implemented with an MSP430 micro-controller whose firmware embeds the
> > following features:
> > - I/O expander (16 GPIO's) using PCA955x protocol
> > - Real Time Clock using DS1672 protocol
> > - User EEPROM using AT24 protocol
> > - HWMON using custom protocol
> > - Interrupt controller with tamper detect, user pushbotton
> > - Watchdog controller capable of full board power-cycle
> > - Power Control capable of full board power-cycle
> >
> > see http://trac.gateworks.com/wiki/gsc for more details
> >
> <snip>
> > +
> > +/*
> > + * gsc_powerdown - API to use GSC to power down board for a specific time
> > + *
> > + * secs - number of seconds to remain powered off
> > + */
> > +static int gsc_powerdown(struct gsc_dev *gsc, unsigned long secs)
> > +{
> > + int ret;
> > + unsigned char regs[4];
> > +
> > + dev_info(&gsc->i2c->dev, "GSC powerdown for %ld seconds\n",
> > + secs);
> > + regs[0] = secs & 0xff;
> > + regs[1] = (secs >> 8) & 0xff;
> > + regs[2] = (secs >> 16) & 0xff;
> > + regs[3] = (secs >> 24) & 0xff;
> > + ret = regmap_bulk_write(gsc->regmap, GSC_TIME_ADD, regs, 4);
> > +
> > + return ret;
> > +}
>
> Any feedback on the 'powerdown' sysfs attribute that hooks to this
> function? This allows the GSC to disable the board primary power
> supply for 2^32 seconds and is often used to 'reset' the board
> although it could also be used to put the board in a power down state
> longer. I'm wondering if there is a more appropriate API for this in
> the kernel that I don't know about.
Hi Tim
RTC can cause wakeup when an alarm is set. It looks like the DS1672
does not have this. But you are emulating the DS1672 right? You could
add a second emulated RTC which does support an alarm? DS3232?
> I would also like to register a restart handler using this but I
> believe that ARM restart handlers currently can not use I2C - is that
> correct?
There are plenty which use GPIOs, or UARTs. Not seen any which use
i2c. What do you think does not work at this point?
Andrew
^ permalink raw reply
* [PATCH] i8042: Enable MUX on Sony VAIO VGN-CS series to fix touchpad
From: Ondrej Zary @ 2018-04-03 17:08 UTC (permalink / raw)
To: Dmitry Torokhov; +Cc: linux-input, linux-kernel
The touch sensor buttons on Sony VAIO VGN-CS series laptops (e.g.
VGN-CS31S) are a separate PS/2 device. As the MUX is disabled for all
VAIO machines by the nomux blacklist, the data from touch sensor
buttons and touchpad are combined. The protocol used by the buttons is
probably similar to the touchpad protocol (both are Synaptics) so both
devices get enabled. The controller combines the data, creating a mess
which results in random button clicks, touchpad stopping working and
lost sync error messages:
psmouse serio1: TouchPad at isa0060/serio1/input0 lost sync at byte 4
psmouse serio1: TouchPad at isa0060/serio1/input0 lost sync at byte 1
psmouse serio1: TouchPad at isa0060/serio1/input0 lost sync at byte 1
psmouse serio1: TouchPad at isa0060/serio1/input0 lost sync at byte 1
psmouse serio1: TouchPad at isa0060/serio1/input0 lost sync at byte 1
psmouse serio1: issuing reconnect request
Add a new i8042_dmi_forcemux_table whitelist with VGN-CS.
With MUX enabled, touch sensor buttons are detected as separate device
(and left disabled as there's currently no driver), fixing all touchpad
problems.
Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
---
drivers/input/serio/i8042-x86ia64io.h | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
index 6cbbdc6e9687..56644c74828c 100644
--- a/drivers/input/serio/i8042-x86ia64io.h
+++ b/drivers/input/serio/i8042-x86ia64io.h
@@ -530,6 +530,20 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
{ }
};
+static const struct dmi_system_id __initconst i8042_dmi_forcemux_table[] = {
+ {
+ /*
+ * Sony Vaio VGN-CS series require MUX or the touch sensor
+ * buttons will disturb touchpad operation
+ */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "VGN-CS"),
+ },
+ },
+ { }
+};
+
/*
* On some Asus laptops, just running self tests cause problems.
*/
@@ -1163,6 +1177,9 @@ static int __init i8042_platform_init(void)
if (dmi_check_system(i8042_dmi_nomux_table))
i8042_nomux = true;
+ if (dmi_check_system(i8042_dmi_forcemux_table))
+ i8042_nomux = false;
+
if (dmi_check_system(i8042_dmi_notimeout_table))
i8042_notimeout = true;
--
Ondrej Zary
^ permalink raw reply related
* Re: [PATCH v3 2/4] mfd: add Gateworks System Controller core driver
From: Tim Harvey @ 2018-04-03 17:29 UTC (permalink / raw)
To: Andrew Lunn
Cc: Lee Jones, Rob Herring, Mark Rutland, Mark Brown, Dmitry Torokhov,
Wim Van Sebroeck, Guenter Roeck, linux-hwmon, devicetree,
linux-watchdog, Randy Dunlap, linux-kernel, linux-input,
linux-arm-kernel
In-Reply-To: <20180403164715.GA5676@lunn.ch>
On Tue, Apr 3, 2018 at 9:47 AM, Andrew Lunn <andrew@lunn.ch> wrote:
> On Tue, Apr 03, 2018 at 08:48:27AM -0700, Tim Harvey wrote:
>> On Wed, Mar 28, 2018 at 8:14 AM, Tim Harvey <tharvey@gateworks.com> wrote:
>> > The Gateworks System Controller (GSC) is an I2C slave controller
>> > implemented with an MSP430 micro-controller whose firmware embeds the
>> > following features:
>> > - I/O expander (16 GPIO's) using PCA955x protocol
>> > - Real Time Clock using DS1672 protocol
>> > - User EEPROM using AT24 protocol
>> > - HWMON using custom protocol
>> > - Interrupt controller with tamper detect, user pushbotton
>> > - Watchdog controller capable of full board power-cycle
>> > - Power Control capable of full board power-cycle
>> >
>> > see http://trac.gateworks.com/wiki/gsc for more details
>> >
>> <snip>
>> > +
>> > +/*
>> > + * gsc_powerdown - API to use GSC to power down board for a specific time
>> > + *
>> > + * secs - number of seconds to remain powered off
>> > + */
>> > +static int gsc_powerdown(struct gsc_dev *gsc, unsigned long secs)
>> > +{
>> > + int ret;
>> > + unsigned char regs[4];
>> > +
>> > + dev_info(&gsc->i2c->dev, "GSC powerdown for %ld seconds\n",
>> > + secs);
>> > + regs[0] = secs & 0xff;
>> > + regs[1] = (secs >> 8) & 0xff;
>> > + regs[2] = (secs >> 16) & 0xff;
>> > + regs[3] = (secs >> 24) & 0xff;
>> > + ret = regmap_bulk_write(gsc->regmap, GSC_TIME_ADD, regs, 4);
>> > +
>> > + return ret;
>> > +}
>>
>> Any feedback on the 'powerdown' sysfs attribute that hooks to this
>> function? This allows the GSC to disable the board primary power
>> supply for 2^32 seconds and is often used to 'reset' the board
>> although it could also be used to put the board in a power down state
>> longer. I'm wondering if there is a more appropriate API for this in
>> the kernel that I don't know about.
>
> Hi Tim
>
> RTC can cause wakeup when an alarm is set. It looks like the DS1672
> does not have this. But you are emulating the DS1672 right? You could
> add a second emulated RTC which does support an alarm? DS3232?
Andrew,
Thanks for the response!
An RTC alarm may indeed be a good route for the overall sleep
functionality I will look into that.
What about the 'reset' functionality? Is there something in the power
supply API for hooking in a GPIO based power switch (in my case it
would be i2c) as I would think that would be common for ATX supplies?
I didn't see anything in Documentation/power.
This is what led me to the restart handler idea. Ultimately when
someone issues a 'reboot' I would like it to use the GSC to
power-cycle the board.
>
>> I would also like to register a restart handler using this but I
>> believe that ARM restart handlers currently can not use I2C - is that
>> correct?
>
> There are plenty which use GPIOs, or UARTs. Not seen any which use
> i2c. What do you think does not work at this point?
I'll have to dig around for the e-mail thread. I recall someone else
trying to implement a restart handler for something hanging off i2c
and the issue was that by the time the (ARM) restart handler got
called interrupts were disabled making i2c unreliable. I have hooked
the ARM restart handler to my GSC powerdown in some kernels and have
had mixed results. When the handler gets called from a clean 'reboot'
things seem fine but if its called from some error condition that
halts the kernel it seems that i2c may not be reliable anymore.
Regards,
Tim
^ permalink raw reply
* [PATCH] HID: input: fix battery level reporting on BT mice
From: Dmitry Torokhov @ 2018-04-03 17:52 UTC (permalink / raw)
To: Jiri Kosina, Martin; +Cc: Benjamin Tissoires, linux-input, linux-kernel
The commit 581c4484769e ("HID: input: map digitizer battery usage")
assumed that devices having input (qas opposed to feature) report for
battery strength would report the data on their own, without the need to
be polled by the kernel; unfortunately it is not so. Many wireless mice
do not send unsolicited reports with battery strength data and have to
be polled explicitly. As a complication, stylus devices on digitizers
are not normally connected to the base and thus can not be polled - the
base can only determine battery strength in the stylus when it is in
proximity.
To solve this issue, we add a special flag that tells the kernel
to avoid polling the device (and expect unsolicited reports) and set it
when report field with physical usage of digitizer stylus (HID_DG_STYLUS).
Unless this flag is set, and we have not seen the unsolicited reports,
the kernel will attempt to poll the device when userspace attempts to
read "capacity" and "state" attributes of power_supply object
corresponding to the devices battery.
Fixes: 581c4484769e ("HID: input: map digitizer battery usage")
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=198095
Cc: stable@vger.kernel.org
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
Martin, give this patch a try and reply with your name/email if you
want to be credited for reporting/testing.
Thanks!
drivers/hid/hid-input.c | 24 +++++++++++++++++-------
include/linux/hid.h | 9 ++++++++-
2 files changed, 25 insertions(+), 8 deletions(-)
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index 6836a856c243..930652c25120 100644
--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -387,7 +387,8 @@ static int hidinput_get_battery_property(struct power_supply *psy,
break;
case POWER_SUPPLY_PROP_CAPACITY:
- if (dev->battery_report_type == HID_FEATURE_REPORT) {
+ if (dev->battery_status != HID_BATTERY_REPORTED &&
+ !dev->battery_avoid_query) {
value = hidinput_query_battery_capacity(dev);
if (value < 0)
return value;
@@ -403,17 +404,17 @@ static int hidinput_get_battery_property(struct power_supply *psy,
break;
case POWER_SUPPLY_PROP_STATUS:
- if (!dev->battery_reported &&
- dev->battery_report_type == HID_FEATURE_REPORT) {
+ if (dev->battery_status != HID_BATTERY_REPORTED &&
+ !dev->battery_avoid_query) {
value = hidinput_query_battery_capacity(dev);
if (value < 0)
return value;
dev->battery_capacity = value;
- dev->battery_reported = true;
+ dev->battery_status = HID_BATTERY_QUERIED;
}
- if (!dev->battery_reported)
+ if (dev->battery_status == HID_BATTERY_UNKNOWN)
val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
else if (dev->battery_capacity == 100)
val->intval = POWER_SUPPLY_STATUS_FULL;
@@ -486,6 +487,14 @@ static int hidinput_setup_battery(struct hid_device *dev, unsigned report_type,
dev->battery_report_type = report_type;
dev->battery_report_id = field->report->id;
+ /*
+ * Stylus is normally not connected to the device and thus we
+ * can't query the device and get meaningful battery strength.
+ * We have to wait for the device to report it on its own.
+ */
+ dev->battery_avoid_query = report_type == HID_INPUT_REPORT &&
+ field->physical == HID_DG_STYLUS;
+
dev->battery = power_supply_register(&dev->dev, psy_desc, &psy_cfg);
if (IS_ERR(dev->battery)) {
error = PTR_ERR(dev->battery);
@@ -530,9 +539,10 @@ static void hidinput_update_battery(struct hid_device *dev, int value)
capacity = hidinput_scale_battery_capacity(dev, value);
- if (!dev->battery_reported || capacity != dev->battery_capacity) {
+ if (dev->battery_status != HID_BATTERY_REPORTED ||
+ capacity != dev->battery_capacity) {
dev->battery_capacity = capacity;
- dev->battery_reported = true;
+ dev->battery_status = HID_BATTERY_REPORTED;
power_supply_changed(dev->battery);
}
}
diff --git a/include/linux/hid.h b/include/linux/hid.h
index 8da3e1f48195..26240a22978a 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -516,6 +516,12 @@ enum hid_type {
HID_TYPE_USBNONE
};
+enum hid_battery_status {
+ HID_BATTERY_UNKNOWN = 0,
+ HID_BATTERY_QUERIED, /* Kernel explicitly queried battery strength */
+ HID_BATTERY_REPORTED, /* Device sent unsolicited battery strength report */
+};
+
struct hid_driver;
struct hid_ll_driver;
@@ -558,7 +564,8 @@ struct hid_device { /* device report descriptor */
__s32 battery_max;
__s32 battery_report_type;
__s32 battery_report_id;
- bool battery_reported;
+ enum hid_battery_status battery_status;
+ bool battery_avoid_query;
#endif
unsigned int status; /* see STAT flags above */
--
2.17.0.rc1.321.gba9d0f2565-goog
--
Dmitry
^ permalink raw reply related
* Re: [PATCH] HID: input: fix battery level reporting on BT mice
From: Martin van Es @ 2018-04-03 19:08 UTC (permalink / raw)
To: Dmitry Torokhov
Cc: Jiri Kosina, Martin, Benjamin Tissoires, linux-input,
linux-kernel
In-Reply-To: <20180403175220.GA148162@dtor-ws>
[-- Attachment #1: Type: text/plain, Size: 5784 bytes --]
Hi Dimitry,
I reapplied the 3 commits I had to revert earlier and applied your patch. Have
correct battery level reading on my BT mouse back!
/sys/class/power_supply/hid-00:1f:20:fd:cb:be-battery# grep "" *
capacity:53
grep: device: Is a directory
model_name:Bluetooth Mouse M336/M337/M535
online:1
grep: power: Is a directory
grep: powers: Is a directory
present:1
scope:Device
status:Discharging
grep: subsystem: Is a directory
type:Battery
uevent:POWER_SUPPLY_NAME=hid-00:1f:20:fd:cb:be-battery
uevent:POWER_SUPPLY_PRESENT=1
uevent:POWER_SUPPLY_ONLINE=1
uevent:POWER_SUPPLY_CAPACITY=53
uevent:POWER_SUPPLY_MODEL_NAME=Bluetooth Mouse M336/M337/M535
uevent:POWER_SUPPLY_STATUS=Discharging
uevent:POWER_SUPPLY_SCOPE=Device
rdesc file is attached
Thx for the effort!
Best regards,
Martin van Es
On Tuesday, April 3, 2018 7:52:20 PM CEST Dmitry Torokhov wrote:
> The commit 581c4484769e ("HID: input: map digitizer battery usage")
> assumed that devices having input (qas opposed to feature) report for
> battery strength would report the data on their own, without the need to
> be polled by the kernel; unfortunately it is not so. Many wireless mice
> do not send unsolicited reports with battery strength data and have to
> be polled explicitly. As a complication, stylus devices on digitizers
> are not normally connected to the base and thus can not be polled - the
> base can only determine battery strength in the stylus when it is in
> proximity.
>
> To solve this issue, we add a special flag that tells the kernel
> to avoid polling the device (and expect unsolicited reports) and set it
> when report field with physical usage of digitizer stylus (HID_DG_STYLUS).
> Unless this flag is set, and we have not seen the unsolicited reports,
> the kernel will attempt to poll the device when userspace attempts to
> read "capacity" and "state" attributes of power_supply object
> corresponding to the devices battery.
>
> Fixes: 581c4484769e ("HID: input: map digitizer battery usage")
> Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=198095
> Cc: stable@vger.kernel.org
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> ---
>
> Martin, give this patch a try and reply with your name/email if you
> want to be credited for reporting/testing.
>
> Thanks!
>
> drivers/hid/hid-input.c | 24 +++++++++++++++++-------
> include/linux/hid.h | 9 ++++++++-
> 2 files changed, 25 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
> index 6836a856c243..930652c25120 100644
> --- a/drivers/hid/hid-input.c
> +++ b/drivers/hid/hid-input.c
> @@ -387,7 +387,8 @@ static int hidinput_get_battery_property(struct
> power_supply *psy, break;
>
> case POWER_SUPPLY_PROP_CAPACITY:
> - if (dev->battery_report_type == HID_FEATURE_REPORT) {
> + if (dev->battery_status != HID_BATTERY_REPORTED &&
> + !dev->battery_avoid_query) {
> value = hidinput_query_battery_capacity(dev);
> if (value < 0)
> return value;
> @@ -403,17 +404,17 @@ static int hidinput_get_battery_property(struct
> power_supply *psy, break;
>
> case POWER_SUPPLY_PROP_STATUS:
> - if (!dev->battery_reported &&
> - dev->battery_report_type == HID_FEATURE_REPORT) {
> + if (dev->battery_status != HID_BATTERY_REPORTED &&
> + !dev->battery_avoid_query) {
> value = hidinput_query_battery_capacity(dev);
> if (value < 0)
> return value;
>
> dev->battery_capacity = value;
> - dev->battery_reported = true;
> + dev->battery_status = HID_BATTERY_QUERIED;
> }
>
> - if (!dev->battery_reported)
> + if (dev->battery_status == HID_BATTERY_UNKNOWN)
> val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
> else if (dev->battery_capacity == 100)
> val->intval = POWER_SUPPLY_STATUS_FULL;
> @@ -486,6 +487,14 @@ static int hidinput_setup_battery(struct hid_device
> *dev, unsigned report_type, dev->battery_report_type = report_type;
> dev->battery_report_id = field->report->id;
>
> + /*
> + * Stylus is normally not connected to the device and thus we
> + * can't query the device and get meaningful battery strength.
> + * We have to wait for the device to report it on its own.
> + */
> + dev->battery_avoid_query = report_type == HID_INPUT_REPORT &&
> + field->physical == HID_DG_STYLUS;
> +
> dev->battery = power_supply_register(&dev->dev, psy_desc, &psy_cfg);
> if (IS_ERR(dev->battery)) {
> error = PTR_ERR(dev->battery);
> @@ -530,9 +539,10 @@ static void hidinput_update_battery(struct hid_device
> *dev, int value)
>
> capacity = hidinput_scale_battery_capacity(dev, value);
>
> - if (!dev->battery_reported || capacity != dev->battery_capacity) {
> + if (dev->battery_status != HID_BATTERY_REPORTED ||
> + capacity != dev->battery_capacity) {
> dev->battery_capacity = capacity;
> - dev->battery_reported = true;
> + dev->battery_status = HID_BATTERY_REPORTED;
> power_supply_changed(dev->battery);
> }
> }
> diff --git a/include/linux/hid.h b/include/linux/hid.h
> index 8da3e1f48195..26240a22978a 100644
> --- a/include/linux/hid.h
> +++ b/include/linux/hid.h
> @@ -516,6 +516,12 @@ enum hid_type {
> HID_TYPE_USBNONE
> };
>
> +enum hid_battery_status {
> + HID_BATTERY_UNKNOWN = 0,
> + HID_BATTERY_QUERIED, /* Kernel explicitly queried battery strength */
> + HID_BATTERY_REPORTED, /* Device sent unsolicited battery strength
report
> */ +};
> +
> struct hid_driver;
> struct hid_ll_driver;
>
> @@ -558,7 +564,8 @@ struct hid_device { /* device report
descriptor */
> __s32 battery_max;
> __s32 battery_report_type;
> __s32 battery_report_id;
> - bool battery_reported;
> + enum hid_battery_status battery_status;
> + bool battery_avoid_query;
> #endif
>
> unsigned int status; /* see STAT flags above */
[-- Attachment #2: rdesc --]
[-- Type: text/plain, Size: 20846 bytes --]
05 01 09 02 a1 01 85 02 09 01 a1 00 05 09 19 01 29 08 15 00 25 01 75 01 95 08 81 02 05 01 09 30 09 31 16 01 f8 26 ff 07 75 0c 95 02 81 06 09 38 15 81 25 7f 75 08 95 01 81 06 05 0c 0a 38 02 75 08 95 01 81 06 c0 c0 05 0c 09 01 a1 01 85 03 05 06 09 20 15 00 26 64 00 75 08 95 01 81 02 c0 06 00 ff 09 01 a1 01 85 10 75 08 95 06 15 00 26 ff 00 09 01 81 00 09 01 91 00 c0 06 00 ff 09 02 a1 01 85 11 75 08 95 13 15 00 26 ff 00 09 02 81 00 09 02 91 00 c0 05 01 09 06 a1 01 85 04 75 01 95 08 05 07 19 e0 29 e7 15 00 25 01 81 02 95 01 75 08 81 03 95 05 75 01 05 08 19 01 29 05 91 02 95 01 75 03 91 03 95 06 75 08 15 00 26 ff 00 05 07 19 00 29 ff 81 00 c0 05 0c 09 01 a1 01 85 05 15 00 25 01 75 01 95 02 0a 25 02 0a 24 02 81 02 95 01 75 06 81 03 c0 00
INPUT(2)[INPUT]
Field(0)
Physical(GenericDesktop.Pointer)
Application(GenericDesktop.Mouse)
Usage(8)
Button.0001
Button.0002
Button.0003
Button.0004
Button.0005
Button.0006
Button.0007
Button.0008
Logical Minimum(0)
Logical Maximum(1)
Report Size(1)
Report Count(8)
Report Offset(0)
Flags( Variable Absolute )
Field(1)
Physical(GenericDesktop.Pointer)
Application(GenericDesktop.Mouse)
Usage(2)
GenericDesktop.X
GenericDesktop.Y
Logical Minimum(-2047)
Logical Maximum(2047)
Report Size(12)
Report Count(2)
Report Offset(8)
Flags( Variable Relative )
Field(2)
Physical(GenericDesktop.Pointer)
Application(GenericDesktop.Mouse)
Usage(1)
GenericDesktop.Wheel
Logical Minimum(-127)
Logical Maximum(127)
Report Size(8)
Report Count(1)
Report Offset(32)
Flags( Variable Relative )
Field(3)
Physical(GenericDesktop.Pointer)
Application(GenericDesktop.Mouse)
Usage(1)
Consumer.HorizontalWheel
Logical Minimum(-127)
Logical Maximum(127)
Report Size(8)
Report Count(1)
Report Offset(40)
Flags( Variable Relative )
INPUT(3)[INPUT]
Field(0)
Application(Consumer.0001)
Usage(1)
GenericDeviceControls.BatteryStrength
Logical Minimum(0)
Logical Maximum(100)
Report Size(8)
Report Count(1)
Report Offset(0)
Flags( Variable Absolute )
INPUT(16)[INPUT]
Field(0)
Application(ff00.0001)
Usage(6)
ff00.0001
ff00.0001
ff00.0001
ff00.0001
ff00.0001
ff00.0001
Logical Minimum(0)
Logical Maximum(255)
Report Size(8)
Report Count(6)
Report Offset(0)
Flags( Array Absolute )
INPUT(17)[INPUT]
Field(0)
Application(ff00.0002)
Usage(19)
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
Logical Minimum(0)
Logical Maximum(255)
Report Size(8)
Report Count(19)
Report Offset(0)
Flags( Array Absolute )
INPUT(4)[INPUT]
Field(0)
Application(GenericDesktop.Keyboard)
Usage(8)
Keyboard.00e0
Keyboard.00e1
Keyboard.00e2
Keyboard.00e3
Keyboard.00e4
Keyboard.00e5
Keyboard.00e6
Keyboard.00e7
Logical Minimum(0)
Logical Maximum(1)
Report Size(1)
Report Count(8)
Report Offset(0)
Flags( Variable Absolute )
Field(1)
Application(GenericDesktop.Keyboard)
Usage(256)
Keyboard.0000
Keyboard.0001
Keyboard.0002
Keyboard.0003
Keyboard.0004
Keyboard.0005
Keyboard.0006
Keyboard.0007
Keyboard.0008
Keyboard.0009
Keyboard.000a
Keyboard.000b
Keyboard.000c
Keyboard.000d
Keyboard.000e
Keyboard.000f
Keyboard.0010
Keyboard.0011
Keyboard.0012
Keyboard.0013
Keyboard.0014
Keyboard.0015
Keyboard.0016
Keyboard.0017
Keyboard.0018
Keyboard.0019
Keyboard.001a
Keyboard.001b
Keyboard.001c
Keyboard.001d
Keyboard.001e
Keyboard.001f
Keyboard.0020
Keyboard.0021
Keyboard.0022
Keyboard.0023
Keyboard.0024
Keyboard.0025
Keyboard.0026
Keyboard.0027
Keyboard.0028
Keyboard.0029
Keyboard.002a
Keyboard.002b
Keyboard.002c
Keyboard.002d
Keyboard.002e
Keyboard.002f
Keyboard.0030
Keyboard.0031
Keyboard.0032
Keyboard.0033
Keyboard.0034
Keyboard.0035
Keyboard.0036
Keyboard.0037
Keyboard.0038
Keyboard.0039
Keyboard.003a
Keyboard.003b
Keyboard.003c
Keyboard.003d
Keyboard.003e
Keyboard.003f
Keyboard.0040
Keyboard.0041
Keyboard.0042
Keyboard.0043
Keyboard.0044
Keyboard.0045
Keyboard.0046
Keyboard.0047
Keyboard.0048
Keyboard.0049
Keyboard.004a
Keyboard.004b
Keyboard.004c
Keyboard.004d
Keyboard.004e
Keyboard.004f
Keyboard.0050
Keyboard.0051
Keyboard.0052
Keyboard.0053
Keyboard.0054
Keyboard.0055
Keyboard.0056
Keyboard.0057
Keyboard.0058
Keyboard.0059
Keyboard.005a
Keyboard.005b
Keyboard.005c
Keyboard.005d
Keyboard.005e
Keyboard.005f
Keyboard.0060
Keyboard.0061
Keyboard.0062
Keyboard.0063
Keyboard.0064
Keyboard.0065
Keyboard.0066
Keyboard.0067
Keyboard.0068
Keyboard.0069
Keyboard.006a
Keyboard.006b
Keyboard.006c
Keyboard.006d
Keyboard.006e
Keyboard.006f
Keyboard.0070
Keyboard.0071
Keyboard.0072
Keyboard.0073
Keyboard.0074
Keyboard.0075
Keyboard.0076
Keyboard.0077
Keyboard.0078
Keyboard.0079
Keyboard.007a
Keyboard.007b
Keyboard.007c
Keyboard.007d
Keyboard.007e
Keyboard.007f
Keyboard.0080
Keyboard.0081
Keyboard.0082
Keyboard.0083
Keyboard.0084
Keyboard.0085
Keyboard.0086
Keyboard.0087
Keyboard.0088
Keyboard.0089
Keyboard.008a
Keyboard.008b
Keyboard.008c
Keyboard.008d
Keyboard.008e
Keyboard.008f
Keyboard.0090
Keyboard.0091
Keyboard.0092
Keyboard.0093
Keyboard.0094
Keyboard.0095
Keyboard.0096
Keyboard.0097
Keyboard.0098
Keyboard.0099
Keyboard.009a
Keyboard.009b
Keyboard.009c
Keyboard.009d
Keyboard.009e
Keyboard.009f
Keyboard.00a0
Keyboard.00a1
Keyboard.00a2
Keyboard.00a3
Keyboard.00a4
Keyboard.00a5
Keyboard.00a6
Keyboard.00a7
Keyboard.00a8
Keyboard.00a9
Keyboard.00aa
Keyboard.00ab
Keyboard.00ac
Keyboard.00ad
Keyboard.00ae
Keyboard.00af
Keyboard.00b0
Keyboard.00b1
Keyboard.00b2
Keyboard.00b3
Keyboard.00b4
Keyboard.00b5
Keyboard.00b6
Keyboard.00b7
Keyboard.00b8
Keyboard.00b9
Keyboard.00ba
Keyboard.00bb
Keyboard.00bc
Keyboard.00bd
Keyboard.00be
Keyboard.00bf
Keyboard.00c0
Keyboard.00c1
Keyboard.00c2
Keyboard.00c3
Keyboard.00c4
Keyboard.00c5
Keyboard.00c6
Keyboard.00c7
Keyboard.00c8
Keyboard.00c9
Keyboard.00ca
Keyboard.00cb
Keyboard.00cc
Keyboard.00cd
Keyboard.00ce
Keyboard.00cf
Keyboard.00d0
Keyboard.00d1
Keyboard.00d2
Keyboard.00d3
Keyboard.00d4
Keyboard.00d5
Keyboard.00d6
Keyboard.00d7
Keyboard.00d8
Keyboard.00d9
Keyboard.00da
Keyboard.00db
Keyboard.00dc
Keyboard.00dd
Keyboard.00de
Keyboard.00df
Keyboard.00e0
Keyboard.00e1
Keyboard.00e2
Keyboard.00e3
Keyboard.00e4
Keyboard.00e5
Keyboard.00e6
Keyboard.00e7
Keyboard.00e8
Keyboard.00e9
Keyboard.00ea
Keyboard.00eb
Keyboard.00ec
Keyboard.00ed
Keyboard.00ee
Keyboard.00ef
Keyboard.00f0
Keyboard.00f1
Keyboard.00f2
Keyboard.00f3
Keyboard.00f4
Keyboard.00f5
Keyboard.00f6
Keyboard.00f7
Keyboard.00f8
Keyboard.00f9
Keyboard.00fa
Keyboard.00fb
Keyboard.00fc
Keyboard.00fd
Keyboard.00fe
Keyboard.00ff
Logical Minimum(0)
Logical Maximum(255)
Report Size(8)
Report Count(6)
Report Offset(16)
Flags( Array Absolute )
INPUT(5)[INPUT]
Field(0)
Application(Consumer.0001)
Usage(2)
Consumer.0225
Consumer.0224
Logical Minimum(0)
Logical Maximum(1)
Report Size(1)
Report Count(2)
Report Offset(0)
Flags( Variable Absolute )
OUTPUT(16)[OUTPUT]
Field(0)
Application(ff00.0001)
Usage(6)
ff00.0001
ff00.0001
ff00.0001
ff00.0001
ff00.0001
ff00.0001
Logical Minimum(0)
Logical Maximum(255)
Report Size(8)
Report Count(6)
Report Offset(0)
Flags( Array Absolute )
OUTPUT(17)[OUTPUT]
Field(0)
Application(ff00.0002)
Usage(19)
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
ff00.0002
Logical Minimum(0)
Logical Maximum(255)
Report Size(8)
Report Count(19)
Report Offset(0)
Flags( Array Absolute )
OUTPUT(4)[OUTPUT]
Field(0)
Application(GenericDesktop.Keyboard)
Usage(5)
LED.NumLock
LED.CapsLock
LED.ScrollLock
LED.Compose
LED.Kana
Logical Minimum(0)
Logical Maximum(1)
Report Size(1)
Report Count(5)
Report Offset(0)
Flags( Variable Absolute )
Button.0001 ---> Key.LeftBtn
Button.0002 ---> Key.RightBtn
Button.0003 ---> Key.MiddleBtn
Button.0004 ---> Key.SideBtn
Button.0005 ---> Key.ExtraBtn
Button.0006 ---> Key.ForwardBtn
Button.0007 ---> Key.BackBtn
Button.0008 ---> Key.TaskBtn
GenericDesktop.X ---> Relative.X
GenericDesktop.Y ---> Relative.Y
GenericDesktop.Wheel ---> Relative.Wheel
Consumer.HorizontalWheel ---> Relative.HWheel
GenericDeviceControls.BatteryStrength ---> Power.?
ff00.0001 ---> Sync.Report
ff00.0001 ---> Sync.Report
ff00.0001 ---> Sync.Report
ff00.0001 ---> Sync.Report
ff00.0001 ---> Sync.Report
ff00.0001 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
Keyboard.00e0 ---> Key.LeftControl
Keyboard.00e1 ---> Key.LeftShift
Keyboard.00e2 ---> Key.LeftAlt
Keyboard.00e3 ---> Key.LeftMeta
Keyboard.00e4 ---> Key.RightCtrl
Keyboard.00e5 ---> Key.RightShift
Keyboard.00e6 ---> Key.RightAlt
Keyboard.00e7 ---> Key.RightMeta
Keyboard.0000 ---> Sync.Report
Keyboard.0001 ---> Sync.Report
Keyboard.0002 ---> Sync.Report
Keyboard.0003 ---> Sync.Report
Keyboard.0004 ---> Key.A
Keyboard.0005 ---> Key.B
Keyboard.0006 ---> Key.C
Keyboard.0007 ---> Key.D
Keyboard.0008 ---> Key.E
Keyboard.0009 ---> Key.F
Keyboard.000a ---> Key.G
Keyboard.000b ---> Key.H
Keyboard.000c ---> Key.I
Keyboard.000d ---> Key.J
Keyboard.000e ---> Key.K
Keyboard.000f ---> Key.L
Keyboard.0010 ---> Key.M
Keyboard.0011 ---> Key.N
Keyboard.0012 ---> Key.O
Keyboard.0013 ---> Key.P
Keyboard.0014 ---> Key.Q
Keyboard.0015 ---> Key.R
Keyboard.0016 ---> Key.S
Keyboard.0017 ---> Key.T
Keyboard.0018 ---> Key.U
Keyboard.0019 ---> Key.V
Keyboard.001a ---> Key.W
Keyboard.001b ---> Key.X
Keyboard.001c ---> Key.Y
Keyboard.001d ---> Key.Z
Keyboard.001e ---> Key.1
Keyboard.001f ---> Key.2
Keyboard.0020 ---> Key.3
Keyboard.0021 ---> Key.4
Keyboard.0022 ---> Key.5
Keyboard.0023 ---> Key.6
Keyboard.0024 ---> Key.7
Keyboard.0025 ---> Key.8
Keyboard.0026 ---> Key.9
Keyboard.0027 ---> Key.0
Keyboard.0028 ---> Key.Enter
Keyboard.0029 ---> Key.Esc
Keyboard.002a ---> Key.Backspace
Keyboard.002b ---> Key.Tab
Keyboard.002c ---> Key.Space
Keyboard.002d ---> Key.Minus
Keyboard.002e ---> Key.Equal
Keyboard.002f ---> Key.LeftBrace
Keyboard.0030 ---> Key.RightBrace
Keyboard.0031 ---> Key.BackSlash
Keyboard.0032 ---> Key.BackSlash
Keyboard.0033 ---> Key.Semicolon
Keyboard.0034 ---> Key.Apostrophe
Keyboard.0035 ---> Key.Grave
Keyboard.0036 ---> Key.Comma
Keyboard.0037 ---> Key.Dot
Keyboard.0038 ---> Key.Slash
Keyboard.0039 ---> Key.CapsLock
Keyboard.003a ---> Key.F1
Keyboard.003b ---> Key.F2
Keyboard.003c ---> Key.F3
Keyboard.003d ---> Key.F4
Keyboard.003e ---> Key.F5
Keyboard.003f ---> Key.F6
Keyboard.0040 ---> Key.F7
Keyboard.0041 ---> Key.F8
Keyboard.0042 ---> Key.F9
Keyboard.0043 ---> Key.F10
Keyboard.0044 ---> Key.F11
Keyboard.0045 ---> Key.F12
Keyboard.0046 ---> Key.SysRq
Keyboard.0047 ---> Key.ScrollLock
Keyboard.0048 ---> Key.Pause
Keyboard.0049 ---> Key.Insert
Keyboard.004a ---> Key.Home
Keyboard.004b ---> Key.PageUp
Keyboard.004c ---> Key.Delete
Keyboard.004d ---> Key.End
Keyboard.004e ---> Key.PageDown
Keyboard.004f ---> Key.Right
Keyboard.0050 ---> Key.Left
Keyboard.0051 ---> Key.Down
Keyboard.0052 ---> Key.Up
Keyboard.0053 ---> Key.NumLock
Keyboard.0054 ---> Key.KPSlash
Keyboard.0055 ---> Key.KPAsterisk
Keyboard.0056 ---> Key.KPMinus
Keyboard.0057 ---> Key.KPPlus
Keyboard.0058 ---> Key.KPEnter
Keyboard.0059 ---> Key.KP1
Keyboard.005a ---> Key.KP2
Keyboard.005b ---> Key.KP3
Keyboard.005c ---> Key.KP4
Keyboard.005d ---> Key.KP5
Keyboard.005e ---> Key.KP6
Keyboard.005f ---> Key.KP7
Keyboard.0060 ---> Key.KP8
Keyboard.0061 ---> Key.KP9
Keyboard.0062 ---> Key.KP0
Keyboard.0063 ---> Key.KPDot
Keyboard.0064 ---> Key.102nd
Keyboard.0065 ---> Key.Compose
Keyboard.0066 ---> Key.Power
Keyboard.0067 ---> Key.KPEqual
Keyboard.0068 ---> Key.F13
Keyboard.0069 ---> Key.F14
Keyboard.006a ---> Key.F15
Keyboard.006b ---> Key.F16
Keyboard.006c ---> Key.F17
Keyboard.006d ---> Key.F18
Keyboard.006e ---> Key.F19
Keyboard.006f ---> Key.F20
Keyboard.0070 ---> Key.F21
Keyboard.0071 ---> Key.F22
Keyboard.0072 ---> Key.F23
Keyboard.0073 ---> Key.F24
Keyboard.0074 ---> Key.Open
Keyboard.0075 ---> Key.Help
Keyboard.0076 ---> Key.Props
Keyboard.0077 ---> Key.Front
Keyboard.0078 ---> Key.Stop
Keyboard.0079 ---> Key.Again
Keyboard.007a ---> Key.Undo
Keyboard.007b ---> Key.Cut
Keyboard.007c ---> Key.Copy
Keyboard.007d ---> Key.Paste
Keyboard.007e ---> Key.Find
Keyboard.007f ---> Key.Mute
Keyboard.0080 ---> Key.VolumeUp
Keyboard.0081 ---> Key.VolumeDown
Keyboard.0082 ---> Key.Unknown
Keyboard.0083 ---> Key.Unknown
Keyboard.0084 ---> Key.Unknown
Keyboard.0085 ---> Key.KPComma
Keyboard.0086 ---> Key.Unknown
Keyboard.0087 ---> Key.RO
Keyboard.0088 ---> Key.Katakana/Hiragana
Keyboard.0089 ---> Key.Yen
Keyboard.008a ---> Key.Henkan
Keyboard.008b ---> Key.Muhenkan
Keyboard.008c ---> Key.KPJpComma
Keyboard.008d ---> Key.Unknown
Keyboard.008e ---> Key.Unknown
Keyboard.008f ---> Key.Unknown
Keyboard.0090 ---> Key.Hangeul
Keyboard.0091 ---> Key.Hanja
Keyboard.0092 ---> Key.Katakana
Keyboard.0093 ---> Key.HIRAGANA
Keyboard.0094 ---> Key.Zenkaku/Hankaku
Keyboard.0095 ---> Key.Unknown
Keyboard.0096 ---> Key.Unknown
Keyboard.0097 ---> Key.Unknown
Keyboard.0098 ---> Key.Unknown
Keyboard.0099 ---> Key.Unknown
Keyboard.009a ---> Key.Unknown
Keyboard.009b ---> Key.Unknown
Keyboard.009c ---> Key.Delete
Keyboard.009d ---> Key.Unknown
Keyboard.009e ---> Key.Unknown
Keyboard.009f ---> Key.Unknown
Keyboard.00a0 ---> Key.Unknown
Keyboard.00a1 ---> Key.Unknown
Keyboard.00a2 ---> Key.Unknown
Keyboard.00a3 ---> Key.Unknown
Keyboard.00a4 ---> Key.Unknown
Keyboard.00a5 ---> Key.Unknown
Keyboard.00a6 ---> Key.Unknown
Keyboard.00a7 ---> Key.Unknown
Keyboard.00a8 ---> Key.Unknown
Keyboard.00a9 ---> Key.Unknown
Keyboard.00aa ---> Key.Unknown
Keyboard.00ab ---> Key.Unknown
Keyboard.00ac ---> Key.Unknown
Keyboard.00ad ---> Key.Unknown
Keyboard.00ae ---> Key.Unknown
Keyboard.00af ---> Key.Unknown
Keyboard.00b0 ---> Key.Unknown
Keyboard.00b1 ---> Key.Unknown
Keyboard.00b2 ---> Key.Unknown
Keyboard.00b3 ---> Key.Unknown
Keyboard.00b4 ---> Key.Unknown
Keyboard.00b5 ---> Key.Unknown
Keyboard.00b6 ---> Key.KPLeftParenthesis
Keyboard.00b7 ---> Key.KPRightParenthesis
Keyboard.00b8 ---> Key.Unknown
Keyboard.00b9 ---> Key.Unknown
Keyboard.00ba ---> Key.Unknown
Keyboard.00bb ---> Key.Unknown
Keyboard.00bc ---> Key.Unknown
Keyboard.00bd ---> Key.Unknown
Keyboard.00be ---> Key.Unknown
Keyboard.00bf ---> Key.Unknown
Keyboard.00c0 ---> Key.Unknown
Keyboard.00c1 ---> Key.Unknown
Keyboard.00c2 ---> Key.Unknown
Keyboard.00c3 ---> Key.Unknown
Keyboard.00c4 ---> Key.Unknown
Keyboard.00c5 ---> Key.Unknown
Keyboard.00c6 ---> Key.Unknown
Keyboard.00c7 ---> Key.Unknown
Keyboard.00c8 ---> Key.Unknown
Keyboard.00c9 ---> Key.Unknown
Keyboard.00ca ---> Key.Unknown
Keyboard.00cb ---> Key.Unknown
Keyboard.00cc ---> Key.Unknown
Keyboard.00cd ---> Key.Unknown
Keyboard.00ce ---> Key.Unknown
Keyboard.00cf ---> Key.Unknown
Keyboard.00d0 ---> Key.Unknown
Keyboard.00d1 ---> Key.Unknown
Keyboard.00d2 ---> Key.Unknown
Keyboard.00d3 ---> Key.Unknown
Keyboard.00d4 ---> Key.Unknown
Keyboard.00d5 ---> Key.Unknown
Keyboard.00d6 ---> Key.Unknown
Keyboard.00d7 ---> Key.Unknown
Keyboard.00d8 ---> Key.Delete
Keyboard.00d9 ---> Key.Unknown
Keyboard.00da ---> Key.Unknown
Keyboard.00db ---> Key.Unknown
Keyboard.00dc ---> Key.Unknown
Keyboard.00dd ---> Key.Unknown
Keyboard.00de ---> Key.Unknown
Keyboard.00df ---> Key.Unknown
Keyboard.00e0 ---> Key.LeftControl
Keyboard.00e1 ---> Key.LeftShift
Keyboard.00e2 ---> Key.LeftAlt
Keyboard.00e3 ---> Key.LeftMeta
Keyboard.00e4 ---> Key.RightCtrl
Keyboard.00e5 ---> Key.RightShift
Keyboard.00e6 ---> Key.RightAlt
Keyboard.00e7 ---> Key.RightMeta
Keyboard.00e8 ---> Key.PlayPause
Keyboard.00e9 ---> Key.StopCD
Keyboard.00ea ---> Key.PreviousSong
Keyboard.00eb ---> Key.NextSong
Keyboard.00ec ---> Key.EjectCD
Keyboard.00ed ---> Key.VolumeUp
Keyboard.00ee ---> Key.VolumeDown
Keyboard.00ef ---> Key.Mute
Keyboard.00f0 ---> Key.WWW
Keyboard.00f1 ---> Key.Back
Keyboard.00f2 ---> Key.Forward
Keyboard.00f3 ---> Key.Stop
Keyboard.00f4 ---> Key.Find
Keyboard.00f5 ---> Key.ScrollUp
Keyboard.00f6 ---> Key.ScrollDown
Keyboard.00f7 ---> Key.Edit
Keyboard.00f8 ---> Key.Sleep
Keyboard.00f9 ---> Key.Coffee
Keyboard.00fa ---> Key.Refresh
Keyboard.00fb ---> Key.Calc
Keyboard.00fc ---> Key.Unknown
Keyboard.00fd ---> Key.Unknown
Keyboard.00fe ---> Key.Unknown
Keyboard.00ff ---> Key.Unknown
Consumer.0225 ---> Key.Forward
Consumer.0224 ---> Key.Back
ff00.0001 ---> Sync.Report
ff00.0001 ---> Sync.Report
ff00.0001 ---> Sync.Report
ff00.0001 ---> Sync.Report
ff00.0001 ---> Sync.Report
ff00.0001 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
ff00.0002 ---> Sync.Report
LED.NumLock ---> LED.NumLock
LED.CapsLock ---> LED.CapsLock
LED.ScrollLock ---> LED.ScrollLock
LED.Compose ---> LED.Compose
LED.Kana ---> LED.Kana
^ permalink raw reply
* Re: Sony Vaio VGN-CS31S touch sensor buttons breaking touchpad
From: Ondrej Zary @ 2018-04-03 20:48 UTC (permalink / raw)
To: Dmitry Torokhov; +Cc: linux-input, linux-kernel
In-Reply-To: <201804022239.59370.linux@rainbow-software.org>
On Monday 02 April 2018 22:39:59 Ondrej Zary wrote:
> On Sunday 01 April 2018 23:21:55 Ondrej Zary wrote:
> > Hello,
> > I got a Sony Vaio VGN-CS31S laptop with Synaptics touchpad that exhibits
> > weird behavior. It seems to work until I touch the "Touch Sensor Buttons"
> > bar above the keyboard - then the buttons start to act weirdly: click or
> > remain pressed (sometimes it breaks even without touching the bar).
> >
> > It seems to be a known problem with VGN-CS series:
> > https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-input-synaptics/+b
> >ug /774877
> > https://wiki.freegeekvancouver.org/article/Laptop_Troubleshooting
> > (mentions nasty partial workaround: psmouse.resetafter=1)
> >
> > Many models of the VGN-CS series have the Touch Sensor Buttons:
> > ftp://124.40.41.224/PUB/MANUALS/SWT/Z009/Z009690111.PDF
> >
> > From the hardware side (can be found in MBX-196 Quanta GD2 schematic),
> > the touch bar is a separate PS/2 device connected to third PS/2 port of
> > the EC (Embedded Controller) WPC775L. The touchpad is on the 1st PS/2
> > port, 2nd port is unused. However, the i8042 does not seem to support
> > multiplexing, the firmware probably combines the data internally somehow.
>
> Good news: it supports multiplexing but i8042_nomux is set because of:
> /*
> * Most (all?) VAIOs do not have external PS/2 ports nor
> * they implement active multiplexing properly, and
> * MUX discovery usually messes up keyboard/touchpad.
> */
> .matches = {
> DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
> DMI_MATCH(DMI_BOARD_NAME, "VAIO"),
> },
> in drivers/input/serio/i8042-x86ia64io.h
> (How can this be modified to exclude VGN-CS series?)
>
> Now only to write the touchbar driver... (seems to be detected at serio2 as
> PS/2 Generic Mouse)
The device acts almost as a synaptics touchpad. The 0x47 magic number (used in
detection) is replaced by 0x43.
The absolute packet format is simple:
BYTE BIT 7 6 5 4 3 2 1 0
1 1 0 Z Z Z Z Z Z pressure (left)
2 0 0 0 0 L L L L position (left:11-8)
3 L L L L L L L L position (left:7-0)
4 1 1 Z Z Z Z Z Z pressure (right)
5 0 0 0 A R R R R position (right:11-8), A = AV MODE (center "button")
6 R R R R R R R R position (right:7-0)
(left = media player part, right = volume part)
maximum observed pressure was 0x38
Now find the command(s) to control the LEDs...
What's the best way to present these controls to user space?
Process the touch/drag actions in kernel. light up corresponding LEDs and
emit key presses?
--
Ondrej Zary
^ permalink raw reply
* Re: [PATCH] HID: input: fix battery level reporting on BT mice
From: Jiri Kosina @ 2018-04-04 8:33 UTC (permalink / raw)
To: Martin van Es
Cc: Dmitry Torokhov, Martin, Benjamin Tissoires, linux-input,
linux-kernel
In-Reply-To: <10651380.a6EbCRfp8J@minivanes>
On Tue, 3 Apr 2018, Martin van Es wrote:
> Hi Dimitry,
>
> I reapplied the 3 commits I had to revert earlier and applied your patch. Have
> correct battery level reading on my BT mouse back!
>
> /sys/class/power_supply/hid-00:1f:20:fd:cb:be-battery# grep "" *
> capacity:53
> grep: device: Is a directory
> model_name:Bluetooth Mouse M336/M337/M535
> online:1
> grep: power: Is a directory
> grep: powers: Is a directory
> present:1
> scope:Device
> status:Discharging
> grep: subsystem: Is a directory
> type:Battery
> uevent:POWER_SUPPLY_NAME=hid-00:1f:20:fd:cb:be-battery
> uevent:POWER_SUPPLY_PRESENT=1
> uevent:POWER_SUPPLY_ONLINE=1
> uevent:POWER_SUPPLY_CAPACITY=53
> uevent:POWER_SUPPLY_MODEL_NAME=Bluetooth Mouse M336/M337/M535
> uevent:POWER_SUPPLY_STATUS=Discharging
> uevent:POWER_SUPPLY_SCOPE=Device
>
> rdesc file is attached
>
> Thx for the effort!
Can I add your Tested-by: while applying the commit?
Thanks,
--
Jiri Kosina
SUSE Labs
^ permalink raw reply
* Re: [PATCH] HID: input: fix battery level reporting on BT mice
From: Martin van Es @ 2018-04-04 8:51 UTC (permalink / raw)
To: Jiri Kosina
Cc: Dmitry Torokhov, Martin, Benjamin Tissoires, linux-input,
linux-kernel
In-Reply-To: <nycvar.YFH.7.76.1804041032560.15778@cbobk.fhfr.pm>
On Wednesday, April 4, 2018 10:33:16 AM CEST Jiri Kosina wrote:
> Can I add your Tested-by: while applying the commit?
That's ok.
Best regards,
Martin
^ permalink raw reply
* Re: Linux 4.16 Kernel Boot Crash
From: Jani Nikula @ 2018-04-04 12:36 UTC (permalink / raw)
To: Peter Geis, linux-media, linux-input, Mauro Carvalho Chehab,
Dmitry Torokhov
Cc: intel-gfx
In-Reply-To: <6a0009be-cbf8-671e-9d7d-c78340e93f58@gmail.com>
On Tue, 03 Apr 2018, Peter Geis <pgwipeout@gmail.com> wrote:
> Good Evening,
>
> I have been trying to use the 4.16 kernel source since 4.16-rc3.
> Every time it booted it crashed upon loading the video drivers.
> Now with the 4.16 release, it is still occurring, so I felt it prudent
> to notify someone.
>
> The machine is a Lenovo Yoga 900 80UE-ISK2.
> It has a i7-6560u CPU with Intel integrated graphics.
This doesn't seem to have anything to do with Intel graphics. Based on
the backtraces, adding linux-media and linux-input mailing lists and
maintainers.
BR,
Jani.
>
> I have included the kernel log, what format should I submit the vmcore
> dump in?
>
> Thanks,
> Peter Geis
>
>
> ---Begin Log---
>
> [ 43.177394] WARNING: CPU: 1 PID: 711 at
> drivers/media/v4l2-core/v4l2-dev.c:945
> __video_register_device+0xc99/0x1090 [videodev]
> [ 43.177396] Modules linked in: hid_sensor_custom hid_sensor_als
> hid_sensor_incl_3d hid_sensor_rotation hid_sensor_magn_3d
> hid_sensor_accel_3d hid_sensor_gyro_3d hid_sensor_trigger
> industrialio_triggered_buffer kfifo_buf joydev hid_sensor_iio_common
> hid_rmi(+) rmi_core industrialio videobuf2_vmalloc videobuf2_memops
> videobuf2_v4l2 videobuf2_common videodev hid_multitouch media
> hid_sensor_hub binfmt_misc nls_iso8859_1 snd_hda_codec_hdmi arc4
> snd_soc_skl snd_soc_skl_ipc snd_hda_ext_core snd_soc_sst_dsp
> snd_soc_sst_ipc snd_hda_codec_realtek snd_soc_acpi snd_hda_codec_generic
> snd_soc_core snd_compress ac97_bus snd_pcm_dmaengine snd_hda_intel
> snd_hda_codec intel_rapl snd_hda_core x86_pkg_temp_thermal snd_hwdep
> intel_powerclamp coretemp snd_pcm kvm_intel snd_seq_midi
> snd_seq_midi_event snd_rawmidi crct10dif_pclmul
> [ 43.177426] crc32_pclmul ghash_clmulni_intel iwlmvm pcbc mac80211
> snd_seq aesni_intel iwlwifi aes_x86_64 snd_seq_device crypto_simd
> glue_helper cryptd snd_timer intel_cstate intel_rapl_perf input_leds
> serio_raw intel_wmi_thunderbolt snd wmi_bmof cfg80211 soundcore
> ideapad_laptop sparse_keymap idma64 virt_dma tpm_crb acpi_pad
> int3400_thermal acpi_thermal_rel intel_pch_thermal
> processor_thermal_device mac_hid int340x_thermal_zone mei_me
> intel_soc_dts_iosf mei intel_lpss_pci shpchp intel_lpss sch_fq_codel
> vfio_pci nfsd vfio_virqfd parport_pc ppdev auth_rpcgss nfs_acl lockd
> grace lp parport sunrpc ip_tables x_tables autofs4 hid_logitech_hidpp
> hid_logitech_dj hid_generic usbhid kvmgt vfio_mdev mdev vfio_iommu_type1
> vfio kvm irqbypass i915 i2c_algo_bit drm_kms_helper syscopyarea
> sdhci_pci sysfillrect
> [ 43.177466] sysimgblt cqhci fb_sys_fops sdhci drm i2c_hid wmi hid
> video pinctrl_sunrisepoint pinctrl_intel
> [ 43.177474] CPU: 1 PID: 711 Comm: systemd-udevd Not tainted 4.16.0 #1
> [ 43.177475] Hardware name: LENOVO 80UE/VIUU4, BIOS 2UCN10T 10/14/2016
> [ 43.177481] RIP: 0010:__video_register_device+0xc99/0x1090 [videodev]
> [ 43.177482] RSP: 0000:ffffa5c5c231b420 EFLAGS: 00010202
> [ 43.177484] RAX: 0000000000000000 RBX: 0000000000000005 RCX:
> 0000000000000000
> [ 43.177485] RDX: ffffffffc0c44cc0 RSI: ffffffffffffffff RDI:
> ffffffffc0c44cc0
> [ 43.177486] RBP: ffffa5c5c231b478 R08: ffffffffc0c96900 R09:
> ffff8eda1a51f018
> [ 43.177487] R10: 0000000000000600 R11: 00000000000003b6 R12:
> 0000000000000000
> [ 43.177488] R13: 0000000000000005 R14: ffffffffc0c96900 R15:
> ffff8eda1d6d91c0
> [ 43.177489] FS: 00007fd2d8ef2480(0000) GS:ffff8eda33480000(0000)
> knlGS:0000000000000000
> [ 43.177490] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [ 43.177491] CR2: 00007ffe0a6ad01c CR3: 0000000456ae2004 CR4:
> 00000000003606e0
> [ 43.177492] Call Trace:
> [ 43.177498] ? devres_add+0x5f/0x70
> [ 43.177502] rmi_f54_probe+0x437/0x470 [rmi_core]
> [ 43.177505] rmi_function_probe+0x25/0x30 [rmi_core]
> [ 43.177507] driver_probe_device+0x310/0x480
> [ 43.177509] __device_attach_driver+0x86/0x100
> [ 43.177511] ? __driver_attach+0xf0/0xf0
> [ 43.177512] bus_for_each_drv+0x6b/0xb0
> [ 43.177514] __device_attach+0xdd/0x160
> [ 43.177516] device_initial_probe+0x13/0x20
> [ 43.177518] bus_probe_device+0x95/0xa0
> [ 43.177519] device_add+0x44b/0x680
> [ 43.177522] rmi_register_function+0x62/0xd0 [rmi_core]
> [ 43.177525] rmi_create_function+0x112/0x1a0 [rmi_core]
> [ 43.177527] ? rmi_driver_clear_irq_bits+0xc0/0xc0 [rmi_core]
> [ 43.177530] rmi_scan_pdt+0xca/0x1a0 [rmi_core]
> [ 43.177535] rmi_init_functions+0x5b/0x120 [rmi_core]
> [ 43.177537] rmi_driver_probe+0x152/0x3c0 [rmi_core]
> [ 43.177547] ? sysfs_create_link+0x25/0x40
> [ 43.177549] driver_probe_device+0x310/0x480
> [ 43.177551] __device_attach_driver+0x86/0x100
> [ 43.177553] ? __driver_attach+0xf0/0xf0
> [ 43.177554] bus_for_each_drv+0x6b/0xb0
> [ 43.177556] __device_attach+0xdd/0x160
> [ 43.177558] device_initial_probe+0x13/0x20
> [ 43.177560] bus_probe_device+0x95/0xa0
> [ 43.177561] device_add+0x44b/0x680
> [ 43.177564] rmi_register_transport_device+0x84/0x100 [rmi_core]
> [ 43.177568] rmi_input_configured+0xbf/0x1a0 [hid_rmi]
> [ 43.177571] ? input_allocate_device+0xdf/0xf0
> [ 43.177574] hidinput_connect+0x4a9/0x37a0 [hid]
> [ 43.177578] hid_connect+0x326/0x3d0 [hid]
> [ 43.177581] hid_hw_start+0x42/0x70 [hid]
> [ 43.177583] rmi_probe+0x115/0x510 [hid_rmi]
> [ 43.177586] hid_device_probe+0xd3/0x150 [hid]
> [ 43.177588] ? sysfs_create_link+0x25/0x40
> [ 43.177590] driver_probe_device+0x310/0x480
> [ 43.177592] __driver_attach+0xbf/0xf0
> [ 43.177593] ? driver_probe_device+0x480/0x480
> [ 43.177595] bus_for_each_dev+0x74/0xb0
> [ 43.177597] ? kmem_cache_alloc_trace+0x1a6/0x1c0
> [ 43.177599] driver_attach+0x1e/0x20
> [ 43.177600] bus_add_driver+0x167/0x260
> [ 43.177602] ? 0xffffffffc0cbc000
> [ 43.177604] driver_register+0x60/0xe0
> [ 43.177605] ? 0xffffffffc0cbc000
> [ 43.177607] __hid_register_driver+0x63/0x70 [hid]
> [ 43.177610] rmi_driver_init+0x23/0x1000 [hid_rmi]
> [ 43.177612] do_one_initcall+0x52/0x191
> [ 43.177615] ? _cond_resched+0x19/0x40
> [ 43.177617] ? kmem_cache_alloc_trace+0xa2/0x1c0
> [ 43.177619] ? do_init_module+0x27/0x209
> [ 43.177621] do_init_module+0x5f/0x209
> [ 43.177623] load_module+0x1987/0x1f10
> -- MORE -- forward: <SPACE>, <ENTER> or j backward: b or k quit: q
> [ 43.177488] R13: 0000000000000005 R14: ffffffffc0c96900 R15:
> ffff8eda1d6d91c0
> [ 43.177489] FS: 00007fd2d8ef2480(0000) GS:ffff8eda33480000(0000)
> knlGS:0000000000000000
> [ 43.177490] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [ 43.177491] CR2: 00007ffe0a6ad01c CR3: 0000000456ae2004 CR4:
> 00000000003606e0
> [ 43.177492] Call Trace:
> [ 43.177498] ? devres_add+0x5f/0x70
> [ 43.177502] rmi_f54_probe+0x437/0x470 [rmi_core]
> [ 43.177505] rmi_function_probe+0x25/0x30 [rmi_core]
> [ 43.177507] driver_probe_device+0x310/0x480
> [ 43.177509] __device_attach_driver+0x86/0x100
> [ 43.177511] ? __driver_attach+0xf0/0xf0
> [ 43.177512] bus_for_each_drv+0x6b/0xb0
> [ 43.177514] __device_attach+0xdd/0x160
> [ 43.177516] device_initial_probe+0x13/0x20
> [ 43.177518] bus_probe_device+0x95/0xa0
> [ 43.177519] device_add+0x44b/0x680
> [ 43.177522] rmi_register_function+0x62/0xd0 [rmi_core]
> [ 43.177525] rmi_create_function+0x112/0x1a0 [rmi_core]
> [ 43.177527] ? rmi_driver_clear_irq_bits+0xc0/0xc0 [rmi_core]
> [ 43.177530] rmi_scan_pdt+0xca/0x1a0 [rmi_core]
> [ 43.177535] rmi_init_functions+0x5b/0x120 [rmi_core]
> [ 43.177537] rmi_driver_probe+0x152/0x3c0 [rmi_core]
> [ 43.177547] ? sysfs_create_link+0x25/0x40
> [ 43.177549] driver_probe_device+0x310/0x480
> [ 43.177551] __device_attach_driver+0x86/0x100
> [ 43.177553] ? __driver_attach+0xf0/0xf0
> [ 43.177554] bus_for_each_drv+0x6b/0xb0
> [ 43.177556] __device_attach+0xdd/0x160
> [ 43.177558] device_initial_probe+0x13/0x20
> [ 43.177560] bus_probe_device+0x95/0xa0
> [ 43.177561] device_add+0x44b/0x680
> [ 43.177564] rmi_register_transport_device+0x84/0x100 [rmi_core]
> [ 43.177568] rmi_input_configured+0xbf/0x1a0 [hid_rmi]
> [ 43.177571] ? input_allocate_device+0xdf/0xf0
> [ 43.177574] hidinput_connect+0x4a9/0x37a0 [hid]
> [ 43.177578] hid_connect+0x326/0x3d0 [hid]
> [ 43.177581] hid_hw_start+0x42/0x70 [hid]
> [ 43.177583] rmi_probe+0x115/0x510 [hid_rmi]
> [ 43.177586] hid_device_probe+0xd3/0x150 [hid]
> [ 43.177588] ? sysfs_create_link+0x25/0x40
> [ 43.177590] driver_probe_device+0x310/0x480
> [ 43.177592] __driver_attach+0xbf/0xf0
> [ 43.177593] ? driver_probe_device+0x480/0x480
> [ 43.177595] bus_for_each_dev+0x74/0xb0
> [ 43.177597] ? kmem_cache_alloc_trace+0x1a6/0x1c0
> [ 43.177599] driver_attach+0x1e/0x20
> [ 43.177600] bus_add_driver+0x167/0x260
> [ 43.177602] ? 0xffffffffc0cbc000
> [ 43.177604] driver_register+0x60/0xe0
> [ 43.177605] ? 0xffffffffc0cbc000
> [ 43.177607] __hid_register_driver+0x63/0x70 [hid]
> [ 43.177610] rmi_driver_init+0x23/0x1000 [hid_rmi]
> [ 43.177612] do_one_initcall+0x52/0x191
> [ 43.177615] ? _cond_resched+0x19/0x40
> [ 43.177617] ? kmem_cache_alloc_trace+0xa2/0x1c0
> [ 43.177619] ? do_init_module+0x27/0x209
> [ 43.177621] do_init_module+0x5f/0x209
> [ 43.177623] load_module+0x1987/0x1f10
> [ 43.177626] ? ima_post_read_file+0x96/0xa0
> [ 43.177629] SYSC_finit_module+0xfc/0x120
> [ 43.177630] ? SYSC_finit_module+0xfc/0x120
> [ 43.177632] SyS_finit_module+0xe/0x10
> [ 43.177634] do_syscall_64+0x73/0x130
> [ 43.177637] entry_SYSCALL_64_after_hwframe+0x3d/0xa2
> [ 43.177638] RIP: 0033:0x7fd2d880b839
> [ 43.177639] RSP: 002b:00007ffe0a6b2368 EFLAGS: 00000246 ORIG_RAX:
> 0000000000000139
> [ 43.177641] RAX: ffffffffffffffda RBX: 000055cdd86542e0 RCX:
> 00007fd2d880b839
> [ 43.177641] RDX: 0000000000000000 RSI: 00007fd2d84ea0e5 RDI:
> 0000000000000016
> [ 43.177642] RBP: 00007fd2d84ea0e5 R08: 0000000000000000 R09:
> 00007ffe0a6b2480
> [ 43.177643] R10: 0000000000000016 R11: 0000000000000246 R12:
> 0000000000000000
> [ 43.177644] R13: 000055cdd8688930 R14: 0000000000020000 R15:
> 000055cdd86542e0
> [ 43.177645] Code: 48 c7 c7 54 b4 c3 c0 e8 96 9d ec dd e9 d4 fb ff ff
> 0f 0b 41 be ea ff ff ff e9 c7 fb ff ff 0f 0b 41 be ea ff ff ff e9 ba fb
> ff ff <0f> 0b e9 d8 f4 ff ff 83 fa 01 0f 84 c4 02 00 00 48 83 78 68 00
> [ 43.177675] ---[ end trace d44d9bc41477c2dd ]---
> [ 43.177679] BUG: unable to handle kernel NULL pointer dereference at
> 0000000000000499
> [ 43.177723] IP: __video_register_device+0x1cc/0x1090 [videodev]
> [ 43.177749] PGD 0 P4D 0
> [ 43.177764] Oops: 0000 [#1] SMP PTI
> [ 43.177780] Modules linked in: hid_sensor_custom hid_sensor_als
> hid_sensor_incl_3d hid_sensor_rotation hid_sensor_magn_3d
> hid_sensor_accel_3d hid_sensor_gyro_3d hid_sensor_trigger
> industrialio_triggered_buffer kfifo_buf joydev hid_sensor_iio_common
> hid_rmi(+) rmi_core industrialio videobuf2_vmalloc videobuf2_memops
> videobuf2_v4l2 videobuf2_common videodev hid_multitouch media
> hid_sensor_hub binfmt_misc nls_iso8859_1 snd_hda_codec_hdmi arc4
> snd_soc_skl snd_soc_skl_ipc snd_hda_ext_core snd_soc_sst_dsp
> snd_soc_sst_ipc snd_hda_codec_realtek snd_soc_acpi snd_hda_codec_generic
> snd_soc_core snd_compress ac97_bus snd_pcm_dmaengine snd_hda_intel
> snd_hda_codec intel_rapl snd_hda_core x86_pkg_temp_thermal snd_hwdep
> intel_powerclamp coretemp snd_pcm kvm_intel snd_seq_midi
> snd_seq_midi_event snd_rawmidi crct10dif_pclmul
> [ 43.178055] crc32_pclmul ghash_clmulni_intel iwlmvm pcbc mac80211
> snd_seq aesni_intel iwlwifi aes_x86_64 snd_seq_device crypto_simd
> glue_helper cryptd snd_timer intel_cstate intel_rapl_perf input_leds
> serio_raw intel_wmi_thunderbolt snd wmi_bmof cfg80211 soundcore
> ideapad_laptop sparse_keymap idma64 virt_dma tpm_crb acpi_pad
> int3400_thermal acpi_thermal_rel intel_pch_thermal
> processor_thermal_device mac_hid int340x_thermal_zone mei_me
> intel_soc_dts_iosf mei intel_lpss_pci shpchp intel_lpss sch_fq_codel
> vfio_pci nfsd vfio_virqfd parport_pc ppdev auth_rpcgss nfs_acl lockd
> grace lp parport sunrpc ip_tables x_tables autofs4 hid_logitech_hidpp
> hid_logitech_dj hid_generic usbhid kvmgt vfio_mdev mdev vfio_iommu_type1
> vfio kvm irqbypass i915 i2c_algo_bit drm_kms_helper syscopyarea
> sdhci_pci sysfillrect
> [ 43.178337] sysimgblt cqhci fb_sys_fops sdhci drm i2c_hid wmi hid
> video pinctrl_sunrisepoint pinctrl_intel
> [ 43.178380] CPU: 1 PID: 711 Comm: systemd-udevd Tainted: G W
> 4.16.0 #1
> [ 43.178411] Hardware name: LENOVO 80UE/VIUU4, BIOS 2UCN10T 10/14/2016
> [ 43.178441] RIP: 0010:__video_register_device+0x1cc/0x1090 [videodev]
> [ 43.178467] RSP: 0000:ffffa5c5c231b420 EFLAGS: 00010202
> [ 43.178490] RAX: ffffffffc0c44cc0 RBX: 0000000000000005 RCX:
> ffffffffc0c454c0
> [ 43.178519] RDX: 0000000000000001 RSI: ffff8eda1d6d9118 RDI:
> ffffffffc0c44cc0
> [ 43.178549] RBP: ffffa5c5c231b478 R08: ffffffffc0c96900 R09:
> ffff8eda1a51f018
> [ 43.178579] R10: 0000000000000600 R11: 00000000000003b6 R12:
> 0000000000000000
> [ 43.178608] R13: 0000000000000005 R14: ffffffffc0c96900 R15:
> ffff8eda1d6d91c0
> [ 43.178636] FS: 00007fd2d8ef2480(0000) GS:ffff8eda33480000(0000)
> knlGS:0000000000000000
> [ 43.178669] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [ 43.178693] CR2: 0000000000000499 CR3: 0000000456ae2004 CR4:
> 00000000003606e0
> [ 43.178721] Call Trace:
> [ 43.178736] ? devres_add+0x5f/0x70
> [ 43.178755] rmi_f54_probe+0x437/0x470 [rmi_core]
> [ 43.178779] rmi_function_probe+0x25/0x30 [rmi_core]
> [ 43.178805] driver_probe_device+0x310/0x480
> [ 43.178828] __device_attach_driver+0x86/0x100
> [ 43.178851] ? __driver_attach+0xf0/0xf0
> [ 43.178884] bus_for_each_drv+0x6b/0xb0
> [ 43.178904] __device_attach+0xdd/0x160
> [ 43.178925] device_initial_probe+0x13/0x20
> [ 43.178948] bus_probe_device+0x95/0xa0
> [ 43.178968] device_add+0x44b/0x680
> [ 43.178987] rmi_register_function+0x62/0xd0 [rmi_core]
> [ 43.181747] rmi_create_function+0x112/0x1a0 [rmi_core]
> [ 43.184677] ? rmi_driver_clear_irq_bits+0xc0/0xc0 [rmi_core]
> [ 43.187505] rmi_scan_pdt+0xca/0x1a0 [rmi_core]
> [ 43.190171] rmi_init_functions+0x5b/0x120 [rmi_core]
> [ 43.192809] rmi_driver_probe+0x152/0x3c0 [rmi_core]
> [ 43.195403] ? sysfs_create_link+0x25/0x40
> [ 43.198253] driver_probe_device+0x310/0x480
> [ 43.201083] __device_attach_driver+0x86/0x100
> [ 43.203800] ? __driver_attach+0xf0/0xf0
> [ 43.206503] bus_for_each_drv+0x6b/0xb0
> [ 43.209291] __device_attach+0xdd/0x160
> [ 43.212207] device_initial_probe+0x13/0x20
> [ 43.215146] bus_probe_device+0x95/0xa0
> [ 43.217885] device_add+0x44b/0x680
> [ 43.220597] rmi_register_transport_device+0x84/0x100 [rmi_core]
> [ 43.223321] rmi_input_configured+0xbf/0x1a0 [hid_rmi]
> [ 43.226051] ? input_allocate_device+0xdf/0xf0
> [ 43.228814] hidinput_connect+0x4a9/0x37a0 [hid]
> [ 43.231701] hid_connect+0x326/0x3d0 [hid]
> [ 43.234548] hid_hw_start+0x42/0x70 [hid]
> [ 43.237302] rmi_probe+0x115/0x510 [hid_rmi]
> [ 43.239862] hid_device_probe+0xd3/0x150 [hid]
> [ 43.242558] ? sysfs_create_link+0x25/0x40
> [ 43.242828] audit: type=1400 audit(1522795151.600:4):
> apparmor="STATUS" operation="profile_load" profile="unconfined"
> name="/snap/core/4206/usr/lib/snapd/snap-confine" pid=1151
> comm="apparmor_parser"
> [ 43.244859] driver_probe_device+0x310/0x480
> [ 43.244862] __driver_attach+0xbf/0xf0
> [ 43.246982] audit: type=1400 audit(1522795151.600:5):
> apparmor="STATUS" operation="profile_load" profile="unconfined"
> name="/snap/core/4206/usr/lib/snapd/snap-confine//mount-namespace-capture-helper"
> pid=1151 comm="apparmor_parser"
> [ 43.249403] ? driver_probe_device+0x480/0x480
> [ 43.249405] bus_for_each_dev+0x74/0xb0
> [ 43.253200] audit: type=1400 audit(1522795151.600:6):
> apparmor="STATUS" operation="profile_load" profile="unconfined"
> name="/snap/core/4206/usr/lib/snapd/snap-confine//snap_update_ns"
> pid=1151 comm="apparmor_parser"
> [ 43.254055] ? kmem_cache_alloc_trace+0x1a6/0x1c0
> [ 43.256282] audit: type=1400 audit(1522795151.604:7):
> apparmor="STATUS" operation="profile_load" profile="unconfined"
> name="/sbin/dhclient" pid=1152 comm="apparmor_parser"
> [ 43.258436] driver_attach+0x1e/0x20
> [ 43.260875] audit: type=1400 audit(1522795151.604:8):
> apparmor="STATUS" operation="profile_load" profile="unconfined"
> name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=1152
> comm="apparmor_parser"
> [ 43.263118] bus_add_driver+0x167/0x260
> [ 43.267676] audit: type=1400 audit(1522795151.604:9):
> apparmor="STATUS" operation="profile_load" profile="unconfined"
> name="/usr/lib/NetworkManager/nm-dhcp-helper" pid=1152
> comm="apparmor_parser"
> [ 43.268807] ? 0xffffffffc0cbc000
> [ 43.268812] driver_register+0x60/0xe0
> [ 43.271184] audit: type=1400 audit(1522795151.604:10):
> apparmor="STATUS" operation="profile_load" profile="unconfined"
> name="/usr/lib/connman/scripts/dhclient-script" pid=1152
> comm="apparmor_parser"
> [ 43.274081] ? 0xffffffffc0cbc000
> [ 43.274086] __hid_register_driver+0x63/0x70 [hid]
> [ 43.288367] rmi_driver_init+0x23/0x1000 [hid_rmi]
> [ 43.291501] do_one_initcall+0x52/0x191
> [ 43.292348] audit: type=1400 audit(1522795151.652:11):
> apparmor="STATUS" operation="profile_load" profile="unconfined"
> name="/usr/bin/man" pid=1242 comm="apparmor_parser"
> [ 43.294212] ? _cond_resched+0x19/0x40
> [ 43.300028] ? kmem_cache_alloc_trace+0xa2/0x1c0
> [ 43.303475] ? do_init_module+0x27/0x209
> [ 43.306842] do_init_module+0x5f/0x209
> [ 43.310269] load_module+0x1987/0x1f10
> [ 43.313704] ? ima_post_read_file+0x96/0xa0
> [ 43.317174] SYSC_finit_module+0xfc/0x120
> [ 43.320754] ? SYSC_finit_module+0xfc/0x120
> [ 43.324065] SyS_finit_module+0xe/0x10
> [ 43.327387] do_syscall_64+0x73/0x130
> [ 43.330909] entry_SYSCALL_64_after_hwframe+0x3d/0xa2
> [ 43.334305] RIP: 0033:0x7fd2d880b839
> [ 43.337810] RSP: 002b:00007ffe0a6b2368 EFLAGS: 00000246 ORIG_RAX:
> 0000000000000139
> [ 43.341259] RAX: ffffffffffffffda RBX: 000055cdd86542e0 RCX:
> 00007fd2d880b839
> [ 43.344613] RDX: 0000000000000000 RSI: 00007fd2d84ea0e5 RDI:
> 0000000000000016
> [ 43.347962] RBP: 00007fd2d84ea0e5 R08: 0000000000000000 R09:
> 00007ffe0a6b2480
> [ 43.351456] R10: 0000000000000016 R11: 0000000000000246 R12:
> 0000000000000000
> [ 43.354845] R13: 000055cdd8688930 R14: 0000000000020000 R15:
> 000055cdd86542e0
> [ 43.358224] Code: c7 05 ad 12 02 00 00 00 00 00 48 8d 88 00 08 00 00
> eb 09 48 83 c0 08 48 39 c1 74 31 48 8b 10 48 85 d2 74 ef 49 8b b7 98 04
> 00 00 <48> 39 b2 98 04 00 00 75 df 48 63 92 f8 04 00 00 f0 48 0f ab 15
> [ 43.361764] RIP: __video_register_device+0x1cc/0x1090 [videodev] RSP:
> ffffa5c5c231b420
> [ 43.365281] CR2: 0000000000000499
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply
* Re: [PATCH v3 2/4] mfd: add Gateworks System Controller core driver
From: Andrew Lunn @ 2018-04-04 13:12 UTC (permalink / raw)
To: Tim Harvey
Cc: Lee Jones, Rob Herring, Mark Rutland, Mark Brown, Dmitry Torokhov,
Wim Van Sebroeck, Guenter Roeck, linux-hwmon, devicetree,
linux-watchdog, Randy Dunlap, linux-kernel, linux-input,
linux-arm-kernel
In-Reply-To: <CAJ+vNU31f+iY5LOG6QmdJetb=pPvY_gpKoS+49FSy70U1Ksd8g@mail.gmail.com>
> What about the 'reset' functionality? Is there something in the power
> supply API for hooking in a GPIO based power switch (in my case it
> would be i2c) as I would think that would be common for ATX supplies?
> I didn't see anything in Documentation/power.
>
> This is what led me to the restart handler idea. Ultimately when
> someone issues a 'reboot' I would like it to use the GSC to
> power-cycle the board.
Hi Tim
I think you end up with the same problem. By the time you need to turn
the power supply off, too much of the kernel is shut down to be able
to use I2C. And if you are in the middle of an Oops, you have no idea
of the current state. Another I2C transaction could be under way etc.
All the current reset drivers are pretty much self contained, atomic
and use KISS hardware like a GPIO.
Maybe you best bet is to see if you can find any other I2C PMICs which
the kernel supports.
Andrew
^ permalink raw reply
* Re: Linux 4.16 Kernel Boot Crash
From: Jaak Ristioja @ 2018-04-04 13:26 UTC (permalink / raw)
To: Jani Nikula, Peter Geis, linux-media, linux-input,
Mauro Carvalho Chehab, Dmitry Torokhov
Cc: intel-gfx
In-Reply-To: <87in97up15.fsf@intel.com>
Hello, all!
I experience the same issue with a Lenovo ThinkPad T440p (LENOVO
20AN006VMS/20AN006VMS, BIOS GLET90WW (2.44 ) 09/13/2017). I tried to
bisect v4.15..v4.16 but failed.
Best regards,
J
On 04.04.2018 15:36, Jani Nikula wrote:
> On Tue, 03 Apr 2018, Peter Geis <pgwipeout@gmail.com> wrote:
>> Good Evening,
>>
>> I have been trying to use the 4.16 kernel source since 4.16-rc3.
>> Every time it booted it crashed upon loading the video drivers.
>> Now with the 4.16 release, it is still occurring, so I felt it prudent
>> to notify someone.
>>
>> The machine is a Lenovo Yoga 900 80UE-ISK2.
>> It has a i7-6560u CPU with Intel integrated graphics.
>
> This doesn't seem to have anything to do with Intel graphics. Based on
> the backtraces, adding linux-media and linux-input mailing lists and
> maintainers.
>
> BR,
> Jani.
>
>
>>
>> I have included the kernel log, what format should I submit the vmcore
>> dump in?
>>
>> Thanks,
>> Peter Geis
>>
>>
>> ---Begin Log---
>>
>> [ 43.177394] WARNING: CPU: 1 PID: 711 at
>> drivers/media/v4l2-core/v4l2-dev.c:945
>> __video_register_device+0xc99/0x1090 [videodev]
>> [ 43.177396] Modules linked in: hid_sensor_custom hid_sensor_als
>> hid_sensor_incl_3d hid_sensor_rotation hid_sensor_magn_3d
>> hid_sensor_accel_3d hid_sensor_gyro_3d hid_sensor_trigger
>> industrialio_triggered_buffer kfifo_buf joydev hid_sensor_iio_common
>> hid_rmi(+) rmi_core industrialio videobuf2_vmalloc videobuf2_memops
>> videobuf2_v4l2 videobuf2_common videodev hid_multitouch media
>> hid_sensor_hub binfmt_misc nls_iso8859_1 snd_hda_codec_hdmi arc4
>> snd_soc_skl snd_soc_skl_ipc snd_hda_ext_core snd_soc_sst_dsp
>> snd_soc_sst_ipc snd_hda_codec_realtek snd_soc_acpi snd_hda_codec_generic
>> snd_soc_core snd_compress ac97_bus snd_pcm_dmaengine snd_hda_intel
>> snd_hda_codec intel_rapl snd_hda_core x86_pkg_temp_thermal snd_hwdep
>> intel_powerclamp coretemp snd_pcm kvm_intel snd_seq_midi
>> snd_seq_midi_event snd_rawmidi crct10dif_pclmul
>> [ 43.177426] crc32_pclmul ghash_clmulni_intel iwlmvm pcbc mac80211
>> snd_seq aesni_intel iwlwifi aes_x86_64 snd_seq_device crypto_simd
>> glue_helper cryptd snd_timer intel_cstate intel_rapl_perf input_leds
>> serio_raw intel_wmi_thunderbolt snd wmi_bmof cfg80211 soundcore
>> ideapad_laptop sparse_keymap idma64 virt_dma tpm_crb acpi_pad
>> int3400_thermal acpi_thermal_rel intel_pch_thermal
>> processor_thermal_device mac_hid int340x_thermal_zone mei_me
>> intel_soc_dts_iosf mei intel_lpss_pci shpchp intel_lpss sch_fq_codel
>> vfio_pci nfsd vfio_virqfd parport_pc ppdev auth_rpcgss nfs_acl lockd
>> grace lp parport sunrpc ip_tables x_tables autofs4 hid_logitech_hidpp
>> hid_logitech_dj hid_generic usbhid kvmgt vfio_mdev mdev vfio_iommu_type1
>> vfio kvm irqbypass i915 i2c_algo_bit drm_kms_helper syscopyarea
>> sdhci_pci sysfillrect
>> [ 43.177466] sysimgblt cqhci fb_sys_fops sdhci drm i2c_hid wmi hid
>> video pinctrl_sunrisepoint pinctrl_intel
>> [ 43.177474] CPU: 1 PID: 711 Comm: systemd-udevd Not tainted 4.16.0 #1
>> [ 43.177475] Hardware name: LENOVO 80UE/VIUU4, BIOS 2UCN10T 10/14/2016
>> [ 43.177481] RIP: 0010:__video_register_device+0xc99/0x1090 [videodev]
>> [ 43.177482] RSP: 0000:ffffa5c5c231b420 EFLAGS: 00010202
>> [ 43.177484] RAX: 0000000000000000 RBX: 0000000000000005 RCX:
>> 0000000000000000
>> [ 43.177485] RDX: ffffffffc0c44cc0 RSI: ffffffffffffffff RDI:
>> ffffffffc0c44cc0
>> [ 43.177486] RBP: ffffa5c5c231b478 R08: ffffffffc0c96900 R09:
>> ffff8eda1a51f018
>> [ 43.177487] R10: 0000000000000600 R11: 00000000000003b6 R12:
>> 0000000000000000
>> [ 43.177488] R13: 0000000000000005 R14: ffffffffc0c96900 R15:
>> ffff8eda1d6d91c0
>> [ 43.177489] FS: 00007fd2d8ef2480(0000) GS:ffff8eda33480000(0000)
>> knlGS:0000000000000000
>> [ 43.177490] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>> [ 43.177491] CR2: 00007ffe0a6ad01c CR3: 0000000456ae2004 CR4:
>> 00000000003606e0
>> [ 43.177492] Call Trace:
>> [ 43.177498] ? devres_add+0x5f/0x70
>> [ 43.177502] rmi_f54_probe+0x437/0x470 [rmi_core]
>> [ 43.177505] rmi_function_probe+0x25/0x30 [rmi_core]
>> [ 43.177507] driver_probe_device+0x310/0x480
>> [ 43.177509] __device_attach_driver+0x86/0x100
>> [ 43.177511] ? __driver_attach+0xf0/0xf0
>> [ 43.177512] bus_for_each_drv+0x6b/0xb0
>> [ 43.177514] __device_attach+0xdd/0x160
>> [ 43.177516] device_initial_probe+0x13/0x20
>> [ 43.177518] bus_probe_device+0x95/0xa0
>> [ 43.177519] device_add+0x44b/0x680
>> [ 43.177522] rmi_register_function+0x62/0xd0 [rmi_core]
>> [ 43.177525] rmi_create_function+0x112/0x1a0 [rmi_core]
>> [ 43.177527] ? rmi_driver_clear_irq_bits+0xc0/0xc0 [rmi_core]
>> [ 43.177530] rmi_scan_pdt+0xca/0x1a0 [rmi_core]
>> [ 43.177535] rmi_init_functions+0x5b/0x120 [rmi_core]
>> [ 43.177537] rmi_driver_probe+0x152/0x3c0 [rmi_core]
>> [ 43.177547] ? sysfs_create_link+0x25/0x40
>> [ 43.177549] driver_probe_device+0x310/0x480
>> [ 43.177551] __device_attach_driver+0x86/0x100
>> [ 43.177553] ? __driver_attach+0xf0/0xf0
>> [ 43.177554] bus_for_each_drv+0x6b/0xb0
>> [ 43.177556] __device_attach+0xdd/0x160
>> [ 43.177558] device_initial_probe+0x13/0x20
>> [ 43.177560] bus_probe_device+0x95/0xa0
>> [ 43.177561] device_add+0x44b/0x680
>> [ 43.177564] rmi_register_transport_device+0x84/0x100 [rmi_core]
>> [ 43.177568] rmi_input_configured+0xbf/0x1a0 [hid_rmi]
>> [ 43.177571] ? input_allocate_device+0xdf/0xf0
>> [ 43.177574] hidinput_connect+0x4a9/0x37a0 [hid]
>> [ 43.177578] hid_connect+0x326/0x3d0 [hid]
>> [ 43.177581] hid_hw_start+0x42/0x70 [hid]
>> [ 43.177583] rmi_probe+0x115/0x510 [hid_rmi]
>> [ 43.177586] hid_device_probe+0xd3/0x150 [hid]
>> [ 43.177588] ? sysfs_create_link+0x25/0x40
>> [ 43.177590] driver_probe_device+0x310/0x480
>> [ 43.177592] __driver_attach+0xbf/0xf0
>> [ 43.177593] ? driver_probe_device+0x480/0x480
>> [ 43.177595] bus_for_each_dev+0x74/0xb0
>> [ 43.177597] ? kmem_cache_alloc_trace+0x1a6/0x1c0
>> [ 43.177599] driver_attach+0x1e/0x20
>> [ 43.177600] bus_add_driver+0x167/0x260
>> [ 43.177602] ? 0xffffffffc0cbc000
>> [ 43.177604] driver_register+0x60/0xe0
>> [ 43.177605] ? 0xffffffffc0cbc000
>> [ 43.177607] __hid_register_driver+0x63/0x70 [hid]
>> [ 43.177610] rmi_driver_init+0x23/0x1000 [hid_rmi]
>> [ 43.177612] do_one_initcall+0x52/0x191
>> [ 43.177615] ? _cond_resched+0x19/0x40
>> [ 43.177617] ? kmem_cache_alloc_trace+0xa2/0x1c0
>> [ 43.177619] ? do_init_module+0x27/0x209
>> [ 43.177621] do_init_module+0x5f/0x209
>> [ 43.177623] load_module+0x1987/0x1f10
>> -- MORE -- forward: <SPACE>, <ENTER> or j backward: b or k quit: q
>> [ 43.177488] R13: 0000000000000005 R14: ffffffffc0c96900 R15:
>> ffff8eda1d6d91c0
>> [ 43.177489] FS: 00007fd2d8ef2480(0000) GS:ffff8eda33480000(0000)
>> knlGS:0000000000000000
>> [ 43.177490] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>> [ 43.177491] CR2: 00007ffe0a6ad01c CR3: 0000000456ae2004 CR4:
>> 00000000003606e0
>> [ 43.177492] Call Trace:
>> [ 43.177498] ? devres_add+0x5f/0x70
>> [ 43.177502] rmi_f54_probe+0x437/0x470 [rmi_core]
>> [ 43.177505] rmi_function_probe+0x25/0x30 [rmi_core]
>> [ 43.177507] driver_probe_device+0x310/0x480
>> [ 43.177509] __device_attach_driver+0x86/0x100
>> [ 43.177511] ? __driver_attach+0xf0/0xf0
>> [ 43.177512] bus_for_each_drv+0x6b/0xb0
>> [ 43.177514] __device_attach+0xdd/0x160
>> [ 43.177516] device_initial_probe+0x13/0x20
>> [ 43.177518] bus_probe_device+0x95/0xa0
>> [ 43.177519] device_add+0x44b/0x680
>> [ 43.177522] rmi_register_function+0x62/0xd0 [rmi_core]
>> [ 43.177525] rmi_create_function+0x112/0x1a0 [rmi_core]
>> [ 43.177527] ? rmi_driver_clear_irq_bits+0xc0/0xc0 [rmi_core]
>> [ 43.177530] rmi_scan_pdt+0xca/0x1a0 [rmi_core]
>> [ 43.177535] rmi_init_functions+0x5b/0x120 [rmi_core]
>> [ 43.177537] rmi_driver_probe+0x152/0x3c0 [rmi_core]
>> [ 43.177547] ? sysfs_create_link+0x25/0x40
>> [ 43.177549] driver_probe_device+0x310/0x480
>> [ 43.177551] __device_attach_driver+0x86/0x100
>> [ 43.177553] ? __driver_attach+0xf0/0xf0
>> [ 43.177554] bus_for_each_drv+0x6b/0xb0
>> [ 43.177556] __device_attach+0xdd/0x160
>> [ 43.177558] device_initial_probe+0x13/0x20
>> [ 43.177560] bus_probe_device+0x95/0xa0
>> [ 43.177561] device_add+0x44b/0x680
>> [ 43.177564] rmi_register_transport_device+0x84/0x100 [rmi_core]
>> [ 43.177568] rmi_input_configured+0xbf/0x1a0 [hid_rmi]
>> [ 43.177571] ? input_allocate_device+0xdf/0xf0
>> [ 43.177574] hidinput_connect+0x4a9/0x37a0 [hid]
>> [ 43.177578] hid_connect+0x326/0x3d0 [hid]
>> [ 43.177581] hid_hw_start+0x42/0x70 [hid]
>> [ 43.177583] rmi_probe+0x115/0x510 [hid_rmi]
>> [ 43.177586] hid_device_probe+0xd3/0x150 [hid]
>> [ 43.177588] ? sysfs_create_link+0x25/0x40
>> [ 43.177590] driver_probe_device+0x310/0x480
>> [ 43.177592] __driver_attach+0xbf/0xf0
>> [ 43.177593] ? driver_probe_device+0x480/0x480
>> [ 43.177595] bus_for_each_dev+0x74/0xb0
>> [ 43.177597] ? kmem_cache_alloc_trace+0x1a6/0x1c0
>> [ 43.177599] driver_attach+0x1e/0x20
>> [ 43.177600] bus_add_driver+0x167/0x260
>> [ 43.177602] ? 0xffffffffc0cbc000
>> [ 43.177604] driver_register+0x60/0xe0
>> [ 43.177605] ? 0xffffffffc0cbc000
>> [ 43.177607] __hid_register_driver+0x63/0x70 [hid]
>> [ 43.177610] rmi_driver_init+0x23/0x1000 [hid_rmi]
>> [ 43.177612] do_one_initcall+0x52/0x191
>> [ 43.177615] ? _cond_resched+0x19/0x40
>> [ 43.177617] ? kmem_cache_alloc_trace+0xa2/0x1c0
>> [ 43.177619] ? do_init_module+0x27/0x209
>> [ 43.177621] do_init_module+0x5f/0x209
>> [ 43.177623] load_module+0x1987/0x1f10
>> [ 43.177626] ? ima_post_read_file+0x96/0xa0
>> [ 43.177629] SYSC_finit_module+0xfc/0x120
>> [ 43.177630] ? SYSC_finit_module+0xfc/0x120
>> [ 43.177632] SyS_finit_module+0xe/0x10
>> [ 43.177634] do_syscall_64+0x73/0x130
>> [ 43.177637] entry_SYSCALL_64_after_hwframe+0x3d/0xa2
>> [ 43.177638] RIP: 0033:0x7fd2d880b839
>> [ 43.177639] RSP: 002b:00007ffe0a6b2368 EFLAGS: 00000246 ORIG_RAX:
>> 0000000000000139
>> [ 43.177641] RAX: ffffffffffffffda RBX: 000055cdd86542e0 RCX:
>> 00007fd2d880b839
>> [ 43.177641] RDX: 0000000000000000 RSI: 00007fd2d84ea0e5 RDI:
>> 0000000000000016
>> [ 43.177642] RBP: 00007fd2d84ea0e5 R08: 0000000000000000 R09:
>> 00007ffe0a6b2480
>> [ 43.177643] R10: 0000000000000016 R11: 0000000000000246 R12:
>> 0000000000000000
>> [ 43.177644] R13: 000055cdd8688930 R14: 0000000000020000 R15:
>> 000055cdd86542e0
>> [ 43.177645] Code: 48 c7 c7 54 b4 c3 c0 e8 96 9d ec dd e9 d4 fb ff ff
>> 0f 0b 41 be ea ff ff ff e9 c7 fb ff ff 0f 0b 41 be ea ff ff ff e9 ba fb
>> ff ff <0f> 0b e9 d8 f4 ff ff 83 fa 01 0f 84 c4 02 00 00 48 83 78 68 00
>> [ 43.177675] ---[ end trace d44d9bc41477c2dd ]---
>> [ 43.177679] BUG: unable to handle kernel NULL pointer dereference at
>> 0000000000000499
>> [ 43.177723] IP: __video_register_device+0x1cc/0x1090 [videodev]
>> [ 43.177749] PGD 0 P4D 0
>> [ 43.177764] Oops: 0000 [#1] SMP PTI
>> [ 43.177780] Modules linked in: hid_sensor_custom hid_sensor_als
>> hid_sensor_incl_3d hid_sensor_rotation hid_sensor_magn_3d
>> hid_sensor_accel_3d hid_sensor_gyro_3d hid_sensor_trigger
>> industrialio_triggered_buffer kfifo_buf joydev hid_sensor_iio_common
>> hid_rmi(+) rmi_core industrialio videobuf2_vmalloc videobuf2_memops
>> videobuf2_v4l2 videobuf2_common videodev hid_multitouch media
>> hid_sensor_hub binfmt_misc nls_iso8859_1 snd_hda_codec_hdmi arc4
>> snd_soc_skl snd_soc_skl_ipc snd_hda_ext_core snd_soc_sst_dsp
>> snd_soc_sst_ipc snd_hda_codec_realtek snd_soc_acpi snd_hda_codec_generic
>> snd_soc_core snd_compress ac97_bus snd_pcm_dmaengine snd_hda_intel
>> snd_hda_codec intel_rapl snd_hda_core x86_pkg_temp_thermal snd_hwdep
>> intel_powerclamp coretemp snd_pcm kvm_intel snd_seq_midi
>> snd_seq_midi_event snd_rawmidi crct10dif_pclmul
>> [ 43.178055] crc32_pclmul ghash_clmulni_intel iwlmvm pcbc mac80211
>> snd_seq aesni_intel iwlwifi aes_x86_64 snd_seq_device crypto_simd
>> glue_helper cryptd snd_timer intel_cstate intel_rapl_perf input_leds
>> serio_raw intel_wmi_thunderbolt snd wmi_bmof cfg80211 soundcore
>> ideapad_laptop sparse_keymap idma64 virt_dma tpm_crb acpi_pad
>> int3400_thermal acpi_thermal_rel intel_pch_thermal
>> processor_thermal_device mac_hid int340x_thermal_zone mei_me
>> intel_soc_dts_iosf mei intel_lpss_pci shpchp intel_lpss sch_fq_codel
>> vfio_pci nfsd vfio_virqfd parport_pc ppdev auth_rpcgss nfs_acl lockd
>> grace lp parport sunrpc ip_tables x_tables autofs4 hid_logitech_hidpp
>> hid_logitech_dj hid_generic usbhid kvmgt vfio_mdev mdev vfio_iommu_type1
>> vfio kvm irqbypass i915 i2c_algo_bit drm_kms_helper syscopyarea
>> sdhci_pci sysfillrect
>> [ 43.178337] sysimgblt cqhci fb_sys_fops sdhci drm i2c_hid wmi hid
>> video pinctrl_sunrisepoint pinctrl_intel
>> [ 43.178380] CPU: 1 PID: 711 Comm: systemd-udevd Tainted: G W
>> 4.16.0 #1
>> [ 43.178411] Hardware name: LENOVO 80UE/VIUU4, BIOS 2UCN10T 10/14/2016
>> [ 43.178441] RIP: 0010:__video_register_device+0x1cc/0x1090 [videodev]
>> [ 43.178467] RSP: 0000:ffffa5c5c231b420 EFLAGS: 00010202
>> [ 43.178490] RAX: ffffffffc0c44cc0 RBX: 0000000000000005 RCX:
>> ffffffffc0c454c0
>> [ 43.178519] RDX: 0000000000000001 RSI: ffff8eda1d6d9118 RDI:
>> ffffffffc0c44cc0
>> [ 43.178549] RBP: ffffa5c5c231b478 R08: ffffffffc0c96900 R09:
>> ffff8eda1a51f018
>> [ 43.178579] R10: 0000000000000600 R11: 00000000000003b6 R12:
>> 0000000000000000
>> [ 43.178608] R13: 0000000000000005 R14: ffffffffc0c96900 R15:
>> ffff8eda1d6d91c0
>> [ 43.178636] FS: 00007fd2d8ef2480(0000) GS:ffff8eda33480000(0000)
>> knlGS:0000000000000000
>> [ 43.178669] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>> [ 43.178693] CR2: 0000000000000499 CR3: 0000000456ae2004 CR4:
>> 00000000003606e0
>> [ 43.178721] Call Trace:
>> [ 43.178736] ? devres_add+0x5f/0x70
>> [ 43.178755] rmi_f54_probe+0x437/0x470 [rmi_core]
>> [ 43.178779] rmi_function_probe+0x25/0x30 [rmi_core]
>> [ 43.178805] driver_probe_device+0x310/0x480
>> [ 43.178828] __device_attach_driver+0x86/0x100
>> [ 43.178851] ? __driver_attach+0xf0/0xf0
>> [ 43.178884] bus_for_each_drv+0x6b/0xb0
>> [ 43.178904] __device_attach+0xdd/0x160
>> [ 43.178925] device_initial_probe+0x13/0x20
>> [ 43.178948] bus_probe_device+0x95/0xa0
>> [ 43.178968] device_add+0x44b/0x680
>> [ 43.178987] rmi_register_function+0x62/0xd0 [rmi_core]
>> [ 43.181747] rmi_create_function+0x112/0x1a0 [rmi_core]
>> [ 43.184677] ? rmi_driver_clear_irq_bits+0xc0/0xc0 [rmi_core]
>> [ 43.187505] rmi_scan_pdt+0xca/0x1a0 [rmi_core]
>> [ 43.190171] rmi_init_functions+0x5b/0x120 [rmi_core]
>> [ 43.192809] rmi_driver_probe+0x152/0x3c0 [rmi_core]
>> [ 43.195403] ? sysfs_create_link+0x25/0x40
>> [ 43.198253] driver_probe_device+0x310/0x480
>> [ 43.201083] __device_attach_driver+0x86/0x100
>> [ 43.203800] ? __driver_attach+0xf0/0xf0
>> [ 43.206503] bus_for_each_drv+0x6b/0xb0
>> [ 43.209291] __device_attach+0xdd/0x160
>> [ 43.212207] device_initial_probe+0x13/0x20
>> [ 43.215146] bus_probe_device+0x95/0xa0
>> [ 43.217885] device_add+0x44b/0x680
>> [ 43.220597] rmi_register_transport_device+0x84/0x100 [rmi_core]
>> [ 43.223321] rmi_input_configured+0xbf/0x1a0 [hid_rmi]
>> [ 43.226051] ? input_allocate_device+0xdf/0xf0
>> [ 43.228814] hidinput_connect+0x4a9/0x37a0 [hid]
>> [ 43.231701] hid_connect+0x326/0x3d0 [hid]
>> [ 43.234548] hid_hw_start+0x42/0x70 [hid]
>> [ 43.237302] rmi_probe+0x115/0x510 [hid_rmi]
>> [ 43.239862] hid_device_probe+0xd3/0x150 [hid]
>> [ 43.242558] ? sysfs_create_link+0x25/0x40
>> [ 43.242828] audit: type=1400 audit(1522795151.600:4):
>> apparmor="STATUS" operation="profile_load" profile="unconfined"
>> name="/snap/core/4206/usr/lib/snapd/snap-confine" pid=1151
>> comm="apparmor_parser"
>> [ 43.244859] driver_probe_device+0x310/0x480
>> [ 43.244862] __driver_attach+0xbf/0xf0
>> [ 43.246982] audit: type=1400 audit(1522795151.600:5):
>> apparmor="STATUS" operation="profile_load" profile="unconfined"
>> name="/snap/core/4206/usr/lib/snapd/snap-confine//mount-namespace-capture-helper"
>> pid=1151 comm="apparmor_parser"
>> [ 43.249403] ? driver_probe_device+0x480/0x480
>> [ 43.249405] bus_for_each_dev+0x74/0xb0
>> [ 43.253200] audit: type=1400 audit(1522795151.600:6):
>> apparmor="STATUS" operation="profile_load" profile="unconfined"
>> name="/snap/core/4206/usr/lib/snapd/snap-confine//snap_update_ns"
>> pid=1151 comm="apparmor_parser"
>> [ 43.254055] ? kmem_cache_alloc_trace+0x1a6/0x1c0
>> [ 43.256282] audit: type=1400 audit(1522795151.604:7):
>> apparmor="STATUS" operation="profile_load" profile="unconfined"
>> name="/sbin/dhclient" pid=1152 comm="apparmor_parser"
>> [ 43.258436] driver_attach+0x1e/0x20
>> [ 43.260875] audit: type=1400 audit(1522795151.604:8):
>> apparmor="STATUS" operation="profile_load" profile="unconfined"
>> name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=1152
>> comm="apparmor_parser"
>> [ 43.263118] bus_add_driver+0x167/0x260
>> [ 43.267676] audit: type=1400 audit(1522795151.604:9):
>> apparmor="STATUS" operation="profile_load" profile="unconfined"
>> name="/usr/lib/NetworkManager/nm-dhcp-helper" pid=1152
>> comm="apparmor_parser"
>> [ 43.268807] ? 0xffffffffc0cbc000
>> [ 43.268812] driver_register+0x60/0xe0
>> [ 43.271184] audit: type=1400 audit(1522795151.604:10):
>> apparmor="STATUS" operation="profile_load" profile="unconfined"
>> name="/usr/lib/connman/scripts/dhclient-script" pid=1152
>> comm="apparmor_parser"
>> [ 43.274081] ? 0xffffffffc0cbc000
>> [ 43.274086] __hid_register_driver+0x63/0x70 [hid]
>> [ 43.288367] rmi_driver_init+0x23/0x1000 [hid_rmi]
>> [ 43.291501] do_one_initcall+0x52/0x191
>> [ 43.292348] audit: type=1400 audit(1522795151.652:11):
>> apparmor="STATUS" operation="profile_load" profile="unconfined"
>> name="/usr/bin/man" pid=1242 comm="apparmor_parser"
>> [ 43.294212] ? _cond_resched+0x19/0x40
>> [ 43.300028] ? kmem_cache_alloc_trace+0xa2/0x1c0
>> [ 43.303475] ? do_init_module+0x27/0x209
>> [ 43.306842] do_init_module+0x5f/0x209
>> [ 43.310269] load_module+0x1987/0x1f10
>> [ 43.313704] ? ima_post_read_file+0x96/0xa0
>> [ 43.317174] SYSC_finit_module+0xfc/0x120
>> [ 43.320754] ? SYSC_finit_module+0xfc/0x120
>> [ 43.324065] SyS_finit_module+0xe/0x10
>> [ 43.327387] do_syscall_64+0x73/0x130
>> [ 43.330909] entry_SYSCALL_64_after_hwframe+0x3d/0xa2
>> [ 43.334305] RIP: 0033:0x7fd2d880b839
>> [ 43.337810] RSP: 002b:00007ffe0a6b2368 EFLAGS: 00000246 ORIG_RAX:
>> 0000000000000139
>> [ 43.341259] RAX: ffffffffffffffda RBX: 000055cdd86542e0 RCX:
>> 00007fd2d880b839
>> [ 43.344613] RDX: 0000000000000000 RSI: 00007fd2d84ea0e5 RDI:
>> 0000000000000016
>> [ 43.347962] RBP: 00007fd2d84ea0e5 R08: 0000000000000000 R09:
>> 00007ffe0a6b2480
>> [ 43.351456] R10: 0000000000000016 R11: 0000000000000246 R12:
>> 0000000000000000
>> [ 43.354845] R13: 000055cdd8688930 R14: 0000000000020000 R15:
>> 000055cdd86542e0
>> [ 43.358224] Code: c7 05 ad 12 02 00 00 00 00 00 48 8d 88 00 08 00 00
>> eb 09 48 83 c0 08 48 39 c1 74 31 48 8b 10 48 85 d2 74 ef 49 8b b7 98 04
>> 00 00 <48> 39 b2 98 04 00 00 75 df 48 63 92 f8 04 00 00 f0 48 0f ab 15
>> [ 43.361764] RIP: __video_register_device+0x1cc/0x1090 [videodev] RSP:
>> ffffa5c5c231b420
>> [ 43.365281] CR2: 0000000000000499
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply
* Re: [PATCH v3 2/4] mfd: add Gateworks System Controller core driver
From: Mark Brown @ 2018-04-04 14:41 UTC (permalink / raw)
To: Andrew Lunn
Cc: Tim Harvey, Lee Jones, Rob Herring, Mark Rutland, Dmitry Torokhov,
Wim Van Sebroeck, Guenter Roeck, linux-hwmon, devicetree,
linux-watchdog, Randy Dunlap, linux-kernel, linux-input,
linux-arm-kernel
In-Reply-To: <20180404131239.GD20869@lunn.ch>
[-- Attachment #1: Type: text/plain, Size: 1337 bytes --]
On Wed, Apr 04, 2018 at 03:12:39PM +0200, Andrew Lunn wrote:
> > What about the 'reset' functionality? Is there something in the power
> > supply API for hooking in a GPIO based power switch (in my case it
> > would be i2c) as I would think that would be common for ATX supplies?
> > I didn't see anything in Documentation/power.
> > This is what led me to the restart handler idea. Ultimately when
> > someone issues a 'reboot' I would like it to use the GSC to
> > power-cycle the board.
> I think you end up with the same problem. By the time you need to turn
> the power supply off, too much of the kernel is shut down to be able
> to use I2C. And if you are in the middle of an Oops, you have no idea
> of the current state. Another I2C transaction could be under way etc.
> All the current reset drivers are pretty much self contained, atomic
> and use KISS hardware like a GPIO.
> Maybe you best bet is to see if you can find any other I2C PMICs which
> the kernel supports.
Most systems have a handshake for final power down via asserting signals
rather than using register writes, the final power down sequence usually
runs way after software. There's a few things that don't which just
unceremoniously cut the power earlier on without completing the full
power down sequence which for all practical purposes mostly works.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply
* Re: [PATCHv1] Input: atmel_mxt_ts - fix the firmware update
From: Sebastian Reichel @ 2018-04-04 15:05 UTC (permalink / raw)
To: Nick Dyer
Cc: Dmitry Torokhov, linux-input, Henrik Rydberg, linux-kernel,
kernel, Nandor Han
In-Reply-To: <20180323194736.7fhgb6qjkwbivsvx@hairyalien>
[-- Attachment #1: Type: text/plain, Size: 14823 bytes --]
Hi Nick,
On Fri, Mar 23, 2018 at 07:47:36PM +0000, Nick Dyer wrote:
> On Thu, Mar 22, 2018 at 05:43:30PM +0100, Sebastian Reichel wrote:
> > The automatic update mechanism will trigger an update if the
> > info block CRCs are different between maxtouch configuration
> > file (maxtouch.cfg) and chip.
> >
> > The driver compared the CRCs without retrieving the chip CRC,
> > resulting always in a failure and firmware flashing action
> > triggered. The patch will fix this issue by retrieving the
> > chip info block CRC before the check.
>
> Thanks for raising this, I agree it's definitely something we want to
> fix.
>
> However, I'm not convinced you're solving the problem in the best way.
> You've attached it to the read_t9_resolution() code path, whereas the
> info block is common between T9 and T100 and works in the same way.
>
> Would you mind trying the below patch? I've dusted it off from some
> work that I did back in 2012 and it should solve your issue.
>
> It also has the benefit that by reading the information block and the
> object table into a contiguous region of memory, we can verify the
> checksum at probe time. This means we make sure that we are indeed
> talking to a chip that supports object protocol correctly.
>
> Signed-off-by: Nick Dyer <nick.dyer@shmanahar.org>
> Acked-by: Benson Leung <bleung@chromium.org>
I currently have an unrelated issue that breaks boot on that board,
so I can't test it, but the patch looks mostly good to me. I
noticed, two useless error messages for -ENOMEM. After fixing those
the patch is
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
> ---
> drivers/input/touchscreen/atmel_mxt_ts.c | 193 +++++++++++++++++++------------
> 1 file changed, 117 insertions(+), 76 deletions(-)
>
> diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
> index 7659bc48f1db..8a60d91d49a6 100644
> --- a/drivers/input/touchscreen/atmel_mxt_ts.c
> +++ b/drivers/input/touchscreen/atmel_mxt_ts.c
> @@ -275,7 +275,8 @@ struct mxt_data {
> char phys[64]; /* device physical location */
> const struct mxt_platform_data *pdata;
> struct mxt_object *object_table;
> - struct mxt_info info;
> + struct mxt_info *info;
> + void *raw_info_block;
> unsigned int irq;
> unsigned int max_x;
> unsigned int max_y;
> @@ -450,12 +451,13 @@ static int mxt_lookup_bootloader_address(struct mxt_data *data, bool retry)
> {
> u8 appmode = data->client->addr;
> u8 bootloader;
> + u8 family_id = data->info ? data->info->family_id : 0;
>
> switch (appmode) {
> case 0x4a:
> case 0x4b:
> /* Chips after 1664S use different scheme */
> - if (retry || data->info.family_id >= 0xa2) {
> + if (retry || family_id >= 0xa2) {
> bootloader = appmode - 0x24;
> break;
> }
> @@ -682,7 +684,7 @@ mxt_get_object(struct mxt_data *data, u8 type)
> struct mxt_object *object;
> int i;
>
> - for (i = 0; i < data->info.object_num; i++) {
> + for (i = 0; i < data->info->object_num; i++) {
> object = data->object_table + i;
> if (object->type == type)
> return object;
> @@ -1453,12 +1455,12 @@ static int mxt_update_cfg(struct mxt_data *data, const struct firmware *cfg)
> data_pos += offset;
> }
>
> - if (cfg_info.family_id != data->info.family_id) {
> + if (cfg_info.family_id != data->info->family_id) {
> dev_err(dev, "Family ID mismatch!\n");
> return -EINVAL;
> }
>
> - if (cfg_info.variant_id != data->info.variant_id) {
> + if (cfg_info.variant_id != data->info->variant_id) {
> dev_err(dev, "Variant ID mismatch!\n");
> return -EINVAL;
> }
> @@ -1503,7 +1505,7 @@ static int mxt_update_cfg(struct mxt_data *data, const struct firmware *cfg)
>
> /* Malloc memory to store configuration */
> cfg_start_ofs = MXT_OBJECT_START +
> - data->info.object_num * sizeof(struct mxt_object) +
> + data->info->object_num * sizeof(struct mxt_object) +
> MXT_INFO_CHECKSUM_SIZE;
> config_mem_size = data->mem_size - cfg_start_ofs;
> config_mem = kzalloc(config_mem_size, GFP_KERNEL);
> @@ -1554,20 +1556,6 @@ static int mxt_update_cfg(struct mxt_data *data, const struct firmware *cfg)
> return ret;
> }
>
> -static int mxt_get_info(struct mxt_data *data)
> -{
> - struct i2c_client *client = data->client;
> - struct mxt_info *info = &data->info;
> - int error;
> -
> - /* Read 7-byte info block starting at address 0 */
> - error = __mxt_read_reg(client, 0, sizeof(*info), info);
> - if (error)
> - return error;
> -
> - return 0;
> -}
> -
> static void mxt_free_input_device(struct mxt_data *data)
> {
> if (data->input_dev) {
> @@ -1582,9 +1570,10 @@ static void mxt_free_object_table(struct mxt_data *data)
> video_unregister_device(&data->dbg.vdev);
> v4l2_device_unregister(&data->dbg.v4l2);
> #endif
> -
> - kfree(data->object_table);
> data->object_table = NULL;
> + data->info = NULL;
> + kfree(data->raw_info_block);
> + data->raw_info_block = NULL;
> kfree(data->msg_buf);
> data->msg_buf = NULL;
> data->T5_address = 0;
> @@ -1600,34 +1589,18 @@ static void mxt_free_object_table(struct mxt_data *data)
> data->max_reportid = 0;
> }
>
> -static int mxt_get_object_table(struct mxt_data *data)
> +static int mxt_parse_object_table(struct mxt_data *data,
> + struct mxt_object *object_table)
> {
> struct i2c_client *client = data->client;
> - size_t table_size;
> - struct mxt_object *object_table;
> - int error;
> int i;
> u8 reportid;
> u16 end_address;
>
> - table_size = data->info.object_num * sizeof(struct mxt_object);
> - object_table = kzalloc(table_size, GFP_KERNEL);
> - if (!object_table) {
> - dev_err(&data->client->dev, "Failed to allocate memory\n");
> - return -ENOMEM;
> - }
> -
> - error = __mxt_read_reg(client, MXT_OBJECT_START, table_size,
> - object_table);
> - if (error) {
> - kfree(object_table);
> - return error;
> - }
> -
> /* Valid Report IDs start counting from 1 */
> reportid = 1;
> data->mem_size = 0;
> - for (i = 0; i < data->info.object_num; i++) {
> + for (i = 0; i < data->info->object_num; i++) {
> struct mxt_object *object = object_table + i;
> u8 min_id, max_id;
>
> @@ -1651,8 +1624,8 @@ static int mxt_get_object_table(struct mxt_data *data)
>
> switch (object->type) {
> case MXT_GEN_MESSAGE_T5:
> - if (data->info.family_id == 0x80 &&
> - data->info.version < 0x20) {
> + if (data->info->family_id == 0x80 &&
> + data->info->version < 0x20) {
> /*
> * On mXT224 firmware versions prior to V2.0
> * read and discard unused CRC byte otherwise
> @@ -1707,24 +1680,108 @@ static int mxt_get_object_table(struct mxt_data *data)
> /* If T44 exists, T5 position has to be directly after */
> if (data->T44_address && (data->T5_address != data->T44_address + 1)) {
> dev_err(&client->dev, "Invalid T44 position\n");
> - error = -EINVAL;
> - goto free_object_table;
> + return -EINVAL;
> }
>
> data->msg_buf = kcalloc(data->max_reportid,
> data->T5_msg_size, GFP_KERNEL);
> if (!data->msg_buf) {
> dev_err(&client->dev, "Failed to allocate message buffer\n");
> + return -ENOMEM;
> + }
> +
> + return 0;
> +}
> +
> +static int mxt_read_info_block(struct mxt_data *data)
> +{
> + struct i2c_client *client = data->client;
> + int error;
> + size_t size;
> + void *id_buf, *buf;
> + uint8_t num_objects;
> + u32 calculated_crc;
> + u8 *crc_ptr;
> +
> + /* If info block already allocated, free it */
> + if (data->raw_info_block != NULL)
> + mxt_free_object_table(data);
> +
> + /* Read 7-byte ID information block starting at address 0 */
> + size = sizeof(struct mxt_info);
> + id_buf = kzalloc(size, GFP_KERNEL);
> + if (!id_buf) {
> + dev_err(&client->dev, "Failed to allocate memory\n");
> + return -ENOMEM;
> + }
> +
> + error = __mxt_read_reg(client, 0, size, id_buf);
> + if (error) {
> + kfree(id_buf);
> + return error;
> + }
> +
> + /* Resize buffer to give space for rest of info block */
> + num_objects = ((struct mxt_info *)id_buf)->object_num;
> + size += (num_objects * sizeof(struct mxt_object))
> + + MXT_INFO_CHECKSUM_SIZE;
> +
> + buf = krealloc(id_buf, size, GFP_KERNEL);
> + if (!buf) {
> + dev_err(&client->dev, "Failed to allocate memory\n");
> error = -ENOMEM;
> - goto free_object_table;
> + goto err_free_mem;
> + }
> +
> + /* Read rest of info block */
> + error = __mxt_read_reg(client, MXT_OBJECT_START,
> + size - MXT_OBJECT_START,
> + buf + MXT_OBJECT_START);
> + if (error)
> + goto err_free_mem;
> +
> + /* Extract & calculate checksum */
> + crc_ptr = buf + size - MXT_INFO_CHECKSUM_SIZE;
> + data->info_crc = crc_ptr[0] | (crc_ptr[1] << 8) | (crc_ptr[2] << 16);
> +
> + calculated_crc = mxt_calculate_crc(buf, 0,
> + size - MXT_INFO_CHECKSUM_SIZE);
> +
> + /*
> + * CRC mismatch can be caused by data corruption due to I2C comms
> + * issue or else device is not using Object Based Protocol (eg i2c-hid)
> + */
> + if ((data->info_crc == 0) || (data->info_crc != calculated_crc)) {
> + dev_err(&client->dev,
> + "Info Block CRC error calculated=0x%06X read=0x%06X\n",
> + calculated_crc, data->info_crc);
> + error = -EIO;
> + goto err_free_mem;
> }
>
> - data->object_table = object_table;
> + data->raw_info_block = buf;
> + data->info = (struct mxt_info *)buf;
> +
> + dev_info(&client->dev,
> + "Family: %u Variant: %u Firmware V%u.%u.%02X Objects: %u\n",
> + data->info->family_id, data->info->variant_id,
> + data->info->version >> 4, data->info->version & 0xf,
> + data->info->build, data->info->object_num);
> +
> + /* Parse object table information */
> + error = mxt_parse_object_table(data, buf + MXT_OBJECT_START);
> + if (error) {
> + dev_err(&client->dev, "Error %d parsing object table\n", error);
> + mxt_free_object_table(data);
> + return error;
> + }
> +
> + data->object_table = (struct mxt_object *)(buf + MXT_OBJECT_START);
>
> return 0;
>
> -free_object_table:
> - mxt_free_object_table(data);
> +err_free_mem:
> + kfree(buf);
> return error;
> }
>
> @@ -2039,7 +2096,7 @@ static int mxt_initialize(struct mxt_data *data)
> int error;
>
> while (1) {
> - error = mxt_get_info(data);
> + error = mxt_read_info_block(data);
> if (!error)
> break;
>
> @@ -2070,13 +2127,6 @@ static int mxt_initialize(struct mxt_data *data)
> msleep(MXT_FW_RESET_TIME);
> }
>
> - /* Get object table information */
> - error = mxt_get_object_table(data);
> - if (error) {
> - dev_err(&client->dev, "Error %d reading object table\n", error);
> - return error;
> - }
> -
> error = mxt_acquire_irq(data);
> if (error)
> goto err_free_object_table;
> @@ -2155,25 +2205,24 @@ static int mxt_init_t7_power_cfg(struct mxt_data *data)
> static u16 mxt_get_debug_value(struct mxt_data *data, unsigned int x,
> unsigned int y)
> {
> - struct mxt_info *info = &data->info;
> struct mxt_dbg *dbg = &data->dbg;
> unsigned int ofs, page;
> unsigned int col = 0;
> unsigned int col_width;
>
> - if (info->family_id == MXT_FAMILY_1386) {
> - col_width = info->matrix_ysize / MXT1386_COLUMNS;
> + if (data->info->family_id == MXT_FAMILY_1386) {
> + col_width = data->info->matrix_ysize / MXT1386_COLUMNS;
> col = y / col_width;
> y = y % col_width;
> } else {
> - col_width = info->matrix_ysize;
> + col_width = data->info->matrix_ysize;
> }
>
> ofs = (y + (x * col_width)) * sizeof(u16);
> page = ofs / MXT_DIAGNOSTIC_SIZE;
> ofs %= MXT_DIAGNOSTIC_SIZE;
>
> - if (info->family_id == MXT_FAMILY_1386)
> + if (data->info->family_id == MXT_FAMILY_1386)
> page += col * MXT1386_PAGES_PER_COLUMN;
>
> return get_unaligned_le16(&dbg->t37_buf[page].data[ofs]);
> @@ -2483,7 +2532,6 @@ static const struct video_device mxt_video_device = {
>
> static void mxt_debug_init(struct mxt_data *data)
> {
> - struct mxt_info *info = &data->info;
> struct mxt_dbg *dbg = &data->dbg;
> struct mxt_object *object;
> int error;
> @@ -2508,11 +2556,11 @@ static void mxt_debug_init(struct mxt_data *data)
> /* Calculate size of data and allocate buffer */
> dbg->t37_nodes = data->xsize * data->ysize;
>
> - if (info->family_id == MXT_FAMILY_1386)
> + if (data->info->family_id == MXT_FAMILY_1386)
> dbg->t37_pages = MXT1386_COLUMNS * MXT1386_PAGES_PER_COLUMN;
> else
> dbg->t37_pages = DIV_ROUND_UP(data->xsize *
> - info->matrix_ysize *
> + data->info->matrix_ysize *
> sizeof(u16),
> sizeof(dbg->t37_buf->data));
>
> @@ -2569,7 +2617,6 @@ static int mxt_configure_objects(struct mxt_data *data,
> const struct firmware *cfg)
> {
> struct device *dev = &data->client->dev;
> - struct mxt_info *info = &data->info;
> int error;
>
> error = mxt_init_t7_power_cfg(data);
> @@ -2594,11 +2641,6 @@ static int mxt_configure_objects(struct mxt_data *data,
>
> mxt_debug_init(data);
>
> - dev_info(dev,
> - "Family: %u Variant: %u Firmware V%u.%u.%02X Objects: %u\n",
> - info->family_id, info->variant_id, info->version >> 4,
> - info->version & 0xf, info->build, info->object_num);
> -
> return 0;
> }
>
> @@ -2607,9 +2649,9 @@ static ssize_t mxt_fw_version_show(struct device *dev,
> struct device_attribute *attr, char *buf)
> {
> struct mxt_data *data = dev_get_drvdata(dev);
> - struct mxt_info *info = &data->info;
> return scnprintf(buf, PAGE_SIZE, "%u.%u.%02X\n",
> - info->version >> 4, info->version & 0xf, info->build);
> + data->info->version >> 4, data->info->version & 0xf,
> + data->info->build);
> }
>
> /* Hardware Version is returned as FamilyID.VariantID */
> @@ -2617,9 +2659,8 @@ static ssize_t mxt_hw_version_show(struct device *dev,
> struct device_attribute *attr, char *buf)
> {
> struct mxt_data *data = dev_get_drvdata(dev);
> - struct mxt_info *info = &data->info;
> return scnprintf(buf, PAGE_SIZE, "%u.%u\n",
> - info->family_id, info->variant_id);
> + data->info->family_id, data->info->variant_id);
> }
>
> static ssize_t mxt_show_instance(char *buf, int count,
> @@ -2656,7 +2697,7 @@ static ssize_t mxt_object_show(struct device *dev,
> return -ENOMEM;
>
> error = 0;
> - for (i = 0; i < data->info.object_num; i++) {
> + for (i = 0; i < data->info->object_num; i++) {
> object = data->object_table + i;
>
> if (!mxt_object_readable(object->type))
> --
> 2.14.1
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply
* Re: Linux 4.16 Kernel Boot Crash
From: Peter Geis @ 2018-04-04 16:56 UTC (permalink / raw)
To: Jaak Ristioja, Jani Nikula, linux-media, linux-input,
Mauro Carvalho Chehab, Dmitry Torokhov
Cc: intel-gfx
In-Reply-To: <5ac4d275.1c69fb81.9f4be.b26eSMTPIN_ADDED_MISSING@mx.google.com>
Good Afternoon,
I have been digging into this issue further, and the problem is
definitely with the media driver.
Rebuilt the kernel with media drivers compiled in vice modular and the
kernel boots without issue.
The core dump states the crash occurred at
drivers/media/v4l2-core/v4l2-dev.c, line 945.
This line is checking if the vdev minor is actually free.
There were some significant changes to v4l in 4.16 from 4.15.
Considering the following behavior:
A. It panics if it boots immediately.
B. If booted to recovery for a period of time (~5 mins) then resumed
booting it boots without issue.
I believe that the module is being loaded before something it is
dependent on has initialized, causing this issue.
Thank you Jani for pointing out my error, I shouldn't debug at night.
Very Repspectfully,
Peter Geis
On 04/04/2018 09:26 AM, Jaak Ristioja wrote:
> Hello, all!
>
> I experience the same issue with a Lenovo ThinkPad T440p (LENOVO
> 20AN006VMS/20AN006VMS, BIOS GLET90WW (2.44 ) 09/13/2017). I tried to
> bisect v4.15..v4.16 but failed.
>
> Best regards,
> J
>
> On 04.04.2018 15:36, Jani Nikula wrote:
>> On Tue, 03 Apr 2018, Peter Geis <pgwipeout@gmail.com> wrote:
>>> Good Evening,
>>>
>>> I have been trying to use the 4.16 kernel source since 4.16-rc3.
>>> Every time it booted it crashed upon loading the video drivers.
>>> Now with the 4.16 release, it is still occurring, so I felt it prudent
>>> to notify someone.
>>>
>>> The machine is a Lenovo Yoga 900 80UE-ISK2.
>>> It has a i7-6560u CPU with Intel integrated graphics.
>>
>> This doesn't seem to have anything to do with Intel graphics. Based on
>> the backtraces, adding linux-media and linux-input mailing lists and
>> maintainers.
>>
>> BR,
>> Jani.
>>
>>
>>>
>>> I have included the kernel log, what format should I submit the vmcore
>>> dump in?
>>>
>>> Thanks,
>>> Peter Geis
>>>
>>>
>>> ---Begin Log---
>>>
>>> [ 43.177394] WARNING: CPU: 1 PID: 711 at
>>> drivers/media/v4l2-core/v4l2-dev.c:945
>>> __video_register_device+0xc99/0x1090 [videodev]
>>> [ 43.177396] Modules linked in: hid_sensor_custom hid_sensor_als
>>> hid_sensor_incl_3d hid_sensor_rotation hid_sensor_magn_3d
>>> hid_sensor_accel_3d hid_sensor_gyro_3d hid_sensor_trigger
>>> industrialio_triggered_buffer kfifo_buf joydev hid_sensor_iio_common
>>> hid_rmi(+) rmi_core industrialio videobuf2_vmalloc videobuf2_memops
>>> videobuf2_v4l2 videobuf2_common videodev hid_multitouch media
>>> hid_sensor_hub binfmt_misc nls_iso8859_1 snd_hda_codec_hdmi arc4
>>> snd_soc_skl snd_soc_skl_ipc snd_hda_ext_core snd_soc_sst_dsp
>>> snd_soc_sst_ipc snd_hda_codec_realtek snd_soc_acpi snd_hda_codec_generic
>>> snd_soc_core snd_compress ac97_bus snd_pcm_dmaengine snd_hda_intel
>>> snd_hda_codec intel_rapl snd_hda_core x86_pkg_temp_thermal snd_hwdep
>>> intel_powerclamp coretemp snd_pcm kvm_intel snd_seq_midi
>>> snd_seq_midi_event snd_rawmidi crct10dif_pclmul
>>> [ 43.177426] crc32_pclmul ghash_clmulni_intel iwlmvm pcbc mac80211
>>> snd_seq aesni_intel iwlwifi aes_x86_64 snd_seq_device crypto_simd
>>> glue_helper cryptd snd_timer intel_cstate intel_rapl_perf input_leds
>>> serio_raw intel_wmi_thunderbolt snd wmi_bmof cfg80211 soundcore
>>> ideapad_laptop sparse_keymap idma64 virt_dma tpm_crb acpi_pad
>>> int3400_thermal acpi_thermal_rel intel_pch_thermal
>>> processor_thermal_device mac_hid int340x_thermal_zone mei_me
>>> intel_soc_dts_iosf mei intel_lpss_pci shpchp intel_lpss sch_fq_codel
>>> vfio_pci nfsd vfio_virqfd parport_pc ppdev auth_rpcgss nfs_acl lockd
>>> grace lp parport sunrpc ip_tables x_tables autofs4 hid_logitech_hidpp
>>> hid_logitech_dj hid_generic usbhid kvmgt vfio_mdev mdev vfio_iommu_type1
>>> vfio kvm irqbypass i915 i2c_algo_bit drm_kms_helper syscopyarea
>>> sdhci_pci sysfillrect
>>> [ 43.177466] sysimgblt cqhci fb_sys_fops sdhci drm i2c_hid wmi hid
>>> video pinctrl_sunrisepoint pinctrl_intel
>>> [ 43.177474] CPU: 1 PID: 711 Comm: systemd-udevd Not tainted 4.16.0 #1
>>> [ 43.177475] Hardware name: LENOVO 80UE/VIUU4, BIOS 2UCN10T 10/14/2016
>>> [ 43.177481] RIP: 0010:__video_register_device+0xc99/0x1090 [videodev]
>>> [ 43.177482] RSP: 0000:ffffa5c5c231b420 EFLAGS: 00010202
>>> [ 43.177484] RAX: 0000000000000000 RBX: 0000000000000005 RCX:
>>> 0000000000000000
>>> [ 43.177485] RDX: ffffffffc0c44cc0 RSI: ffffffffffffffff RDI:
>>> ffffffffc0c44cc0
>>> [ 43.177486] RBP: ffffa5c5c231b478 R08: ffffffffc0c96900 R09:
>>> ffff8eda1a51f018
>>> [ 43.177487] R10: 0000000000000600 R11: 00000000000003b6 R12:
>>> 0000000000000000
>>> [ 43.177488] R13: 0000000000000005 R14: ffffffffc0c96900 R15:
>>> ffff8eda1d6d91c0
>>> [ 43.177489] FS: 00007fd2d8ef2480(0000) GS:ffff8eda33480000(0000)
>>> knlGS:0000000000000000
>>> [ 43.177490] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>>> [ 43.177491] CR2: 00007ffe0a6ad01c CR3: 0000000456ae2004 CR4:
>>> 00000000003606e0
>>> [ 43.177492] Call Trace:
>>> [ 43.177498] ? devres_add+0x5f/0x70
>>> [ 43.177502] rmi_f54_probe+0x437/0x470 [rmi_core]
>>> [ 43.177505] rmi_function_probe+0x25/0x30 [rmi_core]
>>> [ 43.177507] driver_probe_device+0x310/0x480
>>> [ 43.177509] __device_attach_driver+0x86/0x100
>>> [ 43.177511] ? __driver_attach+0xf0/0xf0
>>> [ 43.177512] bus_for_each_drv+0x6b/0xb0
>>> [ 43.177514] __device_attach+0xdd/0x160
>>> [ 43.177516] device_initial_probe+0x13/0x20
>>> [ 43.177518] bus_probe_device+0x95/0xa0
>>> [ 43.177519] device_add+0x44b/0x680
>>> [ 43.177522] rmi_register_function+0x62/0xd0 [rmi_core]
>>> [ 43.177525] rmi_create_function+0x112/0x1a0 [rmi_core]
>>> [ 43.177527] ? rmi_driver_clear_irq_bits+0xc0/0xc0 [rmi_core]
>>> [ 43.177530] rmi_scan_pdt+0xca/0x1a0 [rmi_core]
>>> [ 43.177535] rmi_init_functions+0x5b/0x120 [rmi_core]
>>> [ 43.177537] rmi_driver_probe+0x152/0x3c0 [rmi_core]
>>> [ 43.177547] ? sysfs_create_link+0x25/0x40
>>> [ 43.177549] driver_probe_device+0x310/0x480
>>> [ 43.177551] __device_attach_driver+0x86/0x100
>>> [ 43.177553] ? __driver_attach+0xf0/0xf0
>>> [ 43.177554] bus_for_each_drv+0x6b/0xb0
>>> [ 43.177556] __device_attach+0xdd/0x160
>>> [ 43.177558] device_initial_probe+0x13/0x20
>>> [ 43.177560] bus_probe_device+0x95/0xa0
>>> [ 43.177561] device_add+0x44b/0x680
>>> [ 43.177564] rmi_register_transport_device+0x84/0x100 [rmi_core]
>>> [ 43.177568] rmi_input_configured+0xbf/0x1a0 [hid_rmi]
>>> [ 43.177571] ? input_allocate_device+0xdf/0xf0
>>> [ 43.177574] hidinput_connect+0x4a9/0x37a0 [hid]
>>> [ 43.177578] hid_connect+0x326/0x3d0 [hid]
>>> [ 43.177581] hid_hw_start+0x42/0x70 [hid]
>>> [ 43.177583] rmi_probe+0x115/0x510 [hid_rmi]
>>> [ 43.177586] hid_device_probe+0xd3/0x150 [hid]
>>> [ 43.177588] ? sysfs_create_link+0x25/0x40
>>> [ 43.177590] driver_probe_device+0x310/0x480
>>> [ 43.177592] __driver_attach+0xbf/0xf0
>>> [ 43.177593] ? driver_probe_device+0x480/0x480
>>> [ 43.177595] bus_for_each_dev+0x74/0xb0
>>> [ 43.177597] ? kmem_cache_alloc_trace+0x1a6/0x1c0
>>> [ 43.177599] driver_attach+0x1e/0x20
>>> [ 43.177600] bus_add_driver+0x167/0x260
>>> [ 43.177602] ? 0xffffffffc0cbc000
>>> [ 43.177604] driver_register+0x60/0xe0
>>> [ 43.177605] ? 0xffffffffc0cbc000
>>> [ 43.177607] __hid_register_driver+0x63/0x70 [hid]
>>> [ 43.177610] rmi_driver_init+0x23/0x1000 [hid_rmi]
>>> [ 43.177612] do_one_initcall+0x52/0x191
>>> [ 43.177615] ? _cond_resched+0x19/0x40
>>> [ 43.177617] ? kmem_cache_alloc_trace+0xa2/0x1c0
>>> [ 43.177619] ? do_init_module+0x27/0x209
>>> [ 43.177621] do_init_module+0x5f/0x209
>>> [ 43.177623] load_module+0x1987/0x1f10
>>> -- MORE -- forward: <SPACE>, <ENTER> or j backward: b or k quit: q
>>> [ 43.177488] R13: 0000000000000005 R14: ffffffffc0c96900 R15:
>>> ffff8eda1d6d91c0
>>> [ 43.177489] FS: 00007fd2d8ef2480(0000) GS:ffff8eda33480000(0000)
>>> knlGS:0000000000000000
>>> [ 43.177490] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>>> [ 43.177491] CR2: 00007ffe0a6ad01c CR3: 0000000456ae2004 CR4:
>>> 00000000003606e0
>>> [ 43.177492] Call Trace:
>>> [ 43.177498] ? devres_add+0x5f/0x70
>>> [ 43.177502] rmi_f54_probe+0x437/0x470 [rmi_core]
>>> [ 43.177505] rmi_function_probe+0x25/0x30 [rmi_core]
>>> [ 43.177507] driver_probe_device+0x310/0x480
>>> [ 43.177509] __device_attach_driver+0x86/0x100
>>> [ 43.177511] ? __driver_attach+0xf0/0xf0
>>> [ 43.177512] bus_for_each_drv+0x6b/0xb0
>>> [ 43.177514] __device_attach+0xdd/0x160
>>> [ 43.177516] device_initial_probe+0x13/0x20
>>> [ 43.177518] bus_probe_device+0x95/0xa0
>>> [ 43.177519] device_add+0x44b/0x680
>>> [ 43.177522] rmi_register_function+0x62/0xd0 [rmi_core]
>>> [ 43.177525] rmi_create_function+0x112/0x1a0 [rmi_core]
>>> [ 43.177527] ? rmi_driver_clear_irq_bits+0xc0/0xc0 [rmi_core]
>>> [ 43.177530] rmi_scan_pdt+0xca/0x1a0 [rmi_core]
>>> [ 43.177535] rmi_init_functions+0x5b/0x120 [rmi_core]
>>> [ 43.177537] rmi_driver_probe+0x152/0x3c0 [rmi_core]
>>> [ 43.177547] ? sysfs_create_link+0x25/0x40
>>> [ 43.177549] driver_probe_device+0x310/0x480
>>> [ 43.177551] __device_attach_driver+0x86/0x100
>>> [ 43.177553] ? __driver_attach+0xf0/0xf0
>>> [ 43.177554] bus_for_each_drv+0x6b/0xb0
>>> [ 43.177556] __device_attach+0xdd/0x160
>>> [ 43.177558] device_initial_probe+0x13/0x20
>>> [ 43.177560] bus_probe_device+0x95/0xa0
>>> [ 43.177561] device_add+0x44b/0x680
>>> [ 43.177564] rmi_register_transport_device+0x84/0x100 [rmi_core]
>>> [ 43.177568] rmi_input_configured+0xbf/0x1a0 [hid_rmi]
>>> [ 43.177571] ? input_allocate_device+0xdf/0xf0
>>> [ 43.177574] hidinput_connect+0x4a9/0x37a0 [hid]
>>> [ 43.177578] hid_connect+0x326/0x3d0 [hid]
>>> [ 43.177581] hid_hw_start+0x42/0x70 [hid]
>>> [ 43.177583] rmi_probe+0x115/0x510 [hid_rmi]
>>> [ 43.177586] hid_device_probe+0xd3/0x150 [hid]
>>> [ 43.177588] ? sysfs_create_link+0x25/0x40
>>> [ 43.177590] driver_probe_device+0x310/0x480
>>> [ 43.177592] __driver_attach+0xbf/0xf0
>>> [ 43.177593] ? driver_probe_device+0x480/0x480
>>> [ 43.177595] bus_for_each_dev+0x74/0xb0
>>> [ 43.177597] ? kmem_cache_alloc_trace+0x1a6/0x1c0
>>> [ 43.177599] driver_attach+0x1e/0x20
>>> [ 43.177600] bus_add_driver+0x167/0x260
>>> [ 43.177602] ? 0xffffffffc0cbc000
>>> [ 43.177604] driver_register+0x60/0xe0
>>> [ 43.177605] ? 0xffffffffc0cbc000
>>> [ 43.177607] __hid_register_driver+0x63/0x70 [hid]
>>> [ 43.177610] rmi_driver_init+0x23/0x1000 [hid_rmi]
>>> [ 43.177612] do_one_initcall+0x52/0x191
>>> [ 43.177615] ? _cond_resched+0x19/0x40
>>> [ 43.177617] ? kmem_cache_alloc_trace+0xa2/0x1c0
>>> [ 43.177619] ? do_init_module+0x27/0x209
>>> [ 43.177621] do_init_module+0x5f/0x209
>>> [ 43.177623] load_module+0x1987/0x1f10
>>> [ 43.177626] ? ima_post_read_file+0x96/0xa0
>>> [ 43.177629] SYSC_finit_module+0xfc/0x120
>>> [ 43.177630] ? SYSC_finit_module+0xfc/0x120
>>> [ 43.177632] SyS_finit_module+0xe/0x10
>>> [ 43.177634] do_syscall_64+0x73/0x130
>>> [ 43.177637] entry_SYSCALL_64_after_hwframe+0x3d/0xa2
>>> [ 43.177638] RIP: 0033:0x7fd2d880b839
>>> [ 43.177639] RSP: 002b:00007ffe0a6b2368 EFLAGS: 00000246 ORIG_RAX:
>>> 0000000000000139
>>> [ 43.177641] RAX: ffffffffffffffda RBX: 000055cdd86542e0 RCX:
>>> 00007fd2d880b839
>>> [ 43.177641] RDX: 0000000000000000 RSI: 00007fd2d84ea0e5 RDI:
>>> 0000000000000016
>>> [ 43.177642] RBP: 00007fd2d84ea0e5 R08: 0000000000000000 R09:
>>> 00007ffe0a6b2480
>>> [ 43.177643] R10: 0000000000000016 R11: 0000000000000246 R12:
>>> 0000000000000000
>>> [ 43.177644] R13: 000055cdd8688930 R14: 0000000000020000 R15:
>>> 000055cdd86542e0
>>> [ 43.177645] Code: 48 c7 c7 54 b4 c3 c0 e8 96 9d ec dd e9 d4 fb ff ff
>>> 0f 0b 41 be ea ff ff ff e9 c7 fb ff ff 0f 0b 41 be ea ff ff ff e9 ba fb
>>> ff ff <0f> 0b e9 d8 f4 ff ff 83 fa 01 0f 84 c4 02 00 00 48 83 78 68 00
>>> [ 43.177675] ---[ end trace d44d9bc41477c2dd ]---
>>> [ 43.177679] BUG: unable to handle kernel NULL pointer dereference at
>>> 0000000000000499
>>> [ 43.177723] IP: __video_register_device+0x1cc/0x1090 [videodev]
>>> [ 43.177749] PGD 0 P4D 0
>>> [ 43.177764] Oops: 0000 [#1] SMP PTI
>>> [ 43.177780] Modules linked in: hid_sensor_custom hid_sensor_als
>>> hid_sensor_incl_3d hid_sensor_rotation hid_sensor_magn_3d
>>> hid_sensor_accel_3d hid_sensor_gyro_3d hid_sensor_trigger
>>> industrialio_triggered_buffer kfifo_buf joydev hid_sensor_iio_common
>>> hid_rmi(+) rmi_core industrialio videobuf2_vmalloc videobuf2_memops
>>> videobuf2_v4l2 videobuf2_common videodev hid_multitouch media
>>> hid_sensor_hub binfmt_misc nls_iso8859_1 snd_hda_codec_hdmi arc4
>>> snd_soc_skl snd_soc_skl_ipc snd_hda_ext_core snd_soc_sst_dsp
>>> snd_soc_sst_ipc snd_hda_codec_realtek snd_soc_acpi snd_hda_codec_generic
>>> snd_soc_core snd_compress ac97_bus snd_pcm_dmaengine snd_hda_intel
>>> snd_hda_codec intel_rapl snd_hda_core x86_pkg_temp_thermal snd_hwdep
>>> intel_powerclamp coretemp snd_pcm kvm_intel snd_seq_midi
>>> snd_seq_midi_event snd_rawmidi crct10dif_pclmul
>>> [ 43.178055] crc32_pclmul ghash_clmulni_intel iwlmvm pcbc mac80211
>>> snd_seq aesni_intel iwlwifi aes_x86_64 snd_seq_device crypto_simd
>>> glue_helper cryptd snd_timer intel_cstate intel_rapl_perf input_leds
>>> serio_raw intel_wmi_thunderbolt snd wmi_bmof cfg80211 soundcore
>>> ideapad_laptop sparse_keymap idma64 virt_dma tpm_crb acpi_pad
>>> int3400_thermal acpi_thermal_rel intel_pch_thermal
>>> processor_thermal_device mac_hid int340x_thermal_zone mei_me
>>> intel_soc_dts_iosf mei intel_lpss_pci shpchp intel_lpss sch_fq_codel
>>> vfio_pci nfsd vfio_virqfd parport_pc ppdev auth_rpcgss nfs_acl lockd
>>> grace lp parport sunrpc ip_tables x_tables autofs4 hid_logitech_hidpp
>>> hid_logitech_dj hid_generic usbhid kvmgt vfio_mdev mdev vfio_iommu_type1
>>> vfio kvm irqbypass i915 i2c_algo_bit drm_kms_helper syscopyarea
>>> sdhci_pci sysfillrect
>>> [ 43.178337] sysimgblt cqhci fb_sys_fops sdhci drm i2c_hid wmi hid
>>> video pinctrl_sunrisepoint pinctrl_intel
>>> [ 43.178380] CPU: 1 PID: 711 Comm: systemd-udevd Tainted: G W
>>> 4.16.0 #1
>>> [ 43.178411] Hardware name: LENOVO 80UE/VIUU4, BIOS 2UCN10T 10/14/2016
>>> [ 43.178441] RIP: 0010:__video_register_device+0x1cc/0x1090 [videodev]
>>> [ 43.178467] RSP: 0000:ffffa5c5c231b420 EFLAGS: 00010202
>>> [ 43.178490] RAX: ffffffffc0c44cc0 RBX: 0000000000000005 RCX:
>>> ffffffffc0c454c0
>>> [ 43.178519] RDX: 0000000000000001 RSI: ffff8eda1d6d9118 RDI:
>>> ffffffffc0c44cc0
>>> [ 43.178549] RBP: ffffa5c5c231b478 R08: ffffffffc0c96900 R09:
>>> ffff8eda1a51f018
>>> [ 43.178579] R10: 0000000000000600 R11: 00000000000003b6 R12:
>>> 0000000000000000
>>> [ 43.178608] R13: 0000000000000005 R14: ffffffffc0c96900 R15:
>>> ffff8eda1d6d91c0
>>> [ 43.178636] FS: 00007fd2d8ef2480(0000) GS:ffff8eda33480000(0000)
>>> knlGS:0000000000000000
>>> [ 43.178669] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>>> [ 43.178693] CR2: 0000000000000499 CR3: 0000000456ae2004 CR4:
>>> 00000000003606e0
>>> [ 43.178721] Call Trace:
>>> [ 43.178736] ? devres_add+0x5f/0x70
>>> [ 43.178755] rmi_f54_probe+0x437/0x470 [rmi_core]
>>> [ 43.178779] rmi_function_probe+0x25/0x30 [rmi_core]
>>> [ 43.178805] driver_probe_device+0x310/0x480
>>> [ 43.178828] __device_attach_driver+0x86/0x100
>>> [ 43.178851] ? __driver_attach+0xf0/0xf0
>>> [ 43.178884] bus_for_each_drv+0x6b/0xb0
>>> [ 43.178904] __device_attach+0xdd/0x160
>>> [ 43.178925] device_initial_probe+0x13/0x20
>>> [ 43.178948] bus_probe_device+0x95/0xa0
>>> [ 43.178968] device_add+0x44b/0x680
>>> [ 43.178987] rmi_register_function+0x62/0xd0 [rmi_core]
>>> [ 43.181747] rmi_create_function+0x112/0x1a0 [rmi_core]
>>> [ 43.184677] ? rmi_driver_clear_irq_bits+0xc0/0xc0 [rmi_core]
>>> [ 43.187505] rmi_scan_pdt+0xca/0x1a0 [rmi_core]
>>> [ 43.190171] rmi_init_functions+0x5b/0x120 [rmi_core]
>>> [ 43.192809] rmi_driver_probe+0x152/0x3c0 [rmi_core]
>>> [ 43.195403] ? sysfs_create_link+0x25/0x40
>>> [ 43.198253] driver_probe_device+0x310/0x480
>>> [ 43.201083] __device_attach_driver+0x86/0x100
>>> [ 43.203800] ? __driver_attach+0xf0/0xf0
>>> [ 43.206503] bus_for_each_drv+0x6b/0xb0
>>> [ 43.209291] __device_attach+0xdd/0x160
>>> [ 43.212207] device_initial_probe+0x13/0x20
>>> [ 43.215146] bus_probe_device+0x95/0xa0
>>> [ 43.217885] device_add+0x44b/0x680
>>> [ 43.220597] rmi_register_transport_device+0x84/0x100 [rmi_core]
>>> [ 43.223321] rmi_input_configured+0xbf/0x1a0 [hid_rmi]
>>> [ 43.226051] ? input_allocate_device+0xdf/0xf0
>>> [ 43.228814] hidinput_connect+0x4a9/0x37a0 [hid]
>>> [ 43.231701] hid_connect+0x326/0x3d0 [hid]
>>> [ 43.234548] hid_hw_start+0x42/0x70 [hid]
>>> [ 43.237302] rmi_probe+0x115/0x510 [hid_rmi]
>>> [ 43.239862] hid_device_probe+0xd3/0x150 [hid]
>>> [ 43.242558] ? sysfs_create_link+0x25/0x40
>>> [ 43.242828] audit: type=1400 audit(1522795151.600:4):
>>> apparmor="STATUS" operation="profile_load" profile="unconfined"
>>> name="/snap/core/4206/usr/lib/snapd/snap-confine" pid=1151
>>> comm="apparmor_parser"
>>> [ 43.244859] driver_probe_device+0x310/0x480
>>> [ 43.244862] __driver_attach+0xbf/0xf0
>>> [ 43.246982] audit: type=1400 audit(1522795151.600:5):
>>> apparmor="STATUS" operation="profile_load" profile="unconfined"
>>> name="/snap/core/4206/usr/lib/snapd/snap-confine//mount-namespace-capture-helper"
>>> pid=1151 comm="apparmor_parser"
>>> [ 43.249403] ? driver_probe_device+0x480/0x480
>>> [ 43.249405] bus_for_each_dev+0x74/0xb0
>>> [ 43.253200] audit: type=1400 audit(1522795151.600:6):
>>> apparmor="STATUS" operation="profile_load" profile="unconfined"
>>> name="/snap/core/4206/usr/lib/snapd/snap-confine//snap_update_ns"
>>> pid=1151 comm="apparmor_parser"
>>> [ 43.254055] ? kmem_cache_alloc_trace+0x1a6/0x1c0
>>> [ 43.256282] audit: type=1400 audit(1522795151.604:7):
>>> apparmor="STATUS" operation="profile_load" profile="unconfined"
>>> name="/sbin/dhclient" pid=1152 comm="apparmor_parser"
>>> [ 43.258436] driver_attach+0x1e/0x20
>>> [ 43.260875] audit: type=1400 audit(1522795151.604:8):
>>> apparmor="STATUS" operation="profile_load" profile="unconfined"
>>> name="/usr/lib/NetworkManager/nm-dhcp-client.action" pid=1152
>>> comm="apparmor_parser"
>>> [ 43.263118] bus_add_driver+0x167/0x260
>>> [ 43.267676] audit: type=1400 audit(1522795151.604:9):
>>> apparmor="STATUS" operation="profile_load" profile="unconfined"
>>> name="/usr/lib/NetworkManager/nm-dhcp-helper" pid=1152
>>> comm="apparmor_parser"
>>> [ 43.268807] ? 0xffffffffc0cbc000
>>> [ 43.268812] driver_register+0x60/0xe0
>>> [ 43.271184] audit: type=1400 audit(1522795151.604:10):
>>> apparmor="STATUS" operation="profile_load" profile="unconfined"
>>> name="/usr/lib/connman/scripts/dhclient-script" pid=1152
>>> comm="apparmor_parser"
>>> [ 43.274081] ? 0xffffffffc0cbc000
>>> [ 43.274086] __hid_register_driver+0x63/0x70 [hid]
>>> [ 43.288367] rmi_driver_init+0x23/0x1000 [hid_rmi]
>>> [ 43.291501] do_one_initcall+0x52/0x191
>>> [ 43.292348] audit: type=1400 audit(1522795151.652:11):
>>> apparmor="STATUS" operation="profile_load" profile="unconfined"
>>> name="/usr/bin/man" pid=1242 comm="apparmor_parser"
>>> [ 43.294212] ? _cond_resched+0x19/0x40
>>> [ 43.300028] ? kmem_cache_alloc_trace+0xa2/0x1c0
>>> [ 43.303475] ? do_init_module+0x27/0x209
>>> [ 43.306842] do_init_module+0x5f/0x209
>>> [ 43.310269] load_module+0x1987/0x1f10
>>> [ 43.313704] ? ima_post_read_file+0x96/0xa0
>>> [ 43.317174] SYSC_finit_module+0xfc/0x120
>>> [ 43.320754] ? SYSC_finit_module+0xfc/0x120
>>> [ 43.324065] SyS_finit_module+0xe/0x10
>>> [ 43.327387] do_syscall_64+0x73/0x130
>>> [ 43.330909] entry_SYSCALL_64_after_hwframe+0x3d/0xa2
>>> [ 43.334305] RIP: 0033:0x7fd2d880b839
>>> [ 43.337810] RSP: 002b:00007ffe0a6b2368 EFLAGS: 00000246 ORIG_RAX:
>>> 0000000000000139
>>> [ 43.341259] RAX: ffffffffffffffda RBX: 000055cdd86542e0 RCX:
>>> 00007fd2d880b839
>>> [ 43.344613] RDX: 0000000000000000 RSI: 00007fd2d84ea0e5 RDI:
>>> 0000000000000016
>>> [ 43.347962] RBP: 00007fd2d84ea0e5 R08: 0000000000000000 R09:
>>> 00007ffe0a6b2480
>>> [ 43.351456] R10: 0000000000000016 R11: 0000000000000246 R12:
>>> 0000000000000000
>>> [ 43.354845] R13: 000055cdd8688930 R14: 0000000000020000 R15:
>>> 000055cdd86542e0
>>> [ 43.358224] Code: c7 05 ad 12 02 00 00 00 00 00 48 8d 88 00 08 00 00
>>> eb 09 48 83 c0 08 48 39 c1 74 31 48 8b 10 48 85 d2 74 ef 49 8b b7 98 04
>>> 00 00 <48> 39 b2 98 04 00 00 75 df 48 63 92 f8 04 00 00 f0 48 0f ab 15
>>> [ 43.361764] RIP: __video_register_device+0x1cc/0x1090 [videodev] RSP:
>>> ffffa5c5c231b420
>>> [ 43.365281] CR2: 0000000000000499
>>> _______________________________________________
>>> Intel-gfx mailing list
>>> Intel-gfx@lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>>
>
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply
* Re: [v3,4/4] watchdog: add Gateworks System Controller support
From: Tim Harvey @ 2018-04-04 16:57 UTC (permalink / raw)
To: Andrew Lunn
Cc: Guenter Roeck, Mark Rutland, devicetree, linux-watchdog,
Dmitry Torokhov, linux-kernel, Rob Herring, Wim Van Sebroeck,
Mark Brown, linux-input, linux-hwmon, Lee Jones, linux-arm-kernel
In-Reply-To: <20180402163242.GC14165@lunn.ch>
On Mon, Apr 2, 2018 at 9:32 AM, Andrew Lunn <andrew@lunn.ch> wrote:
>> The 'use case' we have been using this in for a couple years is that
>> users who want to use this watchdog will enable it externally (we have
>> a command in the bootloader) and if enabled the kernel driver (that
>> I'm proposing here which we've been using out-of-tree) will register
>> the watchdog device and the userspace watchdog process can open the
>> device and start tickling it. If the watchdog is never enabled (or
>> disabled via the bootloader command) the kernel driver fails to probe
>> and the SoC's watchdog can be used.
>
> Hi Tim
>
> Is there any reason not to give the user the choice to use both
> watchdogs? Normally you write drivers to expose the hardware, and then
> let the users choice if they want to use it.
>
Andrew,
I don't know what value the SoC watchdog has if you have the GSC
watchdog available that can power cycle the board but I would agree
normally you would expose all of them. I suppose this may be a
different case because I'm expecting the user to go and manually
enable the watchdog instead of using the kernel to do it which means
if its not enabled its not really available to be used.
Tim
^ permalink raw reply
* Re: [PATCH] HID: input: fix battery level reporting on BT mice
From: Dmitry Torokhov @ 2018-04-04 17:03 UTC (permalink / raw)
To: Martin van Es
Cc: Jiri Kosina, Martin, Benjamin Tissoires,
linux-input@vger.kernel.org, lkml
In-Reply-To: <1694587.16DWc6HTFx@minivanes>
On Wed, Apr 4, 2018 at 1:51 AM, Martin van Es <martin@mrvanes.com> wrote:
>
> On Wednesday, April 4, 2018 10:33:16 AM CEST Jiri Kosina wrote:
> > Can I add your Tested-by: while applying the commit?
>
> That's ok.
Martin is also the reporter of the issue, I did not put down his name
because I wasn't sure if he wanted it there.
Thanks.
--
Dmitry
^ permalink raw reply
* Re: Linux 4.16 Kernel Boot Crash
From: Mauro Carvalho Chehab @ 2018-04-04 18:54 UTC (permalink / raw)
To: Jaak Ristioja, Peter Geis
Cc: intel-gfx, linux-input, Dmitry Torokhov, linux-media
In-Reply-To: <87in97up15.fsf@intel.com>
Em Wed, 4 Apr 2018 16:26:22 +0300
Jaak Ristioja <jaak@ristioja.ee> escreveu:
> Hello, all!
>
> I experience the same issue with a Lenovo ThinkPad T440p (LENOVO
> 20AN006VMS/20AN006VMS, BIOS GLET90WW (2.44 ) 09/13/2017). I tried to
> bisect v4.15..v4.16 but failed.
Could you post the complete dmesg? I also need the .config used
to build the Kernel.
From its call trace:
[ 43.177492] Call Trace:
[ 43.177498] ? devres_add+0x5f/0x70
[ 43.177502] rmi_f54_probe+0x437/0x470 [rmi_core]
[ 43.177505] rmi_function_probe+0x25/0x30 [rmi_core]
[ 43.177507] driver_probe_device+0x310/0x480
It looks that this was generated by an input driver
drivers/input/rmi4/rmi_f54.c, with could be doing something wrong when
registering at the media core.
From the logs, the warn on is happening at
drivers/media/v4l2-core/v4l2-dev.c:945, e. g:
/* Should not happen since we thought this minor was free */
WARN_ON(video_device[vdev->minor] != NULL);
That was probably called here:
drivers/input/rmi4/rmi_f54.c: ret = video_register_device(&f54->vdev, VFL_TYPE_TOUCH, -1);
Thanks,
Mauro
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox