Linux Input/HID development
 help / color / mirror / Atom feed
* [PATCH v6 3/7] mfd: AXP20x: Add bindings documentation
From: Carlo Caione @ 2014-05-19 19:47 UTC (permalink / raw)
  To: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw,
	maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8,
	hdegoede-H+wXaHxf7aLQT0dZR+AlfA, emilio-0Z03zUJReD5OxF6Tv1QG9Q,
	wens-jdAy2FN1RRM, sameo-VuQAYsv1563Yd54FQh9/CA,
	dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w,
	linux-input-u79uwXL29TY76Z2rM5mHXA,
	linux-doc-u79uwXL29TY76Z2rM5mHXA,
	lgirdwood-Re5JQEeQqe8AvxtiuMwx3w, broonie-DgEjT+Ai2ygdnm+yROfE0A,
	lee.jones-QSEj5FYQhm4dnm+yROfE0A,
	boris.brezillon-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8
  Cc: Carlo Caione
In-Reply-To: <1400528868-5971-1-git-send-email-carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>

Bindings documentation for the AXP20x driver. In this file also
sub-nodes are documented.

Signed-off-by: Carlo Caione <carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>
Acked-by: Maxime Ripard <maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
---
 Documentation/devicetree/bindings/mfd/axp20x.txt | 93 ++++++++++++++++++++++++
 1 file changed, 93 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mfd/axp20x.txt

diff --git a/Documentation/devicetree/bindings/mfd/axp20x.txt b/Documentation/devicetree/bindings/mfd/axp20x.txt
new file mode 100644
index 0000000..cc9e01b
--- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/axp20x.txt
@@ -0,0 +1,93 @@
+AXP202/AXP209 device tree bindings
+
+The axp20x family current members :-
+axp202 (X-Powers)
+axp209 (X-Powers)
+
+Required properties:
+- compatible: "x-powers,axp202" or "x-powers,axp209"
+- reg: The I2C slave address for the AXP chip
+- interrupt-parent: The parent interrupt controller
+- interrupts: Interrupt specifiers for interrupt sources
+- interrupt-controller: axp20x has its own internal IRQs
+- #interrupt-cells: Should be set to 1
+- acin-supply: The input supply for LDO1
+- vin2-supply: The input supply for DCDC2
+- vin3-supply: The input supply for DCDC3
+- ldo24in-supply: The input supply for LDO2, LDO4
+- ldo3in-supply: The input supply for LDO3
+- ldo5in-supply: The input supply for LDO5
+
+- regulators: A node that houses a sub-node for each regulator. The regulators are
+	      bound using their name as listed here: dcdc2, dcdc3, ldo1, ldo2,
+	      ldo3, ldo4, ldo5.  The bindings details of individual regulator
+	      device can be found in:
+	      Documentation/devicetree/bindings/regulator/regulator.txt with
+	      the exception of x-powers,dcdc-freq
+- x-powers,dcdc-freq: defines the work frequency of DC-DC in KHz
+		      (range: 750-1875). Default: 1.5MHz
+
+Optional properties for DCDCs:
+- x-powers,dcdc-workmode: 1 for PWM mode, 0 for AUTO mode
+			  Default: AUTO mode
+
+Example:
+
+axp209: pmic@34 {
+	compatible = "x-powers,axp209";
+	reg = <0x34>;
+	interrupt-parent = <&nmi_intc>;
+	interrupts = <0 8>;
+
+	interrupt-controller;
+	#interrupt-cells = <1>;
+
+	acin-supply = <&axp_ipsout_reg>;
+	vin2-supply = <&axp_ipsout_reg>;
+	vin3-supply = <&axp_ipsout_reg>;
+	ldo24in-supply = <&axp_ipsout_reg>;
+	ldo3in-supply = <&axp_ipsout_reg>;
+	ldo5in-supply = <&axp_ipsout_reg>;
+
+	regulators {
+		x-powers,dcdc-freq = <1500>;
+
+		axp_vcore_reg: dcdc2 {
+			regulator-min-microvolt = <700000>;
+			regulator-max-microvolt = <2275000>;
+			regulator-always-on;
+		};
+
+		axp_ddr_reg: dcdc3 {
+			regulator-min-microvolt = <700000>;
+			regulator-max-microvolt = <3500000>;
+			regulator-always-on;
+		};
+
+		axp_rtc_reg: ldo1 {
+			regulator-always-on;
+		};
+
+		axp_analog_reg: ldo2 {
+			regulator-min-microvolt = <1800000>;
+			regulator-max-microvolt = <3300000>;
+			regulator-always-on;
+		};
+
+		axp_pll_reg: ldo3 {
+			regulator-min-microvolt = <700000>;
+			regulator-max-microvolt = <3500000>;
+		};
+
+		axp_hdmi_reg: ldo4 {
+			regulator-min-microvolt = <1250000>;
+			regulator-max-microvolt = <3300000>;
+		};
+
+		axp_mic_reg: ldo5 {
+			regulator-min-microvolt = <1800000>;
+			regulator-max-microvolt = <3300000>;
+		};
+	};
+};
+
-- 
1.9.1

^ permalink raw reply related

* [PATCH v6 4/7] input: misc: Add driver for AXP20x Power Enable Key
From: Carlo Caione @ 2014-05-19 19:47 UTC (permalink / raw)
  To: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw,
	maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8,
	hdegoede-H+wXaHxf7aLQT0dZR+AlfA, emilio-0Z03zUJReD5OxF6Tv1QG9Q,
	wens-jdAy2FN1RRM, sameo-VuQAYsv1563Yd54FQh9/CA,
	dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w,
	linux-input-u79uwXL29TY76Z2rM5mHXA,
	linux-doc-u79uwXL29TY76Z2rM5mHXA,
	lgirdwood-Re5JQEeQqe8AvxtiuMwx3w, broonie-DgEjT+Ai2ygdnm+yROfE0A,
	lee.jones-QSEj5FYQhm4dnm+yROfE0A,
	boris.brezillon-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8
  Cc: Carlo Caione
In-Reply-To: <1400528868-5971-1-git-send-email-carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>

This patch add support for the Power Enable Key found on MFD AXP202 and
AXP209. Besides the basic support for the button, the driver adds two
entries in sysfs to configure the time delay for power on/off.

Signed-off-by: Carlo Caione <carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>
Acked-by: Dmitry Torokhov <dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
 drivers/input/misc/Kconfig      |  11 ++
 drivers/input/misc/Makefile     |   1 +
 drivers/input/misc/axp20x-pek.c | 281 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 293 insertions(+)
 create mode 100644 drivers/input/misc/axp20x-pek.c

diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
index 5928ea7..f4c3177 100644
--- a/drivers/input/misc/Kconfig
+++ b/drivers/input/misc/Kconfig
@@ -393,6 +393,17 @@ config INPUT_RETU_PWRBUTTON
 	  To compile this driver as a module, choose M here. The module will
 	  be called retu-pwrbutton.
 
+config INPUT_AXP20X_PEK
+	tristate "X-Powers AXP20X power button driver"
+	depends on MFD_AXP20X
+	help
+	  Say Y here if you want to enable power key reporting via the
+	  AXP20X PMIC.
+
+	  To compile this driver as a module, choose M here. The module will
+	  be called axp20x-pek.
+
+
 config INPUT_TWL4030_PWRBUTTON
 	tristate "TWL4030 Power button Driver"
 	depends on TWL4030_CORE
diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile
index 4955ad3..a25ad18 100644
--- a/drivers/input/misc/Makefile
+++ b/drivers/input/misc/Makefile
@@ -50,6 +50,7 @@ obj-$(CONFIG_INPUT_POWERMATE)		+= powermate.o
 obj-$(CONFIG_INPUT_PWM_BEEPER)		+= pwm-beeper.o
 obj-$(CONFIG_INPUT_RB532_BUTTON)	+= rb532_button.o
 obj-$(CONFIG_INPUT_RETU_PWRBUTTON)	+= retu-pwrbutton.o
+obj-$(CONFIG_INPUT_AXP20X_PEK)		+= axp20x-pek.o
 obj-$(CONFIG_INPUT_GPIO_ROTARY_ENCODER)	+= rotary_encoder.o
 obj-$(CONFIG_INPUT_SGI_BTNS)		+= sgi_btns.o
 obj-$(CONFIG_INPUT_SIRFSOC_ONKEY)	+= sirfsoc-onkey.o
diff --git a/drivers/input/misc/axp20x-pek.c b/drivers/input/misc/axp20x-pek.c
new file mode 100644
index 0000000..0fba252
--- /dev/null
+++ b/drivers/input/misc/axp20x-pek.c
@@ -0,0 +1,281 @@
+/*
+ * axp20x power button driver.
+ *
+ * Copyright (C) 2013 Carlo Caione <carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>
+ *
+ * This file is subject to the terms and conditions of the GNU General
+ * Public License. See the file "COPYING" in the main directory of this
+ * archive for more details.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/errno.h>
+#include <linux/irq.h>
+#include <linux/init.h>
+#include <linux/input.h>
+#include <linux/interrupt.h>
+#include <linux/kernel.h>
+#include <linux/mfd/axp20x.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+#include <linux/slab.h>
+
+#define AXP20X_PEK_STARTUP_MASK		(0xc0)
+#define AXP20X_PEK_SHUTDOWN_MASK	(0x03)
+
+struct axp20x_pek {
+	struct axp20x_dev *axp20x;
+	struct input_dev *input;
+	int irq_dbr;
+	int irq_dbf;
+};
+
+struct axp20x_time {
+	unsigned int time;
+	unsigned int idx;
+};
+
+static const struct axp20x_time startup_time[] = {
+	{ .time = 128,  .idx = 0 },
+	{ .time = 1000, .idx = 2 },
+	{ .time = 3000, .idx = 1 },
+	{ .time = 2000, .idx = 3 },
+};
+
+static const struct axp20x_time shutdown_time[] = {
+	{ .time = 4000,  .idx = 0 },
+	{ .time = 6000,  .idx = 1 },
+	{ .time = 8000,  .idx = 2 },
+	{ .time = 10000, .idx = 3 },
+};
+
+struct axp20x_pek_ext_attr {
+	const struct axp20x_time *p_time;
+	unsigned int mask;
+};
+
+static struct axp20x_pek_ext_attr axp20x_pek_startup_ext_attr = {
+	.p_time	= startup_time,
+	.mask	= AXP20X_PEK_STARTUP_MASK,
+};
+
+static struct axp20x_pek_ext_attr axp20x_pek_shutdown_ext_attr = {
+	.p_time	= shutdown_time,
+	.mask	= AXP20X_PEK_SHUTDOWN_MASK,
+};
+
+static struct axp20x_pek_ext_attr *get_axp_ext_attr(struct device_attribute *attr)
+{
+	return container_of(attr, struct dev_ext_attribute, attr)->var;
+}
+
+static ssize_t axp20x_show_ext_attr(struct device *dev, struct device_attribute *attr,
+				    char *buf)
+{
+	struct axp20x_pek *axp20x_pek = dev_get_drvdata(dev);
+	struct axp20x_pek_ext_attr *axp20x_ea = get_axp_ext_attr(attr);
+	unsigned int val;
+	int ret, i;
+
+	ret = regmap_read(axp20x_pek->axp20x->regmap, AXP20X_PEK_KEY, &val);
+	if (ret != 0)
+		return ret;
+
+	val &= axp20x_ea->mask;
+	val >>= ffs(axp20x_ea->mask) - 1;
+
+	for (i = 0; i < 4; i++)
+		if (val == axp20x_ea->p_time[i].idx)
+			val = axp20x_ea->p_time[i].time;
+
+	return sprintf(buf, "%u\n", val);
+}
+
+static ssize_t axp20x_store_ext_attr(struct device *dev, struct device_attribute *attr,
+				     const char *buf, size_t count)
+{
+	struct axp20x_pek *axp20x_pek = dev_get_drvdata(dev);
+	struct axp20x_pek_ext_attr *axp20x_ea = get_axp_ext_attr(attr);
+	char val_str[20];
+	size_t len;
+	int ret, i;
+	unsigned int val, idx = 0;
+	unsigned int best_err = UINT_MAX;
+
+	val_str[sizeof(val_str) - 1] = '\0';
+	strncpy(val_str, buf, sizeof(val_str) - 1);
+	len = strlen(val_str);
+
+	if (len && val_str[len - 1] == '\n')
+		val_str[len - 1] = '\0';
+
+	ret = kstrtouint(val_str, 10, &val);
+	if (ret)
+		return ret;
+
+	for (i = 3; i >= 0; i--) {
+		unsigned int err;
+
+		err = abs(axp20x_ea->p_time[i].time - val);
+		if (err < best_err) {
+			best_err = err;
+			idx = axp20x_ea->p_time[i].idx;
+		}
+
+		if (!err)
+			break;
+	}
+
+	idx <<= ffs(axp20x_ea->mask) - 1;
+	ret = regmap_update_bits(axp20x_pek->axp20x->regmap,
+				 AXP20X_PEK_KEY,
+				 axp20x_ea->mask, idx);
+	if (ret != 0)
+		return -EINVAL;
+	return count;
+}
+
+static struct dev_ext_attribute axp20x_dev_attr_startup = {
+	.attr	= __ATTR(startup, 0644, axp20x_show_ext_attr, axp20x_store_ext_attr),
+	.var	= &axp20x_pek_startup_ext_attr
+};
+
+static struct dev_ext_attribute axp20x_dev_attr_shutdown = {
+	.attr	= __ATTR(shutdown, 0644, axp20x_show_ext_attr, axp20x_store_ext_attr),
+	.var	= &axp20x_pek_shutdown_ext_attr
+};
+
+static irqreturn_t axp20x_pek_irq(int irq, void *pwr)
+{
+	struct input_dev *idev = pwr;
+	struct axp20x_pek *axp20x_pek = input_get_drvdata(idev);
+
+	if (irq == axp20x_pek->irq_dbr)
+		input_report_key(idev, KEY_POWER, true);
+	else if (irq == axp20x_pek->irq_dbf)
+		input_report_key(idev, KEY_POWER, false);
+
+	input_sync(idev);
+
+	return IRQ_HANDLED;
+}
+
+static int axp20x_pek_probe(struct platform_device *pdev)
+{
+	struct axp20x_pek *axp20x_pek;
+	struct axp20x_dev *axp20x;
+	struct input_dev *idev;
+	int error;
+
+	axp20x_pek = devm_kzalloc(&pdev->dev, sizeof(struct axp20x_pek),
+				  GFP_KERNEL);
+	if (!axp20x_pek)
+		return -ENOMEM;
+
+	axp20x_pek->axp20x = dev_get_drvdata(pdev->dev.parent);
+	axp20x = axp20x_pek->axp20x;
+
+	axp20x_pek->irq_dbr = platform_get_irq_byname(pdev, "PEK_DBR");
+	if (axp20x_pek->irq_dbr < 0) {
+		dev_err(&pdev->dev, "No IRQ for PEK_DBR, error=%d\n",
+				axp20x_pek->irq_dbr);
+		return axp20x_pek->irq_dbr;
+	}
+	axp20x_pek->irq_dbr = regmap_irq_get_virq(axp20x->regmap_irqc,
+						  axp20x_pek->irq_dbr);
+
+	axp20x_pek->irq_dbf = platform_get_irq_byname(pdev, "PEK_DBF");
+	if (axp20x_pek->irq_dbf < 0) {
+		dev_err(&pdev->dev, "No IRQ for PEK_DBF, error=%d\n",
+				axp20x_pek->irq_dbf);
+		return axp20x_pek->irq_dbf;
+	}
+	axp20x_pek->irq_dbf = regmap_irq_get_virq(axp20x->regmap_irqc,
+						  axp20x_pek->irq_dbf);
+
+	axp20x_pek->input = devm_input_allocate_device(&pdev->dev);
+	if (!axp20x_pek->input)
+		return -ENOMEM;
+
+	idev = axp20x_pek->input;
+
+	idev->name = "axp20x-pek";
+	idev->phys = "m1kbd/input2";
+	idev->dev.parent = &pdev->dev;
+
+	input_set_capability(idev, EV_KEY, KEY_POWER);
+
+	input_set_drvdata(idev, axp20x_pek);
+
+	error = devm_request_any_context_irq(&pdev->dev, axp20x_pek->irq_dbr,
+					  axp20x_pek_irq, 0,
+					  "axp20x-pek-dbr", idev);
+	if (error < 0) {
+		dev_err(axp20x->dev, "Failed to request dbr IRQ#%d: %d\n",
+			axp20x_pek->irq_dbr, error);
+
+		return error;
+	}
+
+	error = devm_request_any_context_irq(&pdev->dev, axp20x_pek->irq_dbf,
+					  axp20x_pek_irq, 0,
+					  "axp20x-pek-dbf", idev);
+	if (error < 0) {
+		dev_err(axp20x->dev, "Failed to request dbf IRQ#%d: %d\n",
+			axp20x_pek->irq_dbf, error);
+		return error;
+	}
+
+	error = device_create_file(&pdev->dev, &axp20x_dev_attr_startup.attr);
+	if (error)
+		return error;
+
+	error = device_create_file(&pdev->dev, &axp20x_dev_attr_shutdown.attr);
+	if (error)
+		goto clear_startup_attr;
+
+	error = input_register_device(idev);
+	if (error) {
+		dev_err(axp20x->dev, "Can't register input device: %d\n", error);
+		goto clear_attr;
+	}
+
+	platform_set_drvdata(pdev, axp20x_pek);
+
+	return 0;
+
+clear_attr:
+	device_remove_file(&pdev->dev, &axp20x_dev_attr_shutdown.attr);
+
+clear_startup_attr:
+	device_remove_file(&pdev->dev, &axp20x_dev_attr_startup.attr);
+
+	return error;
+}
+
+int axp20x_pek_remove(struct platform_device *pdev)
+{
+	device_remove_file(&pdev->dev, &axp20x_dev_attr_shutdown.attr);
+	device_remove_file(&pdev->dev, &axp20x_dev_attr_startup.attr);
+
+	return 0;
+}
+
+static struct platform_driver axp20x_pek_driver = {
+	.probe		= axp20x_pek_probe,
+	.remove		= axp20x_pek_remove,
+	.driver		= {
+		.name		= "axp20x-pek",
+		.owner		= THIS_MODULE,
+	},
+};
+module_platform_driver(axp20x_pek_driver);
+
+MODULE_DESCRIPTION("axp20x Power Button");
+MODULE_AUTHOR("Carlo Caione <carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>");
+MODULE_LICENSE("GPL");
-- 
1.9.1

^ permalink raw reply related

* [PATCH v6 5/7] input: misc: Add ABI docs for AXP20x PEK
From: Carlo Caione @ 2014-05-19 19:47 UTC (permalink / raw)
  To: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	linux-sunxi-/JYPxA39Uh5TLH3MbocFFw,
	maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8,
	hdegoede-H+wXaHxf7aLQT0dZR+AlfA, emilio-0Z03zUJReD5OxF6Tv1QG9Q,
	wens-jdAy2FN1RRM, sameo-VuQAYsv1563Yd54FQh9/CA,
	dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w,
	linux-input-u79uwXL29TY76Z2rM5mHXA,
	linux-doc-u79uwXL29TY76Z2rM5mHXA,
	lgirdwood-Re5JQEeQqe8AvxtiuMwx3w, broonie-DgEjT+Ai2ygdnm+yROfE0A,
	lee.jones-QSEj5FYQhm4dnm+yROfE0A,
	boris.brezillon-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8
  Cc: Carlo Caione
In-Reply-To: <1400528868-5971-1-git-send-email-carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>

Add ABI entries for the PEK found on PMU X-Powers AXP202 and AXP209.

Signed-off-by: Carlo Caione <carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>
---
 Documentation/ABI/testing/sysfs-driver-input-axp-pek | 11 +++++++++++
 1 file changed, 11 insertions(+)
 create mode 100644 Documentation/ABI/testing/sysfs-driver-input-axp-pek

diff --git a/Documentation/ABI/testing/sysfs-driver-input-axp-pek b/Documentation/ABI/testing/sysfs-driver-input-axp-pek
new file mode 100644
index 0000000..080563b
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-driver-input-axp-pek
@@ -0,0 +1,11 @@
+What:		/sys/class/input/input(x)/startup
+Date:		March 2014
+Contact:	Carlo Caione <carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>
+Description:	Startup time in us. Board is powered on if the button is pressed
+		for more than <startup_time>
+
+What:		/sys/class/input/input(x)/shutdown
+Date:		March 2014
+Contact:	Carlo Caione <carlo-KA+7E9HrN00dnm+yROfE0A@public.gmane.org>
+Description:	Shutdown time in us. Board is powered off if the button is pressed
+		for more than <shutdown_time>
-- 
1.9.1

^ permalink raw reply related

* [PATCH v6 6/7] ARM: sunxi: Add AXP20x support in defconfig
From: Carlo Caione @ 2014-05-19 19:47 UTC (permalink / raw)
  To: linux-arm-kernel, linux-sunxi, maxime.ripard, hdegoede, emilio,
	wens, sameo, dmitry.torokhov, linux-input, linux-doc, lgirdwood,
	broonie, lee.jones, boris.brezillon
  Cc: Carlo Caione
In-Reply-To: <1400528868-5971-1-git-send-email-carlo@caione.org>

Signed-off-by: Carlo Caione <carlo@caione.org>
---
 arch/arm/configs/sunxi_defconfig | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/arch/arm/configs/sunxi_defconfig b/arch/arm/configs/sunxi_defconfig
index b5df4a5..6e305da 100644
--- a/arch/arm/configs/sunxi_defconfig
+++ b/arch/arm/configs/sunxi_defconfig
@@ -40,6 +40,8 @@ CONFIG_SUN4I_EMAC=y
 # CONFIG_NET_VENDOR_STMICRO is not set
 # CONFIG_NET_VENDOR_WIZNET is not set
 # CONFIG_WLAN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_AXP20X_PEK=y
 CONFIG_SERIAL_8250=y
 CONFIG_SERIAL_8250_CONSOLE=y
 CONFIG_SERIAL_8250_NR_UARTS=8
@@ -55,6 +57,7 @@ CONFIG_GPIO_SYSFS=y
 # CONFIG_HWMON is not set
 CONFIG_WATCHDOG=y
 CONFIG_SUNXI_WATCHDOG=y
+CONFIG_MFD_AXP20X=y
 # CONFIG_USB_SUPPORT is not set
 CONFIG_NEW_LEDS=y
 CONFIG_LEDS_CLASS=y
@@ -69,3 +72,4 @@ CONFIG_NFS_FS=y
 CONFIG_ROOT_NFS=y
 CONFIG_NLS=y
 CONFIG_PRINTK_TIME=y
+CONFIG_REGULATOR_AXP20X=y
-- 
1.9.1


^ permalink raw reply related

* [PATCH v6 7/7] ARM: sunxi: Add AXP20x support multi_v7_defconfig
From: Carlo Caione @ 2014-05-19 19:47 UTC (permalink / raw)
  To: linux-arm-kernel, linux-sunxi, maxime.ripard, hdegoede, emilio,
	wens, sameo, dmitry.torokhov, linux-input, linux-doc, lgirdwood,
	broonie, lee.jones, boris.brezillon
  Cc: Carlo Caione
In-Reply-To: <1400528868-5971-1-git-send-email-carlo@caione.org>

Signed-off-by: Carlo Caione <carlo@caione.org>
---
 arch/arm/configs/multi_v7_defconfig | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/arm/configs/multi_v7_defconfig b/arch/arm/configs/multi_v7_defconfig
index d4e8a47..5aeea19 100644
--- a/arch/arm/configs/multi_v7_defconfig
+++ b/arch/arm/configs/multi_v7_defconfig
@@ -146,6 +146,7 @@ CONFIG_KEYBOARD_SPEAR=y
 CONFIG_KEYBOARD_CROS_EC=y
 CONFIG_MOUSE_PS2_ELANTECH=y
 CONFIG_INPUT_MISC=y
+CONFIG_INPUT_AXP20X_PEK=y
 CONFIG_INPUT_MPU3050=y
 CONFIG_SERIO_AMBAKMI=y
 CONFIG_SERIAL_8250=y
@@ -207,6 +208,7 @@ CONFIG_ARMADA_THERMAL=y
 CONFIG_WATCHDOG=y
 CONFIG_ORION_WATCHDOG=y
 CONFIG_MFD_AS3722=y
+CONFIG_MFD_AXP20X=y
 CONFIG_MFD_CROS_EC=y
 CONFIG_MFD_CROS_EC_SPI=y
 CONFIG_MFD_MAX8907=y
@@ -217,6 +219,7 @@ CONFIG_MFD_TPS65910=y
 CONFIG_REGULATOR_VIRTUAL_CONSUMER=y
 CONFIG_REGULATOR_AB8500=y
 CONFIG_REGULATOR_AS3722=y
+CONFIG_REGULATOR_AXP20X=y
 CONFIG_REGULATOR_GPIO=y
 CONFIG_REGULATOR_MAX8907=y
 CONFIG_REGULATOR_PALMAS=y
-- 
1.9.1


^ permalink raw reply related

* [PATCH] Input: tps6507x-ts: Introduce the use of the managed version of kzalloc
From: Himangi Saraogi @ 2014-05-19 19:54 UTC (permalink / raw)
  To: Dmitry Torokhov, linux-input, linux-kernel; +Cc: julia.lawall

This patch moves data allocated using kzalloc to managed data allocated
using devm_kzalloc and cleans now unnecessary kfrees in probe and remove
functions. Also, the unnecessary label err_free_mem is removed.

The following Coccinelle semantic patch was used for making the change:

@platform@
identifier p, probefn, removefn;
@@
struct platform_driver p = {
  .probe = probefn,
  .remove = removefn,
};

@prb@
identifier platform.probefn, pdev;
expression e, e1, e2;
@@
probefn(struct platform_device *pdev, ...) {
  <+...
- e = kzalloc(e1, e2)
+ e = devm_kzalloc(&pdev->dev, e1, e2)
  ...
?-kfree(e);
  ...+>
}

@rem depends on prb@
identifier platform.removefn;
expression e;
@@
removefn(...) {
  <...
- kfree(e);
  ...>
}

Signed-off-by: Himangi Saraogi <himangi774@gmail.com>
Acked-by: Julia Lawall <julia.lawall@lip6.fr>
---
I would like to know if it is desirable to add a
devm_input_allocate_polled_device like devm_input_allocate_device. If
this is done, it seems that no change is required in
input_unregister_polled_device as there is a separate call to this
function, and then to input_free_polled_device (which would go away).
Please let me know if this reasoning is correct.

 drivers/input/touchscreen/tps6507x-ts.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/input/touchscreen/tps6507x-ts.c b/drivers/input/touchscreen/tps6507x-ts.c
index 94cde2c..bd57be1 100644
--- a/drivers/input/touchscreen/tps6507x-ts.c
+++ b/drivers/input/touchscreen/tps6507x-ts.c
@@ -233,7 +233,7 @@ static int tps6507x_ts_probe(struct platform_device *pdev)
 	 */
 	init_data = tps_board->tps6507x_ts_init_data;
 
-	tsc = kzalloc(sizeof(struct tps6507x_ts), GFP_KERNEL);
+	tsc = devm_kzalloc(&pdev->dev, sizeof(struct tps6507x_ts), GFP_KERNEL);
 	if (!tsc) {
 		dev_err(tps6507x_dev->dev, "failed to allocate driver data\n");
 		return -ENOMEM;
@@ -250,8 +250,7 @@ static int tps6507x_ts_probe(struct platform_device *pdev)
 	poll_dev = input_allocate_polled_device();
 	if (!poll_dev) {
 		dev_err(tsc->dev, "Failed to allocate polled input device.\n");
-		error = -ENOMEM;
-		goto err_free_mem;
+		return -ENOMEM;
 	}
 
 	tsc->poll_dev = poll_dev;
@@ -293,8 +292,6 @@ static int tps6507x_ts_probe(struct platform_device *pdev)
 
 err_free_polled_dev:
 	input_free_polled_device(poll_dev);
-err_free_mem:
-	kfree(tsc);
 	return error;
 }
 
@@ -306,8 +303,6 @@ static int tps6507x_ts_remove(struct platform_device *pdev)
 	input_unregister_polled_device(poll_dev);
 	input_free_polled_device(poll_dev);
 
-	kfree(tsc);
-
 	return 0;
 }
 
-- 
1.9.1


^ permalink raw reply related

* Re: [PATCH 4/6] input: cyapa: enable/disable trackpad device based on LID state
From: Dmitry Torokhov @ 2014-05-20  3:43 UTC (permalink / raw)
  To: Dudley Du
  Cc: Benson Leung, Daniel Kurtz, David Solda,
	linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
In-Reply-To: <77BC725C9062764F874D79F51E1F1A8F40C14099@S04-MBX01-01.s04.local>

Hi Dudley,

On Wed, Apr 16, 2014 at 08:39:34AM +0000, Dudley Du wrote:
> Rely on EV_SW and SW_LID bits to identify a LID device, and hook
> up our filter to listen for SW_LID events to enable/disable touchpad when
> LID is open/closed.
> TEST=test on Chomebooks.

This is a policy and it does not belong in the kernel. Please work with
Rafael to establish generic interface to put devices into low power mode
(like accelerating runtime PM idle timeout) and use it when userspace
detects that lid is closed.

Thanks.

> 
> Signed-off-by: Du, Dudley <dudl@cypress.com>
> ---
> diff --git a/drivers/input/mouse/cyapa.c b/drivers/input/mouse/cyapa.c
> index 6820b3f..da03427 100644
> --- a/drivers/input/mouse/cyapa.c
> +++ b/drivers/input/mouse/cyapa.c
> @@ -523,6 +523,9 @@ struct cyapa {
>         int physical_size_x;
>         int physical_size_y;
> 
> +       bool lid_handler_registered;
> +       struct input_handler lid_handler;
> +
>         /* used in ttsp and truetouch based trackpad devices. */
>         u8 x_origin;  /* X Axis Origin: 0 = left side; 1 = rigth side. */
>         u8 y_origin;  /* Y Axis Origin: 0 = top; 1 = bottom. */
> @@ -3107,6 +3110,125 @@ static void cyapa_start_runtime(struct cyapa *cyapa)
>  static void cyapa_start_runtime(struct cyapa *cyapa) {}
>  #endif /* CONFIG_PM_RUNTIME */
> 
> +
> +/*
> + * We rely on EV_SW and SW_LID bits to identify a LID device, and hook
> + * up our filter to listen for SW_LID events to enable/disable touchpad when
> + * LID is open/closed.
> + */
> +static const struct input_device_id lid_device_ids[] = {
> +       {
> +               .flags = INPUT_DEVICE_ID_MATCH_EVBIT |
> +                        INPUT_DEVICE_ID_MATCH_SWBIT,
> +               .evbit = { BIT_MASK(EV_SW) },
> +               .swbit = { BIT_MASK(SW_LID) },
> +       },
> +       { },
> +};
> +
> +static int lid_device_connect(struct input_handler *handler,
> +                             struct input_dev *dev,
> +                             const struct input_device_id *id)
> +{
> +       struct input_handle *lid_handle;
> +       int error;
> +
> +       lid_handle = kzalloc(sizeof(struct input_handle), GFP_KERNEL);
> +       if (!lid_handle)
> +               return -ENOMEM;
> +
> +       lid_handle->dev = dev;
> +       lid_handle->handler = handler;
> +       lid_handle->name = "lid_event_handler";
> +       lid_handle->private = handler->private;
> +
> +       error = input_register_handle(lid_handle);
> +       if (error)
> +               goto err_free;
> +
> +       error = input_open_device(lid_handle);
> +       if (error)
> +               goto err_unregister;
> +
> +       return 0;
> +err_unregister:
> +       input_unregister_handle(lid_handle);
> +err_free:
> +       kfree(lid_handle);
> +       return error;
> +}
> +
> +static void lid_device_disconnect(struct input_handle *handle)
> +{
> +       input_close_device(handle);
> +       input_unregister_handle(handle);
> +       kfree(handle);
> +}
> +
> +static bool lid_event_filter(struct input_handle *handle,
> +                            unsigned int type, unsigned int code, int value)
> +{
> +       struct cyapa *cyapa = handle->private;
> +       struct device *dev = &cyapa->client->dev;
> +
> +       if (type == EV_SW && code == SW_LID) {
> +               if (cyapa->suspended) {
> +                       /*
> +                        * If the lid event filter is called while suspended,
> +                        * there is no guarantee that the underlying i2cs are
> +                        * resumed at this point, so it is not safe to issue
> +                        * the command to change power modes.
> +                        * Instead, rely on cyapa_resume to set us back to
> +                        * PWR_MODE_FULL_ACTIVE.
> +                        */
> +                       return false;
> +               }
> +               if (value == 0) {
> +                       if (cyapa->cyapa_set_power_mode)
> +                               cyapa->cyapa_set_power_mode(cyapa,
> +                                               PWR_MODE_FULL_ACTIVE, 0);
> +                       pm_runtime_set_active(dev);
> +                       pm_runtime_enable(dev);
> +               } else {
> +                       pm_runtime_disable(dev);
> +                       if (cyapa->cyapa_set_power_mode)
> +                               cyapa->cyapa_set_power_mode(cyapa,
> +                                               PWR_MODE_OFF, 0);
> +               }
> +       }
> +
> +       return false;
> +}
> +
> +static void lid_event_register_handler(struct cyapa *cyapa)
> +{
> +       int error;
> +       struct input_handler *lid_handler = &cyapa->lid_handler;
> +
> +       if (cyapa->lid_handler_registered)
> +               return;
> +
> +       lid_handler->filter     = lid_event_filter;
> +       lid_handler->connect    = lid_device_connect;
> +       lid_handler->disconnect = lid_device_disconnect;
> +       lid_handler->name       = "cyapa_lid_event_handler";
> +       lid_handler->id_table   = lid_device_ids;
> +       lid_handler->private    = cyapa;
> +
> +       error = input_register_handler(lid_handler);
> +       if (error)
> +               return;
> +       cyapa->lid_handler_registered = true;
> +}
> +
> +static void lid_event_unregister_handler(struct cyapa *cyapa)
> +{
> +       if (cyapa->lid_handler_registered) {
> +               input_unregister_handler(&cyapa->lid_handler);
> +               cyapa->lid_handler_registered = false;
> +       }
> +}
> +
>  static void cyapa_detect_async(void *data, async_cookie_t cookie)
>  {
>         struct cyapa *cyapa = (struct cyapa *)data;
> @@ -3126,6 +3248,7 @@ static void cyapa_detect_and_start(void *data, async_cookie_t cookie)
>         cyapa_detect_async(data, cookie);
> 
>         cyapa_start_runtime(cyapa);
> +       lid_event_register_handler(cyapa);
>  }
> 
>  static int cyapa_probe(struct i2c_client *client,
> @@ -3221,7 +3344,7 @@ static int cyapa_remove(struct i2c_client *client)
> 
>         free_irq(cyapa->irq, cyapa);
>         input_unregister_device(cyapa->input);
> -
> +       lid_event_unregister_handler(cyapa);
>         if (cyapa->cyapa_set_power_mode)
>                 cyapa->cyapa_set_power_mode(cyapa, PWR_MODE_OFF, 0);
>         i2c_set_clientdata(client, NULL);
> This message and any attachments may contain Cypress (or its subsidiaries) confidential information. If it has been received in error, please advise the sender and immediately delete this message.

-- 
Dmitry

^ permalink raw reply

* Re: [PATCH 1/6] input: cyapa: rearchitecture driver to support function pointers
From: Dmitry Torokhov @ 2014-05-20  3:47 UTC (permalink / raw)
  To: Dudley Du
  Cc: Benson Leung, Daniel Kurtz, David Solda,
	linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
In-Reply-To: <77BC725C9062764F874D79F51E1F1A8F40C1405E@S04-MBX01-01.s04.local>

Hi Dudley,

On Wed, Apr 16, 2014 at 08:35:52AM +0000, Dudley Du wrote:
> Re-architecture the driver to support function pointers, so it can support and integrate new devices later in one driver.
> Including use async thread in device proble to speed up system boot time.
> TEST=test on Chomebooks.

There seems to be changes implementing aasync probing intermixed with
the function pointers change, it had to be split out and justification
needs to be provided - I am not quite convinced we should be doing this,
at least not at individual driver level.

Also instead of listing individual function pointers consider defining

struct cyapa_ops {
	void (*irq_handler)(struct cyapa *);
	int (*set_power_mode)(struct cyapa *, u8, u16);
	int (*bl_enter_func)(struct cyapa *);
	....
};

and use const pointer to it in cyapa_state. Then you can have gen3 and
gen5 implementation separated into individual files and the rest forming
cyapa core.

Thanks.

-- 
Dmitry

^ permalink raw reply

* RE: [PATCH 1/6] input: cyapa: rearchitecture driver to support function pointers
From: Dudley Du @ 2014-05-20  6:10 UTC (permalink / raw)
  To: Dmitry Torokhov
  Cc: Benson Leung, Daniel Kurtz, David Solda,
	linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
In-Reply-To: <20140520034742.GC986@core.coreip.homeip.net>

Hi Dmitry,

Thanks for your advice, I will organize it and resubmit it as v2.

Thanks,
Dudley

> -----Original Message-----
> From: Dmitry Torokhov [mailto:dmitry.torokhov@gmail.com]
> Sent: Tuesday, May 20, 2014 11:48 AM
> To: Dudley Du
> Cc: Benson Leung; Daniel Kurtz; David Solda; linux-input@vger.kernel.org; linux-kernel@vger.kernel.org
> Subject: Re: [PATCH 1/6] input: cyapa: rearchitecture driver to support function pointers
>
> Hi Dudley,
>
> On Wed, Apr 16, 2014 at 08:35:52AM +0000, Dudley Du wrote:
> > Re-architecture the driver to support function pointers, so it can support and integrate new devices later in one driver.
> > Including use async thread in device proble to speed up system boot time.
> > TEST=test on Chomebooks.
>
> There seems to be changes implementing aasync probing intermixed with the function pointers change, it had to be split out and justification needs to be provided - I am not quite convinced we should be doing this, at least not at individual driver level.
>
> Also instead of listing individual function pointers consider defining
>
> struct cyapa_ops {
>       void (*irq_handler)(struct cyapa *);
>       int (*set_power_mode)(struct cyapa *, u8, u16);
>       int (*bl_enter_func)(struct cyapa *);
>       ....
> };
>
> and use const pointer to it in cyapa_state. Then you can have gen3 and
> gen5 implementation separated into individual files and the rest forming cyapa core.
>
> Thanks.
>
> --
> Dmitry
This message and any attachments may contain Cypress (or its subsidiaries) confidential information. If it has been received in error, please advise the sender and immediately delete this message.

^ permalink raw reply

* RE: [PATCH 4/6] input: cyapa: enable/disable trackpad device based on LID state
From: Dudley Du @ 2014-05-20  6:54 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Benson Leung, Daniel Kurtz, David Solda, Dmitry Torokhov,
	linux-pm@vger.kernel.org, linux-input@vger.kernel.org,
	linux-kernel@vger.kernel.org
In-Reply-To: <20140520034302.GB986@core.coreip.homeip.net>

Hi Rafael,

Could you help give some advice on how to apply the function to put the trackpad device into low power mode with LID in current kernel?
or it's just a policy and should not be submitted to kernel right now?

Thanks,
Dudley

>
> -----Original Message-----
> From: Dmitry Torokhov [mailto:dmitry.torokhov@gmail.com]
> Sent: Tuesday, May 20, 2014 11:43 AM
> To: Dudley Du
> Cc: Benson Leung; Daniel Kurtz; David Solda; linux-input@vger.kernel.org; linux-kernel@vger.kernel.org
> Subject: Re: [PATCH 4/6] input: cyapa: enable/disable trackpad device based on LID state
>
> Hi Dudley,
>
> On Wed, Apr 16, 2014 at 08:39:34AM +0000, Dudley Du wrote:
> > Rely on EV_SW and SW_LID bits to identify a LID device, and hook up
> > our filter to listen for SW_LID events to enable/disable touchpad when
> > LID is open/closed.
> > TEST=test on Chomebooks.
>
> This is a policy and it does not belong in the kernel. Please work with Rafael to establish generic interface to put devices into low power mode (like accelerating runtime PM idle timeout) and use it when userspace detects that lid is closed.
>
> Thanks.
>
> >
> > Signed-off-by: Du, Dudley <dudl@cypress.com>
> > ---
> > diff --git a/drivers/input/mouse/cyapa.c b/drivers/input/mouse/cyapa.c
> > index 6820b3f..da03427 100644
> > --- a/drivers/input/mouse/cyapa.c
> > +++ b/drivers/input/mouse/cyapa.c
> > @@ -523,6 +523,9 @@ struct cyapa {
> >         int physical_size_x;
> >         int physical_size_y;
> >
> > +       bool lid_handler_registered;
> > +       struct input_handler lid_handler;
> > +
> >         /* used in ttsp and truetouch based trackpad devices. */
> >         u8 x_origin;  /* X Axis Origin: 0 = left side; 1 = rigth side. */
> >         u8 y_origin;  /* Y Axis Origin: 0 = top; 1 = bottom. */ @@
> > -3107,6 +3110,125 @@ static void cyapa_start_runtime(struct cyapa
> > *cyapa)  static void cyapa_start_runtime(struct cyapa *cyapa) {}
> > #endif /* CONFIG_PM_RUNTIME */
> >
> > +
> > +/*
> > + * We rely on EV_SW and SW_LID bits to identify a LID device, and
> > +hook
> > + * up our filter to listen for SW_LID events to enable/disable
> > +touchpad when
> > + * LID is open/closed.
> > + */
> > +static const struct input_device_id lid_device_ids[] = {
> > +       {
> > +               .flags = INPUT_DEVICE_ID_MATCH_EVBIT |
> > +                        INPUT_DEVICE_ID_MATCH_SWBIT,
> > +               .evbit = { BIT_MASK(EV_SW) },
> > +               .swbit = { BIT_MASK(SW_LID) },
> > +       },
> > +       { },
> > +};
> > +
> > +static int lid_device_connect(struct input_handler *handler,
> > +                             struct input_dev *dev,
> > +                             const struct input_device_id *id) {
> > +       struct input_handle *lid_handle;
> > +       int error;
> > +
> > +       lid_handle = kzalloc(sizeof(struct input_handle), GFP_KERNEL);
> > +       if (!lid_handle)
> > +               return -ENOMEM;
> > +
> > +       lid_handle->dev = dev;
> > +       lid_handle->handler = handler;
> > +       lid_handle->name = "lid_event_handler";
> > +       lid_handle->private = handler->private;
> > +
> > +       error = input_register_handle(lid_handle);
> > +       if (error)
> > +               goto err_free;
> > +
> > +       error = input_open_device(lid_handle);
> > +       if (error)
> > +               goto err_unregister;
> > +
> > +       return 0;
> > +err_unregister:
> > +       input_unregister_handle(lid_handle);
> > +err_free:
> > +       kfree(lid_handle);
> > +       return error;
> > +}
> > +
> > +static void lid_device_disconnect(struct input_handle *handle) {
> > +       input_close_device(handle);
> > +       input_unregister_handle(handle);
> > +       kfree(handle);
> > +}
> > +
> > +static bool lid_event_filter(struct input_handle *handle,
> > +                            unsigned int type, unsigned int code, int
> > +value) {
> > +       struct cyapa *cyapa = handle->private;
> > +       struct device *dev = &cyapa->client->dev;
> > +
> > +       if (type == EV_SW && code == SW_LID) {
> > +               if (cyapa->suspended) {
> > +                       /*
> > +                        * If the lid event filter is called while suspended,
> > +                        * there is no guarantee that the underlying i2cs are
> > +                        * resumed at this point, so it is not safe to issue
> > +                        * the command to change power modes.
> > +                        * Instead, rely on cyapa_resume to set us back to
> > +                        * PWR_MODE_FULL_ACTIVE.
> > +                        */
> > +                       return false;
> > +               }
> > +               if (value == 0) {
> > +                       if (cyapa->cyapa_set_power_mode)
> > +                               cyapa->cyapa_set_power_mode(cyapa,
> > +                                               PWR_MODE_FULL_ACTIVE, 0);
> > +                       pm_runtime_set_active(dev);
> > +                       pm_runtime_enable(dev);
> > +               } else {
> > +                       pm_runtime_disable(dev);
> > +                       if (cyapa->cyapa_set_power_mode)
> > +                               cyapa->cyapa_set_power_mode(cyapa,
> > +                                               PWR_MODE_OFF, 0);
> > +               }
> > +       }
> > +
> > +       return false;
> > +}
> > +
> > +static void lid_event_register_handler(struct cyapa *cyapa) {
> > +       int error;
> > +       struct input_handler *lid_handler = &cyapa->lid_handler;
> > +
> > +       if (cyapa->lid_handler_registered)
> > +               return;
> > +
> > +       lid_handler->filter     = lid_event_filter;
> > +       lid_handler->connect    = lid_device_connect;
> > +       lid_handler->disconnect = lid_device_disconnect;
> > +       lid_handler->name       = "cyapa_lid_event_handler";
> > +       lid_handler->id_table   = lid_device_ids;
> > +       lid_handler->private    = cyapa;
> > +
> > +       error = input_register_handler(lid_handler);
> > +       if (error)
> > +               return;
> > +       cyapa->lid_handler_registered = true; }
> > +
> > +static void lid_event_unregister_handler(struct cyapa *cyapa) {
> > +       if (cyapa->lid_handler_registered) {
> > +               input_unregister_handler(&cyapa->lid_handler);
> > +               cyapa->lid_handler_registered = false;
> > +       }
> > +}
> > +
> >  static void cyapa_detect_async(void *data, async_cookie_t cookie)  {
> >         struct cyapa *cyapa = (struct cyapa *)data; @@ -3126,6 +3248,7
> > @@ static void cyapa_detect_and_start(void *data, async_cookie_t cookie)
> >         cyapa_detect_async(data, cookie);
> >
> >         cyapa_start_runtime(cyapa);
> > +       lid_event_register_handler(cyapa);
> >  }
> >
> >  static int cyapa_probe(struct i2c_client *client, @@ -3221,7 +3344,7
> > @@ static int cyapa_remove(struct i2c_client *client)
> >
> >         free_irq(cyapa->irq, cyapa);
> >         input_unregister_device(cyapa->input);
> > -
> > +       lid_event_unregister_handler(cyapa);
> >         if (cyapa->cyapa_set_power_mode)
> >                 cyapa->cyapa_set_power_mode(cyapa, PWR_MODE_OFF, 0);
> >         i2c_set_clientdata(client, NULL); This message and any
> > attachments may contain Cypress (or its subsidiaries) confidential information. If it has been received in error, please advise the sender and immediately delete this message.
>
> --
> Dmitry
This message and any attachments may contain Cypress (or its subsidiaries) confidential information. If it has been received in error, please advise the sender and immediately delete this message.

^ permalink raw reply

* Re: [PATCH v4 01/24] input: Add ff-memless-next module
From: Michal Malý @ 2014-05-20  9:27 UTC (permalink / raw)
  To: Dmitry Torokhov
  Cc: linux-input, linux-kernel, jkosina, elias.vds, anssi.hannula,
	simon
In-Reply-To: <20140514180558.GB30089@core.coreip.homeip.net>

On Wednesday 14 of May 2014 11:05:58 Dmitry Torokhov wrote:
> On Wed, May 14, 2014 at 10:35:25AM +0200, Michal Malý wrote:
> > Hi Dmitry,
> > 
> > thank you for reviewing this.
> > 
> > On Tuesday 13 of May 2014 23:38:06 Dmitry Torokhov wrote:
> > > On Sat, Apr 26, 2014 at 05:02:00PM +0200, Michal Malý wrote:
> > > > +
> > > > +/** DEFINITION OF TERMS
> > > > + *
> > > > + * Combined effect - An effect whose force is a superposition of
> > > > forces
> > > > + *                   generated by all effects that can be added
> > > > together.
> > > > + *                   Only one combined effect can be playing at a
> > > > time.
> > > > + *                   Effects that can be added together to create a
> > > > combined + *                   effect are FF_CONSTANT, FF_PERIODIC and
> > > > FF_RAMP. + * Uncombinable effect - An effect that cannot be combined
> > > > with
> > > > another effect. + *                       All conditional effects -
> > > > FF_DAMPER, FF_FRICTION, + *                       FF_INERTIA and
> > > > FF_SPRING are uncombinable. + *                       Number of
> > > > uncombinable effects playing simultaneously + *
> > > > depends on the capabilities of the hardware. + * Rumble effect - An
> > > > effect generated by device's rumble motors instead of + *
> > > > force feedback actuators.
> > > > + *
> > > > + *
> > > > + * HANDLING OF UNCOMBINABLE EFFECTS
> > > > + *
> > > > + * Uncombinable effects cannot be combined together into just one
> > > > effect,
> > > > at + * least not in a clear and obvious manner. Therefore these
> > > > effects
> > > > have to + * be handled individually by ff-memless-next. Handling of
> > > > these
> > > > effects is + * left entirely to the hardware-specific driver,
> > > > ff-memless-next merely + * passes these effects to the
> > > > hardware-specific
> > > > driver at appropriate time. + * ff-memless-next provides the UPLOAD
> > > > command to notify the hardware-specific + * driver that the userspace
> > > > is
> > > > about to request playback of an uncombinable + * effect. The
> > > > hardware-specific driver shall take all steps needed to make + * the
> > > > device ready to play the effect when it receives the UPLOAD command. +
> > > > *
> > > > The actual playback shall commence when START_UNCOMB command is
> > > > received.
> > > > + * Opposite to the UPLOAD command is the ERASE command which tells +
> > > > *
> > > > the hardware-specific driver that the playback has finished and that +
> > > > *
> > > > the effect will not be restarted. STOP_UNCOMB command tells
> > > > + * the hardware-specific driver that the playback shall stop but the
> > > > device + * shall still be ready to resume the playback immediately.
> > > > + *
> > > > + * In case it is not possible to make the device ready to play an
> > > > uncombinable + * effect (all hardware effect slots are occupied), the
> > > > hardware-specific + * driver may return an error when it receives an
> > > > UPLOAD command. If the
> > > 
> > > This part concerns me. It seems to me that devices supporting
> > > "uncombinable" effects are in fact not memoryless devices and we should
> > > not be introducing this term here. If the goal is to work around limited
> > > number of effect slots in the devices by combining certain effects then
> > > it needs to be done at ff-core level as it will be potentially useful
> > > for all devices.
> > 
> > Force generated by a conditional effect (referred to as "uncombinable"
> > within ff-memless-next to make the distinction clear) depends on a
> > position of the device. For instance the more a device is deflected from
> > a neutral position the greater force FF_SPRING generates. A truly
> > memoryless device would have to report its position to the driver, have
> > it calculate the appropriate force and send it back to the device. IMHO
> > such a loop would require a very high USB polling rate to play
> > conditional effects with acceptable quality.
> > 
> > We know for a fact that at least many (all?) Logitech devices that support
> > conditional effects use this "semi-memoryless" approach where FF_CONSTANT
> > and FF_PERIODIC are handled in the memoryless fashion and conditional
> > effects are uploaded to the device (in a somewhat simplified form). The
> > amount of effects that can be uploaded to a device is limited which is
> > why ff-memless-next uses two steps (UPLOAD/ERASE and START/STOP) to
> > handle these effects.
> > 
> > Conditional effects - even if they are of the same type - cannot be
> > effectively combined into one because superposition doesn't seem to work
> > here so they have to be processed one by one.
> > 
> > If we ever come across a really memoryless device it should not be
> > particularly difficult to add another callback to ff-memless-next which
> > would emulate conditional effects with constant force.
> 
> Thank you for the explanation. This further solidifies for me the idea
> that handling of such effects that are in fact uploaded to and managed
> by the device should not be handled by the memoryless core but rather by
> the driver itself. I.e. such drivers should implement their own play(),
> upload(), erase(), etc, and decide whether to use a hardware slot for
> the effect or handle effect in memoryless fashion (if possible). We can
> open ff-memless to allow such drivers to use parts of memoryless
> handling.
> 
> Thanks.

To bring this to a conclusion we could go from, would this be an acceptable 
solution?

- Have the HW-specific driver talk directly to ff-core and reimplement upload(), 
play(), etc.
- Rewrite "ff-memless-next" so that it is not a self-contained module but a 
library of functions.
- Have the driver either:
  - Upload an effect to a device directly if the device can fully manage the 
effect by itself.
  - Use provided timing functions to know when an effect should start, stop, 
restart etc...
  - Use provided timing AND processing functions to combine effects that can be 
combined into one, calculate periodic waveforms etc?

I have no problem with throwing my current approach away but before I start 
working on a new one I'd like to know which way to go...

Thanks,
Michal
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply

* Re: [PATCH 4/6] input: cyapa: enable/disable trackpad device based on LID state
From: Rafael J. Wysocki @ 2014-05-20 12:40 UTC (permalink / raw)
  To: Dmitry Torokhov
  Cc: Dudley Du, Benson Leung, Daniel Kurtz, David Solda,
	linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
In-Reply-To: <20140520034302.GB986@core.coreip.homeip.net>

On Monday, May 19, 2014 08:43:02 PM Dmitry Torokhov wrote:
> Hi Dudley,
> 
> On Wed, Apr 16, 2014 at 08:39:34AM +0000, Dudley Du wrote:
> > Rely on EV_SW and SW_LID bits to identify a LID device, and hook
> > up our filter to listen for SW_LID events to enable/disable touchpad when
> > LID is open/closed.
> > TEST=test on Chomebooks.
> 
> This is a policy and it does not belong in the kernel. Please work with
> Rafael to establish generic interface to put devices into low power mode
> (like accelerating runtime PM idle timeout)

I'm not really sure what you mean here, care to be more specific?

> and use it when userspace detects that lid is closed.

I guess we get an event then, don't we?

Rafael


^ permalink raw reply

* Re: [PATCH] HID: rmi: do not handle touchscreens through hid-rmi
From: Jiri Kosina @ 2014-05-20 14:33 UTC (permalink / raw)
  To: Benjamin Tissoires
  Cc: Andrew Duggan, Christopher Heiny, linux-input, linux-kernel
In-Reply-To: <1398263514-7281-1-git-send-email-benjamin.tissoires@redhat.com>

On Wed, 23 Apr 2014, Benjamin Tissoires wrote:

> Currently, hid-rmi drives every Synaptics product, but the touchscreens
> on the Windows tablets should be handled through hid-multitouch.
> 
> Instead of providing a long list of PIDs, rely on the scan_report
> capability to detect which should go to hid-multitouch, and which
> should not go to hid-rmi.
> 
> We introduce a generic HID_GROUP_HAVE_SPECIAL_DRIVER which can be reused
> amoung other drivers if they want to have a catch rule but still
> have multitouch devices handled through hid-multitouch.
> 
> related bug:
> https://bugzilla.kernel.org/show_bug.cgi?id=74241
> https://bugzilla.redhat.com/show_bug.cgi?id=1089583
> 
> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

Hi Benjamin,

sorry for not responding sooner.

Yes, I have to say I find HID_GROUP_HAVE_SPECIAL_DRIVER very disgusting. 
Especially its (non-)relation to hid_have_special_driver[] is very 
confusing.

If you could update this to be RMI-specific (i.e. create a special 
HID_GROUP for RMI devices), I'll merge it right away.

Thanks,

-- 
Jiri Kosina
SUSE Labs

^ permalink raw reply

* Re: [PATCH] HID: core: fix validation of report id 0
From: Jiri Kosina @ 2014-05-20 14:40 UTC (permalink / raw)
  To: Kees Cook; +Cc: LKML, Benjamin Tissoires, Simon Wood, linux-input, Roland Bosa
In-Reply-To: <CAGXu5jJLKQiC4zwYJ9dpVvELoYBKZ4OFsqKdQXQW9OyDwsdvmg@mail.gmail.com>

On Mon, 19 May 2014, Kees Cook wrote:

> Pinging on this patch... I don't see it in -next yet. I've had more
> reports of trouble with logitech devices, and this seems to solve the
> problem.

Apologizes for this taking so long time. I have now queued your patch. 
Thanks,

-- 
Jiri Kosina
SUSE Labs

^ permalink raw reply

* Re: [PATCH v2] HID: quirk for Saitek RAT7 and MMO7 mices' mode button
From: Jiri Kosina @ 2014-05-20 14:42 UTC (permalink / raw)
  To: Harald Brinkmann; +Cc: Benjamin Tissoires, linux-input, linux-kernel
In-Reply-To: <53335A6D.6050608@braincalibration.de>

On Wed, 26 Mar 2014, Harald Brinkmann wrote:

> Hi all,
> 
> and thanks for the pointers, Benjamin. I finally had some time to fix it.
> - Moved the quirk to hid-saitek
> - Tracking the mode and setting only one bit on a mode change in .raw_event
> - Generating instant release events for the button in .event
> 
> One question:
> Is there any way other than loading hid-saitek before hid-generic to ensure
> the device is claimed by the more specific driver?

Hi Harald,

you need to add the VID/PIDs you are adding to saitek_devices[] also to 
hid_have_special_driver[].

Once you do that, the binding will work correctly.

Please respin the patch with this change and resubmit.

-- 
Jiri Kosina
SUSE Labs

^ permalink raw reply

* RE: [PATCH] Add VID/PID for HID-type Multi-Touch Module of AFO CO., LTD.
From: Jiri Kosina @ 2014-05-20 14:44 UTC (permalink / raw)
  To: YongHwan Ki; +Cc: rydberg, linux-input, linux-kernel
In-Reply-To: <003a01cf488c$ab9c4400$02d4cc00$@afoi.co.kr>

On Wed, 26 Mar 2014, YongHwan Ki wrote:

> Sorry, I woud like to add the AFO defines in the Linux Kernel.
> No afo defines exists in the current kernel tree.
> I correctly changed the log for adding the afo defines.
> 
> Kernel Version : linux-3.14.rc7
> Signed-off-by: Yonghwan Ki <kyhw@afoi.co.kr>
> 
> diff -uprN -X Documentation/dontdiff ./drivers/hid/hid-core.c ../linux-3.14-rc7m/drivers/hid/hid-core.c
> --- ./drivers/hid/hid-core.c	2014-03-17 10:51:24.000000000 +0900
> +++ ../linux-3.14-rc7m/drivers/hid/hid-core.c	2014-03-21 17:41:51.846939444 +0900
> @@ -1881,6 +1881,8 @@ static const struct hid_device_id hid_ha
>  	{ HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0005) },
>  	{ HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0030) },
>  	{ HID_USB_DEVICE(USB_VENDOR_ID_ZYDACRON, USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL) },
> +	{ HID_USB_DEVICE(USB_VENDOR_ID_AFO, USB_DEVICE_ID_AFO_TCM) },
> +	{ HID_USB_DEVICE(USB_VENDOR_ID_AFO, USB_DEVICE_ID_AFO_THM) },

Is this really necessary? Why doesn't HID_DG_CONTACTID matching work for 
the to automatically trigger HID_GROUP_MULTITOUCH-based binding?

-- 
Jiri Kosina
SUSE Labs

^ permalink raw reply

* Re: [PATCH] hid: Add custom driver for Lenovo ThinkPad Compact Bluetooth Keyboard
From: Jiri Kosina @ 2014-05-20 14:47 UTC (permalink / raw)
  To: Jamie Lentin; +Cc: linux-input, linux-kernel
In-Reply-To: <1395786407-11273-1-git-send-email-jm@lentin.co.uk>

On Tue, 25 Mar 2014, Jamie Lentin wrote:

> This keyboard requires some custom mappings for all keys to be
> available, and the Fn-lock toggle needs to be controlled in software.
> 
> Signed-off-by: Jamie Lentin <jm@lentin.co.uk>
> ---
> I assume that Linux users want Fn-Lock enabled by default, so they can
> get at the function keys. If this is an incorrect assumption then can
> change it---so long as there's some way of me leaving it enabled :)
> 
> Tested with and applies cleanly to 3.13.6.
> 
>  drivers/hid/Kconfig                   |  10 ++
>  drivers/hid/Makefile                  |   1 +
>  drivers/hid/hid-core.c                |   3 +
>  drivers/hid/hid-ids.h                 |   1 +
>  drivers/hid/hid-lenovo-tpcompactkbd.c | 191 ++++++++++++++++++++++++++++++++++
>  5 files changed, 206 insertions(+)

Jamie,

thanks for the driver.

I think it'd make more sense if this could be folded into hid-lenovo-tpkbd 
driver. Could you please do that and resubmit?

-- 
Jiri Kosina
SUSE Labs

^ permalink raw reply

* Re: [PATCH] HID: rmi: do not handle touchscreens through hid-rmi
From: Benjamin Tissoires @ 2014-05-20 14:59 UTC (permalink / raw)
  To: Jiri Kosina; +Cc: Andrew Duggan, Christopher Heiny, linux-input, linux-kernel
In-Reply-To: <alpine.LNX.2.00.1405201631310.1615@pobox.suse.cz>

On May 20 2014 or thereabouts, Jiri Kosina wrote:
> On Wed, 23 Apr 2014, Benjamin Tissoires wrote:
> 
> > Currently, hid-rmi drives every Synaptics product, but the touchscreens
> > on the Windows tablets should be handled through hid-multitouch.
> > 
> > Instead of providing a long list of PIDs, rely on the scan_report
> > capability to detect which should go to hid-multitouch, and which
> > should not go to hid-rmi.
> > 
> > We introduce a generic HID_GROUP_HAVE_SPECIAL_DRIVER which can be reused
> > amoung other drivers if they want to have a catch rule but still
> > have multitouch devices handled through hid-multitouch.
> > 
> > related bug:
> > https://bugzilla.kernel.org/show_bug.cgi?id=74241
> > https://bugzilla.redhat.com/show_bug.cgi?id=1089583
> > 
> > Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
> 
> Hi Benjamin,
> 
> sorry for not responding sooner.

It's not a big deal. Actually, the Canonical folks reminded me the state
of this patch that I completely forgot too :)

> 
> Yes, I have to say I find HID_GROUP_HAVE_SPECIAL_DRIVER very disgusting. 
> Especially its (non-)relation to hid_have_special_driver[] is very 
> confusing.
> 
> If you could update this to be RMI-specific (i.e. create a special 
> HID_GROUP for RMI devices), I'll merge it right away.

Ok, I'll add this to the pile of things to do today.

Cheers,
Benjamin

^ permalink raw reply

* [PATCH] Input: misc : Introduce the use of the managed version of kzalloc
From: Himangi Saraogi @ 2014-05-20 15:09 UTC (permalink / raw)
  To: Dmitry Torokhov, linux-input, linux-kernel; +Cc: julia.lawall

This patch moves data allocated using kzalloc to managed data allocated
using devm_kzalloc and cleans now unnecessary kfrees in probe and remove
functions.

The following Coccinelle semantic patch was used for making the change:

@platform@
identifier p, probefn, removefn;
@@
struct platform_driver p = {
  .probe = probefn,
  .remove = removefn,
};

@prb@
identifier platform.probefn, pdev;
expression e, e1, e2;
@@
probefn(struct platform_device *pdev, ...) {
  <+...
- e = kzalloc(e1, e2)
+ e = devm_kzalloc(&pdev->dev, e1, e2)
  ...
?-kfree(e);
  ...+>
}

@rem depends on prb@
identifier platform.removefn;
expression e;
@@
removefn(...) {
  <...
- kfree(e);
  ...>
}

Signed-off-by: Himangi Saraogi <himangi774@gmail.com>
Acked-by: Julia Lawall <julia.lawall@lip6.fr>
---
Would be better to add the definition of a
devm_input_allocate_polled_device, like there is a
devm_input_allocate_device defined?

 drivers/input/misc/sgi_btns.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/input/misc/sgi_btns.c b/drivers/input/misc/sgi_btns.c
index f104749..e2dea37 100644
--- a/drivers/input/misc/sgi_btns.c
+++ b/drivers/input/misc/sgi_btns.c
@@ -97,7 +97,8 @@ static int sgi_buttons_probe(struct platform_device *pdev)
 	struct input_dev *input;
 	int error, i;
 
-	bdev = kzalloc(sizeof(struct buttons_dev), GFP_KERNEL);
+	bdev = devm_kzalloc(&pdev->dev, sizeof(struct buttons_dev),
+			    GFP_KERNEL);
 	poll_dev = input_allocate_polled_device();
 	if (!bdev || !poll_dev) {
 		error = -ENOMEM;
@@ -137,7 +138,6 @@ static int sgi_buttons_probe(struct platform_device *pdev)
 
  err_free_mem:
 	input_free_polled_device(poll_dev);
-	kfree(bdev);
 	return error;
 }
 
@@ -147,7 +147,6 @@ static int sgi_buttons_remove(struct platform_device *pdev)
 
 	input_unregister_polled_device(bdev->poll_dev);
 	input_free_polled_device(bdev->poll_dev);
-	kfree(bdev);
 
 	return 0;
 }
-- 
1.9.1


^ permalink raw reply related

* Re: [PATCH] Input: misc : Introduce the use of the managed version of kzalloc
From: Dmitry Torokhov @ 2014-05-20 15:20 UTC (permalink / raw)
  To: Himangi Saraogi; +Cc: linux-input, linux-kernel, julia.lawall
In-Reply-To: <20140520150918.GA6269@himangi-Dell>

Hi Himangi,

On Tue, May 20, 2014 at 08:39:18PM +0530, Himangi Saraogi wrote:
> Would be better to add the definition of a
> devm_input_allocate_polled_device, like there is a
> devm_input_allocate_device defined?

There is one, queued for 3.16. You should see it in linux-next.

Thanks.

-- 
Dmitry

^ permalink raw reply

* Re: [PATCH 4/6] input: cyapa: enable/disable trackpad device based on LID state
From: Dmitry Torokhov @ 2014-05-20 15:25 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Dudley Du, Benson Leung, Daniel Kurtz, David Solda,
	linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
In-Reply-To: <1507406.BNOsJcxmP9@vostro.rjw.lan>

On Tue, May 20, 2014 at 02:40:12PM +0200, Rafael J. Wysocki wrote:
> On Monday, May 19, 2014 08:43:02 PM Dmitry Torokhov wrote:
> > Hi Dudley,
> > 
> > On Wed, Apr 16, 2014 at 08:39:34AM +0000, Dudley Du wrote:
> > > Rely on EV_SW and SW_LID bits to identify a LID device, and hook
> > > up our filter to listen for SW_LID events to enable/disable touchpad when
> > > LID is open/closed.
> > > TEST=test on Chomebooks.
> > 
> > This is a policy and it does not belong in the kernel. Please work with
> > Rafael to establish generic interface to put devices into low power mode
> > (like accelerating runtime PM idle timeout)
> 
> I'm not really sure what you mean here, care to be more specific?

I think we chatted about this before - we need a uniform interface for
userspace to put devices into low power mode on demand. As
implementation detail I thought we could require runtime PM for that and
simply pretend that the PM timeout expired early when userspace invokes
that API.

> 
> > and use it when userspace detects that lid is closed.
> 
> I guess we get an event then, don't we?

Right, userspace gets EV_SW/SW_LID input event and needs to react. In
this particular case the desire is to power down touchpad (since it is
unaccessible). I am not sure why system suspend (which I expect happen
in reaction to lid closing) is not enough, but that's question for
Dudley.

Thanks.

-- 
Dmitry

^ permalink raw reply

* Re: [PATCH] hid: Add custom driver for Lenovo ThinkPad Compact Bluetooth Keyboard
From: Jiri Kosina @ 2014-05-20 15:31 UTC (permalink / raw)
  To: Jamie Lentin; +Cc: linux-input, linux-kernel
In-Reply-To: <alpine.DEB.2.02.1405201555110.4059@marmot.wormnet.eu>

On Tue, 20 May 2014, Jamie Lentin wrote:

> > I think it'd make more sense if this could be folded into 
> > hid-lenovo-tpkbd driver. Could you please do that and resubmit?
> 
> I can do if required, although I didn't originally since there would be no
> common code whatsoever between the keyboards. 

That's not a problem really. I am trying to have the functionality mostly 
grouped together by vendor, and not pollute the tree by gazillion of tiny 
single-function driver.

> I have both the USB and the Bluetooth versions of this keyboard now, once I
> have finished support for both[0] I will resubmit support for both.

Thanks,

-- 
Jiri Kosina
SUSE Labs

^ permalink raw reply

* Re: [PATCH] hid: Add custom driver for Lenovo ThinkPad Compact Bluetooth Keyboard
From: Jamie Lentin @ 2014-05-20 15:19 UTC (permalink / raw)
  To: Jiri Kosina; +Cc: linux-input, linux-kernel
In-Reply-To: <alpine.LNX.2.00.1405201644230.1615@pobox.suse.cz>

On Tue, 20 May 2014, Jiri Kosina wrote:

> On Tue, 25 Mar 2014, Jamie Lentin wrote:
>
>> This keyboard requires some custom mappings for all keys to be
>> available, and the Fn-lock toggle needs to be controlled in software.
>>
>> Signed-off-by: Jamie Lentin <jm@lentin.co.uk>
>> ---
>> I assume that Linux users want Fn-Lock enabled by default, so they can
>> get at the function keys. If this is an incorrect assumption then can
>> change it---so long as there's some way of me leaving it enabled :)
>>
>> Tested with and applies cleanly to 3.13.6.
>>
>>  drivers/hid/Kconfig                   |  10 ++
>>  drivers/hid/Makefile                  |   1 +
>>  drivers/hid/hid-core.c                |   3 +
>>  drivers/hid/hid-ids.h                 |   1 +
>>  drivers/hid/hid-lenovo-tpcompactkbd.c | 191 ++++++++++++++++++++++++++++++++++
>>  5 files changed, 206 insertions(+)
>
> Jamie,
>
> thanks for the driver.
>
> I think it'd make more sense if this could be folded into hid-lenovo-tpkbd
> driver. Could you please do that and resubmit?

I can do if required, although I didn't originally since there would be no 
common code whatsoever between the keyboards. The newer keyboard has no 
leds to register, and no trackpoint settings are exposed like on the older 
keyboard. Equally the newer Fn-Lock setting wouldn't make sense for the 
older keyboards, since they have grown-up function keys. The similarity 
stops with the name.

I have both the USB and the Bluetooth versions of this keyboard now, 
once I have finished support for both[0] I will resubmit support for both.

Cheers,

[0] https://github.com/lentinj/tp-compact-keyboard/blob/usb-keyboard-support/module/hid-lenovo-tpcompactkbd.c
     if anyone is interested

-- 
Jamie Lentin

^ permalink raw reply

* Re: [PATCH 4/6] input: cyapa: enable/disable trackpad device based on LID state
From: Benson Leung @ 2014-05-20 15:52 UTC (permalink / raw)
  To: Dmitry Torokhov
  Cc: Rafael J. Wysocki, Dudley Du, Daniel Kurtz, David Solda,
	linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
In-Reply-To: <20140520152551.GB9444@core.coreip.homeip.net>

Hi Dmitry and Rafael,

I can provide more insight here since I implemented an early version
of this in the atmel and cyapa drivers that are used in the chromeos
kernel.

On Tue, May 20, 2014 at 8:25 AM, Dmitry Torokhov
<dmitry.torokhov@gmail.com> wrote:
> On Tue, May 20, 2014 at 02:40:12PM +0200, Rafael J. Wysocki wrote:
>> On Monday, May 19, 2014 08:43:02 PM Dmitry Torokhov wrote:
>> > Hi Dudley,
>> >
>> > On Wed, Apr 16, 2014 at 08:39:34AM +0000, Dudley Du wrote:
>> > > Rely on EV_SW and SW_LID bits to identify a LID device, and hook
>> > > up our filter to listen for SW_LID events to enable/disable touchpad when
>> > > LID is open/closed.
>> > > TEST=test on Chomebooks.
>> >
>> > This is a policy and it does not belong in the kernel. Please work with
>> > Rafael to establish generic interface to put devices into low power mode
>> > (like accelerating runtime PM idle timeout)
>>
>> I'm not really sure what you mean here, care to be more specific?
>
> I think we chatted about this before - we need a uniform interface for
> userspace to put devices into low power mode on demand. As
> implementation detail I thought we could require runtime PM for that and
> simply pretend that the PM timeout expired early when userspace invokes
> that API.
>
>>
>> > and use it when userspace detects that lid is closed.
>>
>> I guess we get an event then, don't we?
>
> Right, userspace gets EV_SW/SW_LID input event and needs to react. In
> this particular case the desire is to power down touchpad (since it is
> unaccessible). I am not sure why system suspend (which I expect happen
> in reaction to lid closing) is not enough, but that's question for
> Dudley.


Waiting for system suspend isn't sufficient here because system
suspend takes some time to trigger from user space, and in that time,
the B panel of the laptop may couple with the active trackpad, or the
C panel with the active touchscreen. This may generate stray input
events, which may in turn cancel the suspend if the drivers use
pm_wakeup_event(), and those input events may trigger something
unwanted in the UI (think, accidentally one-click buy something on
Amazon, etc).

I came up with a requirement: When the lid is closed, as soon as
possible, the devices must be off. That's part of the reason why
Dudley's patch does it in the kernel rather than doing the round trip
to user space.

Furthermore, the policy on lid close is not always to enter suspend.
We have something called Docked Mode, which allows the system to not
suspend while the lid is closed if there's an external monitor
attached. In this case, the touch devices must be disabled as well as
again they risk generating stray events with the lid closed.

I'd prefer if there was some way to establish a relationship between
the lid and devices that must be power managed differently depending
on the state of the lid, rather than leaving it to user space to
manage the power management of these devices in real time and open up
the possibility of race conditions there if user space is too slow.

Thanks!

-- 
Benson Leung
Software Engineer, Chrome OS
Google Inc.
bleung@google.com

^ permalink raw reply

* Sentelic probe routine issue
From: Aristeu Rozanski @ 2014-05-20 16:08 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, Tai-hwa Liang

[-- Attachment #1: Type: text/plain, Size: 2109 bytes --]

Hello,
we hit a strange bug which has some matching reports elsewhere[1][2]. A
Dell box using a rebranded logitech mouse (M-S69) fails to enable the
mouse with:
	psmouse serio1: Failed to enable mouse on isa0060/serio1

The very same mouse in a different machine works fine and a different
ps/2 mouse which uses a protocol better than IMPS in the Dell box also
works.

The behavior is the same: if after booting you unplug the mouse and plug
it again it'll work.

After some digging I found out that Sentelic's probe routine is the
culprit (which was moved down already on 4a18b3ab6ed537b055). As soon
the first byte is sent in fsp_reg_read():

	if (ps2_sendbyte(ps2dev, 0xf3, FSP_CMD_TIMEOUT) < 0)
		goto out;

Here, that ps2_sendbyte() will return 0 but even forcing to stop there,
won't get it working again. Right after it returns in psmouse-bare.c:

	/*
	 * Reset to defaults in case the device got confused by extended
	 * protocol probes. Note that we follow up with full reset because
	 * some mice put themselves to sleep when they see PSMOUSE_RESET_DIS.
	 */
		ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
		psmouse_reset(psmouse);

which doesn't seem to help at all. Due to the fact that the same mouse
works in a different machine and a different protocol mouse (which will
stop the probe earlier, never getting to Sentelic's) works in this
machine, my conclusion is that the i8042 in this machine can't handle
that byte.

So I'm out of ideas. We can't move Sentelic's probe even further down
because it'd break in the case of a very old mouse only capable of bare
protocol and I don't have Sentelic's documentation to try to find a
different way to probe without breaking this machine.

Attached are the debug output of an unchanged kernel and a kernel with
Sentelic's probe disabled. "i8042: unplug/plug mouse" was added to
signal when I stopped moving the mouse and unplugged and plugged again.

Any thoughts?

[1] http://debian.2.n7.nabble.com/Bug-418114-intellimouse-linux-image-2-6-686-td2443859.html
[2] http://ubuntuforums.org/archive/index.php/t-1091535.html

-- 
Aristeu


[-- Attachment #2: stock.log --]
[-- Type: text/plain, Size: 29706 bytes --]

[    0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.15.0-rc5+ root=/dev/mapper/rhel-root ro rd.lvm.lv=fedora/swap rd.lvm.lv=rhel/swap rd.lvm.lv=rhel/root vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=rhel/swap rhgb quiet LANG=en_US.UTF-8 i8042.debug=1
[    0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-3.15.0-rc5+ root=/dev/mapper/rhel-root ro rd.lvm.lv=fedora/swap rd.lvm.lv=rhel/swap rd.lvm.lv=rhel/root vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=rhel/swap rhgb quiet LANG=en_US.UTF-8 i8042.debug=1
[    4.537412] i8042: PNP: PS/2 Controller [PNP0f03:PS2M] at 0x60,0x64 irq 12
[    4.537414] i8042: PNP: PS/2 controller doesn't have KBD irq; using default 1
[    4.537425] i8042: [0] d1 -> i8042 (command)
[    4.537481] i8042: [0] df -> i8042 (parameter)
[    4.537537] i8042: [0] ff -> i8042 (command)
[    4.537570] i8042: [1] 20 -> i8042 (command)
[    4.537680] i8042: [1] 65 <- i8042 (return)
[    4.537733] i8042: [1] 20 -> i8042 (command)
[    4.537791] i8042: [1] 65 <- i8042 (return)
[    4.537793] i8042: Warning: Keylock active
[    4.537796] i8042: [1] 60 -> i8042 (command)
[    4.537852] i8042: [1] 74 -> i8042 (parameter)
[    4.537912] i8042: [1] d3 -> i8042 (command)
[    4.538020] i8042: [1] 5a -> i8042 (parameter)
[    4.538080] i8042: [1] 5a <- i8042 (return)
[    4.538083] i8042: [1] a7 -> i8042 (command)
[    4.538137] i8042: [1] 20 -> i8042 (command)
[    4.538195] i8042: [1] 74 <- i8042 (return)
[    4.538198] i8042: [1] a8 -> i8042 (command)
[    4.538304] i8042: [1] 20 -> i8042 (command)
[    4.538362] i8042: [1] 54 <- i8042 (return)
[    4.538375] i8042: [1] 60 -> i8042 (command)
[    4.538431] i8042: [1] 56 -> i8042 (parameter)
[    4.538539] i8042: [1] d3 -> i8042 (command)
[    4.538595] i8042: [1] a5 -> i8042 (parameter)
[    4.538667] i8042: [2] a5 <- i8042 (aux_test_irq, aux)
[    4.538676] i8042: [2] 60 -> i8042 (command)
[    4.538785] i8042: [2] 74 -> i8042 (parameter)
[    4.538851] i8042: [2] d3 -> i8042 (command)
[    4.538907] i8042: [2] f0 -> i8042 (parameter)
[    4.538967] i8042: [2] f0 <- i8042 (return)
[    4.538970] i8042: [2] d3 -> i8042 (command)
[    4.539026] i8042: [2] 56 -> i8042 (parameter)
[    4.539137] i8042: [2] 56 <- i8042 (return)
[    4.539140] i8042: [2] d3 -> i8042 (command)
[    4.539196] i8042: [2] a4 -> i8042 (parameter)
[    4.539255] i8042: [2] a4 <- i8042 (return)
[    4.539270] i8042: [2] 60 -> i8042 (command)
[    4.539326] i8042: [2] 56 -> i8042 (parameter)
[    4.539338] i8042: [2] Interrupt 1, without any data
[    4.539394] i8042: [2] 60 -> i8042 (command)
[    4.539450] i8042: [2] 47 -> i8042 (parameter)
[    4.539454] serio: i8042 KBD port at 0x60,0x64 irq 1
[    4.539459] serio: i8042 AUX port at 0x60,0x64 irq 12
[    4.539890] i8042: [3] d4 -> i8042 (command)
[    4.539947] i8042: [3] f2 -> i8042 (parameter)
[    4.542300] i8042: [5] fa <- i8042 (interrupt, 1, 12)
[    4.543471] i8042: [6] 03 <- i8042 (interrupt, 1, 12)
[    4.543487] i8042: [6] d4 -> i8042 (command)
[    4.543543] i8042: [7] f6 -> i8042 (parameter)
[    4.545925] i8042: [9] fa <- i8042 (interrupt, 1, 12)
[    4.545942] i8042: [9] d4 -> i8042 (command)
[    4.545999] i8042: [9] f3 -> i8042 (parameter)
[    4.546067] i8042: [9] fa <- i8042 (interrupt, 1, 12)
[    4.546072] i8042: [9] d4 -> i8042 (command)
[    4.546180] i8042: [9] 0a -> i8042 (parameter)
[    4.550683] i8042: [14] fa <- i8042 (interrupt, 1, 12)
[    4.550700] i8042: [14] d4 -> i8042 (command)
[    4.550756] i8042: [14] e8 -> i8042 (parameter)
[    4.550819] i8042: [14] fa <- i8042 (interrupt, 1, 12)
[    4.550825] i8042: [14] d4 -> i8042 (command)
[    4.550933] i8042: [14] 00 -> i8042 (parameter)
[    4.555349] i8042: [18] fa <- i8042 (interrupt, 1, 12)
[    4.555365] i8042: [18] d4 -> i8042 (command)
[    4.555422] i8042: [18] f3 -> i8042 (parameter)
[    4.555501] i8042: [19] fa <- i8042 (interrupt, 1, 12)
[    4.555508] i8042: [19] d4 -> i8042 (command)
[    4.555616] i8042: [19] 14 -> i8042 (parameter)
[    4.560036] i8042: [23] fa <- i8042 (interrupt, 1, 12)
[    4.560052] i8042: [23] d4 -> i8042 (command)
[    4.560316] i8042: [23] f3 -> i8042 (parameter)
[    4.560440] i8042: [23] fa <- i8042 (interrupt, 1, 12)
[    4.560445] i8042: [23] d4 -> i8042 (command)
[    4.560553] i8042: [24] 3c -> i8042 (parameter)
[    4.565103] i8042: [28] fa <- i8042 (interrupt, 1, 12)
[    4.565119] i8042: [28] d4 -> i8042 (command)
[    4.565176] i8042: [28] f3 -> i8042 (parameter)
[    4.565244] i8042: [28] fa <- i8042 (interrupt, 1, 12)
[    4.565250] i8042: [28] d4 -> i8042 (command)
[    4.565358] i8042: [28] 28 -> i8042 (parameter)
[    4.569825] i8042: [33] fa <- i8042 (interrupt, 1, 12)
[    4.569833] i8042: [33] d4 -> i8042 (command)
[    4.569941] i8042: [33] f3 -> i8042 (parameter)
[    4.569999] i8042: [33] fa <- i8042 (interrupt, 1, 12)
[    4.570004] i8042: [33] d4 -> i8042 (command)
[    4.570112] i8042: [33] 14 -> i8042 (parameter)
[    4.574584] i8042: [38] fa <- i8042 (interrupt, 1, 12)
[    4.574596] i8042: [38] d4 -> i8042 (command)
[    4.574703] i8042: [38] f3 -> i8042 (parameter)
[    4.574764] i8042: [38] fa <- i8042 (interrupt, 1, 12)
[    4.574769] i8042: [38] d4 -> i8042 (command)
[    4.574876] i8042: [38] 14 -> i8042 (parameter)
[    4.579421] i8042: [42] fa <- i8042 (interrupt, 1, 12)
[    4.579434] i8042: [42] d4 -> i8042 (command)
[    4.579697] i8042: [43] f3 -> i8042 (parameter)
[    4.579800] i8042: [43] fa <- i8042 (interrupt, 1, 12)
[    4.579811] i8042: [43] d4 -> i8042 (command)
[    4.579920] i8042: [43] 3c -> i8042 (parameter)
[    4.584419] i8042: [47] fa <- i8042 (interrupt, 1, 12)
[    4.584449] i8042: [47] d4 -> i8042 (command)
[    4.584562] i8042: [48] f3 -> i8042 (parameter)
[    4.584654] i8042: [48] fa <- i8042 (interrupt, 1, 12)
[    4.584673] i8042: [48] d4 -> i8042 (command)
[    4.584732] i8042: [48] 28 -> i8042 (parameter)
[    4.589186] i8042: [52] fa <- i8042 (interrupt, 1, 12)
[    4.589210] i8042: [52] d4 -> i8042 (command)
[    4.589268] i8042: [52] f3 -> i8042 (parameter)
[    4.589353] i8042: [52] fa <- i8042 (interrupt, 1, 12)
[    4.589360] i8042: [52] d4 -> i8042 (command)
[    4.589469] i8042: [52] 14 -> i8042 (parameter)
[    4.594031] i8042: [57] fa <- i8042 (interrupt, 1, 12)
[    4.594056] i8042: [57] d4 -> i8042 (command)
[    4.594114] i8042: [57] f3 -> i8042 (parameter)
[    4.594204] i8042: [57] fa <- i8042 (interrupt, 1, 12)
[    4.594214] i8042: [57] d4 -> i8042 (command)
[    4.594324] i8042: [57] 14 -> i8042 (parameter)
[    4.598859] i8042: [62] fa <- i8042 (interrupt, 1, 12)
[    4.598885] i8042: [62] d4 -> i8042 (command)
[    4.599101] i8042: [62] f2 -> i8042 (parameter)
[    4.601408] i8042: [64] fa <- i8042 (interrupt, 1, 12)
[    4.602552] i8042: [66] 03 <- i8042 (interrupt, 1, 12)
[    4.602578] i8042: [66] d4 -> i8042 (command)
[    4.602688] i8042: [66] e8 -> i8042 (parameter)
[    4.602735] i8042: [66] fa <- i8042 (interrupt, 1, 12)
[    4.602742] i8042: [66] d4 -> i8042 (command)
[    4.602851] i8042: [66] 00 -> i8042 (parameter)
[    4.607281] i8042: [70] fa <- i8042 (interrupt, 1, 12)
[    4.607305] i8042: [70] d4 -> i8042 (command)
[    4.607363] i8042: [70] e8 -> i8042 (parameter)
[    4.607431] i8042: [70] fa <- i8042 (interrupt, 1, 12)
[    4.607438] i8042: [70] d4 -> i8042 (command)
[    4.607547] i8042: [71] 00 -> i8042 (parameter)
[    4.611929] i8042: [75] fa <- i8042 (interrupt, 1, 12)
[    4.611952] i8042: [75] d4 -> i8042 (command)
[    4.612062] i8042: [75] e8 -> i8042 (parameter)
[    4.612135] i8042: [75] fa <- i8042 (interrupt, 1, 12)
[    4.612142] i8042: [75] d4 -> i8042 (command)
[    4.612251] i8042: [75] 00 -> i8042 (parameter)
[    4.616772] i8042: [80] fa <- i8042 (interrupt, 1, 12)
[    4.616806] i8042: [80] d4 -> i8042 (command)
[    4.616866] i8042: [80] e8 -> i8042 (parameter)
[    4.617073] i8042: [80] fa <- i8042 (interrupt, 1, 12)
[    4.617085] i8042: [80] d4 -> i8042 (command)
[    4.617144] i8042: [80] 00 -> i8042 (parameter)
[    4.621704] i8042: [85] fa <- i8042 (interrupt, 1, 12)
[    4.621734] i8042: [85] d4 -> i8042 (command)
[    4.621793] i8042: [85] e9 -> i8042 (parameter)
[    4.624097] i8042: [87] fa <- i8042 (interrupt, 1, 12)
[    4.627411] i8042: [90] 00 <- i8042 (interrupt, 1, 12)
[    4.627465] i8042: [90] 00 <- i8042 (interrupt, 1, 12)
[    4.627523] i8042: [91] 14 <- i8042 (interrupt, 1, 12)
[    4.627541] i8042: [91] d4 -> i8042 (command)
[    4.627599] i8042: [91] e8 -> i8042 (parameter)
[    4.627688] i8042: [91] fa <- i8042 (interrupt, 1, 12)
[    4.627701] i8042: [91] d4 -> i8042 (command)
[    4.627760] i8042: [91] 00 -> i8042 (parameter)
[    4.632205] i8042: [95] fa <- i8042 (interrupt, 1, 12)
[    4.632239] i8042: [95] d4 -> i8042 (command)
[    4.632455] i8042: [95] e8 -> i8042 (parameter)
[    4.632632] i8042: [96] fa <- i8042 (interrupt, 1, 12)
[    4.632654] i8042: [96] d4 -> i8042 (command)
[    4.632713] i8042: [96] 00 -> i8042 (parameter)
[    4.637298] i8042: [100] fa <- i8042 (interrupt, 1, 12)
[    4.637325] i8042: [100] d4 -> i8042 (command)
[    4.637384] i8042: [100] e8 -> i8042 (parameter)
[    4.637448] i8042: [100] fa <- i8042 (interrupt, 1, 12)
[    4.637455] i8042: [100] d4 -> i8042 (command)
[    4.637565] i8042: [101] 00 -> i8042 (parameter)
[    4.641960] i8042: [105] fa <- i8042 (interrupt, 1, 12)
[    4.641993] i8042: [105] d4 -> i8042 (command)
[    4.642053] i8042: [105] e8 -> i8042 (parameter)
[    4.642129] i8042: [105] fa <- i8042 (interrupt, 1, 12)
[    4.642142] i8042: [105] d4 -> i8042 (command)
[    4.642201] i8042: [105] 00 -> i8042 (parameter)
[    4.646627] i8042: [110] fa <- i8042 (interrupt, 1, 12)
[    4.646661] i8042: [110] d4 -> i8042 (command)
[    4.646720] i8042: [110] e9 -> i8042 (parameter)
[    4.649043] i8042: [112] fa <- i8042 (interrupt, 1, 12)
[    4.652355] i8042: [115] 00 <- i8042 (interrupt, 1, 12)
[    4.652410] i8042: [115] 00 <- i8042 (interrupt, 1, 12)
[    4.652471] i8042: [116] 14 <- i8042 (interrupt, 1, 12)
[    4.848411] i8042: [312] d4 -> i8042 (command)
[    4.848472] i8042: [312] f6 -> i8042 (parameter)
[    4.850834] i8042: [314] fa <- i8042 (interrupt, 1, 12)
[    4.850853] i8042: [314] d4 -> i8042 (command)
[    4.850962] i8042: [314] e8 -> i8042 (parameter)
[    4.851002] i8042: [314] fa <- i8042 (interrupt, 1, 12)
[    4.851010] i8042: [314] d4 -> i8042 (command)
[    4.851119] i8042: [314] 00 -> i8042 (parameter)
[    4.855503] i8042: [319] fa <- i8042 (interrupt, 1, 12)
[    4.855516] i8042: [319] d4 -> i8042 (command)
[    4.855627] i8042: [319] e6 -> i8042 (parameter)
[    4.857927] i8042: [321] fa <- i8042 (interrupt, 1, 12)
[    4.857941] i8042: [321] d4 -> i8042 (command)
[    4.858155] i8042: [321] e6 -> i8042 (parameter)
[    4.860499] i8042: [324] fa <- i8042 (interrupt, 1, 12)
[    4.860513] i8042: [324] d4 -> i8042 (command)
[    4.860622] i8042: [324] e6 -> i8042 (parameter)
[    4.862916] i8042: [326] fa <- i8042 (interrupt, 1, 12)
[    4.862929] i8042: [326] d4 -> i8042 (command)
[    4.863040] i8042: [326] e9 -> i8042 (parameter)
[    4.865334] i8042: [328] fa <- i8042 (interrupt, 1, 12)
[    4.868637] i8042: [332] 1a <- i8042 (interrupt, 1, 12)
[    4.868697] i8042: [332] 03 <- i8042 (interrupt, 1, 12)
[    4.868755] i8042: [332] 3c <- i8042 (interrupt, 1, 12)
[    4.868847] i8042: [332] d4 -> i8042 (command)
[    4.868905] i8042: [332] f6 -> i8042 (parameter)
[    4.871259] i8042: [334] fa <- i8042 (interrupt, 1, 12)
[    4.871280] i8042: [334] d4 -> i8042 (command)
[    4.871389] i8042: [335] f5 -> i8042 (parameter)
[    4.873677] i8042: [337] fa <- i8042 (interrupt, 1, 12)
[    4.873688] i8042: [337] d4 -> i8042 (command)
[    4.873797] i8042: [337] e6 -> i8042 (parameter)
[    4.876089] i8042: [339] fa <- i8042 (interrupt, 1, 12)
[    4.876344] i8042: [339] d4 -> i8042 (command)
[    4.876403] i8042: [340] e6 -> i8042 (parameter)
[    4.878749] i8042: [342] fa <- i8042 (interrupt, 1, 12)
[    4.878768] i8042: [342] d4 -> i8042 (command)
[    4.878878] i8042: [342] e6 -> i8042 (parameter)
[    4.881159] i8042: [344] fa <- i8042 (interrupt, 1, 12)
[    4.881177] i8042: [344] d4 -> i8042 (command)
[    4.881286] i8042: [344] e9 -> i8042 (parameter)
[    4.883578] i8042: [347] fa <- i8042 (interrupt, 1, 12)
[    4.886888] i8042: [350] 1a <- i8042 (interrupt, 1, 12)
[    4.886948] i8042: [350] 03 <- i8042 (interrupt, 1, 12)
[    4.887006] i8042: [350] 3c <- i8042 (interrupt, 1, 12)
[    4.887023] i8042: [350] d4 -> i8042 (command)
[    4.887081] i8042: [350] e8 -> i8042 (parameter)
[    4.887171] i8042: [350] fa <- i8042 (interrupt, 1, 12)
[    4.887178] i8042: [350] d4 -> i8042 (command)
[    4.887287] i8042: [350] 03 -> i8042 (parameter)
[    4.891684] i8042: [355] fa <- i8042 (interrupt, 1, 12)
[    4.891699] i8042: [355] d4 -> i8042 (command)
[    4.891810] i8042: [355] e6 -> i8042 (parameter)
[    4.894108] i8042: [357] fa <- i8042 (interrupt, 1, 12)
[    4.894123] i8042: [357] d4 -> i8042 (command)
[    4.894233] i8042: [357] e6 -> i8042 (parameter)
[    4.896516] i8042: [360] fa <- i8042 (interrupt, 1, 12)
[    4.896530] i8042: [360] d4 -> i8042 (command)
[    4.896641] i8042: [360] e6 -> i8042 (parameter)
[    4.901288] i8042: [364] fa <- i8042 (interrupt, 1, 12)
[    4.901321] i8042: [364] d4 -> i8042 (command)
[    4.901432] i8042: [365] e9 -> i8042 (parameter)
[    4.913603] i8042: [377] fa <- i8042 (interrupt, 1, 12)
[    4.916905] i8042: [380] 1a <- i8042 (interrupt, 1, 12)
[    4.926948] i8042: [390] 03 <- i8042 (interrupt, 1, 12)
[    4.927838] i8042: [391] 3c <- i8042 (interrupt, 1, 12)
[    4.927867] i8042: [391] d4 -> i8042 (command)
[    4.928757] i8042: [392] e8 -> i8042 (parameter)
[    4.929611] i8042: [393] fa <- i8042 (interrupt, 1, 12)
[    4.929630] i8042: [393] d4 -> i8042 (command)
[    4.930521] i8042: [394] 00 -> i8042 (parameter)
[    4.935820] i8042: [399] fa <- i8042 (interrupt, 1, 12)
[    4.935844] i8042: [399] d4 -> i8042 (command)
[    4.936062] i8042: [399] e6 -> i8042 (parameter)
[    4.938416] i8042: [402] fa <- i8042 (interrupt, 1, 12)
[    4.938445] i8042: [402] d4 -> i8042 (command)
[    4.938658] i8042: [402] e6 -> i8042 (parameter)
[    4.940961] i8042: [404] fa <- i8042 (interrupt, 1, 12)
[    4.940995] i8042: [404] d4 -> i8042 (command)
[    4.941055] i8042: [404] e6 -> i8042 (parameter)
[    4.943376] i8042: [407] fa <- i8042 (interrupt, 1, 12)
[    4.943401] i8042: [407] d4 -> i8042 (command)
[    4.943511] i8042: [407] e9 -> i8042 (parameter)
[    4.945793] i8042: [409] fa <- i8042 (interrupt, 1, 12)
[    4.949106] i8042: [412] 1a <- i8042 (interrupt, 1, 12)
[    4.949167] i8042: [412] 03 <- i8042 (interrupt, 1, 12)
[    4.949232] i8042: [412] 3c <- i8042 (interrupt, 1, 12)
[    4.949246] i8042: [412] d4 -> i8042 (command)
[    4.949356] i8042: [413] e6 -> i8042 (parameter)
[    4.951637] i8042: [415] fa <- i8042 (interrupt, 1, 12)
[    4.951661] i8042: [415] d4 -> i8042 (command)
[    4.951772] i8042: [415] e8 -> i8042 (parameter)
[    4.951819] i8042: [415] fa <- i8042 (interrupt, 1, 12)
[    4.951831] i8042: [415] d4 -> i8042 (command)
[    4.951889] i8042: [415] 00 -> i8042 (parameter)
[    4.956324] i8042: [419] fa <- i8042 (interrupt, 1, 12)
[    4.956348] i8042: [419] d4 -> i8042 (command)
[    4.956458] i8042: [420] e8 -> i8042 (parameter)
[    4.956531] i8042: [420] fa <- i8042 (interrupt, 1, 12)
[    4.956544] i8042: [420] d4 -> i8042 (command)
[    4.956601] i8042: [420] 03 -> i8042 (parameter)
[    4.961156] i8042: [424] fa <- i8042 (interrupt, 1, 12)
[    4.961181] i8042: [424] d4 -> i8042 (command)
[    4.961290] i8042: [424] e8 -> i8042 (parameter)
[    4.961329] i8042: [424] fa <- i8042 (interrupt, 1, 12)
[    4.961336] i8042: [424] d4 -> i8042 (command)
[    4.961447] i8042: [425] 02 -> i8042 (parameter)
[    4.965833] i8042: [429] fa <- i8042 (interrupt, 1, 12)
[    4.965860] i8042: [429] d4 -> i8042 (command)
[    4.965970] i8042: [429] e8 -> i8042 (parameter)
[    4.966041] i8042: [429] fa <- i8042 (interrupt, 1, 12)
[    4.966049] i8042: [429] d4 -> i8042 (command)
[    4.966158] i8042: [429] 01 -> i8042 (parameter)
[    4.970663] i8042: [434] fa <- i8042 (interrupt, 1, 12)
[    4.970681] i8042: [434] d4 -> i8042 (command)
[    4.970790] i8042: [434] eb -> i8042 (parameter)
[    4.973085] i8042: [436] fa <- i8042 (interrupt, 1, 12)
[    4.976385] i8042: [440] 08 <- i8042 (interrupt, 1, 12)
[    4.976444] i8042: [440] 00 <- i8042 (interrupt, 1, 12)
[    4.976503] i8042: [440] 00 <- i8042 (interrupt, 1, 12)
[    4.976514] i8042: [440] d4 -> i8042 (command)
[    4.976624] i8042: [440] e6 -> i8042 (parameter)
[    4.978931] i8042: [442] fa <- i8042 (interrupt, 1, 12)
[    4.978945] i8042: [442] d4 -> i8042 (command)
[    4.979160] i8042: [442] e8 -> i8042 (parameter)
[    4.979241] i8042: [442] fa <- i8042 (interrupt, 1, 12)
[    4.979248] i8042: [442] d4 -> i8042 (command)
[    4.979357] i8042: [443] 03 -> i8042 (parameter)
[    4.983846] i8042: [447] fa <- i8042 (interrupt, 1, 12)
[    4.983858] i8042: [447] d4 -> i8042 (command)
[    4.983969] i8042: [447] e8 -> i8042 (parameter)
[    4.984019] i8042: [447] fa <- i8042 (interrupt, 1, 12)
[    4.984025] i8042: [447] d4 -> i8042 (command)
[    4.984135] i8042: [447] 01 -> i8042 (parameter)
[    4.988603] i8042: [452] fa <- i8042 (interrupt, 1, 12)
[    4.988617] i8042: [452] d4 -> i8042 (command)
[    4.988728] i8042: [452] e8 -> i8042 (parameter)
[    4.988777] i8042: [452] fa <- i8042 (interrupt, 1, 12)
[    4.988783] i8042: [452] d4 -> i8042 (command)
[    4.988892] i8042: [452] 02 -> i8042 (parameter)
[    4.993288] i8042: [456] fa <- i8042 (interrupt, 1, 12)
[    4.993304] i8042: [456] d4 -> i8042 (command)
[    4.993414] i8042: [457] e8 -> i8042 (parameter)
[    4.993461] i8042: [457] fa <- i8042 (interrupt, 1, 12)
[    4.993473] i8042: [457] d4 -> i8042 (command)
[    4.993531] i8042: [457] 03 -> i8042 (parameter)
[    4.998046] i8042: [461] fa <- i8042 (interrupt, 1, 12)
[    4.998060] i8042: [461] d4 -> i8042 (command)
[    4.998169] i8042: [461] eb -> i8042 (parameter)
[    5.000457] i8042: [464] fa <- i8042 (interrupt, 1, 12)
[    5.003768] i8042: [467] 08 <- i8042 (interrupt, 1, 12)
[    5.003828] i8042: [467] 00 <- i8042 (interrupt, 1, 12)
[    5.003889] i8042: [467] 00 <- i8042 (interrupt, 1, 12)
[    5.003903] i8042: [467] d4 -> i8042 (command)
[    5.004012] i8042: [467] e1 -> i8042 (parameter)
[    5.006316] i8042: [469] fe <- i8042 (interrupt, 1, 12)
[    5.006337] i8042: [470] d4 -> i8042 (command)
[    5.006446] i8042: [470] f5 -> i8042 (parameter)
[    5.008807] i8042: [472] fa <- i8042 (interrupt, 1, 12)
[    5.008820] i8042: [472] d4 -> i8042 (command)
[    5.009034] i8042: [472] f3 -> i8042 (parameter)
[    5.009120] i8042: [472] fa <- i8042 (interrupt, 1, 12)
[    5.009126] i8042: [472] d4 -> i8042 (command)
[    5.009235] i8042: [472] 66 -> i8042 (parameter)
[    5.038330] i8042: [502] d4 -> i8042 (command)
[    5.089257] i8042: [552] 88 -> i8042 (parameter)
[    5.089365] i8042: [553] fe <- i8042 (interrupt, 1, 12)
[    5.089384] i8042: [553] d4 -> i8042 (command)
[    5.089441] i8042: [553] f3 -> i8042 (parameter)
[    5.089535] i8042: [553] fa <- i8042 (interrupt, 1, 12)
[    5.089542] i8042: [553] d4 -> i8042 (command)
[    5.089651] i8042: [553] 66 -> i8042 (parameter)
[    5.119319] i8042: [583] d4 -> i8042 (command)
[    5.119378] i8042: [583] 00 -> i8042 (parameter)
[    5.119459] i8042: [583] fe <- i8042 (interrupt, 1, 12)
[    5.119466] i8042: [583] d4 -> i8042 (command)
[    5.119523] i8042: [583] e9 -> i8042 (parameter)
[    5.319231] i8042: [783] d4 -> i8042 (command)
[    5.319291] i8042: [783] f4 -> i8042 (parameter)
[    5.519170] i8042: [983] d4 -> i8042 (command)
[    5.519228] i8042: [983] f6 -> i8042 (parameter)
[    5.719091] i8042: [1183] d4 -> i8042 (command)
[    5.719152] i8042: [1183] ff -> i8042 (parameter)
[    6.718753] i8042: [2183] d4 -> i8042 (command)
[    6.718814] i8042: [2183] f3 -> i8042 (parameter)
[    6.718864] i8042: [2183] fa <- i8042 (interrupt, 1, 12)
[    6.718873] i8042: [2183] d4 -> i8042 (command)
[    6.718930] i8042: [2183] c8 -> i8042 (parameter)
[    6.918692] i8042: [2383] d4 -> i8042 (command)
[    6.918752] i8042: [2383] f3 -> i8042 (parameter)
[    6.918813] i8042: [2383] fa <- i8042 (interrupt, 1, 12)
[    6.918822] i8042: [2383] d4 -> i8042 (command)
[    6.918931] i8042: [2383] 64 -> i8042 (parameter)
[    7.118621] i8042: [2583] d4 -> i8042 (command)
[    7.118682] i8042: [2583] f3 -> i8042 (parameter)
[    7.118741] i8042: [2583] fa <- i8042 (interrupt, 1, 12)
[    7.118749] i8042: [2583] d4 -> i8042 (command)
[    7.119014] i8042: [2583] 50 -> i8042 (parameter)
[    7.318551] i8042: [2783] d4 -> i8042 (command)
[    7.318611] i8042: [2783] f2 -> i8042 (parameter)
[    7.518462] i8042: [2983] d4 -> i8042 (command)
[    7.518522] i8042: [2983] f3 -> i8042 (parameter)
[    7.518601] i8042: [2983] fa <- i8042 (interrupt, 1, 12)
[    7.518609] i8042: [2983] d4 -> i8042 (command)
[    7.518718] i8042: [2983] c8 -> i8042 (parameter)
[    7.718405] i8042: [3183] d4 -> i8042 (command)
[    7.718483] i8042: [3183] f3 -> i8042 (parameter)
[    7.718532] i8042: [3183] fa <- i8042 (interrupt, 1, 12)
[    7.718540] i8042: [3183] d4 -> i8042 (command)
[    7.718649] i8042: [3183] c8 -> i8042 (parameter)
[    7.918336] i8042: [3383] d4 -> i8042 (command)
[    7.918396] i8042: [3383] f3 -> i8042 (parameter)
[    7.918483] i8042: [3383] fa <- i8042 (interrupt, 1, 12)
[    7.918491] i8042: [3383] d4 -> i8042 (command)
[    7.918600] i8042: [3383] 50 -> i8042 (parameter)
[    8.118260] i8042: [3583] d4 -> i8042 (command)
[    8.121121] i8042: [3585] f2 -> i8042 (parameter)
[    8.320191] i8042: [3785] d4 -> i8042 (command)
[    8.320251] i8042: [3785] f3 -> i8042 (parameter)
[    8.320322] i8042: [3785] fa <- i8042 (interrupt, 1, 12)
[    8.320331] i8042: [3785] d4 -> i8042 (command)
[    8.320440] i8042: [3785] c8 -> i8042 (parameter)
[    8.520099] i8042: [3985] d4 -> i8042 (command)
[    8.520159] i8042: [3985] f3 -> i8042 (parameter)
[    8.520208] i8042: [3985] fa <- i8042 (interrupt, 1, 12)
[    8.520216] i8042: [3985] d4 -> i8042 (command)
[    8.520326] i8042: [3985] 64 -> i8042 (parameter)
[    8.720043] i8042: [4185] d4 -> i8042 (command)
[    8.720103] i8042: [4185] f3 -> i8042 (parameter)
[    8.720175] i8042: [4185] fa <- i8042 (interrupt, 1, 12)
[    8.720183] i8042: [4185] d4 -> i8042 (command)
[    8.720293] i8042: [4185] 50 -> i8042 (parameter)
[    8.919961] i8042: [4385] d4 -> i8042 (command)
[    8.920021] i8042: [4385] f2 -> i8042 (parameter)
[    9.119906] i8042: [4585] d4 -> i8042 (command)
[    9.119966] i8042: [4585] f3 -> i8042 (parameter)
[    9.120018] i8042: [4585] fa <- i8042 (interrupt, 1, 12)
[    9.120026] i8042: [4585] d4 -> i8042 (command)
[    9.120135] i8042: [4585] 64 -> i8042 (parameter)
[    9.319825] i8042: [4785] d4 -> i8042 (command)
[    9.319885] i8042: [4785] e8 -> i8042 (parameter)
[    9.319932] i8042: [4785] fa <- i8042 (interrupt, 1, 12)
[    9.319940] i8042: [4785] d4 -> i8042 (command)
[    9.320049] i8042: [4785] 03 -> i8042 (parameter)
[    9.519753] i8042: [4985] d4 -> i8042 (command)
[    9.519813] i8042: [4985] e6 -> i8042 (parameter)
[    9.719741] input: PS/2 Logitech Wheel Mouse as /devices/platform/i8042/serio1/input/input2
[    9.719879] i8042: [5185] d4 -> i8042 (command)
[    9.719937] i8042: [5185] f4 -> i8042 (parameter)
[    9.919605] i8042: [5385] f2 -> i8042 (kbd-data)
[    9.919662] i8042: [5385] fa <- i8042 (interrupt, 0, 1)
[    9.919729] i8042: [5385] ab <- i8042 (interrupt, 0, 1)
[    9.919797] i8042: [5385] 41 <- i8042 (interrupt, 0, 1)
[    9.919804] i8042: [5385] f5 -> i8042 (kbd-data)
[    9.919904] i8042: [5385] fa <- i8042 (interrupt, 0, 1)
[    9.919911] i8042: [5385] ed -> i8042 (kbd-data)
[    9.920002] i8042: [5385] fa <- i8042 (interrupt, 0, 1)
[    9.920008] i8042: [5385] 00 -> i8042 (kbd-data)
[    9.920090] i8042: [5385] fa <- i8042 (interrupt, 0, 1)
[    9.920096] i8042: [5385] f3 -> i8042 (kbd-data)
[    9.920187] i8042: [5385] fa <- i8042 (interrupt, 0, 1)
[    9.920193] i8042: [5385] 00 -> i8042 (kbd-data)
[    9.920275] i8042: [5385] fa <- i8042 (interrupt, 0, 1)
[    9.920297] i8042: [5385] f4 -> i8042 (kbd-data)
[    9.920382] i8042: [5385] fa <- i8042 (interrupt, 0, 1)
[    9.920467] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input4
[    9.920496] i8042: [5385] ed -> i8042 (kbd-data)
[    9.920548] i8042: [5385] fa <- i8042 (interrupt, 0, 1)
[    9.920565] i8042: [5386] 02 -> i8042 (kbd-data)
[    9.920633] i8042: [5386] fa <- i8042 (interrupt, 0, 1)
[   69.046947] i8042: unplug/plug mouse
[   83.058924] i8042: [78550] 08 <- i8042 (interrupt, 1, 12)
[   83.060059] i8042: [78551] 01 <- i8042 (interrupt, 1, 12)
[   83.061148] i8042: [78552] 00 <- i8042 (interrupt, 1, 12)
[   83.068677] i8042: [78560] 08 <- i8042 (interrupt, 1, 12)
[   83.069762] i8042: [78561] 01 <- i8042 (interrupt, 1, 12)
[   83.070889] i8042: [78562] 02 <- i8042 (interrupt, 1, 12)
[   83.078429] i8042: [78570] 08 <- i8042 (interrupt, 1, 12)
[   83.079556] i8042: [78571] 00 <- i8042 (interrupt, 1, 12)
[   83.080644] i8042: [78572] 02 <- i8042 (interrupt, 1, 12)
[   83.088178] i8042: [78579] 18 <- i8042 (interrupt, 1, 12)
[   83.089263] i8042: [78580] ff <- i8042 (interrupt, 1, 12)
[   83.090373] i8042: [78582] 01 <- i8042 (interrupt, 1, 12)
[   83.097938] i8042: [78589] 18 <- i8042 (interrupt, 1, 12)
[   83.099023] i8042: [78590] fc <- i8042 (interrupt, 1, 12)
[   83.100109] i8042: [78591] 03 <- i8042 (interrupt, 1, 12)
[   83.107684] i8042: [78599] 18 <- i8042 (interrupt, 1, 12)
[   83.108770] i8042: [78600] f7 <- i8042 (interrupt, 1, 12)
[   83.109856] i8042: [78601] 04 <- i8042 (interrupt, 1, 12)
[   83.117423] i8042: [78609] 18 <- i8042 (interrupt, 1, 12)
[   83.118508] i8042: [78610] f3 <- i8042 (interrupt, 1, 12)
[   83.119643] i8042: [78611] 09 <- i8042 (interrupt, 1, 12)
[   83.144059] i8042: [78635] 18 <- i8042 (interrupt, 1, 12)
[   83.144987] i8042: [78636] f6 <- i8042 (interrupt, 1, 12)
[   83.146789] i8042: [78638] 0c <- i8042 (interrupt, 1, 12)
[   83.156050] i8042: [78647] 18 <- i8042 (interrupt, 1, 12)
[   83.157136] i8042: [78648] 71 <- i8042 (interrupt, 1, 12)
[   83.158223] i8042: [78649] 1e <- i8042 (interrupt, 1, 12)
[   83.165798] i8042: [78657] 18 <- i8042 (interrupt, 1, 12)
[   83.166884] i8042: [78658] c2 <- i8042 (interrupt, 1, 12)
[   83.167970] i8042: [78659] 0b <- i8042 (interrupt, 1, 12)
[   83.175558] i8042: [78667] 18 <- i8042 (interrupt, 1, 12)
[   83.176640] i8042: [78668] bd <- i8042 (interrupt, 1, 12)
[   83.177726] i8042: [78669] 0e <- i8042 (interrupt, 1, 12)
[   83.185305] i8042: [78677] 18 <- i8042 (interrupt, 1, 12)
[   83.186391] i8042: [78678] ba <- i8042 (interrupt, 1, 12)
[   83.187476] i8042: [78679] 10 <- i8042 (interrupt, 1, 12)
[   83.195055] i8042: [78686] 18 <- i8042 (interrupt, 1, 12)
[   83.196142] i8042: [78687] b8 <- i8042 (interrupt, 1, 12)
[   83.197228] i8042: [78688] 11 <- i8042 (interrupt, 1, 12)
[   83.204795] i8042: [78696] 18 <- i8042 (interrupt, 1, 12)
[   83.205882] i8042: [78697] b4 <- i8042 (interrupt, 1, 12)
[   83.206976] i8042: [78698] 11 <- i8042 (interrupt, 1, 12)
[   83.214546] i8042: [78706] 18 <- i8042 (interrupt, 1, 12)
[   83.215628] i8042: [78707] b6 <- i8042 (interrupt, 1, 12)
[   83.216697] i8042: [78708] 12 <- i8042 (interrupt, 1, 12)
[   83.224302] i8042: [78716] 18 <- i8042 (interrupt, 1, 12)
[   83.225388] i8042: [78717] bc <- i8042 (interrupt, 1, 12)
[   83.226476] i8042: [78718] 10 <- i8042 (interrupt, 1, 12)
[   83.234051] i8042: [78725] 18 <- i8042 (interrupt, 1, 12)
[   83.235139] i8042: [78726] c2 <- i8042 (interrupt, 1, 12)
[   83.236224] i8042: [78728] 0e <- i8042 (interrupt, 1, 12)
[   83.243799] i8042: [78735] 18 <- i8042 (interrupt, 1, 12)
[   83.244885] i8042: [78736] ca <- i8042 (interrupt, 1, 12)
[   83.245972] i8042: [78737] 0c <- i8042 (interrupt, 1, 12)
[   83.253541] i8042: [78745] 18 <- i8042 (interrupt, 1, 12)
[   83.254623] i8042: [78746] d7 <- i8042 (interrupt, 1, 12)
[   83.255698] i8042: [78747] 0a <- i8042 (interrupt, 1, 12)
[   83.263268] i8042: [78755] 18 <- i8042 (interrupt, 1, 12)
[   83.264354] i8042: [78756] e4 <- i8042 (interrupt, 1, 12)
[   83.265492] i8042: [78757] 07 <- i8042 (interrupt, 1, 12)
[   83.273022] i8042: [78764] 18 <- i8042 (interrupt, 1, 12)
[   83.274107] i8042: [78765] f2 <- i8042 (interrupt, 1, 12)
[   83.275194] i8042: [78766] 04 <- i8042 (interrupt, 1, 12)
[   83.282770] i8042: [78774] 18 <- i8042 (interrupt, 1, 12)
[   83.283856] i8042: [78775] fc <- i8042 (interrupt, 1, 12)
[   83.284942] i8042: [78776] 01 <- i8042 (interrupt, 1, 12)
[   83.312012] i8042: [78803] 28 <- i8042 (interrupt, 1, 12)
[   83.313098] i8042: [78804] 00 <- i8042 (interrupt, 1, 12)
[   83.314192] i8042: [78806] fe <- i8042 (interrupt, 1, 12)
[   83.321763] i8042: [78813] 28 <- i8042 (interrupt, 1, 12)
[   83.322849] i8042: [78814] 01 <- i8042 (interrupt, 1, 12)
[   83.323936] i8042: [78815] fe <- i8042 (interrupt, 1, 12)
[   83.331511] i8042: [78823] 28 <- i8042 (interrupt, 1, 12)
[   83.332598] i8042: [78824] 00 <- i8042 (interrupt, 1, 12)
[   83.333682] i8042: [78825] fe <- i8042 (interrupt, 1, 12)
[   83.341260] i8042: [78833] 28 <- i8042 (interrupt, 1, 12)
[   83.342345] i8042: [78834] 01 <- i8042 (interrupt, 1, 12)
[   83.343431] i8042: [78835] ff <- i8042 (interrupt, 1, 12)
[   83.351009] i8042: [78842] 08 <- i8042 (interrupt, 1, 12)
[   83.352094] i8042: [78843] 01 <- i8042 (interrupt, 1, 12)
[   83.353221] i8042: [78845] 00 <- i8042 (interrupt, 1, 12)

[-- Attachment #3: sentelic-disabled.log --]
[-- Type: text/plain, Size: 41843 bytes --]

[    0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.15.0-rc5+ root=/dev/mapper/rhel-root ro rd.lvm.lv=fedora/swap rd.lvm.lv=rhel/swap rd.lvm.lv=rhel/root vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=rhel/swap rhgb quiet LANG=en_US.UTF-8 i8042.debug=1
[    0.000000] Kernel command line: BOOT_IMAGE=/vmlinuz-3.15.0-rc5+ root=/dev/mapper/rhel-root ro rd.lvm.lv=fedora/swap rd.lvm.lv=rhel/swap rd.lvm.lv=rhel/root vconsole.keymap=us crashkernel=auto vconsole.font=latarcyrheb-sun16 rd.lvm.lv=rhel/swap rhgb quiet LANG=en_US.UTF-8 i8042.debug=1
[    4.534970] i8042: PNP: PS/2 Controller [PNP0f03:PS2M] at 0x60,0x64 irq 12
[    4.534972] i8042: PNP: PS/2 controller doesn't have KBD irq; using default 1
[    4.534983] i8042: [0] d1 -> i8042 (command)
[    4.535040] i8042: [0] df -> i8042 (parameter)
[    4.535096] i8042: [0] ff -> i8042 (command)
[    4.535122] i8042: [0] 20 -> i8042 (command)
[    4.535231] i8042: [0] 65 <- i8042 (return)
[    4.535284] i8042: [0] 20 -> i8042 (command)
[    4.535342] i8042: [0] 65 <- i8042 (return)
[    4.535345] i8042: Warning: Keylock active
[    4.535348] i8042: [0] 60 -> i8042 (command)
[    4.535404] i8042: [0] 74 -> i8042 (parameter)
[    4.535464] i8042: [0] d3 -> i8042 (command)
[    4.535571] i8042: [0] 5a -> i8042 (parameter)
[    4.535631] i8042: [0] 5a <- i8042 (return)
[    4.535634] i8042: [0] a7 -> i8042 (command)
[    4.535688] i8042: [0] 20 -> i8042 (command)
[    4.535798] i8042: [0] 74 <- i8042 (return)
[    4.535801] i8042: [0] a8 -> i8042 (command)
[    4.535855] i8042: [1] 20 -> i8042 (command)
[    4.535913] i8042: [1] 54 <- i8042 (return)
[    4.535927] i8042: [1] 60 -> i8042 (command)
[    4.535983] i8042: [1] 56 -> i8042 (parameter)
[    4.536040] i8042: [1] d3 -> i8042 (command)
[    4.536148] i8042: [1] a5 -> i8042 (parameter)
[    4.536199] i8042: [1] a5 <- i8042 (aux_test_irq, aux)
[    4.536208] i8042: [1] 60 -> i8042 (command)
[    4.536265] i8042: [1] 74 -> i8042 (parameter)
[    4.536331] i8042: [1] d3 -> i8042 (command)
[    4.536439] i8042: [1] f0 -> i8042 (parameter)
[    4.536499] i8042: [1] f0 <- i8042 (return)
[    4.536502] i8042: [1] d3 -> i8042 (command)
[    4.536558] i8042: [1] 56 -> i8042 (parameter)
[    4.536618] i8042: [1] 56 <- i8042 (return)
[    4.536620] i8042: [1] d3 -> i8042 (command)
[    4.536728] i8042: [1] a4 -> i8042 (parameter)
[    4.536788] i8042: [1] a4 <- i8042 (return)
[    4.536802] i8042: [1] 60 -> i8042 (command)
[    4.536858] i8042: [2] 56 -> i8042 (parameter)
[    4.536878] i8042: [2] Interrupt 1, without any data
[    4.536935] i8042: [2] 60 -> i8042 (command)
[    4.537043] i8042: [2] 47 -> i8042 (parameter)
[    4.537046] serio: i8042 KBD port at 0x60,0x64 irq 1
[    4.537051] serio: i8042 AUX port at 0x60,0x64 irq 12
[    4.537482] i8042: [2] d4 -> i8042 (command)
[    4.537539] i8042: [2] f2 -> i8042 (parameter)
[    4.539893] i8042: [5] fa <- i8042 (interrupt, 1, 12)
[    4.541018] i8042: [6] 03 <- i8042 (interrupt, 1, 12)
[    4.541033] i8042: [6] d4 -> i8042 (command)
[    4.541090] i8042: [6] f6 -> i8042 (parameter)
[    4.543443] i8042: [8] fa <- i8042 (interrupt, 1, 12)
[    4.543460] i8042: [8] d4 -> i8042 (command)
[    4.543621] i8042: [8] f3 -> i8042 (parameter)
[    4.543702] i8042: [8] fa <- i8042 (interrupt, 1, 12)
[    4.543708] i8042: [8] d4 -> i8042 (command)
[    4.543764] i8042: [8] 0a -> i8042 (parameter)
[    4.548355] i8042: [13] fa <- i8042 (interrupt, 1, 12)
[    4.548376] i8042: [13] d4 -> i8042 (command)
[    4.548537] i8042: [13] e8 -> i8042 (parameter)
[    4.548628] i8042: [13] fa <- i8042 (interrupt, 1, 12)
[    4.548633] i8042: [13] d4 -> i8042 (command)
[    4.548741] i8042: [13] 00 -> i8042 (parameter)
[    4.553160] i8042: [18] fa <- i8042 (interrupt, 1, 12)
[    4.553174] i8042: [18] d4 -> i8042 (command)
[    4.553283] i8042: [18] f3 -> i8042 (parameter)
[    4.553335] i8042: [18] fa <- i8042 (interrupt, 1, 12)
[    4.553340] i8042: [18] d4 -> i8042 (command)
[    4.553448] i8042: [18] 14 -> i8042 (parameter)
[    4.557862] i8042: [23] fa <- i8042 (interrupt, 1, 12)
[    4.557878] i8042: [23] d4 -> i8042 (command)
[    4.557934] i8042: [23] f3 -> i8042 (parameter)
[    4.558001] i8042: [23] fa <- i8042 (interrupt, 1, 12)
[    4.558007] i8042: [23] d4 -> i8042 (command)
[    4.558115] i8042: [23] 3c -> i8042 (parameter)
[    4.562503] i8042: [27] fa <- i8042 (interrupt, 1, 12)
[    4.562515] i8042: [27] d4 -> i8042 (command)
[    4.562623] i8042: [27] f3 -> i8042 (parameter)
[    4.562677] i8042: [27] fa <- i8042 (interrupt, 1, 12)
[    4.562682] i8042: [27] d4 -> i8042 (command)
[    4.562790] i8042: [27] 28 -> i8042 (parameter)
[    4.567182] i8042: [32] fa <- i8042 (interrupt, 1, 12)
[    4.572087] i8042: [37] d4 -> i8042 (command)
[    4.572144] i8042: [37] f3 -> i8042 (parameter)
[    4.572212] i8042: [37] fa <- i8042 (interrupt, 1, 12)
[    4.572221] i8042: [37] d4 -> i8042 (command)
[    4.572278] i8042: [37] 14 -> i8042 (parameter)
[    4.576691] i8042: [41] fa <- i8042 (interrupt, 1, 12)
[    4.576700] i8042: [41] d4 -> i8042 (command)
[    4.576809] i8042: [41] f3 -> i8042 (parameter)
[    4.576875] i8042: [42] fa <- i8042 (interrupt, 1, 12)
[    4.576880] i8042: [42] d4 -> i8042 (command)
[    4.576937] i8042: [42] 14 -> i8042 (parameter)
[    4.581376] i8042: [46] fa <- i8042 (interrupt, 1, 12)
[    4.581383] i8042: [46] d4 -> i8042 (command)
[    4.581492] i8042: [46] f3 -> i8042 (parameter)
[    4.581553] i8042: [46] fa <- i8042 (interrupt, 1, 12)
[    4.581558] i8042: [46] d4 -> i8042 (command)
[    4.581667] i8042: [46] 3c -> i8042 (parameter)
[    4.586136] i8042: [51] fa <- i8042 (interrupt, 1, 12)
[    4.586152] i8042: [51] d4 -> i8042 (command)
[    4.586262] i8042: [51] f3 -> i8042 (parameter)
[    4.586314] i8042: [51] fa <- i8042 (interrupt, 1, 12)
[    4.586321] i8042: [51] d4 -> i8042 (command)
[    4.586430] i8042: [51] 28 -> i8042 (parameter)
[    4.590832] i8042: [55] fa <- i8042 (interrupt, 1, 12)
[    4.590876] i8042: [56] d4 -> i8042 (command)
[    4.591040] i8042: [56] f3 -> i8042 (parameter)
[    4.591111] i8042: [56] fa <- i8042 (interrupt, 1, 12)
[    4.591119] i8042: [56] d4 -> i8042 (command)
[    4.591228] i8042: [56] 14 -> i8042 (parameter)
[    4.595668] i8042: [60] fa <- i8042 (interrupt, 1, 12)
[    4.595693] i8042: [60] d4 -> i8042 (command)
[    4.595751] i8042: [60] f3 -> i8042 (parameter)
[    4.595822] i8042: [60] fa <- i8042 (interrupt, 1, 12)
[    4.595837] i8042: [61] d4 -> i8042 (command)
[    4.595894] i8042: [61] 14 -> i8042 (parameter)
[    4.600434] i8042: [65] fa <- i8042 (interrupt, 1, 12)
[    4.600461] i8042: [65] d4 -> i8042 (command)
[    4.600519] i8042: [65] f2 -> i8042 (parameter)
[    4.602853] i8042: [68] fa <- i8042 (interrupt, 1, 12)
[    4.603972] i8042: [69] 03 <- i8042 (interrupt, 1, 12)
[    4.604000] i8042: [69] d4 -> i8042 (command)
[    4.604110] i8042: [69] e8 -> i8042 (parameter)
[    4.604189] i8042: [69] fa <- i8042 (interrupt, 1, 12)
[    4.604196] i8042: [69] d4 -> i8042 (command)
[    4.604305] i8042: [69] 00 -> i8042 (parameter)
[    4.608860] i8042: [74] fa <- i8042 (interrupt, 1, 12)
[    4.608904] i8042: [74] d4 -> i8042 (command)
[    4.609072] i8042: [74] e8 -> i8042 (parameter)
[    4.609139] i8042: [74] fa <- i8042 (interrupt, 1, 12)
[    4.609146] i8042: [74] d4 -> i8042 (command)
[    4.609255] i8042: [74] 00 -> i8042 (parameter)
[    4.613766] i8042: [78] fa <- i8042 (interrupt, 1, 12)
[    4.613794] i8042: [78] d4 -> i8042 (command)
[    4.613852] i8042: [79] e8 -> i8042 (parameter)
[    4.613917] i8042: [79] fa <- i8042 (interrupt, 1, 12)
[    4.613924] i8042: [79] d4 -> i8042 (command)
[    4.614033] i8042: [79] 00 -> i8042 (parameter)
[    4.618451] i8042: [83] fa <- i8042 (interrupt, 1, 12)
[    4.618479] i8042: [83] d4 -> i8042 (command)
[    4.618641] i8042: [83] e8 -> i8042 (parameter)
[    4.618721] i8042: [83] fa <- i8042 (interrupt, 1, 12)
[    4.618728] i8042: [83] d4 -> i8042 (command)
[    4.618838] i8042: [84] 00 -> i8042 (parameter)
[    4.623357] i8042: [88] fa <- i8042 (interrupt, 1, 12)
[    4.623385] i8042: [88] d4 -> i8042 (command)
[    4.623444] i8042: [88] e9 -> i8042 (parameter)
[    4.625778] i8042: [90] fa <- i8042 (interrupt, 1, 12)
[    4.629080] i8042: [94] 00 <- i8042 (interrupt, 1, 12)
[    4.629126] i8042: [94] 00 <- i8042 (interrupt, 1, 12)
[    4.629187] i8042: [94] 14 <- i8042 (interrupt, 1, 12)
[    4.629196] i8042: [94] d4 -> i8042 (command)
[    4.629305] i8042: [94] e8 -> i8042 (parameter)
[    4.629366] i8042: [94] fa <- i8042 (interrupt, 1, 12)
[    4.629373] i8042: [94] d4 -> i8042 (command)
[    4.629482] i8042: [94] 00 -> i8042 (parameter)
[    4.634040] i8042: [99] fa <- i8042 (interrupt, 1, 12)
[    4.634069] i8042: [99] d4 -> i8042 (command)
[    4.634127] i8042: [99] e8 -> i8042 (parameter)
[    4.634205] i8042: [99] fa <- i8042 (interrupt, 1, 12)
[    4.634212] i8042: [99] d4 -> i8042 (command)
[    4.634321] i8042: [99] 00 -> i8042 (parameter)
[    4.638881] i8042: [104] fa <- i8042 (interrupt, 1, 12)
[    4.638909] i8042: [104] d4 -> i8042 (command)
[    4.639227] i8042: [104] e8 -> i8042 (parameter)
[    4.639300] i8042: [104] fa <- i8042 (interrupt, 1, 12)
[    4.639307] i8042: [104] d4 -> i8042 (command)
[    4.639417] i8042: [104] 00 -> i8042 (parameter)
[    4.643865] i8042: [109] fa <- i8042 (interrupt, 1, 12)
[    4.643893] i8042: [109] d4 -> i8042 (command)
[    4.643952] i8042: [109] e8 -> i8042 (parameter)
[    4.644030] i8042: [109] fa <- i8042 (interrupt, 1, 12)
[    4.644037] i8042: [109] d4 -> i8042 (command)
[    4.644146] i8042: [109] 00 -> i8042 (parameter)
[    4.648704] i8042: [113] fa <- i8042 (interrupt, 1, 12)
[    4.648732] i8042: [113] d4 -> i8042 (command)
[    4.648894] i8042: [114] e9 -> i8042 (parameter)
[    4.651272] i8042: [116] fa <- i8042 (interrupt, 1, 12)
[    4.654575] i8042: [119] 00 <- i8042 (interrupt, 1, 12)
[    4.654615] i8042: [119] 00 <- i8042 (interrupt, 1, 12)
[    4.654681] i8042: [119] 14 <- i8042 (interrupt, 1, 12)
[    4.850762] i8042: [316] d4 -> i8042 (command)
[    4.850822] i8042: [316] f6 -> i8042 (parameter)
[    4.853174] i8042: [318] fa <- i8042 (interrupt, 1, 12)
[    4.853192] i8042: [318] d4 -> i8042 (command)
[    4.853302] i8042: [318] e8 -> i8042 (parameter)
[    4.855690] i8042: [320] fa <- i8042 (interrupt, 1, 12)
[    4.855702] i8042: [320] d4 -> i8042 (command)
[    4.855811] i8042: [321] 00 -> i8042 (parameter)
[    4.869959] i8042: [335] fa <- i8042 (interrupt, 1, 12)
[    4.869987] i8042: [335] d4 -> i8042 (command)
[    4.879793] i8042: [345] e6 -> i8042 (parameter)
[    4.882914] i8042: [348] fa <- i8042 (interrupt, 1, 12)
[    4.882942] i8042: [348] d4 -> i8042 (command)
[    4.883000] i8042: [348] e6 -> i8042 (parameter)
[    4.886188] i8042: [351] fa <- i8042 (interrupt, 1, 12)
[    4.886216] i8042: [351] d4 -> i8042 (command)
[    4.887052] i8042: [352] e6 -> i8042 (parameter)
[    4.890242] i8042: [355] fa <- i8042 (interrupt, 1, 12)
[    4.890270] i8042: [355] d4 -> i8042 (command)
[    4.891106] i8042: [356] e9 -> i8042 (parameter)
[    4.893431] i8042: [358] fa <- i8042 (interrupt, 1, 12)
[    4.896860] i8042: [362] 1a <- i8042 (interrupt, 1, 12)
[    4.896913] i8042: [362] 03 <- i8042 (interrupt, 1, 12)
[    4.896978] i8042: [362] 3c <- i8042 (interrupt, 1, 12)
[    4.896988] i8042: [362] d4 -> i8042 (command)
[    4.897097] i8042: [362] f6 -> i8042 (parameter)
[    4.899419] i8042: [364] fa <- i8042 (interrupt, 1, 12)
[    4.899443] i8042: [364] d4 -> i8042 (command)
[    4.899553] i8042: [364] f5 -> i8042 (parameter)
[    4.901850] i8042: [367] fa <- i8042 (interrupt, 1, 12)
[    4.901879] i8042: [367] d4 -> i8042 (command)
[    4.901937] i8042: [367] e6 -> i8042 (parameter)
[    4.904267] i8042: [369] fa <- i8042 (interrupt, 1, 12)
[    4.904295] i8042: [369] d4 -> i8042 (command)
[    4.904353] i8042: [369] e6 -> i8042 (parameter)
[    4.906686] i8042: [371] fa <- i8042 (interrupt, 1, 12)
[    4.906715] i8042: [371] d4 -> i8042 (command)
[    4.906774] i8042: [372] e6 -> i8042 (parameter)
[    4.909083] i8042: [374] fa <- i8042 (interrupt, 1, 12)
[    4.909112] i8042: [374] d4 -> i8042 (command)
[    4.909327] i8042: [374] e9 -> i8042 (parameter)
[    4.911682] i8042: [376] fa <- i8042 (interrupt, 1, 12)
[    4.914988] i8042: [380] 1a <- i8042 (interrupt, 1, 12)
[    4.915036] i8042: [380] 03 <- i8042 (interrupt, 1, 12)
[    4.915079] i8042: [380] 3c <- i8042 (interrupt, 1, 12)
[    4.915088] i8042: [380] d4 -> i8042 (command)
[    4.915198] i8042: [380] e8 -> i8042 (parameter)
[    4.915243] i8042: [380] fa <- i8042 (interrupt, 1, 12)
[    4.915249] i8042: [380] d4 -> i8042 (command)
[    4.915358] i8042: [380] 03 -> i8042 (parameter)
[    4.919760] i8042: [385] fa <- i8042 (interrupt, 1, 12)
[    4.919773] i8042: [385] d4 -> i8042 (command)
[    4.919883] i8042: [385] e6 -> i8042 (parameter)
[    4.922200] i8042: [387] fa <- i8042 (interrupt, 1, 12)
[    4.922230] i8042: [387] d4 -> i8042 (command)
[    4.922392] i8042: [387] e6 -> i8042 (parameter)
[    4.924779] i8042: [390] fa <- i8042 (interrupt, 1, 12)
[    4.924808] i8042: [390] d4 -> i8042 (command)
[    4.924866] i8042: [390] e6 -> i8042 (parameter)
[    4.927167] i8042: [392] fa <- i8042 (interrupt, 1, 12)
[    4.927185] i8042: [392] d4 -> i8042 (command)
[    4.927295] i8042: [392] e9 -> i8042 (parameter)
[    4.929599] i8042: [394] fa <- i8042 (interrupt, 1, 12)
[    4.932898] i8042: [398] 1a <- i8042 (interrupt, 1, 12)
[    4.933044] i8042: [398] 03 <- i8042 (interrupt, 1, 12)
[    4.933137] i8042: [398] 3c <- i8042 (interrupt, 1, 12)
[    4.933146] i8042: [398] d4 -> i8042 (command)
[    4.933255] i8042: [398] e8 -> i8042 (parameter)
[    4.933302] i8042: [398] fa <- i8042 (interrupt, 1, 12)
[    4.933309] i8042: [398] d4 -> i8042 (command)
[    4.933418] i8042: [398] 00 -> i8042 (parameter)
[    4.937934] i8042: [403] fa <- i8042 (interrupt, 1, 12)
[    4.937952] i8042: [403] d4 -> i8042 (command)
[    4.938061] i8042: [403] e6 -> i8042 (parameter)
[    4.940355] i8042: [405] fa <- i8042 (interrupt, 1, 12)
[    4.941719] i8042: [407] d4 -> i8042 (command)
[    4.941778] i8042: [407] e6 -> i8042 (parameter)
[    4.944102] i8042: [409] fa <- i8042 (interrupt, 1, 12)
[    4.944146] i8042: [409] d4 -> i8042 (command)
[    4.944204] i8042: [409] e6 -> i8042 (parameter)
[    4.946507] i8042: [411] fa <- i8042 (interrupt, 1, 12)
[    4.951208] i8042: [416] d4 -> i8042 (command)
[    4.951266] i8042: [416] e9 -> i8042 (parameter)
[    4.953610] i8042: [418] fa <- i8042 (interrupt, 1, 12)
[    4.957041] i8042: [422] 1a <- i8042 (interrupt, 1, 12)
[    4.957099] i8042: [422] 03 <- i8042 (interrupt, 1, 12)
[    4.957157] i8042: [422] 3c <- i8042 (interrupt, 1, 12)
[    4.957202] i8042: [422] d4 -> i8042 (command)
[    4.957260] i8042: [422] e6 -> i8042 (parameter)
[    4.959612] i8042: [424] fa <- i8042 (interrupt, 1, 12)
[    4.959630] i8042: [424] d4 -> i8042 (command)
[    4.959740] i8042: [425] e8 -> i8042 (parameter)
[    4.959780] i8042: [425] fa <- i8042 (interrupt, 1, 12)
[    4.959791] i8042: [425] d4 -> i8042 (command)
[    4.959849] i8042: [425] 00 -> i8042 (parameter)
[    4.964367] i8042: [429] fa <- i8042 (interrupt, 1, 12)
[    4.964384] i8042: [429] d4 -> i8042 (command)
[    4.964494] i8042: [429] e8 -> i8042 (parameter)
[    4.964549] i8042: [429] fa <- i8042 (interrupt, 1, 12)
[    4.964557] i8042: [429] d4 -> i8042 (command)
[    4.964666] i8042: [429] 03 -> i8042 (parameter)
[    4.969045] i8042: [434] fa <- i8042 (interrupt, 1, 12)
[    4.969057] i8042: [434] d4 -> i8042 (command)
[    4.969271] i8042: [434] e8 -> i8042 (parameter)
[    4.969347] i8042: [434] fa <- i8042 (interrupt, 1, 12)
[    4.969355] i8042: [434] d4 -> i8042 (command)
[    4.969465] i8042: [434] 02 -> i8042 (parameter)
[    4.973873] i8042: [439] fa <- i8042 (interrupt, 1, 12)
[    4.973888] i8042: [439] d4 -> i8042 (command)
[    4.973998] i8042: [439] e8 -> i8042 (parameter)
[    4.974047] i8042: [439] fa <- i8042 (interrupt, 1, 12)
[    4.974053] i8042: [439] d4 -> i8042 (command)
[    4.974162] i8042: [439] 01 -> i8042 (parameter)
[    4.978559] i8042: [443] fa <- i8042 (interrupt, 1, 12)
[    4.978575] i8042: [443] d4 -> i8042 (command)
[    4.978684] i8042: [443] eb -> i8042 (parameter)
[    4.980975] i8042: [446] fa <- i8042 (interrupt, 1, 12)
[    4.984279] i8042: [449] 08 <- i8042 (interrupt, 1, 12)
[    4.984339] i8042: [449] 00 <- i8042 (interrupt, 1, 12)
[    4.984407] i8042: [449] 00 <- i8042 (interrupt, 1, 12)
[    4.984422] i8042: [449] d4 -> i8042 (command)
[    4.984479] i8042: [449] e6 -> i8042 (parameter)
[    4.986815] i8042: [452] fa <- i8042 (interrupt, 1, 12)
[    4.986829] i8042: [452] d4 -> i8042 (command)
[    4.986939] i8042: [452] e8 -> i8042 (parameter)
[    4.986988] i8042: [452] fa <- i8042 (interrupt, 1, 12)
[    4.986994] i8042: [452] d4 -> i8042 (command)
[    4.987103] i8042: [452] 03 -> i8042 (parameter)
[    4.991497] i8042: [456] fa <- i8042 (interrupt, 1, 12)
[    4.991510] i8042: [456] d4 -> i8042 (command)
[    4.991620] i8042: [456] e8 -> i8042 (parameter)
[    4.991670] i8042: [456] fa <- i8042 (interrupt, 1, 12)
[    4.991676] i8042: [456] d4 -> i8042 (command)
[    4.991785] i8042: [457] 01 -> i8042 (parameter)
[    4.996175] i8042: [461] fa <- i8042 (interrupt, 1, 12)
[    4.996188] i8042: [461] d4 -> i8042 (command)
[    4.996403] i8042: [461] e8 -> i8042 (parameter)
[    4.996486] i8042: [461] fa <- i8042 (interrupt, 1, 12)
[    4.996493] i8042: [461] d4 -> i8042 (command)
[    4.996602] i8042: [461] 02 -> i8042 (parameter)
[    5.001097] i8042: [466] fa <- i8042 (interrupt, 1, 12)
[    5.001110] i8042: [466] d4 -> i8042 (command)
[    5.001220] i8042: [466] e8 -> i8042 (parameter)
[    5.001280] i8042: [466] fa <- i8042 (interrupt, 1, 12)
[    5.001287] i8042: [466] d4 -> i8042 (command)
[    5.001396] i8042: [466] 03 -> i8042 (parameter)
[    5.005855] i8042: [471] fa <- i8042 (interrupt, 1, 12)
[    5.005871] i8042: [471] d4 -> i8042 (command)
[    5.005982] i8042: [471] eb -> i8042 (parameter)
[    5.008276] i8042: [473] fa <- i8042 (interrupt, 1, 12)
[    5.011579] i8042: [476] 08 <- i8042 (interrupt, 1, 12)
[    5.011639] i8042: [476] 00 <- i8042 (interrupt, 1, 12)
[    5.011705] i8042: [477] 00 <- i8042 (interrupt, 1, 12)
[    5.011719] i8042: [477] d4 -> i8042 (command)
[    5.011828] i8042: [477] e1 -> i8042 (parameter)
[    5.014123] i8042: [479] fe <- i8042 (interrupt, 1, 12)
[    5.014138] i8042: [479] d4 -> i8042 (command)
[    5.014248] i8042: [479] f6 -> i8042 (parameter)
[    5.016532] i8042: [481] fa <- i8042 (interrupt, 1, 12)
[    5.016545] i8042: [481] d4 -> i8042 (command)
[    5.016656] i8042: [481] ff -> i8042 (parameter)
[    5.018957] i8042: [484] fa <- i8042 (interrupt, 1, 12)
[    5.411767] i8042: [877] aa <- i8042 (interrupt, 1, 12)
[    5.411911] i8042: [877] 00 <- i8042 (interrupt, 1, 12)
[    5.411927] i8042: [877] d4 -> i8042 (command)
[    5.412193] i8042: [877] f3 -> i8042 (parameter)
[    5.412567] i8042: [878] fa <- i8042 (interrupt, 1, 12)
[    5.412712] i8042: [878] d4 -> i8042 (command)
[    5.412771] i8042: [878] c8 -> i8042 (parameter)
[    5.417209] i8042: [882] fa <- i8042 (interrupt, 1, 12)
[    5.417238] i8042: [882] d4 -> i8042 (command)
[    5.417296] i8042: [882] f3 -> i8042 (parameter)
[    5.417383] i8042: [882] fa <- i8042 (interrupt, 1, 12)
[    5.417390] i8042: [882] d4 -> i8042 (command)
[    5.417499] i8042: [882] 64 -> i8042 (parameter)
[    5.422050] i8042: [887] fa <- i8042 (interrupt, 1, 12)
[    5.422080] i8042: [887] d4 -> i8042 (command)
[    5.422242] i8042: [887] f3 -> i8042 (parameter)
[    5.422351] i8042: [887] fa <- i8042 (interrupt, 1, 12)
[    5.422358] i8042: [887] d4 -> i8042 (command)
[    5.422467] i8042: [887] 50 -> i8042 (parameter)
[    5.426961] i8042: [892] fa <- i8042 (interrupt, 1, 12)
[    5.426991] i8042: [892] d4 -> i8042 (command)
[    5.427049] i8042: [892] f2 -> i8042 (parameter)
[    5.429456] i8042: [894] fa <- i8042 (interrupt, 1, 12)
[    5.430702] i8042: [896] 03 <- i8042 (interrupt, 1, 12)
[    5.430730] i8042: [896] d4 -> i8042 (command)
[    5.430840] i8042: [896] f3 -> i8042 (parameter)
[    5.430881] i8042: [896] fa <- i8042 (interrupt, 1, 12)
[    5.430888] i8042: [896] d4 -> i8042 (command)
[    5.430998] i8042: [896] c8 -> i8042 (parameter)
[    5.435538] i8042: [901] fa <- i8042 (interrupt, 1, 12)
[    5.435567] i8042: [901] d4 -> i8042 (command)
[    5.435625] i8042: [901] f3 -> i8042 (parameter)
[    5.435692] i8042: [901] fa <- i8042 (interrupt, 1, 12)
[    5.435699] i8042: [901] d4 -> i8042 (command)
[    5.435808] i8042: [901] c8 -> i8042 (parameter)
[    5.440293] i8042: [905] fa <- i8042 (interrupt, 1, 12)
[    5.440322] i8042: [905] d4 -> i8042 (command)
[    5.440380] i8042: [905] f3 -> i8042 (parameter)
[    5.440448] i8042: [905] fa <- i8042 (interrupt, 1, 12)
[    5.440455] i8042: [905] d4 -> i8042 (command)
[    5.440564] i8042: [906] 50 -> i8042 (parameter)
[    5.444968] i8042: [910] fa <- i8042 (interrupt, 1, 12)
[    5.444996] i8042: [910] d4 -> i8042 (command)
[    5.445054] i8042: [910] f2 -> i8042 (parameter)
[    5.447393] i8042: [912] fa <- i8042 (interrupt, 1, 12)
[    5.448487] i8042: [913] 03 <- i8042 (interrupt, 1, 12)
[    5.448508] i8042: [913] d4 -> i8042 (command)
[    5.448566] i8042: [914] f3 -> i8042 (parameter)
[    5.448652] i8042: [914] fa <- i8042 (interrupt, 1, 12)
[    5.448673] i8042: [914] d4 -> i8042 (command)
[    5.448730] i8042: [914] c8 -> i8042 (parameter)
[    5.453294] i8042: [918] fa <- i8042 (interrupt, 1, 12)
[    5.453314] i8042: [918] d4 -> i8042 (command)
[    5.453528] i8042: [919] f3 -> i8042 (parameter)
[    5.453597] i8042: [919] fa <- i8042 (interrupt, 1, 12)
[    5.453609] i8042: [919] d4 -> i8042 (command)
[    5.453668] i8042: [919] 64 -> i8042 (parameter)
[    5.458206] i8042: [923] fa <- i8042 (interrupt, 1, 12)
[    5.458217] i8042: [923] d4 -> i8042 (command)
[    5.458326] i8042: [923] f3 -> i8042 (parameter)
[    5.458383] i8042: [923] fa <- i8042 (interrupt, 1, 12)
[    5.458389] i8042: [923] d4 -> i8042 (command)
[    5.458499] i8042: [923] 50 -> i8042 (parameter)
[    5.462881] i8042: [928] fa <- i8042 (interrupt, 1, 12)
[    5.462901] i8042: [928] d4 -> i8042 (command)
[    5.463010] i8042: [928] f2 -> i8042 (parameter)
[    5.465298] i8042: [930] fa <- i8042 (interrupt, 1, 12)
[    5.466566] i8042: [932] 03 <- i8042 (interrupt, 1, 12)
[    5.466586] i8042: [932] d4 -> i8042 (command)
[    5.466643] i8042: [932] f3 -> i8042 (parameter)
[    5.466709] i8042: [932] fa <- i8042 (interrupt, 1, 12)
[    5.466716] i8042: [932] d4 -> i8042 (command)
[    5.466825] i8042: [932] 64 -> i8042 (parameter)
[    5.471314] i8042: [936] fa <- i8042 (interrupt, 1, 12)
[    5.471330] i8042: [936] d4 -> i8042 (command)
[    5.471439] i8042: [936] e8 -> i8042 (parameter)
[    5.471486] i8042: [936] fa <- i8042 (interrupt, 1, 12)
[    5.471492] i8042: [936] d4 -> i8042 (command)
[    5.471602] i8042: [937] 03 -> i8042 (parameter)
[    5.476072] i8042: [941] fa <- i8042 (interrupt, 1, 12)
[    5.476083] i8042: [941] d4 -> i8042 (command)
[    5.476192] i8042: [941] e6 -> i8042 (parameter)
[    5.478496] i8042: [943] fa <- i8042 (interrupt, 1, 12)
[    5.478588] input: ImPS/2 Logitech Wheel Mouse as /devices/platform/i8042/serio1/input/input2
[    5.478746] i8042: [944] d4 -> i8042 (command)
[    5.478804] i8042: [944] f4 -> i8042 (parameter)
[    5.481152] i8042: [946] fa <- i8042 (interrupt, 1, 12)
[    5.481187] i8042: [946] f2 -> i8042 (kbd-data)
[    5.481266] i8042: [946] fa <- i8042 (interrupt, 0, 1)
[    5.481333] i8042: [946] ab <- i8042 (interrupt, 0, 1)
[    5.481402] i8042: [946] 41 <- i8042 (interrupt, 0, 1)
[    5.481409] i8042: [946] f5 -> i8042 (kbd-data)
[    5.481509] i8042: [947] fa <- i8042 (interrupt, 0, 1)
[    5.481525] i8042: [947] ed -> i8042 (kbd-data)
[    5.481607] i8042: [947] fa <- i8042 (interrupt, 0, 1)
[    5.481613] i8042: [947] 00 -> i8042 (kbd-data)
[    5.481695] i8042: [947] fa <- i8042 (interrupt, 0, 1)
[    5.481702] i8042: [947] f3 -> i8042 (kbd-data)
[    5.481801] i8042: [947] fa <- i8042 (interrupt, 0, 1)
[    5.481807] i8042: [947] 00 -> i8042 (kbd-data)
[    5.481889] i8042: [947] fa <- i8042 (interrupt, 0, 1)
[    5.481918] i8042: [947] f4 -> i8042 (kbd-data)
[    5.481996] i8042: [947] fa <- i8042 (interrupt, 0, 1)
[    5.482069] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input3
[    5.482095] i8042: [947] ed -> i8042 (kbd-data)
[    5.482152] i8042: [947] fa <- i8042 (interrupt, 0, 1)
[    5.482176] i8042: [947] 02 -> i8042 (kbd-data)
[    5.482239] i8042: [947] fa <- i8042 (interrupt, 0, 1)
[   73.720606] i8042: [69210] 08 <- i8042 (interrupt, 1, 12)
[   73.721701] i8042: [69211] 01 <- i8042 (interrupt, 1, 12)
[   73.722790] i8042: [69212] 00 <- i8042 (interrupt, 1, 12)
[   73.723877] i8042: [69213] 00 <- i8042 (interrupt, 1, 12)
[   73.730359] i8042: [69220] 08 <- i8042 (interrupt, 1, 12)
[   73.731446] i8042: [69221] 03 <- i8042 (interrupt, 1, 12)
[   73.732535] i8042: [69222] 02 <- i8042 (interrupt, 1, 12)
[   73.733622] i8042: [69223] 00 <- i8042 (interrupt, 1, 12)
[   73.740111] i8042: [69230] 08 <- i8042 (interrupt, 1, 12)
[   73.741198] i8042: [69231] 0a <- i8042 (interrupt, 1, 12)
[   73.742285] i8042: [69232] 04 <- i8042 (interrupt, 1, 12)
[   73.743371] i8042: [69233] 00 <- i8042 (interrupt, 1, 12)
[   73.749859] i8042: [69239] 08 <- i8042 (interrupt, 1, 12)
[   73.750945] i8042: [69240] 0f <- i8042 (interrupt, 1, 12)
[   73.752032] i8042: [69242] 03 <- i8042 (interrupt, 1, 12)
[   73.753250] i8042: [69243] 00 <- i8042 (interrupt, 1, 12)
[   73.759617] i8042: [69249] 08 <- i8042 (interrupt, 1, 12)
[   73.760705] i8042: [69250] 16 <- i8042 (interrupt, 1, 12)
[   73.761794] i8042: [69251] 01 <- i8042 (interrupt, 1, 12)
[   73.762881] i8042: [69252] 00 <- i8042 (interrupt, 1, 12)
[   73.769364] i8042: [69259] 08 <- i8042 (interrupt, 1, 12)
[   73.770458] i8042: [69260] 1a <- i8042 (interrupt, 1, 12)
[   73.771544] i8042: [69261] 00 <- i8042 (interrupt, 1, 12)
[   73.772630] i8042: [69262] 00 <- i8042 (interrupt, 1, 12)
[   73.779109] i8042: [69269] 28 <- i8042 (interrupt, 1, 12)
[   73.780196] i8042: [69270] 1e <- i8042 (interrupt, 1, 12)
[   73.781281] i8042: [69271] ff <- i8042 (interrupt, 1, 12)
[   73.782376] i8042: [69272] 00 <- i8042 (interrupt, 1, 12)
[   73.788854] i8042: [69278] 28 <- i8042 (interrupt, 1, 12)
[   73.789938] i8042: [69279] 1f <- i8042 (interrupt, 1, 12)
[   73.791026] i8042: [69281] fe <- i8042 (interrupt, 1, 12)
[   73.792112] i8042: [69282] 00 <- i8042 (interrupt, 1, 12)
[   73.798599] i8042: [69288] 28 <- i8042 (interrupt, 1, 12)
[   73.799683] i8042: [69289] 22 <- i8042 (interrupt, 1, 12)
[   73.800769] i8042: [69290] fc <- i8042 (interrupt, 1, 12)
[   73.801855] i8042: [69291] 00 <- i8042 (interrupt, 1, 12)
[   73.808344] i8042: [69298] 28 <- i8042 (interrupt, 1, 12)
[   73.809429] i8042: [69299] 22 <- i8042 (interrupt, 1, 12)
[   73.810516] i8042: [69300] fa <- i8042 (interrupt, 1, 12)
[   73.811601] i8042: [69301] 00 <- i8042 (interrupt, 1, 12)
[   73.818088] i8042: [69308] 28 <- i8042 (interrupt, 1, 12)
[   73.819174] i8042: [69309] 23 <- i8042 (interrupt, 1, 12)
[   73.820244] i8042: [69310] fa <- i8042 (interrupt, 1, 12)
[   73.821351] i8042: [69311] 00 <- i8042 (interrupt, 1, 12)
[   73.827831] i8042: [69317] 28 <- i8042 (interrupt, 1, 12)
[   73.828918] i8042: [69318] 22 <- i8042 (interrupt, 1, 12)
[   73.830015] i8042: [69320] f9 <- i8042 (interrupt, 1, 12)
[   73.831100] i8042: [69321] 00 <- i8042 (interrupt, 1, 12)
[   73.837617] i8042: [69327] 28 <- i8042 (interrupt, 1, 12)
[   73.838671] i8042: [69328] 20 <- i8042 (interrupt, 1, 12)
[   73.839755] i8042: [69329] f7 <- i8042 (interrupt, 1, 12)
[   73.840840] i8042: [69330] 00 <- i8042 (interrupt, 1, 12)
[   73.847329] i8042: [69337] 28 <- i8042 (interrupt, 1, 12)
[   73.848416] i8042: [69338] 19 <- i8042 (interrupt, 1, 12)
[   73.849502] i8042: [69339] f7 <- i8042 (interrupt, 1, 12)
[   73.850587] i8042: [69340] 00 <- i8042 (interrupt, 1, 12)
[   73.857083] i8042: [69347] 28 <- i8042 (interrupt, 1, 12)
[   73.858164] i8042: [69348] 11 <- i8042 (interrupt, 1, 12)
[   73.859251] i8042: [69349] f8 <- i8042 (interrupt, 1, 12)
[   73.860336] i8042: [69350] 00 <- i8042 (interrupt, 1, 12)
[   73.866825] i8042: [69356] 28 <- i8042 (interrupt, 1, 12)
[   73.867909] i8042: [69357] 08 <- i8042 (interrupt, 1, 12)
[   73.868997] i8042: [69359] fc <- i8042 (interrupt, 1, 12)
[   73.870083] i8042: [69360] 00 <- i8042 (interrupt, 1, 12)
[   73.876573] i8042: [69366] 28 <- i8042 (interrupt, 1, 12)
[   73.877668] i8042: [69367] 01 <- i8042 (interrupt, 1, 12)
[   73.878754] i8042: [69368] ff <- i8042 (interrupt, 1, 12)
[   73.879839] i8042: [69369] 00 <- i8042 (interrupt, 1, 12)
[   73.915575] i8042: [69405] 18 <- i8042 (interrupt, 1, 12)
[   73.916661] i8042: [69406] ff <- i8042 (interrupt, 1, 12)
[   73.917748] i8042: [69407] 00 <- i8042 (interrupt, 1, 12)
[   73.918833] i8042: [69408] 00 <- i8042 (interrupt, 1, 12)
[   73.925327] i8042: [69415] 18 <- i8042 (interrupt, 1, 12)
[   73.926414] i8042: [69416] fc <- i8042 (interrupt, 1, 12)
[   73.927500] i8042: [69417] 02 <- i8042 (interrupt, 1, 12)
[   73.928586] i8042: [69418] 00 <- i8042 (interrupt, 1, 12)
[   73.935070] i8042: [69425] 18 <- i8042 (interrupt, 1, 12)
[   73.936185] i8042: [69426] f9 <- i8042 (interrupt, 1, 12)
[   73.937251] i8042: [69427] 03 <- i8042 (interrupt, 1, 12)
[   73.938338] i8042: [69428] 00 <- i8042 (interrupt, 1, 12)
[   73.944779] i8042: [69434] 18 <- i8042 (interrupt, 1, 12)
[   73.945908] i8042: [69436] f5 <- i8042 (interrupt, 1, 12)
[   73.946995] i8042: [69437] 05 <- i8042 (interrupt, 1, 12)
[   73.948081] i8042: [69438] 00 <- i8042 (interrupt, 1, 12)
[   73.954529] i8042: [69444] 18 <- i8042 (interrupt, 1, 12)
[   73.955659] i8042: [69445] ef <- i8042 (interrupt, 1, 12)
[   73.956747] i8042: [69446] 07 <- i8042 (interrupt, 1, 12)
[   73.957832] i8042: [69447] 00 <- i8042 (interrupt, 1, 12)
[   73.964281] i8042: [69454] 18 <- i8042 (interrupt, 1, 12)
[   73.965409] i8042: [69455] e8 <- i8042 (interrupt, 1, 12)
[   73.966495] i8042: [69456] 0a <- i8042 (interrupt, 1, 12)
[   73.967581] i8042: [69457] 00 <- i8042 (interrupt, 1, 12)
[   73.974029] i8042: [69464] 18 <- i8042 (interrupt, 1, 12)
[   73.975156] i8042: [69465] e7 <- i8042 (interrupt, 1, 12)
[   73.976243] i8042: [69466] 0b <- i8042 (interrupt, 1, 12)
[   73.977329] i8042: [69467] 00 <- i8042 (interrupt, 1, 12)
[   73.983808] i8042: [69473] 18 <- i8042 (interrupt, 1, 12)
[   73.984903] i8042: [69475] e3 <- i8042 (interrupt, 1, 12)
[   73.985989] i8042: [69476] 0d <- i8042 (interrupt, 1, 12)
[   73.987075] i8042: [69477] 00 <- i8042 (interrupt, 1, 12)
[   73.993555] i8042: [69483] 18 <- i8042 (interrupt, 1, 12)
[   73.994642] i8042: [69484] e0 <- i8042 (interrupt, 1, 12)
[   73.995727] i8042: [69485] 12 <- i8042 (interrupt, 1, 12)
[   73.996913] i8042: [69487] 00 <- i8042 (interrupt, 1, 12)
[   74.003309] i8042: [69493] 18 <- i8042 (interrupt, 1, 12)
[   74.004399] i8042: [69494] df <- i8042 (interrupt, 1, 12)
[   74.005483] i8042: [69495] 13 <- i8042 (interrupt, 1, 12)
[   74.006572] i8042: [69496] 00 <- i8042 (interrupt, 1, 12)
[   74.013058] i8042: [69503] 18 <- i8042 (interrupt, 1, 12)
[   74.014144] i8042: [69504] e0 <- i8042 (interrupt, 1, 12)
[   74.015230] i8042: [69505] 14 <- i8042 (interrupt, 1, 12)
[   74.016315] i8042: [69506] 00 <- i8042 (interrupt, 1, 12)
[   74.022807] i8042: [69512] 18 <- i8042 (interrupt, 1, 12)
[   74.023894] i8042: [69514] e3 <- i8042 (interrupt, 1, 12)
[   74.024981] i8042: [69515] 11 <- i8042 (interrupt, 1, 12)
[   74.026067] i8042: [69516] 00 <- i8042 (interrupt, 1, 12)
[   74.032554] i8042: [69522] 18 <- i8042 (interrupt, 1, 12)
[   74.033640] i8042: [69523] e8 <- i8042 (interrupt, 1, 12)
[   74.034746] i8042: [69524] 0e <- i8042 (interrupt, 1, 12)
[   74.035815] i8042: [69525] 00 <- i8042 (interrupt, 1, 12)
[   74.042295] i8042: [69532] 18 <- i8042 (interrupt, 1, 12)
[   74.043382] i8042: [69533] f0 <- i8042 (interrupt, 1, 12)
[   74.044477] i8042: [69534] 0c <- i8042 (interrupt, 1, 12)
[   74.045563] i8042: [69535] 00 <- i8042 (interrupt, 1, 12)
[   74.052042] i8042: [69542] 18 <- i8042 (interrupt, 1, 12)
[   74.053128] i8042: [69543] f6 <- i8042 (interrupt, 1, 12)
[   74.054215] i8042: [69544] 08 <- i8042 (interrupt, 1, 12)
[   74.055299] i8042: [69545] 00 <- i8042 (interrupt, 1, 12)
[   74.061794] i8042: [69551] 18 <- i8042 (interrupt, 1, 12)
[   74.062879] i8042: [69553] fb <- i8042 (interrupt, 1, 12)
[   74.064094] i8042: [69554] 05 <- i8042 (interrupt, 1, 12)
[   74.065222] i8042: [69555] 00 <- i8042 (interrupt, 1, 12)
[   74.071502] i8042: [69561] 18 <- i8042 (interrupt, 1, 12)
[   74.072631] i8042: [69562] ff <- i8042 (interrupt, 1, 12)
[   74.073716] i8042: [69563] 01 <- i8042 (interrupt, 1, 12)
[   74.074800] i8042: [69564] 00 <- i8042 (interrupt, 1, 12)
[   74.091033] i8042: [69581] 08 <- i8042 (interrupt, 1, 12)
[   74.092127] i8042: [69582] 02 <- i8042 (interrupt, 1, 12)
[   74.093214] i8042: [69583] 00 <- i8042 (interrupt, 1, 12)
[   74.094300] i8042: [69584] 00 <- i8042 (interrupt, 1, 12)
[   74.100780] i8042: [69590] 28 <- i8042 (interrupt, 1, 12)
[   74.101867] i8042: [69592] 01 <- i8042 (interrupt, 1, 12)
[   74.102952] i8042: [69593] ff <- i8042 (interrupt, 1, 12)
[   74.104048] i8042: [69594] 00 <- i8042 (interrupt, 1, 12)
[   74.110526] i8042: [69600] 08 <- i8042 (interrupt, 1, 12)
[   74.111613] i8042: [69601] 01 <- i8042 (interrupt, 1, 12)
[   74.112698] i8042: [69602] 00 <- i8042 (interrupt, 1, 12)
[   74.113783] i8042: [69603] 00 <- i8042 (interrupt, 1, 12)
[   74.120274] i8042: [69610] 28 <- i8042 (interrupt, 1, 12)
[   74.121361] i8042: [69611] 00 <- i8042 (interrupt, 1, 12)
[   74.122450] i8042: [69612] ff <- i8042 (interrupt, 1, 12)
[   74.123537] i8042: [69613] 00 <- i8042 (interrupt, 1, 12)
[   74.130030] i8042: [69620] 08 <- i8042 (interrupt, 1, 12)
[   74.131116] i8042: [69621] 01 <- i8042 (interrupt, 1, 12)
[   74.132203] i8042: [69622] 00 <- i8042 (interrupt, 1, 12)
[   74.134763] i8042: [69624] 00 <- i8042 (interrupt, 1, 12)
[   82.093040] i8042: unplug/plug mouse
[   89.224205] i8042: [84719] 08 <- i8042 (interrupt, 1, 12)
[   89.225096] i8042: [84720] 01 <- i8042 (interrupt, 1, 12)
[   89.226897] i8042: [84722] 00 <- i8042 (interrupt, 1, 12)
[   89.236117] i8042: [84731] 28 <- i8042 (interrupt, 1, 12)
[   89.237244] i8042: [84732] 09 <- i8042 (interrupt, 1, 12)
[   89.238330] i8042: [84733] fb <- i8042 (interrupt, 1, 12)
[   89.245869] i8042: [84741] 28 <- i8042 (interrupt, 1, 12)
[   89.246997] i8042: [84742] 10 <- i8042 (interrupt, 1, 12)
[   89.248083] i8042: [84743] f7 <- i8042 (interrupt, 1, 12)
[   89.255660] i8042: [84751] 28 <- i8042 (interrupt, 1, 12)
[   89.256745] i8042: [84752] 18 <- i8042 (interrupt, 1, 12)
[   89.257833] i8042: [84753] f1 <- i8042 (interrupt, 1, 12)
[   89.265408] i8042: [84761] 28 <- i8042 (interrupt, 1, 12)
[   89.266495] i8042: [84762] 1e <- i8042 (interrupt, 1, 12)
[   89.267585] i8042: [84763] e8 <- i8042 (interrupt, 1, 12)
[   89.275152] i8042: [84770] 28 <- i8042 (interrupt, 1, 12)
[   89.276247] i8042: [84771] 21 <- i8042 (interrupt, 1, 12)
[   89.277332] i8042: [84772] e1 <- i8042 (interrupt, 1, 12)
[   89.284865] i8042: [84780] 28 <- i8042 (interrupt, 1, 12)
[   89.285950] i8042: [84781] 1d <- i8042 (interrupt, 1, 12)
[   89.287078] i8042: [84782] de <- i8042 (interrupt, 1, 12)
[   89.294613] i8042: [84790] 28 <- i8042 (interrupt, 1, 12)
[   89.295741] i8042: [84791] 13 <- i8042 (interrupt, 1, 12)
[   89.296827] i8042: [84792] de <- i8042 (interrupt, 1, 12)
[   89.304362] i8042: [84799] 28 <- i8042 (interrupt, 1, 12)
[   89.305490] i8042: [84801] 0f <- i8042 (interrupt, 1, 12)
[   89.306576] i8042: [84802] dd <- i8042 (interrupt, 1, 12)
[   89.314115] i8042: [84809] 28 <- i8042 (interrupt, 1, 12)
[   89.315242] i8042: [84810] 0c <- i8042 (interrupt, 1, 12)
[   89.316327] i8042: [84811] db <- i8042 (interrupt, 1, 12)
[   89.323905] i8042: [84819] 28 <- i8042 (interrupt, 1, 12)
[   89.324992] i8042: [84820] 08 <- i8042 (interrupt, 1, 12)
[   89.326078] i8042: [84821] db <- i8042 (interrupt, 1, 12)
[   89.333646] i8042: [84829] 28 <- i8042 (interrupt, 1, 12)
[   89.334732] i8042: [84830] 05 <- i8042 (interrupt, 1, 12)
[   89.335828] i8042: [84831] db <- i8042 (interrupt, 1, 12)
[   89.343361] i8042: [84838] 28 <- i8042 (interrupt, 1, 12)
[   89.344490] i8042: [84840] 02 <- i8042 (interrupt, 1, 12)
[   89.345577] i8042: [84841] dc <- i8042 (interrupt, 1, 12)
[   89.353111] i8042: [84848] 28 <- i8042 (interrupt, 1, 12)
[   89.354197] i8042: [84849] 00 <- i8042 (interrupt, 1, 12)
[   89.355324] i8042: [84850] df <- i8042 (interrupt, 1, 12)
[   89.362861] i8042: [84858] 38 <- i8042 (interrupt, 1, 12)
[   89.363947] i8042: [84859] ff <- i8042 (interrupt, 1, 12)
[   89.365075] i8042: [84860] e2 <- i8042 (interrupt, 1, 12)
[   89.372622] i8042: [84868] 38 <- i8042 (interrupt, 1, 12)
[   89.373708] i8042: [84869] fd <- i8042 (interrupt, 1, 12)
[   89.374793] i8042: [84870] e7 <- i8042 (interrupt, 1, 12)
[   89.382361] i8042: [84877] 38 <- i8042 (interrupt, 1, 12)
[   89.383447] i8042: [84879] fa <- i8042 (interrupt, 1, 12)
[   89.384544] i8042: [84880] eb <- i8042 (interrupt, 1, 12)
[   89.392109] i8042: [84887] 38 <- i8042 (interrupt, 1, 12)
[   89.393195] i8042: [84888] f8 <- i8042 (interrupt, 1, 12)
[   89.394279] i8042: [84889] f2 <- i8042 (interrupt, 1, 12)
[   89.401861] i8042: [84897] 38 <- i8042 (interrupt, 1, 12)
[   89.402947] i8042: [84898] f7 <- i8042 (interrupt, 1, 12)
[   89.404033] i8042: [84899] f6 <- i8042 (interrupt, 1, 12)
[   89.411610] i8042: [84907] 38 <- i8042 (interrupt, 1, 12)
[   89.412711] i8042: [84908] f8 <- i8042 (interrupt, 1, 12)
[   89.413798] i8042: [84909] fa <- i8042 (interrupt, 1, 12)
[   89.421377] i8042: [84917] 38 <- i8042 (interrupt, 1, 12)
[   89.422458] i8042: [84918] f8 <- i8042 (interrupt, 1, 12)
[   89.423545] i8042: [84919] fd <- i8042 (interrupt, 1, 12)
[   89.431114] i8042: [84926] 38 <- i8042 (interrupt, 1, 12)
[   89.432208] i8042: [84927] f6 <- i8042 (interrupt, 1, 12)
[   89.433292] i8042: [84928] ff <- i8042 (interrupt, 1, 12)
[   89.440865] i8042: [84936] 18 <- i8042 (interrupt, 1, 12)
[   89.441952] i8042: [84937] f1 <- i8042 (interrupt, 1, 12)
[   89.443046] i8042: [84938] 00 <- i8042 (interrupt, 1, 12)
[   89.450613] i8042: [84946] 18 <- i8042 (interrupt, 1, 12)
[   89.451699] i8042: [84947] ea <- i8042 (interrupt, 1, 12)
[   89.452785] i8042: [84948] 05 <- i8042 (interrupt, 1, 12)
[   89.460366] i8042: [84956] 18 <- i8042 (interrupt, 1, 12)
[   89.461452] i8042: [84957] e5 <- i8042 (interrupt, 1, 12)
[   89.462539] i8042: [84958] 0a <- i8042 (interrupt, 1, 12)
[   89.470119] i8042: [84965] 18 <- i8042 (interrupt, 1, 12)
[   89.471205] i8042: [84966] df <- i8042 (interrupt, 1, 12)
[   89.472290] i8042: [84967] 10 <- i8042 (interrupt, 1, 12)
[   89.479868] i8042: [84975] 18 <- i8042 (interrupt, 1, 12)
[   89.480955] i8042: [84976] e0 <- i8042 (interrupt, 1, 12)
[   89.482040] i8042: [84977] 14 <- i8042 (interrupt, 1, 12)
[   89.489608] i8042: [84985] 18 <- i8042 (interrupt, 1, 12)
[   89.490694] i8042: [84986] e4 <- i8042 (interrupt, 1, 12)
[   89.491789] i8042: [84987] 16 <- i8042 (interrupt, 1, 12)
[   89.499368] i8042: [84995] 18 <- i8042 (interrupt, 1, 12)
[   89.500454] i8042: [84996] ec <- i8042 (interrupt, 1, 12)
[   89.501541] i8042: [84997] 18 <- i8042 (interrupt, 1, 12)
[   89.509116] i8042: [85004] 18 <- i8042 (interrupt, 1, 12)
[   89.510201] i8042: [85005] f4 <- i8042 (interrupt, 1, 12)
[   89.511288] i8042: [85006] 16 <- i8042 (interrupt, 1, 12)
[   89.518831] i8042: [85014] 18 <- i8042 (interrupt, 1, 12)
[   89.519918] i8042: [85015] fb <- i8042 (interrupt, 1, 12)
[   89.521045] i8042: [85016] 17 <- i8042 (interrupt, 1, 12)
[   89.528580] i8042: [85024] 08 <- i8042 (interrupt, 1, 12)
[   89.529668] i8042: [85025] 00 <- i8042 (interrupt, 1, 12)
[   89.530795] i8042: [85026] 14 <- i8042 (interrupt, 1, 12)
[   89.538371] i8042: [85034] 08 <- i8042 (interrupt, 1, 12)
[   89.539458] i8042: [85035] 04 <- i8042 (interrupt, 1, 12)
[   89.540544] i8042: [85036] 12 <- i8042 (interrupt, 1, 12)
[   89.548087] i8042: [85043] 08 <- i8042 (interrupt, 1, 12)
[   89.549175] i8042: [85044] 07 <- i8042 (interrupt, 1, 12)
[   89.550258] i8042: [85045] 0f <- i8042 (interrupt, 1, 12)
[   89.557836] i8042: [85053] 08 <- i8042 (interrupt, 1, 12)
[   89.558922] i8042: [85054] 0a <- i8042 (interrupt, 1, 12)
[   89.560010] i8042: [85055] 0b <- i8042 (interrupt, 1, 12)
[   89.567590] i8042: [85063] 08 <- i8042 (interrupt, 1, 12)
[   89.568677] i8042: [85064] 0a <- i8042 (interrupt, 1, 12)
[   89.569778] i8042: [85065] 06 <- i8042 (interrupt, 1, 12)
[   89.577318] i8042: [85073] 08 <- i8042 (interrupt, 1, 12)
[   89.578446] i8042: [85074] 09 <- i8042 (interrupt, 1, 12)
[   89.579532] i8042: [85075] 03 <- i8042 (interrupt, 1, 12)
[   89.587108] i8042: [85082] 08 <- i8042 (interrupt, 1, 12)
[   89.588193] i8042: [85083] 05 <- i8042 (interrupt, 1, 12)
[   89.589279] i8042: [85084] 02 <- i8042 (interrupt, 1, 12)
[   89.596849] i8042: [85092] 08 <- i8042 (interrupt, 1, 12)
[   89.597944] i8042: [85093] 03 <- i8042 (interrupt, 1, 12)
[   89.599032] i8042: [85094] 02 <- i8042 (interrupt, 1, 12)
[   89.606599] i8042: [85102] 08 <- i8042 (interrupt, 1, 12)
[   89.607686] i8042: [85103] 01 <- i8042 (interrupt, 1, 12)
[   89.608773] i8042: [85104] 01 <- i8042 (interrupt, 1, 12)
[   89.616398] i8042: [85112] 08 <- i8042 (interrupt, 1, 12)
[   89.617438] i8042: [85113] 01 <- i8042 (interrupt, 1, 12)
[   89.618525] i8042: [85114] 01 <- i8042 (interrupt, 1, 12)

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox