diff --git a/patch/kernel/archive/sm8250-6.10/0000.patching_config.yaml b/patch/kernel/archive/sm8250-6.12/0000.patching_config.yaml similarity index 94% rename from patch/kernel/archive/sm8250-6.10/0000.patching_config.yaml rename to patch/kernel/archive/sm8250-6.12/0000.patching_config.yaml index 8fa367ff5ccb..38f229666adf 100644 --- a/patch/kernel/archive/sm8250-6.10/0000.patching_config.yaml +++ b/patch/kernel/archive/sm8250-6.12/0000.patching_config.yaml @@ -1,11 +1,11 @@ config: # This is file 'patch/kernel/archive/sm8250-6.7/0000.patching_config.yaml' # Just some info stuff; not used by the patching scripts - name: sm8250-6.10 + name: sm8250-6.12 kind: kernel type: mainline # or: vendor - branch: linux-6.10.y - last-known-good-tag: v6.10-rc2 + branch: linux-6.12.y + last-known-good-tag: v6.12.5 maintainers: - { github: rpardini, name: Ricardo Pardini, email: ricardo@pardini.net, armbian-forum: rpardini } diff --git a/patch/kernel/archive/sm8250-6.10/dt/sm8250-xiaomi-umi-common.dtsi b/patch/kernel/archive/sm8250-6.12/dt/sm8250-xiaomi-umi-common.dtsi similarity index 100% rename from patch/kernel/archive/sm8250-6.10/dt/sm8250-xiaomi-umi-common.dtsi rename to patch/kernel/archive/sm8250-6.12/dt/sm8250-xiaomi-umi-common.dtsi diff --git a/patch/kernel/archive/sm8250-6.10/dt/sm8250-xiaomi-umi-csot.dts b/patch/kernel/archive/sm8250-6.12/dt/sm8250-xiaomi-umi-csot.dts similarity index 100% rename from patch/kernel/archive/sm8250-6.10/dt/sm8250-xiaomi-umi-csot.dts rename to patch/kernel/archive/sm8250-6.12/dt/sm8250-xiaomi-umi-csot.dts diff --git a/patch/kernel/archive/sm8250-6.10/dt/sm8250-xiaomi-umi-sms.dts b/patch/kernel/archive/sm8250-6.12/dt/sm8250-xiaomi-umi-sms.dts similarity index 100% rename from patch/kernel/archive/sm8250-6.10/dt/sm8250-xiaomi-umi-sms.dts rename to patch/kernel/archive/sm8250-6.12/dt/sm8250-xiaomi-umi-sms.dts diff --git a/patch/kernel/archive/sm8250-6.9/0000.patching_config.yaml b/patch/kernel/archive/sm8250-6.9/0000.patching_config.yaml deleted file mode 100644 index 8cca7a6db59a..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0000.patching_config.yaml +++ /dev/null @@ -1,29 +0,0 @@ -config: # This is file 'patch/kernel/archive/sm8250-6.9/0000.patching_config.yaml' - - # Just some info stuff; not used by the patching scripts - name: sm8250-6.9 - kind: kernel - type: mainline # or: vendor - branch: linux-6.9.y - last-known-good-tag: v6.9.3 - maintainers: - - { github: rpardini, name: Ricardo Pardini, email: ricardo@pardini.net, armbian-forum: rpardini } - - # .dts files in these directories will be copied as-is to the build tree; later ones overwrite earlier ones. - # This is meant to provide a way to "add a board DTS" without having to null-patch them in. - dts-directories: - - { source: "dt", target: "arch/arm64/boot/dts/qcom" } - - # the Makefile in each of these directories will be magically patched to include the dts files copied - # or patched-in; overlay subdir will be included "-y" if it exists. - # No more Makefile patching needed, yay! - auto-patch-dt-makefile: - - { directory: "arch/arm64/boot/dts/qcom", config-var: "CONFIG_ARCH_QCOM" } - - # configuration for when applying patches to git / auto-rewriting patches (development cycle helpers) - patches-to-git: - do-not-commit-files: - - "MAINTAINERS" # constant churn, drop them. sorry. - do-not-commit-regexes: # Python-style regexes - - "^arch/([a-zA-Z0-9]+)/boot/dts/([a-zA-Z0-9]+)/Makefile$" # ignore DT Makefile patches, we've an auto-patcher now - diff --git a/patch/kernel/archive/sm8250-6.9/0001-dt-bindings-mfd-qcom-qca639x-add-binding-for-QCA639x.patch b/patch/kernel/archive/sm8250-6.9/0001-dt-bindings-mfd-qcom-qca639x-add-binding-for-QCA639x.patch deleted file mode 100644 index f0815c7624c4..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0001-dt-bindings-mfd-qcom-qca639x-add-binding-for-QCA639x.patch +++ /dev/null @@ -1,108 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Dmitry Baryshkov -Date: Sun, 20 Dec 2020 18:47:57 +0300 -Subject: dt-bindings: mfd: qcom,qca639x: add binding for QCA639x defvice - -Qualcomm QCA639x is a family of WiFi + Bluetooth SoCs, with BT part -being controlled through the UART and WiFi being present on PCIe bus. -Both blocks share common power sources. Add binding to describe power -sequencing required to power up this device. - -Signed-off-by: Dmitry Baryshkov ---- - Documentation/devicetree/bindings/mfd/qcom,qca639x.yaml | 84 ++++++++++ - 1 file changed, 84 insertions(+) - -diff --git a/Documentation/devicetree/bindings/mfd/qcom,qca639x.yaml b/Documentation/devicetree/bindings/mfd/qcom,qca639x.yaml -new file mode 100644 -index 000000000000..111111111111 ---- /dev/null -+++ b/Documentation/devicetree/bindings/mfd/qcom,qca639x.yaml -@@ -0,0 +1,84 @@ -+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) -+%YAML 1.2 -+--- -+$id: "http://devicetree.org/schemas/mfd/qcom,qca639x.yaml#" -+$schema: "http://devicetree.org/meta-schemas/core.yaml#" -+ -+title: Qualcomm QCA639x WiFi + Bluetoot SoC bindings -+ -+maintainers: -+ - Andy Gross -+ - Bjorn Andersson -+ -+description: | -+ This binding describes thes Qualcomm QCA6390 or QCA6391 power supplies and -+ enablement pins. -+ -+properties: -+ compatible: -+ const: qcom,qca639x -+ -+ '#power-domain-cells': -+ const: 0 -+ -+ pinctrl-0: true -+ pinctrl-1: true -+ -+ pinctrl-names: -+ items: -+ - const: default -+ - const: active -+ -+ vddaon-supply: -+ description: -+ 0.95V always-on LDO power input -+ -+ vddpmu-supply: -+ description: -+ 0.95V LDO power input to PMU -+ -+ vddrfa1-supply: -+ description: -+ 0.95V LDO power input to RFA -+ -+ vddrfa2-supply: -+ description: -+ 1.25V LDO power input to RFA -+ -+ vddrfa3-supply: -+ description: -+ 2V LDO power input to RFA -+ -+ vddpcie1-supply: -+ description: -+ 1.25V LDO power input to PCIe part -+ -+ vddpcie2-supply: -+ description: -+ 2V LDO power input to PCIe part -+ -+ vddio-supply: -+ description: -+ 1.8V VIO input -+ -+additionalProperties: false -+ -+examples: -+ - | -+ qca639x: qca639x { -+ compatible = "qcom,qca639x"; -+ #power-domain-cells = <0>; -+ -+ vddaon-supply = <&vreg_s6a_0p95>; -+ vddpmu-supply = <&vreg_s2f_0p95>; -+ vddrfa1-supply = <&vreg_s2f_0p95>; -+ vddrfa2-supply = <&vreg_s8c_1p3>; -+ vddrfa3-supply = <&vreg_s5a_1p9>; -+ vddpcie1-supply = <&vreg_s8c_1p3>; -+ vddpcie2-supply = <&vreg_s5a_1p9>; -+ vddio-supply = <&vreg_s4a_1p8>; -+ pinctrl-names = "default", "active"; -+ pinctrl-0 = <&wlan_default_state &bt_default_state>; -+ pinctrl-1 = <&wlan_active_state &bt_active_state>; -+ }; -+... --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0002-mfd-qca639x-add-support-for-QCA639x-powerup-sequence.patch b/patch/kernel/archive/sm8250-6.9/0002-mfd-qca639x-add-support-for-QCA639x-powerup-sequence.patch deleted file mode 100644 index 88a1607b1de1..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0002-mfd-qca639x-add-support-for-QCA639x-powerup-sequence.patch +++ /dev/null @@ -1,223 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Dmitry Baryshkov -Date: Fri, 18 Dec 2020 16:24:56 +0300 -Subject: mfd: qca639x: add support for QCA639x powerup sequence - -Qualcomm QCA639x is a family of WiFi + Bluetooth SoCs, with BT part -being controlled through the UART and WiFi being present on PCIe -bus. Both blocks share common power sources. So add mfd device driver -handling power sequencing of QCA6390/1. - -Signed-off-by: Dmitry Baryshkov ---- - drivers/mfd/Kconfig | 12 + - drivers/mfd/Makefile | 1 + - drivers/mfd/qcom-qca639x.c | 162 ++++++++++ - 3 files changed, 175 insertions(+) - -diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig -index 111111111111..222222222222 100644 ---- a/drivers/mfd/Kconfig -+++ b/drivers/mfd/Kconfig -@@ -1123,6 +1123,18 @@ config MFD_PM8XXX - Say M here if you want to include support for PM8xxx chips as a - module. This will build a module called "pm8xxx-core". - -+config MFD_QCOM_QCA639X -+ tristate "Qualcomm QCA639x WiFi/Bluetooth module support" -+ depends on REGULATOR && PM_GENERIC_DOMAINS -+ help -+ If you say yes to this option, support will be included for Qualcomm -+ QCA639x family of WiFi and Bluetooth SoCs. Note, this driver supports -+ only power control for this SoC, you still have to enable individual -+ Bluetooth and WiFi drivers. -+ -+ Say M here if you want to include support for QCA639x chips as a -+ module. This will build a module called "qcom-qca639x". -+ - config MFD_QCOM_RPM - tristate "Qualcomm Resource Power Manager (RPM)" - depends on ARCH_QCOM && OF -diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile -index 111111111111..222222222222 100644 ---- a/drivers/mfd/Makefile -+++ b/drivers/mfd/Makefile -@@ -204,6 +204,7 @@ obj-$(CONFIG_MFD_SI476X_CORE) += si476x-core.o - obj-$(CONFIG_MFD_CS5535) += cs5535-mfd.o - obj-$(CONFIG_MFD_OMAP_USB_HOST) += omap-usb-host.o omap-usb-tll.o - obj-$(CONFIG_MFD_PM8XXX) += qcom-pm8xxx.o ssbi.o -+obj-$(CONFIG_MFD_QCOM_QCA639X) += qcom-qca639x.o - obj-$(CONFIG_MFD_QCOM_RPM) += qcom_rpm.o - obj-$(CONFIG_MFD_SPMI_PMIC) += qcom-spmi-pmic.o - obj-$(CONFIG_TPS65911_COMPARATOR) += tps65911-comparator.o -diff --git a/drivers/mfd/qcom-qca639x.c b/drivers/mfd/qcom-qca639x.c -new file mode 100644 -index 000000000000..111111111111 ---- /dev/null -+++ b/drivers/mfd/qcom-qca639x.c -@@ -0,0 +1,162 @@ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#define MAX_NUM_REGULATORS 8 -+ -+static struct vreg { -+ const char *name; -+ unsigned int load_uA; -+} vregs [MAX_NUM_REGULATORS] = { -+ /* 2.0 V */ -+ { "vddpcie2", 15000 }, -+ { "vddrfa3", 400000 }, -+ -+ /* 0.95 V */ -+ { "vddaon", 100000 }, -+ { "vddpmu", 1250000 }, -+ { "vddrfa1", 200000 }, -+ -+ /* 1.35 V */ -+ { "vddrfa2", 400000 }, -+ { "vddpcie1", 35000 }, -+ -+ /* 1.8 V */ -+ { "vddio", 20000 }, -+}; -+ -+struct qca639x_data { -+ struct regulator_bulk_data regulators[MAX_NUM_REGULATORS]; -+ size_t num_vregs; -+ struct device *dev; -+ struct pinctrl_state *active_state; -+ struct generic_pm_domain pd; -+}; -+ -+#define domain_to_data(domain) container_of(domain, struct qca639x_data, pd) -+ -+static int qca639x_power_on(struct generic_pm_domain *domain) -+{ -+ struct qca639x_data *data = domain_to_data(domain); -+ int ret; -+ -+ dev_warn(&domain->dev, "DUMMY POWER ON\n"); -+ -+ ret = regulator_bulk_enable(data->num_vregs, data->regulators); -+ if (ret) { -+ dev_err(data->dev, "Failed to enable regulators"); -+ return ret; -+ } -+ -+ /* Wait for 1ms before toggling enable pins. */ -+ msleep(1); -+ -+ ret = pinctrl_select_state(data->dev->pins->p, data->active_state); -+ if (ret) { -+ dev_err(data->dev, "Failed to select active state"); -+ return ret; -+ } -+ -+ /* Wait for all power levels to stabilize */ -+ msleep(6); -+ -+ return 0; -+} -+ -+static int qca639x_power_off(struct generic_pm_domain *domain) -+{ -+ struct qca639x_data *data = domain_to_data(domain); -+ -+ dev_warn(&domain->dev, "DUMMY POWER OFF\n"); -+ -+ pinctrl_select_default_state(data->dev); -+ regulator_bulk_disable(data->num_vregs, data->regulators); -+ -+ return 0; -+} -+ -+static int qca639x_probe(struct platform_device *pdev) -+{ -+ struct qca639x_data *data; -+ struct device *dev = &pdev->dev; -+ int i, ret; -+ -+ if (!dev->pins || IS_ERR_OR_NULL(dev->pins->default_state)) -+ return -EINVAL; -+ -+ data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); -+ if (!data) -+ return -ENOMEM; -+ -+ data->dev = dev; -+ data->num_vregs = ARRAY_SIZE(vregs); -+ -+ data->active_state = pinctrl_lookup_state(dev->pins->p, "active"); -+ if (IS_ERR(data->active_state)) { -+ ret = PTR_ERR(data->active_state); -+ dev_err(dev, "Failed to get active_state: %d\n", ret); -+ return ret; -+ } -+ -+ for (i = 0; i < data->num_vregs; i++) -+ data->regulators[i].supply = vregs[i].name; -+ ret = devm_regulator_bulk_get(dev, data->num_vregs, data->regulators); -+ if (ret < 0) -+ return ret; -+ -+ for (i = 0; i < data->num_vregs; i++) { -+ ret = regulator_set_load(data->regulators[i].consumer, vregs[i].load_uA); -+ if (ret) -+ return ret; -+ } -+ -+ data->pd.name = dev_name(dev); -+ data->pd.power_on = qca639x_power_on; -+ data->pd.power_off = qca639x_power_off; -+ -+ ret = pm_genpd_init(&data->pd, NULL, true); -+ if (ret < 0) -+ return ret; -+ -+ ret = of_genpd_add_provider_simple(dev->of_node, &data->pd); -+ if (ret < 0) { -+ pm_genpd_remove(&data->pd); -+ return ret; -+ } -+ -+ platform_set_drvdata(pdev, data); -+ -+ return 0; -+} -+ -+static int qca639x_remove(struct platform_device *pdev) -+{ -+ struct qca639x_data *data = platform_get_drvdata(pdev); -+ -+ pm_genpd_remove(&data->pd); -+ -+ return 0; -+} -+ -+static const struct of_device_id qca639x_of_match[] = { -+ { .compatible = "qcom,qca639x" }, -+}; -+ -+static struct platform_driver qca639x_driver = { -+ .probe = qca639x_probe, -+ .remove = qca639x_remove, -+ .driver = { -+ .name = "qca639x", -+ .of_match_table = qca639x_of_match, -+ }, -+}; -+ -+module_platform_driver(qca639x_driver); -+MODULE_LICENSE("GPL v2"); --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0003-mfd-qcom-qca639x-switch-to-platform-config-data.patch b/patch/kernel/archive/sm8250-6.9/0003-mfd-qcom-qca639x-switch-to-platform-config-data.patch deleted file mode 100644 index 7fed6e472be7..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0003-mfd-qcom-qca639x-switch-to-platform-config-data.patch +++ /dev/null @@ -1,188 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Dmitry Baryshkov -Date: Sat, 26 Feb 2022 21:13:18 +0300 -Subject: mfd: qcom-qca639x: switch to platform config data - -Change qcom-qca639x to use platform config data, in preparation to -supporting other devices. - -Signed-off-by: Dmitry Baryshkov ---- - drivers/mfd/qcom-qca639x.c | 74 ++++++---- - 1 file changed, 46 insertions(+), 28 deletions(-) - -diff --git a/drivers/mfd/qcom-qca639x.c b/drivers/mfd/qcom-qca639x.c -index 111111111111..222222222222 100644 ---- a/drivers/mfd/qcom-qca639x.c -+++ b/drivers/mfd/qcom-qca639x.c -@@ -1,4 +1,5 @@ - #include -+#include - #include - #include - #include -@@ -6,15 +7,21 @@ - #include - #include - #include -+#include - #include - #include - --#define MAX_NUM_REGULATORS 8 -- --static struct vreg { -+struct vreg { - const char *name; - unsigned int load_uA; --} vregs [MAX_NUM_REGULATORS] = { -+}; -+ -+struct qca_cfg_data { -+ const struct vreg *vregs; -+ size_t num_vregs; -+}; -+ -+static const struct vreg qca6390_vregs[] = { - /* 2.0 V */ - { "vddpcie2", 15000 }, - { "vddrfa3", 400000 }, -@@ -32,19 +39,24 @@ static struct vreg { - { "vddio", 20000 }, - }; - --struct qca639x_data { -- struct regulator_bulk_data regulators[MAX_NUM_REGULATORS]; -+static const struct qca_cfg_data qca6390_cfg_data = { -+ .vregs = qca6390_vregs, -+ .num_vregs = ARRAY_SIZE(qca6390_vregs), -+}; -+ -+struct qca_data { - size_t num_vregs; - struct device *dev; - struct pinctrl_state *active_state; - struct generic_pm_domain pd; -+ struct regulator_bulk_data regulators[]; - }; - --#define domain_to_data(domain) container_of(domain, struct qca639x_data, pd) -+#define domain_to_data(domain) container_of(domain, struct qca_data, pd) - --static int qca639x_power_on(struct generic_pm_domain *domain) -+static int qca_power_on(struct generic_pm_domain *domain) - { -- struct qca639x_data *data = domain_to_data(domain); -+ struct qca_data *data = domain_to_data(domain); - int ret; - - dev_warn(&domain->dev, "DUMMY POWER ON\n"); -@@ -70,9 +82,9 @@ static int qca639x_power_on(struct generic_pm_domain *domain) - return 0; - } - --static int qca639x_power_off(struct generic_pm_domain *domain) -+static int qca_power_off(struct generic_pm_domain *domain) - { -- struct qca639x_data *data = domain_to_data(domain); -+ struct qca_data *data = domain_to_data(domain); - - dev_warn(&domain->dev, "DUMMY POWER OFF\n"); - -@@ -82,21 +94,26 @@ static int qca639x_power_off(struct generic_pm_domain *domain) - return 0; - } - --static int qca639x_probe(struct platform_device *pdev) -+static int qca_probe(struct platform_device *pdev) - { -- struct qca639x_data *data; -+ const struct qca_cfg_data *cfg; -+ struct qca_data *data; - struct device *dev = &pdev->dev; - int i, ret; - -+ cfg = device_get_match_data(&pdev->dev); -+ if (!cfg) -+ return -EINVAL; -+ - if (!dev->pins || IS_ERR_OR_NULL(dev->pins->default_state)) - return -EINVAL; - -- data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); -+ data = devm_kzalloc(dev, struct_size(data, regulators, cfg->num_vregs), GFP_KERNEL); - if (!data) - return -ENOMEM; - - data->dev = dev; -- data->num_vregs = ARRAY_SIZE(vregs); -+ data->num_vregs = cfg->num_vregs; - - data->active_state = pinctrl_lookup_state(dev->pins->p, "active"); - if (IS_ERR(data->active_state)) { -@@ -106,20 +123,20 @@ static int qca639x_probe(struct platform_device *pdev) - } - - for (i = 0; i < data->num_vregs; i++) -- data->regulators[i].supply = vregs[i].name; -+ data->regulators[i].supply = cfg->vregs[i].name; - ret = devm_regulator_bulk_get(dev, data->num_vregs, data->regulators); - if (ret < 0) - return ret; - - for (i = 0; i < data->num_vregs; i++) { -- ret = regulator_set_load(data->regulators[i].consumer, vregs[i].load_uA); -+ ret = regulator_set_load(data->regulators[i].consumer, cfg->vregs[i].load_uA); - if (ret) - return ret; - } - - data->pd.name = dev_name(dev); -- data->pd.power_on = qca639x_power_on; -- data->pd.power_off = qca639x_power_off; -+ data->pd.power_on = qca_power_on; -+ data->pd.power_off = qca_power_off; - - ret = pm_genpd_init(&data->pd, NULL, true); - if (ret < 0) -@@ -136,27 +153,28 @@ static int qca639x_probe(struct platform_device *pdev) - return 0; - } - --static int qca639x_remove(struct platform_device *pdev) -+static int qca_remove(struct platform_device *pdev) - { -- struct qca639x_data *data = platform_get_drvdata(pdev); -+ struct qca_data *data = platform_get_drvdata(pdev); - - pm_genpd_remove(&data->pd); - - return 0; - } - --static const struct of_device_id qca639x_of_match[] = { -- { .compatible = "qcom,qca639x" }, -+static const struct of_device_id qca_of_match[] = { -+ { .compatible = "qcom,qca6390", .data = &qca6390_cfg_data }, -+ { }, - }; - --static struct platform_driver qca639x_driver = { -- .probe = qca639x_probe, -- .remove = qca639x_remove, -+static struct platform_driver qca_driver = { -+ .probe = qca_probe, -+ .remove = qca_remove, - .driver = { - .name = "qca639x", -- .of_match_table = qca639x_of_match, -+ .of_match_table = qca_of_match, - }, - }; - --module_platform_driver(qca639x_driver); -+module_platform_driver(qca_driver); - MODULE_LICENSE("GPL v2"); --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0004-mfd-qcom-qca639x-change-qca639x-to-use-gpios-rather-.patch b/patch/kernel/archive/sm8250-6.9/0004-mfd-qcom-qca639x-change-qca639x-to-use-gpios-rather-.patch deleted file mode 100644 index 1fdc483d6341..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0004-mfd-qcom-qca639x-change-qca639x-to-use-gpios-rather-.patch +++ /dev/null @@ -1,88 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Dmitry Baryshkov -Date: Sat, 26 Feb 2022 21:17:22 +0300 -Subject: mfd: qcom-qca639x: change qca639x to use gpios rather than pinctrl - -Use gpio interface instead of pinctrl interface to toggle enable pins. - -Signed-off-by: Dmitry Baryshkov ---- - drivers/mfd/qcom-qca639x.c | 33 ++++++---- - 1 file changed, 19 insertions(+), 14 deletions(-) - -diff --git a/drivers/mfd/qcom-qca639x.c b/drivers/mfd/qcom-qca639x.c -index 111111111111..222222222222 100644 ---- a/drivers/mfd/qcom-qca639x.c -+++ b/drivers/mfd/qcom-qca639x.c -@@ -47,8 +47,9 @@ static const struct qca_cfg_data qca6390_cfg_data = { - struct qca_data { - size_t num_vregs; - struct device *dev; -- struct pinctrl_state *active_state; - struct generic_pm_domain pd; -+ struct gpio_desc *wlan_en_gpio; -+ struct gpio_desc *bt_en_gpio; - struct regulator_bulk_data regulators[]; - }; - -@@ -70,11 +71,10 @@ static int qca_power_on(struct generic_pm_domain *domain) - /* Wait for 1ms before toggling enable pins. */ - msleep(1); - -- ret = pinctrl_select_state(data->dev->pins->p, data->active_state); -- if (ret) { -- dev_err(data->dev, "Failed to select active state"); -- return ret; -- } -+ if (data->wlan_en_gpio) -+ gpiod_set_value(data->wlan_en_gpio, 1); -+ if (data->bt_en_gpio) -+ gpiod_set_value(data->bt_en_gpio, 1); - - /* Wait for all power levels to stabilize */ - msleep(6); -@@ -88,7 +88,11 @@ static int qca_power_off(struct generic_pm_domain *domain) - - dev_warn(&domain->dev, "DUMMY POWER OFF\n"); - -- pinctrl_select_default_state(data->dev); -+ if (data->wlan_en_gpio) -+ gpiod_set_value(data->wlan_en_gpio, 0); -+ if (data->bt_en_gpio) -+ gpiod_set_value(data->bt_en_gpio, 0); -+ - regulator_bulk_disable(data->num_vregs, data->regulators); - - return 0; -@@ -115,13 +119,6 @@ static int qca_probe(struct platform_device *pdev) - data->dev = dev; - data->num_vregs = cfg->num_vregs; - -- data->active_state = pinctrl_lookup_state(dev->pins->p, "active"); -- if (IS_ERR(data->active_state)) { -- ret = PTR_ERR(data->active_state); -- dev_err(dev, "Failed to get active_state: %d\n", ret); -- return ret; -- } -- - for (i = 0; i < data->num_vregs; i++) - data->regulators[i].supply = cfg->vregs[i].name; - ret = devm_regulator_bulk_get(dev, data->num_vregs, data->regulators); -@@ -134,6 +131,14 @@ static int qca_probe(struct platform_device *pdev) - return ret; - } - -+ data->wlan_en_gpio = devm_gpiod_get_optional(&pdev->dev, "wlan-en", GPIOD_OUT_LOW); -+ if (IS_ERR(data->wlan_en_gpio)) -+ return PTR_ERR(data->wlan_en_gpio); -+ -+ data->bt_en_gpio = devm_gpiod_get_optional(&pdev->dev, "bt-en", GPIOD_OUT_LOW); -+ if (IS_ERR(data->bt_en_gpio)) -+ return PTR_ERR(data->bt_en_gpio); -+ - data->pd.name = dev_name(dev); - data->pd.power_on = qca_power_on; - data->pd.power_off = qca_power_off; --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0005-Bluetooth-hci_qca-reopen-serial-port-after-toggling-.patch b/patch/kernel/archive/sm8250-6.9/0005-Bluetooth-hci_qca-reopen-serial-port-after-toggling-.patch deleted file mode 100644 index 4ab835675fe9..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0005-Bluetooth-hci_qca-reopen-serial-port-after-toggling-.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Dmitry Baryshkov -Date: Sat, 26 Feb 2022 23:07:54 +0300 -Subject: Bluetooth: hci_qca: reopen serial port after toggling power - -Reopen the serial port after toggling the power. This saves us from -getting command timeouts on first command submitted. - -Signed-off-by: Dmitry Baryshkov ---- - drivers/bluetooth/hci_qca.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c -index 111111111111..222222222222 100644 ---- a/drivers/bluetooth/hci_qca.c -+++ b/drivers/bluetooth/hci_qca.c -@@ -1801,6 +1801,8 @@ static int qca_power_on(struct hci_dev *hdev) - gpiod_set_value_cansleep(qcadev->bt_en, 1); - /* Controller needs time to bootup. */ - msleep(150); -+ serdev_device_close(hu->serdev); -+ ret = serdev_device_open(hu->serdev); - } - } - --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0006-tty-serial-qcom-geni-Hack-up-for-qca6390-bt.patch b/patch/kernel/archive/sm8250-6.9/0006-tty-serial-qcom-geni-Hack-up-for-qca6390-bt.patch deleted file mode 100644 index 7bfd422bc1cf..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0006-tty-serial-qcom-geni-Hack-up-for-qca6390-bt.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jianhua Lu -Date: Fri, 27 Oct 2023 21:18:00 +0800 -Subject: tty: serial: qcom-geni: Hack up for qca6390-bt - ---- - drivers/tty/serial/qcom_geni_serial.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/tty/serial/qcom_geni_serial.c b/drivers/tty/serial/qcom_geni_serial.c -index 111111111111..222222222222 100644 ---- a/drivers/tty/serial/qcom_geni_serial.c -+++ b/drivers/tty/serial/qcom_geni_serial.c -@@ -819,7 +819,7 @@ static void qcom_geni_serial_handle_rx_dma(struct uart_port *uport, bool drop) - rx_in = readl(uport->membase + SE_DMA_RX_LEN_IN); - if (!rx_in) { - dev_warn(uport->dev, "serial engine reports 0 RX bytes in!\n"); -- return; -+ //return; - } - - if (!drop) --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0007-drm-Add-drm-notifier-support.patch b/patch/kernel/archive/sm8250-6.9/0007-drm-Add-drm-notifier-support.patch deleted file mode 100644 index c74528518574..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0007-drm-Add-drm-notifier-support.patch +++ /dev/null @@ -1,135 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jianhua Lu -Date: Thu, 4 Aug 2022 13:26:53 +0800 -Subject: drm: Add drm notifier support - ---- - drivers/gpu/drm/Makefile | 3 +- - drivers/gpu/drm/drm_notifier.c | 58 ++++++++++ - include/drm/drm_notifier.h | 37 ++++++ - 3 files changed, 97 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/Makefile -+++ b/drivers/gpu/drm/Makefile -@@ -46,7 +46,8 @@ drm-y := \ - drm_vblank.o \ - drm_vblank_work.o \ - drm_vma_manager.o \ -- drm_writeback.o -+ drm_writeback.o \ -+ drm_notifier.o - drm-$(CONFIG_DRM_LIB_RANDOM) += lib/drm_random.o - drm-$(CONFIG_COMPAT) += drm_ioc32.o - drm-$(CONFIG_DRM_PANEL) += drm_panel.o -diff --git a/drivers/gpu/drm/drm_notifier.c b/drivers/gpu/drm/drm_notifier.c -new file mode 100644 -index 000000000000..111111111111 ---- /dev/null -+++ b/drivers/gpu/drm/drm_notifier.c -@@ -0,0 +1,58 @@ -+/* -+ * Copyright (c) 2019, The Linux Foundation. All rights reserved. -+ * Copyright (C) 2021 XiaoMi, Inc. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 and -+ * only version 2 as published by the Free Software Foundation. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ */ -+ -+#include -+#include -+ -+static BLOCKING_NOTIFIER_HEAD(mi_drm_notifier_list); -+ -+/** -+ * mi_drm_register_client - register a client notifier -+ * @nb: notifier block to callback on events -+ * -+ * This function registers a notifier callback function -+ * to msm_drm_notifier_list, which would be called when -+ * received unblank/power down event. -+ */ -+int mi_drm_register_client(struct notifier_block *nb) -+{ -+ return blocking_notifier_chain_register(&mi_drm_notifier_list, nb); -+} -+EXPORT_SYMBOL(mi_drm_register_client); -+ -+/** -+ * mi_drm_unregister_client - unregister a client notifier -+ * @nb: notifier block to callback on events -+ * -+ * This function unregisters the callback function from -+ * msm_drm_notifier_list. -+ */ -+int mi_drm_unregister_client(struct notifier_block *nb) -+{ -+ return blocking_notifier_chain_unregister(&mi_drm_notifier_list, nb); -+} -+EXPORT_SYMBOL(mi_drm_unregister_client); -+ -+/** -+ * mi_drm_notifier_call_chain - notify clients of drm_events -+ * @val: event MSM_DRM_EARLY_EVENT_BLANK or MSM_DRM_EVENT_BLANK -+ * @v: notifier data, inculde display id and display blank -+ * event(unblank or power down). -+ */ -+int mi_drm_notifier_call_chain(unsigned long val, void *v) -+{ -+ return blocking_notifier_call_chain(&mi_drm_notifier_list, val, v); -+} -+EXPORT_SYMBOL(mi_drm_notifier_call_chain); -diff --git a/include/drm/drm_notifier.h b/include/drm/drm_notifier.h -new file mode 100644 -index 000000000000..111111111111 ---- /dev/null -+++ b/include/drm/drm_notifier.h -@@ -0,0 +1,37 @@ -+/* -+ * Copyright (c) 2019, The Linux Foundation. All rights reserved. -+ * Copyright (C) 2021 XiaoMi, Inc. -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 and -+ * only version 2 as published by the Free Software Foundation. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ */ -+ -+#ifndef _DRM_NOTIFIER_H_ -+#define _DRM_NOTIFIER_H_ -+ -+#include -+ -+/* A hardware display blank change occurred */ -+#define MI_DRM_EVENT_BLANK 0x01 -+/* A hardware display blank early change occurred */ -+#define MI_DRM_EARLY_EVENT_BLANK 0x02 -+ -+enum drm_notifier_data { -+ /* panel: power on */ -+ MI_DRM_BLANK_UNBLANK, -+ /* panel: power down */ -+ MI_DRM_BLANK_POWERDOWN, -+}; -+ -+int mi_drm_register_client(struct notifier_block *nb); -+int mi_drm_unregister_client(struct notifier_block *nb); -+int mi_drm_notifier_call_chain(unsigned long val, void *v); -+ -+#endif /* _DRM_NOTIFIER_H */ --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0008-drm-dsi-emit-panel-turn-on-off-signal-to-touchscreen.patch b/patch/kernel/archive/sm8250-6.9/0008-drm-dsi-emit-panel-turn-on-off-signal-to-touchscreen.patch deleted file mode 100644 index d4d771052f33..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0008-drm-dsi-emit-panel-turn-on-off-signal-to-touchscreen.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jianhua Lu -Date: Mon, 17 Oct 2022 08:02:58 +0800 -Subject: drm: dsi: emit panel turn on/off signal to touchscreen - ---- - drivers/gpu/drm/msm/dsi/dsi_manager.c | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/dsi/dsi_manager.c -+++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c -@@ -7,6 +7,7 @@ - - #include "msm_kms.h" - #include "dsi.h" -+#include "drm/drm_notifier.h" - - #define DSI_CLOCK_MASTER DSI_0 - #define DSI_CLOCK_SLAVE DSI_1 -@@ -273,6 +274,7 @@ static void dsi_mgr_bridge_pre_enable(struct drm_bridge *bridge) - struct mipi_dsi_host *host = msm_dsi->host; - bool is_bonded_dsi = IS_BONDED_DSI(); - int ret; -+ enum drm_notifier_data notifier_data; - - DBG("id=%d", id); - -@@ -286,6 +288,9 @@ static void dsi_mgr_bridge_pre_enable(struct drm_bridge *bridge) - return; - } - -+ notifier_data = MI_DRM_BLANK_UNBLANK; -+ mi_drm_notifier_call_chain(MI_DRM_EVENT_BLANK, ¬ifier_data); -+ - ret = msm_dsi_host_enable(host); - if (ret) { - pr_err("%s: enable host %d failed, %d\n", __func__, id, ret); -@@ -329,9 +334,13 @@ static void dsi_mgr_bridge_post_disable(struct drm_bridge *bridge) - struct mipi_dsi_host *host = msm_dsi->host; - bool is_bonded_dsi = IS_BONDED_DSI(); - int ret; -+ enum drm_notifier_data notifier_data; - - DBG("id=%d", id); - -+ notifier_data = MI_DRM_BLANK_POWERDOWN; -+ mi_drm_notifier_call_chain(MI_DRM_EARLY_EVENT_BLANK, ¬ifier_data); -+ - /* - * Do nothing with the host if it is slave-DSI in case of bonded DSI. - * It is safe to call dsi_mgr_phy_disable() here because a single PHY --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0009-Input-Add-nt36523-touchscreen-driver.patch b/patch/kernel/archive/sm8250-6.9/0009-Input-Add-nt36523-touchscreen-driver.patch deleted file mode 100644 index b347a3b3515f..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0009-Input-Add-nt36523-touchscreen-driver.patch +++ /dev/null @@ -1,3495 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jianhua Lu -Date: Thu, 4 Aug 2022 13:26:26 +0800 -Subject: Input: Add nt36523 touchscreen driver - ---- - drivers/input/touchscreen/Kconfig | 2 + - drivers/input/touchscreen/Makefile | 1 + - drivers/input/touchscreen/nt36523/Kconfig | 11 + - drivers/input/touchscreen/nt36523/Makefile | 8 + - drivers/input/touchscreen/nt36523/nt36xxx.c | 1910 ++++++++++ - drivers/input/touchscreen/nt36523/nt36xxx.h | 242 ++ - drivers/input/touchscreen/nt36523/nt36xxx_fw_update.c | 857 +++++ - drivers/input/touchscreen/nt36523/nt36xxx_mem_map.h | 390 ++ - 8 files changed, 3421 insertions(+) - -diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig -index 111111111111..222222222222 100644 ---- a/drivers/input/touchscreen/Kconfig -+++ b/drivers/input/touchscreen/Kconfig -@@ -12,6 +12,8 @@ menuconfig INPUT_TOUCHSCREEN - - if INPUT_TOUCHSCREEN - -+source "drivers/input/touchscreen/nt36523/Kconfig" -+ - config TOUCHSCREEN_88PM860X - tristate "Marvell 88PM860x touchscreen" - depends on MFD_88PM860X -diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile -index 111111111111..222222222222 100644 ---- a/drivers/input/touchscreen/Makefile -+++ b/drivers/input/touchscreen/Makefile -@@ -121,3 +121,4 @@ obj-$(CONFIG_TOUCHSCREEN_IQS5XX) += iqs5xx.o - obj-$(CONFIG_TOUCHSCREEN_IQS7211) += iqs7211.o - obj-$(CONFIG_TOUCHSCREEN_ZINITIX) += zinitix.o - obj-$(CONFIG_TOUCHSCREEN_HIMAX_HX83112B) += himax_hx83112b.o -+obj-$(CONFIG_TOUCHSCREEN_NT36523_SPI) += nt36523/ -diff --git a/drivers/input/touchscreen/nt36523/Kconfig b/drivers/input/touchscreen/nt36523/Kconfig -new file mode 100644 -index 000000000000..111111111111 ---- /dev/null -+++ b/drivers/input/touchscreen/nt36523/Kconfig -@@ -0,0 +1,11 @@ -+# -+# Novatek NT36523 touchscreen driver configuration -+# -+config TOUCHSCREEN_NT36523_SPI -+ tristate "Novatek NT36523 no flash SPI driver" -+ default n -+ help -+ Say Y here if you have a Novatek NT36523 no flash touchscreen connected -+ to your system by SPI bus. -+ -+ If unsure, say N. -diff --git a/drivers/input/touchscreen/nt36523/Makefile b/drivers/input/touchscreen/nt36523/Makefile -new file mode 100644 -index 000000000000..111111111111 ---- /dev/null -+++ b/drivers/input/touchscreen/nt36523/Makefile -@@ -0,0 +1,8 @@ -+# -+# Makefile for the Novatek NT36523 touchscreen driver. -+# -+ -+# Each configuration option enables a list of files. -+obj-$(CONFIG_TOUCHSCREEN_NT36523_SPI) += nt36523_ts.o -+nt36523_ts-y := nt36xxx.o \ -+ nt36xxx_fw_update.o -diff --git a/drivers/input/touchscreen/nt36523/nt36xxx.c b/drivers/input/touchscreen/nt36523/nt36xxx.c -new file mode 100644 -index 000000000000..111111111111 ---- /dev/null -+++ b/drivers/input/touchscreen/nt36523/nt36xxx.c -@@ -0,0 +1,1910 @@ -+/* -+ * Copyright (C) 2010 - 2018 Novatek, Inc. -+ * Copyright (C) 2021 XiaoMi, Inc. -+ * -+ * $Revision: 73033 $ -+ * $Date: 2020-11-26 10:09:14 +0800 (週四, 26 十一月 2020) $ -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -+ * more details. -+ * -+ */ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#ifdef CONFIG_DRM -+#include -+#endif -+ -+#include "nt36xxx.h" -+ -+#if NVT_TOUCH_ESD_PROTECT -+#include -+#endif /* #if NVT_TOUCH_ESD_PROTECT */ -+ -+#if NVT_TOUCH_ESD_PROTECT -+static struct delayed_work nvt_esd_check_work; -+static struct workqueue_struct *nvt_esd_check_wq; -+static unsigned long irq_timer = 0; -+uint8_t esd_check = false; -+uint8_t esd_retry = 0; -+#endif /* #if NVT_TOUCH_ESD_PROTECT */ -+ -+struct nvt_ts_data *ts; -+ -+#if BOOT_UPDATE_FIRMWARE -+static struct workqueue_struct *nvt_fwu_wq; -+extern void Boot_Update_Firmware(struct work_struct *work); -+#endif -+ -+#ifdef CONFIG_DRM -+static int nvt_drm_notifier_callback(struct notifier_block *self, unsigned long event, void *data); -+#endif -+ -+static int32_t nvt_ts_suspend(struct device *dev); -+static int32_t nvt_ts_resume(struct device *dev); -+ -+uint32_t ENG_RST_ADDR = 0x7FFF80; -+uint32_t SWRST_N8_ADDR = 0; //read from dtsi -+uint32_t SPI_RD_FAST_ADDR = 0; //read from dtsi -+ -+#if TOUCH_KEY_NUM > 0 -+const uint16_t touch_key_array[TOUCH_KEY_NUM] = { -+ KEY_BACK, -+ KEY_HOME, -+ KEY_MENU -+}; -+#endif -+ -+static uint8_t bTouchIsAwake = 0; -+ -+/******************************************************* -+Description: -+ Novatek touchscreen irq enable/disable function. -+ -+return: -+ n.a. -+*******************************************************/ -+static void nvt_irq_enable(bool enable) -+{ -+ if (enable) { -+ if (!ts->irq_enabled) { -+ enable_irq(ts->client->irq); -+ ts->irq_enabled = true; -+ } -+ } else { -+ if (ts->irq_enabled) { -+ disable_irq(ts->client->irq); -+ ts->irq_enabled = false; -+ } -+ } -+} -+ -+static inline int32_t spi_read_write(struct spi_device *client, uint8_t *buf, size_t len , NVT_SPI_RW rw) -+{ -+ struct spi_message m; -+ struct spi_transfer t = { -+ .len = len, -+ }; -+ -+ memset(ts->xbuf, 0, len + DUMMY_BYTES); -+ memcpy(ts->xbuf, buf, len); -+ -+ switch (rw) { -+ case NVTREAD: -+ t.tx_buf = ts->xbuf; -+ t.rx_buf = ts->rbuf; -+ t.len = (len + DUMMY_BYTES); -+ break; -+ -+ case NVTWRITE: -+ t.tx_buf = ts->xbuf; -+ break; -+ } -+ -+ spi_message_init(&m); -+ spi_message_add_tail(&t, &m); -+ return spi_sync(client, &m); -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen spi read function. -+ -+return: -+ Executive outcomes. 2---succeed. -5---I/O error -+*******************************************************/ -+int32_t CTP_SPI_READ(struct spi_device *client, uint8_t *buf, uint16_t len) -+{ -+ int32_t ret = -1; -+ int32_t retries = 0; -+ -+ mutex_lock(&ts->xbuf_lock); -+ -+ buf[0] = SPI_READ_MASK(buf[0]); -+ -+ while (retries < 5) { -+ ret = spi_read_write(client, buf, len, NVTREAD); -+ if (ret == 0) break; -+ retries++; -+ } -+ -+ if (unlikely(retries == 5)) { -+ NVT_ERR("read error, ret=%d\n", ret); -+ ret = -EIO; -+ } else { -+ memcpy((buf+1), (ts->rbuf+2), (len-1)); -+ } -+ -+ mutex_unlock(&ts->xbuf_lock); -+ -+ return ret; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen spi write function. -+ -+return: -+ Executive outcomes. 1---succeed. -5---I/O error -+*******************************************************/ -+int32_t CTP_SPI_WRITE(struct spi_device *client, uint8_t *buf, uint16_t len) -+{ -+ int32_t ret = -1; -+ int32_t retries = 0; -+ -+ mutex_lock(&ts->xbuf_lock); -+ -+ buf[0] = SPI_WRITE_MASK(buf[0]); -+ -+ while (retries < 5) { -+ ret = spi_read_write(client, buf, len, NVTWRITE); -+ if (ret == 0) break; -+ retries++; -+ } -+ -+ if (unlikely(retries == 5)) { -+ NVT_ERR("error, ret=%d\n", ret); -+ ret = -EIO; -+ } -+ -+ mutex_unlock(&ts->xbuf_lock); -+ -+ return ret; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen set index/page/addr address. -+ -+return: -+ Executive outcomes. 0---succeed. -5---access fail. -+*******************************************************/ -+int32_t nvt_set_page(uint32_t addr) -+{ -+ uint8_t buf[4] = {0}; -+ -+ buf[0] = 0xFF; //set index/page/addr command -+ buf[1] = (addr >> 15) & 0xFF; -+ buf[2] = (addr >> 7) & 0xFF; -+ -+ return CTP_SPI_WRITE(ts->client, buf, 3); -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen write data to specify address. -+ -+return: -+ Executive outcomes. 0---succeed. -5---access fail. -+*******************************************************/ -+int32_t nvt_write_addr(uint32_t addr, uint8_t data) -+{ -+ int32_t ret = 0; -+ uint8_t buf[4] = {0}; -+ -+ //---set xdata index--- -+ buf[0] = 0xFF; //set index/page/addr command -+ buf[1] = (addr >> 15) & 0xFF; -+ buf[2] = (addr >> 7) & 0xFF; -+ ret = CTP_SPI_WRITE(ts->client, buf, 3); -+ if (ret) { -+ NVT_ERR("set page 0x%06X failed, ret = %d\n", addr, ret); -+ return ret; -+ } -+ -+ //---write data to index--- -+ buf[0] = addr & (0x7F); -+ buf[1] = data; -+ ret = CTP_SPI_WRITE(ts->client, buf, 2); -+ if (ret) { -+ NVT_ERR("write data to 0x%06X failed, ret = %d\n", addr, ret); -+ return ret; -+ } -+ -+ return ret; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen enable hw bld crc function. -+ -+return: -+ N/A. -+*******************************************************/ -+void nvt_bld_crc_enable(void) -+{ -+ uint8_t buf[4] = {0}; -+ -+ //---set xdata index to BLD_CRC_EN_ADDR--- -+ nvt_set_page(ts->mmap->BLD_CRC_EN_ADDR); -+ -+ //---read data from index--- -+ buf[0] = ts->mmap->BLD_CRC_EN_ADDR & (0x7F); -+ buf[1] = 0xFF; -+ CTP_SPI_READ(ts->client, buf, 2); -+ -+ //---write data to index--- -+ buf[0] = ts->mmap->BLD_CRC_EN_ADDR & (0x7F); -+ buf[1] = buf[1] | (0x01 << 7); -+ CTP_SPI_WRITE(ts->client, buf, 2); -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen clear status & enable fw crc function. -+ -+return: -+ N/A. -+*******************************************************/ -+void nvt_fw_crc_enable(void) -+{ -+ uint8_t buf[4] = {0}; -+ -+ //---set xdata index to EVENT BUF ADDR--- -+ nvt_set_page(ts->mmap->EVENT_BUF_ADDR); -+ -+ //---clear fw reset status--- -+ buf[0] = EVENT_MAP_RESET_COMPLETE & (0x7F); -+ buf[1] = 0x00; -+ CTP_SPI_WRITE(ts->client, buf, 2); -+ -+ //---enable fw crc--- -+ buf[0] = EVENT_MAP_HOST_CMD & (0x7F); -+ buf[1] = 0xAE; //enable fw crc command -+ CTP_SPI_WRITE(ts->client, buf, 2); -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen set boot ready function. -+ -+return: -+ N/A. -+*******************************************************/ -+void nvt_boot_ready(void) -+{ -+ //---write BOOT_RDY status cmds--- -+ nvt_write_addr(ts->mmap->BOOT_RDY_ADDR, 1); -+ -+ mdelay(5); -+ -+ if (!ts->hw_crc) { -+ //---write BOOT_RDY status cmds--- -+ nvt_write_addr(ts->mmap->BOOT_RDY_ADDR, 0); -+ -+ //---write POR_CD cmds--- -+ nvt_write_addr(ts->mmap->POR_CD_ADDR, 0xA0); -+ } -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen enable auto copy mode function. -+ -+return: -+ N/A. -+*******************************************************/ -+void nvt_tx_auto_copy_mode(void) -+{ -+ //---write TX_AUTO_COPY_EN cmds--- -+ nvt_write_addr(ts->mmap->TX_AUTO_COPY_EN, 0x69); -+ -+ NVT_ERR("tx auto copy mode enable\n"); -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen check spi dma tx info function. -+ -+return: -+ N/A. -+*******************************************************/ -+int32_t nvt_check_spi_dma_tx_info(void) -+{ -+ uint8_t buf[8] = {0}; -+ int32_t i = 0; -+ const int32_t retry = 200; -+ -+ for (i = 0; i < retry; i++) { -+ //---set xdata index to EVENT BUF ADDR--- -+ nvt_set_page(ts->mmap->SPI_DMA_TX_INFO); -+ -+ //---read fw status--- -+ buf[0] = ts->mmap->SPI_DMA_TX_INFO & 0x7F; -+ buf[1] = 0xFF; -+ CTP_SPI_READ(ts->client, buf, 2); -+ -+ if (buf[1] == 0x00) -+ break; -+ -+ usleep_range(1000, 1000); -+ } -+ -+ if (i >= retry) { -+ NVT_ERR("failed, i=%d, buf[1]=0x%02X\n", i, buf[1]); -+ return -1; -+ } else { -+ return 0; -+ } -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen eng reset cmd -+ function. -+ -+return: -+ n.a. -+*******************************************************/ -+void nvt_eng_reset(void) -+{ -+ //---eng reset cmds to ENG_RST_ADDR--- -+ nvt_write_addr(ENG_RST_ADDR, 0x5A); -+ -+ mdelay(1); //wait tMCU_Idle2TP_REX_Hi after TP_RST -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen reset MCU -+ function. -+ -+return: -+ n.a. -+*******************************************************/ -+void nvt_sw_reset(void) -+{ -+ //---software reset cmds to SWRST_N8_ADDR--- -+ nvt_write_addr(SWRST_N8_ADDR, 0x55); -+ -+ msleep(10); -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen reset MCU then into idle mode -+ function. -+ -+return: -+ n.a. -+*******************************************************/ -+void nvt_sw_reset_idle(void) -+{ -+ //---MCU idle cmds to SWRST_N8_ADDR--- -+ nvt_write_addr(SWRST_N8_ADDR, 0xAA); -+ -+ msleep(15); -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen reset MCU (boot) function. -+ -+return: -+ n.a. -+*******************************************************/ -+void nvt_bootloader_reset(void) -+{ -+ //---reset cmds to SWRST_N8_ADDR--- -+ nvt_write_addr(SWRST_N8_ADDR, 0x69); -+ -+ mdelay(5); //wait tBRST2FR after Bootload RST -+ -+ if (SPI_RD_FAST_ADDR) { -+ /* disable SPI_RD_FAST */ -+ nvt_write_addr(SPI_RD_FAST_ADDR, 0x00); -+ } -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen clear FW status function. -+ -+return: -+ Executive outcomes. 0---succeed. -1---fail. -+*******************************************************/ -+int32_t nvt_clear_fw_status(void) -+{ -+ uint8_t buf[8] = {0}; -+ int32_t i = 0; -+ const int32_t retry = 20; -+ -+ for (i = 0; i < retry; i++) { -+ //---set xdata index to EVENT BUF ADDR--- -+ nvt_set_page(ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_HANDSHAKING_or_SUB_CMD_BYTE); -+ -+ //---clear fw status--- -+ buf[0] = EVENT_MAP_HANDSHAKING_or_SUB_CMD_BYTE; -+ buf[1] = 0x00; -+ CTP_SPI_WRITE(ts->client, buf, 2); -+ -+ //---read fw status--- -+ buf[0] = EVENT_MAP_HANDSHAKING_or_SUB_CMD_BYTE; -+ buf[1] = 0xFF; -+ CTP_SPI_READ(ts->client, buf, 2); -+ -+ if (buf[1] == 0x00) -+ break; -+ -+ usleep_range(10000, 10000); -+ } -+ -+ if (i >= retry) { -+ NVT_ERR("failed, i=%d, buf[1]=0x%02X\n", i, buf[1]); -+ return -1; -+ } else { -+ return 0; -+ } -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen check FW status function. -+ -+return: -+ Executive outcomes. 0---succeed. -1---failed. -+*******************************************************/ -+int32_t nvt_check_fw_status(void) -+{ -+ uint8_t buf[8] = {0}; -+ int32_t i = 0; -+ const int32_t retry = 50; -+ -+ for (i = 0; i < retry; i++) { -+ //---set xdata index to EVENT BUF ADDR--- -+ nvt_set_page(ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_HANDSHAKING_or_SUB_CMD_BYTE); -+ -+ //---read fw status--- -+ buf[0] = EVENT_MAP_HANDSHAKING_or_SUB_CMD_BYTE; -+ buf[1] = 0x00; -+ CTP_SPI_READ(ts->client, buf, 2); -+ -+ if ((buf[1] & 0xF0) == 0xA0) -+ break; -+ -+ usleep_range(10000, 10000); -+ } -+ -+ if (i >= retry) { -+ NVT_ERR("failed, i=%d, buf[1]=0x%02X\n", i, buf[1]); -+ return -1; -+ } else { -+ return 0; -+ } -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen check FW reset state function. -+ -+return: -+ Executive outcomes. 0---succeed. -1---failed. -+*******************************************************/ -+int32_t nvt_check_fw_reset_state(RST_COMPLETE_STATE check_reset_state) -+{ -+ uint8_t buf[8] = {0}; -+ int32_t ret = 0; -+ int32_t retry = 0; -+ int32_t retry_max = (check_reset_state == RESET_STATE_INIT) ? 10 : 50; -+ -+ //---set xdata index to EVENT BUF ADDR--- -+ nvt_set_page(ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_RESET_COMPLETE); -+ -+ while (1) { -+ //---read reset state--- -+ buf[0] = EVENT_MAP_RESET_COMPLETE; -+ buf[1] = 0x00; -+ CTP_SPI_READ(ts->client, buf, 6); -+ -+ if ((buf[1] >= check_reset_state) && (buf[1] <= RESET_STATE_MAX)) { -+ ret = 0; -+ break; -+ } -+ -+ retry++; -+ if(unlikely(retry > retry_max)) { -+ NVT_ERR("error, retry=%d, buf[1]=0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X\n", -+ retry, buf[1], buf[2], buf[3], buf[4], buf[5]); -+ ret = -1; -+ break; -+ } -+ -+ usleep_range(10000, 10000); -+ } -+ -+ return ret; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen get novatek project id information -+ function. -+ -+return: -+ Executive outcomes. 0---success. -1---fail. -+*******************************************************/ -+int32_t nvt_read_pid(void) -+{ -+ uint8_t buf[4] = {0}; -+ int32_t ret = 0; -+ -+ //---set xdata index to EVENT BUF ADDR--- -+ nvt_set_page(ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_PROJECTID); -+ -+ //---read project id--- -+ buf[0] = EVENT_MAP_PROJECTID; -+ buf[1] = 0x00; -+ buf[2] = 0x00; -+ CTP_SPI_READ(ts->client, buf, 3); -+ -+ ts->nvt_pid = (buf[2] << 8) + buf[1]; -+ -+ //---set xdata index to EVENT BUF ADDR--- -+ nvt_set_page(ts->mmap->EVENT_BUF_ADDR); -+ -+ NVT_LOG("PID=%04X\n", ts->nvt_pid); -+ -+ return ret; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen get firmware related information -+ function. -+ -+return: -+ Executive outcomes. 0---success. -1---fail. -+*******************************************************/ -+int32_t nvt_get_fw_info(void) -+{ -+ uint8_t buf[64] = {0}; -+ uint32_t retry_count = 0; -+ int32_t ret = 0; -+ -+info_retry: -+ //---set xdata index to EVENT BUF ADDR--- -+ nvt_set_page(ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_FWINFO); -+ -+ //---read fw info--- -+ buf[0] = EVENT_MAP_FWINFO; -+ CTP_SPI_READ(ts->client, buf, 39); -+ ts->fw_ver = buf[1]; -+ ts->x_num = buf[3]; -+ ts->y_num = buf[4]; -+ ts->abs_x_max = (uint16_t)((buf[5] << 8) | buf[6]); -+ ts->abs_y_max = (uint16_t)((buf[7] << 8) | buf[8]); -+ ts->max_button_num = buf[11]; -+ ts->cascade = buf[34] & 0x01; -+ if (ts->pen_support) { -+ ts->x_gang_num = buf[37]; -+ ts->y_gang_num = buf[38]; -+ } -+ -+ //---clear x_num, y_num if fw info is broken--- -+ if ((buf[1] + buf[2]) != 0xFF) { -+ NVT_ERR("FW info is broken! fw_ver=0x%02X, ~fw_ver=0x%02X\n", buf[1], buf[2]); -+ ts->fw_ver = 0; -+ ts->x_num = 18; -+ ts->y_num = 32; -+ ts->abs_x_max = TOUCH_DEFAULT_MAX_WIDTH; -+ ts->abs_y_max = TOUCH_DEFAULT_MAX_HEIGHT; -+ ts->max_button_num = TOUCH_KEY_NUM; -+ -+ if(retry_count < 3) { -+ retry_count++; -+ NVT_ERR("retry_count=%d\n", retry_count); -+ goto info_retry; -+ } else { -+ NVT_ERR("Set default fw_ver=%d, x_num=%d, y_num=%d, " -+ "abs_x_max=%d, abs_y_max=%d, max_button_num=%d!\n", -+ ts->fw_ver, ts->x_num, ts->y_num, -+ ts->abs_x_max, ts->abs_y_max, ts->max_button_num); -+ ret = -1; -+ } -+ } else { -+ ret = 0; -+ } -+ -+ NVT_LOG("fw_ver = 0x%02X, fw_type = 0x%02X, x_num=%d, y_num=%d\n", ts->fw_ver, buf[14], ts->x_num, ts->y_num); -+ -+ //---Get Novatek PID--- -+ nvt_read_pid(); -+ -+ return ret; -+} -+ -+static void release_pen_event(void) { -+ if (ts && ts->pen_input_dev) { -+ input_report_abs(ts->pen_input_dev, ABS_X, 0); -+ input_report_abs(ts->pen_input_dev, ABS_Y, 0); -+ input_report_abs(ts->pen_input_dev, ABS_PRESSURE, 0); -+ input_report_abs(ts->pen_input_dev, ABS_TILT_X, 0); -+ input_report_abs(ts->pen_input_dev, ABS_TILT_Y, 0); -+ input_report_abs(ts->pen_input_dev, ABS_DISTANCE, 0); -+ input_report_key(ts->pen_input_dev, BTN_TOUCH, 0); -+ input_report_key(ts->pen_input_dev, BTN_TOOL_PEN, 0); -+ input_report_key(ts->pen_input_dev, BTN_STYLUS, 0); -+ input_report_key(ts->pen_input_dev, BTN_STYLUS2, 0); -+ input_sync(ts->pen_input_dev); -+ } -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen parse device tree function. -+ -+return: -+ n.a. -+*******************************************************/ -+#ifdef CONFIG_OF -+static int32_t nvt_parse_dt(struct device *dev) -+{ -+ struct device_node *np = dev->of_node; -+ int32_t ret = 0; -+ -+#if NVT_TOUCH_SUPPORT_HW_RST -+ ts->reset_gpio = of_get_named_gpio_flags(np, "novatek,reset-gpio", 0, &ts->reset_flags); -+ NVT_LOG("novatek,reset-gpio=%d\n", ts->reset_gpio); -+#endif -+ ts->irq_gpio = of_get_named_gpio(np, "novatek,irq-gpio", 0); -+ NVT_LOG("novatek,irq-gpio=%d\n", ts->irq_gpio); -+ -+ ts->pen_support = of_property_read_bool(np, "novatek,pen-support"); -+ NVT_LOG("novatek,pen-support=%d\n", ts->pen_support); -+ -+ ts->wgp_stylus = of_property_read_bool(np, "novatek,wgp-stylus"); -+ NVT_LOG("novatek,wgp-stylus=%d\n", ts->wgp_stylus); -+ -+ ret = of_property_read_u32(np, "novatek,swrst-n8-addr", &SWRST_N8_ADDR); -+ if (ret) { -+ NVT_ERR("error reading novatek,swrst-n8-addr. ret=%d\n", ret); -+ return ret; -+ } else { -+ NVT_LOG("SWRST_N8_ADDR=0x%06X\n", SWRST_N8_ADDR); -+ } -+ -+ ret = of_property_read_u32(np, "novatek,spi-rd-fast-addr", &SPI_RD_FAST_ADDR); -+ if (ret) { -+ NVT_LOG("not support novatek,spi-rd-fast-addr\n"); -+ SPI_RD_FAST_ADDR = 0; -+ ret = 0; -+ } else { -+ NVT_LOG("SPI_RD_FAST_ADDR=0x%06X\n", SPI_RD_FAST_ADDR); -+ } -+ -+ ret = of_property_read_string(np, "firmware-name", &ts->fw_name); -+ if (ret) { -+ NVT_LOG("Unable to get touchscreen firmware name\n"); -+ ts->fw_name = DEFAULT_BOOT_UPDATE_FIRMWARE_NAME; -+ } -+ -+ ret = of_property_read_u32(np, "spi-max-frequency", &ts->spi_max_freq); -+ if (ret) { -+ NVT_LOG("Unable to get spi freq\n"); -+ return ret; -+ } else { -+ NVT_LOG("spi-max-frequency: %u\n", ts->spi_max_freq); -+ } -+ -+ return ret; -+} -+#else -+static int32_t nvt_parse_dt(struct device *dev) -+{ -+#if NVT_TOUCH_SUPPORT_HW_RST -+ ts->reset_gpio = NVTTOUCH_RST_PIN; -+#endif -+ ts->irq_gpio = NVTTOUCH_INT_PIN; -+ return 0; -+} -+#endif -+ -+/******************************************************* -+Description: -+ Novatek touchscreen config and request gpio -+ -+return: -+ Executive outcomes. 0---succeed. not 0---failed. -+*******************************************************/ -+static int nvt_gpio_config(struct nvt_ts_data *ts) -+{ -+ int32_t ret = 0; -+ -+#if NVT_TOUCH_SUPPORT_HW_RST -+ /* request RST-pin (Output/High) */ -+ if (gpio_is_valid(ts->reset_gpio)) { -+ ret = gpio_request_one(ts->reset_gpio, GPIOF_OUT_INIT_LOW, "NVT-tp-rst"); -+ if (ret) { -+ NVT_ERR("Failed to request NVT-tp-rst GPIO\n"); -+ goto err_request_reset_gpio; -+ } -+ } -+#endif -+ -+ /* request INT-pin (Input) */ -+ if (gpio_is_valid(ts->irq_gpio)) { -+ ret = gpio_request_one(ts->irq_gpio, GPIOF_IN, "NVT-int"); -+ if (ret) { -+ NVT_ERR("Failed to request NVT-int GPIO\n"); -+ goto err_request_irq_gpio; -+ } -+ } -+ -+ return ret; -+ -+err_request_irq_gpio: -+#if NVT_TOUCH_SUPPORT_HW_RST -+ gpio_free(ts->reset_gpio); -+err_request_reset_gpio: -+#endif -+ return ret; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen deconfig gpio -+ -+return: -+ n.a. -+*******************************************************/ -+static void nvt_gpio_deconfig(struct nvt_ts_data *ts) -+{ -+ if (gpio_is_valid(ts->irq_gpio)) -+ gpio_free(ts->irq_gpio); -+#if NVT_TOUCH_SUPPORT_HW_RST -+ if (gpio_is_valid(ts->reset_gpio)) -+ gpio_free(ts->reset_gpio); -+#endif -+} -+ -+static uint8_t nvt_fw_recovery(uint8_t *point_data) -+{ -+ uint8_t i = 0; -+ uint8_t detected = true; -+ -+ /* check pattern */ -+ for (i=1 ; i<7 ; i++) { -+ if (point_data[i] != 0x77) { -+ detected = false; -+ break; -+ } -+ } -+ -+ return detected; -+} -+ -+void nvt_set_dbgfw_status(bool enable) -+{ -+ ts->fw_debug = enable; -+} -+ -+bool nvt_get_dbgfw_status(void) -+{ -+ return ts->fw_debug; -+} -+ -+#if NVT_TOUCH_ESD_PROTECT -+void nvt_esd_check_enable(uint8_t enable) -+{ -+ /* update interrupt timer */ -+ irq_timer = jiffies; -+ /* clear esd_retry counter, if protect function is enabled */ -+ esd_retry = enable ? 0 : esd_retry; -+ /* enable/disable esd check flag */ -+ esd_check = enable; -+} -+ -+static void nvt_esd_check_func(struct work_struct *work) -+{ -+ unsigned int timer = jiffies_to_msecs(jiffies - irq_timer); -+ -+ //NVT_LOG("esd_check = %d (retry %d)\n", esd_check, esd_retry); //DEBUG -+ -+ if ((timer > NVT_TOUCH_ESD_CHECK_PERIOD) && esd_check) { -+ mutex_lock(&ts->lock); -+ NVT_ERR("do ESD recovery, timer = %d, retry = %d\n", timer, esd_retry); -+ /* do esd recovery, reload fw */ -+ nvt_update_firmware(ts->fw_name); -+ mutex_unlock(&ts->lock); -+ /* update interrupt timer */ -+ irq_timer = jiffies; -+ /* update esd_retry counter */ -+ esd_retry++; -+ } -+ -+ queue_delayed_work(nvt_esd_check_wq, &nvt_esd_check_work, -+ msecs_to_jiffies(NVT_TOUCH_ESD_CHECK_PERIOD)); -+} -+#endif /* #if NVT_TOUCH_ESD_PROTECT */ -+ -+#if NVT_TOUCH_WDT_RECOVERY -+static uint8_t recovery_cnt = 0; -+static uint8_t nvt_wdt_fw_recovery(uint8_t *point_data) -+{ -+ uint32_t recovery_cnt_max = 10; -+ uint8_t recovery_enable = false; -+ uint8_t i = 0; -+ -+ recovery_cnt++; -+ -+ /* check pattern */ -+ for (i=1 ; i<7 ; i++) { -+ if ((point_data[i] != 0xFD) && (point_data[i] != 0xFE)) { -+ recovery_cnt = 0; -+ break; -+ } -+ } -+ -+ if (recovery_cnt > recovery_cnt_max){ -+ recovery_enable = true; -+ recovery_cnt = 0; -+ } -+ -+ return recovery_enable; -+} -+#endif /* #if NVT_TOUCH_WDT_RECOVERY */ -+ -+#define PEN_DATA_LEN 14 -+#define FW_HISTORY_SIZE 128 -+static uint32_t nvt_dump_fw_history(void) -+{ -+ int32_t ret = 0; -+ uint8_t buf[FW_HISTORY_SIZE + 1 + DUMMY_BYTES] = {0}; -+ int32_t i = 0; -+ char *tmp_dump = NULL; -+ int32_t line_cnt = 0; -+ -+ if (ts->mmap->FW_HISTORY_ADDR == 0) { -+ NVT_ERR("FW_HISTORY_ADDR not available!\n"); -+ ret = -1; -+ goto exit_nvt_dump_fw_history; -+ } -+ nvt_set_page(ts->mmap->FW_HISTORY_ADDR); -+ buf[0] = ts->mmap->FW_HISTORY_ADDR & 0xFF; -+ CTP_SPI_READ(ts->client, buf, FW_HISTORY_SIZE + 1); -+ if (ret) { -+ NVT_ERR("CTP_SPI_READ failed.(%d)\n", ret); -+ ret = -1; -+ goto exit_nvt_dump_fw_history; -+ } -+ -+ tmp_dump = (char *)kzalloc(FW_HISTORY_SIZE * 4, GFP_KERNEL); -+ for (i = 0; i < FW_HISTORY_SIZE; i++) { -+ sprintf(tmp_dump + i * 3 + line_cnt, "%02X ", buf[1 + i]); -+ if ((i + 1) % 16 == 0) { -+ sprintf(tmp_dump + i * 3 + line_cnt + 3, "%c", '\n'); -+ line_cnt++; -+ } -+ } -+ NVT_LOG("%s", tmp_dump); -+ -+exit_nvt_dump_fw_history: -+ if (tmp_dump) { -+ kfree(tmp_dump); -+ tmp_dump = NULL; -+ } -+ nvt_set_page(ts->mmap->EVENT_BUF_ADDR); -+ -+ return ret; -+} -+ -+#define POINT_DATA_LEN 65 -+/******************************************************* -+Description: -+ Novatek touchscreen work function. -+ -+return: -+ n.a. -+*******************************************************/ -+static irqreturn_t nvt_ts_work_func(int irq, void *data) -+{ -+ int32_t ret = -1; -+ uint8_t point_data[POINT_DATA_LEN + PEN_DATA_LEN + 1 + DUMMY_BYTES] = {0}; -+ uint32_t position = 0; -+ uint32_t input_x = 0; -+ uint32_t input_y = 0; -+ uint32_t input_w = 0; -+ uint32_t input_p = 0; -+ uint8_t input_id = 0; -+#if MT_PROTOCOL_B -+ uint8_t press_id[TOUCH_MAX_FINGER_NUM] = {0}; -+#endif /* MT_PROTOCOL_B */ -+ int32_t i = 0; -+ int32_t finger_cnt = 0; -+ uint8_t pen_format_id = 0; -+ uint32_t pen_x = 0; -+ uint32_t pen_y = 0; -+ uint32_t pen_pressure = 0; -+ uint32_t pen_distance = 0; -+ int8_t pen_tilt_x = 0; -+ int8_t pen_tilt_y = 0; -+ uint32_t pen_btn1 = 0; -+ uint32_t pen_btn2 = 0; -+ uint32_t pen_battery = 0; -+ -+ mutex_lock(&ts->lock); -+ -+ if (ts->dev_pm_suspend) { -+ ret = wait_for_completion_timeout(&ts->dev_pm_suspend_completion, msecs_to_jiffies(500)); -+ if (!ret) { -+ NVT_ERR("system(spi) can't finished resuming procedure, skip it\n"); -+ goto XFER_ERROR; -+ } -+ } -+ -+ if (ts->pen_support) -+ ret = CTP_SPI_READ(ts->client, point_data, POINT_DATA_LEN + PEN_DATA_LEN + 1); -+ else -+ ret = CTP_SPI_READ(ts->client, point_data, POINT_DATA_LEN + 1); -+ if (ret < 0) { -+ NVT_ERR("CTP_SPI_READ failed.(%d)\n", ret); -+ goto XFER_ERROR; -+ } -+ -+ /*--- dump SPI buf --- -+ for (i = 0; i < 10; i++) { -+ NVT_LOG("%02X %02X %02X %02X %02X %02X \n", -+ point_data[1+i*6], point_data[2+i*6], point_data[3+i*6], point_data[4+i*6], point_data[5+i*6], point_data[6+i*6]); -+ } -+ */ -+ -+#if NVT_TOUCH_WDT_RECOVERY -+ /* ESD protect by WDT */ -+ if (nvt_wdt_fw_recovery(point_data)) { -+ NVT_ERR("Recover for fw reset, %02X\n", point_data[1]); -+ if (point_data[1] == 0xFD) { -+ NVT_ERR("Dump FW history:\n"); -+ nvt_dump_fw_history(); -+ } -+ nvt_update_firmware(ts->fw_name); -+ goto XFER_ERROR; -+ } -+#endif /* #if NVT_TOUCH_WDT_RECOVERY */ -+ -+ /* ESD protect by FW handshake */ -+ if (nvt_fw_recovery(point_data)) { -+#if NVT_TOUCH_ESD_PROTECT -+ nvt_esd_check_enable(true); -+#endif /* #if NVT_TOUCH_ESD_PROTECT */ -+ goto XFER_ERROR; -+ } -+ -+ finger_cnt = 0; -+ -+ for (i = 0; i < ts->max_touch_num; i++) { -+ position = 1 + 6 * i; -+ input_id = (uint8_t)(point_data[position + 0] >> 3); -+ if ((input_id == 0) || (input_id > ts->max_touch_num)) -+ continue; -+ -+ if (((point_data[position] & 0x07) == 0x01) || ((point_data[position] & 0x07) == 0x02)) { //finger down (enter & moving) -+#if NVT_TOUCH_ESD_PROTECT -+ /* update interrupt timer */ -+ irq_timer = jiffies; -+#endif /* #if NVT_TOUCH_ESD_PROTECT */ -+ input_x = (uint32_t)(point_data[position + 1] << 4) + (uint32_t) (point_data[position + 3] >> 4); -+ input_y = (uint32_t)(point_data[position + 2] << 4) + (uint32_t) (point_data[position + 3] & 0x0F); -+ if ((input_x < 0) || (input_y < 0)) -+ continue; -+ if ((input_x > ts->abs_x_max) || (input_y > ts->abs_y_max)) -+ continue; -+ input_w = (uint32_t)(point_data[position + 4]); -+ if (input_w == 0) -+ input_w = 1; -+ if (i < 2) { -+ input_p = (uint32_t)(point_data[position + 5]) + (uint32_t)(point_data[i + 63] << 8); -+ if (input_p > TOUCH_FORCE_NUM) -+ input_p = TOUCH_FORCE_NUM; -+ } else { -+ input_p = (uint32_t)(point_data[position + 5]); -+ } -+ if (input_p == 0) -+ input_p = 1; -+ -+#if MT_PROTOCOL_B -+ press_id[input_id - 1] = 1; -+ input_mt_slot(ts->input_dev, input_id - 1); -+ input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, true); -+#else /* MT_PROTOCOL_B */ -+ input_report_abs(ts->input_dev, ABS_MT_TRACKING_ID, input_id - 1); -+ input_report_key(ts->input_dev, BTN_TOUCH, 1); -+#endif /* MT_PROTOCOL_B */ -+ -+ input_report_abs(ts->input_dev, ABS_MT_POSITION_X, input_x); -+ input_report_abs(ts->input_dev, ABS_MT_POSITION_Y, input_y); -+ input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, input_w); -+ input_report_abs(ts->input_dev, ABS_MT_PRESSURE, input_p); -+ -+#if MT_PROTOCOL_B -+#else /* MT_PROTOCOL_B */ -+ input_mt_sync(ts->input_dev); -+#endif /* MT_PROTOCOL_B */ -+ -+ finger_cnt++; -+ } -+ } -+ -+#if MT_PROTOCOL_B -+ for (i = 0; i < ts->max_touch_num; i++) { -+ if (press_id[i] != 1) { -+ input_mt_slot(ts->input_dev, i); -+ input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0); -+ input_report_abs(ts->input_dev, ABS_MT_PRESSURE, 0); -+ input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, false); -+ } -+ } -+ input_report_key(ts->input_dev, BTN_TOUCH, (finger_cnt > 0)); -+#else /* MT_PROTOCOL_B */ -+ if (finger_cnt == 0) { -+ input_report_key(ts->input_dev, BTN_TOUCH, 0); -+ input_mt_sync(ts->input_dev); -+ } -+#endif /* MT_PROTOCOL_B */ -+ -+#if TOUCH_KEY_NUM > 0 -+ if (point_data[61] == 0xF8) { -+#if NVT_TOUCH_ESD_PROTECT -+ /* update interrupt timer */ -+ irq_timer = jiffies; -+#endif /* #if NVT_TOUCH_ESD_PROTECT */ -+ for (i = 0; i < ts->max_button_num; i++) { -+ input_report_key(ts->input_dev, touch_key_array[i], ((point_data[62] >> i) & 0x01)); -+ } -+ } else { -+ for (i = 0; i < ts->max_button_num; i++) { -+ input_report_key(ts->input_dev, touch_key_array[i], 0); -+ } -+ } -+#endif -+ -+ input_sync(ts->input_dev); -+ -+ if (ts->pen_support && ts->pen_input_dev_enable && !(ts->pen_is_charge)) { -+/* -+ //--- dump pen buf --- -+ printk("%02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\n", -+ point_data[66], point_data[67], point_data[68], point_data[69], point_data[70], -+ point_data[71], point_data[72], point_data[73], point_data[74], point_data[75], -+ point_data[76], point_data[77], point_data[78], point_data[79]); -+*/ -+ // parse and handle pen report -+ pen_format_id = point_data[66]; -+ if (pen_format_id != 0xFF) { -+ if (pen_format_id == 0x01) { -+ // report pen data -+ pen_x = (uint32_t)(point_data[67] << 8) + (uint32_t)(point_data[68]); -+ pen_y = (uint32_t)(point_data[69] << 8) + (uint32_t)(point_data[70]); -+ if (pen_x >= ts->abs_x_max * 2 - 1) { -+ pen_x -= 1; -+ } -+ if (pen_y >= ts->abs_y_max * 2 - 1) { -+ pen_y -= 1; -+ } -+ pen_pressure = (uint32_t)(point_data[71] << 8) + (uint32_t)(point_data[72]); -+ pen_tilt_x = (int32_t)point_data[73]; -+ pen_tilt_y = (int32_t)point_data[74]; -+ pen_distance = (uint32_t)(point_data[75] << 8) + (uint32_t)(point_data[76]); -+ pen_btn1 = (uint32_t)(point_data[77] & 0x01); -+ pen_btn2 = (uint32_t)((point_data[77] >> 1) & 0x01); -+ pen_battery = (uint32_t)point_data[78]; -+// printk("x=%d,y=%d,p=%d,tx=%d,ty=%d,d=%d,b1=%d,b2=%d,bat=%d\n", pen_x, pen_y, pen_pressure, -+// pen_tilt_x, pen_tilt_y, pen_distance, pen_btn1, pen_btn2, pen_battery); -+ -+ input_report_abs(ts->pen_input_dev, ABS_X, pen_x); -+ input_report_abs(ts->pen_input_dev, ABS_Y, pen_y); -+ input_report_abs(ts->pen_input_dev, ABS_PRESSURE, pen_pressure); -+ input_report_key(ts->pen_input_dev, BTN_TOUCH, !!pen_pressure); -+ input_report_abs(ts->pen_input_dev, ABS_TILT_X, pen_tilt_x); -+ input_report_abs(ts->pen_input_dev, ABS_TILT_Y, pen_tilt_y); -+ input_report_abs(ts->pen_input_dev, ABS_DISTANCE, pen_distance); -+ input_report_key(ts->pen_input_dev, BTN_TOOL_PEN, !!pen_distance || !!pen_pressure); -+ input_report_key(ts->pen_input_dev, BTN_STYLUS, pen_btn1); -+ input_report_key(ts->pen_input_dev, BTN_STYLUS2, pen_btn2); -+ input_sync(ts->pen_input_dev); -+ // TBD: pen battery event report -+ // NVT_LOG("pen_battery=%d\n", pen_battery); -+ } else if (pen_format_id == 0xF0) { -+ // report Pen ID -+ } else { -+ NVT_ERR("Unknown pen format id!\n"); -+ goto XFER_ERROR; -+ } -+ } else { // pen_format_id = 0xFF, i.e. no pen present -+ release_pen_event(); -+ } -+ } /* if (ts->pen_support) */ -+ -+XFER_ERROR: -+ -+ mutex_unlock(&ts->lock); -+ return IRQ_HANDLED; -+} -+ -+ -+/******************************************************* -+Description: -+ Novatek touchscreen check chip version trim function. -+ -+return: -+ Executive outcomes. 0---NVT IC. -1---not NVT IC. -+*******************************************************/ -+static int8_t nvt_ts_check_chip_ver_trim(uint32_t chip_ver_trim_addr) -+{ -+ -+ ts->mmap = &NT36523_memory_map; -+ ts->carrier_system = NT36523_hw_info.carrier_system; -+ ts->hw_crc = NT36523_hw_info.hw_crc; -+ return 0; -+} -+ -+static void nvt_suspend_work(struct work_struct *work) -+{ -+ struct nvt_ts_data *ts_core = container_of(work, struct nvt_ts_data, suspend_work); -+ nvt_ts_suspend(&ts_core->client->dev); -+} -+ -+static void nvt_resume_work(struct work_struct *work) -+{ -+ struct nvt_ts_data *ts_core = container_of(work, struct nvt_ts_data, resume_work); -+ nvt_ts_resume(&ts_core->client->dev); -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen driver probe function. -+ -+return: -+ Executive outcomes. 0---succeed. negative---failed -+*******************************************************/ -+static int32_t nvt_ts_probe(struct spi_device *client) -+{ -+ int32_t ret = 0; -+#if (TOUCH_KEY_NUM > 0) -+ int32_t retry = 0; -+#endif -+ -+ NVT_LOG("probe start\n"); -+ -+ ts = kzalloc(sizeof(struct nvt_ts_data), GFP_KERNEL); -+ if (ts == NULL) { -+ NVT_ERR("failed to allocated memory for nvt ts data\n"); -+ return -ENOMEM; -+ } -+ -+ ts->xbuf = (uint8_t *)kzalloc((NVT_TRANSFER_LEN+1+DUMMY_BYTES), GFP_KERNEL); -+ if(ts->xbuf == NULL) { -+ NVT_ERR("kzalloc for xbuf failed!\n"); -+ ret = -ENOMEM; -+ goto err_malloc_xbuf; -+ } -+ -+ ts->rbuf = (uint8_t *)kzalloc(NVT_READ_LEN, GFP_KERNEL); -+ if(ts->rbuf == NULL) { -+ NVT_ERR("kzalloc for rbuf failed!\n"); -+ ret = -ENOMEM; -+ goto err_malloc_rbuf; -+ } -+ -+ ts->client = client; -+ spi_set_drvdata(client, ts); -+ -+ //---prepare for spi parameter--- -+ if (ts->client->controller->flags & SPI_CONTROLLER_HALF_DUPLEX) { -+ NVT_ERR("Full duplex not supported by master\n"); -+ ret = -EIO; -+ goto err_ckeck_full_duplex; -+ } -+ ts->client->bits_per_word = 8; -+ ts->client->mode = SPI_MODE_0; -+ -+ ret = spi_setup(ts->client); -+ if (ret < 0) { -+ NVT_ERR("Failed to perform SPI setup\n"); -+ goto err_spi_setup; -+ } -+ -+#ifdef CONFIG_MTK_SPI -+ /* old usage of MTK spi API */ -+ memcpy(&ts->spi_ctrl, &spi_ctrdata, sizeof(struct mt_chip_conf)); -+ ts->client->controller_data = (void *)&ts->spi_ctrl; -+#endif -+ -+#ifdef CONFIG_SPI_MT65XX -+ /* new usage of MTK spi API */ -+ memcpy(&ts->spi_ctrl, &spi_ctrdata, sizeof(struct mtk_chip_config)); -+ ts->client->controller_data = (void *)&ts->spi_ctrl; -+#endif -+ -+ NVT_LOG("mode=%d, max_speed_hz=%d\n", ts->client->mode, ts->client->max_speed_hz); -+ -+ //---parse dts--- -+ ret = nvt_parse_dt(&client->dev); -+ if (ret) { -+ NVT_ERR("parse dt error\n"); -+ goto err_spi_setup; -+ } -+ -+ //---request and config GPIOs--- -+ ret = nvt_gpio_config(ts); -+ if (ret) { -+ NVT_ERR("gpio config error!\n"); -+ goto err_gpio_config_failed; -+ } -+ -+ mutex_init(&ts->lock); -+ mutex_init(&ts->xbuf_lock); -+ -+ //---eng reset before TP_RESX high -+ nvt_eng_reset(); -+ -+#if NVT_TOUCH_SUPPORT_HW_RST -+ gpio_set_value(ts->reset_gpio, 1); -+#endif -+ -+ // need 10ms delay after POR(power on reset) -+ msleep(10); -+ -+ //---check chip version trim--- -+ ret = nvt_ts_check_chip_ver_trim(CHIP_VER_TRIM_ADDR); -+ if (ret) { -+ NVT_LOG("try to check from old chip ver trim address\n"); -+ ret = nvt_ts_check_chip_ver_trim(CHIP_VER_TRIM_OLD_ADDR); -+ if (ret) { -+ NVT_ERR("chip is not identified\n"); -+ ret = -EINVAL; -+ goto err_chipvertrim_failed; -+ } -+ } -+ -+ ts->abs_x_max = TOUCH_DEFAULT_MAX_WIDTH; -+ ts->abs_y_max = TOUCH_DEFAULT_MAX_HEIGHT; -+ -+ //---allocate input device--- -+ ts->input_dev = input_allocate_device(); -+ if (ts->input_dev == NULL) { -+ NVT_ERR("allocate input device failed\n"); -+ ret = -ENOMEM; -+ goto err_input_dev_alloc_failed; -+ } -+ -+ ts->max_touch_num = TOUCH_MAX_FINGER_NUM; -+ -+#if TOUCH_KEY_NUM > 0 -+ ts->max_button_num = TOUCH_KEY_NUM; -+#endif -+ -+ ts->int_trigger_type = INT_TRIGGER_TYPE; -+ -+ //---set input device info.--- -+ ts->input_dev->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); -+ ts->input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); -+ ts->input_dev->propbit[0] = BIT(INPUT_PROP_DIRECT); -+ -+ ts->db_wakeup = 0; -+ ts->fw_ver = 0; -+ ts->x_num = 32; -+ ts->y_num = 50; -+ ts->x_gang_num = 4; -+ ts->y_gang_num = 6; -+ ts->abs_x_max = TOUCH_DEFAULT_MAX_WIDTH; -+ ts->abs_y_max = TOUCH_DEFAULT_MAX_HEIGHT; -+ ts->max_button_num = TOUCH_KEY_NUM; -+ NVT_LOG("Set default fw_ver=%d, x_num=%d, y_num=%d, " -+ "abs_x_max=%d, abs_y_max=%d, max_button_num=%d!\n", -+ ts->fw_ver, ts->x_num, ts->y_num, -+ ts->abs_x_max, ts->abs_y_max, ts->max_button_num); -+ -+#if MT_PROTOCOL_B -+ input_mt_init_slots(ts->input_dev, ts->max_touch_num, 0); -+#endif -+ -+ input_set_abs_params(ts->input_dev, ABS_MT_PRESSURE, 0, TOUCH_FORCE_NUM, 0, 0); //pressure = TOUCH_FORCE_NUM -+ -+#if TOUCH_MAX_FINGER_NUM > 1 -+ input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0); //area = 255 -+ -+ input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X, 0, ts->abs_x_max - 1, 0, 0); -+ input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y, 0, ts->abs_y_max - 1, 0, 0); -+#if MT_PROTOCOL_B -+ // no need to set ABS_MT_TRACKING_ID, input_mt_init_slots() already set it -+#else -+ input_set_abs_params(ts->input_dev, ABS_MT_TRACKING_ID, 0, ts->max_touch_num, 0, 0); -+#endif //MT_PROTOCOL_B -+#endif //TOUCH_MAX_FINGER_NUM > 1 -+ -+#if TOUCH_KEY_NUM > 0 -+ for (retry = 0; retry < ts->max_button_num; retry++) { -+ input_set_capability(ts->input_dev, EV_KEY, touch_key_array[retry]); -+ } -+#endif -+ -+ sprintf(ts->phys, "input/ts"); -+ ts->input_dev->name = NVT_TS_NAME; -+ ts->input_dev->phys = ts->phys; -+ ts->input_dev->id.bustype = BUS_SPI; -+ -+ //---register input device--- -+ ret = input_register_device(ts->input_dev); -+ if (ret) { -+ NVT_ERR("register input device (%s) failed. ret=%d\n", ts->input_dev->name, ret); -+ goto err_input_register_device_failed; -+ } -+ -+ if (ts->pen_support) { -+ //---allocate pen input device--- -+ ts->pen_input_dev = input_allocate_device(); -+ if (ts->pen_input_dev == NULL) { -+ NVT_ERR("allocate pen input device failed\n"); -+ ret = -ENOMEM; -+ goto err_pen_input_dev_alloc_failed; -+ } -+ -+ //---set pen input device info.--- -+ ts->pen_input_dev->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); -+ ts->pen_input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH); -+ ts->pen_input_dev->keybit[BIT_WORD(BTN_TOOL_PEN)] |= BIT_MASK(BTN_TOOL_PEN); -+ //ts->pen_input_dev->keybit[BIT_WORD(BTN_TOOL_RUBBER)] |= BIT_MASK(BTN_TOOL_RUBBER); -+ ts->pen_input_dev->keybit[BIT_WORD(BTN_STYLUS)] |= BIT_MASK(BTN_STYLUS); -+ ts->pen_input_dev->keybit[BIT_WORD(BTN_STYLUS2)] |= BIT_MASK(BTN_STYLUS2); -+ ts->pen_input_dev->propbit[0] = BIT(INPUT_PROP_DIRECT); -+ -+ if (ts->wgp_stylus) { -+ input_set_abs_params(ts->pen_input_dev, ABS_X, 0, ts->abs_x_max * 2 - 1, 0, 0); -+ input_set_abs_params(ts->pen_input_dev, ABS_Y, 0, ts->abs_y_max * 2 - 1, 0, 0); -+ } else { -+ input_set_abs_params(ts->pen_input_dev, ABS_X, 0, ts->abs_x_max - 1, 0, 0); -+ input_set_abs_params(ts->pen_input_dev, ABS_Y, 0, ts->abs_y_max - 1, 0, 0); -+ } -+ -+ input_set_abs_params(ts->pen_input_dev, ABS_PRESSURE, 0, PEN_PRESSURE_MAX, 0, 0); -+ input_set_abs_params(ts->pen_input_dev, ABS_DISTANCE, 0, PEN_DISTANCE_MAX, 0, 0); -+ input_set_abs_params(ts->pen_input_dev, ABS_TILT_X, PEN_TILT_MIN, PEN_TILT_MAX, 0, 0); -+ input_set_abs_params(ts->pen_input_dev, ABS_TILT_Y, PEN_TILT_MIN, PEN_TILT_MAX, 0, 0); -+ -+ sprintf(ts->pen_phys, "input/pen"); -+ ts->pen_input_dev->name = NVT_PEN_NAME; -+ ts->pen_input_dev->phys = ts->pen_phys; -+ ts->pen_input_dev->id.bustype = BUS_SPI; -+ -+ //---register pen input device--- -+ ret = input_register_device(ts->pen_input_dev); -+ if (ret) { -+ NVT_ERR("register pen input device (%s) failed. ret=%d\n", ts->pen_input_dev->name, ret); -+ goto err_pen_input_register_device_failed; -+ } -+ } /* if (ts->pen_support) */ -+ -+ //---set int-pin & request irq--- -+ client->irq = gpio_to_irq(ts->irq_gpio); -+ if (client->irq) { -+ NVT_LOG("int_trigger_type=%d\n", ts->int_trigger_type); -+ ts->irq_enabled = true; -+ ret = request_threaded_irq(client->irq, NULL, nvt_ts_work_func, -+ ts->int_trigger_type | IRQF_ONESHOT, NVT_SPI_NAME, ts); -+ if (ret != 0) { -+ NVT_ERR("request irq failed. ret=%d\n", ret); -+ goto err_int_request_failed; -+ } else { -+ nvt_irq_enable(false); -+ NVT_LOG("request irq %d succeed\n", client->irq); -+ } -+ } -+ -+ ts->pen_is_charge = false; -+ -+ ts->lkdown_readed =false; -+ pm_stay_awake(&client->dev); -+ -+ ts->ic_state = NVT_IC_INIT; -+ ts->dev_pm_suspend = false; -+ ts->gesture_command_delayed = -1; -+ init_completion(&ts->dev_pm_suspend_completion); -+ ts->fw_debug = false; -+ -+#ifdef CONFIG_FACTORY_BUILD -+ ts->pen_input_dev_enable = 1; -+#else -+ ts->pen_input_dev_enable = 0; -+#endif -+ -+#if BOOT_UPDATE_FIRMWARE -+ nvt_fwu_wq = alloc_workqueue("nvt_fwu_wq", WQ_UNBOUND | WQ_MEM_RECLAIM, 1); -+ if (!nvt_fwu_wq) { -+ NVT_ERR("nvt_fwu_wq create workqueue failed\n"); -+ ret = -ENOMEM; -+ goto err_create_nvt_fwu_wq_failed; -+ } -+ INIT_DELAYED_WORK(&ts->nvt_fwu_work, Boot_Update_Firmware); -+ // please make sure boot update start after display reset(RESX) sequence -+ queue_delayed_work(nvt_fwu_wq, &ts->nvt_fwu_work, msecs_to_jiffies(14000)); -+#endif -+ -+ NVT_LOG("NVT_TOUCH_ESD_PROTECT is %d\n", NVT_TOUCH_ESD_PROTECT); -+#if NVT_TOUCH_ESD_PROTECT -+ INIT_DELAYED_WORK(&nvt_esd_check_work, nvt_esd_check_func); -+ nvt_esd_check_wq = alloc_workqueue("nvt_esd_check_wq", WQ_MEM_RECLAIM, 1); -+ if (!nvt_esd_check_wq) { -+ NVT_ERR("nvt_esd_check_wq create workqueue failed\n"); -+ ret = -ENOMEM; -+ goto err_create_nvt_esd_check_wq_failed; -+ } -+ queue_delayed_work(nvt_esd_check_wq, &nvt_esd_check_work, -+ msecs_to_jiffies(NVT_TOUCH_ESD_CHECK_PERIOD)); -+#endif /* #if NVT_TOUCH_ESD_PROTECT */ -+ -+ ts->event_wq = alloc_workqueue("nvt-event-queue", -+ WQ_UNBOUND | WQ_HIGHPRI | WQ_CPU_INTENSIVE, 1); -+ if (!ts->event_wq) { -+ NVT_ERR("Can not create work thread for suspend/resume!!"); -+ ret = -ENOMEM; -+ goto err_alloc_work_thread_failed; -+ } -+ INIT_WORK(&ts->resume_work, nvt_resume_work); -+ INIT_WORK(&ts->suspend_work, nvt_suspend_work); -+ -+#ifdef CONFIG_DRM -+ ts->drm_notif.notifier_call = nvt_drm_notifier_callback; -+ ret = mi_drm_register_client(&ts->drm_notif); -+ if(ret) { -+ NVT_ERR("register drm_notifier failed. ret=%d\n", ret); -+ goto err_register_drm_notif_failed; -+ } -+#endif -+ -+ bTouchIsAwake = 1; -+ NVT_LOG("end\n"); -+ -+ nvt_irq_enable(true); -+ -+ return 0; -+ -+#ifdef CONFIG_DRM -+ if (mi_drm_unregister_client(&ts->drm_notif)) -+ NVT_ERR("Error occurred while unregistering drm_notifier.\n"); -+err_register_drm_notif_failed: -+#endif -+ -+err_alloc_work_thread_failed: -+ -+#if NVT_TOUCH_ESD_PROTECT -+ if (nvt_esd_check_wq) { -+ cancel_delayed_work_sync(&nvt_esd_check_work); -+ destroy_workqueue(nvt_esd_check_wq); -+ nvt_esd_check_wq = NULL; -+ } -+err_create_nvt_esd_check_wq_failed: -+#endif -+#if BOOT_UPDATE_FIRMWARE -+ if (nvt_fwu_wq) { -+ cancel_delayed_work_sync(&ts->nvt_fwu_work); -+ destroy_workqueue(nvt_fwu_wq); -+ nvt_fwu_wq = NULL; -+ } -+err_create_nvt_fwu_wq_failed: -+ -+#endif -+ free_irq(client->irq, ts); -+err_int_request_failed: -+ if (ts->pen_support) { -+ input_unregister_device(ts->pen_input_dev); -+ ts->pen_input_dev = NULL; -+ } -+err_pen_input_register_device_failed: -+ if (ts->pen_support) { -+ if (ts->pen_input_dev) { -+ input_free_device(ts->pen_input_dev); -+ ts->pen_input_dev = NULL; -+ } -+ } -+err_pen_input_dev_alloc_failed: -+ input_unregister_device(ts->input_dev); -+ ts->input_dev = NULL; -+err_input_register_device_failed: -+ if (ts->input_dev) { -+ input_free_device(ts->input_dev); -+ ts->input_dev = NULL; -+ } -+err_input_dev_alloc_failed: -+err_chipvertrim_failed: -+ mutex_destroy(&ts->xbuf_lock); -+ mutex_destroy(&ts->lock); -+ nvt_gpio_deconfig(ts); -+err_gpio_config_failed: -+err_spi_setup: -+err_ckeck_full_duplex: -+ spi_set_drvdata(client, NULL); -+ if (ts->rbuf) { -+ kfree(ts->rbuf); -+ ts->rbuf = NULL; -+ } -+err_malloc_rbuf: -+ if (ts->xbuf) { -+ kfree(ts->xbuf); -+ ts->xbuf = NULL; -+ } -+err_malloc_xbuf: -+ if (ts) { -+ kfree(ts); -+ ts = NULL; -+ } -+ return ret; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen driver release function. -+ -+return: -+ Executive outcomes. 0---succeed. -+*******************************************************/ -+static void nvt_ts_remove(struct spi_device *client) -+{ -+ NVT_LOG("Removing driver...\n"); -+ -+#ifdef CONFIG_DRM -+ if (mi_drm_unregister_client(&ts->drm_notif)) -+ NVT_ERR("Error occurred while unregistering drm_notifier.\n"); -+#endif -+ -+#if NVT_TOUCH_ESD_PROTECT -+ if (nvt_esd_check_wq) { -+ cancel_delayed_work_sync(&nvt_esd_check_work); -+ nvt_esd_check_enable(false); -+ destroy_workqueue(nvt_esd_check_wq); -+ nvt_esd_check_wq = NULL; -+ } -+#endif -+ -+#if BOOT_UPDATE_FIRMWARE -+ if (nvt_fwu_wq) { -+ cancel_delayed_work_sync(&ts->nvt_fwu_work); -+ destroy_workqueue(nvt_fwu_wq); -+ nvt_fwu_wq = NULL; -+ } -+#endif -+ -+ nvt_irq_enable(false); -+ free_irq(client->irq, ts); -+ -+ mutex_destroy(&ts->xbuf_lock); -+ mutex_destroy(&ts->lock); -+ -+ nvt_gpio_deconfig(ts); -+ -+ if (ts->pen_support) { -+ if (ts->pen_input_dev) { -+ input_unregister_device(ts->pen_input_dev); -+ ts->pen_input_dev = NULL; -+ } -+ } -+ -+ if (ts->input_dev) { -+ input_unregister_device(ts->input_dev); -+ ts->input_dev = NULL; -+ } -+ -+ spi_set_drvdata(client, NULL); -+ -+ if (ts) { -+ kfree(ts); -+ ts = NULL; -+ } -+} -+ -+static void nvt_ts_shutdown(struct spi_device *client) -+{ -+ NVT_LOG("Shutdown driver...\n"); -+ -+ nvt_irq_enable(false); -+ -+#ifdef CONFIG_DRM -+ if (mi_drm_unregister_client(&ts->drm_notif)) -+ NVT_ERR("Error occurred while unregistering drm_notifier.\n"); -+#endif -+ -+ destroy_workqueue(ts->event_wq); -+ -+#if NVT_TOUCH_ESD_PROTECT -+ if (nvt_esd_check_wq) { -+ cancel_delayed_work_sync(&nvt_esd_check_work); -+ nvt_esd_check_enable(false); -+ destroy_workqueue(nvt_esd_check_wq); -+ nvt_esd_check_wq = NULL; -+ } -+#endif /* #if NVT_TOUCH_ESD_PROTECT */ -+ -+#if BOOT_UPDATE_FIRMWARE -+ if (nvt_fwu_wq) { -+ cancel_delayed_work_sync(&ts->nvt_fwu_work); -+ destroy_workqueue(nvt_fwu_wq); -+ nvt_fwu_wq = NULL; -+ } -+#endif -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen driver suspend function. -+ -+return: -+ Executive outcomes. 0---succeed. -+*******************************************************/ -+static int32_t nvt_ts_suspend(struct device *dev) -+{ -+ uint8_t buf[4] = {0}; -+#if MT_PROTOCOL_B -+ uint32_t i = 0; -+#endif -+ -+ if (!bTouchIsAwake) { -+ NVT_LOG("Touch is already suspend\n"); -+ return 0; -+ } -+ -+ pm_stay_awake(dev); -+ ts->ic_state = NVT_IC_SUSPEND_IN; -+ -+ if (!ts->db_wakeup) { -+ if (!ts->irq_enabled) -+ NVT_LOG("IRQ already disabled\n"); -+ else -+ nvt_irq_enable(false); -+ } -+ -+#if NVT_TOUCH_ESD_PROTECT -+ NVT_LOG("cancel delayed work sync\n"); -+ cancel_delayed_work_sync(&nvt_esd_check_work); -+ nvt_esd_check_enable(false); -+#endif /* #if NVT_TOUCH_ESD_PROTECT */ -+ -+ mutex_lock(&ts->lock); -+ -+ NVT_LOG("suspend start\n"); -+ -+ bTouchIsAwake = 0; -+ -+ if (ts->pen_input_dev_enable) { -+ NVT_LOG("if enable pen,will close it"); -+ } -+ -+ if (ts->db_wakeup) { -+ /*---write command to enter "wakeup gesture mode"---*/ -+ /*DoubleClick wakeup CMD was sent by display to meet timing*/ -+ /* -+ buf[0] = EVENT_MAP_HOST_CMD; -+ buf[1] = 0x13; -+ CTP_SPI_WRITE(ts->client, buf, 2); -+ */ -+ enable_irq_wake(ts->client->irq); -+ -+ NVT_LOG("Enabled touch wakeup gesture\n"); -+ } else { -+ /*---write command to enter "deep sleep mode"---*/ -+ buf[0] = EVENT_MAP_HOST_CMD; -+ buf[1] = 0x11; -+ CTP_SPI_WRITE(ts->client, buf, 2); -+ } -+ -+ mutex_unlock(&ts->lock); -+ -+ /* release all touches */ -+#if MT_PROTOCOL_B -+ for (i = 0; i < ts->max_touch_num; i++) { -+ input_mt_slot(ts->input_dev, i); -+ input_report_abs(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0); -+ input_report_abs(ts->input_dev, ABS_MT_PRESSURE, 0); -+ input_mt_report_slot_state(ts->input_dev, MT_TOOL_FINGER, 0); -+ } -+#endif -+ input_report_key(ts->input_dev, BTN_TOUCH, 0); -+#if !MT_PROTOCOL_B -+ input_mt_sync(ts->input_dev); -+#endif -+ input_sync(ts->input_dev); -+ -+ msleep(50); -+ /* release pen event */ -+ release_pen_event(); -+ if (likely(ts->ic_state == NVT_IC_SUSPEND_IN)) -+ ts->ic_state = NVT_IC_SUSPEND_OUT; -+ else -+ NVT_ERR("IC state may error,caused by suspend/resume flow, please CHECK!!"); -+ pm_relax(dev); -+ NVT_LOG("end\n"); -+ -+ return 0; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen driver resume function. -+ -+return: -+ Executive outcomes. 0---succeed. -+*******************************************************/ -+static int32_t nvt_ts_resume(struct device *dev) -+{ -+ int ret = 0; -+ if (bTouchIsAwake) { -+ NVT_LOG("Touch is already resume\n"); -+ return 0; -+ } -+ -+ if (ts->dev_pm_suspend) -+ pm_stay_awake(dev); -+ -+ mutex_lock(&ts->lock); -+ -+ NVT_LOG("resume start\n"); -+ ts->ic_state = NVT_IC_RESUME_IN; -+ -+ // please make sure display reset(RESX) sequence and mipi dsi cmds sent before this -+#if NVT_TOUCH_SUPPORT_HW_RST -+ gpio_set_value(ts->reset_gpio, 1); -+#endif -+ ret = nvt_update_firmware(ts->fw_name); -+ if (ret) -+ NVT_ERR("download firmware failed\n"); -+ -+ nvt_check_fw_reset_state(RESET_STATE_REK); -+ -+ if (!ts->db_wakeup && !ts->irq_enabled) { -+ nvt_irq_enable(true); -+ } -+ -+#if NVT_TOUCH_ESD_PROTECT -+ nvt_esd_check_enable(false); -+ queue_delayed_work(nvt_esd_check_wq, &nvt_esd_check_work, -+ msecs_to_jiffies(NVT_TOUCH_ESD_CHECK_PERIOD)); -+#endif /* #if NVT_TOUCH_ESD_PROTECT */ -+ -+ bTouchIsAwake = 1; -+ -+ mutex_unlock(&ts->lock); -+ -+ if (likely(ts->ic_state == NVT_IC_RESUME_IN)) { -+ ts->ic_state = NVT_IC_RESUME_OUT; -+ } else { -+ NVT_ERR("IC state may error,caused by suspend/resume flow, please CHECK!!"); -+ } -+ if (ts->gesture_command_delayed >= 0){ -+ ts->db_wakeup = ts->gesture_command_delayed; -+ ts->gesture_command_delayed = -1; -+ NVT_LOG("execute delayed command, set double click wakeup %d\n", ts->db_wakeup); -+ } -+ -+ if (ts->dev_pm_suspend) -+ pm_relax(dev); -+ NVT_LOG("end\n"); -+ -+ return 0; -+} -+ -+ -+#ifdef CONFIG_DRM -+static int nvt_drm_notifier_callback(struct notifier_block *self, unsigned long event, void *data) -+{ -+ int blank = *(enum drm_notifier_data *)data; -+ struct nvt_ts_data *ts_data = -+ container_of(self, struct nvt_ts_data, drm_notif); -+ -+ if (data && ts_data) { -+ if (event == MI_DRM_EARLY_EVENT_BLANK) { -+ if (blank == MI_DRM_BLANK_POWERDOWN) { -+ NVT_LOG("event=%lu, *blank=%d\n", event, blank); -+ flush_workqueue(ts_data->event_wq); -+ queue_work(ts_data->event_wq, &ts_data->suspend_work); -+ } -+ } else if (event == MI_DRM_EVENT_BLANK) { -+ if (blank == MI_DRM_BLANK_UNBLANK) { -+ NVT_LOG("event=%lu, *blank=%d\n", event, blank); -+ flush_workqueue(ts_data->event_wq); -+ queue_work(ts_data->event_wq, &ts_data->resume_work); -+ } -+ } -+ } -+ -+ return 0; -+} -+#endif -+ -+static int nvt_pm_suspend(struct device *dev) -+{ -+ if (device_may_wakeup(dev) && ts->db_wakeup) { -+ NVT_LOG("enable touch irq wake\n"); -+ enable_irq_wake(ts->client->irq); -+ } -+ ts->dev_pm_suspend = true; -+ reinit_completion(&ts->dev_pm_suspend_completion); -+ -+ return 0; -+} -+ -+static int nvt_pm_resume(struct device *dev) -+{ -+ if (device_may_wakeup(dev) && ts->db_wakeup) { -+ NVT_LOG("disable touch irq wake\n"); -+ disable_irq_wake(ts->client->irq); -+ } -+ ts->dev_pm_suspend = false; -+ complete(&ts->dev_pm_suspend_completion); -+ -+ return 0; -+} -+ -+static const struct dev_pm_ops nvt_dev_pm_ops = { -+ .suspend = nvt_pm_suspend, -+ .resume = nvt_pm_resume, -+}; -+ -+static const struct spi_device_id nvt_ts_id[] = { -+ { NVT_SPI_NAME, 0 }, -+ { } -+}; -+MODULE_DEVICE_TABLE(spi, nvt_ts_id); -+ -+#ifdef CONFIG_OF -+static struct of_device_id nvt_match_table[] = { -+ { .compatible = "novatek,NVT-ts-spi",}, -+ { }, -+}; -+MODULE_DEVICE_TABLE(of, nvt_match_table); -+#endif -+ -+static struct spi_driver nvt_spi_driver = { -+ .probe = nvt_ts_probe, -+ .remove = nvt_ts_remove, -+ .shutdown = nvt_ts_shutdown, -+ .id_table = nvt_ts_id, -+ .driver = { -+ .name = NVT_SPI_NAME, -+ .owner = THIS_MODULE, -+#ifdef CONFIG_PM -+ .pm = &nvt_dev_pm_ops, -+#endif -+#ifdef CONFIG_OF -+ .of_match_table = nvt_match_table, -+#endif -+ }, -+}; -+ -+module_spi_driver(nvt_spi_driver); -+ -+MODULE_DESCRIPTION("Novatek Touchscreen Driver"); -+MODULE_LICENSE("GPL"); -diff --git a/drivers/input/touchscreen/nt36523/nt36xxx.h b/drivers/input/touchscreen/nt36523/nt36xxx.h -new file mode 100644 -index 000000000000..111111111111 ---- /dev/null -+++ b/drivers/input/touchscreen/nt36523/nt36xxx.h -@@ -0,0 +1,242 @@ -+/* -+ * Copyright (C) 2010 - 2018 Novatek, Inc. -+ * Copyright (C) 2021 XiaoMi, Inc. -+ * -+ * $Revision: 69262 $ -+ * $Date: 2020-09-23 15:07:14 +0800 (週三, 23 九月 2020) $ -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -+ * more details. -+ * -+ */ -+#ifndef _LINUX_NVT_TOUCH_H -+#define _LINUX_NVT_TOUCH_H -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include "nt36xxx_mem_map.h" -+ -+#define NVT_DEBUG 1 -+ -+//---GPIO number--- -+#define NVTTOUCH_RST_PIN 980 -+#define NVTTOUCH_INT_PIN 943 -+ -+#define PINCTRL_STATE_ACTIVE "pmx_ts_active" -+#define PINCTRL_STATE_SUSPEND "pmx_ts_suspend" -+ -+//---INT trigger mode--- -+//#define IRQ_TYPE_EDGE_RISING 1 -+//#define IRQ_TYPE_EDGE_FALLING 2 -+#define INT_TRIGGER_TYPE IRQ_TYPE_EDGE_RISING -+ -+ -+//---SPI driver info.--- -+#define NVT_SPI_NAME "NVT-ts-spi" -+ -+#if NVT_DEBUG -+#define NVT_LOG(fmt, args...) pr_err("[%s] %s %d: " fmt, NVT_SPI_NAME, __func__, __LINE__, ##args) -+#else -+#define NVT_LOG(fmt, args...) pr_info("[%s] %s %d: " fmt, NVT_SPI_NAME, __func__, __LINE__, ##args) -+#endif -+#define NVT_ERR(fmt, args...) pr_err("[%s] %s %d: " fmt, NVT_SPI_NAME, __func__, __LINE__, ##args) -+ -+//---Input device info.--- -+#define NVT_TS_NAME "NVTCapacitiveTouchScreen" -+#define NVT_PEN_NAME "NVTCapacitivePen" -+ -+//---Touch info.--- -+#define TOUCH_DEFAULT_MAX_WIDTH 1600 -+#define TOUCH_DEFAULT_MAX_HEIGHT 2560 -+#define TOUCH_MAX_FINGER_NUM 10 -+#define TOUCH_KEY_NUM 0 -+#if TOUCH_KEY_NUM > 0 -+extern const uint16_t touch_key_array[TOUCH_KEY_NUM]; -+#endif -+#define TOUCH_FORCE_NUM 1000 -+//---for Pen--- -+#define PEN_PRESSURE_MAX (4095) -+#define PEN_DISTANCE_MAX (1) -+#define PEN_TILT_MIN (-60) -+#define PEN_TILT_MAX (60) -+ -+/* Enable only when module have tp reset pin and connected to host */ -+#define NVT_TOUCH_SUPPORT_HW_RST 0 -+ -+//---Customerized func.--- -+#define NVT_TOUCH_MP 0 -+#define NVT_TOUCH_MP_SETTING_CRITERIA_FROM_CSV 0 -+#define MT_PROTOCOL_B 1 -+#define FUNCPAGE_PALM 4 -+#define PACKET_PALM_ON 3 -+#define PACKET_PALM_OFF 4 -+ -+#define BOOT_UPDATE_FIRMWARE 1 -+#define DEFAULT_BOOT_UPDATE_FIRMWARE_NAME "novatek/nt36523.bin" -+#define DEFAULT_MP_UPDATE_FIRMWARE_NAME "novatek_ts_mp.bin" -+ -+//---ESD Protect.--- -+#define NVT_TOUCH_ESD_PROTECT 1 -+#define NVT_TOUCH_ESD_CHECK_PERIOD 1500 /* ms */ -+#define NVT_TOUCH_WDT_RECOVERY 1 -+ -+enum nvt_ic_state { -+ NVT_IC_SUSPEND_IN, -+ NVT_IC_SUSPEND_OUT, -+ NVT_IC_RESUME_IN, -+ NVT_IC_RESUME_OUT, -+ NVT_IC_INIT, -+}; -+ -+struct nvt_config_info { -+ u8 tp_vendor; -+ u8 tp_color; -+ u8 display_maker; -+ u8 glass_vendor; -+ const char *nvt_fw_name; -+ const char *nvt_mp_name; -+ const char *nvt_limit_name; -+}; -+ -+struct nvt_ts_data { -+ struct spi_device *client; -+ struct input_dev *input_dev; -+ struct delayed_work nvt_fwu_work; -+ struct work_struct switch_mode_work; -+ struct work_struct pen_charge_state_change_work; -+ bool pen_is_charge; -+ struct notifier_block pen_charge_state_notifier; -+ uint16_t addr; -+ int8_t phys[32]; -+#if defined(CONFIG_FB) -+#ifdef CONFIG_DRM -+ struct notifier_block drm_notif; -+#else -+ struct notifier_block fb_notif; -+#endif -+#endif -+ uint32_t config_array_size; -+ struct nvt_config_info *config_array; -+ const char *fw_name; -+ bool lkdown_readed; -+ uint8_t fw_ver; -+ uint8_t x_num; -+ uint8_t y_num; -+ int ic_state; -+ uint16_t abs_x_max; -+ uint16_t abs_y_max; -+ uint8_t max_touch_num; -+ uint8_t max_button_num; -+ uint32_t int_trigger_type; -+ int32_t irq_gpio; -+ uint32_t irq_flags; -+ int32_t reset_gpio; -+ uint32_t reset_flags; -+ struct mutex lock; -+ const struct nvt_ts_mem_map *mmap; -+ uint8_t carrier_system; -+ uint8_t hw_crc; -+ uint16_t nvt_pid; -+ uint8_t *rbuf; -+ uint8_t *xbuf; -+ struct mutex xbuf_lock; -+ bool irq_enabled; -+ uint8_t cascade; -+ bool pen_support; -+ bool wgp_stylus; -+ uint8_t x_gang_num; -+ uint8_t y_gang_num; -+ struct input_dev *pen_input_dev; -+ bool pen_input_dev_enable; -+ int8_t pen_phys[32]; -+ struct workqueue_struct *event_wq; -+ struct work_struct suspend_work; -+ struct work_struct resume_work; -+ int result_type; -+ int panel_index; -+ uint32_t spi_max_freq; -+ int db_wakeup; -+ uint8_t debug_flag; -+ bool fw_debug; -+ bool dev_pm_suspend; -+ struct completion dev_pm_suspend_completion; -+ bool palm_sensor_switch; -+ int gesture_command_delayed; -+ struct pinctrl *ts_pinctrl; -+ struct pinctrl_state *pinctrl_state_active; -+ struct pinctrl_state *pinctrl_state_suspend; -+}; -+ -+typedef enum { -+ RESET_STATE_INIT = 0xA0,// IC reset -+ RESET_STATE_REK, // ReK baseline -+ RESET_STATE_REK_FINISH, // baseline is ready -+ RESET_STATE_NORMAL_RUN, // normal run -+ RESET_STATE_MAX = 0xAF -+} RST_COMPLETE_STATE; -+ -+typedef enum { -+ EVENT_MAP_HOST_CMD = 0x50, -+ EVENT_MAP_HANDSHAKING_or_SUB_CMD_BYTE = 0x51, -+ EVENT_MAP_RESET_COMPLETE = 0x60, -+ EVENT_MAP_FWINFO = 0x78, -+ EVENT_MAP_PROJECTID = 0x9A, -+} SPI_EVENT_MAP; -+ -+//---SPI READ/WRITE--- -+#define SPI_WRITE_MASK(a) (a | 0x80) -+#define SPI_READ_MASK(a) (a & 0x7F) -+ -+#define DUMMY_BYTES (1) -+#define NVT_TRANSFER_LEN (63*1024) -+#define NVT_READ_LEN (2*1024) -+ -+typedef enum { -+ NVTWRITE = 0, -+ NVTREAD = 1 -+} NVT_SPI_RW; -+ -+//---extern structures--- -+extern struct nvt_ts_data *ts; -+ -+//---extern functions--- -+int32_t CTP_SPI_READ(struct spi_device *client, uint8_t *buf, uint16_t len); -+int32_t CTP_SPI_WRITE(struct spi_device *client, uint8_t *buf, uint16_t len); -+void nvt_bootloader_reset(void); -+void nvt_eng_reset(void); -+void nvt_sw_reset(void); -+void nvt_sw_reset_idle(void); -+void nvt_boot_ready(void); -+void nvt_bld_crc_enable(void); -+void nvt_fw_crc_enable(void); -+void nvt_tx_auto_copy_mode(void); -+void nvt_set_dbgfw_status(bool enable); -+void nvt_match_fw(void); -+int32_t nvt_update_firmware(const char *firmware_name); -+int32_t nvt_check_fw_reset_state(RST_COMPLETE_STATE check_reset_state); -+int32_t nvt_get_fw_info(void); -+int32_t nvt_clear_fw_status(void); -+int32_t nvt_check_fw_status(void); -+int32_t nvt_check_spi_dma_tx_info(void); -+int32_t nvt_set_page(uint32_t addr); -+int32_t nvt_write_addr(uint32_t addr, uint8_t data); -+int32_t nvt_read_pid(void); -+bool nvt_get_dbgfw_status(void); -+int32_t nvt_set_pocket_palm_switch(uint8_t pocket_palm_switch); -+void Boot_Update_Firmware(struct work_struct *work); -+#if NVT_TOUCH_ESD_PROTECT -+extern void nvt_esd_check_enable(uint8_t enable); -+#endif /* #if NVT_TOUCH_ESD_PROTECT */ -+ -+#endif /* _LINUX_NVT_TOUCH_H */ -diff --git a/drivers/input/touchscreen/nt36523/nt36xxx_fw_update.c b/drivers/input/touchscreen/nt36523/nt36xxx_fw_update.c -new file mode 100644 -index 000000000000..111111111111 ---- /dev/null -+++ b/drivers/input/touchscreen/nt36523/nt36xxx_fw_update.c -@@ -0,0 +1,857 @@ -+/* -+ * Copyright (C) 2010 - 2018 Novatek, Inc. -+ * Copyright (C) 2021 XiaoMi, Inc. -+ * -+ * $Revision: 68983 $ -+ * $Date: 2020-09-17 09:43:23 +0800 (週四, 17 九月 2020) $ -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -+ * more details. -+ * -+ */ -+ -+#include -+#include -+ -+#include "nt36xxx.h" -+ -+#if BOOT_UPDATE_FIRMWARE -+ -+#define SIZE_4KB 4096 -+#define FLASH_SECTOR_SIZE SIZE_4KB -+#define FW_BIN_VER_OFFSET (fw_need_write_size - SIZE_4KB) -+#define FW_BIN_VER_BAR_OFFSET (FW_BIN_VER_OFFSET + 1) -+#define NVT_FLASH_END_FLAG_LEN 3 -+#define NVT_FLASH_END_FLAG_ADDR (fw_need_write_size - NVT_FLASH_END_FLAG_LEN) -+ -+static ktime_t start, end; -+const struct firmware *fw_entry = NULL; -+static size_t fw_need_write_size = 0; -+static uint8_t *fwbuf = NULL; -+ -+struct nvt_ts_bin_map { -+ char name[12]; -+ uint32_t BIN_addr; -+ uint32_t SRAM_addr; -+ uint32_t size; -+ uint32_t crc; -+}; -+ -+static struct nvt_ts_bin_map *bin_map; -+ -+/******************************************************* -+Description: -+ Novatek touchscreen init variable and allocate buffer -+for download firmware function. -+ -+return: -+ n.a. -+*******************************************************/ -+static int32_t nvt_download_init(void) -+{ -+ /* allocate buffer for transfer firmware */ -+ //NVT_LOG("NVT_TRANSFER_LEN = 0x%06X\n", NVT_TRANSFER_LEN); -+ -+ if (fwbuf == NULL) { -+ fwbuf = (uint8_t *)kzalloc((NVT_TRANSFER_LEN + 1 + DUMMY_BYTES), GFP_KERNEL); -+ if(fwbuf == NULL) { -+ NVT_ERR("kzalloc for fwbuf failed!\n"); -+ return -ENOMEM; -+ } -+ } -+ -+ return 0; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen checksum function. Calculate bin -+file checksum for comparison. -+ -+return: -+ n.a. -+*******************************************************/ -+static uint32_t CheckSum(const u8 *data, size_t len) -+{ -+ uint32_t i = 0; -+ uint32_t checksum = 0; -+ -+ for (i = 0 ; i < len+1 ; i++) -+ checksum += data[i]; -+ -+ checksum += len; -+ checksum = ~checksum +1; -+ -+ return checksum; -+} -+ -+static uint32_t byte_to_word(const uint8_t *data) -+{ -+ return data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24); -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen parsing bin header function. -+ -+return: -+ n.a. -+*******************************************************/ -+static uint32_t partition = 0; -+static uint8_t ilm_dlm_num = 2; -+static uint8_t cascade_2nd_header_info = 0; -+static int32_t nvt_bin_header_parser(const u8 *fwdata, size_t fwsize) -+{ -+ uint32_t list = 0; -+ uint32_t pos = 0x00; -+ uint32_t end = 0x00; -+ uint8_t info_sec_num = 0; -+ uint8_t ovly_sec_num = 0; -+ uint8_t ovly_info = 0; -+ uint8_t find_bin_header = 0; -+ -+ /* Find the header size */ -+ end = fwdata[0] + (fwdata[1] << 8) + (fwdata[2] << 16) + (fwdata[3] << 24); -+ -+ /* check cascade next header */ -+ cascade_2nd_header_info = (fwdata[0x20] & 0x02) >> 1; -+ NVT_LOG("cascade_2nd_header_info = %d\n", cascade_2nd_header_info); -+ -+ if (cascade_2nd_header_info) { -+ pos = 0x30; // info section start at 0x30 offset -+ while (pos < (end / 2)) { -+ info_sec_num ++; -+ pos += 0x10; /* each header info is 16 bytes */ -+ } -+ -+ info_sec_num = info_sec_num + 1; //next header section -+ } else { -+ pos = 0x30; // info section start at 0x30 offset -+ while (pos < end) { -+ info_sec_num ++; -+ pos += 0x10; /* each header info is 16 bytes */ -+ } -+ } -+ -+ /* -+ * Find the DLM OVLY section -+ * [0:3] Overlay Section Number -+ * [4] Overlay Info -+ */ -+ ovly_info = (fwdata[0x28] & 0x10) >> 4; -+ ovly_sec_num = (ovly_info) ? (fwdata[0x28] & 0x0F) : 0; -+ -+ /* -+ * calculate all partition number -+ * ilm_dlm_num (ILM & DLM) + ovly_sec_num + info_sec_num -+ */ -+ partition = ilm_dlm_num + ovly_sec_num + info_sec_num; -+ NVT_LOG("ovly_info = %d, ilm_dlm_num = %d, ovly_sec_num = %d, info_sec_num = %d, partition = %d\n", -+ ovly_info, ilm_dlm_num, ovly_sec_num, info_sec_num, partition); -+ -+ /* allocated memory for header info */ -+ bin_map = (struct nvt_ts_bin_map *)kzalloc((partition+1) * sizeof(struct nvt_ts_bin_map), GFP_KERNEL); -+ if(bin_map == NULL) { -+ NVT_ERR("kzalloc for bin_map failed!\n"); -+ return -ENOMEM; -+ } -+ -+ for (list = 0; list < partition; list++) { -+ /* -+ * [1] parsing ILM & DLM header info -+ * BIN_addr : SRAM_addr : size (12-bytes) -+ * crc located at 0x18 & 0x1C -+ */ -+ if (list < ilm_dlm_num) { -+ bin_map[list].BIN_addr = byte_to_word(&fwdata[0 + list*12]); -+ bin_map[list].SRAM_addr = byte_to_word(&fwdata[4 + list*12]); -+ bin_map[list].size = byte_to_word(&fwdata[8 + list*12]); -+ if (ts->hw_crc) -+ bin_map[list].crc = byte_to_word(&fwdata[0x18 + list*4]); -+ else { //ts->hw_crc -+ if ((bin_map[list].BIN_addr + bin_map[list].size) < fwsize) -+ bin_map[list].crc = CheckSum(&fwdata[bin_map[list].BIN_addr], bin_map[list].size); -+ else { -+ NVT_ERR("access range (0x%08X to 0x%08X) is larger than bin size!\n", -+ bin_map[list].BIN_addr, bin_map[list].BIN_addr + bin_map[list].size); -+ return -EINVAL; -+ } -+ } //ts->hw_crc -+ if (list == 0) -+ sprintf(bin_map[list].name, "ILM"); -+ else if (list == 1) -+ sprintf(bin_map[list].name, "DLM"); -+ } -+ -+ /* -+ * [2] parsing others header info -+ * SRAM_addr : size : BIN_addr : crc (16-bytes) -+ */ -+ if ((list >= ilm_dlm_num) && (list < (ilm_dlm_num + info_sec_num))) { -+ if (find_bin_header == 0) { -+ /* others partition located at 0x30 offset */ -+ pos = 0x30 + (0x10 * (list - ilm_dlm_num)); -+ } else if (find_bin_header && cascade_2nd_header_info) { -+ /* cascade 2nd header info */ -+ pos = end - 0x10; -+ } -+ -+ bin_map[list].SRAM_addr = byte_to_word(&fwdata[pos]); -+ bin_map[list].size = byte_to_word(&fwdata[pos+4]); -+ bin_map[list].BIN_addr = byte_to_word(&fwdata[pos+8]); -+ if (ts->hw_crc) -+ bin_map[list].crc = byte_to_word(&fwdata[pos+12]); -+ else { //ts->hw_crc -+ if ((bin_map[list].BIN_addr + bin_map[list].size) < fwsize) -+ bin_map[list].crc = CheckSum(&fwdata[bin_map[list].BIN_addr], bin_map[list].size); -+ else { -+ NVT_ERR("access range (0x%08X to 0x%08X) is larger than bin size!\n", -+ bin_map[list].BIN_addr, bin_map[list].BIN_addr + bin_map[list].size); -+ return -EINVAL; -+ } -+ } //ts->hw_crc -+ /* detect header end to protect parser function */ -+ if ((bin_map[list].BIN_addr < end) && (bin_map[list].size != 0)) { -+ sprintf(bin_map[list].name, "Header"); -+ find_bin_header = 1; -+ } else { -+ sprintf(bin_map[list].name, "Info-%d", (list - ilm_dlm_num)); -+ } -+ } -+ -+ /* -+ * [3] parsing overlay section header info -+ * SRAM_addr : size : BIN_addr : crc (16-bytes) -+ */ -+ if (list >= (ilm_dlm_num + info_sec_num)) { -+ /* overlay info located at DLM (list = 1) start addr */ -+ pos = bin_map[1].BIN_addr + (0x10 * (list- ilm_dlm_num - info_sec_num)); -+ -+ bin_map[list].SRAM_addr = byte_to_word(&fwdata[pos]); -+ bin_map[list].size = byte_to_word(&fwdata[pos+4]); -+ bin_map[list].BIN_addr = byte_to_word(&fwdata[pos+8]); -+ if (ts->hw_crc) -+ bin_map[list].crc = byte_to_word(&fwdata[pos+12]); -+ else { //ts->hw_crc -+ if ((bin_map[list].BIN_addr + bin_map[list].size) < fwsize) -+ bin_map[list].crc = CheckSum(&fwdata[bin_map[list].BIN_addr], bin_map[list].size); -+ else { -+ NVT_ERR("access range (0x%08X to 0x%08X) is larger than bin size!\n", -+ bin_map[list].BIN_addr, bin_map[list].BIN_addr + bin_map[list].size); -+ return -EINVAL; -+ } -+ } //ts->hw_crc -+ sprintf(bin_map[list].name, "Overlay-%d", (list- ilm_dlm_num - info_sec_num)); -+ } -+ -+ /* BIN size error detect */ -+ if ((bin_map[list].BIN_addr + bin_map[list].size) > fwsize) { -+ NVT_ERR("access range (0x%08X to 0x%08X) is larger than bin size!\n", -+ bin_map[list].BIN_addr, bin_map[list].BIN_addr + bin_map[list].size); -+ return -EINVAL; -+ } -+ -+// NVT_LOG("[%d][%s] SRAM (0x%08X), SIZE (0x%08X), BIN (0x%08X), CRC (0x%08X)\n", -+// list, bin_map[list].name, -+// bin_map[list].SRAM_addr, bin_map[list].size, bin_map[list].BIN_addr, bin_map[list].crc); -+ } -+ -+ return 0; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen release update firmware function. -+ -+return: -+ n.a. -+*******************************************************/ -+static void update_firmware_release(void) -+{ -+ if (fw_entry) { -+ release_firmware(fw_entry); -+ } -+ -+ fw_entry = NULL; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen request update firmware function. -+ -+return: -+ Executive outcomes. 0---succeed. -1,-22---failed. -+*******************************************************/ -+static int32_t update_firmware_request(const char *filename) -+{ -+ uint8_t retry = 0; -+ int32_t ret = 0; -+ -+ if (NULL == filename) { -+ return -ENOENT; -+ } -+ -+ while (1) { -+ NVT_LOG("filename is %s\n", filename); -+ -+ ret = request_firmware(&fw_entry, filename, &ts->client->dev); -+ if (ret) { -+ NVT_ERR("firmware load failed, ret=%d\n", ret); -+ goto request_fail; -+ } -+ -+ fw_need_write_size = fw_entry->size; -+ -+ // check if FW version add FW version bar equals 0xFF -+ if (*(fw_entry->data + FW_BIN_VER_OFFSET) + *(fw_entry->data + FW_BIN_VER_BAR_OFFSET) != 0xFF) { -+ NVT_ERR("bin file FW_VER + FW_VER_BAR should be 0xFF!\n"); -+ NVT_ERR("FW_VER=0x%02X, FW_VER_BAR=0x%02X\n", *(fw_entry->data+FW_BIN_VER_OFFSET), *(fw_entry->data+FW_BIN_VER_BAR_OFFSET)); -+ ret = -ENOEXEC; -+ goto invalid; -+ } -+ -+ /* BIN Header Parser */ -+ ret = nvt_bin_header_parser(fw_entry->data, fw_entry->size); -+ if (ret) { -+ NVT_ERR("bin header parser failed\n"); -+ goto invalid; -+ } else { -+ break; -+ } -+ -+invalid: -+ update_firmware_release(); -+ if (!IS_ERR_OR_NULL(bin_map)) { -+ kfree(bin_map); -+ bin_map = NULL; -+ } -+ -+request_fail: -+ retry++; -+ if(unlikely(retry > 2)) { -+ NVT_ERR("error, retry=%d\n", retry); -+ break; -+ } -+ } -+ -+ return ret; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen write data to sram function. -+ -+- fwdata : The buffer is written -+- SRAM_addr: The sram destination address -+- size : Number of data bytes in @fwdata being written -+- BIN_addr : The transferred data offset of @fwdata -+ -+return: -+ Executive outcomes. 0---succeed. else---fail. -+*******************************************************/ -+static int32_t nvt_write_sram(const u8 *fwdata, -+ uint32_t SRAM_addr, uint32_t size, uint32_t BIN_addr) -+{ -+ int32_t ret = 0; -+ uint32_t i = 0; -+ uint16_t len = 0; -+ int32_t count = 0; -+ -+ if (size % NVT_TRANSFER_LEN) -+ count = (size / NVT_TRANSFER_LEN) + 1; -+ else -+ count = (size / NVT_TRANSFER_LEN); -+ -+ for (i = 0 ; i < count ; i++) { -+ len = (size < NVT_TRANSFER_LEN) ? size : NVT_TRANSFER_LEN; -+ -+ //---set xdata index to start address of SRAM--- -+ ret = nvt_set_page(SRAM_addr); -+ if (ret) { -+ NVT_ERR("set page failed, ret = %d\n", ret); -+ return ret; -+ } -+ -+ //---write data into SRAM--- -+ fwbuf[0] = SRAM_addr & 0x7F; //offset -+ memcpy(fwbuf+1, &fwdata[BIN_addr], len); //payload -+ ret = CTP_SPI_WRITE(ts->client, fwbuf, len+1); -+ if (ret) { -+ NVT_ERR("write to sram failed, ret = %d\n", ret); -+ return ret; -+ } -+ -+ SRAM_addr += NVT_TRANSFER_LEN; -+ BIN_addr += NVT_TRANSFER_LEN; -+ size -= NVT_TRANSFER_LEN; -+ } -+ -+ return ret; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen nvt_write_firmware function to write -+firmware into each partition. -+ -+return: -+ n.a. -+*******************************************************/ -+static int32_t nvt_write_firmware(const u8 *fwdata, size_t fwsize) -+{ -+ uint32_t list = 0; -+ char *name; -+ uint32_t BIN_addr, SRAM_addr, size; -+ int32_t ret = 0; -+ -+ memset(fwbuf, 0, (NVT_TRANSFER_LEN+1)); -+ -+ for (list = 0; list < partition; list++) { -+ /* initialize variable */ -+ SRAM_addr = bin_map[list].SRAM_addr; -+ size = bin_map[list].size; -+ BIN_addr = bin_map[list].BIN_addr; -+ name = bin_map[list].name; -+ -+// NVT_LOG("[%d][%s] SRAM (0x%08X), SIZE (0x%08X), BIN (0x%08X)\n", -+// list, name, SRAM_addr, size, BIN_addr); -+ -+ /* Check data size */ -+ if ((BIN_addr + size) > fwsize) { -+ NVT_ERR("access range (0x%08X to 0x%08X) is larger than bin size!\n", -+ BIN_addr, BIN_addr + size); -+ ret = -EINVAL; -+ goto out; -+ } -+ -+ /* ignore reserved partition (Reserved Partition size is zero) */ -+ if (!size) -+ continue; -+ else -+ size = size +1; -+ -+ /* write data to SRAM */ -+ ret = nvt_write_sram(fwdata, SRAM_addr, size, BIN_addr); -+ if (ret) { -+ NVT_ERR("sram program failed, ret = %d\n", ret); -+ goto out; -+ } -+ } -+ -+out: -+ return ret; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen check checksum function. -+This function will compare file checksum and fw checksum. -+ -+return: -+ n.a. -+*******************************************************/ -+static int32_t nvt_check_fw_checksum(void) -+{ -+ uint32_t fw_checksum = 0; -+ uint32_t len = partition*4; -+ uint32_t list = 0; -+ int32_t ret = 0; -+ -+ memset(fwbuf, 0, (len+1)); -+ -+ //---set xdata index to checksum--- -+ nvt_set_page(ts->mmap->R_ILM_CHECKSUM_ADDR); -+ -+ /* read checksum */ -+ fwbuf[0] = (ts->mmap->R_ILM_CHECKSUM_ADDR) & 0x7F; -+ ret = CTP_SPI_READ(ts->client, fwbuf, len+1); -+ if (ret) { -+ NVT_ERR("Read fw checksum failed\n"); -+ return ret; -+ } -+ -+ /* -+ * Compare each checksum from fw -+ * ILM + DLM + Overlay + Info -+ * ilm_dlm_num (ILM & DLM) + ovly_sec_num + info_sec_num -+ */ -+ for (list = 0; list < partition; list++) { -+ fw_checksum = byte_to_word(&fwbuf[1+list*4]); -+ -+ /* ignore reserved partition (Reserved Partition size is zero) */ -+ if(!bin_map[list].size) -+ continue; -+ -+ if (bin_map[list].crc != fw_checksum) { -+ NVT_ERR("[%d] BIN_checksum=0x%08X, FW_checksum=0x%08X\n", -+ list, bin_map[list].crc, fw_checksum); -+ ret = -EIO; -+ } -+ } -+ -+ return ret; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen set bootload crc reg bank function. -+This function will set hw crc reg before enable crc function. -+ -+return: -+ n.a. -+*******************************************************/ -+static void nvt_set_bld_crc_bank(uint32_t DES_ADDR, uint32_t SRAM_ADDR, -+ uint32_t LENGTH_ADDR, uint32_t size, -+ uint32_t G_CHECKSUM_ADDR, uint32_t crc) -+{ -+ /* write destination address */ -+ nvt_set_page(DES_ADDR); -+ fwbuf[0] = DES_ADDR & 0x7F; -+ fwbuf[1] = (SRAM_ADDR) & 0xFF; -+ fwbuf[2] = (SRAM_ADDR >> 8) & 0xFF; -+ fwbuf[3] = (SRAM_ADDR >> 16) & 0xFF; -+ CTP_SPI_WRITE(ts->client, fwbuf, 4); -+ -+ /* write length */ -+ //nvt_set_page(LENGTH_ADDR); -+ fwbuf[0] = LENGTH_ADDR & 0x7F; -+ fwbuf[1] = (size) & 0xFF; -+ fwbuf[2] = (size >> 8) & 0xFF; -+ fwbuf[3] = (size >> 16) & 0x01; -+ if (ts->hw_crc == 1) { -+ CTP_SPI_WRITE(ts->client, fwbuf, 3); -+ } else if (ts->hw_crc > 1) { -+ CTP_SPI_WRITE(ts->client, fwbuf, 4); -+ } -+ -+ /* write golden dlm checksum */ -+ //nvt_set_page(G_CHECKSUM_ADDR); -+ fwbuf[0] = G_CHECKSUM_ADDR & 0x7F; -+ fwbuf[1] = (crc) & 0xFF; -+ fwbuf[2] = (crc >> 8) & 0xFF; -+ fwbuf[3] = (crc >> 16) & 0xFF; -+ fwbuf[4] = (crc >> 24) & 0xFF; -+ CTP_SPI_WRITE(ts->client, fwbuf, 5); -+ -+ return; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen set BLD hw crc function. -+This function will set ILM and DLM crc information to register. -+ -+return: -+ n.a. -+*******************************************************/ -+static void nvt_set_bld_hw_crc(void) -+{ -+ /* [0] ILM */ -+ /* write register bank */ -+ nvt_set_bld_crc_bank(ts->mmap->ILM_DES_ADDR, bin_map[0].SRAM_addr, -+ ts->mmap->ILM_LENGTH_ADDR, bin_map[0].size, -+ ts->mmap->G_ILM_CHECKSUM_ADDR, bin_map[0].crc); -+ -+ /* [1] DLM */ -+ /* write register bank */ -+ nvt_set_bld_crc_bank(ts->mmap->DLM_DES_ADDR, bin_map[1].SRAM_addr, -+ ts->mmap->DLM_LENGTH_ADDR, bin_map[1].size, -+ ts->mmap->G_DLM_CHECKSUM_ADDR, bin_map[1].crc); -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen read BLD hw crc info function. -+This function will check crc results from register. -+ -+return: -+ n.a. -+*******************************************************/ -+static void nvt_read_bld_hw_crc(void) -+{ -+ uint8_t buf[8] = {0}; -+ uint32_t g_crc = 0, r_crc = 0; -+ -+ /* CRC Flag */ -+ nvt_set_page(ts->mmap->BLD_ILM_DLM_CRC_ADDR); -+ buf[0] = ts->mmap->BLD_ILM_DLM_CRC_ADDR & 0x7F; -+ buf[1] = 0x00; -+ CTP_SPI_READ(ts->client, buf, 2); -+ NVT_ERR("crc_done = %d, ilm_crc_flag = %d, dlm_crc_flag = %d\n", -+ (buf[1] >> 2) & 0x01, (buf[1] >> 0) & 0x01, (buf[1] >> 1) & 0x01); -+ -+ /* ILM CRC */ -+ nvt_set_page(ts->mmap->G_ILM_CHECKSUM_ADDR); -+ buf[0] = ts->mmap->G_ILM_CHECKSUM_ADDR & 0x7F; -+ buf[1] = 0x00; -+ buf[2] = 0x00; -+ buf[3] = 0x00; -+ buf[4] = 0x00; -+ CTP_SPI_READ(ts->client, buf, 5); -+ g_crc = buf[1] | (buf[2] << 8) | (buf[3] << 16) | (buf[4] << 24); -+ -+ nvt_set_page(ts->mmap->R_ILM_CHECKSUM_ADDR); -+ buf[0] = ts->mmap->R_ILM_CHECKSUM_ADDR & 0x7F; -+ buf[1] = 0x00; -+ buf[2] = 0x00; -+ buf[3] = 0x00; -+ buf[4] = 0x00; -+ CTP_SPI_READ(ts->client, buf, 5); -+ r_crc = buf[1] | (buf[2] << 8) | (buf[3] << 16) | (buf[4] << 24); -+ -+ NVT_ERR("ilm: bin crc = 0x%08X, golden = 0x%08X, result = 0x%08X\n", -+ bin_map[0].crc, g_crc, r_crc); -+ -+ /* DLM CRC */ -+ nvt_set_page(ts->mmap->G_DLM_CHECKSUM_ADDR); -+ buf[0] = ts->mmap->G_DLM_CHECKSUM_ADDR & 0x7F; -+ buf[1] = 0x00; -+ buf[2] = 0x00; -+ buf[3] = 0x00; -+ buf[4] = 0x00; -+ CTP_SPI_READ(ts->client, buf, 5); -+ g_crc = buf[1] | (buf[2] << 8) | (buf[3] << 16) | (buf[4] << 24); -+ -+ nvt_set_page(ts->mmap->R_DLM_CHECKSUM_ADDR); -+ buf[0] = ts->mmap->R_DLM_CHECKSUM_ADDR & 0x7F; -+ buf[1] = 0x00; -+ buf[2] = 0x00; -+ buf[3] = 0x00; -+ buf[4] = 0x00; -+ CTP_SPI_READ(ts->client, buf, 5); -+ r_crc = buf[1] | (buf[2] << 8) | (buf[3] << 16) | (buf[4] << 24); -+ -+ NVT_ERR("dlm: bin crc = 0x%08X, golden = 0x%08X, result = 0x%08X\n", -+ bin_map[1].crc, g_crc, r_crc); -+ -+ return; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen Download_Firmware with HW CRC -+function. It's complete download firmware flow. -+ -+return: -+ Executive outcomes. 0---succeed. else---fail. -+*******************************************************/ -+static int32_t nvt_download_firmware_hw_crc(void) -+{ -+ uint8_t retry = 0; -+ int32_t ret = 0; -+ -+ start = ktime_get(); -+ -+ while (1) { -+ /* bootloader reset to reset MCU */ -+ nvt_bootloader_reset(); -+ -+ /* set ilm & dlm reg bank */ -+ nvt_set_bld_hw_crc(); -+ -+ /* Start to write firmware process */ -+ if (cascade_2nd_header_info) { -+ /* for cascade */ -+ nvt_tx_auto_copy_mode(); -+ -+ ret = nvt_write_firmware(fw_entry->data, fw_entry->size); -+ if (ret) { -+ NVT_ERR("Write_Firmware failed. (%d)\n", ret); -+ goto fail; -+ } -+ -+ ret = nvt_check_spi_dma_tx_info(); -+ if (ret) { -+ NVT_ERR("spi dma tx info failed. (%d)\n", ret); -+ goto fail; -+ } -+ } else { -+ ret = nvt_write_firmware(fw_entry->data, fw_entry->size); -+ if (ret) { -+ NVT_ERR("Write_Firmware failed. (%d)\n", ret); -+ goto fail; -+ } -+ } -+ -+ /* enable hw bld crc function */ -+ nvt_bld_crc_enable(); -+ -+ /* clear fw reset status & enable fw crc check */ -+ nvt_fw_crc_enable(); -+ -+ /* Set Boot Ready Bit */ -+ nvt_boot_ready(); -+ -+ ret = nvt_check_fw_reset_state(RESET_STATE_INIT); -+ if (ret) { -+ NVT_ERR("nvt_check_fw_reset_state failed. (%d)\n", ret); -+ goto fail; -+ } else { -+ break; -+ } -+ -+fail: -+ retry++; -+ if(unlikely(retry > 2)) { -+ NVT_ERR("error, retry=%d\n", retry); -+ nvt_read_bld_hw_crc(); -+ break; -+ } -+ } -+ -+ end = ktime_get(); -+ -+ return ret; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen Download_Firmware function. It's -+complete download firmware flow. -+ -+return: -+ n.a. -+*******************************************************/ -+static int32_t nvt_download_firmware(void) -+{ -+ uint8_t retry = 0; -+ int32_t ret = 0; -+ -+ start = ktime_get(); -+ -+ while (1) { -+ /* -+ * Send eng reset cmd before download FW -+ * Keep TP_RESX low when send eng reset cmd -+ */ -+#if NVT_TOUCH_SUPPORT_HW_RST -+ gpio_set_value(ts->reset_gpio, 0); -+ mdelay(1); //wait 1ms -+#endif -+ nvt_eng_reset(); -+#if NVT_TOUCH_SUPPORT_HW_RST -+ gpio_set_value(ts->reset_gpio, 1); -+ mdelay(10); //wait tRT2BRST after TP_RST -+#endif -+ nvt_bootloader_reset(); -+ -+ /* clear fw reset status */ -+ nvt_write_addr(ts->mmap->EVENT_BUF_ADDR | EVENT_MAP_RESET_COMPLETE, 0x00); -+ -+ /* Start to write firmware process */ -+ ret = nvt_write_firmware(fw_entry->data, fw_entry->size); -+ if (ret) { -+ NVT_ERR("Write_Firmware failed. (%d)\n", ret); -+ goto fail; -+ } -+ -+ /* Set Boot Ready Bit */ -+ nvt_boot_ready(); -+ -+ ret = nvt_check_fw_reset_state(RESET_STATE_INIT); -+ if (ret) { -+ NVT_ERR("nvt_check_fw_reset_state failed. (%d)\n", ret); -+ goto fail; -+ } -+ -+ /* check fw checksum result */ -+ ret = nvt_check_fw_checksum(); -+ if (ret) { -+ NVT_ERR("firmware checksum not match, retry=%d\n", retry); -+ goto fail; -+ } else { -+ break; -+ } -+ -+fail: -+ retry++; -+ if(unlikely(retry > 2)) { -+ NVT_ERR("error, retry=%d\n", retry); -+ break; -+ } -+ } -+ -+ end = ktime_get(); -+ -+ return ret; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen update firmware main function. -+ -+return: -+ n.a. -+*******************************************************/ -+int32_t nvt_update_firmware(const char *firmware_name) -+{ -+ int32_t ret = 0; -+ -+ // request bin file in "/etc/firmware" -+ ret = update_firmware_request(firmware_name); -+ if (ret) { -+ NVT_ERR("update_firmware_request failed. (%d)\n", ret); -+ goto request_firmware_fail; -+ } -+ -+ /* initial buffer and variable */ -+ ret = nvt_download_init(); -+ if (ret) { -+ NVT_ERR("Download Init failed. (%d)\n", ret); -+ goto download_fail; -+ } -+ -+ /* download firmware process */ -+ if (ts->hw_crc) -+ ret = nvt_download_firmware_hw_crc(); -+ else -+ ret = nvt_download_firmware(); -+ if (ret) { -+ NVT_ERR("Download Firmware failed. (%d)\n", ret); -+ goto download_fail; -+ } -+ -+ NVT_LOG("Update firmware success! <%ld us>\n", -+ (long) ktime_us_delta(end, start)); -+ -+ /* Get FW Info */ -+ ret = nvt_get_fw_info(); -+ if (ret) { -+ NVT_ERR("nvt_get_fw_info failed. (%d)\n", ret); -+ } -+ -+download_fail: -+ if (!IS_ERR_OR_NULL(bin_map)) { -+ kfree(bin_map); -+ bin_map = NULL; -+ } -+ -+ update_firmware_release(); -+request_firmware_fail: -+ -+ return ret; -+} -+ -+/******************************************************* -+Description: -+ Novatek touchscreen update firmware when booting -+ function. -+ -+return: -+ n.a. -+*******************************************************/ -+void Boot_Update_Firmware(struct work_struct *work) -+{ -+ mutex_lock(&ts->lock); -+ nvt_update_firmware(ts->fw_name); -+ nvt_get_fw_info(); -+ mutex_unlock(&ts->lock); -+} -+#endif /* BOOT_UPDATE_FIRMWARE */ -diff --git a/drivers/input/touchscreen/nt36523/nt36xxx_mem_map.h b/drivers/input/touchscreen/nt36523/nt36xxx_mem_map.h -new file mode 100644 -index 000000000000..111111111111 ---- /dev/null -+++ b/drivers/input/touchscreen/nt36523/nt36xxx_mem_map.h -@@ -0,0 +1,390 @@ -+/* -+ * Copyright (C) 2010 - 2018 Novatek, Inc. -+ * Copyright (C) 2021 XiaoMi, Inc. -+ * -+ * $Revision: 57674 $ -+ * $Date: 2020-03-02 11:16:20 +0800 (週一, 02 三月 2020) $ -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, but WITHOUT -+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -+ * more details. -+ * -+ */ -+ -+#define CHIP_VER_TRIM_ADDR 0x3F004 -+#define CHIP_VER_TRIM_OLD_ADDR 0x1F64E -+ -+struct nvt_ts_mem_map { -+ uint32_t EVENT_BUF_ADDR; -+ uint32_t RAW_PIPE0_ADDR; -+ uint32_t RAW_PIPE1_ADDR; -+ uint32_t BASELINE_ADDR; -+ uint32_t BASELINE_BTN_ADDR; -+ uint32_t DIFF_PIPE0_ADDR; -+ uint32_t DIFF_PIPE1_ADDR; -+ uint32_t RAW_BTN_PIPE0_ADDR; -+ uint32_t RAW_BTN_PIPE1_ADDR; -+ uint32_t DIFF_BTN_PIPE0_ADDR; -+ uint32_t DIFF_BTN_PIPE1_ADDR; -+ uint32_t PEN_2D_BL_TIP_X_ADDR; -+ uint32_t PEN_2D_BL_TIP_Y_ADDR; -+ uint32_t PEN_2D_BL_RING_X_ADDR; -+ uint32_t PEN_2D_BL_RING_Y_ADDR; -+ uint32_t PEN_2D_DIFF_TIP_X_ADDR; -+ uint32_t PEN_2D_DIFF_TIP_Y_ADDR; -+ uint32_t PEN_2D_DIFF_RING_X_ADDR; -+ uint32_t PEN_2D_DIFF_RING_Y_ADDR; -+ uint32_t PEN_2D_RAW_TIP_X_ADDR; -+ uint32_t PEN_2D_RAW_TIP_Y_ADDR; -+ uint32_t PEN_2D_RAW_RING_X_ADDR; -+ uint32_t PEN_2D_RAW_RING_Y_ADDR; -+ uint32_t PEN_1D_DIFF_TIP_X_ADDR; -+ uint32_t PEN_1D_DIFF_TIP_Y_ADDR; -+ uint32_t PEN_1D_DIFF_RING_X_ADDR; -+ uint32_t PEN_1D_DIFF_RING_Y_ADDR; -+ uint32_t READ_FLASH_CHECKSUM_ADDR; -+ uint32_t RW_FLASH_DATA_ADDR; -+ /* Phase 2 Host Download */ -+ uint32_t BOOT_RDY_ADDR; -+ uint32_t POR_CD_ADDR; -+ uint32_t TX_AUTO_COPY_EN; -+ uint32_t SPI_DMA_TX_INFO; -+ /* BLD CRC */ -+ uint32_t BLD_LENGTH_ADDR; -+ uint32_t ILM_LENGTH_ADDR; -+ uint32_t DLM_LENGTH_ADDR; -+ uint32_t BLD_DES_ADDR; -+ uint32_t ILM_DES_ADDR; -+ uint32_t DLM_DES_ADDR; -+ uint32_t G_ILM_CHECKSUM_ADDR; -+ uint32_t G_DLM_CHECKSUM_ADDR; -+ uint32_t R_ILM_CHECKSUM_ADDR; -+ uint32_t R_DLM_CHECKSUM_ADDR; -+ uint32_t BLD_CRC_EN_ADDR; -+ uint32_t DMA_CRC_EN_ADDR; -+ uint32_t BLD_ILM_DLM_CRC_ADDR; -+ uint32_t DMA_CRC_FLAG_ADDR; -+ uint32_t FW_HISTORY_ADDR; -+}; -+ -+struct nvt_ts_hw_info { -+ uint8_t carrier_system; -+ uint8_t hw_crc; -+}; -+ -+static const struct nvt_ts_mem_map NT36523_memory_map = { -+ .EVENT_BUF_ADDR = 0x2FE00, -+ .RAW_PIPE0_ADDR = 0x30FA0, -+ .RAW_PIPE1_ADDR = 0x30FA0, -+ .BASELINE_ADDR = 0x36510, -+ .BASELINE_BTN_ADDR = 0, -+ .DIFF_PIPE0_ADDR = 0x373E8, -+ .DIFF_PIPE1_ADDR = 0x38068, -+ .RAW_BTN_PIPE0_ADDR = 0, -+ .RAW_BTN_PIPE1_ADDR = 0, -+ .DIFF_BTN_PIPE0_ADDR = 0, -+ .DIFF_BTN_PIPE1_ADDR = 0, -+ .PEN_2D_BL_TIP_X_ADDR = 0x2988A, -+ .PEN_2D_BL_TIP_Y_ADDR = 0x29A1A, -+ .PEN_2D_BL_RING_X_ADDR = 0x29BAA, -+ .PEN_2D_BL_RING_Y_ADDR = 0x29D3A, -+ .PEN_2D_DIFF_TIP_X_ADDR = 0x29ECA, -+ .PEN_2D_DIFF_TIP_Y_ADDR = 0x2A05A, -+ .PEN_2D_DIFF_RING_X_ADDR = 0x2A1EA, -+ .PEN_2D_DIFF_RING_Y_ADDR = 0x2A37A, -+ .PEN_2D_RAW_TIP_X_ADDR = 0x2A50A, -+ .PEN_2D_RAW_TIP_Y_ADDR = 0x2A69A, -+ .PEN_2D_RAW_RING_X_ADDR = 0x2A82A, -+ .PEN_2D_RAW_RING_Y_ADDR = 0x2A9BA, -+ .PEN_1D_DIFF_TIP_X_ADDR = 0x2AB4A, -+ .PEN_1D_DIFF_TIP_Y_ADDR = 0x2ABAE, -+ .PEN_1D_DIFF_RING_X_ADDR = 0x2AC12, -+ .PEN_1D_DIFF_RING_Y_ADDR = 0x2AC76, -+ .READ_FLASH_CHECKSUM_ADDR = 0x24000, -+ .RW_FLASH_DATA_ADDR = 0x24002, -+ /* Phase 2 Host Download */ -+ .BOOT_RDY_ADDR = 0x3F10D, -+ .TX_AUTO_COPY_EN = 0x3F7E8, -+ .SPI_DMA_TX_INFO = 0x3F7F1, -+ /* BLD CRC */ -+ .BLD_LENGTH_ADDR = 0x3F138, //0x3F138 ~ 0x3F13A (3 bytes) -+ .ILM_LENGTH_ADDR = 0x3F118, //0x3F118 ~ 0x3F11A (3 bytes) -+ .DLM_LENGTH_ADDR = 0x3F130, //0x3F130 ~ 0x3F132 (3 bytes) -+ .BLD_DES_ADDR = 0x3F114, //0x3F114 ~ 0x3F116 (3 bytes) -+ .ILM_DES_ADDR = 0x3F128, //0x3F128 ~ 0x3F12A (3 bytes) -+ .DLM_DES_ADDR = 0x3F12C, //0x3F12C ~ 0x3F12E (3 bytes) -+ .G_ILM_CHECKSUM_ADDR = 0x3F100, //0x3F100 ~ 0x3F103 (4 bytes) -+ .G_DLM_CHECKSUM_ADDR = 0x3F104, //0x3F104 ~ 0x3F107 (4 bytes) -+ .R_ILM_CHECKSUM_ADDR = 0x3F120, //0x3F120 ~ 0x3F123 (4 bytes) -+ .R_DLM_CHECKSUM_ADDR = 0x3F124, //0x3F124 ~ 0x3F127 (4 bytes) -+ .BLD_CRC_EN_ADDR = 0x3F30E, -+ .DMA_CRC_EN_ADDR = 0x3F136, -+ .BLD_ILM_DLM_CRC_ADDR = 0x3F133, -+ .DMA_CRC_FLAG_ADDR = 0x3F134, -+ .FW_HISTORY_ADDR = 0x38D54, -+}; -+ -+static const struct nvt_ts_mem_map NT36526_memory_map = { -+ .EVENT_BUF_ADDR = 0x22D00, -+ .RAW_PIPE0_ADDR = 0x24000, -+ .RAW_PIPE1_ADDR = 0x24000, -+ .BASELINE_ADDR = 0x21758, -+ .BASELINE_BTN_ADDR = 0, -+ .DIFF_PIPE0_ADDR = 0x20AB0, -+ .DIFF_PIPE1_ADDR = 0x24AB0, -+ .RAW_BTN_PIPE0_ADDR = 0, -+ .RAW_BTN_PIPE1_ADDR = 0, -+ .DIFF_BTN_PIPE0_ADDR = 0, -+ .DIFF_BTN_PIPE1_ADDR = 0, -+ .READ_FLASH_CHECKSUM_ADDR = 0x24000, -+ .RW_FLASH_DATA_ADDR = 0x24002, -+ /* Phase 2 Host Download */ -+ .BOOT_RDY_ADDR = 0x3F10D, -+ /* BLD CRC */ -+ .BLD_LENGTH_ADDR = 0x3F138, //0x3F138 ~ 0x3F13A (3 bytes) -+ .ILM_LENGTH_ADDR = 0x3F118, //0x3F118 ~ 0x3F11A (3 bytes) -+ .DLM_LENGTH_ADDR = 0x3F130, //0x3F130 ~ 0x3F132 (3 bytes) -+ .BLD_DES_ADDR = 0x3F114, //0x3F114 ~ 0x3F116 (3 bytes) -+ .ILM_DES_ADDR = 0x3F128, //0x3F128 ~ 0x3F12A (3 bytes) -+ .DLM_DES_ADDR = 0x3F12C, //0x3F12C ~ 0x3F12E (3 bytes) -+ .G_ILM_CHECKSUM_ADDR = 0x3F100, //0x3F100 ~ 0x3F103 (4 bytes) -+ .G_DLM_CHECKSUM_ADDR = 0x3F104, //0x3F104 ~ 0x3F107 (4 bytes) -+ .R_ILM_CHECKSUM_ADDR = 0x3F120, //0x3F120 ~ 0x3F123 (4 bytes) -+ .R_DLM_CHECKSUM_ADDR = 0x3F124, //0x3F124 ~ 0x3F127 (4 bytes) -+ .BLD_CRC_EN_ADDR = 0x3F30E, -+ .DMA_CRC_EN_ADDR = 0x3F136, -+ .BLD_ILM_DLM_CRC_ADDR = 0x3F133, -+ .DMA_CRC_FLAG_ADDR = 0x3F134, -+}; -+ -+ -+static const struct nvt_ts_mem_map NT36675_memory_map = { -+ .EVENT_BUF_ADDR = 0x22D00, -+ .RAW_PIPE0_ADDR = 0x24000, -+ .RAW_PIPE1_ADDR = 0x24000, -+ .BASELINE_ADDR = 0x21B90, -+ .BASELINE_BTN_ADDR = 0, -+ .DIFF_PIPE0_ADDR = 0x20C60, -+ .DIFF_PIPE1_ADDR = 0x24C60, -+ .RAW_BTN_PIPE0_ADDR = 0, -+ .RAW_BTN_PIPE1_ADDR = 0, -+ .DIFF_BTN_PIPE0_ADDR = 0, -+ .DIFF_BTN_PIPE1_ADDR = 0, -+ .READ_FLASH_CHECKSUM_ADDR = 0x24000, -+ .RW_FLASH_DATA_ADDR = 0x24002, -+ /* Phase 2 Host Download */ -+ .BOOT_RDY_ADDR = 0x3F10D, -+ /* BLD CRC */ -+ .BLD_LENGTH_ADDR = 0x3F138, //0x3F138 ~ 0x3F13A (3 bytes) -+ .ILM_LENGTH_ADDR = 0x3F118, //0x3F118 ~ 0x3F11A (3 bytes) -+ .DLM_LENGTH_ADDR = 0x3F130, //0x3F130 ~ 0x3F132 (3 bytes) -+ .BLD_DES_ADDR = 0x3F114, //0x3F114 ~ 0x3F116 (3 bytes) -+ .ILM_DES_ADDR = 0x3F128, //0x3F128 ~ 0x3F12A (3 bytes) -+ .DLM_DES_ADDR = 0x3F12C, //0x3F12C ~ 0x3F12E (3 bytes) -+ .G_ILM_CHECKSUM_ADDR = 0x3F100, //0x3F100 ~ 0x3F103 (4 bytes) -+ .G_DLM_CHECKSUM_ADDR = 0x3F104, //0x3F104 ~ 0x3F107 (4 bytes) -+ .R_ILM_CHECKSUM_ADDR = 0x3F120, //0x3F120 ~ 0x3F123 (4 bytes) -+ .R_DLM_CHECKSUM_ADDR = 0x3F124, //0x3F124 ~ 0x3F127 (4 bytes) -+ .BLD_CRC_EN_ADDR = 0x3F30E, -+ .DMA_CRC_EN_ADDR = 0x3F136, -+ .BLD_ILM_DLM_CRC_ADDR = 0x3F133, -+ .DMA_CRC_FLAG_ADDR = 0x3F134, -+}; -+ -+ -+static const struct nvt_ts_mem_map NT36672A_memory_map = { -+ .EVENT_BUF_ADDR = 0x21C00, -+ .RAW_PIPE0_ADDR = 0x20000, -+ .RAW_PIPE1_ADDR = 0x23000, -+ .BASELINE_ADDR = 0x20BFC, -+ .BASELINE_BTN_ADDR = 0x23BFC, -+ .DIFF_PIPE0_ADDR = 0x206DC, -+ .DIFF_PIPE1_ADDR = 0x236DC, -+ .RAW_BTN_PIPE0_ADDR = 0x20510, -+ .RAW_BTN_PIPE1_ADDR = 0x23510, -+ .DIFF_BTN_PIPE0_ADDR = 0x20BF0, -+ .DIFF_BTN_PIPE1_ADDR = 0x23BF0, -+ .READ_FLASH_CHECKSUM_ADDR = 0x24000, -+ .RW_FLASH_DATA_ADDR = 0x24002, -+ /* Phase 2 Host Download */ -+ .BOOT_RDY_ADDR = 0x3F10D, -+ /* BLD CRC */ -+ .BLD_LENGTH_ADDR = 0x3F10E, //0x3F10E ~ 0x3F10F (2 bytes) -+ .ILM_LENGTH_ADDR = 0x3F118, //0x3F118 ~ 0x3F119 (2 bytes) -+ .DLM_LENGTH_ADDR = 0x3F130, //0x3F130 ~ 0x3F131 (2 bytes) -+ .BLD_DES_ADDR = 0x3F114, //0x3F114 ~ 0x3F116 (3 bytes) -+ .ILM_DES_ADDR = 0x3F128, //0x3F128 ~ 0x3F12A (3 bytes) -+ .DLM_DES_ADDR = 0x3F12C, //0x3F12C ~ 0x3F12E (3 bytes) -+ .G_ILM_CHECKSUM_ADDR = 0x3F100, //0x3F100 ~ 0x3F103 (4 bytes) -+ .G_DLM_CHECKSUM_ADDR = 0x3F104, //0x3F104 ~ 0x3F107 (4 bytes) -+ .R_ILM_CHECKSUM_ADDR = 0x3F120, //0x3F120 ~ 0x3F123 (4 bytes) -+ .R_DLM_CHECKSUM_ADDR = 0x3F124, //0x3F124 ~ 0x3F127 (4 bytes) -+ .BLD_CRC_EN_ADDR = 0x3F30E, -+ .DMA_CRC_EN_ADDR = 0x3F132, -+ .BLD_ILM_DLM_CRC_ADDR = 0x3F133, -+ .DMA_CRC_FLAG_ADDR = 0x3F134, -+}; -+ -+static const struct nvt_ts_mem_map NT36772_memory_map = { -+ .EVENT_BUF_ADDR = 0x11E00, -+ .RAW_PIPE0_ADDR = 0x10000, -+ .RAW_PIPE1_ADDR = 0x12000, -+ .BASELINE_ADDR = 0x10E70, -+ .BASELINE_BTN_ADDR = 0x12E70, -+ .DIFF_PIPE0_ADDR = 0x10830, -+ .DIFF_PIPE1_ADDR = 0x12830, -+ .RAW_BTN_PIPE0_ADDR = 0x10E60, -+ .RAW_BTN_PIPE1_ADDR = 0x12E60, -+ .DIFF_BTN_PIPE0_ADDR = 0x10E68, -+ .DIFF_BTN_PIPE1_ADDR = 0x12E68, -+ .READ_FLASH_CHECKSUM_ADDR = 0x14000, -+ .RW_FLASH_DATA_ADDR = 0x14002, -+ /* Phase 2 Host Download */ -+ .BOOT_RDY_ADDR = 0x1F141, -+ .POR_CD_ADDR = 0x1F61C, -+ /* BLD CRC */ -+ .R_ILM_CHECKSUM_ADDR = 0x1BF00, -+}; -+ -+static const struct nvt_ts_mem_map NT36525_memory_map = { -+ .EVENT_BUF_ADDR = 0x11A00, -+ .RAW_PIPE0_ADDR = 0x10000, -+ .RAW_PIPE1_ADDR = 0x12000, -+ .BASELINE_ADDR = 0x10B08, -+ .BASELINE_BTN_ADDR = 0x12B08, -+ .DIFF_PIPE0_ADDR = 0x1064C, -+ .DIFF_PIPE1_ADDR = 0x1264C, -+ .RAW_BTN_PIPE0_ADDR = 0x10634, -+ .RAW_BTN_PIPE1_ADDR = 0x12634, -+ .DIFF_BTN_PIPE0_ADDR = 0x10AFC, -+ .DIFF_BTN_PIPE1_ADDR = 0x12AFC, -+ .READ_FLASH_CHECKSUM_ADDR = 0x14000, -+ .RW_FLASH_DATA_ADDR = 0x14002, -+ /* Phase 2 Host Download */ -+ .BOOT_RDY_ADDR = 0x1F141, -+ .POR_CD_ADDR = 0x1F61C, -+ /* BLD CRC */ -+ .R_ILM_CHECKSUM_ADDR = 0x1BF00, -+}; -+ -+static const struct nvt_ts_mem_map NT36676F_memory_map = { -+ .EVENT_BUF_ADDR = 0x11A00, -+ .RAW_PIPE0_ADDR = 0x10000, -+ .RAW_PIPE1_ADDR = 0x12000, -+ .BASELINE_ADDR = 0x10B08, -+ .BASELINE_BTN_ADDR = 0x12B08, -+ .DIFF_PIPE0_ADDR = 0x1064C, -+ .DIFF_PIPE1_ADDR = 0x1264C, -+ .RAW_BTN_PIPE0_ADDR = 0x10634, -+ .RAW_BTN_PIPE1_ADDR = 0x12634, -+ .DIFF_BTN_PIPE0_ADDR = 0x10AFC, -+ .DIFF_BTN_PIPE1_ADDR = 0x12AFC, -+ .READ_FLASH_CHECKSUM_ADDR = 0x14000, -+ .RW_FLASH_DATA_ADDR = 0x14002, -+}; -+ -+static struct nvt_ts_hw_info NT36523_hw_info = { -+ .carrier_system = 2, -+ .hw_crc = 2, -+}; -+ -+static struct nvt_ts_hw_info NT36526_hw_info = { -+ .carrier_system = 2, -+ .hw_crc = 2, -+}; -+ -+static struct nvt_ts_hw_info NT36675_hw_info = { -+ .carrier_system = 2, -+ .hw_crc = 2, -+}; -+ -+static struct nvt_ts_hw_info NT36672A_hw_info = { -+ .carrier_system = 0, -+ .hw_crc = 1, -+}; -+ -+static struct nvt_ts_hw_info NT36772_hw_info = { -+ .carrier_system = 0, -+ .hw_crc = 0, -+}; -+ -+static struct nvt_ts_hw_info NT36525_hw_info = { -+ .carrier_system = 0, -+ .hw_crc = 0, -+}; -+ -+static struct nvt_ts_hw_info NT36676F_hw_info = { -+ .carrier_system = 0, -+ .hw_crc = 0, -+}; -+ -+#define NVT_ID_BYTE_MAX 6 -+struct nvt_ts_trim_id_table { -+ uint8_t id[NVT_ID_BYTE_MAX]; -+ uint8_t mask[NVT_ID_BYTE_MAX]; -+ const struct nvt_ts_mem_map *mmap; -+ const struct nvt_ts_hw_info *hwinfo; -+}; -+ -+static const struct nvt_ts_trim_id_table trim_id_table[] = { -+ {.id = {0x20, 0xFF, 0xFF, 0x23, 0x65, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, -+ .mmap = &NT36523_memory_map, .hwinfo = &NT36523_hw_info}, -+ {.id = {0x0C, 0xFF, 0xFF, 0x23, 0x65, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, -+ .mmap = &NT36523_memory_map, .hwinfo = &NT36523_hw_info}, -+ {.id = {0x0B, 0xFF, 0xFF, 0x23, 0x65, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, -+ .mmap = &NT36523_memory_map, .hwinfo = &NT36523_hw_info}, -+ {.id = {0x0A, 0xFF, 0xFF, 0x23, 0x65, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, -+ .mmap = &NT36523_memory_map, .hwinfo = &NT36523_hw_info}, -+ {.id = {0xFF, 0xFF, 0xFF, 0x23, 0x65, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, -+ .mmap = &NT36523_memory_map, .hwinfo = &NT36523_hw_info}, -+ {.id = {0x0C, 0xFF, 0xFF, 0x72, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, -+ .mmap = &NT36675_memory_map, .hwinfo = &NT36675_hw_info}, -+ {.id = {0xFF, 0xFF, 0xFF, 0x26, 0x65, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, -+ .mmap = &NT36526_memory_map, .hwinfo = &NT36526_hw_info}, -+ {.id = {0xFF, 0xFF, 0xFF, 0x75, 0x66, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, -+ .mmap = &NT36675_memory_map, .hwinfo = &NT36675_hw_info}, -+ {.id = {0x0B, 0xFF, 0xFF, 0x72, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, -+ .mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info}, -+ {.id = {0x0B, 0xFF, 0xFF, 0x82, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, -+ .mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info}, -+ {.id = {0x0B, 0xFF, 0xFF, 0x25, 0x65, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, -+ .mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info}, -+ {.id = {0x0A, 0xFF, 0xFF, 0x72, 0x65, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, -+ .mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info}, -+ {.id = {0x0A, 0xFF, 0xFF, 0x72, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, -+ .mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info}, -+ {.id = {0x0A, 0xFF, 0xFF, 0x82, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, -+ .mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info}, -+ {.id = {0x0A, 0xFF, 0xFF, 0x70, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, -+ .mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info}, -+ {.id = {0x0B, 0xFF, 0xFF, 0x70, 0x66, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, -+ .mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info}, -+ {.id = {0x0A, 0xFF, 0xFF, 0x72, 0x67, 0x03}, .mask = {1, 0, 0, 1, 1, 1}, -+ .mmap = &NT36672A_memory_map, .hwinfo = &NT36672A_hw_info}, -+ {.id = {0x55, 0x00, 0xFF, 0x00, 0x00, 0x00}, .mask = {1, 1, 0, 1, 1, 1}, -+ .mmap = &NT36772_memory_map, .hwinfo = &NT36772_hw_info}, -+ {.id = {0x55, 0x72, 0xFF, 0x00, 0x00, 0x00}, .mask = {1, 1, 0, 1, 1, 1}, -+ .mmap = &NT36772_memory_map, .hwinfo = &NT36772_hw_info}, -+ {.id = {0xAA, 0x00, 0xFF, 0x00, 0x00, 0x00}, .mask = {1, 1, 0, 1, 1, 1}, -+ .mmap = &NT36772_memory_map, .hwinfo = &NT36772_hw_info}, -+ {.id = {0xAA, 0x72, 0xFF, 0x00, 0x00, 0x00}, .mask = {1, 1, 0, 1, 1, 1}, -+ .mmap = &NT36772_memory_map, .hwinfo = &NT36772_hw_info}, -+ {.id = {0xFF, 0xFF, 0xFF, 0x72, 0x67, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, -+ .mmap = &NT36772_memory_map, .hwinfo = &NT36772_hw_info}, -+ {.id = {0xFF, 0xFF, 0xFF, 0x70, 0x66, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, -+ .mmap = &NT36772_memory_map, .hwinfo = &NT36772_hw_info}, -+ {.id = {0xFF, 0xFF, 0xFF, 0x70, 0x67, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, -+ .mmap = &NT36772_memory_map, .hwinfo = &NT36772_hw_info}, -+ {.id = {0xFF, 0xFF, 0xFF, 0x72, 0x66, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, -+ .mmap = &NT36772_memory_map, .hwinfo = &NT36772_hw_info}, -+ {.id = {0xFF, 0xFF, 0xFF, 0x25, 0x65, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, -+ .mmap = &NT36525_memory_map, .hwinfo = &NT36525_hw_info}, -+ {.id = {0xFF, 0xFF, 0xFF, 0x76, 0x66, 0x03}, .mask = {0, 0, 0, 1, 1, 1}, -+ .mmap = &NT36676F_memory_map, .hwinfo = &NT36676F_hw_info} -+}; --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0010-arm64-dts-qcom-sm8250-xiaomi-elish-enable-wifi-and-b.patch b/patch/kernel/archive/sm8250-6.9/0010-arm64-dts-qcom-sm8250-xiaomi-elish-enable-wifi-and-b.patch deleted file mode 100644 index 750a5e7633c2..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0010-arm64-dts-qcom-sm8250-xiaomi-elish-enable-wifi-and-b.patch +++ /dev/null @@ -1,106 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jianhua Lu -Date: Mon, 6 Mar 2023 23:13:06 +0800 -Subject: arm64: dts: qcom: sm8250-xiaomi-elish: enable wifi and bluetooth - -Signed-off-by: Jianhua Lu ---- - arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi | 61 ++++++++++ - 1 file changed, 61 insertions(+) - -diff --git a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -index 111111111111..222222222222 100644 ---- a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -+++ b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -@@ -30,6 +30,10 @@ / { - qcom,msm-id = ; /* SM8250 v2.1 */ - qcom,board-id = <0x10008 0>; - -+ aliases { -+ hsuart0 = &uart6; -+ }; -+ - chosen { - #address-cells = <2>; - #size-cells = <2>; -@@ -114,6 +118,25 @@ vreg_s6c_0p88: smpc6-regulator { - vin-supply = <&vph_pwr>; - }; - -+ qca639x: qca639x { -+ compatible = "qcom,qca6390"; -+ #power-domain-cells = <0>; -+ -+ vddaon-supply = <&vreg_s6a_0p95>; -+ vddpmu-supply = <&vreg_s6a_0p95>; -+ vddrfa1-supply = <&vreg_s6a_0p95>; -+ vddrfa2-supply = <&vreg_s8c_1p35>; -+ vddrfa3-supply = <&vreg_s5a_1p9>; -+ vddpcie1-supply = <&vreg_s8c_1p35>; -+ vddpcie2-supply = <&vreg_s5a_1p9>; -+ vddio-supply = <&vreg_s4a_1p8>; -+ -+ pinctrl-names = "default"; -+ pinctrl-0 = <&wlan_en_state>; -+ -+ wlan-en-gpios = <&tlmm 20 GPIO_ACTIVE_HIGH>; -+ }; -+ - reserved-memory { - xbl_aop_mem: xbl-aop@80600000 { - reg = <0x0 0x80600000 0x0 0x260000>; -@@ -617,6 +640,9 @@ &pcie0_phy { - vdda-phy-supply = <&vreg_l5a_0p88>; - vdda-pll-supply = <&vreg_l9a_1p2>; - status = "okay"; -+ -+ /* Power on QCA639x chip, otherwise PCIe bus timeouts */ -+ power-domains = <&qca639x>; - }; - - &pm8150_gpios { -@@ -692,6 +718,41 @@ &slpi { - - &tlmm { - gpio-reserved-ranges = <40 4>; -+ -+ bt_en_state: bt-default-state { -+ bt-en-pins { -+ pins = "gpio21"; -+ function = "gpio"; -+ -+ drive-strength = <16>; -+ output-low; -+ bias-pull-up; -+ }; -+ }; -+ -+ wlan_en_state: wlan-default-state { -+ wlan-en-pins { -+ pins = "gpio20"; -+ function = "gpio"; -+ -+ drive-strength = <16>; -+ output-low; -+ bias-pull-up; -+ }; -+ }; -+}; -+ -+&uart6 { -+ status = "okay"; -+ -+ bluetooth { -+ compatible = "qcom,qca6390-bt"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&bt_en_state>; -+ -+ power-domains = <&qca639x>; -+ enable-gpios = <&tlmm 21 GPIO_ACTIVE_HIGH>; -+ }; - }; - - &usb_1 { --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0011-arm64-dts-qcom-sm8250-xiaomi-elish-enable-touchscree.patch b/patch/kernel/archive/sm8250-6.9/0011-arm64-dts-qcom-sm8250-xiaomi-elish-enable-touchscree.patch deleted file mode 100644 index cb23d4ea408b..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0011-arm64-dts-qcom-sm8250-xiaomi-elish-enable-touchscree.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jianhua Lu -Date: Mon, 6 Mar 2023 23:23:13 +0800 -Subject: arm64: dts: qcom: sm8250-xiaomi-elish: enable touchscreen - -Signed-off-by: Jianhua Lu ---- - arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-boe.dts | 5 ++ - arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi | 32 ++++++++++ - arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-csot.dts | 5 ++ - 3 files changed, 42 insertions(+) - -diff --git a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-boe.dts b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-boe.dts -index 111111111111..222222222222 100644 ---- a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-boe.dts -+++ b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-boe.dts -@@ -16,3 +16,8 @@ &display_panel { - compatible = "xiaomi,elish-boe-nt36523", "novatek,nt36523"; - status = "okay"; - }; -+ -+&touchscreen { -+ firmware-name = "novatek/nt36523-boe.bin"; -+ status = "okay"; -+}; -diff --git a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -index 111111111111..222222222222 100644 ---- a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -+++ b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -@@ -699,6 +699,16 @@ &pon_resin { - status = "okay"; - }; - -+&qup_spi4_cs_gpio { -+ drive-strength = <6>; -+ bias-disable; -+}; -+ -+&qup_spi4_data_clk { -+ drive-strength = <6>; -+ bias-disable; -+}; -+ - &qupv3_id_0 { - status = "okay"; - }; -@@ -716,6 +726,28 @@ &slpi { - status = "okay"; - }; - -+&spi4 { -+ status = "okay"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&qup_spi4_data_clk &qup_spi4_cs_gpio>; -+ cs-gpios = <&tlmm 11 GPIO_ACTIVE_LOW>; -+ touchscreen: touchscreen@0 { -+ compatible = "novatek,NVT-ts-spi"; -+ reg = <0>; //Same as CS ID -+ status = "disabled"; -+ -+ spi-max-frequency = <19200000>; //4800000,9600000,15000000,19200000 -+ novatek,irq-gpio = <&tlmm 39 0x2001>; -+ -+ novatek,pen-support; -+ novatek,wgp-stylus; -+ -+ /* 523 */ -+ novatek,swrst-n8-addr = <0x03F0FE>; -+ novatek,spi-rd-fast-addr = <0x03F310>; -+ }; -+}; -+ - &tlmm { - gpio-reserved-ranges = <40 4>; - -diff --git a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-csot.dts b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-csot.dts -index 111111111111..222222222222 100644 ---- a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-csot.dts -+++ b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-csot.dts -@@ -16,3 +16,8 @@ &display_panel { - compatible = "xiaomi,elish-csot-nt36523", "novatek,nt36523"; - status = "okay"; - }; -+ -+&touchscreen { -+ firmware-name = "novatek/nt36523-csot.bin"; -+ status = "okay"; -+}; --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0012-arm64-dts-qcom-sm8250-xiaomi-elish-Disable-slpi.patch b/patch/kernel/archive/sm8250-6.9/0012-arm64-dts-qcom-sm8250-xiaomi-elish-Disable-slpi.patch deleted file mode 100644 index 9db077956ba9..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0012-arm64-dts-qcom-sm8250-xiaomi-elish-Disable-slpi.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jianhua Lu -Date: Wed, 29 Mar 2023 01:57:43 +0800 -Subject: arm64: dts: qcom: sm8250-xiaomi-elish: Disable slpi - ---- - arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -index 111111111111..222222222222 100644 ---- a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -+++ b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -@@ -723,7 +723,7 @@ &qupv3_id_2 { - - &slpi { - firmware-name = "qcom/sm8250/xiaomi/elish/slpi.mbn"; -- status = "okay"; -+ status = "disabled"; - }; - - &spi4 { --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0013-ASoC-qcom-sm8250-Add-tdm-support.patch b/patch/kernel/archive/sm8250-6.9/0013-ASoC-qcom-sm8250-Add-tdm-support.patch deleted file mode 100644 index 42830672a054..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0013-ASoC-qcom-sm8250-Add-tdm-support.patch +++ /dev/null @@ -1,126 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jianhua Lu -Date: Mon, 11 Dec 2023 09:23:28 +0800 -Subject: ASoC: qcom: sm8250: Add tdm support - ---- - sound/soc/qcom/sm8250.c | 75 ++++++++++ - 1 file changed, 75 insertions(+) - -diff --git a/sound/soc/qcom/sm8250.c b/sound/soc/qcom/sm8250.c -index 111111111111..222222222222 100644 ---- a/sound/soc/qcom/sm8250.c -+++ b/sound/soc/qcom/sm8250.c -@@ -16,6 +16,9 @@ - - #define DRIVER_NAME "sm8250" - #define MI2S_BCLK_RATE 1536000 -+#define TDM_BCLK_RATE 12288000 -+ -+static unsigned int tdm_slot_offset[8] = {0, 4, 8, 12, 16, 20, 24, 28}; - - struct sm8250_snd_data { - bool stream_prepared[AFE_PORT_MAX]; -@@ -32,6 +35,57 @@ static int sm8250_snd_init(struct snd_soc_pcm_runtime *rtd) - return qcom_snd_wcd_jack_setup(rtd, &data->jack, &data->jack_setup); - } - -+static int sm8250_tdm_snd_hw_params(struct snd_pcm_substream *substream, -+ struct snd_pcm_hw_params *params) -+{ -+ struct snd_soc_pcm_runtime *rtd = snd_soc_substream_to_rtd(substream); -+ struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0); -+ -+ int ret = 0; -+ int channels, slots, slot_width; -+ -+ channels = params_channels(params); -+ slots = 8; -+ slot_width = 32; -+ -+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { -+ ret = snd_soc_dai_set_tdm_slot(cpu_dai, 0, 0x03, -+ slots, slot_width); -+ if (ret < 0) { -+ dev_err(rtd->dev, "%s: failed to set tdm slot, err:%d\n", -+ __func__, ret); -+ goto end; -+ } -+ -+ ret = snd_soc_dai_set_channel_map(cpu_dai, 0, NULL, -+ channels, tdm_slot_offset); -+ if (ret < 0) { -+ dev_err(rtd->dev, "%s: failed to set channel map, err:%d\n", -+ __func__, ret); -+ goto end; -+ } -+ } else { -+ ret = snd_soc_dai_set_tdm_slot(cpu_dai, 0xf, 0, -+ slots, slot_width); -+ if (ret < 0) { -+ dev_err(rtd->dev, "%s: failed to set tdm slot, err:%d\n", -+ __func__, ret); -+ goto end; -+ } -+ -+ ret = snd_soc_dai_set_channel_map(cpu_dai, channels, -+ tdm_slot_offset, 0, NULL); -+ if (ret < 0) { -+ dev_err(rtd->dev, "%s: failed to set channel map, err:%d\n", -+ __func__, ret); -+ goto end; -+ } -+ } -+ -+end: -+ return ret; -+} -+ - static int sm8250_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, - struct snd_pcm_hw_params *params) - { -@@ -53,6 +107,7 @@ static int sm8250_snd_startup(struct snd_pcm_substream *substream) - struct snd_soc_pcm_runtime *rtd = substream->private_data; - struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0); - struct snd_soc_dai *codec_dai = snd_soc_rtd_to_codec(rtd, 0); -+ int ret,j; - - switch (cpu_dai->id) { - case TERTIARY_MI2S_RX: -@@ -63,6 +118,21 @@ static int sm8250_snd_startup(struct snd_pcm_substream *substream) - snd_soc_dai_set_fmt(cpu_dai, fmt); - snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt); - break; -+ case TERTIARY_TDM_RX_0: -+ codec_dai_fmt |= SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_DSP_A; -+ snd_soc_dai_set_sysclk(cpu_dai, -+ Q6AFE_LPASS_CLK_ID_TER_TDM_IBIT, -+ TDM_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK); -+ -+ for_each_rtd_codec_dais(rtd, j, codec_dai) { -+ ret = snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt); -+ snd_soc_dai_set_sysclk(codec_dai, 0, TDM_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK); -+ if (ret < 0) { -+ dev_err(rtd->dev, "TDM fmt err:%d\n", ret); -+ return ret; -+ } -+ } -+ break; - default: - break; - } -@@ -88,6 +158,11 @@ static int sm8250_snd_hw_params(struct snd_pcm_substream *substream, - struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0); - struct sm8250_snd_data *pdata = snd_soc_card_get_drvdata(rtd->card); - -+ switch (cpu_dai->id) { -+ case PRIMARY_TDM_RX_0 ... QUINARY_TDM_TX_7: -+ return sm8250_tdm_snd_hw_params(substream, params); -+ } -+ - return qcom_snd_sdw_hw_params(substream, params, &pdata->sruntime[cpu_dai->id]); - } - --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0014-arm64-dts-qcom-sm8250-xiaomi-elish-Add-sound-support.patch b/patch/kernel/archive/sm8250-6.9/0014-arm64-dts-qcom-sm8250-xiaomi-elish-Add-sound-support.patch deleted file mode 100644 index aa95cbf9ab46..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0014-arm64-dts-qcom-sm8250-xiaomi-elish-Add-sound-support.patch +++ /dev/null @@ -1,281 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jianhua Lu -Date: Sat, 18 Mar 2023 22:26:22 +0800 -Subject: arm64: dts: qcom: sm8250-xiaomi-elish: Add sound support - ---- - arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi | 232 ++++++++++ - 1 file changed, 232 insertions(+) - -diff --git a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -index 111111111111..222222222222 100644 ---- a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -+++ b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -@@ -6,6 +6,8 @@ - #include - #include - #include -+#include -+#include - #include - #include "sm8250.dtsi" - #include "pm8150.dtsi" -@@ -530,6 +532,152 @@ fuel-gauge@55 { - }; - }; - -+&i2c1 { -+ clock-frequency = <400000>; -+ status = "okay"; -+ -+ cs35l41_brh: speaker-amp@40 { -+ compatible = "cirrus,cs35l41"; -+ reg = <0x40>; -+ interrupt-parent = <&tlmm>; -+ interrupts = <7 IRQ_TYPE_LEVEL_LOW>; -+ reset-gpios = <&tlmm 6 GPIO_ACTIVE_HIGH>; -+ cirrus,boost-type = <0>; -+ cirrus,boost-peak-milliamp = <4000>; -+ cirrus,boost-ind-nanohenry = <1000>; -+ cirrus,boost-cap-microfarad = <15>; -+ cirrus,asp-sdout-hiz = <3>; -+ cirrus,gpio2-src-select = <4>; -+ cirrus,gpio2-output-enable; -+ sound-name-prefix = "BRH"; -+ #sound-dai-cells = <1>; -+ }; -+ -+ cs35l41_blh: speaker-amp@41 { -+ compatible = "cirrus,cs35l41"; -+ reg = <0x41>; -+ interrupt-parent = <&tlmm>; -+ interrupts = <67 IRQ_TYPE_LEVEL_LOW>; -+ reset-gpios = <&tlmm 62 GPIO_ACTIVE_HIGH>; -+ cirrus,boost-type = <0>; -+ cirrus,boost-peak-milliamp = <4000>; -+ cirrus,boost-ind-nanohenry = <1000>; -+ cirrus,boost-cap-microfarad = <15>; -+ cirrus,asp-sdout-hiz = <3>; -+ cirrus,gpio2-src-select = <4>; -+ cirrus,gpio2-output-enable; -+ sound-name-prefix = "BLH"; -+ #sound-dai-cells = <1>; -+ }; -+ -+ cs35l41_brl: speaker-amp@42 { -+ compatible = "cirrus,cs35l41"; -+ reg = <0x42>; -+ interrupt-parent = <&tlmm>; -+ interrupts = <100 IRQ_TYPE_LEVEL_LOW>; -+ reset-gpios = <&tlmm 69 GPIO_ACTIVE_HIGH>; -+ cirrus,boost-type = <0>; -+ cirrus,boost-peak-milliamp = <4000>; -+ cirrus,boost-ind-nanohenry = <1000>; -+ cirrus,boost-cap-microfarad = <15>; -+ cirrus,asp-sdout-hiz = <3>; -+ cirrus,gpio2-src-select = <4>; -+ cirrus,gpio2-output-enable; -+ sound-name-prefix = "BRL"; -+ #sound-dai-cells = <1>; -+ }; -+ -+ cs35l41_bll: speaker-amp@43 { -+ compatible = "cirrus,cs35l41"; -+ reg = <0x43>; -+ interrupt-parent = <&tlmm>; -+ interrupts = <126 IRQ_TYPE_LEVEL_LOW>; -+ reset-gpios = <&tlmm 49 GPIO_ACTIVE_HIGH>; -+ cirrus,boost-type = <0>; -+ cirrus,boost-peak-milliamp = <4000>; -+ cirrus,boost-ind-nanohenry = <1000>; -+ cirrus,boost-cap-microfarad = <15>; -+ cirrus,asp-sdout-hiz = <3>; -+ cirrus,gpio2-src-select = <4>; -+ cirrus,gpio2-output-enable; -+ sound-name-prefix = "BLL"; -+ #sound-dai-cells = <1>; -+ }; -+}; -+ -+&i2c3 { -+ clock-frequency = <400000>; -+ status = "okay"; -+ -+ cs35l41_trh: speaker-amp@40 { -+ compatible = "cirrus,cs35l41"; -+ reg = <0x40>; -+ interrupt-parent = <&tlmm>; -+ interrupts = <27 IRQ_TYPE_LEVEL_LOW>; -+ reset-gpios = <&tlmm 50 GPIO_ACTIVE_HIGH>; -+ cirrus,boost-type = <0>; -+ cirrus,boost-peak-milliamp = <4000>; -+ cirrus,boost-ind-nanohenry = <1000>; -+ cirrus,boost-cap-microfarad = <15>; -+ cirrus,asp-sdout-hiz = <3>; -+ cirrus,gpio2-src-select = <4>; -+ cirrus,gpio2-output-enable; -+ sound-name-prefix = "TRH"; -+ #sound-dai-cells = <1>; -+ }; -+ -+ cs35l41_tlh: speaker-amp@41 { -+ compatible = "cirrus,cs35l41"; -+ reg = <0x41>; -+ interrupt-parent = <&tlmm>; -+ interrupts = <92 IRQ_TYPE_LEVEL_LOW>; -+ reset-gpios = <&tlmm 78 GPIO_ACTIVE_HIGH>; -+ cirrus,boost-type = <0>; -+ cirrus,boost-peak-milliamp = <4000>; -+ cirrus,boost-ind-nanohenry = <1000>; -+ cirrus,boost-cap-microfarad = <15>; -+ cirrus,asp-sdout-hiz = <3>; -+ cirrus,gpio2-src-select = <4>; -+ cirrus,gpio2-output-enable; -+ sound-name-prefix = "TLH"; -+ #sound-dai-cells = <1>; -+ }; -+ -+ cs35l41_tll: speaker-amp@42 { -+ compatible = "cirrus,cs35l41"; -+ reg = <0x42>; -+ interrupt-parent = <&tlmm>; -+ interrupts = <112 IRQ_TYPE_LEVEL_LOW>; -+ reset-gpios = <&tlmm 30 GPIO_ACTIVE_HIGH>; -+ cirrus,boost-type = <0>; -+ cirrus,boost-peak-milliamp = <4000>; -+ cirrus,boost-ind-nanohenry = <1000>; -+ cirrus,boost-cap-microfarad = <15>; -+ cirrus,asp-sdout-hiz = <3>; -+ cirrus,gpio2-src-select = <4>; -+ cirrus,gpio2-output-enable; -+ sound-name-prefix = "TLL"; -+ #sound-dai-cells = <1>; -+ }; -+ -+ cs35l41_trl: speaker-amp@43 { -+ compatible = "cirrus,cs35l41"; -+ reg = <0x43>; -+ interrupt-parent = <&tlmm>; -+ interrupts = <129 IRQ_TYPE_LEVEL_LOW>; -+ reset-gpios = <&tlmm 144 GPIO_ACTIVE_HIGH>; -+ cirrus,boost-type = <0>; -+ cirrus,boost-peak-milliamp = <4000>; -+ cirrus,boost-ind-nanohenry = <1000>; -+ cirrus,boost-cap-microfarad = <15>; -+ cirrus,asp-sdout-hiz = <3>; -+ cirrus,gpio2-src-select = <4>; -+ cirrus,gpio2-output-enable; -+ sound-name-prefix = "TRL"; -+ #sound-dai-cells = <1>; -+ }; -+}; -+ - &i2c11 { - clock-frequency = <400000>; - status = "okay"; -@@ -721,11 +869,63 @@ &qupv3_id_2 { - status = "okay"; - }; - -+&q6afedai { -+ dai@56 { -+ reg = ; -+ qcom,tdm-sync-mode = <0>; -+ qcom,tdm-sync-src = <1>; -+ qcom,tdm-data-out = <0>; -+ qcom,tdm-invert-sync = <1>; -+ qcom,tdm-data-delay = <1>; -+ qcom,tdm-data-align = <0>; -+ }; -+}; -+ -+&q6asmdai { -+ dai@0 { -+ reg = <0>; -+ }; -+}; -+ - &slpi { - firmware-name = "qcom/sm8250/xiaomi/elish/slpi.mbn"; - status = "disabled"; - }; - -+&sound { -+ compatible = "qcom,sm8250-sndcard"; -+ model = "Xiaomi Mi Pad 5 Pro"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&tert_tdm_active>; -+ -+ mm1-dai-link { -+ link-name = "MultiMedia1"; -+ -+ cpu { -+ sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA1>; -+ }; -+ }; -+ -+ speaker-dai-link { -+ link-name = "Tertiary TDM Playback"; -+ -+ cpu { -+ sound-dai = <&q6afedai TERTIARY_TDM_RX_0>; -+ }; -+ -+ platform { -+ sound-dai = <&q6routing>; -+ }; -+ -+ codec { -+ sound-dai = <&cs35l41_tlh 0>, <&cs35l41_tll 0>, -+ <&cs35l41_trh 0>, <&cs35l41_trl 0>, -+ <&cs35l41_blh 0>, <&cs35l41_bll 0>, -+ <&cs35l41_brh 0>, <&cs35l41_brl 0>; -+ }; -+ }; -+}; -+ - &spi4 { - status = "okay"; - pinctrl-names = "default"; -@@ -772,6 +972,38 @@ wlan-en-pins { - bias-pull-up; - }; - }; -+ -+ tert_tdm_active: tert-tdm-active-state { -+ sck-pins { -+ pins = "gpio133"; -+ function = "mi2s2_sck"; -+ drive-strength = <8>; -+ bias-disable; -+ output-high; -+ }; -+ -+ din-pins { -+ pins = "gpio134"; -+ function = "mi2s2_data0"; -+ drive-strength = <8>; -+ bias-disable; -+ }; -+ -+ ws-pins { -+ pins = "gpio135"; -+ function = "mi2s2_ws"; -+ drive-strength = <8>; -+ bias-disable; -+ output-high; -+ }; -+ -+ dout-pins { -+ pins = "gpio137"; -+ function = "mi2s2_data1"; -+ drive-strength = <8>; -+ bias-disable; -+ }; -+ }; - }; - - &uart6 { --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0015-Asoc-wm_adsp-Add-prefix-support.patch b/patch/kernel/archive/sm8250-6.9/0015-Asoc-wm_adsp-Add-prefix-support.patch deleted file mode 100644 index 9d00d7c4d370..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0015-Asoc-wm_adsp-Add-prefix-support.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jianhua Lu -Date: Wed, 29 Mar 2023 19:38:33 +0800 -Subject: Asoc: wm_adsp: Add prefix support - ---- - sound/soc/codecs/wm_adsp.c | 14 ++++++++++ - 1 file changed, 14 insertions(+) - -diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c -index 111111111111..222222222222 100644 ---- a/sound/soc/codecs/wm_adsp.c -+++ b/sound/soc/codecs/wm_adsp.c -@@ -757,6 +757,10 @@ static int wm_adsp_request_firmware_file(struct wm_adsp *dsp, - *filename = kasprintf(GFP_KERNEL, "%s%s-%s-%s-%s.%s", dir, dsp->part, - fwf, wm_adsp_fw[dsp->fw].file, system_name, - filetype); -+ else if (asoc_component_prefix) -+ *filename = kasprintf(GFP_KERNEL, "%s%s-%s-%s-%s.%s", dir, dsp->part, -+ dsp->fwf_name, wm_adsp_fw[dsp->fw].file, asoc_component_prefix, -+ filetype); - else - *filename = kasprintf(GFP_KERNEL, "%s%s-%s-%s.%s", dir, dsp->part, fwf, - wm_adsp_fw[dsp->fw].file, filetype); -@@ -828,6 +832,16 @@ static int wm_adsp_request_firmware_files(struct wm_adsp *dsp, - NULL, "bin"); - return 0; - } -+ } else if (asoc_component_prefix) { -+ if (!wm_adsp_request_firmware_file(dsp, wmfw_firmware, wmfw_filename, -+ cirrus_dir, NULL, -+ NULL, "wmfw")) { -+ adsp_dbg(dsp, "Found '%s'\n", *wmfw_filename); -+ wm_adsp_request_firmware_file(dsp, coeff_firmware, coeff_filename, -+ cirrus_dir, NULL, -+ asoc_component_prefix, "bin"); -+ return 0; -+ } - } - - /* Check system-specific bin without wmfw before falling back to generic */ --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0016-arm64-dts-qcom-sm8250-oneplus-instantnoodlep-Add-dev.patch b/patch/kernel/archive/sm8250-6.9/0016-arm64-dts-qcom-sm8250-oneplus-instantnoodlep-Add-dev.patch deleted file mode 100644 index 54435bcaea12..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0016-arm64-dts-qcom-sm8250-oneplus-instantnoodlep-Add-dev.patch +++ /dev/null @@ -1,851 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Pangwalla -Date: Fri, 10 Mar 2023 19:09:42 -0500 -Subject: arm64: dts: qcom: sm8250-oneplus-instantnoodlep: Add device tree for - Oneplus 8 Pro - ---- - arch/arm64/boot/dts/qcom/sm8250-oneplus-instantnoodlep.dts | 832 ++++++++++ - 1 file changed, 832 insertions(+) - -diff --git a/arch/arm64/boot/dts/qcom/sm8250-oneplus-instantnoodlep.dts b/arch/arm64/boot/dts/qcom/sm8250-oneplus-instantnoodlep.dts -new file mode 100644 -index 000000000000..111111111111 ---- /dev/null -+++ b/arch/arm64/boot/dts/qcom/sm8250-oneplus-instantnoodlep.dts -@@ -0,0 +1,832 @@ -+/dts-v1/; -+ -+#include -+#include -+#include -+#include -+#include "sm8250.dtsi" -+#include "pm8150.dtsi" -+#include "pm8150b.dtsi" -+#include "pm8150l.dtsi" -+#include "pm8009.dtsi" -+ -+/* -+ * Delete following upstream (sm8250.dtsi) reserved -+ * memory mappings which are different in this device. -+ */ -+/delete-node/ &removed_mem; -+/delete-node/ &camera_mem; -+/delete-node/ &wlan_mem; -+/delete-node/ &ipa_fw_mem; -+/delete-node/ &ipa_gsi_mem; -+/delete-node/ &gpu_mem; -+/delete-node/ &npu_mem; -+/delete-node/ &video_mem; -+/delete-node/ &cvp_mem; -+/delete-node/ &cdsp_mem; -+/delete-node/ &slpi_mem; -+/delete-node/ &adsp_mem; -+/delete-node/ &spss_mem; -+/delete-node/ &cdsp_secure_heap; -+ -+/ { -+ model = "OnePlus 8 Pro (instantnoodlep)"; -+ compatible = "oneplus,instantnoodlep", "qcom,kona", "qcom,sm8250"; -+ chassis-type = "handset"; -+ -+ qcom,msm-id = <0x164 0x10000>, <0x164 0x20001>; -+ qcom,board-id = <0x08 0x00>, <0x00 0x00>; -+ -+ aliases { -+ hsuart0 = &uart6; -+ }; -+ -+ chosen { -+ #address-cells = <2>; -+ #size-cells = <2>; -+ ranges; -+ stdout-path = "framebuffer0"; -+ -+ framebuffer0: framebuffer@9c000000 { -+ compatible = "simple-framebuffer"; -+ reg = <0x0 0x9c000000 0x0 (1080 * 2376 * 4)>; -+ width = <1080>; -+ height = <2376>; -+ stride = <(1080 * 4)>; -+ format = "a8r8g8b8"; -+ }; -+ }; -+ -+ gpio_keys: gpio-keys { -+ compatible = "gpio-keys"; -+ -+ vol-up { -+ label = "Volume Up"; -+ gpios = <&pm8150_gpios 6 GPIO_ACTIVE_LOW>; -+ linux,code = ; -+ debounce-interval = <15>; -+ linux,can-disable; -+ gpio-key,wakeup; -+ }; -+ -+ vol-down { -+ label = "Volume Down"; -+ linux,code = ; -+ gpios = <&pm8150_gpios 7 GPIO_ACTIVE_LOW>; -+ debounce-interval = <15>; -+ linux,can-disable; -+ gpio-key,wakeup; -+ }; -+ }; -+ -+ reserved-memory { -+ removed_mem: memory@80b00000 { -+ reg = <0x0 0x80b00000 0x0 0xcd00000>; -+ no-map; -+ }; -+ -+ camera_mem: memory@8dc00000 { -+ reg = <0x0 0x8dc00000 0x0 0x500000>; -+ no-map; -+ }; -+ -+ wlan_mem: memory@8e100000 { -+ reg = <0x0 0x8e100000 0x0 0x100000>; -+ no-map; -+ }; -+ -+ ipa_fw_mem: memory@8e200000 { -+ reg = <0x0 0x8e200000 0x0 0x10000>; -+ no-map; -+ }; -+ -+ ipa_gsi_mem: memory@8e210000 { -+ reg = <0x0 0x8e210000 0x0 0xa000>; -+ no-map; -+ }; -+ -+ gpu_mem: memory@8e21a000 { -+ reg = <0x0 0x8e21a000 0x0 0x2000>; -+ no-map; -+ }; -+ -+ npu_mem: memory@8e300000 { -+ reg = <0x0 0x8e300000 0x0 0x500000>; -+ no-map; -+ }; -+ -+ video_mem: memory@8e800000 { -+ reg = <0x0 0x8e800000 0x0 0x500000>; -+ no-map; -+ }; -+ -+ cvp_mem: memory@8ed00000 { -+ reg = <0x0 0x8ed00000 0x0 0x500000>; -+ no-map; -+ }; -+ -+ cdsp_mem: memory@8f200000 { -+ reg = <0x0 0x8f200000 0x0 0x1400000>; -+ no-map; -+ }; -+ -+ slpi_mem: memory@90600000 { -+ reg = <0x0 0x90600000 0x0 0x1500000>; -+ no-map; -+ }; -+ -+ adsp_mem: memory@91b00000 { -+ reg = <0x00 0x91b00000 0x00 0x2500000>; -+ no-map; -+ }; -+ -+ spss_mem: memory@94000000 { -+ reg = <0x0 0x94000000 0x0 0x100000>; -+ no-map; -+ }; -+ -+ cdsp_secure_heap: memory@94100000 { -+ reg = <0x0 0x94100000 0x0 0x4600000>; -+ no-map; -+ }; -+ -+ cont_splash_mem: memory@9c000000 { -+ reg = <0x0 0x9c000000 0x0 0x2300000>; -+ no-map; -+ }; -+ -+ ramoops@b0000000 { -+ compatible = "ramoops"; -+ reg = <0x00 0xb0000000 0x00 0x400000>; -+ record-size = <0x40000>; -+ console-size = <0x40000>; -+ ecc-size = <0x00>; -+ no-map; -+ }; -+ }; -+ -+ vph_pwr: vph-pwr-regulator { -+ compatible = "regulator-fixed"; -+ regulator-name = "vph_pwr"; -+ regulator-min-microvolt = <3700000>; -+ regulator-max-microvolt = <3700000>; -+ }; -+ -+ vreg_s6c_0p88: smpc6-regulator { -+ compatible = "regulator-fixed"; -+ regulator-name = "vreg_s6c_0p88"; -+ regulator-min-microvolt = <880000>; -+ regulator-max-microvolt = <880000>; -+ regulator-always-on; -+ vin-supply = <&vph_pwr>; -+ }; -+ -+ vreg_s4a_1p8: vreg-s4a-1p8 { -+ compatible = "regulator-fixed"; -+ regulator-name = "vreg_s4a_1p8"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-always-on; -+ }; -+ -+ qca639x: qca639x { -+ compatible = "qcom,qca6390"; -+ #power-domain-cells = <0>; -+ -+ vddaon-supply = <&vreg_s6a_0p95>; -+ vddpmu-supply = <&vreg_s2f_0p95>; -+ vddrfa1-supply = <&vreg_s2f_0p95>; -+ vddrfa2-supply = <&vreg_s8c_1p3>; -+ vddrfa3-supply = <&vreg_s5a_1p9>; -+ vddpcie1-supply = <&vreg_s8c_1p3>; -+ vddpcie2-supply = <&vreg_s5a_1p9>; -+ vddio-supply = <&vreg_s4a_1p8>; -+ -+ pinctrl-names = "default", "sleep"; -+ pinctrl-0 = <&wlan_en_active>; -+ pinctrl-1 = <&wlan_en_sleep>; -+ -+ wlan-en-gpios = <&tlmm 20 GPIO_ACTIVE_HIGH>; -+ }; -+ -+ battery: battery { -+ compatible = "simple-battery"; -+ -+ charge-full-design-microamp-hours = <4410000>; -+ energy-full-design-microwatt-hours = <17060000>; -+ voltage-max-design-microvolt = <4350000>; -+ }; -+}; -+ -+&apps_rsc { -+ regulators-0 { -+ compatible = "qcom,pm8009-1-rpmh-regulators"; -+ qcom,pmic-id = "f"; -+ -+ vdd-s1-supply = <&vph_pwr>; -+ vdd-s2-supply = <&vph_pwr>; -+ vdd-l2-supply = <&vreg_s8c_1p3>; -+ vdd-l5-l6-supply = <&vreg_bob>; -+ vdd-l7-supply = <&vreg_s4a_1p8>; -+ -+ vreg_s2f_0p95: smps2 { -+ regulator-name = "vreg_s2f_0p95"; -+ regulator-min-microvolt = <900000>; -+ regulator-max-microvolt = <952000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l1f_1p1: ldo1 { -+ regulator-name = "vreg_l1f_1p1"; -+ regulator-min-microvolt = <1104000>; -+ regulator-max-microvolt = <1104000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l2f_1p2: ldo2 { -+ regulator-name = "vreg_l2f_1p2"; -+ regulator-min-microvolt = <1200000>; -+ regulator-max-microvolt = <1200000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l6f_2p8: ldo6 { -+ regulator-name = "vreg_l6f_2p8"; -+ regulator-min-microvolt = <2800000>; -+ regulator-max-microvolt = <2800000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l7f_1p8: ldo7 { -+ regulator-name = "vreg_l7f_1p8"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-initial-mode = ; -+ }; -+ }; -+ -+ regulators-1 { -+ compatible = "qcom,pm8150-rpmh-regulators"; -+ qcom,pmic-id = "a"; -+ -+ vdd-s1-supply = <&vph_pwr>; -+ vdd-s2-supply = <&vph_pwr>; -+ vdd-s3-supply = <&vph_pwr>; -+ vdd-s4-supply = <&vph_pwr>; -+ vdd-s5-supply = <&vph_pwr>; -+ vdd-s6-supply = <&vph_pwr>; -+ vdd-s7-supply = <&vph_pwr>; -+ vdd-s8-supply = <&vph_pwr>; -+ vdd-s9-supply = <&vph_pwr>; -+ vdd-s10-supply = <&vph_pwr>; -+ vdd-l2-l10-supply = <&vreg_bob>; -+ vdd-l3-l4-l5-l18-supply = <&vreg_s6a_0p95>; -+ vdd-l6-l9-supply = <&vreg_s8c_1p3>; -+ vdd-l7-l12-l14-l15-supply = <&vreg_s5a_1p9>; -+ vdd-l13-l16-l17-supply = <&vreg_bob>; -+ -+ vreg_l2a_3p1: ldo2 { -+ regulator-name = "vreg_l2a_3p1"; -+ regulator-min-microvolt = <3072000>; -+ regulator-max-microvolt = <3072000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l3a_0p9: ldo3 { -+ regulator-name = "vreg_l3a_0p9"; -+ regulator-min-microvolt = <928000>; -+ regulator-max-microvolt = <932000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l5a_0p88: ldo5 { -+ regulator-name = "vreg_l5a_0p88"; -+ regulator-min-microvolt = <880000>; -+ regulator-max-microvolt = <880000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l6a_1p2: ldo6 { -+ regulator-name = "vreg_l6a_1p2"; -+ regulator-min-microvolt = <1200000>; -+ regulator-max-microvolt = <1200000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l7a_1p7: ldo7 { -+ regulator-name = "vreg_l7a_1p7"; -+ regulator-min-microvolt = <1704000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l9a_1p2: ldo9 { -+ regulator-name = "vreg_l9a_1p2"; -+ regulator-min-microvolt = <1200000>; -+ regulator-max-microvolt = <1200000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l10a_1p8: ldo10 { -+ regulator-name = "vreg_l10a_1p8"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l12a_1p8: ldo12 { -+ regulator-name = "vreg_l12a_1p8"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l13a_ts_3p0: ldo13 { -+ regulator-name = "vreg_l13a_ts_3p0"; -+ regulator-min-microvolt = <3008000>; -+ regulator-max-microvolt = <3008000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l14a_1p8: ldo14 { -+ regulator-name = "vreg_l14a_1p8"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1880000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l15a_1p8: ldo15 { -+ regulator-name = "vreg_l15a_1p8"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l16a_2p7: ldo16 { -+ regulator-name = "vreg_l16a_2p7"; -+ regulator-min-microvolt = <2704000>; -+ regulator-max-microvolt = <2960000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l17a_3p0: ldo17 { -+ regulator-name = "vreg_l17a_3p0"; -+ regulator-min-microvolt = <2856000>; -+ regulator-max-microvolt = <3008000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l18a_0p92: ldo18 { -+ regulator-name = "vreg_l18a_0p92"; -+ regulator-min-microvolt = <800000>; -+ regulator-max-microvolt = <912000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_s5a_1p9: smps5 { -+ regulator-name = "vreg_s5a_1p9"; -+ regulator-min-microvolt = <1904000>; -+ regulator-max-microvolt = <2000000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_s6a_0p95: smps6 { -+ regulator-name = "vreg_s6a_0p95"; -+ regulator-min-microvolt = <920000>; -+ regulator-max-microvolt = <1128000>; -+ regulator-initial-mode = ; -+ }; -+ }; -+ -+ regulators-2 { -+ compatible = "qcom,pm8150l-rpmh-regulators"; -+ qcom,pmic-id = "c"; -+ -+ vdd-s1-supply = <&vph_pwr>; -+ vdd-s2-supply = <&vph_pwr>; -+ vdd-s3-supply = <&vph_pwr>; -+ vdd-s4-supply = <&vph_pwr>; -+ vdd-s5-supply = <&vph_pwr>; -+ vdd-s6-supply = <&vph_pwr>; -+ vdd-s7-supply = <&vph_pwr>; -+ vdd-s8-supply = <&vph_pwr>; -+ vdd-l1-l8-supply = <&vreg_s4a_1p8>; -+ vdd-l2-l3-supply = <&vreg_s8c_1p3>; -+ vdd-l4-l5-l6-supply = <&vreg_bob>; -+ vdd-l7-l11-supply = <&vreg_bob>; -+ vdd-l9-l10-supply = <&vreg_bob>; -+ vdd-bob-supply = <&vph_pwr>; -+ -+ vreg_bob: bob { -+ regulator-name = "vreg_bob"; -+ regulator-min-microvolt = <3008000>; -+ regulator-max-microvolt = <4000000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l1c_1p8: ldo1 { -+ regulator-name = "vreg_l1c_1p8"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l2c_1p2: ldo2 { -+ regulator-name = "vreg_l2c_1p2"; -+ regulator-min-microvolt = <1200000>; -+ regulator-max-microvolt = <1200000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l3c_0p8: ldo3 { -+ regulator-name = "vreg_l3c_0p8"; -+ regulator-min-microvolt = <800000>; -+ regulator-max-microvolt = <800000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l4c_1p7: ldo4 { -+ regulator-name = "vreg_l4c_1p7"; -+ regulator-min-microvolt = <1704000>; -+ regulator-max-microvolt = <2928000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l5c_1p8: ldo5 { -+ regulator-name = "vreg_l5c_1p8"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <2928000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l6c_2p96: ldo6 { -+ regulator-name = "vreg_l6c_2p96"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <2960000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l7c_cam_vcm0_2p85: ldo7 { -+ regulator-name = "vreg_l7c_cam_vcm0_2p85"; -+ regulator-min-microvolt = <2856000>; -+ regulator-max-microvolt = <3104000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l8c_1p8: ldo8 { -+ regulator-name = "vreg_l8c_1p8"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l9c_2p96: ldo9 { -+ regulator-name = "vreg_l9c_2p96"; -+ regulator-min-microvolt = <2704000>; -+ regulator-max-microvolt = <2960000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l10c_3p0: ldo10 { -+ regulator-name = "vreg_l10c_3p0"; -+ regulator-min-microvolt = <3000000>; -+ regulator-max-microvolt = <3000000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l11c_3p3: ldo11 { -+ regulator-name = "vreg_l11c_3p3"; -+ regulator-min-microvolt = <3296000>; -+ regulator-max-microvolt = <3296000>; -+ regulator-initial-mode = ; -+ regulator-always-on; -+ }; -+ -+ vreg_s8c_1p3: smps8 { -+ regulator-name = "vreg_s8c_1p3"; -+ regulator-min-microvolt = <1352000>; -+ regulator-max-microvolt = <1352000>; -+ regulator-initial-mode = ; -+ }; -+ }; -+}; -+ -+&adsp { -+ firmware-name = "postmarketos/adsp.mbn"; -+ status = "okay"; -+}; -+ -+&cdsp { -+ firmware-name = "postmarketos/cdsp.mbn"; -+ status = "okay"; -+}; -+ -+&dispcc { -+ status = "disabled"; -+}; -+ -+&gmu { -+ status = "okay"; -+}; -+ -+&gpi_dma0 { -+ status = "okay"; -+}; -+ -+&gpi_dma1 { -+ status = "okay"; -+}; -+ -+&gpi_dma2 { -+ status = "okay"; -+}; -+ -+&gpu { -+ status = "disabled"; -+}; -+ -+&i2c1 { -+ status = "okay"; -+ -+ nfc@28 { -+ compatible = "nxp,nxp-nci-i2c"; -+ reg = <0x28>; -+ -+ interrupt-parent = <&tlmm>; -+ interrupts = <0x6f IRQ_TYPE_LEVEL_HIGH>; -+ -+ enable-gpios = <&tlmm 83 GPIO_ACTIVE_HIGH>, -+ <&tlmm 110 GPIO_ACTIVE_HIGH>; -+ }; -+}; -+ -+&i2c5 { -+ status = "okay"; -+ -+ charger@66 { -+ compatible = "ti,bq25980"; -+ status = "ok"; -+ reg = <0x66>; -+ interrupt-parent = <&tlmm>; -+ interrupts = <0x0f 0x00>; -+ monitored-battery = <&battery>; -+ }; -+}; -+ -+&i2c16 { -+ status = "okay"; -+ -+ smart_battery: fuel-gauge@55 { -+ compatible = "ti,bq27541"; -+ reg = <0x55>; -+ monitored-battery = <&battery>; -+ }; -+}; -+ -+&i2c13 { -+ clock-frequency = <400000>; -+ status = "okay"; -+ -+ touchscreen@48 { -+ compatible = "samsung,s6sy761"; -+ reg = <0x48>; -+ interrupt-parent = <&tlmm>; -+ interrupts = <0x27 0x2008>; -+ -+ vdd-supply = <&vreg_l13a_ts_3p0>; -+ avdd-supply = <&vreg_l1c_1p8>; -+ -+ touchscreen-size-x = <1440>; -+ touchscreen-size-y = <3168>; -+ -+ pinctrl-names = "default", "suspend"; -+ pinctrl-0 = <&ts_int_active>; -+ pinctrl-1 = <&ts_rst_suspend>; -+ }; -+}; -+ -+&mdss { -+ status = "okay"; -+}; -+ -+&slpi { -+ firmware-name = "postmarketos/slpi.mbn"; -+ status = "okay"; -+}; -+ -+&pcie0 { -+ status = "okay"; -+}; -+ -+&pcie0_phy { -+ vdda-phy-supply = <&vreg_l5a_0p88>; -+ vdda-pll-supply = <&vreg_l9a_1p2>; -+ status = "okay"; -+ power-domains = <&qca639x>; -+}; -+ -+&pcie1 { -+ status = "okay"; -+}; -+ -+&pcie1_phy { -+ vdda-phy-supply = <&vreg_l5a_0p88>; -+ vdda-pll-supply = <&vreg_l9a_1p2>; -+ status = "okay"; -+}; -+ -+&pcie2 { -+ status = "okay"; -+}; -+ -+&pcie2_phy { -+ vdda-phy-supply = <&vreg_l5a_0p88>; -+ vdda-pll-supply = <&vreg_l9a_1p2>; -+ status = "okay"; -+}; -+ -+&pm8150_gpios { -+ vol_up_n: vol-up-n-state { -+ pins = "gpio6"; -+ function = "normal"; -+ power-source = <1>; -+ input-enable; -+ bias-pull-up; -+ }; -+ -+ vol_down_n: vol-down-n-state { -+ pins = "gpio7"; -+ function = "normal"; -+ power-source = <1>; -+ input-enable; -+ bias-pull-up; -+ }; -+}; -+ -+&pon_pwrkey { -+ status = "okay"; -+}; -+ -+&pon_resin { -+ linux,code = ; -+ status = "okay"; -+}; -+ -+&qup_spi4_cs_gpio { -+ drive-strength = <6>; -+ bias-disable; -+}; -+ -+&qup_spi4_data_clk { -+ drive-strength = <6>; -+ bias-disable; -+}; -+ -+&qupv3_id_0 { -+ status = "okay"; -+}; -+ -+&qupv3_id_1 { -+ status = "okay"; -+}; -+ -+&qupv3_id_2 { -+ status = "okay"; -+}; -+ -+&tlmm { -+ gpio-reserved-ranges = <28 4>, <40 4>; -+ -+ bt_en_active: bt-default-state { -+ bt-en { -+ pins = "gpio21"; -+ function = "gpio"; -+ -+ drive-strength = <16>; -+ output-low; -+ bias-pull-up; -+ }; -+ }; -+ -+ bt_en_sleep: bt-sleep-state { -+ pins = "gpio21"; -+ function = "gpio"; -+ -+ drive-strength = <0x02>; -+ output-low; -+ bias-pull-down; -+ }; -+ -+ wlan_en_active: wlan-default-state { -+ wlan-en { -+ pins = "gpio20"; -+ function = "gpio"; -+ -+ drive-strength = <16>; -+ output-low; -+ bias-pull-up; -+ }; -+ }; -+ -+ wlan_en_sleep: wlan-sleep-state { -+ pins = "gpio20"; -+ function = "gpio"; -+ -+ drive-strength = <16>; -+ output-low; -+ bias-pull-down; -+ }; -+ -+ ts_int_active: ts-int-active-state { -+ pins = "gpio38", "gpio39"; -+ function = "gpio"; -+ drive-strength = <2>; -+ bias-pull-up; -+ }; -+ -+ ts_rst_suspend: ts-rst-suspend { -+ pins = "gpio38"; -+ function = "gpio"; -+ drive-strength = <0x02>; -+ bias-pull-down; -+ }; -+}; -+ -+&uart6 { -+ status = "okay"; -+ -+ bluetooth { -+ compatible = "qcom,qca6390-bt"; -+ pinctrl-names = "default", "sleep"; -+ pinctrl-0 = <&bt_en_active>; -+ pinctrl-1 = <&bt_en_sleep>; -+ -+ power-domains = <&qca639x>; -+ enable-gpios = <&tlmm 21 GPIO_ACTIVE_HIGH>; -+ }; -+}; -+ -+&ufs_mem_hc { -+ vcc-supply = <&vreg_l17a_3p0>; -+ vcc-max-microamp = <800000>; -+ vccq-supply = <&vreg_l6a_1p2>; -+ vccq-max-microamp = <800000>; -+ vccq2-supply = <&vreg_s4a_1p8>; -+ vccq2-max-microamp = <800000>; -+ status = "okay"; -+}; -+ -+&ufs_mem_phy { -+ vdda-phy-supply = <&vreg_l5a_0p88>; -+ vdda-pll-supply = <&vreg_l9a_1p2>; -+ status = "okay"; -+}; -+ -+&usb_1 { -+ /* USB 2.0 only */ -+ qcom,select-utmi-as-pipe-clk; -+ status = "okay"; -+}; -+ -+&usb_1_dwc3 { -+ dr_mode = "peripheral"; -+ maximum-speed = "high-speed"; -+ /* Remove USB3 phy */ -+ phys = <&usb_1_hsphy>; -+ phy-names = "usb2-phy"; -+}; -+ -+&usb_1_hsphy { -+ vdda-pll-supply = <&vreg_l5a_0p88>; -+ vdda18-supply = <&vreg_l12a_1p8>; -+ vdda33-supply = <&vreg_l2a_3p1>; -+ status = "okay"; -+}; -+ -+&usb_2 { -+ status = "okay"; -+}; -+ -+&usb_2_dwc3 { -+ dr_mode = "host"; -+}; -+ -+&usb_2_hsphy { -+ status = "okay"; -+ -+ vdda-pll-supply = <&vreg_l5a_0p88>; -+ vdda33-supply = <&vreg_l2a_3p1>; -+ vdda18-supply = <&vreg_l12a_1p8>; -+}; -+ -+&usb_2_qmpphy { -+ status = "okay"; -+ -+ vdda-phy-supply = <&vreg_l9a_1p2>; -+ vdda-pll-supply = <&vreg_l18a_0p92>; -+}; -+ -+&venus { -+ firmware-name = "postmarketos/venus.mbn"; -+ status = "okay"; -+}; --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0017-drm-msm-dsi-change-sync-mode-to-sync-on-DSI0-rather-.patch b/patch/kernel/archive/sm8250-6.9/0017-drm-msm-dsi-change-sync-mode-to-sync-on-DSI0-rather-.patch deleted file mode 100644 index 151ed31996b7..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0017-drm-msm-dsi-change-sync-mode-to-sync-on-DSI0-rather-.patch +++ /dev/null @@ -1,78 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Dmitry Baryshkov -Date: Sun, 4 Jun 2023 21:44:33 +0300 -Subject: drm/msm/dsi: change sync mode to sync on DSI0 rather than DSI1 - -Change MSM DSI's sync-dual-dsi mode to resync on DSI0 rather than DSI1. - -Signed-off-by: Dmitry Baryshkov ---- - drivers/gpu/drm/msm/dsi/dsi_manager.c | 24 +++++----- - 1 file changed, 12 insertions(+), 12 deletions(-) - -diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/dsi/dsi_manager.c -+++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c -@@ -519,7 +519,7 @@ int msm_dsi_manager_ext_bridge_init(u8 id, struct drm_bridge *int_bridge) - int msm_dsi_manager_cmd_xfer(int id, const struct mipi_dsi_msg *msg) - { - struct msm_dsi *msm_dsi = dsi_mgr_get_dsi(id); -- struct msm_dsi *msm_dsi0 = dsi_mgr_get_dsi(DSI_0); -+ struct msm_dsi *msm_dsi1 = dsi_mgr_get_dsi(DSI_1); - struct mipi_dsi_host *host = msm_dsi->host; - bool is_read = (msg->rx_buf && msg->rx_len); - bool need_sync = (IS_SYNC_NEEDED() && !is_read); -@@ -530,14 +530,14 @@ int msm_dsi_manager_cmd_xfer(int id, const struct mipi_dsi_msg *msg) - - /* In bonded master case, panel requires the same commands sent to - * both DSI links. Host issues the command trigger to both links -- * when DSI_1 calls the cmd transfer function, no matter it happens -- * before or after DSI_0 cmd transfer. -+ * when DSI_0 calls the cmd transfer function, no matter it happens -+ * before or after DSI_1 cmd transfer. - */ -- if (need_sync && (id == DSI_0)) -+ if (need_sync && (id == DSI_1)) - return is_read ? msg->rx_len : msg->tx_len; - -- if (need_sync && msm_dsi0) { -- ret = msm_dsi_host_xfer_prepare(msm_dsi0->host, msg); -+ if (need_sync && msm_dsi1) { -+ ret = msm_dsi_host_xfer_prepare(msm_dsi1->host, msg); - if (ret) { - pr_err("%s: failed to prepare non-trigger host, %d\n", - __func__, ret); -@@ -556,8 +556,8 @@ int msm_dsi_manager_cmd_xfer(int id, const struct mipi_dsi_msg *msg) - msm_dsi_host_xfer_restore(host, msg); - - restore_host0: -- if (need_sync && msm_dsi0) -- msm_dsi_host_xfer_restore(msm_dsi0->host, msg); -+ if (need_sync && msm_dsi1) -+ msm_dsi_host_xfer_restore(msm_dsi1->host, msg); - - return ret; - } -@@ -565,14 +565,14 @@ int msm_dsi_manager_cmd_xfer(int id, const struct mipi_dsi_msg *msg) - bool msm_dsi_manager_cmd_xfer_trigger(int id, u32 dma_base, u32 len) - { - struct msm_dsi *msm_dsi = dsi_mgr_get_dsi(id); -- struct msm_dsi *msm_dsi0 = dsi_mgr_get_dsi(DSI_0); -+ struct msm_dsi *msm_dsi1 = dsi_mgr_get_dsi(DSI_1); - struct mipi_dsi_host *host = msm_dsi->host; - -- if (IS_SYNC_NEEDED() && (id == DSI_0)) -+ if (IS_SYNC_NEEDED() && (id == DSI_1)) - return false; - -- if (IS_SYNC_NEEDED() && msm_dsi0) -- msm_dsi_host_cmd_xfer_commit(msm_dsi0->host, dma_base, len); -+ if (IS_SYNC_NEEDED() && msm_dsi1) -+ msm_dsi_host_cmd_xfer_commit(msm_dsi1->host, dma_base, len); - - msm_dsi_host_cmd_xfer_commit(host, dma_base, len); - --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0018-drm-msm-dpu1-improve-support-for-active-CTLs.patch b/patch/kernel/archive/sm8250-6.9/0018-drm-msm-dpu1-improve-support-for-active-CTLs.patch deleted file mode 100644 index f0caa94d501a..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0018-drm-msm-dpu1-improve-support-for-active-CTLs.patch +++ /dev/null @@ -1,130 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Dmitry Baryshkov -Date: Sun, 14 Mar 2021 04:52:34 +0300 -Subject: drm/msm/dpu1: improve support for active CTLs - -- Support setting master interface if several INTFs are to be handled by - a single CTL - -- Support setting handling several MERGE_3D instances using a single - CTL. - -Signed-off-by: Dmitry Baryshkov -[Marijn: Rebase patch on -next, fix conflicting implementation with -recent MERGE_3D patch, implement proper active support for DSC] -Signed-off-by: Marijn Suijten ---- - drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c | 38 ++++++++-- - drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.h | 2 + - 2 files changed, 32 insertions(+), 8 deletions(-) - -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.c -@@ -544,10 +544,12 @@ static void dpu_hw_ctl_intf_cfg_v1(struct dpu_hw_ctl *ctx, - struct dpu_hw_intf_cfg *cfg) - { - struct dpu_hw_blk_reg_map *c = &ctx->hw; -- u32 intf_active = 0; -- u32 dsc_active = 0; -- u32 wb_active = 0; - u32 mode_sel = 0; -+ u32 cdm_active; -+ u32 intf_active; -+ u32 wb_active; -+ u32 dsc_active; -+ u32 merge_3d_active; - - /* CTL_TOP[31:28] carries group_id to collate CTL paths - * per VM. Explicitly disable it until VM support is -@@ -559,9 +561,14 @@ static void dpu_hw_ctl_intf_cfg_v1(struct dpu_hw_ctl *ctx, - if (cfg->intf_mode_sel == DPU_CTL_MODE_SEL_CMD) - mode_sel |= BIT(17); - -+ cdm_active = DPU_REG_READ(c, CTL_CDM_ACTIVE); - intf_active = DPU_REG_READ(c, CTL_INTF_ACTIVE); - wb_active = DPU_REG_READ(c, CTL_WB_ACTIVE); - dsc_active = DPU_REG_READ(c, CTL_DSC_ACTIVE); -+ merge_3d_active = DPU_REG_READ(c, CTL_MERGE_3D_ACTIVE); -+ -+ if (cfg->cdm) -+ cdm_active |= cfg->cdm; - - if (cfg->intf) - intf_active |= BIT(cfg->intf - INTF_0); -@@ -572,17 +579,23 @@ static void dpu_hw_ctl_intf_cfg_v1(struct dpu_hw_ctl *ctx, - if (cfg->dsc) - dsc_active |= cfg->dsc; - -+ if (cfg->merge_3d) -+ merge_3d_active |= BIT(cfg->merge_3d - MERGE_3D_0); -+ - DPU_REG_WRITE(c, CTL_TOP, mode_sel); -+ DPU_REG_WRITE(c, CTL_CDM_ACTIVE, cdm_active); - DPU_REG_WRITE(c, CTL_INTF_ACTIVE, intf_active); - DPU_REG_WRITE(c, CTL_WB_ACTIVE, wb_active); - DPU_REG_WRITE(c, CTL_DSC_ACTIVE, dsc_active); -+ DPU_REG_WRITE(c, CTL_MERGE_3D_ACTIVE, merge_3d_active); - -- if (cfg->merge_3d) -- DPU_REG_WRITE(c, CTL_MERGE_3D_ACTIVE, -- BIT(cfg->merge_3d - MERGE_3D_0)); -+ if (cfg->intf_master) -+ DPU_REG_WRITE(c, CTL_INTF_MASTER, BIT(cfg->intf_master - INTF_0)); - -- if (cfg->cdm) -- DPU_REG_WRITE(c, CTL_CDM_ACTIVE, cfg->cdm); -+ if (cfg->intf_master) -+ DPU_DEBUG_DRIVER("ACTIVE: intf:%#x merge_3d:%#x dsc:%#x master_intf:%d\n", intf_active, merge_3d_active, dsc_active, cfg->intf_master - INTF_0); -+ else -+ DPU_DEBUG_DRIVER("ACTIVE: intf:%#x merge_3d:%#x dsc:%#x\n", intf_active, merge_3d_active, dsc_active); - } - - static void dpu_hw_ctl_intf_cfg(struct dpu_hw_ctl *ctx, -@@ -623,6 +636,7 @@ static void dpu_hw_ctl_reset_intf_cfg_v1(struct dpu_hw_ctl *ctx, - { - struct dpu_hw_blk_reg_map *c = &ctx->hw; - u32 intf_active = 0; -+ u32 intf_master = 0; - u32 wb_active = 0; - u32 merge3d_active = 0; - u32 dsc_active; -@@ -649,6 +663,14 @@ static void dpu_hw_ctl_reset_intf_cfg_v1(struct dpu_hw_ctl *ctx, - intf_active = DPU_REG_READ(c, CTL_INTF_ACTIVE); - intf_active &= ~BIT(cfg->intf - INTF_0); - DPU_REG_WRITE(c, CTL_INTF_ACTIVE, intf_active); -+ -+ /* Unset this intf as master, if it is the current master */ -+ /* TODO: Marijn: does this make any sense? */ -+ intf_master = DPU_REG_READ(c, CTL_INTF_MASTER); -+ if (intf_master == BIT(cfg->intf - INTF_0)) { -+ DPU_DEBUG_DRIVER("Unsetting intf:%d master\n", cfg->intf - INTF_0); -+ DPU_REG_WRITE(c, CTL_INTF_MASTER, 0); -+ } - } - - if (cfg->wb) { -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.h -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_ctl.h -@@ -36,6 +36,7 @@ struct dpu_hw_stage_cfg { - /** - * struct dpu_hw_intf_cfg :Describes how the DPU writes data to output interface - * @intf : Interface id -+ * @intf_master: Master interface id in the dual pipe topology - * @mode_3d: 3d mux configuration - * @merge_3d: 3d merge block used - * @intf_mode_sel: Interface mode, cmd / vid -@@ -45,6 +46,7 @@ struct dpu_hw_stage_cfg { - */ - struct dpu_hw_intf_cfg { - enum dpu_intf intf; -+ enum dpu_intf intf_master; - enum dpu_wb wb; - enum dpu_3d_blend_mode mode_3d; - enum dpu_merge_3d merge_3d; --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0019-drm-msm-dpu1-use-one-active-CTL-if-it-is-available.patch b/patch/kernel/archive/sm8250-6.9/0019-drm-msm-dpu1-use-one-active-CTL-if-it-is-available.patch deleted file mode 100644 index aecae3af5649..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0019-drm-msm-dpu1-use-one-active-CTL-if-it-is-available.patch +++ /dev/null @@ -1,110 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Dmitry Baryshkov -Date: Sun, 14 Mar 2021 04:58:32 +0300 -Subject: drm/msm/dpu1: use one active CTL if it is available - -Unlike previous generation, with newer ("active") CTLs it is possible to -use just one CTL to handle both interfaces. And one has to use single -CTL to support master/slave DSI config. So use one active CTL if it is -available. - -Signed-off-by: Dmitry Baryshkov ---- - drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 8 ++++-- - drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 + - drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 14 +++++++--- - drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h | 1 + - 4 files changed, 18 insertions(+), 6 deletions(-) - -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c -@@ -1190,14 +1190,18 @@ static void dpu_encoder_virt_atomic_mode_set(struct drm_encoder *drm_enc, - return; - } - -- if (!hw_ctl[i]) { -+ /* Use first (and only) CTL if active CTLs are supported */ -+ if (dpu_kms->catalog->caps->has_active_ctls) -+ phys->hw_ctl = to_dpu_hw_ctl(hw_ctl[0]); -+ else -+ phys->hw_ctl = to_dpu_hw_ctl(hw_ctl[i]); -+ if (!phys->hw_ctl) { - DPU_ERROR_ENC(dpu_enc, - "no ctl block assigned at idx: %d\n", i); - return; - } - - phys->hw_pp = dpu_enc->hw_pp[i]; -- phys->hw_ctl = to_dpu_hw_ctl(hw_ctl[i]); - - phys->cached_mode = crtc_state->adjusted_mode; - } -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h -@@ -354,6 +354,7 @@ struct dpu_caps { - bool has_dim_layer; - bool has_idle_pc; - bool has_3d_merge; -+ bool has_active_ctls; - /* SSPP limits */ - u32 max_linewidth; - u32 pixel_ram_size; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c -@@ -132,6 +132,7 @@ int dpu_rm_init(struct drm_device *dev, - } - rm->ctl_blks[ctl->id - CTL_0] = &hw->base; - } -+ rm->has_active_ctls = cat->caps->has_active_ctls; - - for (i = 0; i < cat->dspp_count; i++) { - struct dpu_hw_dspp *hw; -@@ -366,10 +367,15 @@ static int _dpu_rm_reserve_ctls( - int i = 0, j, num_ctls; - bool needs_split_display; - -- /* each hw_intf needs its own hw_ctrl to program its control path */ -- num_ctls = top->num_intf; -+ if (rm->has_active_ctls) { -+ num_ctls = 1; -+ needs_split_display = false; -+ } else { -+ /* each hw_intf needs its own hw_ctrl to program its control path */ -+ num_ctls = top->num_intf; - -- needs_split_display = _dpu_rm_needs_split_display(top); -+ needs_split_display = _dpu_rm_needs_split_display(top); -+ } - - for (j = 0; j < ARRAY_SIZE(rm->ctl_blks); j++) { - const struct dpu_hw_ctl *ctl; -@@ -387,7 +393,7 @@ static int _dpu_rm_reserve_ctls( - - DPU_DEBUG("ctl %d caps 0x%lX\n", j + CTL_0, features); - -- if (needs_split_display != has_split_display) -+ if (!rm->has_active_ctls && needs_split_display != has_split_display) - continue; - - ctl_idx[i] = j; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h -@@ -35,6 +35,7 @@ struct dpu_rm { - struct dpu_hw_blk *dsc_blks[DSC_MAX - DSC_0]; - struct dpu_hw_sspp *hw_sspp[SSPP_MAX - SSPP_NONE]; - struct dpu_hw_blk *cdm_blk; -+ bool has_active_ctls; - }; - - /** --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0020-drm-msm-dpu-populate-has_active_ctls-in-the-catalog.patch b/patch/kernel/archive/sm8250-6.9/0020-drm-msm-dpu-populate-has_active_ctls-in-the-catalog.patch deleted file mode 100644 index 6016c2c622c5..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0020-drm-msm-dpu-populate-has_active_ctls-in-the-catalog.patch +++ /dev/null @@ -1,157 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Dmitry Baryshkov -Date: Thu, 11 May 2023 18:44:50 +0300 -Subject: drm/msm/dpu: populate has_active_ctls in the catalog - -Set the has_active_ctls for all the platforms which need this bit. - -Signed-off-by: Dmitry Baryshkov ---- - drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_0_sm8150.h | 1 + - drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h | 1 + - drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_0_sm8250.h | 1 + - drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h | 1 + - drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_3_sm6115.h | 1 + - drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_5_qcm2290.h | 1 + - drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_0_sm8350.h | 1 + - drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h | 1 + - drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_0_sc8280xp.h | 1 + - drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_1_sm8450.h | 1 + - drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_0_sm8550.h | 1 + - 11 files changed, 11 insertions(+) - -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_0_sm8150.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_0_sm8150.h -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_0_sm8150.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_0_sm8150.h -@@ -14,6 +14,7 @@ static const struct dpu_caps sm8150_dpu_caps = { - .has_dim_layer = true, - .has_idle_pc = true, - .has_3d_merge = true, -+ .has_active_ctls = true, - .max_linewidth = 4096, - .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, - .max_hdeci_exp = MAX_HORZ_DECIMATION, -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_5_1_sc8180x.h -@@ -14,6 +14,7 @@ static const struct dpu_caps sc8180x_dpu_caps = { - .has_dim_layer = true, - .has_idle_pc = true, - .has_3d_merge = true, -+ .has_active_ctls = true, - .max_linewidth = 4096, - .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, - .max_hdeci_exp = MAX_HORZ_DECIMATION, -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_0_sm8250.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_0_sm8250.h -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_0_sm8250.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_0_sm8250.h -@@ -14,6 +14,7 @@ static const struct dpu_caps sm8250_dpu_caps = { - .has_dim_layer = true, - .has_idle_pc = true, - .has_3d_merge = true, -+ .has_active_ctls = true, - .max_linewidth = 4096, - .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, - }; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_2_sc7180.h -@@ -12,6 +12,7 @@ static const struct dpu_caps sc7180_dpu_caps = { - .max_mixer_blendstages = 0x9, - .has_dim_layer = true, - .has_idle_pc = true, -+ .has_active_ctls = true, - .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH, - .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, - }; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_3_sm6115.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_3_sm6115.h -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_3_sm6115.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_3_sm6115.h -@@ -12,6 +12,7 @@ static const struct dpu_caps sm6115_dpu_caps = { - .max_mixer_blendstages = 0x4, - .has_dim_layer = true, - .has_idle_pc = true, -+ .has_active_ctls = true, - .max_linewidth = 2160, - .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, - }; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_5_qcm2290.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_5_qcm2290.h -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_5_qcm2290.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_6_5_qcm2290.h -@@ -12,6 +12,7 @@ static const struct dpu_caps qcm2290_dpu_caps = { - .max_mixer_blendstages = 0x4, - .has_dim_layer = true, - .has_idle_pc = true, -+ .has_active_ctls = true, - .max_linewidth = 2160, - .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, - }; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_0_sm8350.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_0_sm8350.h -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_0_sm8350.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_0_sm8350.h -@@ -14,6 +14,7 @@ static const struct dpu_caps sm8350_dpu_caps = { - .has_dim_layer = true, - .has_idle_pc = true, - .has_3d_merge = true, -+ .has_active_ctls = true, - .max_linewidth = 4096, - .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, - }; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_7_2_sc7280.h -@@ -12,6 +12,7 @@ static const struct dpu_caps sc7280_dpu_caps = { - .max_mixer_blendstages = 0x7, - .has_dim_layer = true, - .has_idle_pc = true, -+ .has_active_ctls = true, - .max_linewidth = 2400, - .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, - }; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_0_sc8280xp.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_0_sc8280xp.h -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_0_sc8280xp.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_0_sc8280xp.h -@@ -14,6 +14,7 @@ static const struct dpu_caps sc8280xp_dpu_caps = { - .has_dim_layer = true, - .has_idle_pc = true, - .has_3d_merge = true, -+ .has_active_ctls = true, - .max_linewidth = 5120, - .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, - }; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_1_sm8450.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_1_sm8450.h -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_1_sm8450.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_8_1_sm8450.h -@@ -14,6 +14,7 @@ static const struct dpu_caps sm8450_dpu_caps = { - .has_dim_layer = true, - .has_idle_pc = true, - .has_3d_merge = true, -+ .has_active_ctls = true, - .max_linewidth = 5120, - .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, - }; -diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_0_sm8550.h b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_0_sm8550.h -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_0_sm8550.h -+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_0_sm8550.h -@@ -14,6 +14,7 @@ static const struct dpu_caps sm8550_dpu_caps = { - .has_dim_layer = true, - .has_idle_pc = true, - .has_3d_merge = true, -+ .has_active_ctls = true, - .max_linewidth = 5120, - .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE, - }; --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0021-drm-msm-dpu1-dpu_encoder_phys_-proper-support-for-ac.patch b/patch/kernel/archive/sm8250-6.9/0021-drm-msm-dpu1-dpu_encoder_phys_-proper-support-for-ac.patch deleted file mode 100644 index 0acb3352cdec..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0021-drm-msm-dpu1-dpu_encoder_phys_-proper-support-for-ac.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Dmitry Baryshkov -Date: Sun, 14 Mar 2021 05:03:35 +0300 -Subject: drm/msm/dpu1: dpu_encoder_phys_*: proper support for active CTLs - -Adapt dpu_encoder_phys_* to properly support active CTLs and their -features. - -Signed-off-by: Dmitry Baryshkov -[Marijn: title typo] ---- - drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c | 2 ++ - drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c | 5 ++++- - 2 files changed, 6 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c -@@ -59,6 +59,8 @@ static void _dpu_encoder_phys_cmd_update_intf_cfg( - return; - - intf_cfg.intf = phys_enc->hw_intf->idx; -+ if (phys_enc->split_role == ENC_ROLE_MASTER) -+ intf_cfg.intf_master = phys_enc->hw_intf->idx; - intf_cfg.intf_mode_sel = DPU_CTL_MODE_SEL_CMD; - intf_cfg.stream_sel = cmd_enc->stream_sel; - intf_cfg.mode_3d = dpu_encoder_helper_get_3d_blend_mode(phys_enc); -diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c -index 111111111111..222222222222 100644 ---- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c -+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_vid.c -@@ -280,6 +280,8 @@ static void dpu_encoder_phys_vid_setup_timing_engine( - if (phys_enc->hw_cdm) - intf_cfg.cdm = phys_enc->hw_cdm->idx; - intf_cfg.intf = phys_enc->hw_intf->idx; -+ if (phys_enc->split_role == ENC_ROLE_MASTER) -+ intf_cfg.intf_master = phys_enc->hw_intf->idx; - intf_cfg.intf_mode_sel = DPU_CTL_MODE_SEL_VID; - intf_cfg.stream_sel = 0; /* Don't care value for video mode */ - intf_cfg.mode_3d = dpu_encoder_helper_get_3d_blend_mode(phys_enc); -@@ -353,7 +355,8 @@ static void dpu_encoder_phys_vid_underrun_irq(void *arg) - static bool dpu_encoder_phys_vid_needs_single_flush( - struct dpu_encoder_phys *phys_enc) - { -- return phys_enc->split_role != ENC_ROLE_SOLO; -+ return !(phys_enc->hw_ctl->caps->features & BIT(DPU_CTL_ACTIVE_CFG)) && -+ phys_enc->split_role != ENC_ROLE_SOLO; - } - - static int dpu_encoder_phys_vid_control_vblank_irq( --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0022-arm64-dts-qcom-sm8250-xiaomi-elish-add-pd-negotiatio.patch b/patch/kernel/archive/sm8250-6.9/0022-arm64-dts-qcom-sm8250-xiaomi-elish-add-pd-negotiatio.patch deleted file mode 100644 index a8a5acc3ef0e..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0022-arm64-dts-qcom-sm8250-xiaomi-elish-add-pd-negotiatio.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jianhua Lu -Date: Sat, 2 Dec 2023 19:04:51 +0800 -Subject: arm64: dts: qcom: sm8250-xiaomi-elish: add pd negotiation support - ---- - arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi | 9 ++++++++- - 1 file changed, 8 insertions(+), 1 deletion(-) - -diff --git a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -index 111111111111..222222222222 100644 ---- a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -+++ b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -@@ -810,7 +810,8 @@ &pm8150b_typec { - connector { - compatible = "usb-c-connector"; - -- power-role = "source"; -+ op-sink-microwatt = <10000000>; -+ power-role = "dual"; - data-role = "dual"; - self-powered; - -@@ -819,6 +820,12 @@ PDO_FIXED_DUAL_ROLE | - PDO_FIXED_USB_COMM | - PDO_FIXED_DATA_SWAP)>; - -+ sink-pdos = ; -+ - ports { - #address-cells = <1>; - #size-cells = <0>; --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0023-arm64-dts-qcom-sm8250-xiaomi-elish-add-keyboard-supp.patch b/patch/kernel/archive/sm8250-6.9/0023-arm64-dts-qcom-sm8250-xiaomi-elish-add-keyboard-supp.patch deleted file mode 100644 index dac278e0d13c..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0023-arm64-dts-qcom-sm8250-xiaomi-elish-add-keyboard-supp.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jianhua Lu -Date: Sat, 2 Dec 2023 19:08:14 +0800 -Subject: arm64: dts: qcom: sm8250-xiaomi-elish: add keyboard support - ---- - arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi | 40 ++++++++++ - 1 file changed, 40 insertions(+) - -diff --git a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -index 111111111111..222222222222 100644 ---- a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -+++ b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -@@ -1011,6 +1011,23 @@ dout-pins { - bias-disable; - }; - }; -+ -+ keyboard_active: keyboard-active-state { -+ sleep-pins { -+ pins = "gpio155"; -+ function = "gpio"; -+ drive-strength = <8>; -+ bias-pull-up; -+ }; -+ -+ vdd-pins { -+ pins = "gpio127"; -+ function = "gpio"; -+ drive-strength = <8>; -+ bias-disable; -+ output-high; -+ }; -+ }; - }; - - &uart6 { -@@ -1052,6 +1069,29 @@ &usb_1_role_switch_out { - remote-endpoint = <&pm8150b_role_switch_in>; - }; - -+&usb_2 { -+ /* USB 2.0 only */ -+ qcom,select-utmi-as-pipe-clk; -+ status = "okay"; -+}; -+ -+&usb_2_dwc3 { -+ dr_mode = "host"; -+ maximum-speed = "high-speed"; -+ /* Remove USB3 phy */ -+ phys = <&usb_2_hsphy>; -+ phy-names = "usb2-phy"; -+}; -+ -+&usb_2_hsphy { -+ vdda-pll-supply = <&vreg_l5a_0p88>; -+ vdda18-supply = <&vreg_l12a_1p8>; -+ vdda33-supply = <&vreg_l2a_3p1>; -+ status = "okay"; -+ pinctrl-0 = <&keyboard_active>; -+ pinctrl-names = "default"; -+}; -+ - &ufs_mem_hc { - vcc-supply = <&vreg_l17a_3p0>; - vcc-max-microamp = <800000>; --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0024-arm64-dts-qcom-sm8250-oneplus-kebab-Add-device-tree-.patch b/patch/kernel/archive/sm8250-6.9/0024-arm64-dts-qcom-sm8250-oneplus-kebab-Add-device-tree-.patch deleted file mode 100644 index bff56277ba5a..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0024-arm64-dts-qcom-sm8250-oneplus-kebab-Add-device-tree-.patch +++ /dev/null @@ -1,851 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: d4n1 -Date: Fri, 19 Jan 2024 15:17:45 +0500 -Subject: arm64: dts: qcom: sm8250-oneplus-kebab: Add device tree for OnePlus - 8t - ---- - arch/arm64/boot/dts/qcom/sm8250-oneplus-kebab.dts | 832 ++++++++++ - 1 file changed, 832 insertions(+) - -diff --git a/arch/arm64/boot/dts/qcom/sm8250-oneplus-kebab.dts b/arch/arm64/boot/dts/qcom/sm8250-oneplus-kebab.dts -new file mode 100644 -index 000000000000..111111111111 ---- /dev/null -+++ b/arch/arm64/boot/dts/qcom/sm8250-oneplus-kebab.dts -@@ -0,0 +1,832 @@ -+/dts-v1/; -+ -+#include -+#include -+#include -+#include -+#include "sm8250.dtsi" -+#include "pm8150.dtsi" -+#include "pm8150b.dtsi" -+#include "pm8150l.dtsi" -+#include "pm8009.dtsi" -+ -+/* -+ * Delete following upstream (sm8250.dtsi) reserved -+ * memory mappings which are different in this device. -+ */ -+/delete-node/ &removed_mem; -+/delete-node/ &camera_mem; -+/delete-node/ &wlan_mem; -+/delete-node/ &ipa_fw_mem; -+/delete-node/ &ipa_gsi_mem; -+/delete-node/ &gpu_mem; -+/delete-node/ &npu_mem; -+/delete-node/ &video_mem; -+/delete-node/ &cvp_mem; -+/delete-node/ &cdsp_mem; -+/delete-node/ &slpi_mem; -+/delete-node/ &adsp_mem; -+/delete-node/ &spss_mem; -+/delete-node/ &cdsp_secure_heap; -+ -+/ { -+ model = "OnePlus 8T (kebab)"; -+ compatible = "oneplus,kebab", "qcom,kona", "qcom,sm8250"; -+ chassis-type = "handset"; -+ -+ qcom,msm-id = <0x164 0x10000>, <0x164 0x20001>; -+ qcom,board-id = <0x08 0x00>, <0x00 0x00>; -+ -+ aliases { -+ hsuart0 = &uart6; -+ }; -+ -+ chosen { -+ #address-cells = <2>; -+ #size-cells = <2>; -+ ranges; -+ stdout-path = "framebuffer0"; -+ -+ framebuffer0: framebuffer@9c000000 { -+ compatible = "simple-framebuffer"; -+ reg = <0x0 0x9c000000 0x0 (1080 * 2376 * 4)>; -+ width = <1080>; -+ height = <2376>; -+ stride = <(1080 * 4)>; -+ format = "a8r8g8b8"; -+ }; -+ }; -+ -+ gpio_keys: gpio-keys { -+ compatible = "gpio-keys"; -+ -+ vol-up { -+ label = "Volume Up"; -+ gpios = <&pm8150_gpios 6 GPIO_ACTIVE_LOW>; -+ linux,code = ; -+ debounce-interval = <15>; -+ linux,can-disable; -+ gpio-key,wakeup; -+ }; -+ -+ vol-down { -+ label = "Volume Down"; -+ linux,code = ; -+ gpios = <&pm8150_gpios 7 GPIO_ACTIVE_LOW>; -+ debounce-interval = <15>; -+ linux,can-disable; -+ gpio-key,wakeup; -+ }; -+ }; -+ -+ reserved-memory { -+ // removed_mem: memory@80b00000 { -+ // reg = <0x0 0x80b00000 0x0 0xcd00000>; -+ // no-map; -+ // }; -+ -+ camera_mem: memory@8dc00000 { -+ reg = <0x0 0x8dc00000 0x0 0x500000>; -+ no-map; -+ }; -+ -+ wlan_mem: memory@8e100000 { -+ reg = <0x0 0x8e100000 0x0 0x100000>; -+ no-map; -+ }; -+ -+ ipa_fw_mem: memory@8e200000 { -+ reg = <0x0 0x8e200000 0x0 0x10000>; -+ no-map; -+ }; -+ -+ ipa_gsi_mem: memory@8e210000 { -+ reg = <0x0 0x8e210000 0x0 0xa000>; -+ no-map; -+ }; -+ -+ gpu_mem: memory@8e21a000 { -+ reg = <0x0 0x8e21a000 0x0 0x2000>; -+ no-map; -+ }; -+ -+ npu_mem: memory@8e300000 { -+ reg = <0x0 0x8e300000 0x0 0x500000>; -+ no-map; -+ }; -+ -+ video_mem: memory@8e800000 { -+ reg = <0x0 0x8e800000 0x0 0x500000>; -+ no-map; -+ }; -+ -+ cvp_mem: memory@8ed00000 { -+ reg = <0x0 0x8ed00000 0x0 0x500000>; -+ no-map; -+ }; -+ -+ cdsp_mem: memory@8f200000 { -+ reg = <0x0 0x8f200000 0x0 0x1400000>; -+ no-map; -+ }; -+ -+ slpi_mem: memory@90600000 { -+ reg = <0x0 0x90600000 0x0 0x1500000>; -+ no-map; -+ }; -+ -+ adsp_mem: memory@91b00000 { -+ reg = <0x00 0x91b00000 0x00 0x2500000>; -+ no-map; -+ }; -+ -+ spss_mem: memory@94000000 { -+ reg = <0x0 0x94000000 0x0 0x100000>; -+ no-map; -+ }; -+ -+ cdsp_secure_heap: memory@94100000 { -+ reg = <0x0 0x94100000 0x0 0x4600000>; -+ no-map; -+ }; -+ -+ cont_splash_mem: memory@9c000000 { -+ reg = <0x0 0x9c000000 0x0 0x2300000>; -+ no-map; -+ }; -+ -+ // ramoops@b0000000 { -+ // compatible = "ramoops"; -+ // reg = <0x00 0xb0000000 0x00 0x400000>; -+ // record-size = <0x40000>; -+ // console-size = <0x40000>; -+ // ecc-size = <0x00>; -+ // no-map; -+ // }; -+ }; -+ -+ vph_pwr: vph-pwr-regulator { -+ compatible = "regulator-fixed"; -+ regulator-name = "vph_pwr"; -+ regulator-min-microvolt = <3700000>; -+ regulator-max-microvolt = <3700000>; -+ }; -+ -+ vreg_s6c_0p88: smpc6-regulator { -+ compatible = "regulator-fixed"; -+ regulator-name = "vreg_s6c_0p88"; -+ regulator-min-microvolt = <880000>; -+ regulator-max-microvolt = <880000>; -+ regulator-always-on; -+ vin-supply = <&vph_pwr>; -+ }; -+ -+ vreg_s4a_1p8: vreg-s4a-1p8 { -+ compatible = "regulator-fixed"; -+ regulator-name = "vreg_s4a_1p8"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-always-on; -+ }; -+ -+ qca639x: qca639x { -+ compatible = "qcom,qca6390"; -+ #power-domain-cells = <0>; -+ -+ vddaon-supply = <&vreg_s6a_0p95>; -+ vddpmu-supply = <&vreg_s2f_0p95>; -+ vddrfa1-supply = <&vreg_s2f_0p95>; -+ vddrfa2-supply = <&vreg_s8c_1p3>; -+ vddrfa3-supply = <&vreg_s5a_1p9>; -+ vddpcie1-supply = <&vreg_s8c_1p3>; -+ vddpcie2-supply = <&vreg_s5a_1p9>; -+ vddio-supply = <&vreg_s4a_1p8>; -+ -+ pinctrl-names = "default", "sleep"; -+ pinctrl-0 = <&wlan_en_active>; -+ pinctrl-1 = <&wlan_en_sleep>; -+ -+ wlan-en-gpios = <&tlmm 20 GPIO_ACTIVE_HIGH>; -+ }; -+ -+ battery: battery { -+ compatible = "simple-battery"; -+ -+ charge-full-design-microamp-hours = <4410000>; -+ energy-full-design-microwatt-hours = <17060000>; -+ voltage-max-design-microvolt = <4350000>; -+ }; -+}; -+ -+&apps_rsc { -+ regulators-0 { -+ compatible = "qcom,pm8009-1-rpmh-regulators"; -+ qcom,pmic-id = "f"; -+ -+ vdd-s1-supply = <&vph_pwr>; -+ vdd-s2-supply = <&vph_pwr>; -+ vdd-l2-supply = <&vreg_s8c_1p3>; -+ vdd-l5-l6-supply = <&vreg_bob>; -+ vdd-l7-supply = <&vreg_s4a_1p8>; -+ -+ vreg_s2f_0p95: smps2 { -+ regulator-name = "vreg_s2f_0p95"; -+ regulator-min-microvolt = <900000>; -+ regulator-max-microvolt = <952000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l1f_1p1: ldo1 { -+ regulator-name = "vreg_l1f_1p1"; -+ regulator-min-microvolt = <1104000>; -+ regulator-max-microvolt = <1104000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l2f_1p2: ldo2 { -+ regulator-name = "vreg_l2f_1p2"; -+ regulator-min-microvolt = <1200000>; -+ regulator-max-microvolt = <1200000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l6f_2p8: ldo6 { -+ regulator-name = "vreg_l6f_2p8"; -+ regulator-min-microvolt = <2800000>; -+ regulator-max-microvolt = <2800000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l7f_1p8: ldo7 { -+ regulator-name = "vreg_l7f_1p8"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-initial-mode = ; -+ }; -+ }; -+ -+ regulators-1 { -+ compatible = "qcom,pm8150-rpmh-regulators"; -+ qcom,pmic-id = "a"; -+ -+ vdd-s1-supply = <&vph_pwr>; -+ vdd-s2-supply = <&vph_pwr>; -+ vdd-s3-supply = <&vph_pwr>; -+ vdd-s4-supply = <&vph_pwr>; -+ vdd-s5-supply = <&vph_pwr>; -+ vdd-s6-supply = <&vph_pwr>; -+ vdd-s7-supply = <&vph_pwr>; -+ vdd-s8-supply = <&vph_pwr>; -+ vdd-s9-supply = <&vph_pwr>; -+ vdd-s10-supply = <&vph_pwr>; -+ vdd-l2-l10-supply = <&vreg_bob>; -+ vdd-l3-l4-l5-l18-supply = <&vreg_s6a_0p95>; -+ vdd-l6-l9-supply = <&vreg_s8c_1p3>; -+ vdd-l7-l12-l14-l15-supply = <&vreg_s5a_1p9>; -+ vdd-l13-l16-l17-supply = <&vreg_bob>; -+ -+ vreg_l2a_3p1: ldo2 { -+ regulator-name = "vreg_l2a_3p1"; -+ regulator-min-microvolt = <3072000>; -+ regulator-max-microvolt = <3072000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l3a_0p9: ldo3 { -+ regulator-name = "vreg_l3a_0p9"; -+ regulator-min-microvolt = <928000>; -+ regulator-max-microvolt = <932000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l5a_0p88: ldo5 { -+ regulator-name = "vreg_l5a_0p88"; -+ regulator-min-microvolt = <880000>; -+ regulator-max-microvolt = <880000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l6a_1p2: ldo6 { -+ regulator-name = "vreg_l6a_1p2"; -+ regulator-min-microvolt = <1200000>; -+ regulator-max-microvolt = <1200000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l7a_1p7: ldo7 { -+ regulator-name = "vreg_l7a_1p7"; -+ regulator-min-microvolt = <1704000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l9a_1p2: ldo9 { -+ regulator-name = "vreg_l9a_1p2"; -+ regulator-min-microvolt = <1200000>; -+ regulator-max-microvolt = <1200000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l10a_1p8: ldo10 { -+ regulator-name = "vreg_l10a_1p8"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l12a_1p8: ldo12 { -+ regulator-name = "vreg_l12a_1p8"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l13a_ts_3p0: ldo13 { -+ regulator-name = "vreg_l13a_ts_3p0"; -+ regulator-min-microvolt = <3008000>; -+ regulator-max-microvolt = <3008000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l14a_1p8: ldo14 { -+ regulator-name = "vreg_l14a_1p8"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1880000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l15a_1p8: ldo15 { -+ regulator-name = "vreg_l15a_1p8"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l16a_2p7: ldo16 { -+ regulator-name = "vreg_l16a_2p7"; -+ regulator-min-microvolt = <2704000>; -+ regulator-max-microvolt = <2960000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l17a_3p0: ldo17 { -+ regulator-name = "vreg_l17a_3p0"; -+ regulator-min-microvolt = <2856000>; -+ regulator-max-microvolt = <3008000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l18a_0p92: ldo18 { -+ regulator-name = "vreg_l18a_0p92"; -+ regulator-min-microvolt = <800000>; -+ regulator-max-microvolt = <912000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_s5a_1p9: smps5 { -+ regulator-name = "vreg_s5a_1p9"; -+ regulator-min-microvolt = <1904000>; -+ regulator-max-microvolt = <2000000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_s6a_0p95: smps6 { -+ regulator-name = "vreg_s6a_0p95"; -+ regulator-min-microvolt = <920000>; -+ regulator-max-microvolt = <1128000>; -+ regulator-initial-mode = ; -+ }; -+ }; -+ -+ regulators-2 { -+ compatible = "qcom,pm8150l-rpmh-regulators"; -+ qcom,pmic-id = "c"; -+ -+ vdd-s1-supply = <&vph_pwr>; -+ vdd-s2-supply = <&vph_pwr>; -+ vdd-s3-supply = <&vph_pwr>; -+ vdd-s4-supply = <&vph_pwr>; -+ vdd-s5-supply = <&vph_pwr>; -+ vdd-s6-supply = <&vph_pwr>; -+ vdd-s7-supply = <&vph_pwr>; -+ vdd-s8-supply = <&vph_pwr>; -+ vdd-l1-l8-supply = <&vreg_s4a_1p8>; -+ vdd-l2-l3-supply = <&vreg_s8c_1p3>; -+ vdd-l4-l5-l6-supply = <&vreg_bob>; -+ vdd-l7-l11-supply = <&vreg_bob>; -+ vdd-l9-l10-supply = <&vreg_bob>; -+ vdd-bob-supply = <&vph_pwr>; -+ -+ vreg_bob: bob { -+ regulator-name = "vreg_bob"; -+ regulator-min-microvolt = <3008000>; -+ regulator-max-microvolt = <4000000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l1c_1p8: ldo1 { -+ regulator-name = "vreg_l1c_1p8"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l2c_1p2: ldo2 { -+ regulator-name = "vreg_l2c_1p2"; -+ regulator-min-microvolt = <1200000>; -+ regulator-max-microvolt = <1200000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l3c_0p8: ldo3 { -+ regulator-name = "vreg_l3c_0p8"; -+ regulator-min-microvolt = <800000>; -+ regulator-max-microvolt = <800000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l4c_1p7: ldo4 { -+ regulator-name = "vreg_l4c_1p7"; -+ regulator-min-microvolt = <1704000>; -+ regulator-max-microvolt = <2928000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l5c_1p8: ldo5 { -+ regulator-name = "vreg_l5c_1p8"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <2928000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l6c_2p96: ldo6 { -+ regulator-name = "vreg_l6c_2p96"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <2960000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l7c_cam_vcm0_2p85: ldo7 { -+ regulator-name = "vreg_l7c_cam_vcm0_2p85"; -+ regulator-min-microvolt = <2856000>; -+ regulator-max-microvolt = <3104000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l8c_1p8: ldo8 { -+ regulator-name = "vreg_l8c_1p8"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l9c_2p96: ldo9 { -+ regulator-name = "vreg_l9c_2p96"; -+ regulator-min-microvolt = <2704000>; -+ regulator-max-microvolt = <2960000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l10c_3p0: ldo10 { -+ regulator-name = "vreg_l10c_3p0"; -+ regulator-min-microvolt = <3000000>; -+ regulator-max-microvolt = <3000000>; -+ regulator-initial-mode = ; -+ }; -+ -+ vreg_l11c_3p3: ldo11 { -+ regulator-name = "vreg_l11c_3p3"; -+ regulator-min-microvolt = <3296000>; -+ regulator-max-microvolt = <3296000>; -+ regulator-initial-mode = ; -+ regulator-always-on; -+ }; -+ -+ vreg_s8c_1p3: smps8 { -+ regulator-name = "vreg_s8c_1p3"; -+ regulator-min-microvolt = <1352000>; -+ regulator-max-microvolt = <1352000>; -+ regulator-initial-mode = ; -+ }; -+ }; -+}; -+ -+&adsp { -+ firmware-name = "postmarketos/adsp.mbn"; -+ status = "okay"; -+}; -+ -+&cdsp { -+ firmware-name = "postmarketos/cdsp.mbn"; -+ status = "okay"; -+}; -+ -+&dispcc { -+ status = "disabled"; -+}; -+ -+&gmu { -+ status = "okay"; -+}; -+ -+&gpi_dma0 { -+ status = "okay"; -+}; -+ -+&gpi_dma1 { -+ status = "okay"; -+}; -+ -+&gpi_dma2 { -+ status = "okay"; -+}; -+ -+&gpu { -+ status = "disabled"; -+}; -+ -+&i2c1 { -+ status = "okay"; -+ -+ nfc@28 { -+ compatible = "nxp,nxp-nci-i2c"; -+ reg = <0x28>; -+ -+ interrupt-parent = <&tlmm>; -+ interrupts = <0x6f IRQ_TYPE_LEVEL_HIGH>; -+ -+ enable-gpios = <&tlmm 83 GPIO_ACTIVE_HIGH>, -+ <&tlmm 110 GPIO_ACTIVE_HIGH>; -+ }; -+}; -+ -+&i2c5 { -+ status = "okay"; -+ -+ charger@66 { -+ compatible = "ti,bq25980"; -+ status = "ok"; -+ reg = <0x66>; -+ interrupt-parent = <&tlmm>; -+ interrupts = <0x0f 0x00>; -+ monitored-battery = <&battery>; -+ }; -+}; -+ -+&i2c16 { -+ status = "okay"; -+ -+ smart_battery: fuel-gauge@55 { -+ compatible = "ti,bq27541"; -+ reg = <0x55>; -+ monitored-battery = <&battery>; -+ }; -+}; -+ -+&i2c13 { -+ clock-frequency = <400000>; -+ status = "okay"; -+ -+ touchscreen@48 { -+ compatible = "samsung,s6sy761"; -+ reg = <0x48>; -+ interrupt-parent = <&tlmm>; -+ interrupts = <0x27 0x2008>; -+ -+ vdd-supply = <&vreg_l13a_ts_3p0>; -+ avdd-supply = <&vreg_l1c_1p8>; -+ -+ touchscreen-size-x = <1440>; -+ touchscreen-size-y = <3168>; -+ -+ pinctrl-names = "default", "suspend"; -+ pinctrl-0 = <&ts_int_active>; -+ pinctrl-1 = <&ts_rst_suspend>; -+ }; -+}; -+ -+&mdss { -+ status = "okay"; -+}; -+ -+&slpi { -+ firmware-name = "postmarketos/slpi.mbn"; -+ status = "okay"; -+}; -+ -+&pcie0 { -+ status = "okay"; -+}; -+ -+&pcie0_phy { -+ vdda-phy-supply = <&vreg_l5a_0p88>; -+ vdda-pll-supply = <&vreg_l9a_1p2>; -+ status = "okay"; -+ power-domains = <&qca639x>; -+}; -+ -+&pcie1 { -+ status = "okay"; -+}; -+ -+&pcie1_phy { -+ vdda-phy-supply = <&vreg_l5a_0p88>; -+ vdda-pll-supply = <&vreg_l9a_1p2>; -+ status = "okay"; -+}; -+ -+&pcie2 { -+ status = "okay"; -+}; -+ -+&pcie2_phy { -+ vdda-phy-supply = <&vreg_l5a_0p88>; -+ vdda-pll-supply = <&vreg_l9a_1p2>; -+ status = "okay"; -+}; -+ -+&pm8150_gpios { -+ vol_up_n: vol-up-n-state { -+ pins = "gpio6"; -+ function = "normal"; -+ power-source = <1>; -+ input-enable; -+ bias-pull-up; -+ }; -+ -+ vol_down_n: vol-down-n-state { -+ pins = "gpio7"; -+ function = "normal"; -+ power-source = <1>; -+ input-enable; -+ bias-pull-up; -+ }; -+}; -+ -+&pon_pwrkey { -+ status = "okay"; -+}; -+ -+&pon_resin { -+ linux,code = ; -+ status = "okay"; -+}; -+ -+&qup_spi4_cs_gpio { -+ drive-strength = <6>; -+ bias-disable; -+}; -+ -+&qup_spi4_data_clk { -+ drive-strength = <6>; -+ bias-disable; -+}; -+ -+&qupv3_id_0 { -+ status = "okay"; -+}; -+ -+&qupv3_id_1 { -+ status = "okay"; -+}; -+ -+&qupv3_id_2 { -+ status = "okay"; -+}; -+ -+&tlmm { -+ gpio-reserved-ranges = <28 4>, <40 4>; -+ -+ bt_en_active: bt-default-state { -+ bt-en { -+ pins = "gpio21"; -+ function = "gpio"; -+ -+ drive-strength = <16>; -+ output-low; -+ bias-pull-up; -+ }; -+ }; -+ -+ bt_en_sleep: bt-sleep-state { -+ pins = "gpio21"; -+ function = "gpio"; -+ -+ drive-strength = <0x02>; -+ output-low; -+ bias-pull-down; -+ }; -+ -+ wlan_en_active: wlan-default-state { -+ wlan-en { -+ pins = "gpio20"; -+ function = "gpio"; -+ -+ drive-strength = <16>; -+ output-low; -+ bias-pull-up; -+ }; -+ }; -+ -+ wlan_en_sleep: wlan-sleep-state { -+ pins = "gpio20"; -+ function = "gpio"; -+ -+ drive-strength = <16>; -+ output-low; -+ bias-pull-down; -+ }; -+ -+ ts_int_active: ts-int-active-state { -+ pins = "gpio38", "gpio39"; -+ function = "gpio"; -+ drive-strength = <2>; -+ bias-pull-up; -+ }; -+ -+ ts_rst_suspend: ts-rst-suspend { -+ pins = "gpio38"; -+ function = "gpio"; -+ drive-strength = <0x02>; -+ bias-pull-down; -+ }; -+}; -+ -+&uart6 { -+ status = "okay"; -+ -+ bluetooth { -+ compatible = "qcom,qca6390-bt"; -+ pinctrl-names = "default", "sleep"; -+ pinctrl-0 = <&bt_en_active>; -+ pinctrl-1 = <&bt_en_sleep>; -+ -+ power-domains = <&qca639x>; -+ enable-gpios = <&tlmm 21 GPIO_ACTIVE_HIGH>; -+ }; -+}; -+ -+&ufs_mem_hc { -+ vcc-supply = <&vreg_l17a_3p0>; -+ vcc-max-microamp = <800000>; -+ vccq-supply = <&vreg_l6a_1p2>; -+ vccq-max-microamp = <800000>; -+ vccq2-supply = <&vreg_s4a_1p8>; -+ vccq2-max-microamp = <800000>; -+ status = "okay"; -+}; -+ -+&ufs_mem_phy { -+ vdda-phy-supply = <&vreg_l5a_0p88>; -+ vdda-pll-supply = <&vreg_l9a_1p2>; -+ status = "okay"; -+}; -+ -+&usb_1 { -+ /* USB 2.0 only */ -+ qcom,select-utmi-as-pipe-clk; -+ status = "okay"; -+}; -+ -+&usb_1_dwc3 { -+ dr_mode = "peripheral"; -+ maximum-speed = "high-speed"; -+ /* Remove USB3 phy */ -+ phys = <&usb_1_hsphy>; -+ phy-names = "usb2-phy"; -+}; -+ -+&usb_1_hsphy { -+ vdda-pll-supply = <&vreg_l5a_0p88>; -+ vdda18-supply = <&vreg_l12a_1p8>; -+ vdda33-supply = <&vreg_l2a_3p1>; -+ status = "okay"; -+}; -+ -+&usb_2 { -+ status = "okay"; -+}; -+ -+&usb_2_dwc3 { -+ dr_mode = "host"; -+}; -+ -+&usb_2_hsphy { -+ status = "okay"; -+ -+ vdda-pll-supply = <&vreg_l5a_0p88>; -+ vdda33-supply = <&vreg_l2a_3p1>; -+ vdda18-supply = <&vreg_l12a_1p8>; -+}; -+ -+&usb_2_qmpphy { -+ status = "okay"; -+ -+ vdda-phy-supply = <&vreg_l9a_1p2>; -+ vdda-pll-supply = <&vreg_l18a_0p92>; -+}; -+ -+&venus { -+ firmware-name = "postmarketos/venus.mbn"; -+ status = "okay"; -+}; --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0025-arm64-dts-qcom-sm8250-xiaomi-elish-remove-framebuffe.patch b/patch/kernel/archive/sm8250-6.9/0025-arm64-dts-qcom-sm8250-xiaomi-elish-remove-framebuffe.patch deleted file mode 100644 index e401d1c25e9c..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0025-arm64-dts-qcom-sm8250-xiaomi-elish-remove-framebuffe.patch +++ /dev/null @@ -1,51 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jianhua Lu -Date: Mon, 11 Mar 2024 23:27:42 +0800 -Subject: arm64: dts: qcom: sm8250-xiaomi-elish: remove framebuffer initialized - by xbl - ---- - arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi | 20 ---------- - 1 file changed, 20 deletions(-) - -diff --git a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -index 111111111111..222222222222 100644 ---- a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -+++ b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-elish-common.dtsi -@@ -36,21 +36,6 @@ aliases { - hsuart0 = &uart6; - }; - -- chosen { -- #address-cells = <2>; -- #size-cells = <2>; -- ranges; -- -- framebuffer: framebuffer@9c000000 { -- compatible = "simple-framebuffer"; -- reg = <0x0 0x9c000000 0x0 0x2300000>; -- width = <1600>; -- height = <2560>; -- stride = <(1600 * 4)>; -- format = "a8r8g8b8"; -- }; -- }; -- - battery_l: battery-l { - compatible = "simple-battery"; - voltage-min-design-microvolt = <3870000>; -@@ -165,11 +150,6 @@ cdsp_secure_heap: cdsp-secure-heap@8e100000 { - no-map; - }; - -- cont_splash_mem: cont-splash@9c000000 { -- reg = <0x0 0x9c000000 0x0 0x2300000>; -- no-map; -- }; -- - ramoops@b0000000 { - compatible = "ramoops"; - reg = <0x0 0xb0000000 0x0 0x400000>; --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0026-of-property-fix-remote-endpoint-parse.patch b/patch/kernel/archive/sm8250-6.9/0026-of-property-fix-remote-endpoint-parse.patch deleted file mode 100644 index d4fad2c5a719..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0026-of-property-fix-remote-endpoint-parse.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Jianhua Lu -Date: Wed, 3 Apr 2024 23:03:35 +0800 -Subject: of: property: fix remote-endpoint parse - ---- - drivers/of/property.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/of/property.c b/drivers/of/property.c -index 111111111111..222222222222 100644 ---- a/drivers/of/property.c -+++ b/drivers/of/property.c -@@ -1319,7 +1319,7 @@ static struct device_node *parse_remote_endpoint(struct device_node *np, - if (index > 0 || strcmp(prop_name, "remote-endpoint")) - return NULL; - -- return of_graph_get_remote_port_parent(np); -+ return of_graph_get_remote_port(np); - } - - static const struct supplier_bindings of_supplier_bindings[] = { --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0027-drivers-spmi-spmi-pmic-arb.c-remove-warnings.patch b/patch/kernel/archive/sm8250-6.9/0027-drivers-spmi-spmi-pmic-arb.c-remove-warnings.patch deleted file mode 100644 index b3802abbb349..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0027-drivers-spmi-spmi-pmic-arb.c-remove-warnings.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: amazingfate -Date: Mon, 16 Oct 2023 13:32:19 +0800 -Subject: drivers/spmi/spmi-pmic-arb.c: remove warnings - ---- - drivers/spmi/spmi-pmic-arb.c | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/drivers/spmi/spmi-pmic-arb.c b/drivers/spmi/spmi-pmic-arb.c -index 111111111111..222222222222 100644 ---- a/drivers/spmi/spmi-pmic-arb.c -+++ b/drivers/spmi/spmi-pmic-arb.c -@@ -289,7 +289,6 @@ static int pmic_arb_wait_for_done(struct spmi_controller *ctrl, - if (status & PMIC_ARB_STATUS_FAILURE) { - dev_err(&ctrl->dev, "%s: %#x %#x: transaction failed (%#x)\n", - __func__, sid, addr, status); -- WARN_ON(1); - return -EIO; - } - --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0028-Asoc-wm_adsp-Use-xiaomi-elish-firmware-name.patch b/patch/kernel/archive/sm8250-6.9/0028-Asoc-wm_adsp-Use-xiaomi-elish-firmware-name.patch deleted file mode 100644 index 9777a6f5247a..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0028-Asoc-wm_adsp-Use-xiaomi-elish-firmware-name.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: amazingfate -Date: Tue, 24 Oct 2023 01:01:46 +0800 -Subject: Asoc: wm_adsp: Use xiaomi-elish firmware name - ---- - sound/soc/codecs/wm_adsp.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c -index 111111111111..222222222222 100644 ---- a/sound/soc/codecs/wm_adsp.c -+++ b/sound/soc/codecs/wm_adsp.c -@@ -834,7 +834,7 @@ static int wm_adsp_request_firmware_files(struct wm_adsp *dsp, - } - } else if (asoc_component_prefix) { - if (!wm_adsp_request_firmware_file(dsp, wmfw_firmware, wmfw_filename, -- cirrus_dir, NULL, -+ cirrus_dir, "xiaomi-elish", - NULL, "wmfw")) { - adsp_dbg(dsp, "Found '%s'\n", *wmfw_filename); - wm_adsp_request_firmware_file(dsp, coeff_firmware, coeff_filename, --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/0029-input-nt36523-short-the-firmware-download-delay-from.patch b/patch/kernel/archive/sm8250-6.9/0029-input-nt36523-short-the-firmware-download-delay-from.patch deleted file mode 100644 index 8701c4e1d469..000000000000 --- a/patch/kernel/archive/sm8250-6.9/0029-input-nt36523-short-the-firmware-download-delay-from.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: amazingfate -Date: Thu, 26 Oct 2023 13:13:34 +0800 -Subject: input: nt36523: short the firmware download delay from 14s to 4s - ---- - drivers/input/touchscreen/nt36523/nt36xxx.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/input/touchscreen/nt36523/nt36xxx.c b/drivers/input/touchscreen/nt36523/nt36xxx.c -index 111111111111..222222222222 100644 ---- a/drivers/input/touchscreen/nt36523/nt36xxx.c -+++ b/drivers/input/touchscreen/nt36523/nt36xxx.c -@@ -1452,7 +1452,7 @@ static int32_t nvt_ts_probe(struct spi_device *client) - } - INIT_DELAYED_WORK(&ts->nvt_fwu_work, Boot_Update_Firmware); - // please make sure boot update start after display reset(RESX) sequence -- queue_delayed_work(nvt_fwu_wq, &ts->nvt_fwu_work, msecs_to_jiffies(14000)); -+ queue_delayed_work(nvt_fwu_wq, &ts->nvt_fwu_work, msecs_to_jiffies(4000)); - #endif - - NVT_LOG("NVT_TOUCH_ESD_PROTECT is %d\n", NVT_TOUCH_ESD_PROTECT); --- -Armbian - diff --git a/patch/kernel/archive/sm8250-6.9/dt/sm8250-xiaomi-umi-common.dtsi b/patch/kernel/archive/sm8250-6.9/dt/sm8250-xiaomi-umi-common.dtsi deleted file mode 100644 index eb297472a82e..000000000000 --- a/patch/kernel/archive/sm8250-6.9/dt/sm8250-xiaomi-umi-common.dtsi +++ /dev/null @@ -1,938 +0,0 @@ -// SPDX-License-Identifier: BSD-3-Clause -/* - * Copyright (c) 2020, The Linux Foundation. All rights reserved. - */ - - /dts-v1/; - - #include - #include - #include - #include - #include - #include - #include "sm8250.dtsi" - #include "pm8150.dtsi" - #include "pm8150b.dtsi" - #include "pm8150l.dtsi" - #include "pm8009.dtsi" - - /* - * Delete following upstream (sm8250.dtsi) reserved - * memory mappings which are different on this device. - */ - /delete-node/ &adsp_mem; - /delete-node/ &cdsp_secure_heap; - /delete-node/ &slpi_mem; - /delete-node/ &spss_mem; - /delete-node/ &xbl_aop_mem; - - / { - chassis-type = "handset"; - - qcom,msm-id = ; - qcom,board-id = <0x2b 0>; - - aliases { - hsuart0 = &uart6; - }; - - chosen { - #address-cells = <2>; - #size-cells = <2>; - ranges; - - framebuffer: framebuffer@9c000000 { - compatible = "simple-framebuffer"; - reg = <0x0 0x9c000000 0x0 0x2300000>; - width = <1080>; - height = <2340>; - stride = <(1080 * 4)>; - format = "a8r8g8b8"; - }; - }; - - // battery: battery { - // compatible = "simple-battery"; - // voltage-min-design-microvolt = <3870000>; - // energy-full-design-microwatt-hours = <16600000>; - // charge-full-design-microamp-hours = <4300000>; - // }; - - gpio_keys: gpio-keys { - compatible = "gpio-keys"; - - pinctrl-names = "default"; - pinctrl-0 = <&vol_up_n>; - - vol_up { - label = "Volume Up"; - gpios = <&pm8150_gpios 6 GPIO_ACTIVE_LOW>; - linux,code = ; - debounce-interval = <15>; - linux,can-disable; - wakeup-source; - }; - - hall_key { - label = "Hall Key"; - gpios = <&tlmm 14 GPIO_ACTIVE_LOW>; - linux,code = ; - debounce-interval = <15>; - linux,can-disable; - wakeup-source; - }; - }; - - vph_pwr: vph-pwr-regulator { - compatible = "regulator-fixed"; - regulator-name = "vph_pwr"; - regulator-min-microvolt = <3700000>; - regulator-max-microvolt = <3700000>; - }; - - vreg_s6c_0p88: smpc6-regulator { - compatible = "regulator-fixed"; - regulator-name = "vreg_s6c_0p88"; - - regulator-min-microvolt = <880000>; - regulator-max-microvolt = <880000>; - regulator-always-on; - vin-supply = <&vph_pwr>; - }; - - vreg_touch_vddio: vreg-touch-vddio{ - compatible = "regulator-fixed"; - regulator-name = "vreg_touch_vddio"; - enable-active-high; - /*regulator-boot-on*/ - gpio = <&tlmm 69 0>; - }; - - wcd938x: audio-codec { - compatible = "qcom,wcd9380-codec"; - - reset-gpios = <&tlmm 32 GPIO_ACTIVE_LOW>; - - vdd-buck-supply = <&vreg_s4a_1p8>; - vdd-rxtx-supply = <&vreg_s4a_1p8>; - vdd-io-supply = <&vreg_s4a_1p8>; - vdd-mic-bias-supply = <&vreg_bob>; - - qcom,micbias1-microvolt = <2750000>; - qcom,micbias2-microvolt = <2750000>; - qcom,micbias3-microvolt = <2750000>; - qcom,micbias4-microvolt = <2750000>; - qcom,rx-device = <&wcd_rx>; - qcom,tx-device = <&wcd_tx>; - - #sound-dai-cells = <1>; - }; - - qca639x: qca639x { - compatible = "qcom,qca6390"; - #power-domain-cells = <0>; - - vddaon-supply = <&vreg_s6a_0p95>; - vddpmu-supply = <&vreg_s2f_0p95>; - vddrfa1-supply = <&vreg_s2f_0p95>; - vddrfa2-supply = <&vreg_s8c_1p35>; - vddrfa3-supply = <&vreg_s5a_1p9>; - vddpcie1-supply = <&vreg_s8c_1p35>; - vddpcie2-supply = <&vreg_s5a_1p9>; - vddio-supply = <&vreg_s4a_1p8>; - - pinctrl-names = "default"; - pinctrl-0 = <&wlan_en_state>; - - wlan-en-gpios = <&tlmm 20 GPIO_ACTIVE_HIGH>; - }; - - reserved-memory { - xbl_aop_mem: xbl-aop@80600000 { - reg = <0x0 0x80600000 0x0 0x260000>; - no-map; - }; - - slpi_mem: slpi@88c00000 { - reg = <0x0 0x88c00000 0x0 0x2f00000>; - no-map; - }; - - adsp_mem: adsp@8bb00000 { - reg = <0x0 0x8bb00000 0x0 0x2500000>; - no-map; - }; - - spss_mem: spss@8e000000 { - reg = <0x0 0x8e000000 0x0 0x100000>; - no-map; - }; - - cdsp_secure_heap: cdsp-secure-heap@8e100000 { - reg = <0x0 0x8e100000 0x0 0x4600000>; - no-map; - }; - - cont_splash_mem: cont-splash@9c000000 { - reg = <0x0 0x9c000000 0x0 0x2300000>; - no-map; - }; - }; -}; - -&adsp { - firmware-name = "qcom/sm8250/xiaomi/elish/adsp.mbn"; - status = "okay"; -}; - -&apps_rsc { - regulators-0 { - compatible = "qcom,pm8150-rpmh-regulators"; - qcom,pmic-id = "a"; - - vdd-s1-supply = <&vph_pwr>; - vdd-s2-supply = <&vph_pwr>; - vdd-s3-supply = <&vph_pwr>; - vdd-s4-supply = <&vph_pwr>; - vdd-s5-supply = <&vph_pwr>; - vdd-s6-supply = <&vph_pwr>; - vdd-s7-supply = <&vph_pwr>; - vdd-s8-supply = <&vph_pwr>; - vdd-s9-supply = <&vph_pwr>; - vdd-s10-supply = <&vph_pwr>; - vdd-l1-l8-l11-supply = <&vreg_s6c_0p88>; - vdd-l2-l10-supply = <&vreg_bob>; - vdd-l3-l4-l5-l18-supply = <&vreg_s6a_0p95>; - vdd-l6-l9-supply = <&vreg_s8c_1p35>; - vdd-l7-l12-l14-l15-supply = <&vreg_s5a_1p9>; - vdd-l13-l16-l17-supply = <&vreg_bob>; - - vreg_s4a_1p8: smps4 { - regulator-name = "vreg_s4a_1p8"; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1920000>; - regulator-initial-mode = ; - }; - - vreg_s5a_1p9: smps5 { - regulator-name = "vreg_s5a_1p9"; - regulator-min-microvolt = <1900000>; - regulator-max-microvolt = <2040000>; - regulator-initial-mode = ; - }; - - vreg_s6a_0p95: smps6 { - regulator-name = "vreg_s6a_0p95"; - regulator-min-microvolt = <950000>; - regulator-max-microvolt = <1128000>; - regulator-initial-mode = ; - }; - - vreg_l2a_3p1: ldo2 { - regulator-name = "vreg_l2a_3p1"; - regulator-min-microvolt = <3072000>; - regulator-max-microvolt = <3072000>; - regulator-initial-mode = ; - }; - - vreg_l3a_0p9: ldo3 { - regulator-name = "vreg_l3a_0p9"; - regulator-min-microvolt = <928000>; - regulator-max-microvolt = <932000>; - regulator-initial-mode = ; - }; - - /* L4 - lmx.lvl (ARC) */ - - vreg_l5a_0p88: ldo5 { - regulator-name = "vreg_l5a_0p88"; - regulator-min-microvolt = <880000>; - regulator-max-microvolt = <880000>; - regulator-initial-mode = ; - }; - - vreg_l6a_1p2: ldo6 { - regulator-name = "vreg_l6a_1p2"; - regulator-min-microvolt = <1200000>; - regulator-max-microvolt = <1200000>; - regulator-initial-mode = ; - }; - - /* L7 is unused. */ - - vreg_l9a_1p2: ldo9 { - regulator-name = "vreg_l9a_1p2"; - regulator-min-microvolt = <1200000>; - regulator-max-microvolt = <1200000>; - regulator-initial-mode = ; - }; - - /* L10 is unused, L11 - lcx.lvl (ARC) */ - - vreg_l12a_1p8: ldo12 { - regulator-name = "vreg_l12a_1p8"; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; - regulator-initial-mode = ; - }; - - vreg_l13a_3p0: ldo13 { - regulator-name = "vreg_l13a_3p0"; - regulator-min-microvolt = <3000000>; - regulator-max-microvolt = <3008000>; - regulator-initial-mode = ; - }; - - vreg_l14a_1p88: ldo14 { - regulator-name = "vreg_l14a_1p88"; - regulator-min-microvolt = <1880000>; - regulator-max-microvolt = <1880000>; - regulator-initial-mode = ; - }; - - /* L15 & L16 are unused. */ - - vreg_l17a_3p0: ldo17 { - regulator-name = "vreg_l17a_3p0"; - regulator-min-microvolt = <2856000>; - regulator-max-microvolt = <3008000>; - regulator-initial-mode = ; - }; - - vreg_l18a_0p9: ldo18 { - regulator-name = "vreg_l18a_0p9"; - regulator-min-microvolt = <912000>; - regulator-max-microvolt = <912000>; - regulator-initial-mode = ; - }; - }; - - regulators-1 { - compatible = "qcom,pm8150l-rpmh-regulators"; - qcom,pmic-id = "c"; - - vdd-s1-supply = <&vph_pwr>; - vdd-s2-supply = <&vph_pwr>; - vdd-s3-supply = <&vph_pwr>; - vdd-s4-supply = <&vph_pwr>; - vdd-s5-supply = <&vph_pwr>; - vdd-s6-supply = <&vph_pwr>; - vdd-s7-supply = <&vph_pwr>; - vdd-s8-supply = <&vph_pwr>; - vdd-l1-l8-supply = <&vreg_s4a_1p8>; - vdd-l2-l3-supply = <&vreg_s8c_1p35>; - vdd-l4-l5-l6-supply = <&vreg_bob>; - vdd-l7-l11-supply = <&vreg_bob>; - vdd-l9-l10-supply = <&vreg_bob>; - vdd-bob-supply = <&vph_pwr>; - - vreg_bob: bob { - regulator-name = "vreg_bob"; - regulator-min-microvolt = <3008000>; - regulator-max-microvolt = <3960000>; - regulator-initial-mode = ; - }; - - vreg_s8c_1p35: smps8 { - regulator-name = "vreg_s8c_1p35"; - regulator-min-microvolt = <1350000>; - regulator-max-microvolt = <1400000>; - regulator-initial-mode = ; - }; - - vreg_l1c_1p8: ldo1 { - regulator-name = "vreg_l1c_1p8"; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; - regulator-initial-mode = ; - }; - - vreg_l2c_1p2: ldo2 { - regulator-name = "vreg_l2c_1p2"; - regulator-min-microvolt = <1200000>; - regulator-max-microvolt = <1200000>; - regulator-initial-mode = ; - }; - - vreg_l3c_0p92: ldo3 { - regulator-name = "vreg_l3c_0p92"; - regulator-min-microvolt = <920000>; - regulator-max-microvolt = <920000>; - regulator-initial-mode = ; - }; - - vreg_l4c_1p7: ldo4 { - regulator-name = "vreg_l4c_1p7"; - regulator-min-microvolt = <1704000>; - regulator-max-microvolt = <2928000>; - regulator-initial-mode = ; - }; - - vreg_l5c_1p8: ldo5 { - regulator-name = "vreg_l5c_1p8"; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <2928000>; - regulator-initial-mode = ; - }; - - vreg_l6c_2p9: ldo6 { - regulator-name = "vreg_l6c_2p9"; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <2960000>; - regulator-initial-mode = ; - }; - - vreg_l7c_cam_vcm0_2p85: ldo7 { - regulator-name = "vreg_l7c_cam_vcm0_2p85"; - regulator-min-microvolt = <2856000>; - regulator-max-microvolt = <3104000>; - regulator-initial-mode = ; - }; - - vreg_l8c_1p8: ldo8 { - regulator-name = "vreg_l8c_1p8"; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; - regulator-initial-mode = ; - }; - - vreg_l9c_2p9: ldo9 { - regulator-name = "vreg_l9c_2p9"; - regulator-min-microvolt = <2704000>; - regulator-max-microvolt = <2960000>; - regulator-initial-mode = ; - }; - - vreg_l10c_3p0: ldo10 { - regulator-name = "vreg_l10c_3p0"; - regulator-min-microvolt = <3000000>; - regulator-max-microvolt = <3000000>; - regulator-initial-mode = ; - }; - - vreg_l11c_3p3: ldo11 { - regulator-name = "vreg_l11c_3p3"; - regulator-min-microvolt = <3000000>; - regulator-max-microvolt = <3312000>; - regulator-initial-mode = ; - }; - }; - - regulators-2 { - compatible = "qcom,pm8009-rpmh-regulators"; - qcom,pmic-id = "f"; - - vdd-s1-supply = <&vph_pwr>; - vdd-s2-supply = <&vreg_bob>; - vdd-l2-supply = <&vreg_s8c_1p35>; - vdd-l5-l6-supply = <&vreg_bob>; - vdd-l7-supply = <&vreg_s4a_1p8>; - - vreg_s1f_1p2: smps1 { - regulator-name = "vreg_s1f_1p2"; - regulator-min-microvolt = <1200000>; - regulator-max-microvolt = <1200000>; - regulator-initial-mode = ; - }; - - vreg_s2f_0p95: smps2 { - regulator-name = "vreg_s2f_0p95"; - regulator-min-microvolt = <950000>; - regulator-max-microvolt = <1100000>; - regulator-initial-mode = ; - }; - - /* L1 is unused. */ - - vreg_l2f_1p3: ldo2 { - regulator-name = "vreg_l2f_1p3"; - regulator-min-microvolt = <1304000>; - regulator-max-microvolt = <1304000>; - regulator-initial-mode = ; - }; - - /* L3 & L4 are unused. */ - - vreg_l5f_2p8: ldo5 { - regulator-name = "vreg_l5f_2p85"; - regulator-min-microvolt = <2800000>; - regulator-max-microvolt = <2800000>; - regulator-initial-mode = ; - }; - - vreg_l6f_2p8: ldo6 { - regulator-name = "vreg_l6f_2p8"; - regulator-min-microvolt = <2800000>; - regulator-max-microvolt = <2800000>; - regulator-initial-mode = ; - }; - - vreg_l7f_1p8: ldo7 { - regulator-name = "vreg_l7f_1p8"; - regulator-min-microvolt = <1800000>; - regulator-max-microvolt = <1800000>; - regulator-initial-mode = ; - }; - }; -}; - -&cdsp { - firmware-name = "qcom/sm8250/xiaomi/elish/cdsp.mbn"; - status = "okay"; -}; - -&gmu { - status = "okay"; -}; - -&gpu { - tatus = "okay"; - - zap-shader { - memory-region = <&gpu_mem>; - firmware-name = "qcom/sm8250/xiaomi/elish/a650_zap.mbn"; - }; -}; - -&qupv3_id_0 { - status = "okay"; -}; - -&qupv3_id_1 { - status = "okay"; -}; - -&qupv3_id_2 { - status = "okay"; -}; - -&gpi_dma0 { - status = "okay"; -}; - -&gpi_dma1 { - status = "okay"; -}; - -&gpi_dma2 { - status = "okay"; -}; - -&i2c3 { - clock-frequency = <400000>; - status = "okay"; - - cs35l41_brh: speaker-amp@40 { - compatible = "cirrus,cs35l41"; - reg = <0x40>; - interrupt-parent = <&tlmm>; - interrupts = <113 IRQ_TYPE_LEVEL_LOW>; - reset-gpios = <&tlmm 114 GPIO_ACTIVE_HIGH>; - cirrus,temp-warn_threshold = <3>; - cirrus,boost-peak-milliamp = <4000>; - cirrus,boost-ind-nanohenry = <1000>; - cirrus,boost-cap-microfarad = <15>; - cirrus,asp-sdout-hiz = <1>; - cirrus,gpio2-src-select = <4>; - cirrus,gpio2-output-enable; - sound-name-prefix = "BRH"; - #sound-dai-cells = <1>; - }; - - cs35l41_blh: speaker-amp@42 { - compatible = "cirrus,cs35l41"; - reg = <0x42>; - interrupt-parent = <&tlmm>; - interrupts = <112 IRQ_TYPE_LEVEL_LOW>; - reset-gpios = <&tlmm 114 GPIO_ACTIVE_HIGH>; - cirrus,boost-peak-milliamp = <4000>; - cirrus,boost-ind-nanohenry = <1000>; - cirrus,boost-cap-microfarad = <15>; - cirrus,asp-sdout-hiz = <1>; - cirrus,gpio2-src-select = <4>; - cirrus,gpio2-output-enable; - sound-name-prefix = "BLH"; - #sound-dai-cells = <1>; - }; -}; - -&i2c13 { - clock-frequency = <400000>; - status = "okay"; - - touchscreen: fts@49 { - status = "okay"; - compatible = "st,fts"; - reg = <0x49>; - interrupt-parent = <&tlmm>; - interrupts = <39 0x2008>; - pinctrl-names = "pmx_ts_active", "pmx_ts_suspend"; - pinctrl-0 = <&ts_active>; - pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>; - avdd-supply = <&vreg_touch_vddio>; - vdd-supply = <&vreg_l1c_1p8>; - fts,pwr-reg-name = "avdd"; - fts,bus-reg-name = "vdd"; - fts,irq-gpio = <&tlmm 39 0x2008>; - fts,irq-gpio-name = "fts_irq"; - fts,reset-gpio-enable; - fts,reset-gpio = <&tlmm 38 0x00>; - fts,reset-gpio-name = "fts_rst"; - fts,irq-flags = <0x2008>; /* IRQF_ONESHOT | IRQF_TRIGGER_LOW */ - fts,x-max = <1080>; - fts,y-max = <2340>; - // fts,fod-lx = <421>; - // fts,fod-ly = <1788>; - // fts,fod-x-size = <238>; - // fts,fod-y-size = <238>; - fts,default-fw-name = "st_fts_j2.ftb"; - fts,config-array-size = <2>; - fts,dump-click-count; - // fts,support-fod; - fts,touch-up-threshold-min = <40>; - fts,touch-up-threshold-max = <120>; - fts,touch-up-threshold-def = <80>; - fts,touch-tolerance-min = <5>; - fts,touch-tolerance-max = <35>; - fts,touch-tolerance-def = <25>; - fts,touch-idletime-min = <0>; - fts,touch-idletime-max = <12750>; - fts,touch-idletime-def = <12450>; - /*edge filter rects in gamemode*/ - fts,cornerfilter-area-step1 = <100>; - fts,cornerfilter-area-step2 = <170>; - fts,cornerfilter-area-step3 = <250>; - fts,touch-deadzone-filter-ver = <2 0 0 0 0 0 0 0 - 2 1 0 0 0 0 0 0 - 2 2 0 0 5 2339 0 0 - 2 3 1074 0 1079 2339 0 0>; - fts,touch-deadzone-filter-hor = <2 0 0 0 1079 5 0 0 - 2 1 0 2334 1079 2339 0 0 - 2 2 0 0 5 2339 0 0 - 2 3 1074 0 1079 2339 0 0>; - fts,touch-edgezone-filter-ver = <1 0 0 0 0 0 0 0 - 1 1 0 0 0 0 0 0 - 1 2 0 0 40 2339 0 0 - 1 3 1039 0 1079 2339 0 0>; - fts,touch-edgezone-filter-hor = <1 0 0 0 1079 40 0 0 - 1 1 0 2299 1079 2339 0 0 - 1 2 0 0 40 2339 0 0 - 1 3 1039 0 1079 2339 0 0>; - fts,touch-cornerzone-filter-ver = <0 0 0 0 0 0 0 0 - 0 1 0 0 0 0 0 0 - 0 2 0 2039 150 2339 0 0 - 0 3 929 2039 1079 2339 0 0>; - fts,touch-cornerzone-filter-hor1 = <0 0 0 0 170 170 0 0 - 0 1 0 0 0 0 0 0 - 0 2 0 2169 170 2339 0 0 - 0 3 0 0 0 0 0 0>; - fts,touch-cornerzone-filter-hor2 = <0 0 0 0 0 0 0 0 - 0 1 909 0 1079 170 0 0 - 0 2 0 0 0 0 0 0 - 0 3 909 2169 1079 2339 0 0>; - fts,cfg_0 { - fts,tp-vendor = <0x38>; - fts,tp-module = <0>; - fts,fw-name = "st_fts_j2_1.ftb"; - fts,limit-name = "stm_fts_production_limits_1.csv"; - }; - fts,cfg_1 { - fts,tp-vendor = <0x42>; - fts,tp-module = <1>; - fts,fw-name = "st_fts_j2_2.ftb"; - fts,limit-name = "stm_fts_production_limits_2.csv"; - }; - }; -}; - -//TODO: Port the CHARGER Driver -&i2c15{ - status = "disabled"; - - // bq25970: bq25970-standalone@66 { - // compatible = "ti,bq2597x-standalone"; - // reg = <0x66>; - // interrupt-parent = <&tlmm>; - // interrupts = <68 0x2002>; - // pinctrl-names = "default"; - // pinctrl-0 = <&bq2597x_master_int_default>; - - // ti,bq2597x,bat-ovp-alarm-disable; - // ti,bq2597x,bat-ocp-disable; - // ti,bq2597x,bat-ocp-alarm-disable; - // ti,bq2597x,bat-ucp-alarm-disable; - // ti,bq2597x,bat-ucp-disable; - - // ti,bq2597x,bat-therm-disable; - // ti,bq2597x,bus-therm-disable; - // ti,bq2597x,die-therm-disable; - - // ti,bq2597x,bat-ovp-threshold = <4550>; - // ti,bq2597x,bat-ovp-alarm-threshold = <4525>; - - // ti,bq2597x,bus-ovp-threshold = <12000>; - // ti,bq2597x,bus-ovp-alarm-threshold = <11000>; - // ti,bq2597x,bus-ocp-threshold = <3750>; - // ti,bq2597x,bus-ocp-alarm-threshold = <3500>; - - // ti,bq2597x,bat-therm-threshold = <0x15>;/*4.1%*/ - // ti,bq2597x,bus-therm-threshold = <0x15>;/*4.1%*/ - // ti,bq2597x,die-therm-threshold = <145>; - // ti,bq2597x,ac-ovp-threshold = <14>; - // }; -}; - -//TODO: There are some issues with DSC CMD Mode that need to be fixed,https://gitlab.freedesktop.org/drm/msm/-/issues/42 -// &mdss { -// status = "okay"; -// }; - -// &mdss_dsi0 { -// vdda-supply = <&vreg_l9a_1p2>; -// qcom,master-dsi; -// status = "okay"; - -// display_panel: panel@0 { -// reg = <0>; -// vddio-supply = <&vreg_l14a_1p88>; -// reset-gpios = <&tlmm 12 0>; - -// port { -// panel_in: endpoint { -// remote-endpoint = <&mdss_dsi0_out>; -// }; -// }; -// }; -// }; - -// &mdss_dsi0_out { -// data-lanes = <0 1 2 3>; -// remote-endpoint = <&panel_in>; -// }; - -// &mdss_dsi0_phy { -// vdds-supply = <&vreg_l5a_0p88>; -// status = "okay"; -// }; - -&pcie0 { - status = "okay"; -}; - -&pcie0_phy { - vdda-phy-supply = <&vreg_l5a_0p88>; - vdda-pll-supply = <&vreg_l9a_1p2>; - status = "okay"; - - /* Power on QCA639x chip, otherwise PCIe bus timeouts */ - power-domains = <&qca639x>; -}; - -&pm8150_gpios { - vol_up_n: vol-up-n-state { - pins = "gpio6"; - function = "normal"; - power-source = <1>; - input-enable; - bias-pull-up; - }; -}; - -&pon_pwrkey { - status = "okay"; -}; - -&pon_resin { - linux,code = ; - status = "okay"; -}; - -&slpi { - firmware-name = "qcom/sm8250/xiaomi/elish/slpi.mbn"; - status = "disabled"; -}; - -&q6afedai { - dai@20 { - reg = ; - qcom,sd-lines = <0>; - }; -}; - -&q6asmdai { - dai@0 { - reg = <0>; - }; -}; - -&swr1 { - status = "okay"; - - wcd_rx: wcd9380-rx@0,4 { - compatible = "sdw20217010d00"; - reg = <0x0d 0x1170224>; - qcom,rx-port-mapping = <1 2 3 4 5>; - }; -}; - -&swr2 { - status = "okay"; - - wcd_tx: wcd9380-tx@0,3 { - compatible = "sdw20217010d00"; - reg = <0x0d 0x1170223>; - qcom,tx-port-mapping = <2 3 4 5>; - }; -}; - -&sound { - compatible = "qcom,sm8250-sndcard"; - model = "Xiaomi Mi 10"; - pinctrl-names = "default"; - pinctrl-0 = <&tert_mi2s_active>; - - mm1-dai-link { - link-name = "MultiMedia1"; - - cpu { - sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA1>; - }; - }; - - speaker-dai-link { - link-name = "Tertiary MI2S Playback"; - - cpu { - sound-dai = <&q6afedai TERTIARY_MI2S_RX>; - }; - - platform { - sound-dai = <&q6routing>; - }; - - codec { - sound-dai = <&cs35l41_brh 0>, <&cs35l41_blh 0>; - }; - }; -}; - -&tlmm { - gpio-reserved-ranges = <28 4>, <40 4>, <52 4>; - - mdss_te_default: mdss-te-default-state { - pins = "gpio66"; - function = "mdp_vsync"; - drive-strength = <2>; - bias-pull-down; - }; - - bt_en_state: bt-default-state { - bt-en-pins { - pins = "gpio21"; - function = "gpio"; - - drive-strength = <16>; - output-low; - bias-pull-up; - }; - }; - - wlan_en_state: wlan-default-state { - wlan-en-pins { - pins = "gpio20"; - function = "gpio"; - - drive-strength = <16>; - output-low; - bias-pull-up; - }; - }; - - key_confirm: key_confirm_default { - pins = "gpio7"; - function = "normal"; - input-enable; - bias-pull-up; - }; - - ts_active: ts-active { - pins = "gpio38", "gpio39"; - function = "gpio"; - drive-strength = <2>; - bias-pull-up; - }; - - ts_int_suspend: ts-int-suspend { - pins = "gpio39"; - function = "gpio"; - drive-strength = <2>; - bias-pull-down; - }; - - ts_reset_suspend: ts-reset-suspend { - pins = "gpio38"; - function = "gpio"; - drive-strength = <2>; - bias-pull-down; - }; -}; - -&uart6 { - status = "okay"; - - bluetooth { - compatible = "qcom,qca6390-bt"; - - pinctrl-names = "default"; - pinctrl-0 = <&bt_en_state>; - - power-domains = <&qca639x>; - enable-gpios = <&tlmm 21 GPIO_ACTIVE_HIGH>; - swctrl-gpios = <&tlmm 124 GPIO_ACTIVE_HIGH>; - }; -}; - -&ufs_mem_hc { - vcc-supply = <&vreg_l17a_3p0>; - vcc-max-microamp = <800000>; - vccq-supply = <&vreg_l6a_1p2>; - vccq-max-microamp = <800000>; - vccq2-supply = <&vreg_s4a_1p8>; - vccq2-max-microamp = <800000>; - status = "okay"; -}; - -&ufs_mem_phy { - vdda-phy-supply = <&vreg_l5a_0p88>; - vdda-pll-supply = <&vreg_l9a_1p2>; - status = "okay"; -}; - -&usb_1 { - /* USB 2.0 only */ - qcom,select-utmi-as-pipe-clk; - status = "okay"; -}; - -&usb_1_dwc3 { - dr_mode = "otg"; - maximum-speed = "high-speed"; - /* Remove USB3 phy */ - phys = <&usb_1_hsphy>; - phy-names = "usb2-phy"; - usb-role-switch; -}; - -&usb_1_hsphy { - vdda-pll-supply = <&vreg_l5a_0p88>; - vdda18-supply = <&vreg_l12a_1p8>; - vdda33-supply = <&vreg_l2a_3p1>; - status = "okay"; -}; - -&venus { - firmware-name = "qcom/sm8250/xiaomi/elish/venus.mbn"; - status = "okay"; -}; - \ No newline at end of file diff --git a/patch/kernel/archive/sm8250-6.9/dt/sm8250-xiaomi-umi-csot.dts b/patch/kernel/archive/sm8250-6.9/dt/sm8250-xiaomi-umi-csot.dts deleted file mode 100644 index 912471898d53..000000000000 --- a/patch/kernel/archive/sm8250-6.9/dt/sm8250-xiaomi-umi-csot.dts +++ /dev/null @@ -1,13 +0,0 @@ -/dts-v1/; - -#include "sm8250-xiaomi-umi-common.dtsi" - -/ { - model = "Xiaomi Mi 10 (CSOT)"; - compatible = "xiaomi,umi", "qcom,sm8250"; -}; - -// &display_panel { -// compatible = "xiaomi-umi-csot"; -// status = "okay"; -// }; diff --git a/patch/kernel/archive/sm8250-6.9/dt/sm8250-xiaomi-umi-sms.dts b/patch/kernel/archive/sm8250-6.9/dt/sm8250-xiaomi-umi-sms.dts deleted file mode 100644 index 21223ff425cc..000000000000 --- a/patch/kernel/archive/sm8250-6.9/dt/sm8250-xiaomi-umi-sms.dts +++ /dev/null @@ -1,13 +0,0 @@ -/dts-v1/; - -#include "sm8250-xiaomi-umi-common.dtsi" - -/ { - model = "Xiaomi Mi 10 (SMS)"; - compatible = "xiaomi,umi", "qcom,sm8250"; -}; - -// &display_panel { -// compatible = "xiaomi-umi-sms"; -// status = "okay"; -// };