Re: [PATCH 6/6] arm64: dts: qcom: kaanapali-mtp: Enable display DSI devices
From: Dmitry Baryshkov
Date: Mon Mar 23 2026 - 21:26:16 EST
On Sun, Mar 22, 2026 at 11:19:46PM -0700, Jingyi Wang wrote:
> From: Yuanjie Yang <yuanjie.yang@xxxxxxxxxxxxxxxx>
>
> Enable MDSS/DPU/DSI0 and add Novatek NT37801 panel on Kaanapali MTP
> board.
>
> NT37801 Spec V1.0 chapter "5.7.1 Power On Sequence" states VDDI ranges
> 1.65V~1.95V, but ldo12 ranges 1.2V~1.8V, so change ldo12 range to
> 1.65V~1.8V.
>
> pmh0110_d_e0_gpios and pmh0110_f_e0_gpios are configured for
> level shifters. Kaanapali need configure these pinctrl for panel
> function.
>
> Signed-off-by: Yuanjie Yang <yuanjie.yang@xxxxxxxxxxxxxxxx>
> Signed-off-by: Jingyi Wang <jingyi.wang@xxxxxxxxxxxxxxxx>
> ---
> arch/arm64/boot/dts/qcom/kaanapali-mtp.dts | 118 ++++++++++++++++++++++++++++-
> 1 file changed, 117 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm64/boot/dts/qcom/kaanapali-mtp.dts b/arch/arm64/boot/dts/qcom/kaanapali-mtp.dts
> index d0f3909621c9..07247dc98b70 100644
> --- a/arch/arm64/boot/dts/qcom/kaanapali-mtp.dts
> +++ b/arch/arm64/boot/dts/qcom/kaanapali-mtp.dts
> @@ -375,7 +375,7 @@ vreg_l11b_1p0: ldo11 {
>
> vreg_l12b_1p8: ldo12 {
> regulator-name = "vreg_l12b_1p8";
> - regulator-min-microvolt = <1200000>;
> + regulator-min-microvolt = <1650000>;
Separate commit, Fixes tag.
> regulator-max-microvolt = <1800000>;
> regulator-initial-mode = <RPMH_REGULATOR_MODE_AUTO>;
> regulator-allow-set-load;
> @@ -873,6 +873,51 @@ &lpass_vamacro {
> qcom,dmic-sample-rate = <4800000>;
> };
>
> +&mdss {
> + status = "okay";
> +};
> +
> +&mdss_dsi0 {
> + vdda-supply = <&vreg_l1d_1p2>;
> + status = "okay";
> +
> + panel@0 {
> + compatible = "novatek,nt37801";
> + reg = <0>;
> +
> + pinctrl-0 = <&sde_dsi_active &sde_te_active &sde_esync0_suspend
Why is this esync0_suspend?
> + &sde_mdp_vsync_p_1p2_active &sde_mdp_vsync_p_1p8_active
> + &sde_disp0_rst_1p2_active &sde_disp0_rst_1p8_active>;
> + pinctrl-1 = <&sde_dsi_suspend &sde_te_suspend &sde_esync0_suspend
> + &sde_mdp_vsync_p_1p2_active &sde_mdp_vsync_p_1p8_active
> + &sde_disp0_rst_1p2_active &sde_disp0_rst_1p8_active>;
> + pinctrl-names = "default", "sleep";
> +
> + vci-supply = <&vreg_l13b_3p0>;
> + vdd-supply = <&vreg_l11b_1p0>;
> + vddio-supply = <&vreg_l12b_1p8>;
> +
> + reset-gpios = <&tlmm 98 GPIO_ACTIVE_LOW>;
> +
> + port {
> + panel0_in: endpoint {
> + remote-endpoint = <&mdss_dsi0_out>;
> + };
> + };
> + };
> +};
> +
> +&mdss_dsi0_out {
> + remote-endpoint = <&panel0_in>;
> + data-lanes = <0 1 2 3>;
> +};
> +
> +&mdss_dsi0_phy {
> + vdds-supply = <&vreg_l3d_0p8>;
> +
> + status = "okay";
> +};
> +
> &pcie0 {
> pinctrl-0 = <&pcie0_default_state>;
> pinctrl-names = "default";
> @@ -970,6 +1015,42 @@ bt_default: bt-default-state {
> };
> };
>
> +&pmh0110_d_e0_gpios {
> + sde_mdp_vsync_p_1p2_active: sde-mdp-vsync-p-1p2-active-state {
If these are level shifters, should they be configured as a hog? Or
should they be modelled as regulators?
I'm not sure, how do we handle shifters and their supplies.
> + pins = "gpio9";
> + function = "paired";
> + input-disable;
> + output-enable;
> + power-source = <2>; /* 1.2v */
> + };
> +
> + sde_mdp_vsync_p_1p8_active: sde-mdp-vsync-p-1p8-active-state {
> + pins = "gpio10";
> + function = "paired";
> + input-enable;
> + output-disable;
> + power-source = <1>; /* 1.8v */
> + };
> +};
> +
> +&pmh0110_f_e0_gpios {
> + sde_disp0_rst_1p2_active: sde-disp0-rst-1p2-active-state {
The same.
> + pins = "gpio9";
> + function = "paired";
> + input-enable;
> + output-disable;
> + power-source = <2>; /* 1.2v */
> + };
> +
> + sde_disp0_rst_1p8_active: sde-disp0-rst-1p8-active-state {
> + pins = "gpio10";
> + function = "paired";
> + input-disable;
> + output-enable;
> + power-source = <1>; /* 1.8v */
> + };
> +};
> +
> &pon_resin {
> linux,code = <KEY_VOLUMEDOWN>;
>
> @@ -1128,6 +1209,41 @@ spkr_1_sd_n_active: spkr-1-sd-n-active-state {
> bias-disable;
> };
>
> + sde_te_active: sde-te-active-state {
> + pins = "gpio86";
> + function = "mdp_vsync";
> + drive-strength = <2>;
> + bias-pull-down;
> + };
> +
> + sde_te_suspend: sde-te-suspend-state {
> + pins = "gpio86";
> + function = "mdp_vsync";
> + drive-strength = <2>;
> + bias-pull-down;
> + };
It's the same as _active. Merge them.
> +
> + sde_esync0_suspend: sde-esync0-suspend-state {
> + pins = "gpio88";
> + function = "mdp_esync0_out";
> + drive-strength = <2>;
> + bias-pull-down;
> + };
> +
> + sde_dsi_active: sde-dsi-active-state {
panel-reset-active-state
> + pins = "gpio98";
> + function = "gpio";
> + drive-strength = <8>;
> + bias-disable;
> + };
> +
> + sde_dsi_suspend: sde-dsi-suspend-state {
> + pins = "gpio98";
> + function = "gpio";
> + drive-strength = <2>;
> + bias-pull-down;
> + };
> +
> key_vol_up_default: key-vol-up-default-state {
> pins = "gpio101";
> function = "gpio";
>
> --
> 2.25.1
>
--
With best wishes
Dmitry