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

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

/*---------------------------------------------------------------------------*/
/* Panel configuration                                                       */
/*---------------------------------------------------------------------------*/

static struct panel_config jdi_1080p_video_panel_data = {
  "qcom,mdss_dsi_jdi_1080p_video", "dsi:0:", "qcom,mdss-dsi-panel",
  10, 0, "DISPLAY_1", 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
};

/*---------------------------------------------------------------------------*/
/* Panel resolution                                                          */
/*---------------------------------------------------------------------------*/
static struct panel_resolution jdi_1080p_video_panel_res = {
  1080, 1920, 96, 64, 16, 0, 4, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0
};

/*---------------------------------------------------------------------------*/
/* Panel Color Information                                                   */
/*---------------------------------------------------------------------------*/
static struct color_info jdi_1080p_video_color = {
  24, 0, 0xff, 0, 0, 0
};

/*---------------------------------------------------------------------------*/
/* Panel Command information                                                 */
/*---------------------------------------------------------------------------*/
static char jdi_1080p_video_on_cmd0[] = {
0x55, 0x00, 0x15, 0x80 };


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


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


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


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




static struct mipi_dsi_cmd jdi_1080p_video_on_command[] = {
{ 0x4 , jdi_1080p_video_on_cmd0},
{ 0x4 , jdi_1080p_video_on_cmd1},
{ 0x4 , jdi_1080p_video_on_cmd2},
{ 0x4 , jdi_1080p_video_on_cmd3},
{ 0x4 , jdi_1080p_video_on_cmd4}
};
#define JDI_1080P_VIDEO_ON_COMMAND 5


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


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




static struct mipi_dsi_cmd jdi_1080p_video_off_command[] = {
{ 0x4 , jdi_1080p_videooff_cmd0},
{ 0x4 , jdi_1080p_videooff_cmd1}
};
#define JDI_1080P_VIDEO_OFF_COMMAND 2


static struct command_state jdi_1080p_video_state = {
  0, 1
};

/*---------------------------------------------------------------------------*/
/* Command mode panel information                                            */
/*---------------------------------------------------------------------------*/

static struct commandpanel_info jdi_1080p_video_command_panel = {
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};

/*---------------------------------------------------------------------------*/
/* Video mode panel information                                              */
/*---------------------------------------------------------------------------*/

static struct videopanel_info jdi_1080p_video_video_panel = {
  0, 0, 0, 0, 1, 1, 2, 0, 0
};

/*---------------------------------------------------------------------------*/
/* Lane Configuration                                                        */
/*---------------------------------------------------------------------------*/

static struct lane_configuration jdi_1080p_video_lane_config = {
  4, 0, 1, 1, 1, 1
};


/*---------------------------------------------------------------------------*/
/* Panel Timing                                                              */
/*---------------------------------------------------------------------------*/
static const uint32_t jdi_1080p_video_timings[] = {
  0xe7, 0x36, 0x24, 0x00, 0x66, 0x6a, 0x2a, 0x3a,  0x2d, 0x03, 0x04, 0x00
};



static struct mipi_dsi_cmd jdi_1080p_video_rotation[] = {

};
#define JDI_1080P_VIDEO_ROTATION 0


static struct panel_timing jdi_1080p_video_timing_info = {
  0x0, 0x04, 0x04, 0x1b
};

static struct panel_reset_sequence jdi_1080p_video_panel_reset_seq = {
{ 1, 0, 1, }, { 20, 200, 20, }, 2
};

/*---------------------------------------------------------------------------*/
/* Backlight Settings                                                        */
/*---------------------------------------------------------------------------*/

static struct backlight jdi_1080p_video_backlight = {
  1, 1, 4095, 100, 1, "PMIC_8941"
};
#define JDI_1080P_VIDEO_SIGNATURE 0xFF22


#endif /*_PANEL_JDI_1080P_VIDEO_H_*/
