diff --git a/Documentation/devicetree/bindings/arm/qcom.yaml b/Documentation/devicetree/bindings/arm/qcom.yaml index 1a5fb889a4440f..dfe17d077a2be7 100644 --- a/Documentation/devicetree/bindings/arm/qcom.yaml +++ b/Documentation/devicetree/bindings/arm/qcom.yaml @@ -867,6 +867,8 @@ properties: - items: - enum: - xiaomi,lavender + - xiaomi,lavender-boe + - xiaomi,lavender-tianma - const: qcom,sdm660 - items: diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile index 37584d2480e57b..f70493c13782c2 100644 --- a/arch/arm64/boot/dts/qcom/Makefile +++ b/arch/arm64/boot/dts/qcom/Makefile @@ -185,7 +185,8 @@ dtb-$(CONFIG_ARCH_QCOM) += sdm636-xiaomi-tulip.dtb dtb-$(CONFIG_ARCH_QCOM) += sdm660-xiaomi-clover.dtb dtb-$(CONFIG_ARCH_QCOM) += sdm660-xiaomi-clover-plus.dtb dtb-$(CONFIG_ARCH_QCOM) += sdm660-xiaomi-jasmine.dtb -dtb-$(CONFIG_ARCH_QCOM) += sdm660-xiaomi-lavender.dtb +dtb-$(CONFIG_ARCH_QCOM) += sdm660-xiaomi-lavender-tianma.dtb +dtb-$(CONFIG_ARCH_QCOM) += sdm660-xiaomi-lavender-boe.dtb dtb-$(CONFIG_ARCH_QCOM) += sdm660-xiaomi-platina.dtb dtb-$(CONFIG_ARCH_QCOM) += sdm670-google-sargo.dtb dtb-$(CONFIG_ARCH_QCOM) += sdm845-cheza-r1.dtb diff --git a/arch/arm64/boot/dts/qcom/sdm660-xiaomi-lavender-boe.dts b/arch/arm64/boot/dts/qcom/sdm660-xiaomi-lavender-boe.dts new file mode 100644 index 00000000000000..1d76db90dbdb88 --- /dev/null +++ b/arch/arm64/boot/dts/qcom/sdm660-xiaomi-lavender-boe.dts @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) 2024, Barnabas Czeman + */ + +/dts-v1/; + +#include "sdm660-xiaomi-lavender-common.dtsi" + +/ { + model = "Xiaomi Redmi Note 7 (Boe)"; + compatible = "xiaomi,lavender-boe", "qcom,sdm660"; +}; + +&panel { + compatible = "boe,td4320"; +}; diff --git a/arch/arm64/boot/dts/qcom/sdm660-xiaomi-lavender.dts b/arch/arm64/boot/dts/qcom/sdm660-xiaomi-lavender-common.dtsi similarity index 88% rename from arch/arm64/boot/dts/qcom/sdm660-xiaomi-lavender.dts rename to arch/arm64/boot/dts/qcom/sdm660-xiaomi-lavender-common.dtsi index 983a1ead0b9710..addace3330b134 100644 --- a/arch/arm64/boot/dts/qcom/sdm660-xiaomi-lavender.dts +++ b/arch/arm64/boot/dts/qcom/sdm660-xiaomi-lavender-common.dtsi @@ -12,6 +12,8 @@ #include #include +/delete-node/ &zap_shader_region; + / { model = "Xiaomi Redmi Note 7"; compatible = "xiaomi,lavender", "qcom,sdm660"; @@ -36,6 +38,10 @@ height = <2340>; stride = <(1080 * 4)>; format = "a8r8g8b8"; + + /* In order to allow simledrm framebuffer to know + * physical dimensions */ + panel = <&panel>; }; }; @@ -86,6 +92,15 @@ reg = <0x0 0x9d400000 0x0 0x23ff000>; no-map; }; + + /* from downstream dmesg: + * subsys-pil-tz soc:qcom,kgsl-hyp: a512_zap: loading from + * 0x00000000fc400000 to 0x00000000fc402000 */ + zap_shader_region: gpu@fc400000 { + compatible = "shared-dma-pool"; + reg = <0x0 0xfc400000 0x0 0x2000>; + no-map; + }; }; /* @@ -98,27 +113,16 @@ }; }; -&anoc2_smmu { +&adreno_gpu { status = "okay"; + + zap-shader { + memory-region = <&zap_shader_region>; + }; }; -&blsp_i2c1 { +&anoc2_smmu { status = "okay"; - - /* Novatek NT36672A touchscreen */ - touchscreen@62 { - compatible = "novatek,nt36525"; - reg = <0x62>; - vdd-supply = <&vreg_l11a_1p8>; - interrupt-parent = <&tlmm>; - interrupts = <67 IRQ_TYPE_EDGE_RISING>; - pinctrl-names = "default", "sleep"; - pinctrl-0 = <&ts_pins_active>; - pinctrl-1 = <&ts_int_sleep &ts_rst_sleep>; - reset-gpios = <&tlmm 66 GPIO_ACTIVE_HIGH>; - touchscreen-size-x = <1080>; - touchscreen-size-y = <2340>; - }; }; &blsp1_uart2 { @@ -140,10 +144,70 @@ }; }; +&gpucc { + status = "okay"; +}; + +&kgsl_smmu { + status = "okay"; +}; + &lpass_smmu { status = "okay"; }; +&mdp { + status = "okay"; +}; + +&mdss { + status = "okay"; +}; + +&mdss_dsi0 { + status = "okay"; + + #address-cells = <1>; + #size-cells = <0>; + + vdd-supply = <&vreg_l1b_0p925>; + vdda-supply = <&vreg_l1a_1p225>; + + panel: panel@0 { + reg = <0>; + + reset-gpios = <&tlmm 53 GPIO_ACTIVE_LOW>; + + backlight = <&pm660l_wled>; + + pinctrl-names = "default"; + pinctrl-0 = <&mdss_dsi_active &mdss_te_active>; + + width-mm = <67>; + height-mm = <145>; + + 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 { + vcca-supply = <&vreg_l1b_0p925>; + status = "okay"; +}; + +&mmss_smmu { + status = "okay"; +}; + &pm660_charger { monitored-battery = <&battery>; @@ -487,26 +551,19 @@ &tlmm { gpio-reserved-ranges = <8 4>; - ts_pins_active: ts-pins-active-state { - pins = "gpio66", "gpio67"; + mdss_dsi_active: mdss_dsi_active { function = "gpio"; - drive-strength = <16>; - bias-pull-up; + pins = "gpio53"; + drive-strength = <8>; + bias-disable; }; - ts_rst_sleep: ts-rst-sleep-state { - pins = "gpio66"; + mdss_te_active: mdss_te_active { + pins = "gpio59"; function = "gpio"; drive-strength = <2>; bias-pull-down; }; - - ts_int_sleep: ts-int-sleep-state { - pins = "gpio67"; - function = "gpio"; - drive-strength = <2>; - bias-disable; - }; }; &usb3 { @@ -519,7 +576,6 @@ }; &venus { - firmware-name = "qcom/venus-4.4/venus.mdt"; status = "okay"; }; diff --git a/arch/arm64/boot/dts/qcom/sdm660-xiaomi-lavender-tianma.dts b/arch/arm64/boot/dts/qcom/sdm660-xiaomi-lavender-tianma.dts new file mode 100644 index 00000000000000..f14e214921b46b --- /dev/null +++ b/arch/arm64/boot/dts/qcom/sdm660-xiaomi-lavender-tianma.dts @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) 2024, Barnabas Czeman + */ + +/dts-v1/; + +#include "sdm660-xiaomi-lavender-common.dtsi" + +/ { + model = "Xiaomi Redmi Note 7 (Tianma)"; + compatible = "xiaomi,lavender-tianma", "qcom,sdm660"; +}; + +&blsp_i2c1 { + status = "okay"; + + /* Novatek NT36672A touchscreen */ + touchscreen@62 { + compatible = "novatek,nt36525"; + reg = <0x62>; + vdd-supply = <&vreg_l11a_1p8>; + interrupt-parent = <&tlmm>; + interrupts = <67 IRQ_TYPE_EDGE_RISING>; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&ts_pins_active>; + pinctrl-1 = <&ts_int_sleep &ts_rst_sleep>; + reset-gpios = <&tlmm 66 GPIO_ACTIVE_HIGH>; + touchscreen-size-x = <1080>; + touchscreen-size-y = <2340>; + }; +}; + +&panel { + compatible = "tianma,nt36672a-xiaomi-lavender-simple"; +}; + +&tlmm { + ts_pins_active: ts-pins-active-state { + pins = "gpio66", "gpio67"; + function = "gpio"; + drive-strength = <16>; + bias-pull-up; + }; + + ts_rst_sleep: ts-rst-sleep-state { + pins = "gpio66"; + function = "gpio"; + drive-strength = <2>; + bias-pull-down; + }; + + ts_int_sleep: ts-int-sleep-state { + pins = "gpio67"; + function = "gpio"; + drive-strength = <2>; + bias-disable; + }; +}; diff --git a/arch/arm64/configs/sdm660_defconfig b/arch/arm64/configs/sdm660_defconfig index 7c1fc9e30e77bd..caf431978e8e7e 100644 --- a/arch/arm64/configs/sdm660_defconfig +++ b/arch/arm64/configs/sdm660_defconfig @@ -414,6 +414,7 @@ CONFIG_DRM_FBDEV_OVERALLOC=200 CONFIG_DRM_MSM=m # CONFIG_DRM_MSM_MDP4 is not set # CONFIG_DRM_MSM_HDMI is not set +CONFIG_DRM_PANEL_BOE_TD4320=m CONFIG_DRM_PANEL_BOE_TV101WUM_NL6=m CONFIG_DRM_PANEL_DSI_CM=y CONFIG_DRM_PANEL_SIMPLE=y diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig index d2e5f48650a4a1..6ef6348b2b2dad 100644 --- a/drivers/gpu/drm/panel/Kconfig +++ b/drivers/gpu/drm/panel/Kconfig @@ -67,6 +67,14 @@ config DRM_PANEL_BOE_HIMAX8279D 24 bit RGB per pixel. It provides a MIPI DSI interface to the host and has a built-in LED backlight. +config DRM_PANEL_BOE_TD4320 + tristate "BOE TD4320 DSI panel" + depends on OF + depends on DRM_MIPI_DSI + depends on BACKLIGHT_CLASS_DEVICE + help + Say Y here if you want to enable support for TD4320. + config DRM_PANEL_BOE_TV101WUM_NL6 tristate "BOE TV101WUM and AUO KD101N80 45NA 1200x1920 panel" depends on OF diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile index 18a6fbaf8dbfbe..6978081b0701bc 100644 --- a/drivers/gpu/drm/panel/Makefile +++ b/drivers/gpu/drm/panel/Makefile @@ -5,6 +5,7 @@ obj-$(CONFIG_DRM_PANEL_ASUS_Z00T_TM5P5_NT35596) += panel-asus-z00t-tm5p5-n35596. obj-$(CONFIG_DRM_PANEL_AUO_A030JTN01) += panel-auo-a030jtn01.o obj-$(CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0) += panel-boe-bf060y8m-aj0.o obj-$(CONFIG_DRM_PANEL_BOE_HIMAX8279D) += panel-boe-himax8279d.o +obj-$(CONFIG_DRM_PANEL_BOE_TD4320) += panel-boe-td4320.o obj-$(CONFIG_DRM_PANEL_BOE_TV101WUM_NL6) += panel-boe-tv101wum-nl6.o obj-$(CONFIG_DRM_PANEL_DSI_CM) += panel-dsi-cm.o obj-$(CONFIG_DRM_PANEL_LVDS) += panel-lvds.o diff --git a/drivers/gpu/drm/panel/panel-boe-td4320.c b/drivers/gpu/drm/panel/panel-boe-td4320.c new file mode 100644 index 00000000000000..74ee677fd4d2de --- /dev/null +++ b/drivers/gpu/drm/panel/panel-boe-td4320.c @@ -0,0 +1,228 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (c) 2024, Barnabas Czeman + * Generated with linux-mdss-dsi-panel-driver-generator from vendor device tree: + * Copyright (c) 2013, The Linux Foundation. All rights reserved. + */ + +#include +#include +#include +#include + +#include