jwboyer pushed to kernel (master). "Linux v4.0-7300-g4fc8adcfec3d (..more)"

notifications at fedoraproject.org notifications at fedoraproject.org
Fri Apr 17 13:31:26 UTC 2015


>From 8b91e0bbd8717cec6fda1de2a16415d69b887e75 Mon Sep 17 00:00:00 2001
From: Josh Boyer <jwboyer at fedoraproject.org>
Date: Fri, 17 Apr 2015 09:31:16 -0400
Subject: Linux v4.0-7300-g4fc8adcfec3d

- Patch from Benjamin Tissoires to fix 3 finger tap on synaptics (rhbz 1212230)
- Add patch to support touchpad on Google Pixel 2 (rhbz 1209088)

diff --git a/Input-atmel_mxt_ts-add-support-for-Google-Pixel-2.patch b/Input-atmel_mxt_ts-add-support-for-Google-Pixel-2.patch
new file mode 100644
index 0000000..2e8af33
--- /dev/null
+++ b/Input-atmel_mxt_ts-add-support-for-Google-Pixel-2.patch
@@ -0,0 +1,223 @@
+From: Dmitry Torokhov <dmitry.torokhov at gmail.com>
+Date: Tue, 7 Apr 2015 16:30:01 -0700
+Subject: [PATCH] Input: atmel_mxt_ts - add support for Google Pixel 2
+
+This change allows atmel_mxt_ts to bind to ACPI-enumerated devices in
+Google Pixel 2 (2015).
+
+While newer version of ACPI standard allow use of device-tree-like
+properties in device descriptions, the version of ACPI implemented in
+Google BIOS does not support them, and we have to resort to DMI data to
+specify exact characteristics of the devices (touchpad vs. touchscreen,
+GPIO to button mapping, etc).
+
+Pixel 1 continues to use i2c devices and platform data created by
+chromeos-laptop driver, since ACPI does not enumerate them.
+
+Reviewed-by: Javier Martinez Canillas <javier.martinez at collabora.co.uk>
+Tested-by: Javier Martinez Canillas <javier.martinez at collabora.co.uk>
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov at gmail.com>
+---
+ drivers/input/touchscreen/atmel_mxt_ts.c | 141 ++++++++++++++++++++++++++++---
+ 1 file changed, 130 insertions(+), 11 deletions(-)
+
+diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c
+index 2875ddf37289..40b98dda8f38 100644
+--- a/drivers/input/touchscreen/atmel_mxt_ts.c
++++ b/drivers/input/touchscreen/atmel_mxt_ts.c
+@@ -14,6 +14,8 @@
+  *
+  */
+ 
++#include <linux/acpi.h>
++#include <linux/dmi.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+ #include <linux/completion.h>
+@@ -2371,7 +2373,7 @@ static void mxt_input_close(struct input_dev *dev)
+ }
+ 
+ #ifdef CONFIG_OF
+-static struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
++static const struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
+ {
+ 	struct mxt_platform_data *pdata;
+ 	u32 *keymap;
+@@ -2379,7 +2381,7 @@ static struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
+ 	int proplen, i, ret;
+ 
+ 	if (!client->dev.of_node)
+-		return ERR_PTR(-ENODEV);
++		return ERR_PTR(-ENOENT);
+ 
+ 	pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
+ 	if (!pdata)
+@@ -2410,25 +2412,132 @@ static struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
+ 	return pdata;
+ }
+ #else
+-static struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
++static const struct mxt_platform_data *mxt_parse_dt(struct i2c_client *client)
+ {
+-	dev_dbg(&client->dev, "No platform data specified\n");
+-	return ERR_PTR(-EINVAL);
++	return ERR_PTR(-ENOENT);
++}
++#endif
++
++#ifdef CONFIG_ACPI
++
++struct mxt_acpi_platform_data {
++	const char *hid;
++	struct mxt_platform_data pdata;
++};
++
++static unsigned int samus_touchpad_buttons[] = {
++	KEY_RESERVED,
++	KEY_RESERVED,
++	KEY_RESERVED,
++	BTN_LEFT
++};
++
++static struct mxt_acpi_platform_data samus_platform_data[] = {
++	{
++		/* Touchpad */
++		.hid	= "ATML0000",
++		.pdata	= {
++			.t19_num_keys	= ARRAY_SIZE(samus_touchpad_buttons),
++			.t19_keymap	= samus_touchpad_buttons,
++		},
++	},
++	{
++		/* Touchscreen */
++		.hid	= "ATML0001",
++	},
++	{ }
++};
++
++static const struct dmi_system_id mxt_dmi_table[] = {
++	{
++		/* 2015 Google Pixel */
++		.ident = "Chromebook Pixel 2",
++		.matches = {
++			DMI_MATCH(DMI_SYS_VENDOR, "GOOGLE"),
++			DMI_MATCH(DMI_PRODUCT_NAME, "Samus"),
++		},
++		.driver_data = samus_platform_data,
++	},
++	{ }
++};
++
++static const struct mxt_platform_data *mxt_parse_acpi(struct i2c_client *client)
++{
++	struct acpi_device *adev;
++	const struct dmi_system_id *system_id;
++	const struct mxt_acpi_platform_data *acpi_pdata;
++
++	/*
++	 * Ignore ACPI devices representing bootloader mode.
++	 *
++	 * This is a bit of a hack: Google Chromebook BIOS creates ACPI
++	 * devices for both application and bootloader modes, but we are
++	 * interested in application mode only (if device is in bootloader
++	 * mode we'll end up switching into application anyway). So far
++	 * application mode addresses were all above 0x40, so we'll use it
++	 * as a threshold.
++	 */
++	if (client->addr < 0x40)
++		return ERR_PTR(-ENXIO);
++
++	adev = ACPI_COMPANION(&client->dev);
++	if (!adev)
++		return ERR_PTR(-ENOENT);
++
++	system_id = dmi_first_match(mxt_dmi_table);
++	if (!system_id)
++		return ERR_PTR(-ENOENT);
++
++	acpi_pdata = system_id->driver_data;
++	if (!acpi_pdata)
++		return ERR_PTR(-ENOENT);
++
++	while (acpi_pdata->hid) {
++		if (!strcmp(acpi_device_hid(adev), acpi_pdata->hid))
++			return &acpi_pdata->pdata;
++
++		acpi_pdata++;
++	}
++
++	return ERR_PTR(-ENOENT);
++}
++#else
++static const struct mxt_platform_data *mxt_parse_acpi(struct i2c_client *client)
++{
++	return ERR_PTR(-ENOENT);
+ }
+ #endif
+ 
++static const struct mxt_platform_data *
++mxt_get_platform_data(struct i2c_client *client)
++{
++	const struct mxt_platform_data *pdata;
++
++	pdata = dev_get_platdata(&client->dev);
++	if (pdata)
++		return pdata;
++
++	pdata = mxt_parse_dt(client);
++	if (!IS_ERR(pdata) || PTR_ERR(pdata) != -ENOENT)
++		return pdata;
++
++	pdata = mxt_parse_acpi(client);
++	if (!IS_ERR(pdata) || PTR_ERR(pdata) != -ENOENT)
++		return pdata;
++
++	dev_err(&client->dev, "No platform data specified\n");
++	return ERR_PTR(-EINVAL);
++}
++
+ static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id)
+ {
+ 	struct mxt_data *data;
+ 	const struct mxt_platform_data *pdata;
+ 	int error;
+ 
+-	pdata = dev_get_platdata(&client->dev);
+-	if (!pdata) {
+-		pdata = mxt_parse_dt(client);
+-		if (IS_ERR(pdata))
+-			return PTR_ERR(pdata);
+-	}
++	pdata = mxt_get_platform_data(client);
++	if (IS_ERR(pdata))
++		return PTR_ERR(pdata);
+ 
+ 	data = kzalloc(sizeof(struct mxt_data), GFP_KERNEL);
+ 	if (!data) {
+@@ -2536,6 +2645,15 @@ static const struct of_device_id mxt_of_match[] = {
+ };
+ MODULE_DEVICE_TABLE(of, mxt_of_match);
+ 
++#ifdef CONFIG_ACPI
++static const struct acpi_device_id mxt_acpi_id[] = {
++	{ "ATML0000", 0 },	/* Touchpad */
++	{ "ATML0001", 0 },	/* Touchscreen */
++	{ }
++};
++MODULE_DEVICE_TABLE(acpi, mxt_acpi_id);
++#endif
++
+ static const struct i2c_device_id mxt_id[] = {
+ 	{ "qt602240_ts", 0 },
+ 	{ "atmel_mxt_ts", 0 },
+@@ -2550,6 +2668,7 @@ static struct i2c_driver mxt_driver = {
+ 		.name	= "atmel_mxt_ts",
+ 		.owner	= THIS_MODULE,
+ 		.of_match_table = of_match_ptr(mxt_of_match),
++		.acpi_match_table = ACPI_PTR(mxt_acpi_id),
+ 		.pm	= &mxt_pm_ops,
+ 	},
+ 	.probe		= mxt_probe,
+-- 
+2.1.0
+
diff --git a/Input-synaptics-pin-3-touches-when-the-firmware-repo.patch b/Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
new file mode 100644
index 0000000..cdda67a
--- /dev/null
+++ b/Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
@@ -0,0 +1,50 @@
+From: Benjamin Tissoires <benjamin.tissoires at redhat.com>
+Date: Thu, 16 Apr 2015 13:01:46 -0400
+Subject: [PATCH] Input - synaptics: pin 3 touches when the firmware reports 3
+ fingers
+
+Synaptics PS/2 touchpad can send only 2 touches in a report. They can
+detect 4 or 5 and this information is valuable.
+
+In commit 63c4fda (Input: synaptics - allocate 3 slots to keep stability
+in image sensors), we allocate 3 slots, but we still continue to report
+the 2 available fingers. That means that the client sees 2 used slots while
+there is a total of 3 fingers advertised by BTN_TOOL_TRIPLETAP.
+
+For old kernels this is not a problem because max_slots was 2 and libinput/
+xorg-synaptics knew how to deal with that. Now that max_slot is 3, the
+clients ignore BTN_TOOL_TRIPLETAP and count the actual used slots (so 2).
+It then gets confused when receiving the BTN_TOOL_TRIPLETAP and DOUBLETAP
+information, and goes wild.
+
+We can pin the 3 slots until we get a total number of fingers below 2.
+
+Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1212230
+
+Signed-off-by: Benjamin Tissoires <benjamin.tissoires at redhat.com>
+---
+ drivers/input/mouse/synaptics.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
+index 630af73e98c4..c69b308beb3f 100644
+--- a/drivers/input/mouse/synaptics.c
++++ b/drivers/input/mouse/synaptics.c
+@@ -935,6 +935,14 @@ static void synaptics_report_mt_data(struct psmouse *psmouse,
+ 		input_report_abs(dev, ABS_MT_PRESSURE, hw[i]->z);
+ 	}
+ 
++	/* keep (slot count <= num_fingers) by pinning all slots */
++	if (num_fingers >= 3) {
++		for (i = 0; i < 3; i++) {
++			input_mt_slot(dev, i);
++			input_mt_report_slot_state(dev, MT_TOOL_FINGER, true);
++		}
++	}
++
+ 	input_mt_drop_unused(dev);
+ 
+ 	/* Don't use active slot count to generate BTN_TOOL events. */
+-- 
+2.1.0
+
diff --git a/kernel.spec b/kernel.spec
index 63c706c..e217ae8 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -67,7 +67,7 @@ Summary: The Linux kernel
 # The rc snapshot level
 %define rcrev 0
 # The git snapshot level
-%define gitrev 6
+%define gitrev 7
 # Set rpm version accordingly
 %define rpmversion 4.%{upstream_sublevel}.0
 %endif
@@ -611,6 +611,12 @@ Patch26138: ext4-Allocate-entire-range-in-zero-range.patch
 #CVE-2015-2150 rhbz 1196266 1200397
 Patch26175: xen-pciback-Don-t-disable-PCI_COMMAND-on-PCI-device-.patch
 
+#rhbz 1212230
+Patch26176: Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
+
+#rhbz 1209088
+Patch26177: Input-atmel_mxt_ts-add-support-for-Google-Pixel-2.patch
+
 # END OF PATCH DEFINITIONS
 
 %endif
@@ -1337,6 +1343,12 @@ ApplyPatch ext4-Allocate-entire-range-in-zero-range.patch
 #CVE-2015-2150 rhbz 1196266 1200397
 ApplyPatch xen-pciback-Don-t-disable-PCI_COMMAND-on-PCI-device-.patch
 
+#rhbz 1212230
+ApplyPatch Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
+
+#rhbz 1209088
+ApplyPatch Input-atmel_mxt_ts-add-support-for-Google-Pixel-2.patch
+
 # END OF PATCH APPLICATIONS
 
 %endif
@@ -2187,6 +2199,11 @@ fi
 #
 # 
 %changelog
+* Fri Apr 17 2015 Josh Boyer <jwboyer at fedoraproject.org> - 4.1.0-0.rc0.git7.1
+- Linux v4.0-7300-g4fc8adcfec3d
+- Patch from Benjamin Tissoires to fix 3 finger tap on synaptics (rhbz 1212230)
+- Add patch to support touchpad on Google Pixel 2 (rhbz 1209088)
+
 * Fri Apr 17 2015 Josh Boyer <jwboyer at fedoraproject.org> - 4.1.0-0.rc0.git6.1
 - Linux v4.0-7209-g7d69cff26cea
 
diff --git a/sources b/sources
index 6a72d57..6749f2d 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
 a86916bd12798220da9eb4a1eec3616d  linux-4.0.tar.xz
 d125eecce68ab6fb5f1f23523c2c04b8  perf-man-4.0.tar.gz
-ef582cbcc3652cd2aeaaf0ca05b5bed4  patch-4.0-git6.xz
+f9af1b9baeff5a681739bb8868d2599f  patch-4.0-git7.xz
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/kernel.git/commit/?h=master&id=8b91e0bbd8717cec6fda1de2a16415d69b887e75


More information about the scm-commits mailing list