/* Copyright (c) 2013-2014, 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.
 */

/*---------------------------------------------------------------------------
 * This file is autogenerated file using gcdb parser. Please do not edit it.
 * Update input XML file to add a new entry or update variable in this file
 * VERSION = "1.0"
 *---------------------------------------------------------------------------*/
&mdss_mdp {
	dsi_truly_wvga_cmd: qcom,mdss_dsi_truly_wvga_cmd {
		qcom,mdss-dsi-panel-name = "Truly WVGA command 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-panel-mode-gpio-state = "low";
		qcom,mdss-dsi-panel-framerate = <60>;
		qcom,mdss-dsi-virtual-channel-id = <0>;
		qcom,mdss-dsi-stream = <0>;
		qcom,mdss-dsi-panel-width = <480>;
		qcom,mdss-dsi-panel-height = <800>;
		qcom,mdss-dsi-h-front-porch = <160>;
		qcom,mdss-dsi-h-back-porch = <40>;
		qcom,mdss-dsi-h-pulse-width = <8>;
		qcom,mdss-dsi-h-sync-skew = <0>;
		qcom,mdss-dsi-v-back-porch = <10>;
		qcom,mdss-dsi-v-front-porch = <12>;
		qcom,mdss-dsi-v-pulse-width = <2>;
		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-underflow-color = <0xff>;
		qcom,mdss-dsi-border-color = <0>;
		qcom,mdss-dsi-on-command = [
					05 01 00 00 00 00 02
						01 00
					23 01 00 00 00 00 02
						b0 04
					29 01 00 00 00 00 03
						b3 02 00
					29 01 00 00 00 00 03
						b6 51 83
					29 01 00 00 00 00 05
						b7 00 80 15 25
					29 01 00 00 00 00 14
						b8 00 07 07 ff c8 c8 01 18 10 10
						37 5a 87 de ff 00 00 00 00
					29 01 00 00 00 00 05
						b9 00 00 00 00
					23 01 00 00 00 00 02
						bd 00
					29 01 00 00 00 00 03
						c0 02 43
					29 01 00 00 00 00 10
						c1 43 31 99 21 20 00 10 28 0c 0c
						00 00 00 21 01
					29 01 00 00 00 00 07
						c2 28 06 06 01 03 00
					29 01 00 00 00 00 04
						c3 40 00 03
					29 01 00 00 00 00 03
						6f 03 00
					29 01 00 00 00 00 03
						c4 00 01
					29 01 00 00 00 00 03
						c6 00 00
					29 01 00 00 00 00 06
						c7 11 8d a0 f5 27
					29 01 00 00 00 00 19
						c8 01 0a 12 1c 2b 45 3f 29 17 13
						0f 04 01 0a 12 1c 2b 45 3f 29 17 13 0f 04
					29 01 00 00 00 00 19
						c9 01 0a 12 1c 2b 45 3f 29 17 13
						0f 04 01 0a 12 1c 2b 45 3f 29 17 13 0f 04
					29 01 00 00 00 00 19
						ca 01 0a 12 1c 2b 45 3f 29 17 13
						0f 04 01 0a 12 1c 2b 45 3f 29 17 13 0f 04
					29 01 00 00 00 00 11
						d0 99 03 ce a6 00 43 20 10 01 00
						01 01 00 03 01 00
					29 01 00 00 00 00 08
						d1 18 0C 23 03 75 02 50
					23 01 00 00 00 00 02
						d3 33
					29 01 00 00 00 00 03
						d5 2a 2a
					29 01 00 00 00 00 02
						d6 28
					29 01 00 00 00 00 10
						d7 01 00 aa c0 2a 2c 22	12 71 0a 12 00 a0
						00 03
					29 01 00 00 00 00 09
						d8 44 44 22 44 21 46 42 40
					29 01 00 00 00 00 04
						d9 cf 2d 51
					29 01 00 00 00 00 02
						da 01
					29 01 00 00 00 00 03
						de 01 4f
					29 01 00 00 00 00 07
						e1 00 00 00 00 00 00
					23 01 00 00 00 00 02
						e6 4f
					29 01 00 00 00 00 06
						f3 06 00 00 24 00
					29 01 00 00 00 00 02
						f8 00
					23 01 00 00 00 00 02
						fa 03
					29 01 00 00 00 00 04
						fb 00 00 00
					29 01 00 00 00 00 06
						fc 00 00 00 00 00
					29 01 00 00 00 00 05
						fd 00 00 70 00
					39 01 00 00 00 00 05
						2a 00 00 01 df
					39 01 00 00 00 00 05
						2b 00 00 03 1f
					15 01 00 00 00 00 02
						35 00
					39 01 00 00 00 00 03
						44 00 50
					15 01 00 00 00 00 02
						36 41
					15 01 00 00 00 00 02
						3a 77
					05 01 00 00 7D 00 02
						11 00
					05 01 00 00 3c 00 02
						29 00
					];
		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-on-command-state = "dsi_lp_mode";
		qcom,mdss-dsi-off-command-state = "dsi_lp_mode";
		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,mdss-dsi-lane-0-state;
		qcom,mdss-dsi-lane-1-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-panel-timings = [5D 12 0C 00 33 38 10 16 1E 03 04 00];
		qcom,mdss-dsi-t-clk-post = <0x04>;
		qcom,mdss-dsi-t-clk-pre = <0x1b>;
		qcom,mdss-dsi-bl-min-level = <1>;
		qcom,mdss-dsi-bl-max-level = <255>;
		qcom,mdss-dsi-dma-trigger = "trigger_sw";
		qcom,mdss-dsi-mdp-trigger = "trigger_te";
		qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_wled";
		qcom,mdss-dsi-reset-sequence = <1 20>, <0 2>, <1 20>;
		qcom,mdss-pan-physical-width-dimension = <52>;
		qcom,mdss-pan-physical-height-dimension = <86>;
	};
};
