/* Copyright (c) 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_A216_FHD_VIDEO_H_
#define _PANEL_JDI_A216_FHD_VIDEO_H_
/*---------------------------------------------------------------------------*/
/* HEADER files                                                              */
/*---------------------------------------------------------------------------*/
#include "panel.h"

/*---------------------------------------------------------------------------*/
/* Panel configuration                                                       */
/*---------------------------------------------------------------------------*/
static struct panel_config jdi_a216_fhd_video_panel_data = {
	"qcom,mdss_dsi_jdi_a216_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_a216_fhd_video_panel_res = {
	1080, 1920, 32, 20, 12, 0, 4, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0
};

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

/*---------------------------------------------------------------------------*/
/* Panel on/off command information                                          */
/*---------------------------------------------------------------------------*/
static char jdi_a216_fhd_video_on_cmd0[] = {
	0x51, 0xFF, 0x15, 0x80
};

static char jdi_a216_fhd_video_on_cmd1[] = {
	0x53, 0x0C, 0x15, 0x80
};

static char jdi_a216_fhd_video_on_cmd2[] = {
	0x55, 0x00, 0x15, 0x80
};

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

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

static char jdi_a216_fhd_video_on_cmd5[] = {
	0xB0, 0x04, 0x29, 0x80
};

static char jdi_a216_fhd_video_on_cmd6[] = {
	0x06, 0x00, 0x29, 0xC0,
	0xD0, 0x10, 0x93, 0xBB,
	0x12, 0x8E, 0xFF, 0xFF
};


static struct mipi_dsi_cmd jdi_a216_fhd_video_on_command[] = {
	{0x4, jdi_a216_fhd_video_on_cmd0, 0x0a},
	{0x4, jdi_a216_fhd_video_on_cmd1, 0x0a},
	{0x4, jdi_a216_fhd_video_on_cmd2, 0x0a},
	{0x4, jdi_a216_fhd_video_on_cmd3, 0x28},
	{0x4, jdi_a216_fhd_video_on_cmd4, 0xc8},
	{0x4, jdi_a216_fhd_video_on_cmd5, 0x0a},
	{0xc, jdi_a216_fhd_video_on_cmd6, 0x0a}
};

#define JDI_A216_FHD_VIDEO_ON_COMMAND 7


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

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

static struct mipi_dsi_cmd jdi_a216_fhd_video_off_command[] = {
	{0x4, jdi_a216_fhd_videooff_cmd0, 0x32},
	{0x4, jdi_a216_fhd_videooff_cmd1, 0x78}
};

#define JDI_A216_FHD_VIDEO_OFF_COMMAND 2


static struct command_state jdi_a216_fhd_video_state = {
	1, 1
};

/*---------------------------------------------------------------------------*/
/* Command mode panel information                                            */
/*---------------------------------------------------------------------------*/
static struct commandpanel_info jdi_a216_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_a216_fhd_video_video_panel = {
	0, 0, 0, 0, 1, 1, 2, 0, 0x9
};

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

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

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

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

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

#endif /*_PANEL_JDI_A216_FHD_VIDEO_H_*/
