/*
 * Copyright (c) 2018, 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_hx8394f_720p_video: qcom,mdss_dsi_hx8394f_720p_video {
		qcom,mdss-dsi-panel-name = "hx8394f 720p video mode dsi panel";
		qcom,mdss-dsi-panel-controller = <&mdss_dsi0>;
		qcom,mdss-dsi-panel-type = "dsi_video_mode";
		qcom,mdss-dsi-panel-destination = "display_1";
		qcom,mdss-dsi-panel-framerate = <60>;
		qcom,mdss-dsi-virtual-channel-id = <0>;
		qcom,mdss-dsi-stream = <0>;
		qcom,mdss-dsi-panel-width = <720>;
		qcom,mdss-dsi-panel-height = <1280>;
		qcom,mdss-dsi-h-front-porch = <16>;
		qcom,mdss-dsi-h-back-porch = <16>;
		qcom,mdss-dsi-h-pulse-width = <10>;
		qcom,mdss-dsi-h-sync-skew = <0>;
		qcom,mdss-dsi-v-back-porch = <12>;
		qcom,mdss-dsi-v-front-porch = <15>;
		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-underflow-color = <0xff>;
		qcom,mdss-dsi-border-color = <0>;
		qcom,mdss-dsi-on-command = [39 01 00 00 00 00 04 B9 FF 83 94
				39 01 00 00 00 00 07
					BA 63 03 68 6B B2 C0
				39 01 00 00 00 00 0B
					B1 50 12 72 09 33 54 B1 31 6B 2F
				39 01 00 00 00 00 07
					B2 00 80 64 0E 0D 2F
				39 01 00 00 00 00 16
					B4 73 74 73 74 73 74 01 0C 86 75
					00 3F 73 74 73 74 73 74 01 0C 86
				39 01 00 00 00 00 22
					D3 00 00 07 07 40 07 10 00 08 10
					08 00 08 54 15 0E 05 0E 02 15 06
					05 06 47 44 0A 0A 4B 10 07 07 0E
					40
				39 01 00 00 00 00 2D
					D5 1A 1A 1B 1B 00 01 02 03 04 05
					06 07 08 09 0A 0B 24 25 18 18 26
					27 18 18 18 18 18 18 18 18 18 18
					18 18 18 18 18 18 20 21 18 18 18
					18
				39 01 00 00 00 00 2D
					D6 1A 1A 1B 1B 0B 0A 09 08 07 06
					05 04 03 02 01 00 21 20 18 18 27
					26 18 18 18 18 18 18 18 18 18 18
					18 18 18 18 18 18 25 24 18 18 18
					18
				39 01 00 00 00 00 3B
					E0 00 0C 19 20 23 26 29 28 51 61
					70 6F 76 86 89 8D 99 9A 95 A1 B0
					57 55 58 5C 5e 64 6B 7F 00 0C 19
					20 23 26 29 28 51 61 70 6F 76 86
					89 8D 99 9A 95 A1 B0 57 55 58 5C
					5E 64 6B 7F
				39 01 00 00 00 00 03 C0 1F 31
				15 01 00 00 00 00 02 CC 0B
				15 01 00 00 00 00 02 D4 02
				15 01 00 00 00 00 02 BD 02
				39 01 00 00 00 00 0D
					D8 FF FF FF FF FF FF FF FF FF FF
					FF FF
				15 01 00 00 00 00 02 BD 00
				15 01 00 00 00 00 02 BD 01
				15 01 00 00 00 00 02 B1 00
				15 01 00 00 00 00 02 BD 00
				39 01 00 00 00 00 08
					BF 40 81 50 00 1A FC 01
				39 01 00 00 00 00 03 B6 7D 7D
				05 01 00 00 78 00 02 11 00
				39 01 00 00 00 00 0D
					B2 00 80 64 0E 0D 2F 00 00 00 00
					C0 18
				05 01 00 00 14 00 02 29 00];

		qcom,mdss-dsi-off-command = [05 01 00 00 78 00 02 28 00
				05 01 00 00 96 00 02 10 00];
		qcom,mdss-dsi-on-command-state = "dsi_lp_mode";
		qcom,mdss-dsi-off-command-state = "dsi_hs_mode";
		qcom,mdss-dsi-h-sync-pulse = <1>;
		qcom,mdss-dsi-traffic-mode = "burst_mode";
		qcom,mdss-dsi-lane-map = "lane_map_0123";
		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-lane-2-state;
		qcom,mdss-dsi-lane-3-state;
		qcom,mdss-dsi-panel-timings
			= [72 16 0e 00 38 3c 12 1a 10 03 04 00];
		qcom,mdss-dsi-t-clk-post = <0x04>;
		qcom,mdss-dsi-t-clk-pre = <0x18>;
		qcom,mdss-dsi-bl-min-level = <1>;
		qcom,mdss-dsi-bl-max-level = <4095>;
		qcom,mdss-dsi-dma-trigger = "trigger_sw";
		qcom,mdss-dsi-mdp-trigger = "none";
		qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_wled";
		qcom,mdss-dsi-reset-sequence = <1 20>, <0 2>, <1 20>;
		qcom,mdss-dsi-panel-status-command = [06 01 00 01 05 00 01 D9
			06 01 00 01 05 00 01 09
			06 01 00 01 05 00 01 45];
		qcom,mdss-dsi-panel-status-command-state = "dsi_lp_mode";
		qcom,mdss-dsi-panel-status-check-mode = "reg_read";
		qcom,mdss-dsi-panel-status-read-length = <4 4 3>;
		qcom,mdss-dsi-panel-status-valid-params = <1 3 2>;
		qcom,mdss-dsi-panel-status-value =
			<0x80 0x80 0x73 0x04 0x05 0x0f>,
			<0x80 0x80 0x73 0x04 0x05 0x1e>;
		qcom,mdss-dsi-panel-max-error-count = <3>;
	};
};
