/* 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.
 */

/*---------------------------------------------------------------------------
 * 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_generic_720p_cmd: qcom,mdss_dsi_generic_720p_cmd {
		qcom,mdss-dsi-panel-name = "generic 720p 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-panel-framerate = <60>;
		qcom,mdss-dsi-stream = <0>;
		qcom,mdss-dsi-panel-width = <768>;
		qcom,mdss-dsi-panel-height = <1280>;
		qcom,mdss-dsi-h-front-porch = <26>;
		qcom,mdss-dsi-h-back-porch = <26>;
		qcom,mdss-dsi-h-pulse-width = <26>;
		qcom,mdss-dsi-h-sync-skew = <0>;
		qcom,mdss-dsi-v-back-porch = <2>;
		qcom,mdss-dsi-v-front-porch = <2>;
		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-color-order = <0>;
		qcom,mdss-dsi-underflow-color = <0xff>;
		qcom,mdss-dsi-border-color = <0>;
		qcom,mdss-dsi-on-command = [05 01 00 00 78 00 01 11
				15 01 00 00 0a 00 02 36 00
				05 01 00 00 0a 00 01 29
				15 01 00 00 0a 00 02 53 24
				15 01 00 00 0a 00 02 35 00];
		qcom,mdss-dsi-off-command = [05 01 00 00 0a 00 01 34
				 05 01 00 00 78 00 01 10
				05 01 00 00 78 00 01 28
				 15 01 00 00 0a 00 02 53 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 = <0>;
		qcom,mdss-dsi-traffic-mode = <1>;
		qcom,mdss-dsi-lane-map = <0>;
		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-te-pin-select = <1>;
		qcom,mdss-dsi-te-v-sync-rd-ptr-irq-line = <0x2c>;
		qcom,mdss-dsi-te-v-sync-continues-lines = <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 = [6e 26 1b 00 35 34 20 28 17 03 04 00];
		qcom,mdss-dsi-t-clk-post = <0x20>;
		qcom,mdss-dsi-t-clk-pre = <0x2a>;
		qcom,mdss-dsi-bl-min-level = <1>;
		qcom,mdss-dsi-bl-max-level = <255>;
		qcom,mdss-dsi-bl-pmic-pwm-frequency = <100>;
		qcom,mdss-dsi-bl-pmic-bank-select = <7>;
		qcom,mdss-dsi-dma-trigger = <4>;
		qcom,mdss-dsi-mdp-trigger = <0>;
		qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_pwm";
	};
};
