/* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *  * Neither the name of The Linux Foundation nor the names of its
 *    contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

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

#ifndef _PANEL_JDI_FHD_VIDEO_H_
#define _PANEL_JDI_FHD_VIDEO_H_
/*---------------------------------------------------------------------------*/
/* HEADER files                                                              */
/*---------------------------------------------------------------------------*/
#include "panel.h"

/*---------------------------------------------------------------------------*/
/* Panel configuration                                                       */
/*---------------------------------------------------------------------------*/
static struct panel_config jdi_fhd_video_panel_data = {
	"qcom,mdss_dsi_jdi_fhd_video", "dsi:0:", "qcom,mdss-dsi-panel",
	10, 0, "DISPLAY_1", 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0
};

/*---------------------------------------------------------------------------*/
/* Panel resolution                                                          */
/*---------------------------------------------------------------------------*/
static struct panel_resolution jdi_fhd_video_panel_res = {
	1080, 1920, 12, 28, 4, 0, 18, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0
};

/*---------------------------------------------------------------------------*/
/* Panel color information                                                   */
/*---------------------------------------------------------------------------*/
static struct color_info jdi_fhd_video_color = {
	24, 0, 0xff, 0, 0, 0
};

/*---------------------------------------------------------------------------*/
/* Panel on/off command information                                          */
/*---------------------------------------------------------------------------*/
static char jdi_fhd_video_on_cmd0[] = {
	0xFF, 0xF0, 0x13, 0x80
};

static char jdi_fhd_video_on_cmd1[] = {
	0xDD, 0x02, 0x13, 0x80
};

static char jdi_fhd_video_on_cmd2[] = {
	0xE3, 0x00, 0x13, 0x80
};

static char jdi_fhd_video_on_cmd3[] = {
	0xFB, 0x01, 0x13, 0x80
};

static char jdi_fhd_video_on_cmd4[] = {
	0xFF, 0x00, 0x13, 0x80
};

static char jdi_fhd_video_on_cmd5[] = {
	0x35, 0x00, 0x15, 0x80
};

static char jdi_fhd_video_on_cmd6[] = {
	0x51, 0xFF, 0x15, 0x80
};

static char jdi_fhd_video_on_cmd7[] = {
	0x53, 0x2C, 0x15, 0x80
};

static char jdi_fhd_video_on_cmd8[] = {
	0xFF, 0x26, 0x13, 0x80
};

static char jdi_fhd_video_on_cmd9[] = {
	0x02, 0xFF, 0x13, 0x80
};

static char jdi_fhd_video_on_cmd10[] = {
	0xFF, 0x10, 0x13, 0x80
};

static char jdi_fhd_video_on_cmd11[] = {
	0xBB, 0x13, 0x13, 0x80
};

static char jdi_fhd_video_on_cmd12[] = {
	0xFF, 0x00, 0x13, 0x80
};

static char jdi_fhd_video_on_cmd13[] = {
	0x11, 0x00, 0x05, 0x80
};

static char jdi_fhd_video_on_cmd14[] = {
	0x29, 0x00, 0x05, 0x80
};

static struct mipi_dsi_cmd jdi_fhd_video_on_command[] = {
	{0x4, jdi_fhd_video_on_cmd0, 0x0a},
	{0x4, jdi_fhd_video_on_cmd1, 0x0a},
	{0x4, jdi_fhd_video_on_cmd2, 0x0a},
	{0x4, jdi_fhd_video_on_cmd3, 0x0a},
	{0x4, jdi_fhd_video_on_cmd4, 0x0a},
	{0x4, jdi_fhd_video_on_cmd5, 0x0a},
	{0x4, jdi_fhd_video_on_cmd6, 0x0a},
	{0x4, jdi_fhd_video_on_cmd7, 0x0a},
	{0x4, jdi_fhd_video_on_cmd8, 0x0a},
	{0x4, jdi_fhd_video_on_cmd9, 0x0a},
	{0x4, jdi_fhd_video_on_cmd10, 0x0a},
	{0x4, jdi_fhd_video_on_cmd11, 0x0a},
	{0x4, jdi_fhd_video_on_cmd12, 0x0a},
	{0x4, jdi_fhd_video_on_cmd13, 0xC8},
	{0x4, jdi_fhd_video_on_cmd14, 0x28}
};

#define JDI_FHD_VIDEO_ON_COMMAND 15


static char jdi_fhd_videooff_cmd0[] = {
	0x28, 0x00, 0x05, 0x80
};

static char jdi_fhd_videooff_cmd1[] = {
	0x10, 0x00, 0x05, 0x80
};

static struct mipi_dsi_cmd jdi_fhd_video_off_command[] = {
	{0x4, jdi_fhd_videooff_cmd0, 0x32},
	{0x4, jdi_fhd_videooff_cmd1, 0x78}
};

#define JDI_FHD_VIDEO_OFF_COMMAND 2


static struct command_state jdi_fhd_video_state = {
	0, 1
};

/*---------------------------------------------------------------------------*/
/* Command mode panel information                                            */
/*---------------------------------------------------------------------------*/
static struct commandpanel_info jdi_fhd_video_command_panel = {
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};

/*---------------------------------------------------------------------------*/
/* Video mode panel information                                              */
/*---------------------------------------------------------------------------*/
static struct videopanel_info jdi_fhd_video_video_panel = {
	0, 0, 0, 0, 1, 1, 2, 0, 0x9
};

/*---------------------------------------------------------------------------*/
/* Lane configuration                                                        */
/*---------------------------------------------------------------------------*/
static struct lane_configuration jdi_fhd_video_lane_config = {
	4, 0, 1, 1, 1, 1, 0
};

/*---------------------------------------------------------------------------*/
/* Panel timing                                                              */
/*---------------------------------------------------------------------------*/
static const uint32_t jdi_fhd_video_timings[] = {
	0xce, 0x2e, 0x1e, 0x00, 0x5a, 0x5c, 0x24, 0x30, 0x24, 0x03, 0x04, 0x00
};

static struct panel_timing jdi_fhd_video_timing_info = {
	0x0, 0x04, 0x0a, 0x2c
};

/*---------------------------------------------------------------------------*/
/* Panel reset sequence                                                      */
/*---------------------------------------------------------------------------*/
static struct panel_reset_sequence jdi_fhd_video_reset_seq = {
	{1, 0, 1, }, {20, 200, 20, }, 2
};

/*---------------------------------------------------------------------------*/
/* Backlight setting                                                         */
/*---------------------------------------------------------------------------*/
static struct backlight jdi_fhd_video_backlight = {
	1, 1, 4095, 100, 1, "PMIC_8941"
};

#endif /*_PANEL_JDI_FHD_VIDEO_H_*/
