* [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987
@ 2024-12-19 20:08 Maya Matuszczyk
2024-12-19 20:08 ` [PATCH v2 2/3] platform: arm64: Add driver for EC found in most X1E laptops Maya Matuszczyk
` (4 more replies)
0 siblings, 5 replies; 26+ messages in thread
From: Maya Matuszczyk @ 2024-12-19 20:08 UTC (permalink / raw)
To: Maya Matuszczyk, Rob Herring, Krzysztof Kozlowski, Conor Dooley
Cc: linux-arm-msm, devicetree, linux-kernel
This patch adds bindings for the EC firmware running on IT8987 present
on most of X1E80100 devices
Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
---
.../bindings/platform/qcom,x1e-it8987-ec.yaml | 52 +++++++++++++++++++
1 file changed, 52 insertions(+)
create mode 100644 Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
diff --git a/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml b/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
new file mode 100644
index 000000000000..4a4f6eb63072
--- /dev/null
+++ b/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
@@ -0,0 +1,52 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/platform/qcom,x1e-it8987-ec.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Qualcomm Embedded Controller on IT8987 chip.
+
+maintainers:
+ - Maya Matuszczyk <maccraft123mc@gmail.com>
+
+description:
+ Most x1e80100 laptops have an EC running on IT8987 MCU chip. The EC controls
+ minor functions, like fans, power LED, and on some laptops it also handles
+ keyboard hotkeys.
+
+properties:
+ compatible:
+ oneOf:
+ - const: qcom,x1e-it8987-ec
+ - items:
+ - const: lenovo,yoga-slim7x-ec
+ - const: qcom,x1e-it8987-ec
+
+ reg:
+ const: 0x76
+
+ interrupts:
+ maxItems: 1
+
+required:
+ - compatible
+ - reg
+ - interrupts
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/interrupt-controller/irq.h>
+ i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ embedded-controller@76 {
+ compatible = "lenovo,yoga-slim7x-ec", "qcom,x1e-it8987-ec";
+ reg = <0x76>;
+
+ interrupts-extended = <&tlmm 66 IRQ_TYPE_LEVEL_HIGH>;
+ };
+ };
+...
--
2.45.2
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v2 2/3] platform: arm64: Add driver for EC found in most X1E laptops
2024-12-19 20:08 [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987 Maya Matuszczyk
@ 2024-12-19 20:08 ` Maya Matuszczyk
2024-12-19 20:43 ` Bryan O'Donoghue
` (2 more replies)
2024-12-19 20:08 ` [PATCH v2 3/3] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add the EC Maya Matuszczyk
` (3 subsequent siblings)
4 siblings, 3 replies; 26+ messages in thread
From: Maya Matuszczyk @ 2024-12-19 20:08 UTC (permalink / raw)
To: Hans de Goede, Ilpo Järvinen, Bryan O'Donoghue,
Maya Matuszczyk, Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross
Cc: linux-arm-msm, linux-kernel, platform-driver-x86, rust-for-linux
Currently it features only reporting that the AP is going to suspend,
which results in keyboard backlight turning off and the power LED
slowly blinking on the Lenovo Yoga Slim 7x.
Honor Magicbook Art 14 and Lenovo Yoga Slim 7x are known to have
firmware with extensions which would need appropriate handling.
For reverse engineering the firmware on them I have written a Rust
utility:
https://github.com/Maccraft123/it8987-qcom-tool.git
Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
---
MAINTAINERS | 6 +
drivers/platform/arm64/Kconfig | 8 ++
drivers/platform/arm64/Makefile | 1 +
drivers/platform/arm64/qcom-x1e-it8987.c | 158 +++++++++++++++++++++++
4 files changed, 173 insertions(+)
create mode 100644 drivers/platform/arm64/qcom-x1e-it8987.c
diff --git a/MAINTAINERS b/MAINTAINERS
index b878ddc99f94..08d170e2e1e3 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -12890,6 +12890,12 @@ S: Maintained
W: http://legousb.sourceforge.net/
F: drivers/usb/misc/legousbtower.c
+QCOM IT8987 EC DRIVER
+M: Maya Matuszczyk <maccraft123mc@gmail.com>
+S: Maintained
+F: Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
+F: drivers/platform/arm64/qcom-x1e-it8987.c
+
LETSKETCH HID TABLET DRIVER
M: Hans de Goede <hdegoede@redhat.com>
L: linux-input@vger.kernel.org
diff --git a/drivers/platform/arm64/Kconfig b/drivers/platform/arm64/Kconfig
index f88395ea3376..ebb7b4f70ca0 100644
--- a/drivers/platform/arm64/Kconfig
+++ b/drivers/platform/arm64/Kconfig
@@ -49,4 +49,12 @@ config EC_LENOVO_YOGA_C630
Say M or Y here to include this support.
+config EC_QCOM_X1E_IT8987
+ tristate "Embedded Controller driver for most X1E80100 laptops"
+ depends on ARCH_QCOM || COMPILE_TEST
+ depends on I2C
+ help
+ This driver currently supports reporting device suspend to the EC so it
+ can take appropriate actions.
+
endif # ARM64_PLATFORM_DEVICES
diff --git a/drivers/platform/arm64/Makefile b/drivers/platform/arm64/Makefile
index b2ae9114fdd8..b9aa195bc1e6 100644
--- a/drivers/platform/arm64/Makefile
+++ b/drivers/platform/arm64/Makefile
@@ -7,3 +7,4 @@
obj-$(CONFIG_EC_ACER_ASPIRE1) += acer-aspire1-ec.o
obj-$(CONFIG_EC_LENOVO_YOGA_C630) += lenovo-yoga-c630.o
+obj-$(CONFIG_EC_QCOM_X1E_IT8987) += qcom-x1e-it8987.o
diff --git a/drivers/platform/arm64/qcom-x1e-it8987.c b/drivers/platform/arm64/qcom-x1e-it8987.c
new file mode 100644
index 000000000000..d27067d6326a
--- /dev/null
+++ b/drivers/platform/arm64/qcom-x1e-it8987.c
@@ -0,0 +1,158 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2024 Maya Matuszczyk <maccraft123mc@gmail.com>
+ */
+#include <linux/i2c.h>
+#include <linux/module.h>
+#include <linux/input.h>
+#include <linux/input/sparse-keymap.h>
+
+#define EC_IRQ_REASON_REG 0x05
+#define EC_SUSPEND_RESUME_REG 0x23
+#define EC_IRQ_ENABLE_REG 0x35
+
+#define EC_NOTIFY_SUSPEND_ENTER 0x01
+#define EC_NOTIFY_SUSPEND_EXIT 0x00
+#define EC_NOTIFY_SCREEN_OFF 0x03
+#define EC_NOTIFY_SCREEN_ON 0x04
+
+#define EC_IRQ_MICMUTE_BUTTON 0x04
+#define EC_IRQ_FAN1_STATUS_CHANGE 0x30
+#define EC_IRQ_FAN2_STATUS_CHANGE 0x31
+#define EC_IRQ_FAN1_SPEED_CHANGE 0x32
+#define EC_IRQ_FAN2_SPEED_CHANGE 0x33
+#define EC_IRQ_COMPLETED_LUT_UPDATE 0x34
+#define EC_IRQ_COMPLETED_FAN_PROFILE_SWITCH 0x35
+#define EC_IRQ_THERMISTOR_1_TEMP_THRESHOLD_CROSS 0x36
+#define EC_IRQ_THERMISTOR_2_TEMP_THRESHOLD_CROSS 0x37
+#define EC_IRQ_THERMISTOR_3_TEMP_THRESHOLD_CROSS 0x38
+#define EC_IRQ_THERMISTOR_4_TEMP_THRESHOLD_CROSS 0x39
+#define EC_IRQ_THERMISTOR_5_TEMP_THRESHOLD_CROSS 0x3a
+#define EC_IRQ_THERMISTOR_6_TEMP_THRESHOLD_CROSS 0x3b
+#define EC_IRQ_THERMISTOR_7_TEMP_THRESHOLD_CROSS 0x3c
+#define EC_IRQ_RECOVERED_FROM_RESET 0x3d
+
+struct qcom_x1e_it8987_ec {
+ struct i2c_client *client;
+ struct input_dev *idev;
+ struct mutex lock;
+};
+
+static irqreturn_t qcom_x1e_it8987_ec_irq(int irq, void *data)
+{
+ struct qcom_x1e_it8987_ec *ec = data;
+ struct device *dev = &ec->client->dev;
+ int val;
+
+ guard(mutex)(&ec->lock);
+
+ val = i2c_smbus_read_byte_data(ec->client, EC_IRQ_REASON_REG);
+ if (val < 0) {
+ dev_err(dev, "Failed to get EC IRQ reason: %d\n", val);
+ return IRQ_HANDLED;
+ }
+
+ dev_info(dev, "Unhandled EC IRQ reason: %d\n", val);
+
+ return IRQ_HANDLED;
+}
+
+static int qcom_x1e_it8987_ec_probe(struct i2c_client *client)
+{
+ struct device *dev = &client->dev;
+ struct qcom_x1e_it8987_ec *ec;
+ int ret;
+
+ ec = devm_kzalloc(dev, sizeof(*ec), GFP_KERNEL);
+ if (!ec)
+ return -ENOMEM;
+
+ mutex_init(&ec->lock);
+ ec->client = client;
+
+ ret = devm_request_threaded_irq(dev, client->irq,
+ NULL, qcom_x1e_it8987_ec_irq,
+ IRQF_ONESHOT, "qcom_x1e_it8987_ec", ec);
+ if (ret < 0)
+ return dev_err_probe(dev, ret, "Unable to request irq\n");
+
+ ret = i2c_smbus_write_byte_data(client, EC_IRQ_ENABLE_REG, 0x01);
+ if (ret < 0)
+ return dev_err_probe(dev, ret, "Failed to enable interrupts\n");
+
+ return 0;
+}
+
+static void qcom_x1e_it8987_ec_remove(struct i2c_client *client)
+{
+ struct device *dev = &client->dev;
+ int ret;
+
+ ret = i2c_smbus_write_byte_data(client, EC_IRQ_ENABLE_REG, 0x00);
+ if (ret < 0)
+ dev_err(dev, "Failed to disable interrupts: %d\n", ret);
+}
+
+static int qcom_x1e_it8987_ec_suspend(struct device *dev)
+{
+ struct i2c_client *client = to_i2c_client(dev);
+ int ret;
+
+ ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SCREEN_OFF);
+ if (ret)
+ return ret;
+
+ ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SUSPEND_ENTER);
+ if (ret)
+ return ret;
+
+ return 0;
+}
+
+static int qcom_x1e_it8987_ec_resume(struct device *dev)
+{
+ struct i2c_client *client = to_i2c_client(dev);
+ int ret;
+
+ ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SUSPEND_EXIT);
+ if (ret)
+ return ret;
+
+ ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SCREEN_ON);
+ if (ret)
+ return ret;
+
+ return 0;
+}
+
+static const struct of_device_id qcom_x1e_it8987_ec_of_match[] = {
+ { .compatible = "lenovo,yoga-slim7x-ec" },
+ { .compatible = "qcom,x1e-it9897-ec" },
+ {}
+};
+MODULE_DEVICE_TABLE(of, qcom_x1e_it8987_ec_of_match);
+
+static const struct i2c_device_id qcom_x1e_it8987_ec_i2c_id_table[] = {
+ { "qcom-x1e-it8987-ec", },
+ {}
+};
+MODULE_DEVICE_TABLE(i2c, qcom_x1e_it8987_ec_i2c_id_table);
+
+static DEFINE_SIMPLE_DEV_PM_OPS(qcom_x1e_it8987_ec_pm_ops,
+ qcom_x1e_it8987_ec_suspend,
+ qcom_x1e_it8987_ec_resume);
+
+static struct i2c_driver qcom_x1e_it8987_ec_i2c_driver = {
+ .driver = {
+ .name = "yoga-slim7x-ec",
+ .of_match_table = qcom_x1e_it8987_ec_of_match,
+ .pm = &qcom_x1e_it8987_ec_pm_ops
+ },
+ .probe = qcom_x1e_it8987_ec_probe,
+ .remove = qcom_x1e_it8987_ec_remove,
+ .id_table = qcom_x1e_it8987_ec_i2c_id_table,
+};
+module_i2c_driver(qcom_x1e_it8987_ec_i2c_driver);
+
+MODULE_DESCRIPTION("Lenovo Yoga Slim 7x Embedded Controller");
+MODULE_LICENSE("GPL");
--
2.45.2
^ permalink raw reply related [flat|nested] 26+ messages in thread
* [PATCH v2 3/3] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add the EC
2024-12-19 20:08 [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987 Maya Matuszczyk
2024-12-19 20:08 ` [PATCH v2 2/3] platform: arm64: Add driver for EC found in most X1E laptops Maya Matuszczyk
@ 2024-12-19 20:08 ` Maya Matuszczyk
2024-12-20 11:52 ` Aiqun(Maria) Yu
2024-12-19 23:40 ` [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987 Rob Herring (Arm)
` (2 subsequent siblings)
4 siblings, 1 reply; 26+ messages in thread
From: Maya Matuszczyk @ 2024-12-19 20:08 UTC (permalink / raw)
To: Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley
Cc: linux-arm-msm, Maya Matuszczyk, devicetree, linux-kernel
Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
---
.../dts/qcom/x1e80100-lenovo-yoga-slim7x.dts | 22 +++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
index 0cdaff9c8cf0..dfe009613b0c 100644
--- a/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
+++ b/arch/arm64/boot/dts/qcom/x1e80100-lenovo-yoga-slim7x.dts
@@ -538,6 +538,22 @@ keyboard@3a {
};
};
+&i2c5 {
+ clock-frequency = <400000>;
+
+ status = "okay";
+
+ embedded-controller@76 {
+ compatible = "lenovo,yoga-slim7x-ec", "qcom,x1e-it8987-ec";
+ reg = <0x76>;
+
+ interrupts-extended = <&tlmm 66 IRQ_TYPE_EDGE_FALLING>;
+
+ pinctrl-0 = <&ec_int_n_default>;
+ pinctrl-names = "default";
+ };
+};
+
&i2c8 {
clock-frequency = <400000>;
@@ -796,6 +812,12 @@ &tlmm {
<44 4>, /* SPI (TPM) */
<238 1>; /* UFS Reset */
+ ec_int_n_default: ec-int-n-state {
+ pins = "gpio66";
+ function = "gpio";
+ bias-disable;
+ };
+
edp_reg_en: edp-reg-en-state {
pins = "gpio70";
function = "gpio";
--
2.45.2
^ permalink raw reply related [flat|nested] 26+ messages in thread
* Re: [PATCH v2 2/3] platform: arm64: Add driver for EC found in most X1E laptops
2024-12-19 20:08 ` [PATCH v2 2/3] platform: arm64: Add driver for EC found in most X1E laptops Maya Matuszczyk
@ 2024-12-19 20:43 ` Bryan O'Donoghue
2024-12-19 20:58 ` Maya Matuszczyk
2024-12-22 6:35 ` Krzysztof Kozlowski
2024-12-20 19:01 ` Stephan Gerhold
2024-12-22 6:34 ` Krzysztof Kozlowski
2 siblings, 2 replies; 26+ messages in thread
From: Bryan O'Donoghue @ 2024-12-19 20:43 UTC (permalink / raw)
To: Maya Matuszczyk, Hans de Goede, Ilpo Järvinen, Miguel Ojeda,
Alex Gaynor, Boqun Feng, Gary Guo, Björn Roy Baron,
Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross
Cc: linux-arm-msm, linux-kernel, platform-driver-x86, rust-for-linux
On 19/12/2024 20:08, Maya Matuszczyk wrote:
> Currently it features only reporting that the AP is going to suspend,
> which results in keyboard backlight turning off and the power LED
> slowly blinking on the Lenovo Yoga Slim 7x.
>
> Honor Magicbook Art 14 and Lenovo Yoga Slim 7x are known to have
> firmware with extensions which would need appropriate handling.
> For reverse engineering the firmware on them I have written a Rust
> utility:
>
> https://github.com/Maccraft123/it8987-qcom-tool.git
>
> Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
> ---
> MAINTAINERS | 6 +
> drivers/platform/arm64/Kconfig | 8 ++
> drivers/platform/arm64/Makefile | 1 +
> drivers/platform/arm64/qcom-x1e-it8987.c | 158 +++++++++++++++++++++++
> 4 files changed, 173 insertions(+)
> create mode 100644 drivers/platform/arm64/qcom-x1e-it8987.c
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index b878ddc99f94..08d170e2e1e3 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -12890,6 +12890,12 @@ S: Maintained
> W: http://legousb.sourceforge.net/
> F: drivers/usb/misc/legousbtower.c
>
> +QCOM IT8987 EC DRIVER
> +M: Maya Matuszczyk <maccraft123mc@gmail.com>
> +S: Maintained
> +F: Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
> +F: drivers/platform/arm64/qcom-x1e-it8987.c
> +
> LETSKETCH HID TABLET DRIVER
> M: Hans de Goede <hdegoede@redhat.com>
> L: linux-input@vger.kernel.org
> diff --git a/drivers/platform/arm64/Kconfig b/drivers/platform/arm64/Kconfig
> index f88395ea3376..ebb7b4f70ca0 100644
> --- a/drivers/platform/arm64/Kconfig
> +++ b/drivers/platform/arm64/Kconfig
> @@ -49,4 +49,12 @@ config EC_LENOVO_YOGA_C630
>
> Say M or Y here to include this support.
>
> +config EC_QCOM_X1E_IT8987
> + tristate "Embedded Controller driver for most X1E80100 laptops"
> + depends on ARCH_QCOM || COMPILE_TEST
> + depends on I2C
> + help
> + This driver currently supports reporting device suspend to the EC so it
> + can take appropriate actions.
> +
> endif # ARM64_PLATFORM_DEVICES
> diff --git a/drivers/platform/arm64/Makefile b/drivers/platform/arm64/Makefile
> index b2ae9114fdd8..b9aa195bc1e6 100644
> --- a/drivers/platform/arm64/Makefile
> +++ b/drivers/platform/arm64/Makefile
> @@ -7,3 +7,4 @@
>
> obj-$(CONFIG_EC_ACER_ASPIRE1) += acer-aspire1-ec.o
> obj-$(CONFIG_EC_LENOVO_YOGA_C630) += lenovo-yoga-c630.o
> +obj-$(CONFIG_EC_QCOM_X1E_IT8987) += qcom-x1e-it8987.o
> diff --git a/drivers/platform/arm64/qcom-x1e-it8987.c b/drivers/platform/arm64/qcom-x1e-it8987.c
> new file mode 100644
> index 000000000000..d27067d6326a
> --- /dev/null
> +++ b/drivers/platform/arm64/qcom-x1e-it8987.c
> @@ -0,0 +1,158 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/*
> + * Copyright (c) 2024 Maya Matuszczyk <maccraft123mc@gmail.com>
> + */
> +#include <linux/i2c.h>
> +#include <linux/module.h>
> +#include <linux/input.h>
> +#include <linux/input/sparse-keymap.h>
Your includes should be alphabetised.
> +
> +#define EC_IRQ_REASON_REG 0x05
> +#define EC_SUSPEND_RESUME_REG 0x23
> +#define EC_IRQ_ENABLE_REG 0x35
> +
> +#define EC_NOTIFY_SUSPEND_ENTER 0x01
> +#define EC_NOTIFY_SUSPEND_EXIT 0x00
> +#define EC_NOTIFY_SCREEN_OFF 0x03
> +#define EC_NOTIFY_SCREEN_ON 0x04
> +
> +#define EC_IRQ_MICMUTE_BUTTON 0x04
> +#define EC_IRQ_FAN1_STATUS_CHANGE 0x30
> +#define EC_IRQ_FAN2_STATUS_CHANGE 0x31
> +#define EC_IRQ_FAN1_SPEED_CHANGE 0x32
> +#define EC_IRQ_FAN2_SPEED_CHANGE 0x33
> +#define EC_IRQ_COMPLETED_LUT_UPDATE 0x34
> +#define EC_IRQ_COMPLETED_FAN_PROFILE_SWITCH 0x35
> +#define EC_IRQ_THERMISTOR_1_TEMP_THRESHOLD_CROSS 0x36
> +#define EC_IRQ_THERMISTOR_2_TEMP_THRESHOLD_CROSS 0x37
> +#define EC_IRQ_THERMISTOR_3_TEMP_THRESHOLD_CROSS 0x38
> +#define EC_IRQ_THERMISTOR_4_TEMP_THRESHOLD_CROSS 0x39
> +#define EC_IRQ_THERMISTOR_5_TEMP_THRESHOLD_CROSS 0x3a
> +#define EC_IRQ_THERMISTOR_6_TEMP_THRESHOLD_CROSS 0x3b
> +#define EC_IRQ_THERMISTOR_7_TEMP_THRESHOLD_CROSS 0x3c
> +#define EC_IRQ_RECOVERED_FROM_RESET 0x3d
> +
> +struct qcom_x1e_it8987_ec {
> + struct i2c_client *client;
> + struct input_dev *idev;
> + struct mutex lock;
> +};
> +
> +static irqreturn_t qcom_x1e_it8987_ec_irq(int irq, void *data)
> +{
> + struct qcom_x1e_it8987_ec *ec = data;
> + struct device *dev = &ec->client->dev;
> + int val;
> +
> + guard(mutex)(&ec->lock);
What's the thing that can execute at the same time as this procedure -
there doesn't appear to be any concurrent candidate in this patch.
> +
> + val = i2c_smbus_read_byte_data(ec->client, EC_IRQ_REASON_REG);
> + if (val < 0) {
> + dev_err(dev, "Failed to get EC IRQ reason: %d\n", val);
> + return IRQ_HANDLED;
> + }
> +
> + dev_info(dev, "Unhandled EC IRQ reason: %d\n", val);
Should an unhandled IRQ be an info or an err ?
> +
> + return IRQ_HANDLED;
> +}
> +
> +static int qcom_x1e_it8987_ec_probe(struct i2c_client *client)
> +{
> + struct device *dev = &client->dev;
> + struct qcom_x1e_it8987_ec *ec;
> + int ret;
> +
> + ec = devm_kzalloc(dev, sizeof(*ec), GFP_KERNEL);
> + if (!ec)
> + return -ENOMEM;
> +
> + mutex_init(&ec->lock);
> + ec->client = client;
> +
> + ret = devm_request_threaded_irq(dev, client->irq,
> + NULL, qcom_x1e_it8987_ec_irq,
> + IRQF_ONESHOT, "qcom_x1e_it8987_ec", ec);
> + if (ret < 0)
> + return dev_err_probe(dev, ret, "Unable to request irq\n");
> +
> + ret = i2c_smbus_write_byte_data(client, EC_IRQ_ENABLE_REG, 0x01);
> + if (ret < 0)
> + return dev_err_probe(dev, ret, "Failed to enable interrupts\n");
> +
> + return 0;
> +}
> +
> +static void qcom_x1e_it8987_ec_remove(struct i2c_client *client)
> +{
> + struct device *dev = &client->dev;
> + int ret;
> +
> + ret = i2c_smbus_write_byte_data(client, EC_IRQ_ENABLE_REG, 0x00);
> + if (ret < 0)
> + dev_err(dev, "Failed to disable interrupts: %d\n", ret);
> +}
> +
> +static int qcom_x1e_it8987_ec_suspend(struct device *dev)
> +{
> + struct i2c_client *client = to_i2c_client(dev);
> + int ret;
> +
> + ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SCREEN_OFF);
> + if (ret)
> + return ret;
> +
> + ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SUSPEND_ENTER);
> + if (ret)
> + return ret;
> +
> + return 0;
> +}
> +
> +static int qcom_x1e_it8987_ec_resume(struct device *dev)
> +{
> + struct i2c_client *client = to_i2c_client(dev);
> + int ret;
> +
> + ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SUSPEND_EXIT);
> + if (ret)
> + return ret;
> +
> + ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SCREEN_ON);
> + if (ret)
> + return ret;
> +
> + return 0;
> +}
> +
> +static const struct of_device_id qcom_x1e_it8987_ec_of_match[] = {
> + { .compatible = "lenovo,yoga-slim7x-ec" },
> + { .compatible = "qcom,x1e-it9897-ec" },
> + {}
> +};
> +MODULE_DEVICE_TABLE(of, qcom_x1e_it8987_ec_of_match);
> +
> +static const struct i2c_device_id qcom_x1e_it8987_ec_i2c_id_table[] = {
> + { "qcom-x1e-it8987-ec", },
> + {}
> +};
> +MODULE_DEVICE_TABLE(i2c, qcom_x1e_it8987_ec_i2c_id_table);
> +
> +static DEFINE_SIMPLE_DEV_PM_OPS(qcom_x1e_it8987_ec_pm_ops,
> + qcom_x1e_it8987_ec_suspend,
> + qcom_x1e_it8987_ec_resume);
> +
> +static struct i2c_driver qcom_x1e_it8987_ec_i2c_driver = {
> + .driver = {
> + .name = "yoga-slim7x-ec",
> + .of_match_table = qcom_x1e_it8987_ec_of_match,
> + .pm = &qcom_x1e_it8987_ec_pm_ops
> + },
> + .probe = qcom_x1e_it8987_ec_probe,
> + .remove = qcom_x1e_it8987_ec_remove,
> + .id_table = qcom_x1e_it8987_ec_i2c_id_table,
> +};
> +module_i2c_driver(qcom_x1e_it8987_ec_i2c_driver);
> +
> +MODULE_DESCRIPTION("Lenovo Yoga Slim 7x Embedded Controller");
> +MODULE_LICENSE("GPL");
Otherwise looks pretty good to me, nice hacking :)
---
bod
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 2/3] platform: arm64: Add driver for EC found in most X1E laptops
2024-12-19 20:43 ` Bryan O'Donoghue
@ 2024-12-19 20:58 ` Maya Matuszczyk
2024-12-20 11:50 ` Aiqun(Maria) Yu
2024-12-22 6:35 ` Krzysztof Kozlowski
1 sibling, 1 reply; 26+ messages in thread
From: Maya Matuszczyk @ 2024-12-19 20:58 UTC (permalink / raw)
To: Bryan O'Donoghue
Cc: Hans de Goede, Ilpo Järvinen, Miguel Ojeda, Alex Gaynor,
Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Alice Ryhl, Trevor Gross, linux-arm-msm,
linux-kernel, platform-driver-x86, rust-for-linux
czw., 19 gru 2024 o 21:43 Bryan O'Donoghue
<bryan.odonoghue@linaro.org> napisał(a):
>
> On 19/12/2024 20:08, Maya Matuszczyk wrote:
> > Currently it features only reporting that the AP is going to suspend,
> > which results in keyboard backlight turning off and the power LED
> > slowly blinking on the Lenovo Yoga Slim 7x.
> >
> > Honor Magicbook Art 14 and Lenovo Yoga Slim 7x are known to have
> > firmware with extensions which would need appropriate handling.
> > For reverse engineering the firmware on them I have written a Rust
> > utility:
> >
> > https://github.com/Maccraft123/it8987-qcom-tool.git
> >
> > Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
> > ---
> > MAINTAINERS | 6 +
> > drivers/platform/arm64/Kconfig | 8 ++
> > drivers/platform/arm64/Makefile | 1 +
> > drivers/platform/arm64/qcom-x1e-it8987.c | 158 +++++++++++++++++++++++
> > 4 files changed, 173 insertions(+)
> > create mode 100644 drivers/platform/arm64/qcom-x1e-it8987.c
> >
> > diff --git a/MAINTAINERS b/MAINTAINERS
> > index b878ddc99f94..08d170e2e1e3 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -12890,6 +12890,12 @@ S: Maintained
> > W: http://legousb.sourceforge.net/
> > F: drivers/usb/misc/legousbtower.c
> >
> > +QCOM IT8987 EC DRIVER
> > +M: Maya Matuszczyk <maccraft123mc@gmail.com>
> > +S: Maintained
> > +F: Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
> > +F: drivers/platform/arm64/qcom-x1e-it8987.c
> > +
> > LETSKETCH HID TABLET DRIVER
> > M: Hans de Goede <hdegoede@redhat.com>
> > L: linux-input@vger.kernel.org
> > diff --git a/drivers/platform/arm64/Kconfig b/drivers/platform/arm64/Kconfig
> > index f88395ea3376..ebb7b4f70ca0 100644
> > --- a/drivers/platform/arm64/Kconfig
> > +++ b/drivers/platform/arm64/Kconfig
> > @@ -49,4 +49,12 @@ config EC_LENOVO_YOGA_C630
> >
> > Say M or Y here to include this support.
> >
> > +config EC_QCOM_X1E_IT8987
> > + tristate "Embedded Controller driver for most X1E80100 laptops"
> > + depends on ARCH_QCOM || COMPILE_TEST
> > + depends on I2C
> > + help
> > + This driver currently supports reporting device suspend to the EC so it
> > + can take appropriate actions.
> > +
> > endif # ARM64_PLATFORM_DEVICES
> > diff --git a/drivers/platform/arm64/Makefile b/drivers/platform/arm64/Makefile
> > index b2ae9114fdd8..b9aa195bc1e6 100644
> > --- a/drivers/platform/arm64/Makefile
> > +++ b/drivers/platform/arm64/Makefile
> > @@ -7,3 +7,4 @@
> >
> > obj-$(CONFIG_EC_ACER_ASPIRE1) += acer-aspire1-ec.o
> > obj-$(CONFIG_EC_LENOVO_YOGA_C630) += lenovo-yoga-c630.o
> > +obj-$(CONFIG_EC_QCOM_X1E_IT8987) += qcom-x1e-it8987.o
> > diff --git a/drivers/platform/arm64/qcom-x1e-it8987.c b/drivers/platform/arm64/qcom-x1e-it8987.c
> > new file mode 100644
> > index 000000000000..d27067d6326a
> > --- /dev/null
> > +++ b/drivers/platform/arm64/qcom-x1e-it8987.c
> > @@ -0,0 +1,158 @@
> > +// SPDX-License-Identifier: GPL-2.0-only
> > +/*
> > + * Copyright (c) 2024 Maya Matuszczyk <maccraft123mc@gmail.com>
> > + */
> > +#include <linux/i2c.h>
> > +#include <linux/module.h>
> > +#include <linux/input.h>
> > +#include <linux/input/sparse-keymap.h>
>
> Your includes should be alphabetised.
>
> > +
> > +#define EC_IRQ_REASON_REG 0x05
> > +#define EC_SUSPEND_RESUME_REG 0x23
> > +#define EC_IRQ_ENABLE_REG 0x35
> > +
> > +#define EC_NOTIFY_SUSPEND_ENTER 0x01
> > +#define EC_NOTIFY_SUSPEND_EXIT 0x00
> > +#define EC_NOTIFY_SCREEN_OFF 0x03
> > +#define EC_NOTIFY_SCREEN_ON 0x04
> > +
> > +#define EC_IRQ_MICMUTE_BUTTON 0x04
> > +#define EC_IRQ_FAN1_STATUS_CHANGE 0x30
> > +#define EC_IRQ_FAN2_STATUS_CHANGE 0x31
> > +#define EC_IRQ_FAN1_SPEED_CHANGE 0x32
> > +#define EC_IRQ_FAN2_SPEED_CHANGE 0x33
> > +#define EC_IRQ_COMPLETED_LUT_UPDATE 0x34
> > +#define EC_IRQ_COMPLETED_FAN_PROFILE_SWITCH 0x35
> > +#define EC_IRQ_THERMISTOR_1_TEMP_THRESHOLD_CROSS 0x36
> > +#define EC_IRQ_THERMISTOR_2_TEMP_THRESHOLD_CROSS 0x37
> > +#define EC_IRQ_THERMISTOR_3_TEMP_THRESHOLD_CROSS 0x38
> > +#define EC_IRQ_THERMISTOR_4_TEMP_THRESHOLD_CROSS 0x39
> > +#define EC_IRQ_THERMISTOR_5_TEMP_THRESHOLD_CROSS 0x3a
> > +#define EC_IRQ_THERMISTOR_6_TEMP_THRESHOLD_CROSS 0x3b
> > +#define EC_IRQ_THERMISTOR_7_TEMP_THRESHOLD_CROSS 0x3c
> > +#define EC_IRQ_RECOVERED_FROM_RESET 0x3d
> > +
> > +struct qcom_x1e_it8987_ec {
> > + struct i2c_client *client;
> > + struct input_dev *idev;
> > + struct mutex lock;
> > +};
> > +
> > +static irqreturn_t qcom_x1e_it8987_ec_irq(int irq, void *data)
> > +{
> > + struct qcom_x1e_it8987_ec *ec = data;
> > + struct device *dev = &ec->client->dev;
> > + int val;
> > +
> > + guard(mutex)(&ec->lock);
>
> What's the thing that can execute at the same time as this procedure -
> there doesn't appear to be any concurrent candidate in this patch.
The user could suspend the laptop and the EC could fire an IRQ at the same
time... I'll need to add mutex locking to suspend/resume functions
> > +
> > + val = i2c_smbus_read_byte_data(ec->client, EC_IRQ_REASON_REG);
> > + if (val < 0) {
> > + dev_err(dev, "Failed to get EC IRQ reason: %d\n", val);
> > + return IRQ_HANDLED;
> > + }
> > +
> > + dev_info(dev, "Unhandled EC IRQ reason: %d\n", val);
>
> Should an unhandled IRQ be an info or an err ?
I don't know, it's "unimplemented but doesn't really matter"
>
> > +
> > + return IRQ_HANDLED;
> > +}
> > +
> > +static int qcom_x1e_it8987_ec_probe(struct i2c_client *client)
> > +{
> > + struct device *dev = &client->dev;
> > + struct qcom_x1e_it8987_ec *ec;
> > + int ret;
> > +
> > + ec = devm_kzalloc(dev, sizeof(*ec), GFP_KERNEL);
> > + if (!ec)
> > + return -ENOMEM;
> > +
> > + mutex_init(&ec->lock);
> > + ec->client = client;
> > +
> > + ret = devm_request_threaded_irq(dev, client->irq,
> > + NULL, qcom_x1e_it8987_ec_irq,
> > + IRQF_ONESHOT, "qcom_x1e_it8987_ec", ec);
> > + if (ret < 0)
> > + return dev_err_probe(dev, ret, "Unable to request irq\n");
> > +
> > + ret = i2c_smbus_write_byte_data(client, EC_IRQ_ENABLE_REG, 0x01);
> > + if (ret < 0)
> > + return dev_err_probe(dev, ret, "Failed to enable interrupts\n");
> > +
> > + return 0;
> > +}
> > +
> > +static void qcom_x1e_it8987_ec_remove(struct i2c_client *client)
> > +{
> > + struct device *dev = &client->dev;
> > + int ret;
> > +
> > + ret = i2c_smbus_write_byte_data(client, EC_IRQ_ENABLE_REG, 0x00);
> > + if (ret < 0)
> > + dev_err(dev, "Failed to disable interrupts: %d\n", ret);
> > +}
> > +
> > +static int qcom_x1e_it8987_ec_suspend(struct device *dev)
> > +{
> > + struct i2c_client *client = to_i2c_client(dev);
> > + int ret;
> > +
> > + ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SCREEN_OFF);
> > + if (ret)
> > + return ret;
> > +
> > + ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SUSPEND_ENTER);
> > + if (ret)
> > + return ret;
> > +
> > + return 0;
> > +}
> > +
> > +static int qcom_x1e_it8987_ec_resume(struct device *dev)
> > +{
> > + struct i2c_client *client = to_i2c_client(dev);
> > + int ret;
> > +
> > + ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SUSPEND_EXIT);
> > + if (ret)
> > + return ret;
> > +
> > + ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SCREEN_ON);
> > + if (ret)
> > + return ret;
> > +
> > + return 0;
> > +}
> > +
> > +static const struct of_device_id qcom_x1e_it8987_ec_of_match[] = {
> > + { .compatible = "lenovo,yoga-slim7x-ec" },
> > + { .compatible = "qcom,x1e-it9897-ec" },
> > + {}
> > +};
> > +MODULE_DEVICE_TABLE(of, qcom_x1e_it8987_ec_of_match);
> > +
> > +static const struct i2c_device_id qcom_x1e_it8987_ec_i2c_id_table[] = {
> > + { "qcom-x1e-it8987-ec", },
> > + {}
> > +};
> > +MODULE_DEVICE_TABLE(i2c, qcom_x1e_it8987_ec_i2c_id_table);
> > +
> > +static DEFINE_SIMPLE_DEV_PM_OPS(qcom_x1e_it8987_ec_pm_ops,
> > + qcom_x1e_it8987_ec_suspend,
> > + qcom_x1e_it8987_ec_resume);
> > +
> > +static struct i2c_driver qcom_x1e_it8987_ec_i2c_driver = {
> > + .driver = {
> > + .name = "yoga-slim7x-ec",
> > + .of_match_table = qcom_x1e_it8987_ec_of_match,
> > + .pm = &qcom_x1e_it8987_ec_pm_ops
> > + },
> > + .probe = qcom_x1e_it8987_ec_probe,
> > + .remove = qcom_x1e_it8987_ec_remove,
> > + .id_table = qcom_x1e_it8987_ec_i2c_id_table,
> > +};
> > +module_i2c_driver(qcom_x1e_it8987_ec_i2c_driver);
> > +
> > +MODULE_DESCRIPTION("Lenovo Yoga Slim 7x Embedded Controller");
> > +MODULE_LICENSE("GPL");
>
> Otherwise looks pretty good to me, nice hacking :)
>
> ---
> bod
>
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987
2024-12-19 20:08 [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987 Maya Matuszczyk
2024-12-19 20:08 ` [PATCH v2 2/3] platform: arm64: Add driver for EC found in most X1E laptops Maya Matuszczyk
2024-12-19 20:08 ` [PATCH v2 3/3] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add the EC Maya Matuszczyk
@ 2024-12-19 23:40 ` Rob Herring (Arm)
2024-12-20 18:05 ` Stephan Gerhold
2024-12-22 6:33 ` Krzysztof Kozlowski
4 siblings, 0 replies; 26+ messages in thread
From: Rob Herring (Arm) @ 2024-12-19 23:40 UTC (permalink / raw)
To: Maya Matuszczyk
Cc: devicetree, Conor Dooley, linux-kernel, linux-arm-msm,
Krzysztof Kozlowski
On Thu, 19 Dec 2024 21:08:18 +0100, Maya Matuszczyk wrote:
> This patch adds bindings for the EC firmware running on IT8987 present
> on most of X1E80100 devices
>
> Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
> ---
> .../bindings/platform/qcom,x1e-it8987-ec.yaml | 52 +++++++++++++++++++
> 1 file changed, 52 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
>
My bot found errors running 'make dt_binding_check' on your patch:
yamllint warnings/errors:
./Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml:22:9: [warning] wrong indentation: expected 10 but found 8 (indentation)
dtschema/dtc warnings/errors:
doc reference errors (make refcheckdocs):
See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20241219200821.8328-1-maccraft123mc@gmail.com
The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.
If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:
pip3 install dtschema --upgrade
Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 2/3] platform: arm64: Add driver for EC found in most X1E laptops
2024-12-19 20:58 ` Maya Matuszczyk
@ 2024-12-20 11:50 ` Aiqun(Maria) Yu
2024-12-20 12:14 ` Maya Matuszczyk
2024-12-22 6:56 ` Dmitry Baryshkov
0 siblings, 2 replies; 26+ messages in thread
From: Aiqun(Maria) Yu @ 2024-12-20 11:50 UTC (permalink / raw)
To: Maya Matuszczyk, Bryan O'Donoghue
Cc: Hans de Goede, Ilpo Järvinen, Miguel Ojeda, Alex Gaynor,
Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Alice Ryhl, Trevor Gross, linux-arm-msm,
linux-kernel, platform-driver-x86, rust-for-linux
On 12/20/2024 4:58 AM, Maya Matuszczyk wrote:
> czw., 19 gru 2024 o 21:43 Bryan O'Donoghue
> <bryan.odonoghue@linaro.org> napisał(a):
>>
>> On 19/12/2024 20:08, Maya Matuszczyk wrote:
>>> Currently it features only reporting that the AP is going to suspend,
>>> which results in keyboard backlight turning off and the power LED
>>> slowly blinking on the Lenovo Yoga Slim 7x.
>>>
>>> Honor Magicbook Art 14 and Lenovo Yoga Slim 7x are known to have
>>> firmware with extensions which would need appropriate handling.
>>> For reverse engineering the firmware on them I have written a Rust
>>> utility:
>>>
>>> https://github.com/Maccraft123/it8987-qcom-tool.git
>>>
>>> Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
>>> ---
>>> MAINTAINERS | 6 +
>>> drivers/platform/arm64/Kconfig | 8 ++
>>> drivers/platform/arm64/Makefile | 1 +
>>> drivers/platform/arm64/qcom-x1e-it8987.c | 158 +++++++++++++++++++++++
>>> 4 files changed, 173 insertions(+)
>>> create mode 100644 drivers/platform/arm64/qcom-x1e-it8987.c
>>>
>>> diff --git a/MAINTAINERS b/MAINTAINERS
>>> index b878ddc99f94..08d170e2e1e3 100644
>>> --- a/MAINTAINERS
>>> +++ b/MAINTAINERS
>>> @@ -12890,6 +12890,12 @@ S: Maintained
>>> W: http://legousb.sourceforge.net/
>>> F: drivers/usb/misc/legousbtower.c
>>>
>>> +QCOM IT8987 EC DRIVER
>>> +M: Maya Matuszczyk <maccraft123mc@gmail.com>
>>> +S: Maintained
>>> +F: Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
Actually, the IT8987 is from ITE Tech. As far as I know, there are other
platforms besides x1e that use this. So if this driver can be also
applied for all ITE it8987, it might be better to say 'ITE IT8987'
instead of 'QCOM IT8987'. This also applies to the file name and function.
>>> +F: drivers/platform/arm64/qcom-x1e-it8987.c
>>> +
>>> LETSKETCH HID TABLET DRIVER
>>> M: Hans de Goede <hdegoede@redhat.com>
>>> L: linux-input@vger.kernel.org
>>> diff --git a/drivers/platform/arm64/Kconfig b/drivers/platform/arm64/Kconfig
>>> index f88395ea3376..ebb7b4f70ca0 100644
>>> --- a/drivers/platform/arm64/Kconfig
>>> +++ b/drivers/platform/arm64/Kconfig
>>> @@ -49,4 +49,12 @@ config EC_LENOVO_YOGA_C630
>>>
>>> Say M or Y here to include this support.
>>>
>>> +config EC_QCOM_X1E_IT8987
>>> + tristate "Embedded Controller driver for most X1E80100 laptops"
>>> + depends on ARCH_QCOM || COMPILE_TEST
>>> + depends on I2C
>>> + help
>>> + This driver currently supports reporting device suspend to the EC so it
>>> + can take appropriate actions.
>>> +
>>> endif # ARM64_PLATFORM_DEVICES
>>> diff --git a/drivers/platform/arm64/Makefile b/drivers/platform/arm64/Makefile
>>> index b2ae9114fdd8..b9aa195bc1e6 100644
>>> --- a/drivers/platform/arm64/Makefile
>>> +++ b/drivers/platform/arm64/Makefile
>>> @@ -7,3 +7,4 @@
>>>
>>> obj-$(CONFIG_EC_ACER_ASPIRE1) += acer-aspire1-ec.o
>>> obj-$(CONFIG_EC_LENOVO_YOGA_C630) += lenovo-yoga-c630.o
>>> +obj-$(CONFIG_EC_QCOM_X1E_IT8987) += qcom-x1e-it8987.o
>>> diff --git a/drivers/platform/arm64/qcom-x1e-it8987.c b/drivers/platform/arm64/qcom-x1e-it8987.c
>>> new file mode 100644
>>> index 000000000000..d27067d6326a
>>> --- /dev/null
>>> +++ b/drivers/platform/arm64/qcom-x1e-it8987.c
>>> @@ -0,0 +1,158 @@
>>> +// SPDX-License-Identifier: GPL-2.0-only
>>> +/*
>>> + * Copyright (c) 2024 Maya Matuszczyk <maccraft123mc@gmail.com>
>>> + */
>>> +#include <linux/i2c.h>
>>> +#include <linux/module.h>
>>> +#include <linux/input.h>
>>> +#include <linux/input/sparse-keymap.h>
>>
>> Your includes should be alphabetised.
>>
>>> +
>>> +#define EC_IRQ_REASON_REG 0x05
>>> +#define EC_SUSPEND_RESUME_REG 0x23
>>> +#define EC_IRQ_ENABLE_REG 0x35
>>> +
>>> +#define EC_NOTIFY_SUSPEND_ENTER 0x01
>>> +#define EC_NOTIFY_SUSPEND_EXIT 0x00
>>> +#define EC_NOTIFY_SCREEN_OFF 0x03
>>> +#define EC_NOTIFY_SCREEN_ON 0x04
>>> +
>>> +#define EC_IRQ_MICMUTE_BUTTON 0x04
>>> +#define EC_IRQ_FAN1_STATUS_CHANGE 0x30
>>> +#define EC_IRQ_FAN2_STATUS_CHANGE 0x31
>>> +#define EC_IRQ_FAN1_SPEED_CHANGE 0x32
>>> +#define EC_IRQ_FAN2_SPEED_CHANGE 0x33
>>> +#define EC_IRQ_COMPLETED_LUT_UPDATE 0x34
>>> +#define EC_IRQ_COMPLETED_FAN_PROFILE_SWITCH 0x35
>>> +#define EC_IRQ_THERMISTOR_1_TEMP_THRESHOLD_CROSS 0x36
>>> +#define EC_IRQ_THERMISTOR_2_TEMP_THRESHOLD_CROSS 0x37
>>> +#define EC_IRQ_THERMISTOR_3_TEMP_THRESHOLD_CROSS 0x38
>>> +#define EC_IRQ_THERMISTOR_4_TEMP_THRESHOLD_CROSS 0x39
>>> +#define EC_IRQ_THERMISTOR_5_TEMP_THRESHOLD_CROSS 0x3a
>>> +#define EC_IRQ_THERMISTOR_6_TEMP_THRESHOLD_CROSS 0x3b
>>> +#define EC_IRQ_THERMISTOR_7_TEMP_THRESHOLD_CROSS 0x3c
>>> +#define EC_IRQ_RECOVERED_FROM_RESET 0x3d
Could you provide more details or any document references for the IRQ
reasons defined above? It seems incomplete to me.
By the way, I noticed this is a V2, but I couldn't find V1. Perhaps
including a cover letter next time would be helpful.
>>> +
>>> +struct qcom_x1e_it8987_ec {
>>> + struct i2c_client *client;
>>> + struct input_dev *idev;
>>> + struct mutex lock;
>>> +};
>>> +
>>> +static irqreturn_t qcom_x1e_it8987_ec_irq(int irq, void *data)
>>> +{
>>> + struct qcom_x1e_it8987_ec *ec = data;
>>> + struct device *dev = &ec->client->dev;
>>> + int val;
>>> +
>>> + guard(mutex)(&ec->lock);
>>
>> What's the thing that can execute at the same time as this procedure -
>> there doesn't appear to be any concurrent candidate in this patch.
> The user could suspend the laptop and the EC could fire an IRQ at the same
> time... I'll need to add mutex locking to suspend/resume functions
>
Using a mutex lock inside an IRQ handler is not advisable. Additionally,
since this IRQ appears to be only for logging purposes, is it really
necessary for it to be triggered during suspend and resume?
>
>>> +
>>> + val = i2c_smbus_read_byte_data(ec->client, EC_IRQ_REASON_REG);
>>> + if (val < 0) {
>>> + dev_err(dev, "Failed to get EC IRQ reason: %d\n", val);
>>> + return IRQ_HANDLED;
>>> + }
>>> +
>>> + dev_info(dev, "Unhandled EC IRQ reason: %d\n", val);
>>
>> Should an unhandled IRQ be an info or an err ?
> I don't know, it's "unimplemented but doesn't really matter"
>
>>
>>> +
>>> + return IRQ_HANDLED;
>>> +}
>>> +
>>> +static int qcom_x1e_it8987_ec_probe(struct i2c_client *client)
>>> +{
>>> + struct device *dev = &client->dev;
>>> + struct qcom_x1e_it8987_ec *ec;
>>> + int ret;
>>> +
>>> + ec = devm_kzalloc(dev, sizeof(*ec), GFP_KERNEL);
>>> + if (!ec)
>>> + return -ENOMEM;
>>> +
>>> + mutex_init(&ec->lock);
>>> + ec->client = client;
>>> +
>>> + ret = devm_request_threaded_irq(dev, client->irq,
>>> + NULL, qcom_x1e_it8987_ec_irq,
>>> + IRQF_ONESHOT, "qcom_x1e_it8987_ec", ec);
>>> + if (ret < 0)
>>> + return dev_err_probe(dev, ret, "Unable to request irq\n");
>>> +
>>> + ret = i2c_smbus_write_byte_data(client, EC_IRQ_ENABLE_REG, 0x01);
>>> + if (ret < 0)
>>> + return dev_err_probe(dev, ret, "Failed to enable interrupts\n");
>>> +
>>> + return 0;
>>> +}
>>> +
>>> +static void qcom_x1e_it8987_ec_remove(struct i2c_client *client)
>>> +{
>>> + struct device *dev = &client->dev;
>>> + int ret;
>>> +
>>> + ret = i2c_smbus_write_byte_data(client, EC_IRQ_ENABLE_REG, 0x00);
>>> + if (ret < 0)
>>> + dev_err(dev, "Failed to disable interrupts: %d\n", ret);
>>> +}
>>> +
>>> +static int qcom_x1e_it8987_ec_suspend(struct device *dev)
>>> +{
>>> + struct i2c_client *client = to_i2c_client(dev);
>>> + int ret;
>>> +
>>> + ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SCREEN_OFF);
>>> + if (ret)
>>> + return ret;
>>> +
>>> + ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SUSPEND_ENTER);
>>> + if (ret)
>>> + return ret;
>>> +
>>> + return 0;
>>> +}
>>> +
>>> +static int qcom_x1e_it8987_ec_resume(struct device *dev)
>>> +{
>>> + struct i2c_client *client = to_i2c_client(dev);
>>> + int ret;
>>> +
>>> + ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SUSPEND_EXIT);
>>> + if (ret)
>>> + return ret;
>>> +
>>> + ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SCREEN_ON);
>>> + if (ret)
>>> + return ret;
>>> +
>>> + return 0;
>>> +}
>>> +
>>> +static const struct of_device_id qcom_x1e_it8987_ec_of_match[] = {
>>> + { .compatible = "lenovo,yoga-slim7x-ec" },
>>> + { .compatible = "qcom,x1e-it9897-ec" },
>>> + {}
>>> +};
>>> +MODULE_DEVICE_TABLE(of, qcom_x1e_it8987_ec_of_match);
>>> +
>>> +static const struct i2c_device_id qcom_x1e_it8987_ec_i2c_id_table[] = {
>>> + { "qcom-x1e-it8987-ec", },
>>> + {}
>>> +};
>>> +MODULE_DEVICE_TABLE(i2c, qcom_x1e_it8987_ec_i2c_id_table);
>>> +
>>> +static DEFINE_SIMPLE_DEV_PM_OPS(qcom_x1e_it8987_ec_pm_ops,
>>> + qcom_x1e_it8987_ec_suspend,
>>> + qcom_x1e_it8987_ec_resume);
>>> +
>>> +static struct i2c_driver qcom_x1e_it8987_ec_i2c_driver = {
>>> + .driver = {
>>> + .name = "yoga-slim7x-ec",
>>> + .of_match_table = qcom_x1e_it8987_ec_of_match,
>>> + .pm = &qcom_x1e_it8987_ec_pm_ops
>>> + },
>>> + .probe = qcom_x1e_it8987_ec_probe,
>>> + .remove = qcom_x1e_it8987_ec_remove,
>>> + .id_table = qcom_x1e_it8987_ec_i2c_id_table,
>>> +};
>>> +module_i2c_driver(qcom_x1e_it8987_ec_i2c_driver);
>>> +
>>> +MODULE_DESCRIPTION("Lenovo Yoga Slim 7x Embedded Controller");
>>> +MODULE_LICENSE("GPL");
>>
>> Otherwise looks pretty good to me, nice hacking :)
>>
>> ---
>> bod
>>
--
Thx and BRs,
Aiqun(Maria) Yu
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 3/3] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add the EC
2024-12-19 20:08 ` [PATCH v2 3/3] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add the EC Maya Matuszczyk
@ 2024-12-20 11:52 ` Aiqun(Maria) Yu
2024-12-20 12:10 ` Konrad Dybcio
0 siblings, 1 reply; 26+ messages in thread
From: Aiqun(Maria) Yu @ 2024-12-20 11:52 UTC (permalink / raw)
To: Maya Matuszczyk, Bjorn Andersson, Konrad Dybcio, Rob Herring,
Krzysztof Kozlowski, Conor Dooley
Cc: linux-arm-msm, devicetree, linux-kernel
On 12/20/2024 4:08 AM, Maya Matuszczyk wrote:
> Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
Is the commit message missing for this patch?
> ---
> .../dts/qcom/x1e80100-lenovo-yoga-slim7x.dts | 22 +++++++++++++++++++
> 1 file changed, 22 insertions(+)
[...]
--
Thx and BRs,
Aiqun(Maria) Yu
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 3/3] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add the EC
2024-12-20 11:52 ` Aiqun(Maria) Yu
@ 2024-12-20 12:10 ` Konrad Dybcio
0 siblings, 0 replies; 26+ messages in thread
From: Konrad Dybcio @ 2024-12-20 12:10 UTC (permalink / raw)
To: Aiqun(Maria) Yu, Maya Matuszczyk, Bjorn Andersson, Konrad Dybcio,
Rob Herring, Krzysztof Kozlowski, Conor Dooley
Cc: linux-arm-msm, devicetree, linux-kernel
On 20.12.2024 12:52 PM, Aiqun(Maria) Yu wrote:
> On 12/20/2024 4:08 AM, Maya Matuszczyk wrote:
>> Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
>
> Is the commit message missing for this patch?
Yeah
Maya, please add a short summary (some backstory about the EC, what
it does or so).
You'll probably be asked to do the same with the bindings commit, but
you can mostly repeat the same thing both here and there.
Konrad
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 2/3] platform: arm64: Add driver for EC found in most X1E laptops
2024-12-20 11:50 ` Aiqun(Maria) Yu
@ 2024-12-20 12:14 ` Maya Matuszczyk
2024-12-22 6:56 ` Dmitry Baryshkov
1 sibling, 0 replies; 26+ messages in thread
From: Maya Matuszczyk @ 2024-12-20 12:14 UTC (permalink / raw)
To: Aiqun(Maria) Yu
Cc: Bryan O'Donoghue, Hans de Goede, Ilpo Järvinen,
Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, linux-arm-msm, linux-kernel, platform-driver-x86,
rust-for-linux
pt., 20 gru 2024 o 12:50 Aiqun(Maria) Yu <quic_aiquny@quicinc.com> napisał(a):
>
> On 12/20/2024 4:58 AM, Maya Matuszczyk wrote:
> > czw., 19 gru 2024 o 21:43 Bryan O'Donoghue
> > <bryan.odonoghue@linaro.org> napisał(a):
> >>
> >> On 19/12/2024 20:08, Maya Matuszczyk wrote:
> >>> Currently it features only reporting that the AP is going to suspend,
> >>> which results in keyboard backlight turning off and the power LED
> >>> slowly blinking on the Lenovo Yoga Slim 7x.
> >>>
> >>> Honor Magicbook Art 14 and Lenovo Yoga Slim 7x are known to have
> >>> firmware with extensions which would need appropriate handling.
> >>> For reverse engineering the firmware on them I have written a Rust
> >>> utility:
> >>>
> >>> https://github.com/Maccraft123/it8987-qcom-tool.git
> >>>
> >>> Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
> >>> ---
> >>> MAINTAINERS | 6 +
> >>> drivers/platform/arm64/Kconfig | 8 ++
> >>> drivers/platform/arm64/Makefile | 1 +
> >>> drivers/platform/arm64/qcom-x1e-it8987.c | 158 +++++++++++++++++++++++
> >>> 4 files changed, 173 insertions(+)
> >>> create mode 100644 drivers/platform/arm64/qcom-x1e-it8987.c
> >>>
> >>> diff --git a/MAINTAINERS b/MAINTAINERS
> >>> index b878ddc99f94..08d170e2e1e3 100644
> >>> --- a/MAINTAINERS
> >>> +++ b/MAINTAINERS
> >>> @@ -12890,6 +12890,12 @@ S: Maintained
> >>> W: http://legousb.sourceforge.net/
> >>> F: drivers/usb/misc/legousbtower.c
> >>>
> >>> +QCOM IT8987 EC DRIVER
> >>> +M: Maya Matuszczyk <maccraft123mc@gmail.com>
> >>> +S: Maintained
> >>> +F: Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
>
> Actually, the IT8987 is from ITE Tech. As far as I know, there are other
> platforms besides x1e that use this. So if this driver can be also
> applied for all ITE it8987, it might be better to say 'ITE IT8987'
> instead of 'QCOM IT8987'. This also applies to the file name and function.
It is from ITE, however the firmware running on it is from Qualcomm and would
not be compatible with devices that also have EC on IT8987 MCU with different
firmware. I'm open for suggestions about the driver name which would
reflect this.
> >>> +F: drivers/platform/arm64/qcom-x1e-it8987.c
> >>> +
> >>> LETSKETCH HID TABLET DRIVER
> >>> M: Hans de Goede <hdegoede@redhat.com>
> >>> L: linux-input@vger.kernel.org
> >>> diff --git a/drivers/platform/arm64/Kconfig b/drivers/platform/arm64/Kconfig
> >>> index f88395ea3376..ebb7b4f70ca0 100644
> >>> --- a/drivers/platform/arm64/Kconfig
> >>> +++ b/drivers/platform/arm64/Kconfig
> >>> @@ -49,4 +49,12 @@ config EC_LENOVO_YOGA_C630
> >>>
> >>> Say M or Y here to include this support.
> >>>
> >>> +config EC_QCOM_X1E_IT8987
> >>> + tristate "Embedded Controller driver for most X1E80100 laptops"
> >>> + depends on ARCH_QCOM || COMPILE_TEST
> >>> + depends on I2C
> >>> + help
> >>> + This driver currently supports reporting device suspend to the EC so it
> >>> + can take appropriate actions.
> >>> +
> >>> endif # ARM64_PLATFORM_DEVICES
> >>> diff --git a/drivers/platform/arm64/Makefile b/drivers/platform/arm64/Makefile
> >>> index b2ae9114fdd8..b9aa195bc1e6 100644
> >>> --- a/drivers/platform/arm64/Makefile
> >>> +++ b/drivers/platform/arm64/Makefile
> >>> @@ -7,3 +7,4 @@
> >>>
> >>> obj-$(CONFIG_EC_ACER_ASPIRE1) += acer-aspire1-ec.o
> >>> obj-$(CONFIG_EC_LENOVO_YOGA_C630) += lenovo-yoga-c630.o
> >>> +obj-$(CONFIG_EC_QCOM_X1E_IT8987) += qcom-x1e-it8987.o
> >>> diff --git a/drivers/platform/arm64/qcom-x1e-it8987.c b/drivers/platform/arm64/qcom-x1e-it8987.c
> >>> new file mode 100644
> >>> index 000000000000..d27067d6326a
> >>> --- /dev/null
> >>> +++ b/drivers/platform/arm64/qcom-x1e-it8987.c
> >>> @@ -0,0 +1,158 @@
> >>> +// SPDX-License-Identifier: GPL-2.0-only
> >>> +/*
> >>> + * Copyright (c) 2024 Maya Matuszczyk <maccraft123mc@gmail.com>
> >>> + */
> >>> +#include <linux/i2c.h>
> >>> +#include <linux/module.h>
> >>> +#include <linux/input.h>
> >>> +#include <linux/input/sparse-keymap.h>
> >>
> >> Your includes should be alphabetised.
> >>
> >>> +
> >>> +#define EC_IRQ_REASON_REG 0x05
> >>> +#define EC_SUSPEND_RESUME_REG 0x23
> >>> +#define EC_IRQ_ENABLE_REG 0x35
> >>> +
> >>> +#define EC_NOTIFY_SUSPEND_ENTER 0x01
> >>> +#define EC_NOTIFY_SUSPEND_EXIT 0x00
> >>> +#define EC_NOTIFY_SCREEN_OFF 0x03
> >>> +#define EC_NOTIFY_SCREEN_ON 0x04
> >>> +
> >>> +#define EC_IRQ_MICMUTE_BUTTON 0x04
> >>> +#define EC_IRQ_FAN1_STATUS_CHANGE 0x30
> >>> +#define EC_IRQ_FAN2_STATUS_CHANGE 0x31
> >>> +#define EC_IRQ_FAN1_SPEED_CHANGE 0x32
> >>> +#define EC_IRQ_FAN2_SPEED_CHANGE 0x33
> >>> +#define EC_IRQ_COMPLETED_LUT_UPDATE 0x34
> >>> +#define EC_IRQ_COMPLETED_FAN_PROFILE_SWITCH 0x35
> >>> +#define EC_IRQ_THERMISTOR_1_TEMP_THRESHOLD_CROSS 0x36
> >>> +#define EC_IRQ_THERMISTOR_2_TEMP_THRESHOLD_CROSS 0x37
> >>> +#define EC_IRQ_THERMISTOR_3_TEMP_THRESHOLD_CROSS 0x38
> >>> +#define EC_IRQ_THERMISTOR_4_TEMP_THRESHOLD_CROSS 0x39
> >>> +#define EC_IRQ_THERMISTOR_5_TEMP_THRESHOLD_CROSS 0x3a
> >>> +#define EC_IRQ_THERMISTOR_6_TEMP_THRESHOLD_CROSS 0x3b
> >>> +#define EC_IRQ_THERMISTOR_7_TEMP_THRESHOLD_CROSS 0x3c
> >>> +#define EC_IRQ_RECOVERED_FROM_RESET 0x3d
>
> Could you provide more details or any document references for the IRQ
> reasons defined above? It seems incomplete to me.
I forgot to remove the micmute button one. All the rest appear to be shared
between different devices.
https://github.com/aarch64-laptops/build/tree/master/misc has dumps of ACPI data
and you can look for "EAPQ" method which is triggered on EC interrupts
> By the way, I noticed this is a V2, but I couldn't find V1. Perhaps
> including a cover letter next time would be helpful.
https://lore.kernel.org/lkml/20240927185345.3680-1-maccraft123mc@gmail.com/T/#me8af469bc1b7ffd25c25418f7206ed816d8d8c0b
> >>> +
> >>> +struct qcom_x1e_it8987_ec {
> >>> + struct i2c_client *client;
> >>> + struct input_dev *idev;
> >>> + struct mutex lock;
> >>> +};
> >>> +
> >>> +static irqreturn_t qcom_x1e_it8987_ec_irq(int irq, void *data)
> >>> +{
> >>> + struct qcom_x1e_it8987_ec *ec = data;
> >>> + struct device *dev = &ec->client->dev;
> >>> + int val;
> >>> +
> >>> + guard(mutex)(&ec->lock);
> >>
> >> What's the thing that can execute at the same time as this procedure -
> >> there doesn't appear to be any concurrent candidate in this patch.
> > The user could suspend the laptop and the EC could fire an IRQ at the same
> > time... I'll need to add mutex locking to suspend/resume functions
> >
>
> Using a mutex lock inside an IRQ handler is not advisable. Additionally,
> since this IRQ appears to be only for logging purposes, is it really
> necessary for it to be triggered during suspend and resume?
Okay I'll remove the mutex.
> >
> >>> +
> >>> + val = i2c_smbus_read_byte_data(ec->client, EC_IRQ_REASON_REG);
> >>> + if (val < 0) {
> >>> + dev_err(dev, "Failed to get EC IRQ reason: %d\n", val);
> >>> + return IRQ_HANDLED;
> >>> + }
> >>> +
> >>> + dev_info(dev, "Unhandled EC IRQ reason: %d\n", val);
> >>
> >> Should an unhandled IRQ be an info or an err ?
> > I don't know, it's "unimplemented but doesn't really matter"
> >
> >>
> >>> +
> >>> + return IRQ_HANDLED;
> >>> +}
> >>> +
> >>> +static int qcom_x1e_it8987_ec_probe(struct i2c_client *client)
> >>> +{
> >>> + struct device *dev = &client->dev;
> >>> + struct qcom_x1e_it8987_ec *ec;
> >>> + int ret;
> >>> +
> >>> + ec = devm_kzalloc(dev, sizeof(*ec), GFP_KERNEL);
> >>> + if (!ec)
> >>> + return -ENOMEM;
> >>> +
> >>> + mutex_init(&ec->lock);
> >>> + ec->client = client;
> >>> +
> >>> + ret = devm_request_threaded_irq(dev, client->irq,
> >>> + NULL, qcom_x1e_it8987_ec_irq,
> >>> + IRQF_ONESHOT, "qcom_x1e_it8987_ec", ec);
> >>> + if (ret < 0)
> >>> + return dev_err_probe(dev, ret, "Unable to request irq\n");
> >>> +
> >>> + ret = i2c_smbus_write_byte_data(client, EC_IRQ_ENABLE_REG, 0x01);
> >>> + if (ret < 0)
> >>> + return dev_err_probe(dev, ret, "Failed to enable interrupts\n");
> >>> +
> >>> + return 0;
> >>> +}
> >>> +
> >>> +static void qcom_x1e_it8987_ec_remove(struct i2c_client *client)
> >>> +{
> >>> + struct device *dev = &client->dev;
> >>> + int ret;
> >>> +
> >>> + ret = i2c_smbus_write_byte_data(client, EC_IRQ_ENABLE_REG, 0x00);
> >>> + if (ret < 0)
> >>> + dev_err(dev, "Failed to disable interrupts: %d\n", ret);
> >>> +}
> >>> +
> >>> +static int qcom_x1e_it8987_ec_suspend(struct device *dev)
> >>> +{
> >>> + struct i2c_client *client = to_i2c_client(dev);
> >>> + int ret;
> >>> +
> >>> + ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SCREEN_OFF);
> >>> + if (ret)
> >>> + return ret;
> >>> +
> >>> + ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SUSPEND_ENTER);
> >>> + if (ret)
> >>> + return ret;
> >>> +
> >>> + return 0;
> >>> +}
> >>> +
> >>> +static int qcom_x1e_it8987_ec_resume(struct device *dev)
> >>> +{
> >>> + struct i2c_client *client = to_i2c_client(dev);
> >>> + int ret;
> >>> +
> >>> + ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SUSPEND_EXIT);
> >>> + if (ret)
> >>> + return ret;
> >>> +
> >>> + ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SCREEN_ON);
> >>> + if (ret)
> >>> + return ret;
> >>> +
> >>> + return 0;
> >>> +}
> >>> +
> >>> +static const struct of_device_id qcom_x1e_it8987_ec_of_match[] = {
> >>> + { .compatible = "lenovo,yoga-slim7x-ec" },
> >>> + { .compatible = "qcom,x1e-it9897-ec" },
> >>> + {}
> >>> +};
> >>> +MODULE_DEVICE_TABLE(of, qcom_x1e_it8987_ec_of_match);
> >>> +
> >>> +static const struct i2c_device_id qcom_x1e_it8987_ec_i2c_id_table[] = {
> >>> + { "qcom-x1e-it8987-ec", },
> >>> + {}
> >>> +};
> >>> +MODULE_DEVICE_TABLE(i2c, qcom_x1e_it8987_ec_i2c_id_table);
> >>> +
> >>> +static DEFINE_SIMPLE_DEV_PM_OPS(qcom_x1e_it8987_ec_pm_ops,
> >>> + qcom_x1e_it8987_ec_suspend,
> >>> + qcom_x1e_it8987_ec_resume);
> >>> +
> >>> +static struct i2c_driver qcom_x1e_it8987_ec_i2c_driver = {
> >>> + .driver = {
> >>> + .name = "yoga-slim7x-ec",
> >>> + .of_match_table = qcom_x1e_it8987_ec_of_match,
> >>> + .pm = &qcom_x1e_it8987_ec_pm_ops
> >>> + },
> >>> + .probe = qcom_x1e_it8987_ec_probe,
> >>> + .remove = qcom_x1e_it8987_ec_remove,
> >>> + .id_table = qcom_x1e_it8987_ec_i2c_id_table,
> >>> +};
> >>> +module_i2c_driver(qcom_x1e_it8987_ec_i2c_driver);
> >>> +
> >>> +MODULE_DESCRIPTION("Lenovo Yoga Slim 7x Embedded Controller");
> >>> +MODULE_LICENSE("GPL");
> >>
> >> Otherwise looks pretty good to me, nice hacking :)
> >>
> >> ---
> >> bod
> >>
>
>
> --
> Thx and BRs,
> Aiqun(Maria) Yu
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987
2024-12-19 20:08 [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987 Maya Matuszczyk
` (2 preceding siblings ...)
2024-12-19 23:40 ` [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987 Rob Herring (Arm)
@ 2024-12-20 18:05 ` Stephan Gerhold
[not found] ` <CAO_MupJ7JtXNgGyXcxGa+EGAvsu-yG0O6MgneGUBdCEgKNG+MA@mail.gmail.com>
2024-12-22 6:33 ` Krzysztof Kozlowski
4 siblings, 1 reply; 26+ messages in thread
From: Stephan Gerhold @ 2024-12-20 18:05 UTC (permalink / raw)
To: Maya Matuszczyk
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-arm-msm,
devicetree, linux-kernel
On Thu, Dec 19, 2024 at 09:08:18PM +0100, Maya Matuszczyk wrote:
> This patch adds bindings for the EC firmware running on IT8987 present
> on most of X1E80100 devices
>
> Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
> ---
> .../bindings/platform/qcom,x1e-it8987-ec.yaml | 52 +++++++++++++++++++
> 1 file changed, 52 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
>
> diff --git a/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml b/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
> new file mode 100644
> index 000000000000..4a4f6eb63072
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
> @@ -0,0 +1,52 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/platform/qcom,x1e-it8987-ec.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Qualcomm Embedded Controller on IT8987 chip.
> +
> +maintainers:
> + - Maya Matuszczyk <maccraft123mc@gmail.com>
> +
> +description:
> + Most x1e80100 laptops have an EC running on IT8987 MCU chip. The EC controls
> + minor functions, like fans, power LED, and on some laptops it also handles
> + keyboard hotkeys.
> +
> +properties:
> + compatible:
> + oneOf:
> + - const: qcom,x1e-it8987-ec
Given that ECs tend to be somewhat device-specific and many vendors
might have slightly customized the EC firmware(?), I think it would be
better to disallow using this generic compatible without a more specific
one. In other words, I would drop this line and just keep the case
below:
> + - items:
> + - const: lenovo,yoga-slim7x-ec
> + - const: qcom,x1e-it8987-ec
People can add compatible entries for other devices as needed.
Thanks,
Stephan
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987
[not found] ` <CAO_MupJ7JtXNgGyXcxGa+EGAvsu-yG0O6MgneGUBdCEgKNG+MA@mail.gmail.com>
@ 2024-12-20 18:24 ` Stephan Gerhold
2024-12-22 14:40 ` Krzysztof Kozlowski
0 siblings, 1 reply; 26+ messages in thread
From: Stephan Gerhold @ 2024-12-20 18:24 UTC (permalink / raw)
To: Maya Matuszczyk
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-arm-msm,
devicetree, linux-kernel
On Fri, Dec 20, 2024 at 07:16:34PM +0100, Maya Matuszczyk wrote:
> Excuse the formatting, I've typed this reply from my phone
>
> pt., 20 gru 2024, 19:05 użytkownik Stephan Gerhold <
> stephan.gerhold@linaro.org> napisał:
>
> > On Thu, Dec 19, 2024 at 09:08:18PM +0100, Maya Matuszczyk wrote:
> > > This patch adds bindings for the EC firmware running on IT8987 present
> > > on most of X1E80100 devices
> > >
> > > Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
> > > ---
> > > .../bindings/platform/qcom,x1e-it8987-ec.yaml | 52 +++++++++++++++++++
> > > 1 file changed, 52 insertions(+)
> > > create mode 100644
> > Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
> > >
> > > diff --git
> > a/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
> > b/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
> > > new file mode 100644
> > > index 000000000000..4a4f6eb63072
> > > --- /dev/null
> > > +++ b/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
> > > @@ -0,0 +1,52 @@
> > > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > > +%YAML 1.2
> > > +---
> > > +$id: http://devicetree.org/schemas/platform/qcom,x1e-it8987-ec.yaml#
> > > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > > +
> > > +title: Qualcomm Embedded Controller on IT8987 chip.
> > > +
> > > +maintainers:
> > > + - Maya Matuszczyk <maccraft123mc@gmail.com>
> > > +
> > > +description:
> > > + Most x1e80100 laptops have an EC running on IT8987 MCU chip. The EC
> > controls
> > > + minor functions, like fans, power LED, and on some laptops it also
> > handles
> > > + keyboard hotkeys.
> > > +
> > > +properties:
> > > + compatible:
> > > + oneOf:
> > > + - const: qcom,x1e-it8987-ec
> >
> > Given that ECs tend to be somewhat device-specific and many vendors
> > might have slightly customized the EC firmware(?), I think it would be
> > better to disallow using this generic compatible without a more specific
> > one. In other words, I would drop this line and just keep the case
> > below:
> >
> I've looked at DSDT of other devices and they look to be compatible with
> what's on the devkit, with differences being extra features on magicbook
> art 14 and yoga slim 7x. Though this isn't a hill I'm willing to die on.
>
I think it's fine to keep qcom,x1e-it8987-ec as second compatible.
However, without a more specific compatible, there is a risk we have
nothing to match on in case device-specific handling becomes necessary
in the driver at some point.
It's certainly subjective, but it might be better to play it safe here
and have a specific compatible that one can match, even if the behavior
is 99% the same. There will often be subtly different behavior across
devices, you mentioned the "keyboard backlight turning off and the power
LED slowly blinking", who knows what else exists.
I suppose worst case we could also use of_machine_is_compatible() to
just match the device the EC is running on, but I'm not sure if that
would be frowned upon.
Thanks,
Stephan
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 2/3] platform: arm64: Add driver for EC found in most X1E laptops
2024-12-19 20:08 ` [PATCH v2 2/3] platform: arm64: Add driver for EC found in most X1E laptops Maya Matuszczyk
2024-12-19 20:43 ` Bryan O'Donoghue
@ 2024-12-20 19:01 ` Stephan Gerhold
2024-12-22 6:34 ` Krzysztof Kozlowski
2 siblings, 0 replies; 26+ messages in thread
From: Stephan Gerhold @ 2024-12-20 19:01 UTC (permalink / raw)
To: Maya Matuszczyk
Cc: Hans de Goede, Ilpo Järvinen, Bryan O'Donoghue,
Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, linux-arm-msm, linux-kernel, platform-driver-x86,
rust-for-linux
On Thu, Dec 19, 2024 at 09:08:19PM +0100, Maya Matuszczyk wrote:
> Currently it features only reporting that the AP is going to suspend,
> which results in keyboard backlight turning off and the power LED
> slowly blinking on the Lenovo Yoga Slim 7x.
>
> Honor Magicbook Art 14 and Lenovo Yoga Slim 7x are known to have
> firmware with extensions which would need appropriate handling.
> For reverse engineering the firmware on them I have written a Rust
> utility:
>
> https://github.com/Maccraft123/it8987-qcom-tool.git
>
> Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
Thanks a lot for working on this!
> ---
> MAINTAINERS | 6 +
> drivers/platform/arm64/Kconfig | 8 ++
> drivers/platform/arm64/Makefile | 1 +
> drivers/platform/arm64/qcom-x1e-it8987.c | 158 +++++++++++++++++++++++
> 4 files changed, 173 insertions(+)
> create mode 100644 drivers/platform/arm64/qcom-x1e-it8987.c
>
> [...]
> diff --git a/drivers/platform/arm64/qcom-x1e-it8987.c b/drivers/platform/arm64/qcom-x1e-it8987.c
> new file mode 100644
> index 000000000000..d27067d6326a
> --- /dev/null
> +++ b/drivers/platform/arm64/qcom-x1e-it8987.c
> @@ -0,0 +1,158 @@
> [...]
> +#define EC_NOTIFY_SCREEN_OFF 0x03
> +#define EC_NOTIFY_SCREEN_ON 0x04
I think these two are specific to the Yoga EC. The 0x03/0x04 value is in
the DSDT of Yoga, but I don't see it for the devkit for example.
We should probably only send these commands for the
"lenovo,yoga-slim7x-ec" compatible? What happens if you just send
EC_NOTIFY_SUSPEND_ENTER and skip sending the screen ones? Keyboard
backlight stays on?
> [...]
> +static const struct of_device_id qcom_x1e_it8987_ec_of_match[] = {
> + { .compatible = "lenovo,yoga-slim7x-ec" },
If you're not assigning any special data to this compatible, you can
just drop this line, since it will still probe based on the fallback
compatible below. Or you add some .data here to make the
EC_NOTIFY_SCREEN_ON/OFF conditional to the Yoga compatible. :-)
> + { .compatible = "qcom,x1e-it9897-ec" },
> + {}
> +};
> +MODULE_DEVICE_TABLE(of, qcom_x1e_it8987_ec_of_match);
> +
Thanks,
Stephan
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987
2024-12-19 20:08 [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987 Maya Matuszczyk
` (3 preceding siblings ...)
2024-12-20 18:05 ` Stephan Gerhold
@ 2024-12-22 6:33 ` Krzysztof Kozlowski
2024-12-22 6:40 ` Krzysztof Kozlowski
4 siblings, 1 reply; 26+ messages in thread
From: Krzysztof Kozlowski @ 2024-12-22 6:33 UTC (permalink / raw)
To: Maya Matuszczyk
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-arm-msm,
devicetree, linux-kernel
On Thu, Dec 19, 2024 at 09:08:18PM +0100, Maya Matuszczyk wrote:
> This patch adds bindings for the EC firmware running on IT8987 present
> on most of X1E80100 devices
Please do not use "This commit/patch/change", but imperative mood. See
longer explanation here:
https://elixir.bootlin.com/linux/v5.17.1/source/Documentation/process/submitting-patches.rst#L95
>
> Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
> ---
> .../bindings/platform/qcom,x1e-it8987-ec.yaml | 52 +++++++++++++++++++
> 1 file changed, 52 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
>
> diff --git a/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml b/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
> new file mode 100644
> index 000000000000..4a4f6eb63072
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
> @@ -0,0 +1,52 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/platform/qcom,x1e-it8987-ec.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Qualcomm Embedded Controller on IT8987 chip.
Drop full stop. Titles don't have them.
> +
> +maintainers:
> + - Maya Matuszczyk <maccraft123mc@gmail.com>
> +
> +description:
> + Most x1e80100 laptops have an EC running on IT8987 MCU chip. The EC controls
> + minor functions, like fans, power LED, and on some laptops it also handles
> + keyboard hotkeys.
> +
> +properties:
> + compatible:
> + oneOf:
> + - const: qcom,x1e-it8987-ec
That's not a SoC, so I don't understand:
1. referring to the SoC,
2. Having this alone and as fallback.
It does not look like you tested the bindings, at least after quick
look. Please run 'make dt_binding_check' (see
Documentation/devicetree/bindings/writing-schema.rst for instructions).
Maybe you need to update your dtschema and yamllint. Don't rely on
distro packages for dtschema and be sure you are using the latest
released dtschema.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 2/3] platform: arm64: Add driver for EC found in most X1E laptops
2024-12-19 20:08 ` [PATCH v2 2/3] platform: arm64: Add driver for EC found in most X1E laptops Maya Matuszczyk
2024-12-19 20:43 ` Bryan O'Donoghue
2024-12-20 19:01 ` Stephan Gerhold
@ 2024-12-22 6:34 ` Krzysztof Kozlowski
2 siblings, 0 replies; 26+ messages in thread
From: Krzysztof Kozlowski @ 2024-12-22 6:34 UTC (permalink / raw)
To: Maya Matuszczyk
Cc: Hans de Goede, Ilpo Järvinen, Bryan O'Donoghue,
Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, linux-arm-msm, linux-kernel, platform-driver-x86,
rust-for-linux
On Thu, Dec 19, 2024 at 09:08:19PM +0100, Maya Matuszczyk wrote:
> +static int qcom_x1e_it8987_ec_resume(struct device *dev)
> +{
> + struct i2c_client *client = to_i2c_client(dev);
> + int ret;
> +
> + ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SUSPEND_EXIT);
> + if (ret)
> + return ret;
> +
> + ret = i2c_smbus_write_byte_data(client, EC_SUSPEND_RESUME_REG, EC_NOTIFY_SCREEN_ON);
> + if (ret)
> + return ret;
> +
> + return 0;
> +}
> +
> +static const struct of_device_id qcom_x1e_it8987_ec_of_match[] = {
> + { .compatible = "lenovo,yoga-slim7x-ec" },
Drop, you added fallback for that exact purpose.
> + { .compatible = "qcom,x1e-it9897-ec" },
> + {}
> +};
> +MODULE_DEVICE_TABLE(of, qcom_x1e_it8987_ec_of_match);
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 2/3] platform: arm64: Add driver for EC found in most X1E laptops
2024-12-19 20:43 ` Bryan O'Donoghue
2024-12-19 20:58 ` Maya Matuszczyk
@ 2024-12-22 6:35 ` Krzysztof Kozlowski
1 sibling, 0 replies; 26+ messages in thread
From: Krzysztof Kozlowski @ 2024-12-22 6:35 UTC (permalink / raw)
To: Bryan O'Donoghue
Cc: Maya Matuszczyk, Hans de Goede, Ilpo Järvinen, Miguel Ojeda,
Alex Gaynor, Boqun Feng, Gary Guo, Björn Roy Baron,
Benno Lossin, Andreas Hindborg, Alice Ryhl, Trevor Gross,
linux-arm-msm, linux-kernel, platform-driver-x86, rust-for-linux
On Thu, Dec 19, 2024 at 08:43:16PM +0000, Bryan O'Donoghue wrote:
> > +
> > + val = i2c_smbus_read_byte_data(ec->client, EC_IRQ_REASON_REG);
> > + if (val < 0) {
> > + dev_err(dev, "Failed to get EC IRQ reason: %d\n", val);
> > + return IRQ_HANDLED;
> > + }
> > +
> > + dev_info(dev, "Unhandled EC IRQ reason: %d\n", val);
>
> Should an unhandled IRQ be an info or an err ?
Should be debug or ratelimit at most.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987
2024-12-22 6:33 ` Krzysztof Kozlowski
@ 2024-12-22 6:40 ` Krzysztof Kozlowski
2024-12-22 7:55 ` Maya Matuszczyk
0 siblings, 1 reply; 26+ messages in thread
From: Krzysztof Kozlowski @ 2024-12-22 6:40 UTC (permalink / raw)
To: Maya Matuszczyk
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-arm-msm,
devicetree, linux-kernel
On 22/12/2024 07:33, Krzysztof Kozlowski wrote:
>> +properties:
>> + compatible:
>> + oneOf:
>> + - const: qcom,x1e-it8987-ec
>
> That's not a SoC, so I don't understand:
> 1. referring to the SoC,
> 2. Having this alone and as fallback.
>
> It does not look like you tested the bindings, at least after quick
> look. Please run 'make dt_binding_check' (see
> Documentation/devicetree/bindings/writing-schema.rst for instructions).
> Maybe you need to update your dtschema and yamllint. Don't rely on
> distro packages for dtschema and be sure you are using the latest
> released dtschema.
BTW, for sure Qualcomm did not develop/create it8987, so it cannot be
used here. Come with specific compatible for this given, one product:
embedded controller on one Lenovo laptop and use it also as filename.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 2/3] platform: arm64: Add driver for EC found in most X1E laptops
2024-12-20 11:50 ` Aiqun(Maria) Yu
2024-12-20 12:14 ` Maya Matuszczyk
@ 2024-12-22 6:56 ` Dmitry Baryshkov
1 sibling, 0 replies; 26+ messages in thread
From: Dmitry Baryshkov @ 2024-12-22 6:56 UTC (permalink / raw)
To: Aiqun(Maria) Yu
Cc: Maya Matuszczyk, Bryan O'Donoghue, Hans de Goede,
Ilpo Järvinen, Miguel Ojeda, Alex Gaynor, Boqun Feng,
Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
Alice Ryhl, Trevor Gross, linux-arm-msm, linux-kernel,
platform-driver-x86, rust-for-linux
On Fri, Dec 20, 2024 at 07:50:45PM +0800, Aiqun(Maria) Yu wrote:
> On 12/20/2024 4:58 AM, Maya Matuszczyk wrote:
> > czw., 19 gru 2024 o 21:43 Bryan O'Donoghue
> > <bryan.odonoghue@linaro.org> napisał(a):
> >>
> >> On 19/12/2024 20:08, Maya Matuszczyk wrote:
> >>> Currently it features only reporting that the AP is going to suspend,
> >>> which results in keyboard backlight turning off and the power LED
> >>> slowly blinking on the Lenovo Yoga Slim 7x.
> >>>
> >>> Honor Magicbook Art 14 and Lenovo Yoga Slim 7x are known to have
> >>> firmware with extensions which would need appropriate handling.
> >>> For reverse engineering the firmware on them I have written a Rust
> >>> utility:
> >>>
> >>> https://github.com/Maccraft123/it8987-qcom-tool.git
> >>>
> >>> Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
> >>> ---
> >>> MAINTAINERS | 6 +
> >>> drivers/platform/arm64/Kconfig | 8 ++
> >>> drivers/platform/arm64/Makefile | 1 +
> >>> drivers/platform/arm64/qcom-x1e-it8987.c | 158 +++++++++++++++++++++++
> >>> 4 files changed, 173 insertions(+)
> >>> create mode 100644 drivers/platform/arm64/qcom-x1e-it8987.c
> >>>
> >>> diff --git a/MAINTAINERS b/MAINTAINERS
> >>> index b878ddc99f94..08d170e2e1e3 100644
> >>> --- a/MAINTAINERS
> >>> +++ b/MAINTAINERS
> >>> @@ -12890,6 +12890,12 @@ S: Maintained
> >>> W: http://legousb.sourceforge.net/
> >>> F: drivers/usb/misc/legousbtower.c
> >>>
> >>> +QCOM IT8987 EC DRIVER
> >>> +M: Maya Matuszczyk <maccraft123mc@gmail.com>
> >>> +S: Maintained
> >>> +F: Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
>
> Actually, the IT8987 is from ITE Tech. As far as I know, there are other
> platforms besides x1e that use this. So if this driver can be also
> applied for all ITE it8987, it might be better to say 'ITE IT8987'
> instead of 'QCOM IT8987'. This also applies to the file name and function.
ECS Liva QC710 also uses IT8987 as EC, though DSDT doesn't seem to
contain anything useful wrt. the EC.
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987
2024-12-22 6:40 ` Krzysztof Kozlowski
@ 2024-12-22 7:55 ` Maya Matuszczyk
2024-12-22 9:40 ` Maya Matuszczyk
2024-12-22 14:34 ` Krzysztof Kozlowski
0 siblings, 2 replies; 26+ messages in thread
From: Maya Matuszczyk @ 2024-12-22 7:55 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-arm-msm,
devicetree, linux-kernel
niedz., 22 gru 2024 o 07:40 Krzysztof Kozlowski <krzk@kernel.org> napisał(a):
>
> On 22/12/2024 07:33, Krzysztof Kozlowski wrote:
> >> +properties:
> >> + compatible:
> >> + oneOf:
> >> + - const: qcom,x1e-it8987-ec
> >
> > That's not a SoC, so I don't understand:
> > 1. referring to the SoC,
> > 2. Having this alone and as fallback.
> >
> > It does not look like you tested the bindings, at least after quick
> > look. Please run 'make dt_binding_check' (see
> > Documentation/devicetree/bindings/writing-schema.rst for instructions).
> > Maybe you need to update your dtschema and yamllint. Don't rely on
> > distro packages for dtschema and be sure you are using the latest
> > released dtschema.
>
> BTW, for sure Qualcomm did not develop/create it8987, so it cannot be
> used here. Come with specific compatible for this given, one product:
> embedded controller on one Lenovo laptop and use it also as filename.
Under these assumptions:
- Qualcomm developed the firmware running on the IT8987 in most x1e machines
- IT8987 is also used in other machines with a non-compatible firmware
- The driver name should reflect the assumptions
I think the name qcom,x1e-it8987-ec is not the worst name for it, as
"ite,it8987-ec" would imply compatibility with other devices running
non-compatible firmware,
and names specifying only the device wouldn't reflect the "firmware is
based on what qcom did and it's driven the same way" part
Which other names do you think would fit this better?
>
> Best regards,
> Krzysztof
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987
2024-12-22 7:55 ` Maya Matuszczyk
@ 2024-12-22 9:40 ` Maya Matuszczyk
2024-12-22 14:34 ` Krzysztof Kozlowski
1 sibling, 0 replies; 26+ messages in thread
From: Maya Matuszczyk @ 2024-12-22 9:40 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-arm-msm,
devicetree, linux-kernel
niedz., 22 gru 2024 o 08:55 Maya Matuszczyk <maccraft123mc@gmail.com>
napisał(a):
>
> niedz., 22 gru 2024 o 07:40 Krzysztof Kozlowski <krzk@kernel.org> napisał(a):
> >
> > On 22/12/2024 07:33, Krzysztof Kozlowski wrote:
> > >> +properties:
> > >> + compatible:
> > >> + oneOf:
> > >> + - const: qcom,x1e-it8987-ec
> > >
> > > That's not a SoC, so I don't understand:
> > > 1. referring to the SoC,
> > > 2. Having this alone and as fallback.
> > >
> > > It does not look like you tested the bindings, at least after quick
> > > look. Please run 'make dt_binding_check' (see
> > > Documentation/devicetree/bindings/writing-schema.rst for instructions).
> > > Maybe you need to update your dtschema and yamllint. Don't rely on
> > > distro packages for dtschema and be sure you are using the latest
> > > released dtschema.
> >
> > BTW, for sure Qualcomm did not develop/create it8987, so it cannot be
> > used here. Come with specific compatible for this given, one product:
> > embedded controller on one Lenovo laptop and use it also as filename.
>
> Under these assumptions:
>
> - Qualcomm developed the firmware running on the IT8987 in most x1e machines
> - IT8987 is also used in other machines with a non-compatible firmware
> - The driver name should reflect the assumptions
>
> I think the name qcom,x1e-it8987-ec is not the worst name for it, as
> "ite,it8987-ec" would imply compatibility with other devices running
> non-compatible firmware,
> and names specifying only the device wouldn't reflect the "firmware is
> based on what qcom did and it's driven the same way" part
>
> Which other names do you think would fit this better?
In case it wasn't clear:
This was a genuine question - I have no idea how to name this driver
and this was the best I could come up with
>
> >
> > Best regards,
> > Krzysztof
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987
2024-12-22 7:55 ` Maya Matuszczyk
2024-12-22 9:40 ` Maya Matuszczyk
@ 2024-12-22 14:34 ` Krzysztof Kozlowski
1 sibling, 0 replies; 26+ messages in thread
From: Krzysztof Kozlowski @ 2024-12-22 14:34 UTC (permalink / raw)
To: Maya Matuszczyk
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-arm-msm,
devicetree, linux-kernel
On 22/12/2024 08:55, Maya Matuszczyk wrote:
> niedz., 22 gru 2024 o 07:40 Krzysztof Kozlowski <krzk@kernel.org> napisał(a):
>>
>> On 22/12/2024 07:33, Krzysztof Kozlowski wrote:
>>>> +properties:
>>>> + compatible:
>>>> + oneOf:
>>>> + - const: qcom,x1e-it8987-ec
>>>
>>> That's not a SoC, so I don't understand:
>>> 1. referring to the SoC,
>>> 2. Having this alone and as fallback.
>>>
>>> It does not look like you tested the bindings, at least after quick
>>> look. Please run 'make dt_binding_check' (see
>>> Documentation/devicetree/bindings/writing-schema.rst for instructions).
>>> Maybe you need to update your dtschema and yamllint. Don't rely on
>>> distro packages for dtschema and be sure you are using the latest
>>> released dtschema.
>>
>> BTW, for sure Qualcomm did not develop/create it8987, so it cannot be
>> used here. Come with specific compatible for this given, one product:
>> embedded controller on one Lenovo laptop and use it also as filename.
>
> Under these assumptions:
>
> - Qualcomm developed the firmware running on the IT8987 in most x1e machines
No one here knows whether most x1e machines have this chip...
> - IT8987 is also used in other machines with a non-compatible firmware
> - The driver name should reflect the assumptions
I don't care about driver here, so you can use it for the driver but
these are not correct assumptions for the bindings.
>
> I think the name qcom,x1e-it8987-ec is not the worst name for it, as
> "ite,it8987-ec" would imply compatibility with other devices running
> non-compatible firmware,
> and names specifying only the device wouldn't reflect the "firmware is
> based on what qcom did and it's driven the same way" part
>
> Which other names do you think would fit this better?
I suggested the one in second reply:
lenovo,yoga-slim-whatever-model-it-is-ec
If you have any indication that Qualcomm firmware from a reference board
was used as a reference, it could be used as fallback, but I do not
believe you can have such indication considering downstream source code
does not exist and all other docs are confidential. Therefore lenovo EC
is the first implementation we see and we know anything about.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987
2024-12-20 18:24 ` Stephan Gerhold
@ 2024-12-22 14:40 ` Krzysztof Kozlowski
2024-12-22 15:07 ` Maya Matuszczyk
0 siblings, 1 reply; 26+ messages in thread
From: Krzysztof Kozlowski @ 2024-12-22 14:40 UTC (permalink / raw)
To: Stephan Gerhold, Maya Matuszczyk
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-arm-msm,
devicetree, linux-kernel
On 20/12/2024 19:24, Stephan Gerhold wrote:
> On Fri, Dec 20, 2024 at 07:16:34PM +0100, Maya Matuszczyk wrote:
>> Excuse the formatting, I've typed this reply from my phone
>>
>> pt., 20 gru 2024, 19:05 użytkownik Stephan Gerhold <
>> stephan.gerhold@linaro.org> napisał:
>>
>>> On Thu, Dec 19, 2024 at 09:08:18PM +0100, Maya Matuszczyk wrote:
>>>> This patch adds bindings for the EC firmware running on IT8987 present
>>>> on most of X1E80100 devices
>>>>
>>>> Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
>>>> ---
>>>> .../bindings/platform/qcom,x1e-it8987-ec.yaml | 52 +++++++++++++++++++
>>>> 1 file changed, 52 insertions(+)
>>>> create mode 100644
>>> Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
>>>>
>>>> diff --git
>>> a/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
>>> b/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
>>>> new file mode 100644
>>>> index 000000000000..4a4f6eb63072
>>>> --- /dev/null
>>>> +++ b/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
>>>> @@ -0,0 +1,52 @@
>>>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>>>> +%YAML 1.2
>>>> +---
>>>> +$id: http://devicetree.org/schemas/platform/qcom,x1e-it8987-ec.yaml#
>>>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>>>> +
>>>> +title: Qualcomm Embedded Controller on IT8987 chip.
>>>> +
>>>> +maintainers:
>>>> + - Maya Matuszczyk <maccraft123mc@gmail.com>
>>>> +
>>>> +description:
>>>> + Most x1e80100 laptops have an EC running on IT8987 MCU chip. The EC
>>> controls
>>>> + minor functions, like fans, power LED, and on some laptops it also
>>> handles
>>>> + keyboard hotkeys.
>>>> +
>>>> +properties:
>>>> + compatible:
>>>> + oneOf:
>>>> + - const: qcom,x1e-it8987-ec
>>>
>>> Given that ECs tend to be somewhat device-specific and many vendors
>>> might have slightly customized the EC firmware(?), I think it would be
>>> better to disallow using this generic compatible without a more specific
>>> one. In other words, I would drop this line and just keep the case
>>> below:
>>>
>> I've looked at DSDT of other devices and they look to be compatible with
>> what's on the devkit, with differences being extra features on magicbook
>> art 14 and yoga slim 7x. Though this isn't a hill I'm willing to die on.
>>
>
> I think it's fine to keep qcom,x1e-it8987-ec as second compatible.
No, because:
1. There is no such thing as x1e
2. If there was a soc like this, this has nothing to do with SoC. It is
not a component inside SoC and that is the only allowed case when you
use SoC compatibles.
> However, without a more specific compatible, there is a risk we have
> nothing to match on in case device-specific handling becomes necessary
> in the driver at some point.
>
> It's certainly subjective, but it might be better to play it safe here
> and have a specific compatible that one can match, even if the behavior
> is 99% the same. There will often be subtly different behavior across
> devices, you mentioned the "keyboard backlight turning off and the power
> LED slowly blinking", who knows what else exists.
>
> I suppose worst case we could also use of_machine_is_compatible() to
> just match the device the EC is running on, but I'm not sure if that
> would be frowned upon.
Unless you have some sort of insights or secret knowledge from Qualcomm
(Bjorn or Konrad can chime in here), I think these are pure guesses that
this is a Qualcomm product (implied by vendor prefix) or some sort of
re-usable generic firmware from Qualcomm present on multiple devices.
If the FW across devices is the same, then fallbacks for these are fine
with me.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987
2024-12-22 14:40 ` Krzysztof Kozlowski
@ 2024-12-22 15:07 ` Maya Matuszczyk
2024-12-23 14:25 ` Krzysztof Kozlowski
2024-12-30 2:45 ` Aiqun(Maria) Yu
0 siblings, 2 replies; 26+ messages in thread
From: Maya Matuszczyk @ 2024-12-22 15:07 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Stephan Gerhold, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
linux-arm-msm, devicetree, linux-kernel
niedz., 22 gru 2024 o 15:40 Krzysztof Kozlowski <krzk@kernel.org> napisał(a):
>
> On 20/12/2024 19:24, Stephan Gerhold wrote:
> > On Fri, Dec 20, 2024 at 07:16:34PM +0100, Maya Matuszczyk wrote:
> >> Excuse the formatting, I've typed this reply from my phone
> >>
> >> pt., 20 gru 2024, 19:05 użytkownik Stephan Gerhold <
> >> stephan.gerhold@linaro.org> napisał:
> >>
> >>> On Thu, Dec 19, 2024 at 09:08:18PM +0100, Maya Matuszczyk wrote:
> >>>> This patch adds bindings for the EC firmware running on IT8987 present
> >>>> on most of X1E80100 devices
> >>>>
> >>>> Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
> >>>> ---
> >>>> .../bindings/platform/qcom,x1e-it8987-ec.yaml | 52 +++++++++++++++++++
> >>>> 1 file changed, 52 insertions(+)
> >>>> create mode 100644
> >>> Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
> >>>>
> >>>> diff --git
> >>> a/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
> >>> b/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
> >>>> new file mode 100644
> >>>> index 000000000000..4a4f6eb63072
> >>>> --- /dev/null
> >>>> +++ b/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
> >>>> @@ -0,0 +1,52 @@
> >>>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> >>>> +%YAML 1.2
> >>>> +---
> >>>> +$id: http://devicetree.org/schemas/platform/qcom,x1e-it8987-ec.yaml#
> >>>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> >>>> +
> >>>> +title: Qualcomm Embedded Controller on IT8987 chip.
> >>>> +
> >>>> +maintainers:
> >>>> + - Maya Matuszczyk <maccraft123mc@gmail.com>
> >>>> +
> >>>> +description:
> >>>> + Most x1e80100 laptops have an EC running on IT8987 MCU chip. The EC
> >>> controls
> >>>> + minor functions, like fans, power LED, and on some laptops it also
> >>> handles
> >>>> + keyboard hotkeys.
> >>>> +
> >>>> +properties:
> >>>> + compatible:
> >>>> + oneOf:
> >>>> + - const: qcom,x1e-it8987-ec
> >>>
> >>> Given that ECs tend to be somewhat device-specific and many vendors
> >>> might have slightly customized the EC firmware(?), I think it would be
> >>> better to disallow using this generic compatible without a more specific
> >>> one. In other words, I would drop this line and just keep the case
> >>> below:
> >>>
> >> I've looked at DSDT of other devices and they look to be compatible with
> >> what's on the devkit, with differences being extra features on magicbook
> >> art 14 and yoga slim 7x. Though this isn't a hill I'm willing to die on.
> >>
> >
> > I think it's fine to keep qcom,x1e-it8987-ec as second compatible.
>
>
> No, because:
> 1. There is no such thing as x1e
> 2. If there was a soc like this, this has nothing to do with SoC. It is
> not a component inside SoC and that is the only allowed case when you
> use SoC compatibles.
It was the closest thing I had for a "platform name"
>
> > However, without a more specific compatible, there is a risk we have
> > nothing to match on in case device-specific handling becomes necessary
> > in the driver at some point.
> >
> > It's certainly subjective, but it might be better to play it safe here
> > and have a specific compatible that one can match, even if the behavior
> > is 99% the same. There will often be subtly different behavior across
> > devices, you mentioned the "keyboard backlight turning off and the power
> > LED slowly blinking", who knows what else exists.
> >
> > I suppose worst case we could also use of_machine_is_compatible() to
> > just match the device the EC is running on, but I'm not sure if that
> > would be frowned upon.
>
>
> Unless you have some sort of insights or secret knowledge from Qualcomm
> (Bjorn or Konrad can chime in here), I think these are pure guesses that
> this is a Qualcomm product (implied by vendor prefix) or some sort of
> re-usable generic firmware from Qualcomm present on multiple devices.
The x elite devkit also has the IT8987 EC chip, and when comparing the
firmware of it and Yoga Slim 7x's EC there are similarities when
running them through strings
On both of them at the beginning there are strings that look like
version identifiers:
Devkit:
UUBBK V:00.20.00$
BBK-V20$
Slim7x:
UUBBK V:00.21.00$
BBK-V21$
With similar ones at the end:
Devkit:
EC VER:00.29.00$
LsFv:00.29.00$
Qualcomm$
WoS 8c GenX$
ODM$
MB:A0$
BUILD DATE:
02/0//2/24$
TIME:
14:33:35$
Slim7x:
EC VER:00.60.00$
LsFv:00.20.00$
Qualcomm$
WoS 8c GenX$
ODM$
MB:A0$
BUILD DATE:
2024/07/25$
TIME:
09:58:00$
>
> If the FW across devices is the same, then fallbacks for these are fine
> with me.
As the devkit has EC firmware that is handled the same way in DSDT
tables of most of other x1e laptops with the same EC, and is a subset
of what's done on Lenovo Yoga Slim 7x and Honor Magicbook Art 14 I
think the devkit's compatible + -ec would be a good pick.
This conversation is getting long and I feel like I've said everything
I wanted to say, I'll just do what you tell me to do about the
fallback and binding filename.
>
> Best regards,
> Krzysztof
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987
2024-12-22 15:07 ` Maya Matuszczyk
@ 2024-12-23 14:25 ` Krzysztof Kozlowski
2024-12-30 2:45 ` Aiqun(Maria) Yu
1 sibling, 0 replies; 26+ messages in thread
From: Krzysztof Kozlowski @ 2024-12-23 14:25 UTC (permalink / raw)
To: Maya Matuszczyk
Cc: Stephan Gerhold, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
linux-arm-msm, devicetree, linux-kernel
On 22/12/2024 16:07, Maya Matuszczyk wrote:
>
> With similar ones at the end:
> Devkit:
> EC VER:00.29.00$
> LsFv:00.29.00$
> Qualcomm$
> WoS 8c GenX$
> ODM$
> MB:A0$
> BUILD DATE:
> 02/0//2/24$
> TIME:
> 14:33:35$
>
> Slim7x:
> EC VER:00.60.00$
> LsFv:00.20.00$
> Qualcomm$
> WoS 8c GenX$
> ODM$
> MB:A0$
> BUILD DATE:
> 2024/07/25$
> TIME:
> 09:58:00$
>
>
>
>>
>> If the FW across devices is the same, then fallbacks for these are fine
>> with me.
>
> As the devkit has EC firmware that is handled the same way in DSDT
> tables of most of other x1e laptops with the same EC, and is a subset
> of what's done on Lenovo Yoga Slim 7x and Honor Magicbook Art 14 I
> think the devkit's compatible + -ec would be a good pick.
>
> This conversation is getting long and I feel like I've said everything
> I wanted to say, I'll just do what you tell me to do about the
> fallback and binding filename.
Go with a device specific compatible (I think I proposed in other
email). It is up to you if you want to add fallbacks. If you add
fallbacks, then please include some summary of above in commit msg or
binding description, so there will be a trace of that explanation/reason
for fallbacks.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987
2024-12-22 15:07 ` Maya Matuszczyk
2024-12-23 14:25 ` Krzysztof Kozlowski
@ 2024-12-30 2:45 ` Aiqun(Maria) Yu
2025-01-14 10:23 ` Aiqun(Maria) Yu
1 sibling, 1 reply; 26+ messages in thread
From: Aiqun(Maria) Yu @ 2024-12-30 2:45 UTC (permalink / raw)
To: Maya Matuszczyk, Krzysztof Kozlowski
Cc: Stephan Gerhold, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
linux-arm-msm, devicetree, linux-kernel
On 12/22/2024 11:07 PM, Maya Matuszczyk wrote:
> niedz., 22 gru 2024 o 15:40 Krzysztof Kozlowski <krzk@kernel.org> napisał(a):
>>
>> On 20/12/2024 19:24, Stephan Gerhold wrote:
>>> On Fri, Dec 20, 2024 at 07:16:34PM +0100, Maya Matuszczyk wrote:
>>>> Excuse the formatting, I've typed this reply from my phone
>>>>
>>>> pt., 20 gru 2024, 19:05 użytkownik Stephan Gerhold <
>>>> stephan.gerhold@linaro.org> napisał:
>>>>
>>>>> On Thu, Dec 19, 2024 at 09:08:18PM +0100, Maya Matuszczyk wrote:
>>>>>> This patch adds bindings for the EC firmware running on IT8987 present
>>>>>> on most of X1E80100 devices
>>>>>>
>>>>>> Signed-off-by: Maya Matuszczyk <maccraft123mc@gmail.com>
>>>>>> ---
>>>>>> .../bindings/platform/qcom,x1e-it8987-ec.yaml | 52 +++++++++++++++++++
>>>>>> 1 file changed, 52 insertions(+)
>>>>>> create mode 100644
>>>>> Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
>>>>>>
>>>>>> diff --git
>>>>> a/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
>>>>> b/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
>>>>>> new file mode 100644
>>>>>> index 000000000000..4a4f6eb63072
>>>>>> --- /dev/null
>>>>>> +++ b/Documentation/devicetree/bindings/platform/qcom,x1e-it8987-ec.yaml
>>>>>> @@ -0,0 +1,52 @@
>>>>>> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
>>>>>> +%YAML 1.2
>>>>>> +---
>>>>>> +$id: http://devicetree.org/schemas/platform/qcom,x1e-it8987-ec.yaml#
>>>>>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>>>>>> +
>>>>>> +title: Qualcomm Embedded Controller on IT8987 chip.
>>>>>> +
>>>>>> +maintainers:
>>>>>> + - Maya Matuszczyk <maccraft123mc@gmail.com>
>>>>>> +
>>>>>> +description:
>>>>>> + Most x1e80100 laptops have an EC running on IT8987 MCU chip. The EC
>>>>> controls
>>>>>> + minor functions, like fans, power LED, and on some laptops it also
>>>>> handles
>>>>>> + keyboard hotkeys.
>>>>>> +
>>>>>> +properties:
>>>>>> + compatible:
>>>>>> + oneOf:
>>>>>> + - const: qcom,x1e-it8987-ec
>>>>>
>>>>> Given that ECs tend to be somewhat device-specific and many vendors
>>>>> might have slightly customized the EC firmware(?), I think it would be
>>>>> better to disallow using this generic compatible without a more specific
>>>>> one. In other words, I would drop this line and just keep the case
>>>>> below:
>>>>>
>>>> I've looked at DSDT of other devices and they look to be compatible with
>>>> what's on the devkit, with differences being extra features on magicbook
>>>> art 14 and yoga slim 7x. Though this isn't a hill I'm willing to die on.
>>>>
>>>
>>> I think it's fine to keep qcom,x1e-it8987-ec as second compatible.
>>
>>
>> No, because:
>> 1. There is no such thing as x1e
>> 2. If there was a soc like this, this has nothing to do with SoC. It is
>> not a component inside SoC and that is the only allowed case when you
>> use SoC compatibles.
>
> It was the closest thing I had for a "platform name"
>
>>
>>> However, without a more specific compatible, there is a risk we have
>>> nothing to match on in case device-specific handling becomes necessary
>>> in the driver at some point.
>>>
>>> It's certainly subjective, but it might be better to play it safe here
>>> and have a specific compatible that one can match, even if the behavior
>>> is 99% the same. There will often be subtly different behavior across
>>> devices, you mentioned the "keyboard backlight turning off and the power
>>> LED slowly blinking", who knows what else exists.
>>>
>>> I suppose worst case we could also use of_machine_is_compatible() to
>>> just match the device the EC is running on, but I'm not sure if that
>>> would be frowned upon.
>>
>>
>> Unless you have some sort of insights or secret knowledge from Qualcomm
>> (Bjorn or Konrad can chime in here), I think these are pure guesses that
>> this is a Qualcomm product (implied by vendor prefix) or some sort of
>> re-usable generic firmware from Qualcomm present on multiple devices.
>
> The x elite devkit also has the IT8987 EC chip, and when comparing the
> firmware of it and Yoga Slim 7x's EC there are similarities when
> running them through strings
> On both of them at the beginning there are strings that look like
> version identifiers:
> Devkit:
> UUBBK V:00.20.00$
> BBK-V20$
>
> Slim7x:
> UUBBK V:00.21.00$
> BBK-V21$
>
> With similar ones at the end:
> Devkit:
> EC VER:00.29.00$
> LsFv:00.29.00$
> Qualcomm$
> WoS 8c GenX$
> ODM$
> MB:A0$
> BUILD DATE:
> 02/0//2/24$
> TIME:
> 14:33:35$
>
> Slim7x:
> EC VER:00.60.00$
> LsFv:00.20.00$
> Qualcomm$
> WoS 8c GenX$
> ODM$
> MB:A0$
> BUILD DATE:
> 2024/07/25$
> TIME:
> 09:58:00$
>
>
>
>>
>> If the FW across devices is the same, then fallbacks for these are fine
>> with me.
>
> As the devkit has EC firmware that is handled the same way in DSDT
> tables of most of other x1e laptops with the same EC, and is a subset
> of what's done on Lenovo Yoga Slim 7x and Honor Magicbook Art 14 I
> think the devkit's compatible + -ec would be a good pick.
>
> This conversation is getting long and I feel like I've said everything
> I wanted to say, I'll just do what you tell me to do about the
> fallback and binding filename.
>
I have raised this topic internally at Qualcomm. However, since some key
personnel are currently on holiday, an immediate response is not
possible. Rest assured, the topic is under review internally. Please
stay tuned for updates.
I want to personally thank you for your current support and efforts.
>>
>> Best regards,
>> Krzysztof
--
Thx and BRs,
Aiqun(Maria) Yu
^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987
2024-12-30 2:45 ` Aiqun(Maria) Yu
@ 2025-01-14 10:23 ` Aiqun(Maria) Yu
0 siblings, 0 replies; 26+ messages in thread
From: Aiqun(Maria) Yu @ 2025-01-14 10:23 UTC (permalink / raw)
To: Maya Matuszczyk, Krzysztof Kozlowski
Cc: Stephan Gerhold, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
linux-arm-msm, devicetree, linux-kernel
On 12/30/2024 10:45 AM, Aiqun(Maria) Yu wrote:
> On 12/22/2024 11:07 PM, Maya Matuszczyk wrote:
[...]
>>
>
> I have raised this topic internally at Qualcomm. However, since some key
> personnel are currently on holiday, an immediate response is not
> possible. Rest assured, the topic is under review internally. Please
> stay tuned for updates.
Just want to update the thread to let you know: We are working on this. :)
The information that can be updated here is as follows:
1. Qualcomm has a reference spec design for EC (Embedded Controller),
and OEMs are able to customize it according to their design.
The reference spec design may regardless of ITE or other EC vendors.
2. the reference EC spec will be supported on Qualcomm Compute reference
designs for other platform as well. This is irrespective of the
underlying transport (I2C, I3C, or any other Qualcomm proprietary transport.
Some of the main functionalities in this patch series appear to align
with the spec reference design. Therefore, it could be possibly extended
to become a more generic EC driver that supports a wider range of devices.
>
> I want to personally thank you for your current support and efforts.
[...]
--
Thx and BRs,
Aiqun(Maria) Yu
^ permalink raw reply [flat|nested] 26+ messages in thread
end of thread, other threads:[~2025-01-14 10:23 UTC | newest]
Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-19 20:08 [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987 Maya Matuszczyk
2024-12-19 20:08 ` [PATCH v2 2/3] platform: arm64: Add driver for EC found in most X1E laptops Maya Matuszczyk
2024-12-19 20:43 ` Bryan O'Donoghue
2024-12-19 20:58 ` Maya Matuszczyk
2024-12-20 11:50 ` Aiqun(Maria) Yu
2024-12-20 12:14 ` Maya Matuszczyk
2024-12-22 6:56 ` Dmitry Baryshkov
2024-12-22 6:35 ` Krzysztof Kozlowski
2024-12-20 19:01 ` Stephan Gerhold
2024-12-22 6:34 ` Krzysztof Kozlowski
2024-12-19 20:08 ` [PATCH v2 3/3] arm64: dts: qcom: x1e80100-lenovo-yoga-slim7x: Add the EC Maya Matuszczyk
2024-12-20 11:52 ` Aiqun(Maria) Yu
2024-12-20 12:10 ` Konrad Dybcio
2024-12-19 23:40 ` [PATCH v2 1/3] dt-bindings: platform: Add bindings for Qcom's EC on IT8987 Rob Herring (Arm)
2024-12-20 18:05 ` Stephan Gerhold
[not found] ` <CAO_MupJ7JtXNgGyXcxGa+EGAvsu-yG0O6MgneGUBdCEgKNG+MA@mail.gmail.com>
2024-12-20 18:24 ` Stephan Gerhold
2024-12-22 14:40 ` Krzysztof Kozlowski
2024-12-22 15:07 ` Maya Matuszczyk
2024-12-23 14:25 ` Krzysztof Kozlowski
2024-12-30 2:45 ` Aiqun(Maria) Yu
2025-01-14 10:23 ` Aiqun(Maria) Yu
2024-12-22 6:33 ` Krzysztof Kozlowski
2024-12-22 6:40 ` Krzysztof Kozlowski
2024-12-22 7:55 ` Maya Matuszczyk
2024-12-22 9:40 ` Maya Matuszczyk
2024-12-22 14:34 ` Krzysztof Kozlowski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).