Add nodes for IDP display. The display is Visionox RM69299.
Signed-off-by: Harigovindan P harigovi@codeaurora.org ---
Changes in v2: - Adding dependency patchwork series - Removing suspend configuration - Adding blank before space curly brace Changes in v3: - Updating status for mdp and mdss node to get the display working - Change in commit text
This patch depends on following patchwork series:
https://patchwork.kernel.org/patch/11364687/ https://patchwork.kernel.org/patch/11366303/
arch/arm64/boot/dts/qcom/sc7180-idp.dts | 63 +++++++++++++++++++++++++ 1 file changed, 63 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/sc7180-idp.dts b/arch/arm64/boot/dts/qcom/sc7180-idp.dts index 388f50ad4fde..349db8fe78a5 100644 --- a/arch/arm64/boot/dts/qcom/sc7180-idp.dts +++ b/arch/arm64/boot/dts/qcom/sc7180-idp.dts @@ -7,6 +7,7 @@
/dts-v1/;
+#include <dt-bindings/gpio/gpio.h> #include <dt-bindings/regulator/qcom,rpmh-regulator.h> #include "sc7180.dtsi" #include "pm6150.dtsi" @@ -232,6 +233,57 @@ vreg_bob: bob { }; };
+&dsi0 { + status = "okay"; + + vdda-supply = <&vreg_l3c_1p2>; + + panel@0 { + compatible = "visionox,rm69299-1080p-display"; + reg = <0>; + + vdda-supply = <&vreg_l8c_1p8>; + vdd3p3-supply = <&vreg_l18a_2p8>; + + pinctrl-names = "default"; + pinctrl-0 = <&disp_pins>; + + reset-gpios = <&pm6150l_gpio 3 GPIO_ACTIVE_HIGH>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + port@0 { + reg = <0>; + panel0_in: endpoint { + remote-endpoint = <&dsi0_out>; + }; + }; + }; + }; + + ports { + port@1 { + endpoint { + remote-endpoint = <&panel0_in>; + data-lanes = <0 1 2 3>; + }; + }; + }; +}; + +&dsi_phy { + status = "okay"; +}; + +&mdp { + status = "okay"; +}; + +&mdss { + status = "okay"; +}; + &qspi { status = "okay"; pinctrl-names = "default"; @@ -289,6 +341,17 @@ &usb_1_qmpphy {
/* PINCTRL - additions to nodes defined in sc7180.dtsi */
+&pm6150l_gpio { + disp_pins: disp-pins { + pins = "gpio3"; + function = "func1"; + qcom,drive-strength = <2>; + power-source = <0>; + bias-disable; + output-low; + }; +}; + &qspi_clk { pinconf { pins = "gpio63";
Quoting Harigovindan P (2020-02-17 00:58:42)
diff --git a/arch/arm64/boot/dts/qcom/sc7180-idp.dts b/arch/arm64/boot/dts/qcom/sc7180-idp.dts index 388f50ad4fde..349db8fe78a5 100644 --- a/arch/arm64/boot/dts/qcom/sc7180-idp.dts +++ b/arch/arm64/boot/dts/qcom/sc7180-idp.dts @@ -232,6 +233,57 @@ vreg_bob: bob { }; };
+&dsi0 {
status = "okay";
vdda-supply = <&vreg_l3c_1p2>;
panel@0 {
compatible = "visionox,rm69299-1080p-display";
reg = <0>;
vdda-supply = <&vreg_l8c_1p8>;
vdd3p3-supply = <&vreg_l18a_2p8>;
pinctrl-names = "default";
pinctrl-0 = <&disp_pins>;
reset-gpios = <&pm6150l_gpio 3 GPIO_ACTIVE_HIGH>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
panel0_in: endpoint {
remote-endpoint = <&dsi0_out>;
};
};
};
};
ports {
port@1 {
endpoint {
remote-endpoint = <&panel0_in>;
data-lanes = <0 1 2 3>;
Is this property needed? If it's the default assumption it would be nice to omit it so that we don't have to think about it.
};
};
};
+};
+&dsi_phy {
status = "okay";
+};
+&mdp {
status = "okay";
+};
+&mdss {
status = "okay";
+};
&qspi { status = "okay"; pinctrl-names = "default"; @@ -289,6 +341,17 @@ &usb_1_qmpphy {
/* PINCTRL - additions to nodes defined in sc7180.dtsi */
+&pm6150l_gpio {
disp_pins: disp-pins {
Curious how this works. It looks like PMIC GPIOS are expecting the node to look like:
disp_pins: disp-pins { pinconf { pins = "gpio3"; function = PMIC_GPIO_FUNC_FUNC1; qcom,drive-strength = <PMIC_GPIO_STRENGTH_MED>; power-source = <PM6150_GPIO_VPH>; bias-disable; output-low; };
but this doesn't use the macros or the subnode for pinconf. Why? Also, the PM6150_GPIO_VPH macro doesn't exist.
pins = "gpio3";
function = "func1";
qcom,drive-strength = <2>;
power-source = <0>;
bias-disable;
output-low;
};
+};
On 2020-06-25 06:37, Stephen Boyd wrote:
Quoting Harigovindan P (2020-02-17 00:58:42)
diff --git a/arch/arm64/boot/dts/qcom/sc7180-idp.dts b/arch/arm64/boot/dts/qcom/sc7180-idp.dts index 388f50ad4fde..349db8fe78a5 100644 --- a/arch/arm64/boot/dts/qcom/sc7180-idp.dts +++ b/arch/arm64/boot/dts/qcom/sc7180-idp.dts @@ -232,6 +233,57 @@ vreg_bob: bob { }; };
+&dsi0 {
status = "okay";
vdda-supply = <&vreg_l3c_1p2>;
panel@0 {
compatible = "visionox,rm69299-1080p-display";
reg = <0>;
vdda-supply = <&vreg_l8c_1p8>;
vdd3p3-supply = <&vreg_l18a_2p8>;
pinctrl-names = "default";
pinctrl-0 = <&disp_pins>;
reset-gpios = <&pm6150l_gpio 3 GPIO_ACTIVE_HIGH>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
panel0_in: endpoint {
remote-endpoint = <&dsi0_out>;
};
};
};
};
ports {
port@1 {
endpoint {
remote-endpoint = <&panel0_in>;
data-lanes = <0 1 2 3>;
Is this property needed? If it's the default assumption it would be nice to omit it so that we don't have to think about it. This property is needed during panel probe. If this is not mentioned here,
mipi_dsi_attach() will fail during panel probe. In dsi_host.c, dsi_host_attach() fails since dsi lanes are greater than msm_host lanes. msm_host lanes are updated as part of dsi_host_parse_dt. If we dont provide data-lanes in dt, it'll have default value and fail in dsi_host_attach().
};
};
};
+};
+&dsi_phy {
status = "okay";
+};
+&mdp {
status = "okay";
+};
+&mdss {
status = "okay";
+};
&qspi { status = "okay"; pinctrl-names = "default"; @@ -289,6 +341,17 @@ &usb_1_qmpphy {
/* PINCTRL - additions to nodes defined in sc7180.dtsi */
+&pm6150l_gpio {
disp_pins: disp-pins {
Curious how this works. It looks like PMIC GPIOS are expecting the node to look like:
disp_pins: disp-pins { pinconf { pins = "gpio3"; function = PMIC_GPIO_FUNC_FUNC1; qcom,drive-strength = <PMIC_GPIO_STRENGTH_MED>; power-source = <PM6150_GPIO_VPH>; bias-disable; output-low; };
but this doesn't use the macros or the subnode for pinconf. Why? Also, the PM6150_GPIO_VPH macro doesn't exist.
We are discussing with PMIC team to have that macro in the header file. Will add other macros as part of next version.
pins = "gpio3";
function = "func1";
qcom,drive-strength = <2>;
power-source = <0>;
bias-disable;
output-low;
};
+};
Quoting harigovi@codeaurora.org (2020-06-29 06:50:09)
On 2020-06-25 06:37, Stephen Boyd wrote:
Quoting Harigovindan P (2020-02-17 00:58:42)
diff --git a/arch/arm64/boot/dts/qcom/sc7180-idp.dts b/arch/arm64/boot/dts/qcom/sc7180-idp.dts index 388f50ad4fde..349db8fe78a5 100644 --- a/arch/arm64/boot/dts/qcom/sc7180-idp.dts +++ b/arch/arm64/boot/dts/qcom/sc7180-idp.dts @@ -232,6 +233,57 @@ vreg_bob: bob {
[...]
ports {
port@1 {
endpoint {
remote-endpoint = <&panel0_in>;
data-lanes = <0 1 2 3>;
Is this property needed? If it's the default assumption it would be nice to omit it so that we don't have to think about it. This property is needed during panel probe. If this is not mentioned here,
mipi_dsi_attach() will fail during panel probe. In dsi_host.c, dsi_host_attach() fails since dsi lanes are greater than msm_host lanes. msm_host lanes are updated as part of dsi_host_parse_dt. If we dont provide data-lanes in dt, it'll have default value and fail in dsi_host_attach().
What is the default value? It looks like dsi_host_parse_dt() says it's using a default but I guess the default is 0 lanes? Why not make it the normal 4 lanes?
dri-devel@lists.freedesktop.org