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

&soc  {
	qcom,dsi_v2_truly_wvga_cmd {
		compatible = "qcom,dsi-panel-v2";
		label = "Truly WVGA command mode dsi panel";
		qcom,dsi-ctrl-phandle = <&mdss_dsi0>;
		qcom,rst-gpio = <&msmgpio 41 0>;
		qcom,mode-selection-gpio = <&msmgpio 7 0>;
		qcom,te-gpio = <&msmgpio 12 0>;
		vdda-supply = <&pm8110_l19>;
		vddio-supply=<&pm8110_l14>;
		qcom,mdss-pan-res = <480 800>;
		qcom,mdss-pan-bpp = <24>;
		qcom,mdss-pan-dest = "display_1";
		qcom,mdss-pan-porch-values = <40 8 160 10 2 12>;
		qcom,mdss-pan-underflow-clr = <0xff>;
		qcom,mdss-pan-bl-levels = <1 255>;
		qcom,mdss-pan-bl-ctrl = "bl_ctrl_wled";
		qcom,mdss-pan-dsi-mode = <1>;
		qcom,mdss-pan-dsi-h-pulse-mode = <0>;
		qcom,mdss-pan-dsi-h-power-stop = <0 0 0>;
		qcom,mdss-pan-dsi-bllp-power-stop = <1 1>;
		qcom,mdss-pan-dsi-traffic-mode = <1>;
		qcom,mdss-pan-dsi-dst-format = <8>;
		qcom,mdss-pan-insert-dcs-cmd = <1>;
		qcom,mdss-pan-wr-mem-continue = <0x3c>;
		qcom,mdss-pan-wr-mem-start = <0x2c>;
		qcom,mdss-pan-dsi-vc = <0>;
		qcom,mdss-pan-dsi-rgb-swap = <0>;
		qcom,mdss-pan-dsi-data-lanes = <1 1 0 0>;
		qcom,mdss-pan-dsi-dlane-swap = <0>;
		qcom,mdss-pan-dsi-t-clk = <0x1b 0x04>;
		qcom,mdss-pan-dsi-stream = <0>;
		qcom,mdss-pan-dsi-mdp-tr = <0x02>;
		qcom,mdss-pan-dsi-dma-tr = <0x04>;
		qcom,mdss-pan-dsi-frame-rate = <60>;
		qcom,panel-phy-regulatorSettings =[02 08 05 00 20 03];
		qcom,panel-phy-timingSettings = [5D 12 0C  00 33 38
						 10 16 1E 03 04 00];
		qcom,panel-phy-strengthCtrl = [ff 06];
		qcom,panel-phy-bistCtrl = [03 03 00 00 0f 00];
		qcom,panel-phy-laneConfig =
					[80 45 00 00 01 66 /*lane0**/
					80 45 00 00 01 66 /*lane1*/
					80 45 00 00 01 66 /*lane2*/
					80 45 00 00 01 66 /*lane3*/
					40 67 00 00 01 88]; /*Clk*/

		qcom,on-cmds-dsi-state = "DSI_LP_MODE";
		qcom,panel-on-cmds = [
					05 01 00 00 00 02
						01 00
					23 01 00 00 00 02
						b0 04
					29 01 00 00 00 03
						b3 02 00
					29 01 00 00 00 03
						b6 51 83
					29 01 00 00 00 05
						b7 00 80 15 25
					29 01 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 05
						b9 00 00 00 00
					23 01 00 00 00 02
						bd 00
					29 01 00 00 00 03
						c0 02 43
					29 01 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 07
						c2 28 06 06 01 03 00
					29 01 00 00 00 04
						c3 40 00 03
					29 01 00 00 00 03
						6f 03 00
					29 01 00 00 00 03
						c4 00 01
					29 01 00 00 00 03
						c6 00 00
					29 01 00 00 00 06
						c7 11 8d a0 f5 27
					29 01 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 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 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 11
						d0 99 03 ce a6 00 43 20 10 01 00
						01 01 00 03 01 00
					29 01 00 00 00 08
						d1 18 0C 23 03 75 02 50
					23 01 00 00 00 02
						d3 33
					29 01 00 00 00 03
						d5 2a 2a
					29 01 00 00 00 02
						d6 28
					29 01 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 09
						d8 44 44 22 44 21 46 42 40
					29 01 00 00 00 04
						d9 cf 2d 51
					29 01 00 00 00 02
						da 01
					29 01 00 00 00 03
						de 01 4f
					29 01 00 00 00 07
						e1 00 00 00 00 00 00
					23 01 00 00 00 02
						e6 4f
					29 01 00 00 00 06
						f3 06 00 00 24 00
					29 01 00 00 00 02
						f8 00
					23 01 00 00 00 02
						fa 03
					29 01 00 00 00 04
						fb 00 00 00
					29 01 00 00 00 06
						fc 00 00 00 00 00
					29 01 00 00 00 05
						fd 00 00 70 00
					39 01 00 00 00 05
						2a 00 00 01 df
					39 01 00 00 00 05
						2b 00 00 03 1f
					15 01 00 00 00 02
						35 00
					39 01 00 00 00 03
						44 00 50
					15 01 00 00 00 02
						36 41
					15 01 00 00 00 02
						3a 77
					05 01 00 00 7D 02
						11 00
					05 01 00 00 3c 02
						29 00
					];
		qcom,panel-off-cmds = [05 01 00 00 32 02 28 00
					05 01 00 00 78 02 10 00];
		qcom,off-cmds-dsi-state = "DSI_LP_MODE";
	};
};
