/* Copyright (c) 2013-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_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, 0, ""
};

/*---------------------------------------------------------------------------*/
/* 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, 0x0},
{ 0x4 , jdi_1080p_video_on_cmd1, 0x0},
{ 0x4 , jdi_1080p_video_on_cmd2, 0x0},
{ 0x4 , jdi_1080p_video_on_cmd3, 0x0},
{ 0x4 , jdi_1080p_video_on_cmd4, 0x0}
};
#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, 0},
{ 0x4 , jdi_1080p_videooff_cmd1, 0}
};
#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, 0x9
};

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

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


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

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, }, { 10, 10, 10, }, 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_*/
