Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a6780c7f authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ARM: dts: msm: add support for nt35950 novatek panel"

parents a72dce4a c38a4f1a
Loading
Loading
Loading
Loading
+41 −0
Original line number Diff line number Diff line
@@ -378,6 +378,8 @@ Optional properties:
						go blank during transition.
					"dynamic-switch-immediate"= Switch on next frame update. Panel will
						not go blank for this transition.
					"dynamic-resolution-switch-immediate"= Switch the panel resolution. Panel will
						not go blank for this transition.
- qcom,mdss-dsi-post-mode-switch-on-command:		Multiple dcs packets used for turning on DSI panel
					after panel has switch modes.
					Refer to "qcom,mdss-dsi-on-command" section for adding commands.
@@ -395,6 +397,20 @@ Optional properties:
			   for any commands that we send.
- qcom,mdss-dsi-force-clock-lane-hs:	Boolean to force dsi clock lanes to HS mode always.

- qcom,mdss-dsi-display-timings:	Parent node that lists the different resolutions that the panel supports.
					Each child represents timings settings for a specific resolution.

Additional properties added to the second level nodes that represent timings properties:
- qcom,mdss-dsi-timing-default:		Property that specifies the current child as the default
					timing configuration that will be used.
- qcom,mdss-dsi-timing-switch-command:	List of commands that need to be sent
					to panel when the resolution/timing switch happens dynamically.
					Refer to "qcom,mdss-dsi-on-command" section for adding commands.
- qcom,mdss-dsi-timing-switch-command-state:	String that specifies the ctrl state for sending resolution switch
					commands.
					"dsi_lp_mode" = DSI low power mode (default)
					"dsi_hs_mode" = DSI high speed mode

Note, if a given optional qcom,* binding is not present, then the driver will configure
the default values specified.

@@ -530,5 +546,30 @@ Example:
						<128 240 64>;
		qcom,mdss-dsi-panel-orientation = "180"
		qcom,mdss-dsi-force-clock-lane-hs;
		qcom,mdss-dsi-display-timings {
			wqhd {
				qcom,mdss-dsi-timing-default;
				qcom,mdss-dsi-panel-width = <720>;
				qcom,mdss-dsi-panel-height = <2560>;
				qcom,mdss-dsi-h-front-porch = <20>;
				qcom,mdss-dsi-h-back-porch = <8>;
				qcom,mdss-dsi-h-pulse-width = <8>;
				qcom,mdss-dsi-h-sync-skew = <0>;
				qcom,mdss-dsi-v-back-porch = <4>;
				qcom,mdss-dsi-v-front-porch = <728>;
				qcom,mdss-dsi-v-pulse-width = <4>;
				qcom,mdss-dsi-panel-framerate = <60>;
				qcom,mdss-dsi-panel-timings = [E6 38 26 00 68 6E 2A 3C 2C 03 04 00];
				qcom,mdss-dsi-t-clk-post = <0x02>;
				qcom,mdss-dsi-t-clk-pre = <0x2a>;
				qcom,mdss-dsi-on-command = [05 01 00 00 a0 00 02 11 00
					05 01 00 00 02 00 02 29 00];
				qcom,mdss-dsi-on-command-state = "dsi_lp_mode";
				qcom,mdss-dsi-timing-switch-command = [
					29 00 00 00 00 00 02 B0 04
					29 00 00 00 00 00 02 F1 00];
				qcom,mdss-dsi-timing-switch-command-state = "dsi_lp_mode";
			};
		};
	};
};
+171 −0
Original line number Diff line number Diff line
/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
 *
 * 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.
 */

&mdss_mdp {
	dsi_dual_nt35950_4k_cmd_0: qcom,mdss_dsi_nt35950_4k_cmd_0 {
		qcom,mdss-dsi-panel-name = "NT35950 4K dual 0 cmd mode dsi panel";
		qcom,mdss-dsi-panel-controller = <&mdss_dsi0>;
		qcom,mdss-dsi-panel-type = "dsi_cmd_mode";
		qcom,mdss-dsi-panel-destination = "display_1";
		qcom,mdss-dsi-virtual-channel-id = <0>;
		qcom,mdss-dsi-stream = <0>;
		qcom,mdss-dsi-bpp = <24>;
		qcom,mdss-dsi-underflow-color = <0xff>;
		qcom,mdss-dsi-border-color = <0>;
		qcom,mdss-dsi-off-command = [05 01 00 00 0A 00 01 28
				05 01 00 00 96 00 01 10];
		qcom,mdss-dsi-off-command-state = "dsi_hs_mode";
		qcom,mdss-dsi-h-sync-pulse = <1>;
		qcom,mdss-dsi-traffic-mode = "non_burst_sync_event";
		qcom,mdss-dsi-bllp-eof-power-mode;
		qcom,mdss-dsi-bllp-power-mode;
		qcom,mdss-dsi-dma-trigger = "trigger_sw";
		qcom,mdss-dsi-mdp-trigger = "none";
		qcom,mdss-dsi-lane-0-state;
		qcom,mdss-dsi-lane-1-state;
		qcom,mdss-dsi-lane-2-state;
		qcom,mdss-dsi-lane-3-state;
		qcom,mdss-dsi-te-pin-select = <1>;
		qcom,mdss-dsi-wr-mem-start = <0x2c>;
		qcom,mdss-dsi-wr-mem-continue = <0x3c>;
		qcom,mdss-dsi-te-dcs-command = <1>;
		qcom,mdss-dsi-te-check-enable;
		qcom,mdss-dsi-te-using-te-pin;
		qcom,mdss-dsi-tx-eot-append;
		qcom,mdss-dsi-lp11-init;
		qcom,mdss-dsi-bl-min-level = <1>;
		qcom,mdss-dsi-bl-max-level = <4095>;
		qcom,mdss-brightness-max-level = <4095>;
		qcom,mdss-dsi-reset-sequence = <0 10>, <1 10>, <0 20>, <1 20>;
		qcom,mdss-pan-physical-width-dimension = <68>;
		qcom,mdss-pan-physical-height-dimension = <121>;
		qcom,dynamic-mode-switch-enabled;
		qcom,dynamic-mode-switch-type = "dynamic-resolution-switch-immediate";
		qcom,mdss-dsi-h-sync-skew = <0>;
		qcom,mdss-dsi-h-left-border = <0>;
		qcom,mdss-dsi-h-right-border = <0>;
		qcom,mdss-dsi-v-top-border = <0>;
		qcom,mdss-dsi-v-bottom-border = <0>;

		qcom,mdss-dsi-display-timings {
			1080p {
				qcom,mdss-dsi-panel-clockrate = <897040000>;
				qcom,mdss-dsi-timing-default;
				qcom,mdss-dsi-panel-width = <540>;
				qcom,mdss-dsi-panel-height = <1920>;
				qcom,mdss-dsi-h-back-porch = <8>;
				qcom,mdss-dsi-h-pulse-width = <8>;
				qcom,mdss-dsi-h-front-porch = <20>;
				qcom,mdss-dsi-v-back-porch = <8>;
				qcom,mdss-dsi-v-pulse-width = <8>;
				qcom,mdss-dsi-v-front-porch = <2390>;
				qcom,mdss-dsi-panel-framerate = <60>;
				qcom,mdss-dsi-panel-timings = [E6 38 26 00 68 66 32 3C 2C 03 04 00 ];
				qcom,mdss-dsi-t-clk-post = <0x02>;
				qcom,mdss-dsi-t-clk-pre = <0x2B>;
				qcom,mdss-dsi-on-command = [15 01 00 00 00 00 02 90 00
					39 01 00 00 00 00 06 F0 55 AA 52 08 07
					15 01 00 00 00 00 02 EF 01
					39 01 00 00 00 00 06 F0 55 AA 52 08 00
					15 01 00 00 00 00 02 B4 01
					39 01 00 00 00 00 10 BD 00 B4 0C 0C 00 01 68 09 09 01 0E 0C 0C 00 D5
					39 01 00 00 00 00 05 FF AA 55 A5 80
					15 01 00 00 00 00 02 6F 18
					15 01 00 00 00 00 02 F7 06
					15 01 00 00 00 00 02 58 01
					15 01 00 00 00 00 02 35 00
					39 01 00 00 00 00 03 44 00 00
					39 01 00 00 00 00 06 f0 55 aa 52 08 00
					15 01 00 00 00 00 02 C9 01
					05 01 00 00 96 00 01 11
					05 01 00 00 96 00 01 29];

				qcom,mdss-dsi-on-command-state = "dsi_lp_mode";

				qcom,mdss-dsi-timing-switch-command = [
					15 00 00 00 00 00 02 90 00
					15 01 00 00 00 00 02 58 01
					];
				qcom,mdss-dsi-timing-switch-command-state =
					"dsi_lp_mode";

				qcom,mdss-tear-check-sync-init-val = <3840>;
				qcom,mdss-tear-check-start-pos = <3840>;
				qcom,mdss-tear-check-rd-ptr-trigger-intr = <3841>;
			};

			4k {
				qcom,mdss-dsi-panel-width = <1080>;
				qcom,mdss-dsi-panel-height = <3840>;
				qcom,mdss-dsi-h-back-porch = <8>;
				qcom,mdss-dsi-h-pulse-width = <8>;
				qcom,mdss-dsi-h-front-porch = <8>;
				qcom,mdss-dsi-v-back-porch = <8>;
				qcom,mdss-dsi-v-pulse-width = <8>;
				qcom,mdss-dsi-v-front-porch = <8>;
				qcom,mdss-dsi-panel-framerate = <60>;
				qcom,mdss-dsi-panel-timings = [E6 38 26 00 68 66 32 3C 2C 03 04 00 ];
				qcom,mdss-dsi-t-clk-post = <0x02>;
				qcom,mdss-dsi-t-clk-pre = <0x2B>;
				qcom,mdss-dsi-on-command = [15 01 00 00 00 00 02 90 02
					39 01 00 00 00 00 06 F0 55 AA 52 08 07
					15 01 00 00 00 00 02 EF 01
					39 01 00 00 00 00 06 F0 55 AA 52 08 00
					15 01 00 00 00 00 02 B4 01
					39 01 00 00 00 00 10 BD 00 B4 0C 0C 00 01 68 09 09 01 0E 0C 0C 00 D5
					39 01 00 00 00 00 05 FF AA 55 A5 80
					15 01 00 00 00 00 02 6F 18
					15 01 00 00 00 00 02 F7 06
					15 01 00 00 00 00 02 35 00
					39 01 00 00 00 00 03 44 00 00
					39 01 00 00 00 00 06 f0 55 aa 52 08 00
					15 01 00 00 00 00 02 c9 01
					05 01 00 00 96 00 01 11
					05 01 00 00 96 00 01 29];
				qcom,mdss-dsi-on-command-state = "dsi_lp_mode";

				qcom,mdss-dsi-timing-switch-command = [
					15 00 00 00 00 00 02 90 02
					15 01 00 00 00 00 02 58 00
					];
				qcom,mdss-dsi-timing-switch-command-state =
					"dsi_lp_mode";

				qcom,mdss-dsi-fbc-enable;
				qcom,mdss-dsi-fbc-ver2-mode;
				qcom,mdss-dsi-fbc-bpp = <8>;
				qcom,mdss-dsi-fbc-packing = <1>;
				qcom,mdss-dsi-fbc-2d-pred-mode;
				qcom,mdss-dsi-fbc-slice-height = <4>;
				qcom,mdss-dsi-fbc-quant-error;
				qcom,mdss-dsi-fbc-bias = <2>;
				qcom,mdss-dsi-fbc-vlc-mode;
				qcom,mdss-dsi-fbc-bflc-mode;
				qcom,mdss-dsi-fbc-lossy-mode-idx = <3>;
				qcom,mdss-dsi-fbc-pat-mode;
				qcom,mdss-dsi-fbc-budget-ctrl = <5>;
				qcom,mdss-dsi-fbc-block-budget = <59>;
				qcom,mdss-dsi-fbc-h-line-budget = <675>;
				qcom,mdss-dsi-fbc-lossless-threshold = <0x200>;
				qcom,mdss-dsi-fbc-lossy-threshold = <192>;
				qcom,mdss-dsi-fbc-rgb-threshold = <4>;
				qcom,mdss-dsi-fbc-max-pred-err = <3>;
				qcom,mdss-dsi-panel-clockrate = <897040000>;

				qcom,mdss-tear-check-sync-init-val = <3840>;
				qcom,mdss-tear-check-start-pos = <3840>;
				qcom,mdss-tear-check-rd-ptr-trigger-intr = <3841>;
			};
		};
	};

};
+173 −0
Original line number Diff line number Diff line
/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
 *
 * 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.
 */

&mdss_mdp {
	dsi_dual_nt35950_4k_cmd_1: qcom,mdss_dsi_nt35950_4k_cmd_1 {
		qcom,mdss-dsi-panel-name = "NT35950 4K dual 1 cmd mode dsi panel";
		qcom,mdss-dsi-panel-controller = <&mdss_dsi1>;
		qcom,mdss-dsi-panel-type = "dsi_cmd_mode";
		qcom,mdss-dsi-panel-destination = "display_2";
		qcom,mdss-dsi-virtual-channel-id = <0>;
		qcom,mdss-dsi-stream = <0>;
		qcom,mdss-dsi-bpp = <24>;
		qcom,mdss-dsi-underflow-color = <0xff>;
		qcom,mdss-dsi-border-color = <0>;
		qcom,mdss-dsi-off-command = [05 01 00 00 0A 00 01 28
				05 01 00 00 96 00 01 10];
		qcom,mdss-dsi-off-command-state = "dsi_hs_mode";
		qcom,mdss-dsi-h-sync-pulse = <1>;
		qcom,mdss-dsi-traffic-mode = "non_burst_sync_event";
		qcom,mdss-dsi-bllp-eof-power-mode;
		qcom,mdss-dsi-bllp-power-mode;
		qcom,mdss-dsi-dma-trigger = "trigger_sw";
		qcom,mdss-dsi-mdp-trigger = "none";
		qcom,mdss-dsi-lane-0-state;
		qcom,mdss-dsi-lane-1-state;
		qcom,mdss-dsi-lane-2-state;
		qcom,mdss-dsi-lane-3-state;
		qcom,mdss-dsi-te-pin-select = <1>;
		qcom,mdss-dsi-wr-mem-start = <0x2c>;
		qcom,mdss-dsi-wr-mem-continue = <0x3c>;
		qcom,mdss-dsi-te-dcs-command = <1>;
		qcom,mdss-dsi-te-check-enable;
		qcom,mdss-dsi-te-using-te-pin;
		qcom,mdss-dsi-tx-eot-append;
		qcom,mdss-dsi-lp11-init;
		qcom,mdss-dsi-bl-min-level = <1>;
		qcom,mdss-dsi-bl-max-level = <4095>;
		qcom,mdss-brightness-max-level = <4095>;
		qcom,mdss-dsi-reset-sequence = <0 10>, <1 10>, <0 20>, <1 20>;
		qcom,mdss-pan-physical-width-dimension = <68>;
		qcom,mdss-pan-physical-height-dimension = <121>;
		qcom,dynamic-mode-switch-enabled;
		qcom,dynamic-mode-switch-type = "dynamic-resolution-switch-immediate";
		qcom,mdss-dsi-h-sync-skew = <0>;
		qcom,mdss-dsi-h-left-border = <0>;
		qcom,mdss-dsi-h-right-border = <0>;
		qcom,mdss-dsi-v-top-border = <0>;
		qcom,mdss-dsi-v-bottom-border = <0>;

		qcom,mdss-dsi-display-timings {
			1080p {
				qcom,mdss-dsi-panel-clockrate = <897040000>;
				qcom,mdss-dsi-timing-default;
				qcom,mdss-dsi-panel-width = <540>;
				qcom,mdss-dsi-panel-height = <1920>;

				qcom,mdss-dsi-h-back-porch = <8>;
				qcom,mdss-dsi-h-pulse-width = <8>;
				qcom,mdss-dsi-h-front-porch = <20>;
				qcom,mdss-dsi-v-back-porch = <8>;
				qcom,mdss-dsi-v-pulse-width = <8>;
				qcom,mdss-dsi-v-front-porch = <2390>;
				qcom,mdss-dsi-panel-framerate = <60>;
				qcom,mdss-dsi-panel-timings = [E6 38 26 00 68 66 32 3C 2C 03 04 00 ];
				qcom,mdss-dsi-t-clk-post = <0x02>;
				qcom,mdss-dsi-t-clk-pre = <0x2B>;
				qcom,mdss-dsi-on-command = [15 01 00 00 00 00 02 90 00
					39 01 00 00 00 00 06 F0 55 AA 52 08 07
					15 01 00 00 00 00 02 EF 01
					39 01 00 00 00 00 06 F0 55 AA 52 08 00
					15 01 00 00 00 00 02 B4 01
					39 01 00 00 00 00 10 BD 00 B4 0C 0C 00 01 68 09 09 01 0E 0C 0C 00 D5
					39 01 00 00 00 00 05 FF AA 55 A5 80
					15 01 00 00 00 00 02 6F 18
					15 01 00 00 00 00 02 F7 06
					15 01 00 00 00 00 02 58 01
					15 01 00 00 00 00 02 35 00
					39 01 00 00 00 00 03 44 00 00
					39 01 00 00 00 00 06 f0 55 aa 52 08 00
					15 01 00 00 00 00 02 C9 01
					05 01 00 00 96 00 01 11
					05 01 00 00 96 00 01 29];

				qcom,mdss-dsi-on-command-state = "dsi_lp_mode";

				qcom,mdss-dsi-timing-switch-command = [
					15 00 00 00 00 00 02 90 00
					15 01 00 00 00 00 02 58 01
					];
				qcom,mdss-dsi-timing-switch-command-state =
					"dsi_lp_mode";

				qcom,mdss-tear-check-sync-init-val = <3840>;
				qcom,mdss-tear-check-start-pos = <3840>;
				qcom,mdss-tear-check-rd-ptr-trigger-intr = <3841>;
			};

			4k {
				qcom,mdss-dsi-panel-width = <1080>;
				qcom,mdss-dsi-panel-height = <3840>;
				qcom,mdss-dsi-h-back-porch = <8>;
				qcom,mdss-dsi-h-pulse-width = <8>;
				qcom,mdss-dsi-h-front-porch = <8>;
				qcom,mdss-dsi-v-back-porch = <8>;
				qcom,mdss-dsi-v-pulse-width = <8>;
				qcom,mdss-dsi-v-front-porch = <8>;
				qcom,mdss-dsi-panel-framerate = <60>;
				qcom,mdss-dsi-panel-timings = [E6 38 26 00 68 66 32 3C 2C 03 04 00 ];
				qcom,mdss-dsi-t-clk-post = <0x02>;
				qcom,mdss-dsi-t-clk-pre = <0x2B>;
				qcom,mdss-dsi-on-command = [15 01 00 00 00 00 02 90 02
					39 01 00 00 00 00 06 F0 55 AA 52 08 07
					15 01 00 00 00 00 02 EF 01
					39 01 00 00 00 00 06 F0 55 AA 52 08 00
					15 01 00 00 00 00 02 B4 01
					39 01 00 00 00 00 10 BD 00 B4 0C 0C 00 01 68 09 09 01 0E 0C 0C 00 D5
					39 01 00 00 00 00 05 FF AA 55 A5 80
					15 01 00 00 00 00 02 6F 18
					15 01 00 00 00 00 02 F7 06
					15 01 00 00 00 00 02 35 00
					39 01 00 00 00 00 03 44 00 00
					39 01 00 00 00 00 06 f0 55 aa 52 08 00
					15 01 00 00 00 00 02 c9 01
					05 01 00 00 96 00 01 11
					05 01 00 00 96 00 01 29];
				qcom,mdss-dsi-on-command-state = "dsi_lp_mode";

				qcom,mdss-dsi-timing-switch-command = [
					15 00 00 00 00 00 02 90 02
					15 01 00 00 00 00 02 58 00
					];
				qcom,mdss-dsi-timing-switch-command-state =
					"dsi_lp_mode";

				qcom,mdss-dsi-fbc-enable;
				qcom,mdss-dsi-fbc-ver2-mode;
				qcom,mdss-dsi-fbc-bpp = <8>;
				qcom,mdss-dsi-fbc-packing = <1>;
				qcom,mdss-dsi-fbc-2d-pred-mode;
				qcom,mdss-dsi-fbc-slice-height = <4>;
				qcom,mdss-dsi-fbc-quant-error;
				qcom,mdss-dsi-fbc-bias = <2>;
				qcom,mdss-dsi-fbc-vlc-mode;
				qcom,mdss-dsi-fbc-bflc-mode;
				qcom,mdss-dsi-fbc-lossy-mode-idx = <3>;
				qcom,mdss-dsi-fbc-pat-mode;
				qcom,mdss-dsi-fbc-budget-ctrl = <5>;
				qcom,mdss-dsi-fbc-block-budget = <59>;
				qcom,mdss-dsi-fbc-h-line-budget = <675>;
				qcom,mdss-dsi-fbc-lossless-threshold = <0x200>;
				qcom,mdss-dsi-fbc-lossy-threshold = <192>;
				qcom,mdss-dsi-fbc-rgb-threshold = <4>;
				qcom,mdss-dsi-fbc-max-pred-err = <3>;
				qcom,mdss-dsi-panel-clockrate = <897040000>;

				qcom,mdss-tear-check-sync-init-val = <3840>;
				qcom,mdss-tear-check-start-pos = <3840>;
				qcom,mdss-tear-check-rd-ptr-trigger-intr = <3841>;
			};
		};

	};

};
+13 −0
Original line number Diff line number Diff line
@@ -291,6 +291,8 @@
#include "dsi-panel-jdi-dualmipi1-video.dtsi"
#include "dsi-panel-jdi-dualmipi0-cmd.dtsi"
#include "dsi-panel-jdi-dualmipi1-cmd.dtsi"
#include "dsi-panel-nt35950-4k-dualmipi0-cmd.dtsi"
#include "dsi-panel-nt35950-4k-dualmipi1-cmd.dtsi"
#include "dsi-panel-nt35597-wqxga-video.dtsi"
#include "dsi-panel-nt35597-wqxga-cmd.dtsi"
#include "dsi-panel-jdi-1080p-video.dtsi"
@@ -362,6 +364,17 @@
	qcom,mdss-dsi-min-refresh-rate = <30>;
};

&dsi_dual_nt35950_4k_cmd_0 {
	qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_wled";
	qcom,mdss-dsi-bl-min-level = <1>;
	qcom,mdss-dsi-bl-max-level = <4095>;
	qcom,dcs-cmd-by-left;
};

&dsi_dual_nt35950_4k_cmd_1 {
	qcom,dcs-cmd-by-left;
};

&dsi_dual_jdi_video_0 {
	pwms = <&pmi8994_pwm_4 0 0>;
	pwm-names = "backlight";
+17 −30
Original line number Diff line number Diff line
@@ -612,21 +612,25 @@ int mdss_dsi_switch_mode(struct mdss_panel_data *pdata, int mode)
	ctrl_pdata = container_of(pdata, struct mdss_dsi_ctrl_pdata,
		panel_data);

	if (pinfo->dms_mode != DYNAMIC_MODE_SWITCH_IMMEDIATE) {
		pr_debug("%s: Dynamic mode switch not enabled.\n", __func__);
	if ((pinfo->dms_mode != DYNAMIC_MODE_RESOLUTION_SWITCH_IMMEDIATE) &&
			(pinfo->dms_mode != DYNAMIC_MODE_SWITCH_IMMEDIATE)) {
		pr_err("%s: Dynamic mode switch not enabled.\n", __func__);
		return -EPERM;
	}

	if (mode == MIPI_VIDEO_PANEL) {
		mode = DSI_VIDEO_MODE;
		mode = SWITCH_TO_VIDEO_MODE;
	} else if (mode == MIPI_CMD_PANEL) {
		mode = DSI_CMD_MODE;
		mode = SWITCH_TO_CMD_MODE;
	} else if (mode == SWITCH_RESOLUTION) {
		pr_debug("Resolution switch mode selected\n");
	} else {
		pr_err("Invalid mode selected, mode=%d\n", mode);
		return -EINVAL;
	}

	mdss_dsi_clk_ctrl(ctrl_pdata, DSI_ALL_CLKS, 1);
	mdss_dsi_ctrl_setup(ctrl_pdata);
	ctrl_pdata->switch_mode(pdata, mode);
	mdss_dsi_clk_ctrl(ctrl_pdata, DSI_ALL_CLKS, 0);

@@ -753,6 +757,7 @@ int mdss_dsi_on(struct mdss_panel_data *pdata)
		mdss_dsi_phy_sw_reset(ctrl_pdata);
		mdss_dsi_phy_init(ctrl_pdata);
		mdss_dsi_ctrl_setup(ctrl_pdata);
		pr_debug("%s: reset Phy and call ctrl_setup\n", __func__);
	}

	/* DSI link clocks need to be on prior to ctrl sw reset */
@@ -857,8 +862,9 @@ static int mdss_dsi_unblank(struct mdss_panel_data *pdata)
				panel_data);
	mipi  = &pdata->panel_info.mipi;

	pr_debug("%s+: ctrl=%p ndx=%d cur_blank_state=%d\n", __func__,
		ctrl_pdata, ctrl_pdata->ndx, pdata->panel_info.blank_state);
	pr_debug("%s+: ctrl=%p ndx=%d cur_blank_state=%d ctrl_state=%x\n",
			__func__, ctrl_pdata, ctrl_pdata->ndx,
			pdata->panel_info.blank_state, ctrl_pdata->ctrl_state);

	mdss_dsi_clk_ctrl(ctrl_pdata, DSI_ALL_CLKS, 1);

@@ -934,9 +940,9 @@ static int mdss_dsi_blank(struct mdss_panel_data *pdata, int power_state)
		pr_info("%s: switching to %s mode\n", __func__,
			(pdata->panel_info.mipi.mode ? "video" : "command"));
		if (pdata->panel_info.type == MIPI_CMD_PANEL) {
			ctrl_pdata->switch_mode(pdata, DSI_VIDEO_MODE);
			ctrl_pdata->switch_mode(pdata, SWITCH_TO_VIDEO_MODE);
		} else if (pdata->panel_info.type == MIPI_VIDEO_PANEL) {
			ctrl_pdata->switch_mode(pdata, DSI_CMD_MODE);
			ctrl_pdata->switch_mode(pdata, SWITCH_TO_CMD_MODE);
			mdss_dsi_set_tear_off(ctrl_pdata);
		}
	}
@@ -1423,28 +1429,6 @@ int mdss_dsi_register_recovery_handler(struct mdss_dsi_ctrl_pdata *ctrl,
	return 0;
}

static int mdss_dsi_clk_refresh(struct mdss_panel_data *pdata)
{
	struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL;
	int rc = 0;

	ctrl_pdata = container_of(pdata, struct mdss_dsi_ctrl_pdata,
							panel_data);
	rc = mdss_dsi_clk_div_config(&pdata->panel_info,
			pdata->panel_info.mipi.frame_rate);
	if (rc) {
		pr_err("%s: unable to initialize the clk dividers\n",
								__func__);
		return rc;
	}
	ctrl_pdata->refresh_clk_rate = false;
	ctrl_pdata->pclk_rate = pdata->panel_info.mipi.dsi_pclk_rate;
	ctrl_pdata->byte_clk_rate = pdata->panel_info.clk_rate / 8;
	pr_debug("%s ctrl_pdata->byte_clk_rate=%d ctrl_pdata->pclk_rate=%d\n",
		__func__, ctrl_pdata->byte_clk_rate, ctrl_pdata->pclk_rate);
	return rc;
}

static int mdss_dsi_event_handler(struct mdss_panel_data *pdata,
				  int event, void *arg)
{
@@ -1555,6 +1539,9 @@ static int mdss_dsi_event_handler(struct mdss_panel_data *pdata,
		if (ctrl_pdata->check_status)
			rc = ctrl_pdata->check_status(ctrl_pdata);
		break;
	case MDSS_EVENT_PANEL_TIMING_SWITCH:
		rc = mdss_dsi_panel_timing_switch(ctrl_pdata, arg);
		break;
	default:
		pr_debug("%s: unhandled event=%d\n", __func__, event);
		break;
Loading