summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Boyer <jwboyer@fedoraproject.org>2015-04-17 09:31:16 -0400
committerJosh Boyer <jwboyer@fedoraproject.org>2015-04-17 09:31:16 -0400
commit8b91e0bbd8717cec6fda1de2a16415d69b887e75 (patch)
treebdf070bd090519ef0684d3c5aee55c16f6c5691d
parent9b68c8a1f7ac2268ded0a09169fbefb269350c11 (diff)
downloadkernel-8b91e0bbd8717cec6fda1de2a16415d69b887e75.tar.gz
kernel-8b91e0bbd8717cec6fda1de2a16415d69b887e75.tar.xz
kernel-8b91e0bbd8717cec6fda1de2a16415d69b887e75.zip
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)
-rw-r--r--Input-atmel_mxt_ts-add-support-for-Google-Pixel-2.patch223
-rw-r--r--Input-synaptics-pin-3-touches-when-the-firmware-repo.patch50
-rw-r--r--kernel.spec19
-rw-r--r--sources2
4 files changed, 292 insertions, 2 deletions
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 000000000..2e8af3375
--- /dev/null
+++ b/Input-atmel_mxt_ts-add-support-for-Google-Pixel-2.patch
@@ -0,0 +1,223 @@
+From: Dmitry Torokhov <dmitry.torokhov@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@collabora.co.uk>
+Tested-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@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 000000000..cdda67ad2
--- /dev/null
+++ b/Input-synaptics-pin-3-touches-when-the-firmware-repo.patch
@@ -0,0 +1,50 @@
+From: Benjamin Tissoires <benjamin.tissoires@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@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 63c706cf4..e217ae841 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@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@fedoraproject.org> - 4.1.0-0.rc0.git6.1
- Linux v4.0-7209-g7d69cff26cea
diff --git a/sources b/sources
index 6a72d570a..6749f2d98 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