/* Copyright (c) 2014-2017, 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_sim_cmd: qcom,mdss_dsi_dual_sim_cmd {
		qcom,mdss-dsi-panel-name = "Sim dual cmd mode dsi panel";
		qcom,mdss-dsi-panel-type = "dsi_cmd_mode";
		qcom,mdss-dsi-panel-framerate = <60>;
		qcom,mdss-dsi-virtual-channel-id = <0>;
		qcom,mdss-dsi-stream = <0>;
		qcom,mdss-dsi-panel-width = <1280>;
		qcom,mdss-dsi-panel-height = <1440>;
		qcom,mdss-dsi-h-front-porch = <120>;
		qcom,mdss-dsi-h-back-porch = <44>;
		qcom,mdss-dsi-h-pulse-width = <16>;
		qcom,mdss-dsi-h-sync-skew = <0>;
		qcom,mdss-dsi-v-back-porch = <4>;
		qcom,mdss-dsi-v-front-porch = <8>;
		qcom,mdss-dsi-v-pulse-width = <4>;
		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-bpp = <24>;
		qcom,mdss-dsi-color-order = "rgb_swap_rgb";
		qcom,mdss-dsi-underflow-color = <0xff>;
		qcom,mdss-dsi-border-color = <0>;
		qcom,mdss-dsi-h-sync-pulse = <0>;
		qcom,mdss-dsi-traffic-mode = "non_burst_sync_event";
		qcom,mdss-dsi-bllp-eof-power-mode;
		qcom,mdss-dsi-bllp-power-mode;
		qcom,cmd-sync-wait-broadcast;
		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-hor-line-idle = <0 40 256>,
						<40 120 128>,
						<120 240 64>;
		qcom,mdss-dsi-reset-sequence = <1 10>, <0 10>, <1 10>;
		qcom,mdss-dsi-bl-max-level = <4095>;
		qcom,mdss-dsi-dma-trigger = "trigger_sw";
		qcom,mdss-dsi-mdp-trigger = "none";
		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-wd;
		qcom,mdss-dsi-te-using-te-pin;
		qcom,mdss-dsi-on-command = [29 01 00 00 00 00 02 b0 03
			05 01 00 00 0a 00 01 00
			/* Soft reset, wait 10ms */
			15 01 00 00 0a 00 02 3a 77
			/* Set Pixel format (24 bpp) */
			39 01 00 00 0a 00 05 2a 00 00 04 ff
			/* Set Column address */
			39 01 00 00 0a 00 05 2b 00 00 05 9f
			/* Set page address */
			15 01 00 00 0a 00 02 35 00
			/* Set tear on */
			39 01 00 00 0a 00 03 44 00 00
			/* Set tear scan line */
			15 01 00 00 0a 00 02 51 ff
			/* write display brightness */
			15 01 00 00 0a 00 02 53 24
			 /* write control brightness */
			15 01 00 00 0a 00 02 55 00
			/* CABC brightness */
			05 01 00 00 78 00 01 11
			/* exit sleep mode, wait 120ms */
			05 01 00 00 10 00 01 29];
			/* Set display on, wait 16ms */
		qcom,mdss-dsi-on-command-state = "dsi_lp_mode";
		qcom,mdss-dsi-off-command = [05 01 00 00 32 00 02 28 00
					05 01 00 00 78 00 02 10 00];
		qcom,mdss-dsi-off-command-state = "dsi_hs_mode";
		qcom,panel-ack-disabled;
	};
};
