The Lenovo Miix 630 is one of three ARM based (specifically Qualcomm
MSM8998) laptops that comes with Windows, and seems to have a dedicated
following of folks intrested to get Linux up and running on it.
This series adds support for the basic functionality this is validated
towork using devicetree. Although the laptops do feed ACPI to Windows,
the existing MSM8998 support in mainline is DT based, so DT provides a
quick path to functionality while ACPI support is investigated.
The three devices are very similar, but do have differences in the set
of peripherals supported, so the idea is that the vast majority of the
support for all three can live in a common include, which should reduce
overall duplication. Adding support for the other two devices as a
follow on should involve minimal work.
The bleeding edge work for these laptops and work in progress can be
found at https://github.com/aarch64-laptops/prebuilt
v4:
-Changed the hid-quirks ELAN handling around per Benjamin Tissoires
-Dropped new DT binding
v3:
-Changed "clam" to "clamshell"
-Defined a dt binding for the combo Elan keyboard + touchpad device
-Adjusted the HID quirk to be correct for dt boot
-Removed extranious comment in board dts
-Fixed board level compatible
v2:
-Changed "cls" to "clam" since feedback indicated "cls" is too opaque,
but
"clamshell" is a mouthfull. "clam" seems to be a happy medium.
Jeffrey Hugo (3):
dt-bindings: input: add Elan 400 combo keyboard/touchpad over i2c
HID: quirks: Fix keyboard + touchpad on Lenovo Miix 630 for DT
arm64: dts: qcom: Add Lenovo Miix 630
.../bindings/input/elan,combo400-i2c.txt | 11 +
arch/arm64/boot/dts/qcom/Makefile | 1 +
.../boot/dts/qcom/msm8998-clamshell.dtsi | 278 ++++++++++++++++++
.../boot/dts/qcom/msm8998-lenovo-miix-630.dts | 30 ++
drivers/hid/hid-quirks.c | 3 +-
5 files changed, 322 insertions(+), 1 deletion(-)
create mode 100644 Documentation/devicetree/bindings/input/elan,combo400-i2c.txt
create mode 100644 arch/arm64/boot/dts/qcom/msm8998-clamshell.dtsi
create mode 100644 arch/arm64/boot/dts/qcom/msm8998-lenovo-miix-630.dts
--
2.17.1
There needs to be coordination between hid-quirks and the elan_i2c driver
about which devices are handled by what drivers. Currently, both use
whitelists, which results in valid devices being unhandled by default,
when they should not be rejected by hid-quirks. This is quickly becoming
an issue.
Since elan_i2c has a maintained whitelist of what devices it will handle,
use that to implement a blacklist in hid-quirks so that only the devices
that need to be handled by elan_i2c get rejected by hid-quirks, and
everything else is handled by default. The downside is the whitelist and
blacklist need to be kept in sync.
Suggested-by: Benjamin Tissoires <[email protected]>
Signed-off-by: Jeffrey Hugo <[email protected]>
---
drivers/hid/hid-quirks.c | 64 ++++++++++++++++++++++++-----
drivers/input/mouse/elan_i2c_core.c | 4 ++
2 files changed, 58 insertions(+), 10 deletions(-)
diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
index 77ffba48cc73..656485e08eb7 100644
--- a/drivers/hid/hid-quirks.c
+++ b/drivers/hid/hid-quirks.c
@@ -987,17 +987,61 @@ bool hid_ignore(struct hid_device *hdev)
break;
case USB_VENDOR_ID_ELAN:
/*
- * Many Elan devices have a product id of 0x0401 and are handled
- * by the elan_i2c input driver. But the ACPI HID ELAN0800 dev
- * is not (and cannot be) handled by that driver ->
- * Ignore all 0x0401 devs except for the ELAN0800 dev.
+ * Blacklist of everything that gets handled by the elan_i2c
+ * input driver. This should be kept in sync with the whitelist
+ * that exists in that driver. This avoids disabling valid
+ * touchpads and other ELAN devices.
*/
- if (hdev->product == 0x0401 &&
- strncmp(hdev->name, "ELAN0800", 8) != 0)
- return true;
- /* Same with product id 0x0400 */
- if (hdev->product == 0x0400 &&
- strncmp(hdev->name, "QTEC0001", 8) != 0)
+ if ((hdev->product == 0x0401 || hdev->product == 0x0400) &&
+ (strncmp(hdev->name, "ELAN0000", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0100", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0600", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0601", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0602", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0603", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0604", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0605", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0606", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0607", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0608", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0609", 8) == 0 ||
+ strncmp(hdev->name, "ELAN060B", 8) == 0 ||
+ strncmp(hdev->name, "ELAN060C", 8) == 0 ||
+ strncmp(hdev->name, "ELAN060F", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0610", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0611", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0612", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0613", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0614", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0615", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0616", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0617", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0618", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0619", 8) == 0 ||
+ strncmp(hdev->name, "ELAN061A", 8) == 0 ||
+ strncmp(hdev->name, "ELAN061B", 8) == 0 ||
+ strncmp(hdev->name, "ELAN061C", 8) == 0 ||
+ strncmp(hdev->name, "ELAN061D", 8) == 0 ||
+ strncmp(hdev->name, "ELAN061E", 8) == 0 ||
+ strncmp(hdev->name, "ELAN061F", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0620", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0621", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0622", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0623", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0624", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0625", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0626", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0627", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0628", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0629", 8) == 0 ||
+ strncmp(hdev->name, "ELAN062A", 8) == 0 ||
+ strncmp(hdev->name, "ELAN062B", 8) == 0 ||
+ strncmp(hdev->name, "ELAN062C", 8) == 0 ||
+ strncmp(hdev->name, "ELAN062D", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0631", 8) == 0 ||
+ strncmp(hdev->name, "ELAN0632", 8) == 0 ||
+ strncmp(hdev->name, "ELAN1000", 8) == 0 ||
+ strncmp(hdev->name, "elan,ekth3000", 13) == 0))
return true;
break;
}
diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c
index f9525d6f0bfe..3ded19528cd4 100644
--- a/drivers/input/mouse/elan_i2c_core.c
+++ b/drivers/input/mouse/elan_i2c_core.c
@@ -1332,6 +1332,10 @@ static const struct i2c_device_id elan_id[] = {
};
MODULE_DEVICE_TABLE(i2c, elan_id);
+/*
+ * when these whtielists get updated, the corresponding blacklist in hid-quirks
+ * needs to be updated to match.
+ */
#ifdef CONFIG_ACPI
static const struct acpi_device_id elan_acpi_id[] = {
{ "ELAN0000", 0 },
--
2.17.1
This adds the initial DT for the Lenovo Miix 630 laptop. Supported
functionality includes USB (host), microSD-card, keyboard, and trackpad.
Signed-off-by: Jeffrey Hugo <[email protected]>
---
arch/arm64/boot/dts/qcom/Makefile | 1 +
.../boot/dts/qcom/msm8998-clamshell.dtsi | 278 ++++++++++++++++++
.../boot/dts/qcom/msm8998-lenovo-miix-630.dts | 30 ++
3 files changed, 309 insertions(+)
create mode 100644 arch/arm64/boot/dts/qcom/msm8998-clamshell.dtsi
create mode 100644 arch/arm64/boot/dts/qcom/msm8998-lenovo-miix-630.dts
diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
index 21d548f02d39..c3e4307bcbd4 100644
--- a/arch/arm64/boot/dts/qcom/Makefile
+++ b/arch/arm64/boot/dts/qcom/Makefile
@@ -6,6 +6,7 @@ dtb-$(CONFIG_ARCH_QCOM) += msm8916-mtp.dtb
dtb-$(CONFIG_ARCH_QCOM) += msm8992-bullhead-rev-101.dtb
dtb-$(CONFIG_ARCH_QCOM) += msm8994-angler-rev-101.dtb
dtb-$(CONFIG_ARCH_QCOM) += msm8996-mtp.dtb
+dtb-$(CONFIG_ARCH_QCOM) += msm8998-lenovo-miix-630.dtb
dtb-$(CONFIG_ARCH_QCOM) += msm8998-mtp.dtb
dtb-$(CONFIG_ARCH_QCOM) += sdm845-mtp.dtb
dtb-$(CONFIG_ARCH_QCOM) += qcs404-evb-1000.dtb
diff --git a/arch/arm64/boot/dts/qcom/msm8998-clamshell.dtsi b/arch/arm64/boot/dts/qcom/msm8998-clamshell.dtsi
new file mode 100644
index 000000000000..1a341d4b1597
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/msm8998-clamshell.dtsi
@@ -0,0 +1,278 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (c) 2019, Jeffrey Hugo. All rights reserved. */
+
+/*
+ * Common include for MSM8998 clamshell devices, ie the Lenovo Miix 630,
+ * Asus NovaGo TP370QL, and HP Envy x2. All three devices are basically the
+ * same, with differences in peripherals.
+ */
+
+#include "msm8998.dtsi"
+#include "pm8998.dtsi"
+#include "pm8005.dtsi"
+
+/ {
+ chosen {
+ };
+
+ thermal-zones {
+ battery-thermal {
+ polling-delay-passive = <250>;
+ polling-delay = <1000>;
+
+ thermal-sensors = <&tsens0 0>;
+
+ trips {
+ battery_crit: trip0 {
+ temperature = <60000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+ };
+
+ skin-thermal {
+ polling-delay-passive = <250>;
+ polling-delay = <1000>;
+
+ thermal-sensors = <&tsens1 5>;
+
+ trips {
+ skin_alert: trip0 {
+ temperature = <44000>;
+ hysteresis = <2000>;
+ type = "passive";
+ };
+
+ skip_crit: trip1 {
+ temperature = <70000>;
+ hysteresis = <2000>;
+ type = "critical";
+ };
+ };
+ };
+ };
+
+ vph_pwr: vph-pwr-regulator {
+ compatible = "regulator-fixed";
+ regulator-name = "vph_pwr";
+ regulator-always-on;
+ regulator-boot-on;
+ };
+};
+
+&qusb2phy {
+ status = "okay";
+
+ vdda-pll-supply = <&vreg_l12a_1p8>;
+ vdda-phy-dpdm-supply = <&vreg_l24a_3p075>;
+};
+
+&rpm_requests {
+ pm8998-regulators {
+ compatible = "qcom,rpm-pm8998-regulators";
+
+ vdd_s1-supply = <&vph_pwr>;
+ vdd_s2-supply = <&vph_pwr>;
+ vdd_s3-supply = <&vph_pwr>;
+ vdd_s4-supply = <&vph_pwr>;
+ vdd_s5-supply = <&vph_pwr>;
+ vdd_s6-supply = <&vph_pwr>;
+ vdd_s7-supply = <&vph_pwr>;
+ vdd_s8-supply = <&vph_pwr>;
+ vdd_s9-supply = <&vph_pwr>;
+ vdd_s10-supply = <&vph_pwr>;
+ vdd_s11-supply = <&vph_pwr>;
+ vdd_s12-supply = <&vph_pwr>;
+ vdd_s13-supply = <&vph_pwr>;
+ vdd_l1_l27-supply = <&vreg_s7a_1p025>;
+ vdd_l2_l8_l17-supply = <&vreg_s3a_1p35>;
+ vdd_l3_l11-supply = <&vreg_s7a_1p025>;
+ vdd_l4_l5-supply = <&vreg_s7a_1p025>;
+ vdd_l6-supply = <&vreg_s5a_2p04>;
+ vdd_l7_l12_l14_l15-supply = <&vreg_s5a_2p04>;
+ vdd_l9-supply = <&vph_pwr>;
+ vdd_l10_l23_l25-supply = <&vph_pwr>;
+ vdd_l13_l19_l21-supply = <&vph_pwr>;
+ vdd_l16_l28-supply = <&vph_pwr>;
+ vdd_l18_l22-supply = <&vph_pwr>;
+ vdd_l20_l24-supply = <&vph_pwr>;
+ vdd_l26-supply = <&vreg_s3a_1p35>;
+ vdd_lvs1_lvs2-supply = <&vreg_s4a_1p8>;
+
+ vreg_s3a_1p35: s3 {
+ regulator-min-microvolt = <1352000>;
+ regulator-max-microvolt = <1352000>;
+ };
+ vreg_s4a_1p8: s4 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-allow-set-load;
+ };
+ vreg_s5a_2p04: s5 {
+ regulator-min-microvolt = <1904000>;
+ regulator-max-microvolt = <2040000>;
+ };
+ vreg_s7a_1p025: s7 {
+ regulator-min-microvolt = <900000>;
+ regulator-max-microvolt = <1028000>;
+ };
+ vreg_l1a_0p875: l1 {
+ regulator-min-microvolt = <880000>;
+ regulator-max-microvolt = <880000>;
+ regulator-allow-set-load;
+ };
+ vreg_l2a_1p2: l2 {
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1200000>;
+ regulator-allow-set-load;
+ };
+ vreg_l3a_1p0: l3 {
+ regulator-min-microvolt = <1000000>;
+ regulator-max-microvolt = <1000000>;
+ };
+ vreg_l5a_0p8: l5 {
+ regulator-min-microvolt = <800000>;
+ regulator-max-microvolt = <800000>;
+ };
+ vreg_l6a_1p8: l6 {
+ regulator-min-microvolt = <1808000>;
+ regulator-max-microvolt = <1808000>;
+ };
+ vreg_l7a_1p8: l7 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ };
+ vreg_l8a_1p2: l8 {
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1200000>;
+ };
+ vreg_l9a_1p8: l9 {
+ regulator-min-microvolt = <1808000>;
+ regulator-max-microvolt = <2960000>;
+ };
+ vreg_l10a_1p8: l10 {
+ regulator-min-microvolt = <1808000>;
+ regulator-max-microvolt = <2960000>;
+ };
+ vreg_l11a_1p0: l11 {
+ regulator-min-microvolt = <1000000>;
+ regulator-max-microvolt = <1000000>;
+ };
+ vreg_l12a_1p8: l12 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ };
+ vreg_l13a_2p95: l13 {
+ regulator-min-microvolt = <1808000>;
+ regulator-max-microvolt = <2960000>;
+ };
+ vreg_l14a_1p88: l14 {
+ regulator-min-microvolt = <1880000>;
+ regulator-max-microvolt = <1880000>;
+ };
+ vreg_15a_1p8: l15 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ };
+ vreg_l16a_2p7: l16 {
+ regulator-min-microvolt = <2704000>;
+ regulator-max-microvolt = <2704000>;
+ };
+ vreg_l17a_1p3: l17 {
+ regulator-min-microvolt = <1304000>;
+ regulator-max-microvolt = <1304000>;
+ };
+ vreg_l18a_2p7: l18 {
+ regulator-min-microvolt = <2704000>;
+ regulator-max-microvolt = <2704000>;
+ };
+ vreg_l19a_3p0: l19 {
+ regulator-min-microvolt = <3008000>;
+ regulator-max-microvolt = <3008000>;
+ };
+ vreg_l20a_2p95: l20 {
+ regulator-min-microvolt = <2960000>;
+ regulator-max-microvolt = <2960000>;
+ regulator-allow-set-load;
+ };
+ vreg_l21a_2p95: l21 {
+ regulator-min-microvolt = <2960000>;
+ regulator-max-microvolt = <2960000>;
+ regulator-allow-set-load;
+ regulator-system-load = <800000>;
+ };
+ vreg_l22a_2p85: l22 {
+ regulator-min-microvolt = <2864000>;
+ regulator-max-microvolt = <2864000>;
+ };
+ vreg_l23a_3p3: l23 {
+ regulator-min-microvolt = <3312000>;
+ regulator-max-microvolt = <3312000>;
+ };
+ vreg_l24a_3p075: l24 {
+ regulator-min-microvolt = <3088000>;
+ regulator-max-microvolt = <3088000>;
+ };
+ vreg_l25a_3p3: l25 {
+ regulator-min-microvolt = <3104000>;
+ regulator-max-microvolt = <3312000>;
+ };
+ vreg_l26a_1p2: l26 {
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1200000>;
+ };
+ vreg_l28_3p0: l28 {
+ regulator-min-microvolt = <3008000>;
+ regulator-max-microvolt = <3008000>;
+ };
+
+ vreg_lvs1a_1p8: lvs1 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ };
+
+ vreg_lvs2a_1p8: lvs2 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ };
+
+ };
+};
+
+&tlmm {
+ gpio-reserved-ranges = <0 4>, <81 4>;
+
+ touchpad: touchpad {
+ config {
+ pins = "gpio123";
+ bias-pull-up; /* pull up */
+ };
+ };
+};
+
+&sdhc2 {
+ status = "okay";
+
+ vmmc-supply = <&vreg_l21a_2p95>;
+ vqmmc-supply = <&vreg_l13a_2p95>;
+
+ pinctrl-names = "default", "sleep";
+ pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
+ pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;
+};
+
+&usb3 {
+ status = "okay";
+};
+
+&usb3_dwc3 {
+ dr_mode = "host"; /* Force to host until we have Type-C hooked up */
+};
+
+&usb3phy {
+ status = "okay";
+
+ vdda-phy-supply = <&vreg_l1a_0p875>;
+ vdda-pll-supply = <&vreg_l2a_1p2>;
+};
diff --git a/arch/arm64/boot/dts/qcom/msm8998-lenovo-miix-630.dts b/arch/arm64/boot/dts/qcom/msm8998-lenovo-miix-630.dts
new file mode 100644
index 000000000000..407c6a32911c
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/msm8998-lenovo-miix-630.dts
@@ -0,0 +1,30 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (c) 2019, Jeffrey Hugo. All rights reserved. */
+
+/dts-v1/;
+
+#include "msm8998-clamshell.dtsi"
+
+/ {
+ model = "Lenovo Miix 630";
+ compatible = "lenovo,miix-630", "qcom,msm8998";
+};
+
+&blsp1_i2c6 {
+ status = "okay";
+
+ keyboard@3a {
+ compatible = "hid-over-i2c";
+ interrupt-parent = <&tlmm>;
+ interrupts = <0x79 IRQ_TYPE_LEVEL_LOW>;
+ reg = <0x3a>;
+ hid-descr-addr = <0x0001>;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&touchpad>;
+ };
+};
+
+&sdhc2 {
+ cd-gpios = <&tlmm 95 GPIO_ACTIVE_HIGH>;
+};
--
2.17.1
On Tue 23 Apr 09:06 PDT 2019, Jeffrey Hugo wrote:
> There needs to be coordination between hid-quirks and the elan_i2c driver
> about which devices are handled by what drivers. Currently, both use
> whitelists, which results in valid devices being unhandled by default,
> when they should not be rejected by hid-quirks. This is quickly becoming
> an issue.
>
> Since elan_i2c has a maintained whitelist of what devices it will handle,
> use that to implement a blacklist in hid-quirks so that only the devices
> that need to be handled by elan_i2c get rejected by hid-quirks, and
> everything else is handled by default. The downside is the whitelist and
> blacklist need to be kept in sync.
>
Reviewed-by: Bjorn Andersson <[email protected]>
Jiri, the two patches in this series doesn't have a build time
dependency, so if you take this one through your tree I'll take 2/2
through arm-soc.
Regards,
Bjorn
> Suggested-by: Benjamin Tissoires <[email protected]>
> Signed-off-by: Jeffrey Hugo <[email protected]>
> ---
> drivers/hid/hid-quirks.c | 64 ++++++++++++++++++++++++-----
> drivers/input/mouse/elan_i2c_core.c | 4 ++
> 2 files changed, 58 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
> index 77ffba48cc73..656485e08eb7 100644
> --- a/drivers/hid/hid-quirks.c
> +++ b/drivers/hid/hid-quirks.c
> @@ -987,17 +987,61 @@ bool hid_ignore(struct hid_device *hdev)
> break;
> case USB_VENDOR_ID_ELAN:
> /*
> - * Many Elan devices have a product id of 0x0401 and are handled
> - * by the elan_i2c input driver. But the ACPI HID ELAN0800 dev
> - * is not (and cannot be) handled by that driver ->
> - * Ignore all 0x0401 devs except for the ELAN0800 dev.
> + * Blacklist of everything that gets handled by the elan_i2c
> + * input driver. This should be kept in sync with the whitelist
> + * that exists in that driver. This avoids disabling valid
> + * touchpads and other ELAN devices.
> */
> - if (hdev->product == 0x0401 &&
> - strncmp(hdev->name, "ELAN0800", 8) != 0)
> - return true;
> - /* Same with product id 0x0400 */
> - if (hdev->product == 0x0400 &&
> - strncmp(hdev->name, "QTEC0001", 8) != 0)
> + if ((hdev->product == 0x0401 || hdev->product == 0x0400) &&
> + (strncmp(hdev->name, "ELAN0000", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0100", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0600", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0601", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0602", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0603", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0604", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0605", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0606", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0607", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0608", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0609", 8) == 0 ||
> + strncmp(hdev->name, "ELAN060B", 8) == 0 ||
> + strncmp(hdev->name, "ELAN060C", 8) == 0 ||
> + strncmp(hdev->name, "ELAN060F", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0610", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0611", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0612", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0613", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0614", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0615", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0616", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0617", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0618", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0619", 8) == 0 ||
> + strncmp(hdev->name, "ELAN061A", 8) == 0 ||
> + strncmp(hdev->name, "ELAN061B", 8) == 0 ||
> + strncmp(hdev->name, "ELAN061C", 8) == 0 ||
> + strncmp(hdev->name, "ELAN061D", 8) == 0 ||
> + strncmp(hdev->name, "ELAN061E", 8) == 0 ||
> + strncmp(hdev->name, "ELAN061F", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0620", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0621", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0622", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0623", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0624", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0625", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0626", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0627", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0628", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0629", 8) == 0 ||
> + strncmp(hdev->name, "ELAN062A", 8) == 0 ||
> + strncmp(hdev->name, "ELAN062B", 8) == 0 ||
> + strncmp(hdev->name, "ELAN062C", 8) == 0 ||
> + strncmp(hdev->name, "ELAN062D", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0631", 8) == 0 ||
> + strncmp(hdev->name, "ELAN0632", 8) == 0 ||
> + strncmp(hdev->name, "ELAN1000", 8) == 0 ||
> + strncmp(hdev->name, "elan,ekth3000", 13) == 0))
> return true;
> break;
> }
> diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c
> index f9525d6f0bfe..3ded19528cd4 100644
> --- a/drivers/input/mouse/elan_i2c_core.c
> +++ b/drivers/input/mouse/elan_i2c_core.c
> @@ -1332,6 +1332,10 @@ static const struct i2c_device_id elan_id[] = {
> };
> MODULE_DEVICE_TABLE(i2c, elan_id);
>
> +/*
> + * when these whtielists get updated, the corresponding blacklist in hid-quirks
> + * needs to be updated to match.
> + */
> #ifdef CONFIG_ACPI
> static const struct acpi_device_id elan_acpi_id[] = {
> { "ELAN0000", 0 },
> --
> 2.17.1
>
On Tue, May 21, 2019 at 10:42 AM Bjorn Andersson
<[email protected]> wrote:
>
> On Tue 23 Apr 09:06 PDT 2019, Jeffrey Hugo wrote:
>
> > There needs to be coordination between hid-quirks and the elan_i2c driver
> > about which devices are handled by what drivers. Currently, both use
> > whitelists, which results in valid devices being unhandled by default,
> > when they should not be rejected by hid-quirks. This is quickly becoming
> > an issue.
> >
> > Since elan_i2c has a maintained whitelist of what devices it will handle,
> > use that to implement a blacklist in hid-quirks so that only the devices
> > that need to be handled by elan_i2c get rejected by hid-quirks, and
> > everything else is handled by default. The downside is the whitelist and
> > blacklist need to be kept in sync.
> >
>
> Reviewed-by: Bjorn Andersson <[email protected]>
>
> Jiri, the two patches in this series doesn't have a build time
> dependency, so if you take this one through your tree I'll take 2/2
> through arm-soc.
Ping? Is this good from the HID perspective? I would really like to
see this queued for 5.3.
>
> Regards,
> Bjorn
>
> > Suggested-by: Benjamin Tissoires <[email protected]>
> > Signed-off-by: Jeffrey Hugo <[email protected]>
> > ---
> > drivers/hid/hid-quirks.c | 64 ++++++++++++++++++++++++-----
> > drivers/input/mouse/elan_i2c_core.c | 4 ++
> > 2 files changed, 58 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
> > index 77ffba48cc73..656485e08eb7 100644
> > --- a/drivers/hid/hid-quirks.c
> > +++ b/drivers/hid/hid-quirks.c
> > @@ -987,17 +987,61 @@ bool hid_ignore(struct hid_device *hdev)
> > break;
> > case USB_VENDOR_ID_ELAN:
> > /*
> > - * Many Elan devices have a product id of 0x0401 and are handled
> > - * by the elan_i2c input driver. But the ACPI HID ELAN0800 dev
> > - * is not (and cannot be) handled by that driver ->
> > - * Ignore all 0x0401 devs except for the ELAN0800 dev.
> > + * Blacklist of everything that gets handled by the elan_i2c
> > + * input driver. This should be kept in sync with the whitelist
> > + * that exists in that driver. This avoids disabling valid
> > + * touchpads and other ELAN devices.
> > */
> > - if (hdev->product == 0x0401 &&
> > - strncmp(hdev->name, "ELAN0800", 8) != 0)
> > - return true;
> > - /* Same with product id 0x0400 */
> > - if (hdev->product == 0x0400 &&
> > - strncmp(hdev->name, "QTEC0001", 8) != 0)
> > + if ((hdev->product == 0x0401 || hdev->product == 0x0400) &&
> > + (strncmp(hdev->name, "ELAN0000", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0100", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0600", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0601", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0602", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0603", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0604", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0605", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0606", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0607", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0608", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0609", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN060B", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN060C", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN060F", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0610", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0611", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0612", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0613", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0614", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0615", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0616", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0617", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0618", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0619", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN061A", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN061B", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN061C", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN061D", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN061E", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN061F", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0620", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0621", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0622", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0623", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0624", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0625", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0626", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0627", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0628", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0629", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN062A", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN062B", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN062C", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN062D", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0631", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN0632", 8) == 0 ||
> > + strncmp(hdev->name, "ELAN1000", 8) == 0 ||
> > + strncmp(hdev->name, "elan,ekth3000", 13) == 0))
> > return true;
> > break;
> > }
> > diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c
> > index f9525d6f0bfe..3ded19528cd4 100644
> > --- a/drivers/input/mouse/elan_i2c_core.c
> > +++ b/drivers/input/mouse/elan_i2c_core.c
> > @@ -1332,6 +1332,10 @@ static const struct i2c_device_id elan_id[] = {
> > };
> > MODULE_DEVICE_TABLE(i2c, elan_id);
> >
> > +/*
> > + * when these whtielists get updated, the corresponding blacklist in hid-quirks
> > + * needs to be updated to match.
> > + */
> > #ifdef CONFIG_ACPI
> > static const struct acpi_device_id elan_acpi_id[] = {
> > { "ELAN0000", 0 },
> > --
> > 2.17.1
> >
On Tue, 23 Apr 2019, Jeffrey Hugo wrote:
> There needs to be coordination between hid-quirks and the elan_i2c driver
> about which devices are handled by what drivers. Currently, both use
> whitelists, which results in valid devices being unhandled by default,
> when they should not be rejected by hid-quirks. This is quickly becoming
> an issue.
>
> Since elan_i2c has a maintained whitelist of what devices it will handle,
> use that to implement a blacklist in hid-quirks so that only the devices
> that need to be handled by elan_i2c get rejected by hid-quirks, and
> everything else is handled by default. The downside is the whitelist and
> blacklist need to be kept in sync.
>
> Suggested-by: Benjamin Tissoires <[email protected]>
> Signed-off-by: Jeffrey Hugo <[email protected]>
> ---
> drivers/hid/hid-quirks.c | 64 ++++++++++++++++++++++++-----
> drivers/input/mouse/elan_i2c_core.c | 4 ++
> 2 files changed, 58 insertions(+), 10 deletions(-)
Reviewed-by: Lee Jones <[email protected]>
Tested-by: Lee Jones <[email protected]>
--
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
On Tue, 23 Apr 2019, Jeffrey Hugo wrote:
> This adds the initial DT for the Lenovo Miix 630 laptop. Supported
> functionality includes USB (host), microSD-card, keyboard, and trackpad.
>
> Signed-off-by: Jeffrey Hugo <[email protected]>
> ---
> arch/arm64/boot/dts/qcom/Makefile | 1 +
> .../boot/dts/qcom/msm8998-clamshell.dtsi | 278 ++++++++++++++++++
> .../boot/dts/qcom/msm8998-lenovo-miix-630.dts | 30 ++
What's happening with this patch?
It's been on the list a while now. I'm waiting for it to be accepted,
since there are patches I wish to submit which are based on it.
Who is responsible for merging these?
> 3 files changed, 309 insertions(+)
> create mode 100644 arch/arm64/boot/dts/qcom/msm8998-clamshell.dtsi
> create mode 100644 arch/arm64/boot/dts/qcom/msm8998-lenovo-miix-630.dts
>
> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> index 21d548f02d39..c3e4307bcbd4 100644
> --- a/arch/arm64/boot/dts/qcom/Makefile
> +++ b/arch/arm64/boot/dts/qcom/Makefile
> @@ -6,6 +6,7 @@ dtb-$(CONFIG_ARCH_QCOM) += msm8916-mtp.dtb
> dtb-$(CONFIG_ARCH_QCOM) += msm8992-bullhead-rev-101.dtb
> dtb-$(CONFIG_ARCH_QCOM) += msm8994-angler-rev-101.dtb
> dtb-$(CONFIG_ARCH_QCOM) += msm8996-mtp.dtb
> +dtb-$(CONFIG_ARCH_QCOM) += msm8998-lenovo-miix-630.dtb
> dtb-$(CONFIG_ARCH_QCOM) += msm8998-mtp.dtb
> dtb-$(CONFIG_ARCH_QCOM) += sdm845-mtp.dtb
> dtb-$(CONFIG_ARCH_QCOM) += qcs404-evb-1000.dtb
> diff --git a/arch/arm64/boot/dts/qcom/msm8998-clamshell.dtsi b/arch/arm64/boot/dts/qcom/msm8998-clamshell.dtsi
> new file mode 100644
> index 000000000000..1a341d4b1597
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/msm8998-clamshell.dtsi
> @@ -0,0 +1,278 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/* Copyright (c) 2019, Jeffrey Hugo. All rights reserved. */
> +
> +/*
> + * Common include for MSM8998 clamshell devices, ie the Lenovo Miix 630,
> + * Asus NovaGo TP370QL, and HP Envy x2. All three devices are basically the
> + * same, with differences in peripherals.
> + */
> +
> +#include "msm8998.dtsi"
> +#include "pm8998.dtsi"
> +#include "pm8005.dtsi"
> +
> +/ {
> + chosen {
> + };
> +
> + thermal-zones {
> + battery-thermal {
> + polling-delay-passive = <250>;
> + polling-delay = <1000>;
> +
> + thermal-sensors = <&tsens0 0>;
> +
> + trips {
> + battery_crit: trip0 {
> + temperature = <60000>;
> + hysteresis = <2000>;
> + type = "critical";
> + };
> + };
> + };
> +
> + skin-thermal {
> + polling-delay-passive = <250>;
> + polling-delay = <1000>;
> +
> + thermal-sensors = <&tsens1 5>;
> +
> + trips {
> + skin_alert: trip0 {
> + temperature = <44000>;
> + hysteresis = <2000>;
> + type = "passive";
> + };
> +
> + skip_crit: trip1 {
> + temperature = <70000>;
> + hysteresis = <2000>;
> + type = "critical";
> + };
> + };
> + };
> + };
> +
> + vph_pwr: vph-pwr-regulator {
> + compatible = "regulator-fixed";
> + regulator-name = "vph_pwr";
> + regulator-always-on;
> + regulator-boot-on;
> + };
> +};
> +
> +&qusb2phy {
> + status = "okay";
> +
> + vdda-pll-supply = <&vreg_l12a_1p8>;
> + vdda-phy-dpdm-supply = <&vreg_l24a_3p075>;
> +};
> +
> +&rpm_requests {
> + pm8998-regulators {
> + compatible = "qcom,rpm-pm8998-regulators";
> +
> + vdd_s1-supply = <&vph_pwr>;
> + vdd_s2-supply = <&vph_pwr>;
> + vdd_s3-supply = <&vph_pwr>;
> + vdd_s4-supply = <&vph_pwr>;
> + vdd_s5-supply = <&vph_pwr>;
> + vdd_s6-supply = <&vph_pwr>;
> + vdd_s7-supply = <&vph_pwr>;
> + vdd_s8-supply = <&vph_pwr>;
> + vdd_s9-supply = <&vph_pwr>;
> + vdd_s10-supply = <&vph_pwr>;
> + vdd_s11-supply = <&vph_pwr>;
> + vdd_s12-supply = <&vph_pwr>;
> + vdd_s13-supply = <&vph_pwr>;
> + vdd_l1_l27-supply = <&vreg_s7a_1p025>;
> + vdd_l2_l8_l17-supply = <&vreg_s3a_1p35>;
> + vdd_l3_l11-supply = <&vreg_s7a_1p025>;
> + vdd_l4_l5-supply = <&vreg_s7a_1p025>;
> + vdd_l6-supply = <&vreg_s5a_2p04>;
> + vdd_l7_l12_l14_l15-supply = <&vreg_s5a_2p04>;
> + vdd_l9-supply = <&vph_pwr>;
> + vdd_l10_l23_l25-supply = <&vph_pwr>;
> + vdd_l13_l19_l21-supply = <&vph_pwr>;
> + vdd_l16_l28-supply = <&vph_pwr>;
> + vdd_l18_l22-supply = <&vph_pwr>;
> + vdd_l20_l24-supply = <&vph_pwr>;
> + vdd_l26-supply = <&vreg_s3a_1p35>;
> + vdd_lvs1_lvs2-supply = <&vreg_s4a_1p8>;
> +
> + vreg_s3a_1p35: s3 {
> + regulator-min-microvolt = <1352000>;
> + regulator-max-microvolt = <1352000>;
> + };
> + vreg_s4a_1p8: s4 {
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + regulator-allow-set-load;
> + };
> + vreg_s5a_2p04: s5 {
> + regulator-min-microvolt = <1904000>;
> + regulator-max-microvolt = <2040000>;
> + };
> + vreg_s7a_1p025: s7 {
> + regulator-min-microvolt = <900000>;
> + regulator-max-microvolt = <1028000>;
> + };
> + vreg_l1a_0p875: l1 {
> + regulator-min-microvolt = <880000>;
> + regulator-max-microvolt = <880000>;
> + regulator-allow-set-load;
> + };
> + vreg_l2a_1p2: l2 {
> + regulator-min-microvolt = <1200000>;
> + regulator-max-microvolt = <1200000>;
> + regulator-allow-set-load;
> + };
> + vreg_l3a_1p0: l3 {
> + regulator-min-microvolt = <1000000>;
> + regulator-max-microvolt = <1000000>;
> + };
> + vreg_l5a_0p8: l5 {
> + regulator-min-microvolt = <800000>;
> + regulator-max-microvolt = <800000>;
> + };
> + vreg_l6a_1p8: l6 {
> + regulator-min-microvolt = <1808000>;
> + regulator-max-microvolt = <1808000>;
> + };
> + vreg_l7a_1p8: l7 {
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + };
> + vreg_l8a_1p2: l8 {
> + regulator-min-microvolt = <1200000>;
> + regulator-max-microvolt = <1200000>;
> + };
> + vreg_l9a_1p8: l9 {
> + regulator-min-microvolt = <1808000>;
> + regulator-max-microvolt = <2960000>;
> + };
> + vreg_l10a_1p8: l10 {
> + regulator-min-microvolt = <1808000>;
> + regulator-max-microvolt = <2960000>;
> + };
> + vreg_l11a_1p0: l11 {
> + regulator-min-microvolt = <1000000>;
> + regulator-max-microvolt = <1000000>;
> + };
> + vreg_l12a_1p8: l12 {
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + };
> + vreg_l13a_2p95: l13 {
> + regulator-min-microvolt = <1808000>;
> + regulator-max-microvolt = <2960000>;
> + };
> + vreg_l14a_1p88: l14 {
> + regulator-min-microvolt = <1880000>;
> + regulator-max-microvolt = <1880000>;
> + };
> + vreg_15a_1p8: l15 {
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + };
> + vreg_l16a_2p7: l16 {
> + regulator-min-microvolt = <2704000>;
> + regulator-max-microvolt = <2704000>;
> + };
> + vreg_l17a_1p3: l17 {
> + regulator-min-microvolt = <1304000>;
> + regulator-max-microvolt = <1304000>;
> + };
> + vreg_l18a_2p7: l18 {
> + regulator-min-microvolt = <2704000>;
> + regulator-max-microvolt = <2704000>;
> + };
> + vreg_l19a_3p0: l19 {
> + regulator-min-microvolt = <3008000>;
> + regulator-max-microvolt = <3008000>;
> + };
> + vreg_l20a_2p95: l20 {
> + regulator-min-microvolt = <2960000>;
> + regulator-max-microvolt = <2960000>;
> + regulator-allow-set-load;
> + };
> + vreg_l21a_2p95: l21 {
> + regulator-min-microvolt = <2960000>;
> + regulator-max-microvolt = <2960000>;
> + regulator-allow-set-load;
> + regulator-system-load = <800000>;
> + };
> + vreg_l22a_2p85: l22 {
> + regulator-min-microvolt = <2864000>;
> + regulator-max-microvolt = <2864000>;
> + };
> + vreg_l23a_3p3: l23 {
> + regulator-min-microvolt = <3312000>;
> + regulator-max-microvolt = <3312000>;
> + };
> + vreg_l24a_3p075: l24 {
> + regulator-min-microvolt = <3088000>;
> + regulator-max-microvolt = <3088000>;
> + };
> + vreg_l25a_3p3: l25 {
> + regulator-min-microvolt = <3104000>;
> + regulator-max-microvolt = <3312000>;
> + };
> + vreg_l26a_1p2: l26 {
> + regulator-min-microvolt = <1200000>;
> + regulator-max-microvolt = <1200000>;
> + };
> + vreg_l28_3p0: l28 {
> + regulator-min-microvolt = <3008000>;
> + regulator-max-microvolt = <3008000>;
> + };
> +
> + vreg_lvs1a_1p8: lvs1 {
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + };
> +
> + vreg_lvs2a_1p8: lvs2 {
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + };
> +
> + };
> +};
> +
> +&tlmm {
> + gpio-reserved-ranges = <0 4>, <81 4>;
> +
> + touchpad: touchpad {
> + config {
> + pins = "gpio123";
> + bias-pull-up; /* pull up */
> + };
> + };
> +};
> +
> +&sdhc2 {
> + status = "okay";
> +
> + vmmc-supply = <&vreg_l21a_2p95>;
> + vqmmc-supply = <&vreg_l13a_2p95>;
> +
> + pinctrl-names = "default", "sleep";
> + pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
> + pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;
> +};
> +
> +&usb3 {
> + status = "okay";
> +};
> +
> +&usb3_dwc3 {
> + dr_mode = "host"; /* Force to host until we have Type-C hooked up */
> +};
> +
> +&usb3phy {
> + status = "okay";
> +
> + vdda-phy-supply = <&vreg_l1a_0p875>;
> + vdda-pll-supply = <&vreg_l2a_1p2>;
> +};
> diff --git a/arch/arm64/boot/dts/qcom/msm8998-lenovo-miix-630.dts b/arch/arm64/boot/dts/qcom/msm8998-lenovo-miix-630.dts
> new file mode 100644
> index 000000000000..407c6a32911c
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/msm8998-lenovo-miix-630.dts
> @@ -0,0 +1,30 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/* Copyright (c) 2019, Jeffrey Hugo. All rights reserved. */
> +
> +/dts-v1/;
> +
> +#include "msm8998-clamshell.dtsi"
> +
> +/ {
> + model = "Lenovo Miix 630";
> + compatible = "lenovo,miix-630", "qcom,msm8998";
> +};
> +
> +&blsp1_i2c6 {
> + status = "okay";
> +
> + keyboard@3a {
> + compatible = "hid-over-i2c";
> + interrupt-parent = <&tlmm>;
> + interrupts = <0x79 IRQ_TYPE_LEVEL_LOW>;
> + reg = <0x3a>;
> + hid-descr-addr = <0x0001>;
> +
> + pinctrl-names = "default";
> + pinctrl-0 = <&touchpad>;
> + };
> +};
> +
> +&sdhc2 {
> + cd-gpios = <&tlmm 95 GPIO_ACTIVE_HIGH>;
> +};
--
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
On Thu, Jun 6, 2019 at 1:25 AM Jeffrey Hugo <[email protected]> wrote:
>
> On Tue, May 21, 2019 at 10:42 AM Bjorn Andersson
> <[email protected]> wrote:
> >
> > On Tue 23 Apr 09:06 PDT 2019, Jeffrey Hugo wrote:
> >
> > > There needs to be coordination between hid-quirks and the elan_i2c driver
> > > about which devices are handled by what drivers. Currently, both use
> > > whitelists, which results in valid devices being unhandled by default,
> > > when they should not be rejected by hid-quirks. This is quickly becoming
> > > an issue.
> > >
> > > Since elan_i2c has a maintained whitelist of what devices it will handle,
> > > use that to implement a blacklist in hid-quirks so that only the devices
> > > that need to be handled by elan_i2c get rejected by hid-quirks, and
> > > everything else is handled by default. The downside is the whitelist and
> > > blacklist need to be kept in sync.
> > >
> >
> > Reviewed-by: Bjorn Andersson <[email protected]>
> >
> > Jiri, the two patches in this series doesn't have a build time
> > dependency, so if you take this one through your tree I'll take 2/2
> > through arm-soc.
>
> Ping? Is this good from the HID perspective? I would really like to
> see this queued for 5.3.
>
Sorry, this felt through the cracks.
I'm fine with the idea of the patch, but I just realized what bugged me:
we should instead have a static array of the various ACPI matches,
instead of duplicating the various strncmp.
So IMO, we should:
- merge patch 2/2 through Bjorn's tree (or with any changes he would request)
- have a v5 for the HID/input part with:
* a static array of the names to match against in hid-quirks.c
* separate the elan_i2c trivial change in its separate patch as
there are already a few changes committed in the input tree, which is
different from the HID tree. I don't expect any conflicts though, so
if Dmitry is fine, I can take the whole input/HID part through the HID
tree, but a separate patch would be more obvious in case of a
conflict.
Cheers,
Benjamin
> >
> > Regards,
> > Bjorn
> >
> > > Suggested-by: Benjamin Tissoires <[email protected]>
> > > Signed-off-by: Jeffrey Hugo <[email protected]>
> > > ---
> > > drivers/hid/hid-quirks.c | 64 ++++++++++++++++++++++++-----
> > > drivers/input/mouse/elan_i2c_core.c | 4 ++
> > > 2 files changed, 58 insertions(+), 10 deletions(-)
> > >
> > > diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
> > > index 77ffba48cc73..656485e08eb7 100644
> > > --- a/drivers/hid/hid-quirks.c
> > > +++ b/drivers/hid/hid-quirks.c
> > > @@ -987,17 +987,61 @@ bool hid_ignore(struct hid_device *hdev)
> > > break;
> > > case USB_VENDOR_ID_ELAN:
> > > /*
> > > - * Many Elan devices have a product id of 0x0401 and are handled
> > > - * by the elan_i2c input driver. But the ACPI HID ELAN0800 dev
> > > - * is not (and cannot be) handled by that driver ->
> > > - * Ignore all 0x0401 devs except for the ELAN0800 dev.
> > > + * Blacklist of everything that gets handled by the elan_i2c
> > > + * input driver. This should be kept in sync with the whitelist
> > > + * that exists in that driver. This avoids disabling valid
> > > + * touchpads and other ELAN devices.
> > > */
> > > - if (hdev->product == 0x0401 &&
> > > - strncmp(hdev->name, "ELAN0800", 8) != 0)
> > > - return true;
> > > - /* Same with product id 0x0400 */
> > > - if (hdev->product == 0x0400 &&
> > > - strncmp(hdev->name, "QTEC0001", 8) != 0)
> > > + if ((hdev->product == 0x0401 || hdev->product == 0x0400) &&
> > > + (strncmp(hdev->name, "ELAN0000", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0100", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0600", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0601", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0602", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0603", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0604", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0605", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0606", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0607", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0608", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0609", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN060B", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN060C", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN060F", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0610", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0611", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0612", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0613", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0614", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0615", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0616", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0617", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0618", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0619", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN061A", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN061B", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN061C", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN061D", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN061E", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN061F", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0620", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0621", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0622", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0623", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0624", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0625", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0626", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0627", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0628", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0629", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN062A", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN062B", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN062C", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN062D", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0631", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN0632", 8) == 0 ||
> > > + strncmp(hdev->name, "ELAN1000", 8) == 0 ||
> > > + strncmp(hdev->name, "elan,ekth3000", 13) == 0))
> > > return true;
> > > break;
> > > }
> > > diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c
> > > index f9525d6f0bfe..3ded19528cd4 100644
> > > --- a/drivers/input/mouse/elan_i2c_core.c
> > > +++ b/drivers/input/mouse/elan_i2c_core.c
> > > @@ -1332,6 +1332,10 @@ static const struct i2c_device_id elan_id[] = {
> > > };
> > > MODULE_DEVICE_TABLE(i2c, elan_id);
> > >
> > > +/*
> > > + * when these whtielists get updated, the corresponding blacklist in hid-quirks
> > > + * needs to be updated to match.
> > > + */
> > > #ifdef CONFIG_ACPI
> > > static const struct acpi_device_id elan_acpi_id[] = {
> > > { "ELAN0000", 0 },
> > > --
> > > 2.17.1
> > >
On Wed 05 Jun 22:50 PDT 2019, Lee Jones wrote:
> On Tue, 23 Apr 2019, Jeffrey Hugo wrote:
>
> > This adds the initial DT for the Lenovo Miix 630 laptop. Supported
> > functionality includes USB (host), microSD-card, keyboard, and trackpad.
> >
> > Signed-off-by: Jeffrey Hugo <[email protected]>
> > ---
> > arch/arm64/boot/dts/qcom/Makefile | 1 +
> > .../boot/dts/qcom/msm8998-clamshell.dtsi | 278 ++++++++++++++++++
> > .../boot/dts/qcom/msm8998-lenovo-miix-630.dts | 30 ++
>
> What's happening with this patch?
>
The thermal-zones are wrong, but I'm okay with an incremental patch for
that...
> It's been on the list a while now. I'm waiting for it to be accepted,
> since there are patches I wish to submit which are based on it.
>
> Who is responsible for merging these?
>
...so I've just been waiting for a conclusion on the HID patch before I
could pick this up.
Regards,
Bjorn
On Thu, 06 Jun 2019, Bjorn Andersson wrote:
> On Wed 05 Jun 22:50 PDT 2019, Lee Jones wrote:
>
> > On Tue, 23 Apr 2019, Jeffrey Hugo wrote:
> >
> > > This adds the initial DT for the Lenovo Miix 630 laptop. Supported
> > > functionality includes USB (host), microSD-card, keyboard, and trackpad.
> > >
> > > Signed-off-by: Jeffrey Hugo <[email protected]>
> > > ---
> > > arch/arm64/boot/dts/qcom/Makefile | 1 +
> > > .../boot/dts/qcom/msm8998-clamshell.dtsi | 278 ++++++++++++++++++
> > > .../boot/dts/qcom/msm8998-lenovo-miix-630.dts | 30 ++
> >
> > What's happening with this patch?
> >
>
> The thermal-zones are wrong, but I'm okay with an incremental patch for
> that...
I guess it would take you about 10 seconds to whip those out when
merging?
> > It's been on the list a while now. I'm waiting for it to be accepted,
> > since there are patches I wish to submit which are based on it.
> >
> > Who is responsible for merging these?
>
> ...so I've just been waiting for a conclusion on the HID patch before I
> could pick this up.
Aren't they orthogonal?
--
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
On 06/06/2019 10:13, Lee Jones wrote:
> On Thu, 06 Jun 2019, Bjorn Andersson wrote:
>
>> On Wed 05 Jun 22:50 PDT 2019, Lee Jones wrote:
>>
>>> On Tue, 23 Apr 2019, Jeffrey Hugo wrote:
>>>
>>>> This adds the initial DT for the Lenovo Miix 630 laptop. Supported
>>>> functionality includes USB (host), microSD-card, keyboard, and trackpad.
>>>>
>>>> Signed-off-by: Jeffrey Hugo <[email protected]>
>>>> ---
>>>> arch/arm64/boot/dts/qcom/Makefile | 1 +
>>>> .../boot/dts/qcom/msm8998-clamshell.dtsi | 278 ++++++++++++++++++
>>>> .../boot/dts/qcom/msm8998-lenovo-miix-630.dts | 30 ++
>>>
>>> What's happening with this patch?
>>>
>>
>> The thermal-zones are wrong, but I'm okay with an incremental patch for
>> that...
>
> I guess it would take you about 10 seconds to whip those out when
> merging?
https://git.kernel.org/pub/scm/linux/kernel/git/agross/linux.git/commit/?h=for-next&id=ad480e0149cfc10defe76e88354b977360adb7a1
AFAIU, the fixup is to just drop the thermal-zones section altogether.
Regards.
On Thu, 06 Jun 2019, Marc Gonzalez wrote:
> On 06/06/2019 10:13, Lee Jones wrote:
>
> > On Thu, 06 Jun 2019, Bjorn Andersson wrote:
> >
> >> On Wed 05 Jun 22:50 PDT 2019, Lee Jones wrote:
> >>
> >>> On Tue, 23 Apr 2019, Jeffrey Hugo wrote:
> >>>
> >>>> This adds the initial DT for the Lenovo Miix 630 laptop. Supported
> >>>> functionality includes USB (host), microSD-card, keyboard, and trackpad.
> >>>>
> >>>> Signed-off-by: Jeffrey Hugo <[email protected]>
> >>>> ---
> >>>> arch/arm64/boot/dts/qcom/Makefile | 1 +
> >>>> .../boot/dts/qcom/msm8998-clamshell.dtsi | 278 ++++++++++++++++++
> >>>> .../boot/dts/qcom/msm8998-lenovo-miix-630.dts | 30 ++
> >>>
> >>> What's happening with this patch?
> >>>
> >>
> >> The thermal-zones are wrong, but I'm okay with an incremental patch for
> >> that...
> >
> > I guess it would take you about 10 seconds to whip those out when
> > merging?
>
> https://git.kernel.org/pub/scm/linux/kernel/git/agross/linux.git/commit/?h=for-next&id=ad480e0149cfc10defe76e88354b977360adb7a1
>
> AFAIU, the fixup is to just drop the thermal-zones section altogether.
Yes, exactly. A 10 second job.
--
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
On Thu, Jun 6, 2019 at 2:13 AM Lee Jones <[email protected]> wrote:
>
> On Thu, 06 Jun 2019, Bjorn Andersson wrote:
>
> > On Wed 05 Jun 22:50 PDT 2019, Lee Jones wrote:
> >
> > > On Tue, 23 Apr 2019, Jeffrey Hugo wrote:
> > >
> > > > This adds the initial DT for the Lenovo Miix 630 laptop. Supported
> > > > functionality includes USB (host), microSD-card, keyboard, and trackpad.
> > > >
> > > > Signed-off-by: Jeffrey Hugo <[email protected]>
> > > > ---
> > > > arch/arm64/boot/dts/qcom/Makefile | 1 +
> > > > .../boot/dts/qcom/msm8998-clamshell.dtsi | 278 ++++++++++++++++++
> > > > .../boot/dts/qcom/msm8998-lenovo-miix-630.dts | 30 ++
> > >
> > > What's happening with this patch?
> > >
> >
> > The thermal-zones are wrong, but I'm okay with an incremental patch for
> > that...
>
> I guess it would take you about 10 seconds to whip those out when
> merging?
>
> > > It's been on the list a while now. I'm waiting for it to be accepted,
> > > since there are patches I wish to submit which are based on it.
> > >
> > > Who is responsible for merging these?
> >
> > ...so I've just been waiting for a conclusion on the HID patch before I
> > could pick this up.
>
> Aren't they orthogonal?
Eh, if the HID stuff changes, we'll probably have to change the DT.
Which isn't great.
I guess we could also merge this, and fix it up as necessary if there
is fall out from the HID stuff.
On Thu, Jun 6, 2019 at 1:07 AM Benjamin Tissoires
<[email protected]> wrote:
>
> On Thu, Jun 6, 2019 at 1:25 AM Jeffrey Hugo <[email protected]> wrote:
> >
> > On Tue, May 21, 2019 at 10:42 AM Bjorn Andersson
> > <[email protected]> wrote:
> > >
> > > On Tue 23 Apr 09:06 PDT 2019, Jeffrey Hugo wrote:
> > >
> > > > There needs to be coordination between hid-quirks and the elan_i2c driver
> > > > about which devices are handled by what drivers. Currently, both use
> > > > whitelists, which results in valid devices being unhandled by default,
> > > > when they should not be rejected by hid-quirks. This is quickly becoming
> > > > an issue.
> > > >
> > > > Since elan_i2c has a maintained whitelist of what devices it will handle,
> > > > use that to implement a blacklist in hid-quirks so that only the devices
> > > > that need to be handled by elan_i2c get rejected by hid-quirks, and
> > > > everything else is handled by default. The downside is the whitelist and
> > > > blacklist need to be kept in sync.
> > > >
> > >
> > > Reviewed-by: Bjorn Andersson <[email protected]>
> > >
> > > Jiri, the two patches in this series doesn't have a build time
> > > dependency, so if you take this one through your tree I'll take 2/2
> > > through arm-soc.
> >
> > Ping? Is this good from the HID perspective? I would really like to
> > see this queued for 5.3.
> >
>
> Sorry, this felt through the cracks.
No problem.
>
> I'm fine with the idea of the patch, but I just realized what bugged me:
> we should instead have a static array of the various ACPI matches,
> instead of duplicating the various strncmp.
>
> So IMO, we should:
> - merge patch 2/2 through Bjorn's tree (or with any changes he would request)
> - have a v5 for the HID/input part with:
> * a static array of the names to match against in hid-quirks.c
> * separate the elan_i2c trivial change in its separate patch as
> there are already a few changes committed in the input tree, which is
> different from the HID tree. I don't expect any conflicts though, so
> if Dmitry is fine, I can take the whole input/HID part through the HID
> tree, but a separate patch would be more obvious in case of a
> conflict.
Ok. Will respin today.
>
> Cheers,
> Benjamin
>
> > >
> > > Regards,
> > > Bjorn
> > >
> > > > Suggested-by: Benjamin Tissoires <[email protected]>
> > > > Signed-off-by: Jeffrey Hugo <[email protected]>
> > > > ---
> > > > drivers/hid/hid-quirks.c | 64 ++++++++++++++++++++++++-----
> > > > drivers/input/mouse/elan_i2c_core.c | 4 ++
> > > > 2 files changed, 58 insertions(+), 10 deletions(-)
> > > >
> > > > diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
> > > > index 77ffba48cc73..656485e08eb7 100644
> > > > --- a/drivers/hid/hid-quirks.c
> > > > +++ b/drivers/hid/hid-quirks.c
> > > > @@ -987,17 +987,61 @@ bool hid_ignore(struct hid_device *hdev)
> > > > break;
> > > > case USB_VENDOR_ID_ELAN:
> > > > /*
> > > > - * Many Elan devices have a product id of 0x0401 and are handled
> > > > - * by the elan_i2c input driver. But the ACPI HID ELAN0800 dev
> > > > - * is not (and cannot be) handled by that driver ->
> > > > - * Ignore all 0x0401 devs except for the ELAN0800 dev.
> > > > + * Blacklist of everything that gets handled by the elan_i2c
> > > > + * input driver. This should be kept in sync with the whitelist
> > > > + * that exists in that driver. This avoids disabling valid
> > > > + * touchpads and other ELAN devices.
> > > > */
> > > > - if (hdev->product == 0x0401 &&
> > > > - strncmp(hdev->name, "ELAN0800", 8) != 0)
> > > > - return true;
> > > > - /* Same with product id 0x0400 */
> > > > - if (hdev->product == 0x0400 &&
> > > > - strncmp(hdev->name, "QTEC0001", 8) != 0)
> > > > + if ((hdev->product == 0x0401 || hdev->product == 0x0400) &&
> > > > + (strncmp(hdev->name, "ELAN0000", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0100", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0600", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0601", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0602", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0603", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0604", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0605", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0606", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0607", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0608", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0609", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN060B", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN060C", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN060F", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0610", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0611", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0612", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0613", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0614", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0615", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0616", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0617", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0618", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0619", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN061A", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN061B", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN061C", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN061D", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN061E", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN061F", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0620", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0621", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0622", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0623", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0624", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0625", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0626", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0627", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0628", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0629", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN062A", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN062B", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN062C", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN062D", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0631", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN0632", 8) == 0 ||
> > > > + strncmp(hdev->name, "ELAN1000", 8) == 0 ||
> > > > + strncmp(hdev->name, "elan,ekth3000", 13) == 0))
> > > > return true;
> > > > break;
> > > > }
> > > > diff --git a/drivers/input/mouse/elan_i2c_core.c b/drivers/input/mouse/elan_i2c_core.c
> > > > index f9525d6f0bfe..3ded19528cd4 100644
> > > > --- a/drivers/input/mouse/elan_i2c_core.c
> > > > +++ b/drivers/input/mouse/elan_i2c_core.c
> > > > @@ -1332,6 +1332,10 @@ static const struct i2c_device_id elan_id[] = {
> > > > };
> > > > MODULE_DEVICE_TABLE(i2c, elan_id);
> > > >
> > > > +/*
> > > > + * when these whtielists get updated, the corresponding blacklist in hid-quirks
> > > > + * needs to be updated to match.
> > > > + */
> > > > #ifdef CONFIG_ACPI
> > > > static const struct acpi_device_id elan_acpi_id[] = {
> > > > { "ELAN0000", 0 },
> > > > --
> > > > 2.17.1
> > > >