blob: 438e68b8c415764d023aa23fa1507a345f39cfe3 [file] [log] [blame]
Shuo Yana935c302015-01-06 18:23:24 +08001/* Copyright (c) 2013-2015, The Linux Foundation. All rights reserved.
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +05302 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions
5 * are met:
6 * * Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 * * Redistributions in binary form must reproduce the above copyright
9 * notice, this list of conditions and the following disclaimer in
10 * the documentation and/or other materials provided with the
11 * distribution.
12 * * Neither the name of The Linux Foundation nor the names of its
13 * contributors may be used to endorse or promote products derived
14 * from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
19 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
20 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
22 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
23 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
26 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 */
29
30#include <debug.h>
31#include <err.h>
32#include <smem.h>
33#include <msm_panel.h>
34#include <board.h>
35#include <mipi_dsi.h>
Mao Flynn81409472014-04-10 15:01:30 +080036#include <target/display.h>
Vineet Bajaj02a1a8f2015-04-29 17:19:57 +053037#include <mipi_dsi_i2c.h>
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +053038
39#include "include/panel.h"
40#include "panel_display.h"
Siddharth Zaveri2472a602015-12-02 17:11:32 -050041#include <blsp_qup.h>
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +053042
43/*---------------------------------------------------------------------------*/
44/* GCDB Panel Database */
45/*---------------------------------------------------------------------------*/
46#include "include/panel_jdi_1080p_video.h"
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +053047#include "include/panel_nt35590_720p_video.h"
48#include "include/panel_nt35590_720p_cmd.h"
Mao Flynn81409472014-04-10 15:01:30 +080049#include "include/panel_innolux_720p_video.h"
Shuo Yan40c660c2014-04-24 15:58:43 +080050#include "include/panel_otm8019a_fwvga_video.h"
Mao Flynn67d5c592014-06-17 16:41:02 +080051#include "include/panel_otm1283a_720p_video.h"
Mao Flynn732e3c22014-07-02 17:39:02 +080052#include "include/panel_nt35596_1080p_skuk_video.h"
Vineet Bajaj7339d0b2014-07-24 21:51:44 +053053#include "include/panel_sharp_wqxga_dualdsi_video.h"
Sandeep Panda230cb722014-08-20 11:46:27 +053054#include "include/panel_jdi_fhd_video.h"
Shuo Yan2616adc2014-08-13 08:22:27 +080055#include "include/panel_hx8379a_fwvga_video.h"
Sandeep Panda230cb722014-08-20 11:46:27 +053056#include "include/panel_hx8394d_720p_video.h"
Gustavo Solairafb6fdd62014-09-30 08:15:32 -030057#include "include/panel_nt35521_wxga_video.h"
Gustavo Solaira80c274c2014-10-22 16:21:27 -030058#include "include/panel_samsung_wxga_video.h"
Gustavo Solaira48aa56d2014-10-22 16:26:49 -030059#include "include/panel_hx8279a_wsvga_video.h"
Shuo Yana935c302015-01-06 18:23:24 +080060#include "include/panel_r61318_hd_video.h"
Shuo Yan959d5c12015-01-21 17:31:30 +080061#include "include/panel_r63417_1080p_video.h"
Vineet Bajajcc9f0572015-02-02 13:54:10 +053062#include "include/panel_jdi_a216_fhd_video.h"
Vineet Bajaj02a1a8f2015-04-29 17:19:57 +053063#include "include/panel_adv7533_1080p60.h"
64#include "include/panel_adv7533_720p60.h"
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +053065
66#define DISPLAY_MAX_PANEL_DETECTION 2
Shuo Yan4f57eb22014-05-27 10:57:17 +080067#define OTM8019A_FWVGA_VIDEO_PANEL_ON_DELAY 50
Padmanabhan Komanduru21e465e2014-09-01 13:51:38 +053068#define NT35590_720P_CMD_PANEL_ON_DELAY 40
Gustavo Solaira80c274c2014-10-22 16:21:27 -030069#define SAMSUNG_WXGA_VIDEO_PANEL_ON_DELAY 100
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +053070
Padmanabhan Komanduru7271e162015-03-17 16:06:07 +053071#define BOARD_SOC_VERSION3 0x30000
72
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +053073/*---------------------------------------------------------------------------*/
74/* static panel selection variable */
75/*---------------------------------------------------------------------------*/
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +053076static uint32_t auto_pan_loop = 0;
77
Padmanabhan Komandurub088f922014-10-28 23:55:20 +053078uint32_t panel_regulator_settings[] = {
79 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
80};
81
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +053082/*
83 * The list of panels that are supported on this target.
84 * Any panel in this list can be selected using fastboot oem command.
85 */
86static struct panel_list supp_panels[] = {
87 {"jdi_1080p_video", JDI_1080P_VIDEO_PANEL},
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +053088 {"nt35590_720p_video", NT35590_720P_VIDEO_PANEL},
89 {"nt35590_720p_cmd", NT35590_720P_CMD_PANEL},
Mao Flynn81409472014-04-10 15:01:30 +080090 {"innolux_720p_video", INNOLUX_720P_VIDEO_PANEL},
Shuo Yan40c660c2014-04-24 15:58:43 +080091 {"otm8019a_fwvga_video", OTM8019A_FWVGA_VIDEO_PANEL},
Mao Flynn67d5c592014-06-17 16:41:02 +080092 {"otm1283a_720p_video", OTM1283A_720P_VIDEO_PANEL},
Mao Flynn732e3c22014-07-02 17:39:02 +080093 {"nt35596_1080p_video", NT35596_1080P_VIDEO_PANEL},
Vineet Bajaj7339d0b2014-07-24 21:51:44 +053094 {"sharp_wqxga_dualdsi_video",SHARP_WQXGA_DUALDSI_VIDEO_PANEL},
Shuo Yan2616adc2014-08-13 08:22:27 +080095 {"jdi_fhd_video", JDI_FHD_VIDEO_PANEL},
96 {"hx8379a_wvga_video", HX8379A_FWVGA_VIDEO_PANEL},
Gustavo Solairafb6fdd62014-09-30 08:15:32 -030097 {"hx8394d_720p_video", HX8394D_720P_VIDEO_PANEL},
Gustavo Solaira80c274c2014-10-22 16:21:27 -030098 {"nt35521_wxga_video", NT35521_WXGA_VIDEO_PANEL},
Gustavo Solaira48aa56d2014-10-22 16:26:49 -030099 {"samsung_wxga_video", SAMSUNG_WXGA_VIDEO_PANEL},
Shuo Yana935c302015-01-06 18:23:24 +0800100 {"hx8279a_wsvga_video", HX8279A_WSVGA_VIDEO_PANEL},
101 {"r61318_hd_video", R61318_HD_VIDEO_PANEL},
Shuo Yan959d5c12015-01-21 17:31:30 +0800102 {"r63417_1080p_video", R63417_1080P_VIDEO_PANEL},
Vineet Bajajcc9f0572015-02-02 13:54:10 +0530103 {"jdi_a216_fhd_video", JDI_A216_FHD_VIDEO_PANEL},
Vineet Bajaj02a1a8f2015-04-29 17:19:57 +0530104 {"adv7533_1080p_video", ADV7533_1080P_VIDEO_PANEL},
105 {"adv7533_720p_video", ADV7533_720P_VIDEO_PANEL},
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530106};
107
108static uint32_t panel_id;
109
110int oem_panel_rotation()
111{
112 return NO_ERROR;
113}
114
115int oem_panel_on()
116{
Shuo Yan4f57eb22014-05-27 10:57:17 +0800117 /*
Padmanabhan Komanduru21e465e2014-09-01 13:51:38 +0530118 *OEM can keep their panel specific on instructions in this
Shuo Yan4f57eb22014-05-27 10:57:17 +0800119 *function
120 */
121 if (panel_id == OTM8019A_FWVGA_VIDEO_PANEL) {
122 /* needs extra delay to avoid unexpected artifacts */
123 mdelay(OTM8019A_FWVGA_VIDEO_PANEL_ON_DELAY);
Padmanabhan Komanduru21e465e2014-09-01 13:51:38 +0530124 } else if (panel_id == NT35590_720P_CMD_PANEL) {
125 /* needs extra delay to avoid snow screen artifacts */
126 mdelay(NT35590_720P_CMD_PANEL_ON_DELAY);
Gustavo Solaira80c274c2014-10-22 16:21:27 -0300127 } else if (panel_id == SAMSUNG_WXGA_VIDEO_PANEL) {
128 /* needs extra delay to avoid unexpected artifacts */
129 mdelay(SAMSUNG_WXGA_VIDEO_PANEL_ON_DELAY);
Shuo Yan4f57eb22014-05-27 10:57:17 +0800130 }
131
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530132 return NO_ERROR;
133}
134
135int oem_panel_off()
136{
137 /* OEM can keep their panel specific off instructions
138 * in this function
139 */
140 return NO_ERROR;
141}
142
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700143static int init_panel_data(struct panel_struct *panelstruct,
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530144 struct msm_panel_info *pinfo,
145 struct mdss_dsi_phy_ctrl *phy_db)
146{
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700147 int pan_type = PANEL_TYPE_DSI;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530148
149 switch (panel_id) {
150 case JDI_1080P_VIDEO_PANEL:
151 panelstruct->paneldata = &jdi_1080p_video_panel_data;
152 panelstruct->paneldata->panel_with_enable_gpio = 1;
153 panelstruct->panelres = &jdi_1080p_video_panel_res;
154 panelstruct->color = &jdi_1080p_video_color;
155 panelstruct->videopanel = &jdi_1080p_video_video_panel;
156 panelstruct->commandpanel = &jdi_1080p_video_command_panel;
157 panelstruct->state = &jdi_1080p_video_state;
158 panelstruct->laneconfig = &jdi_1080p_video_lane_config;
159 panelstruct->paneltiminginfo
160 = &jdi_1080p_video_timing_info;
161 panelstruct->panelresetseq
162 = &jdi_1080p_video_panel_reset_seq;
163 panelstruct->backlightinfo = &jdi_1080p_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530164 pinfo->mipi.panel_on_cmds
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530165 = jdi_1080p_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530166 pinfo->mipi.num_of_panel_on_cmds
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530167 = JDI_1080P_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530168 pinfo->mipi.panel_off_cmds
169 = jdi_1080p_video_off_command;
170 pinfo->mipi.num_of_panel_off_cmds
171 = JDI_1080P_VIDEO_OFF_COMMAND;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530172 memcpy(phy_db->timing,
173 jdi_1080p_video_timings, TIMING_SIZE);
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530174 pinfo->mipi.signature = JDI_1080P_VIDEO_SIGNATURE;
175 break;
176 case NT35590_720P_VIDEO_PANEL:
177 panelstruct->paneldata = &nt35590_720p_video_panel_data;
178 panelstruct->panelres = &nt35590_720p_video_panel_res;
179 panelstruct->color = &nt35590_720p_video_color;
180 panelstruct->videopanel = &nt35590_720p_video_video_panel;
181 panelstruct->commandpanel = &nt35590_720p_video_command_panel;
182 panelstruct->state = &nt35590_720p_video_state;
183 panelstruct->laneconfig = &nt35590_720p_video_lane_config;
184 panelstruct->paneltiminginfo
185 = &nt35590_720p_video_timing_info;
186 panelstruct->panelresetseq
187 = &nt35590_720p_video_panel_reset_seq;
188 panelstruct->backlightinfo = &nt35590_720p_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530189 pinfo->mipi.panel_on_cmds
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530190 = nt35590_720p_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530191 pinfo->mipi.num_of_panel_on_cmds
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530192 = NT35590_720P_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530193 pinfo->mipi.panel_off_cmds
194 = nt35590_720p_video_off_command;
195 pinfo->mipi.num_of_panel_off_cmds
196 = NT35590_720P_VIDEO_OFF_COMMAND;
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530197 memcpy(phy_db->timing,
198 nt35590_720p_video_timings, TIMING_SIZE);
199 pinfo->mipi.signature = NT35590_720P_VIDEO_SIGNATURE;
200 break;
201 case NT35590_720P_CMD_PANEL:
202 panelstruct->paneldata = &nt35590_720p_cmd_panel_data;
203 panelstruct->panelres = &nt35590_720p_cmd_panel_res;
204 panelstruct->color = &nt35590_720p_cmd_color;
205 panelstruct->videopanel = &nt35590_720p_cmd_video_panel;
206 panelstruct->commandpanel = &nt35590_720p_cmd_command_panel;
207 panelstruct->state = &nt35590_720p_cmd_state;
208 panelstruct->laneconfig = &nt35590_720p_cmd_lane_config;
209 panelstruct->paneltiminginfo = &nt35590_720p_cmd_timing_info;
210 panelstruct->panelresetseq
211 = &nt35590_720p_cmd_panel_reset_seq;
212 panelstruct->backlightinfo = &nt35590_720p_cmd_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530213 pinfo->mipi.panel_on_cmds
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530214 = nt35590_720p_cmd_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530215 pinfo->mipi.num_of_panel_on_cmds
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530216 = NT35590_720P_CMD_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530217 pinfo->mipi.panel_off_cmds
218 = nt35590_720p_cmd_off_command;
219 pinfo->mipi.num_of_panel_off_cmds
220 = NT35590_720P_CMD_OFF_COMMAND;
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530221 memcpy(phy_db->timing,
222 nt35590_720p_cmd_timings, TIMING_SIZE);
223 pinfo->mipi.signature = NT35590_720P_CMD_SIGNATURE;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530224 break;
Mao Flynn81409472014-04-10 15:01:30 +0800225 case INNOLUX_720P_VIDEO_PANEL:
226 panelstruct->paneldata = &innolux_720p_video_panel_data;
227 panelstruct->panelres = &innolux_720p_video_panel_res;
228 panelstruct->color = &innolux_720p_video_color;
229 panelstruct->videopanel = &innolux_720p_video_video_panel;
230 panelstruct->commandpanel = &innolux_720p_video_command_panel;
231 panelstruct->state = &innolux_720p_video_state;
232 panelstruct->laneconfig = &innolux_720p_video_lane_config;
233 panelstruct->paneltiminginfo
Mao Flynn67d5c592014-06-17 16:41:02 +0800234 = &innolux_720p_video_timing_info;
Mao Flynn81409472014-04-10 15:01:30 +0800235 panelstruct->panelresetseq
Mao Flynn67d5c592014-06-17 16:41:02 +0800236 = &innolux_720p_video_reset_seq;
Mao Flynn81409472014-04-10 15:01:30 +0800237 panelstruct->backlightinfo = &innolux_720p_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530238 pinfo->mipi.panel_on_cmds
Mao Flynn67d5c592014-06-17 16:41:02 +0800239 = innolux_720p_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530240 pinfo->mipi.num_of_panel_on_cmds
Mao Flynn67d5c592014-06-17 16:41:02 +0800241 = INNOLUX_720P_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530242 pinfo->mipi.panel_off_cmds
243 = innolux_720p_video_off_command;
244 pinfo->mipi.num_of_panel_off_cmds
245 = INNOLUX_720P_VIDEO_OFF_COMMAND;
Mao Flynn81409472014-04-10 15:01:30 +0800246 memcpy(phy_db->timing,
Mao Flynn67d5c592014-06-17 16:41:02 +0800247 innolux_720p_video_timings, TIMING_SIZE);
Mao Flynn81409472014-04-10 15:01:30 +0800248 break;
Shuo Yan40c660c2014-04-24 15:58:43 +0800249 case OTM8019A_FWVGA_VIDEO_PANEL:
Mao Flynn67d5c592014-06-17 16:41:02 +0800250 panelstruct->paneldata = &otm8019a_fwvga_video_panel_data;
251 panelstruct->panelres = &otm8019a_fwvga_video_panel_res;
252 panelstruct->color = &otm8019a_fwvga_video_color;
253 panelstruct->videopanel = &otm8019a_fwvga_video_video_panel;
254 panelstruct->commandpanel = &otm8019a_fwvga_video_command_panel;
255 panelstruct->state = &otm8019a_fwvga_video_state;
256 panelstruct->laneconfig = &otm8019a_fwvga_video_lane_config;
257 panelstruct->paneltiminginfo
258 = &otm8019a_fwvga_video_timing_info;
259 panelstruct->panelresetseq
260 = &otm8019a_fwvga_video_reset_seq;
261 panelstruct->backlightinfo = &otm8019a_fwvga_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530262 pinfo->mipi.panel_on_cmds
Mao Flynn67d5c592014-06-17 16:41:02 +0800263 = otm8019a_fwvga_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530264 pinfo->mipi.num_of_panel_on_cmds
Mao Flynn67d5c592014-06-17 16:41:02 +0800265 = OTM8019A_FWVGA_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530266 pinfo->mipi.panel_off_cmds
267 = otm8019a_fwvga_video_off_command;
268 pinfo->mipi.num_of_panel_off_cmds
269 = OTM8019A_FWVGA_VIDEO_OFF_COMMAND;
Mao Flynn67d5c592014-06-17 16:41:02 +0800270 memcpy(phy_db->timing,
271 otm8019a_fwvga_video_timings, TIMING_SIZE);
272 break;
273 case OTM1283A_720P_VIDEO_PANEL:
274 panelstruct->paneldata = &otm1283a_720p_video_panel_data;
275 panelstruct->panelres = &otm1283a_720p_video_panel_res;
276 panelstruct->color = &otm1283a_720p_video_color;
277 panelstruct->videopanel = &otm1283a_720p_video_video_panel;
278 panelstruct->commandpanel = &otm1283a_720p_video_command_panel;
279 panelstruct->state = &otm1283a_720p_video_state;
280 panelstruct->laneconfig = &otm1283a_720p_video_lane_config;
281 panelstruct->paneltiminginfo
282 = &otm1283a_720p_video_timing_info;
283 panelstruct->panelresetseq
284 = &otm1283a_720p_video_reset_seq;
285 panelstruct->backlightinfo = &otm1283a_720p_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530286 pinfo->mipi.panel_on_cmds
Mao Flynn67d5c592014-06-17 16:41:02 +0800287 = otm1283a_720p_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530288 pinfo->mipi.num_of_panel_on_cmds
Mao Flynn67d5c592014-06-17 16:41:02 +0800289 = OTM1283A_720P_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530290 pinfo->mipi.panel_off_cmds
291 = otm1283a_720p_video_off_command;
292 pinfo->mipi.num_of_panel_off_cmds
293 = OTM1283A_720P_VIDEO_OFF_COMMAND;
Mao Flynn67d5c592014-06-17 16:41:02 +0800294 memcpy(phy_db->timing,
295 otm1283a_720p_video_timings, TIMING_SIZE);
296 break;
Mao Flynn732e3c22014-07-02 17:39:02 +0800297 case NT35596_1080P_VIDEO_PANEL:
298 panelstruct->paneldata = &nt35596_1080p_skuk_video_panel_data;
299 panelstruct->panelres = &nt35596_1080p_skuk_video_panel_res;
300 panelstruct->color = &nt35596_1080p_skuk_video_color;
301 panelstruct->videopanel = &nt35596_1080p_skuk_video_video_panel;
302 panelstruct->commandpanel = &nt35596_1080p_skuk_video_command_panel;
303 panelstruct->state = &nt35596_1080p_skuk_video_state;
304 panelstruct->laneconfig = &nt35596_1080p_skuk_video_lane_config;
305 panelstruct->paneltiminginfo
306 = &nt35596_1080p_skuk_video_timing_info;
307 panelstruct->panelresetseq
308 = &nt35596_1080p_skuk_video_reset_seq;
309 panelstruct->backlightinfo = &nt35596_1080p_skuk_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530310 pinfo->mipi.panel_on_cmds
Mao Flynn732e3c22014-07-02 17:39:02 +0800311 = nt35596_1080p_skuk_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530312 pinfo->mipi.num_of_panel_on_cmds
Mao Flynn732e3c22014-07-02 17:39:02 +0800313 = NT35596_1080P_SKUK_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530314 pinfo->mipi.panel_off_cmds
315 = nt35596_1080p_skuk_video_off_command;
316 pinfo->mipi.num_of_panel_off_cmds
317 = NT35596_1080P_SKUK_VIDEO_OFF_COMMAND;
Mao Flynn732e3c22014-07-02 17:39:02 +0800318 memcpy(phy_db->timing,
319 nt35596_1080p_skuk_video_timings, TIMING_SIZE);
320 break;
Vineet Bajaj7339d0b2014-07-24 21:51:44 +0530321 case SHARP_WQXGA_DUALDSI_VIDEO_PANEL:
322 panelstruct->paneldata = &sharp_wqxga_dualdsi_video_panel_data;
323 panelstruct->panelres = &sharp_wqxga_dualdsi_video_panel_res;
324 panelstruct->color = &sharp_wqxga_dualdsi_video_color;
325 panelstruct->videopanel = &sharp_wqxga_dualdsi_video_video_panel;
326 panelstruct->commandpanel = &sharp_wqxga_dualdsi_video_command_panel;
327 panelstruct->state = &sharp_wqxga_dualdsi_video_state;
328 panelstruct->laneconfig = &sharp_wqxga_dualdsi_video_lane_config;
329 panelstruct->paneltiminginfo
330 = &sharp_wqxga_dualdsi_video_timing_info;
331 panelstruct->panelresetseq
332 = &sharp_wqxga_dualdsi_video_reset_seq;
333 panelstruct->backlightinfo = &sharp_wqxga_dualdsi_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530334 pinfo->mipi.panel_on_cmds
Vineet Bajaj7339d0b2014-07-24 21:51:44 +0530335 = sharp_wqxga_dualdsi_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530336 pinfo->mipi.num_of_panel_on_cmds
Vineet Bajaj7339d0b2014-07-24 21:51:44 +0530337 = SHARP_WQXGA_DUALDSI_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530338 pinfo->mipi.panel_off_cmds
339 = sharp_wqxga_dualdsi_video_off_command;
340 pinfo->mipi.num_of_panel_off_cmds
341 = SHARP_WQXGA_DUALDSI_VIDEO_OFF_COMMAND;
Vineet Bajaj7339d0b2014-07-24 21:51:44 +0530342 memcpy(phy_db->timing,
343 sharp_wqxga_dualdsi_video_timings, TIMING_SIZE);
344 pinfo->mipi.signature = SHARP_WQXGA_DUALDSI_VIDEO_SIGNATURE;
345 break;
Vineet Bajajf4fcc712014-08-04 17:38:55 +0530346 case JDI_FHD_VIDEO_PANEL:
347 panelstruct->paneldata = &jdi_fhd_video_panel_data;
348 panelstruct->panelres = &jdi_fhd_video_panel_res;
349 panelstruct->color = &jdi_fhd_video_color;
350 panelstruct->videopanel = &jdi_fhd_video_video_panel;
351 panelstruct->commandpanel = &jdi_fhd_video_command_panel;
352 panelstruct->state = &jdi_fhd_video_state;
353 panelstruct->laneconfig = &jdi_fhd_video_lane_config;
354 panelstruct->paneltiminginfo
355 = &jdi_fhd_video_timing_info;
356 panelstruct->panelresetseq
357 = &jdi_fhd_video_reset_seq;
358 panelstruct->backlightinfo = &jdi_fhd_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530359 pinfo->mipi.panel_on_cmds
Vineet Bajajf4fcc712014-08-04 17:38:55 +0530360 = jdi_fhd_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530361 pinfo->mipi.num_of_panel_on_cmds
Vineet Bajajf4fcc712014-08-04 17:38:55 +0530362 = JDI_FHD_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530363 pinfo->mipi.panel_off_cmds
364 = jdi_fhd_video_off_command;
365 pinfo->mipi.num_of_panel_off_cmds
366 = JDI_FHD_VIDEO_OFF_COMMAND;
Vineet Bajajf4fcc712014-08-04 17:38:55 +0530367 memcpy(phy_db->timing,
368 jdi_fhd_video_timings, TIMING_SIZE);
369 break;
Shuo Yan2616adc2014-08-13 08:22:27 +0800370 case HX8379A_FWVGA_VIDEO_PANEL:
371 panelstruct->paneldata = &hx8379a_fwvga_video_panel_data;
372 panelstruct->panelres = &hx8379a_fwvga_video_panel_res;
373 panelstruct->color = &hx8379a_fwvga_video_color;
374 panelstruct->videopanel = &hx8379a_fwvga_video_video_panel;
375 panelstruct->commandpanel = &hx8379a_fwvga_video_command_panel;
376 panelstruct->state = &hx8379a_fwvga_video_state;
377 panelstruct->laneconfig = &hx8379a_fwvga_video_lane_config;
378 panelstruct->paneltiminginfo
379 = &hx8379a_fwvga_video_timing_info;
380 panelstruct->panelresetseq
381 = &hx8379a_fwvga_video_reset_seq;
382 panelstruct->backlightinfo = &hx8379a_fwvga_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530383 pinfo->mipi.panel_on_cmds
Shuo Yan2616adc2014-08-13 08:22:27 +0800384 = hx8379a_fwvga_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530385 pinfo->mipi.num_of_panel_on_cmds
Shuo Yan2616adc2014-08-13 08:22:27 +0800386 = HX8379A_FWVGA_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530387 pinfo->mipi.panel_off_cmds
388 = hx8379a_fwvga_video_off_command;
389 pinfo->mipi.num_of_panel_off_cmds
390 = HX8379A_FWVGA_VIDEO_OFF_COMMAND;
Shuo Yan2616adc2014-08-13 08:22:27 +0800391 memcpy(phy_db->timing,
392 hx8379a_fwvga_video_timings, TIMING_SIZE);
393 break;
Sandeep Panda230cb722014-08-20 11:46:27 +0530394 case HX8394D_720P_VIDEO_PANEL:
395 panelstruct->paneldata = &hx8394d_720p_video_panel_data;
396 panelstruct->panelres = &hx8394d_720p_video_panel_res;
397 panelstruct->color = &hx8394d_720p_video_color;
398 panelstruct->videopanel = &hx8394d_720p_video_video_panel;
399 panelstruct->commandpanel = &hx8394d_720p_video_command_panel;
400 panelstruct->state = &hx8394d_720p_video_state;
401 panelstruct->laneconfig = &hx8394d_720p_video_lane_config;
402 panelstruct->paneltiminginfo
403 = &hx8394d_720p_video_timing_info;
404 panelstruct->panelresetseq
405 = &hx8394d_720p_video_panel_reset_seq;
406 panelstruct->backlightinfo = &hx8394d_720p_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530407 pinfo->mipi.panel_on_cmds
Sandeep Panda230cb722014-08-20 11:46:27 +0530408 = hx8394d_720p_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530409 pinfo->mipi.num_of_panel_on_cmds
Sandeep Panda230cb722014-08-20 11:46:27 +0530410 = HX8394D_720P_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530411 pinfo->mipi.panel_off_cmds
412 = hx8394d_720p_video_off_command;
413 pinfo->mipi.num_of_panel_off_cmds
414 = HX8394D_720P_VIDEO_OFF_COMMAND;
Sandeep Panda230cb722014-08-20 11:46:27 +0530415 memcpy(phy_db->timing,
416 hx8394d_720p_video_timings, TIMING_SIZE);
417 pinfo->mipi.signature = HX8394D_720P_VIDEO_SIGNATURE;
418 break;
Gustavo Solairafb6fdd62014-09-30 08:15:32 -0300419 case NT35521_WXGA_VIDEO_PANEL:
420 panelstruct->paneldata = &nt35521_wxga_video_panel_data;
421 panelstruct->panelres = &nt35521_wxga_video_panel_res;
422 panelstruct->color = &nt35521_wxga_video_color;
423 panelstruct->videopanel = &nt35521_wxga_video_video_panel;
424 panelstruct->commandpanel = &nt35521_wxga_video_command_panel;
425 panelstruct->state = &nt35521_wxga_video_state;
426 panelstruct->laneconfig = &nt35521_wxga_video_lane_config;
427 panelstruct->paneltiminginfo
428 = &nt35521_wxga_video_timing_info;
429 panelstruct->panelresetseq
430 = &nt35521_wxga_video_reset_seq;
431 panelstruct->backlightinfo = &nt35521_wxga_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530432 pinfo->mipi.panel_on_cmds
Gustavo Solairafb6fdd62014-09-30 08:15:32 -0300433 = nt35521_wxga_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530434 pinfo->mipi.num_of_panel_on_cmds
Gustavo Solairafb6fdd62014-09-30 08:15:32 -0300435 = NT35521_WXGA_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530436 pinfo->mipi.panel_off_cmds
437 = nt35521_wxga_video_off_command;
438 pinfo->mipi.num_of_panel_off_cmds
439 = NT35521_WXGA_VIDEO_OFF_COMMAND;
Gustavo Solairafb6fdd62014-09-30 08:15:32 -0300440 memcpy(phy_db->timing,
441 nt35521_wxga_video_timings, TIMING_SIZE);
442 break;
Gustavo Solaira80c274c2014-10-22 16:21:27 -0300443 case SAMSUNG_WXGA_VIDEO_PANEL:
444 panelstruct->paneldata = &samsung_wxga_video_panel_data;
445 panelstruct->panelres = &samsung_wxga_video_panel_res;
446 panelstruct->color = &samsung_wxga_video_color;
447 panelstruct->videopanel = &samsung_wxga_video_video_panel;
448 panelstruct->commandpanel = &samsung_wxga_video_command_panel;
449 panelstruct->state = &samsung_wxga_video_state;
450 panelstruct->laneconfig = &samsung_wxga_video_lane_config;
451 panelstruct->paneltiminginfo
452 = &samsung_wxga_video_timing_info;
453 panelstruct->panelresetseq
454 = &samsung_wxga_video_reset_seq;
455 panelstruct->backlightinfo = &samsung_wxga_video_backlight;
456 pinfo->mipi.panel_on_cmds
457 = samsung_wxga_video_on_command;
458 pinfo->mipi.num_of_panel_on_cmds
459 = SAMSUNG_WXGA_VIDEO_ON_COMMAND;
460 pinfo->mipi.panel_off_cmds
461 = samsung_wxga_video_off_command;
462 pinfo->mipi.num_of_panel_off_cmds
463 = SAMSUNG_WXGA_VIDEO_OFF_COMMAND;
464 memcpy(phy_db->timing,
465 samsung_wxga_video_timings, TIMING_SIZE);
466 break;
Gustavo Solaira48aa56d2014-10-22 16:26:49 -0300467 case HX8279A_WSVGA_VIDEO_PANEL:
468 panelstruct->paneldata = &hx8279a_wsvga_video_panel_data;
469 panelstruct->panelres = &hx8279a_wsvga_video_panel_res;
470 panelstruct->color = &hx8279a_wsvga_video_color;
471 panelstruct->videopanel = &hx8279a_wsvga_video_video_panel;
472 panelstruct->commandpanel = &hx8279a_wsvga_video_command_panel;
473 panelstruct->state = &hx8279a_wsvga_video_state;
474 panelstruct->laneconfig = &hx8279a_wsvga_video_lane_config;
475 panelstruct->paneltiminginfo
476 = &hx8279a_wsvga_video_timing_info;
477 panelstruct->panelresetseq
478 = &hx8279a_wsvga_video_reset_seq;
479 panelstruct->backlightinfo = &hx8279a_wsvga_video_backlight;
480 pinfo->mipi.panel_on_cmds
481 = hx8279a_wsvga_video_on_command;
482 pinfo->mipi.num_of_panel_on_cmds
483 = HX8279A_WSVGA_VIDEO_ON_COMMAND;
484 pinfo->mipi.panel_off_cmds
485 = hx8279a_wsvga_video_off_command;
486 pinfo->mipi.num_of_panel_off_cmds
487 = HX8279A_WSVGA_VIDEO_OFF_COMMAND;
488 memcpy(phy_db->timing,
489 hx8279a_wsvga_video_timings, TIMING_SIZE);
490 break;
Shuo Yana935c302015-01-06 18:23:24 +0800491 case R61318_HD_VIDEO_PANEL:
492 panelstruct->paneldata = & r61318_hd_video_panel_data;
493 panelstruct->panelres = & r61318_hd_video_panel_res;
494 panelstruct->color = & r61318_hd_video_color;
495 panelstruct->videopanel = & r61318_hd_video_video_panel;
496 panelstruct->commandpanel = & r61318_hd_video_command_panel;
497 panelstruct->state = & r61318_hd_video_state;
498 panelstruct->laneconfig = & r61318_hd_video_lane_config;
499 panelstruct->paneltiminginfo
500 = & r61318_hd_video_timing_info;
501 panelstruct->panelresetseq
502 = & r61318_hd_video_reset_seq;
503 panelstruct->backlightinfo = & r61318_hd_video_backlight;
504 pinfo->mipi.panel_on_cmds
505 = r61318_hd_video_on_command;
506 pinfo->mipi.num_of_panel_on_cmds
507 = R61318_HD_VIDEO_ON_COMMAND;
508 pinfo->mipi.panel_off_cmds
509 = r61318_hd_video_off_command;
510 pinfo->mipi.num_of_panel_off_cmds
511 = R61318_HD_VIDEO_OFF_COMMAND;
512 memcpy(phy_db->timing,
513 r61318_hd_video_timings, TIMING_SIZE);
514 break;
Shuo Yan959d5c12015-01-21 17:31:30 +0800515 case R63417_1080P_VIDEO_PANEL:
516 panelstruct->paneldata = & r63417_1080p_video_panel_data;
517 panelstruct->panelres = & r63417_1080p_video_panel_res;
518 panelstruct->color = & r63417_1080p_video_color;
519 panelstruct->videopanel = & r63417_1080p_video_video_panel;
520 panelstruct->commandpanel = & r63417_1080p_video_command_panel;
521 panelstruct->state = & r63417_1080p_video_state;
522 panelstruct->laneconfig = & r63417_1080p_video_lane_config;
523 panelstruct->paneltiminginfo
524 = & r63417_1080p_video_timing_info;
525 panelstruct->panelresetseq
526 = & r63417_1080p_video_reset_seq;
527 panelstruct->backlightinfo = & r63417_1080p_video_backlight;
528 pinfo->mipi.panel_on_cmds
529 = r63417_1080p_video_on_command;
530 pinfo->mipi.num_of_panel_on_cmds
531 = R63417_1080P_VIDEO_ON_COMMAND;
532 pinfo->mipi.panel_off_cmds
533 = r63417_1080p_video_off_command;
534 pinfo->mipi.num_of_panel_off_cmds
535 = R63417_1080P_VIDEO_OFF_COMMAND;
536 memcpy(phy_db->timing,
537 r63417_1080p_video_timings, TIMING_SIZE);
538 break;
Vineet Bajajcc9f0572015-02-02 13:54:10 +0530539 case JDI_A216_FHD_VIDEO_PANEL:
540 panelstruct->paneldata = &jdi_a216_fhd_video_panel_data;
541 panelstruct->panelres = &jdi_a216_fhd_video_panel_res;
542 panelstruct->color = &jdi_a216_fhd_video_color;
543 panelstruct->videopanel = &jdi_a216_fhd_video_video_panel;
544 panelstruct->commandpanel = &jdi_a216_fhd_video_command_panel;
545 panelstruct->state = &jdi_a216_fhd_video_state;
546 panelstruct->laneconfig = &jdi_a216_fhd_video_lane_config;
547 panelstruct->paneltiminginfo
548 = &jdi_a216_fhd_video_timing_info;
549 panelstruct->panelresetseq
550 = &jdi_a216_fhd_video_reset_seq;
551 panelstruct->backlightinfo = &jdi_a216_fhd_video_backlight;
Vineet Bajajf4671f72015-02-11 20:03:52 +0530552 pinfo->mipi.panel_on_cmds
Vineet Bajajcc9f0572015-02-02 13:54:10 +0530553 = jdi_a216_fhd_video_on_command;
Vineet Bajajf4671f72015-02-11 20:03:52 +0530554 pinfo->mipi.num_of_panel_on_cmds
Vineet Bajajcc9f0572015-02-02 13:54:10 +0530555 = JDI_A216_FHD_VIDEO_ON_COMMAND;
Vineet Bajajf4671f72015-02-11 20:03:52 +0530556 pinfo->mipi.panel_off_cmds
557 = jdi_a216_fhd_video_off_command;
558 pinfo->mipi.num_of_panel_off_cmds
559 = JDI_A216_FHD_VIDEO_OFF_COMMAND;
Vineet Bajajcc9f0572015-02-02 13:54:10 +0530560 memcpy(phy_db->timing,
561 jdi_a216_fhd_video_timings, TIMING_SIZE);
562 break;
Vineet Bajaj02a1a8f2015-04-29 17:19:57 +0530563 case ADV7533_1080P_VIDEO_PANEL:
564 panelstruct->paneldata = &adv7533_1080p_video_panel_data;
565 panelstruct->panelres = &adv7533_1080p_video_panel_res;
566 panelstruct->color = &adv7533_1080p_video_color;
567 panelstruct->videopanel = &adv7533_1080p_video_video_panel;
568 panelstruct->commandpanel = &adv7533_1080p_video_command_panel;
569 panelstruct->state = &adv7533_1080p_video_state;
570 panelstruct->laneconfig = &adv7533_1080p_video_lane_config;
571 panelstruct->paneltiminginfo
572 = &adv7533_1080p_video_timing_info;
573 pinfo->adv7533.dsi_tg_i2c_cmd = &adv7533_1080p_tg_i2c_command;
574 pinfo->adv7533.num_of_tg_i2c_cmds = ADV7533_1080P_TG_COMMANDS;
575 pinfo->adv7533.dsi_setup_cfg_i2c_cmd = &adv7533_1080p_common_cfg;
576 pinfo->adv7533.num_of_cfg_i2c_cmds = ADV7533_1080P_CONFIG_COMMANDS;
577 memcpy(phy_db->timing,
578 adv7533_1080p_video_timings, TIMING_SIZE);
579 break;
580
581 case ADV7533_720P_VIDEO_PANEL:
582 panelstruct->paneldata = &adv7533_720p_video_panel_data;
583 panelstruct->panelres = &adv7533_720p_video_panel_res;
584 panelstruct->color = &adv7533_720p_video_color;
585 panelstruct->videopanel = &adv7533_720p_video_video_panel;
586 panelstruct->commandpanel = &adv7533_720p_video_command_panel;
587 panelstruct->state = &adv7533_720p_video_state;
588 panelstruct->laneconfig = &adv7533_720p_video_lane_config;
589 panelstruct->paneltiminginfo
590 = &adv7533_720p_video_timing_info;
591 pinfo->adv7533.dsi_tg_i2c_cmd = &adv7533_720p_tg_i2c_command;
592 pinfo->adv7533.num_of_tg_i2c_cmds = ADV7533_720P_TG_COMMANDS;
593 pinfo->adv7533.dsi_setup_cfg_i2c_cmd = &adv7533_720p_common_cfg;
594 pinfo->adv7533.num_of_cfg_i2c_cmds = ADV7533_720P_CONFIG_COMMANDS;
595 memcpy(phy_db->timing,
596 adv7533_720p_video_timings, TIMING_SIZE);
597 break;
Mao Flynn81409472014-04-10 15:01:30 +0800598 case UNKNOWN_PANEL:
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530599 default:
Mao Flynn81409472014-04-10 15:01:30 +0800600 memset(panelstruct, 0, sizeof(struct panel_struct));
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530601 memset(pinfo->mipi.panel_on_cmds, 0,
602 sizeof(struct mipi_dsi_cmd));
603 pinfo->mipi.num_of_panel_on_cmds = 0;
604 memset(pinfo->mipi.panel_off_cmds, 0,
605 sizeof(struct mipi_dsi_cmd));
606 pinfo->mipi.num_of_panel_off_cmds = 0;
Mao Flynn81409472014-04-10 15:01:30 +0800607 memset(phy_db->timing, 0, TIMING_SIZE);
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700608 pan_type = PANEL_TYPE_UNKNOWN;
Mao Flynn81409472014-04-10 15:01:30 +0800609 break;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530610 }
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700611 return pan_type;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530612}
613
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530614uint32_t oem_panel_max_auto_detect_panels()
615{
616 return target_panel_auto_detect_enabled() ?
617 DISPLAY_MAX_PANEL_DETECTION : 0;
618}
619
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700620int oem_panel_select(const char *panel_name, struct panel_struct *panelstruct,
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530621 struct msm_panel_info *pinfo,
622 struct mdss_dsi_phy_ctrl *phy_db)
623{
624 uint32_t hw_id = board_hardware_id();
Mao Flynn81409472014-04-10 15:01:30 +0800625 uint32_t hw_subtype = board_hardware_subtype();
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530626 int32_t panel_override_id;
Mao Flynn67d5c592014-06-17 16:41:02 +0800627 uint32_t target_id, plat_hw_ver_major;
Vineet Bajaj02a1a8f2015-04-29 17:19:57 +0530628 uint8_t rev = 0;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530629
630 if (panel_name) {
631 panel_override_id = panel_name_to_id(supp_panels,
632 ARRAY_SIZE(supp_panels), panel_name);
633
634 if (panel_override_id < 0) {
635 dprintf(CRITICAL, "Not able to search the panel:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530636 panel_name);
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530637 } else if (panel_override_id < UNKNOWN_PANEL) {
638 /* panel override using fastboot oem command */
639 panel_id = panel_override_id;
640
641 dprintf(INFO, "OEM panel override:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530642 panel_name);
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530643 goto panel_init;
644 }
645 }
646
647 switch (hw_id) {
648 case HW_PLATFORM_MTP:
Vineet Bajajd3db1582015-02-05 15:55:22 +0530649 if (platform_is_msm8939() &&
650 hw_subtype == HW_PLATFORM_SUBTYPE_MTP_3) {
Vineet Bajajc1221412014-11-07 18:15:34 +0530651 panel_id = JDI_FHD_VIDEO_PANEL;
Vineet Bajajd3db1582015-02-05 15:55:22 +0530652 } else {
653 panel_id = JDI_1080P_VIDEO_PANEL;
654 switch (auto_pan_loop) {
655 case 0:
656 panel_id = JDI_1080P_VIDEO_PANEL;
657 break;
658 case 1:
659 panel_id = HX8394D_720P_VIDEO_PANEL;
660 break;
661 default:
662 panel_id = UNKNOWN_PANEL;
663 dprintf(CRITICAL, "Unknown panel\n");
664 return PANEL_TYPE_UNKNOWN;
665 }
666 auto_pan_loop++;
667 }
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530668 break;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530669 case HW_PLATFORM_SURF:
Vineet Bajajc1221412014-11-07 18:15:34 +0530670 if (hw_subtype == HW_PLATFORM_SUBTYPE_CDP_1) {
671 panel_id = JDI_FHD_VIDEO_PANEL;
Vineet Bajajd3d04652015-02-02 14:43:36 +0530672 } else if (hw_subtype == HW_PLATFORM_SUBTYPE_CDP_2) {
673 panel_id = JDI_A216_FHD_VIDEO_PANEL;
Vineet Bajajc1221412014-11-07 18:15:34 +0530674 } else {
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530675 panel_id = JDI_1080P_VIDEO_PANEL;
Vineet Bajajc1221412014-11-07 18:15:34 +0530676 switch (auto_pan_loop) {
677 case 0:
678 panel_id = JDI_1080P_VIDEO_PANEL;
679 break;
680 case 1:
Jayant Shekhar8c5d9d82015-01-08 14:52:30 +0530681 panel_id = HX8394D_720P_VIDEO_PANEL;
682 break;
683 case 2:
Vineet Bajajc1221412014-11-07 18:15:34 +0530684 panel_id = NT35590_720P_VIDEO_PANEL;
685 break;
686 default:
687 panel_id = UNKNOWN_PANEL;
688 dprintf(CRITICAL, "Unknown panel\n");
689 return PANEL_TYPE_UNKNOWN;
690 }
691 auto_pan_loop++;
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530692 }
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530693 break;
Mao Flynn81409472014-04-10 15:01:30 +0800694 case HW_PLATFORM_QRD:
Shuo Yan2616adc2014-08-13 08:22:27 +0800695 target_id = board_target_id();
696 plat_hw_ver_major = ((target_id >> 16) & 0xFF);
697
vijay kumardd51c592015-01-05 12:46:28 +0530698 if (platform_is_msm8939() || platform_is_msm8929()) {
Mao Flynn732e3c22014-07-02 17:39:02 +0800699 switch (hw_subtype) {
700 case HW_PLATFORM_SUBTYPE_SKUK:
Shuo Yana935c302015-01-06 18:23:24 +0800701 if ((plat_hw_ver_major >> 4) == 0x1)
702 panel_id = R61318_HD_VIDEO_PANEL;
Shuo Yan959d5c12015-01-21 17:31:30 +0800703 else if ((plat_hw_ver_major >> 4) == 0x2)
704 panel_id = R63417_1080P_VIDEO_PANEL;
Shuo Yana935c302015-01-06 18:23:24 +0800705 else
706 panel_id = NT35596_1080P_VIDEO_PANEL;
Mao Flynn732e3c22014-07-02 17:39:02 +0800707 break;
708 default:
709 dprintf(CRITICAL, "Invalid subtype id %d for QRD HW\n",
710 hw_subtype);
711 return PANEL_TYPE_UNKNOWN;
712 }
713 } else {
714 switch (hw_subtype) {
715 case HW_PLATFORM_SUBTYPE_SKUH:
Shuo Yan2616adc2014-08-13 08:22:27 +0800716 /* qrd SKUIC */
Mao Flynn732e3c22014-07-02 17:39:02 +0800717 if ((plat_hw_ver_major >> 4) == 0x1)
718 panel_id = OTM1283A_720P_VIDEO_PANEL;
719 else
720 panel_id = INNOLUX_720P_VIDEO_PANEL;
721 break;
722 case HW_PLATFORM_SUBTYPE_SKUI:
Shuo Yan2616adc2014-08-13 08:22:27 +0800723 /* qrd SKUIC */
Shuo Yan14ac9012014-09-18 16:39:48 +0800724 if ((plat_hw_ver_major >> 4) == 0)
Shuo Yan2616adc2014-08-13 08:22:27 +0800725 panel_id = OTM8019A_FWVGA_VIDEO_PANEL;
Shuo Yan14ac9012014-09-18 16:39:48 +0800726 else
727 panel_id = HX8379A_FWVGA_VIDEO_PANEL;
Mao Flynn732e3c22014-07-02 17:39:02 +0800728 break;
Gustavo Solairafb6fdd62014-09-30 08:15:32 -0300729 case HW_PLATFORM_SUBTYPE_SKUT1:
Gustavo Solaira80c274c2014-10-22 16:21:27 -0300730 if ((plat_hw_ver_major & 0x0F) == 0x1)
731 /* qrd SKUT1 */
732 panel_id = NT35521_WXGA_VIDEO_PANEL;
Gustavo Solaira48aa56d2014-10-22 16:26:49 -0300733 else if ((plat_hw_ver_major & 0x0F) == 0x2)
Gustavo Solaira80c274c2014-10-22 16:21:27 -0300734 /* qrd SKUT2 */
735 panel_id = SAMSUNG_WXGA_VIDEO_PANEL;
Gustavo Solaira48aa56d2014-10-22 16:26:49 -0300736 else if ((plat_hw_ver_major & 0x0F) == 0x3)
737 /* qrd SKUT3 */
738 panel_id = HX8279A_WSVGA_VIDEO_PANEL;
Gustavo Solairafb6fdd62014-09-30 08:15:32 -0300739 break;
Mao Flynn732e3c22014-07-02 17:39:02 +0800740 default:
741 dprintf(CRITICAL, "Invalid subtype id %d for QRD HW\n",
742 hw_subtype);
743 return PANEL_TYPE_UNKNOWN;
744 }
Mao Flynn81409472014-04-10 15:01:30 +0800745 }
746 break;
Vineet Bajaj02a1a8f2015-04-29 17:19:57 +0530747 case HW_PLATFORM_SBC:
Ajay Singh Parmar1a574ad2015-07-01 12:18:21 -0700748 if (platform_is_apq8016())
749 panel_id = ADV7533_1080P_VIDEO_PANEL;
Vineet Bajaj02a1a8f2015-04-29 17:19:57 +0530750 break;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530751 default:
752 dprintf(CRITICAL, "Display not enabled for %d HW type\n",
753 hw_id);
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700754 return PANEL_TYPE_UNKNOWN;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530755 }
756
757panel_init:
Ajay Singh Parmar1a574ad2015-07-01 12:18:21 -0700758 if (platform_is_apq8016() && (hw_id == HW_PLATFORM_SBC)) {
759 /* Set Switch GPIO to DSI2HDMI mode */
760 target_set_switch_gpio(1);
761 /* ADV7533 DSI to HDMI Bridge Chip Connected */
Siddharth Zaveri2472a602015-12-02 17:11:32 -0500762 mipi_dsi_i2c_device_init(BLSP_ID_1, QUP_ID_3);
Ajay Singh Parmar1a574ad2015-07-01 12:18:21 -0700763 /* Read ADV Chip ID */
764 if (!mipi_dsi_i2c_read_byte(ADV7533_MAIN, 0x00, &rev)) {
765 dprintf(INFO, "ADV7533 Rev ID: 0x%x\n",rev);
766 } else {
767 dprintf(CRITICAL, "error reading Rev ID from bridge chip\n");
768 return PANEL_TYPE_UNKNOWN;
769 }
770 }
771
Padmanabhan Komandurub088f922014-10-28 23:55:20 +0530772 /*
773 * Update all data structures after 'panel_init' label. Only panel
774 * selection is supposed to happen before that.
775 */
Padmanabhan Komanduru7271e162015-03-17 16:06:07 +0530776 if ((platform_is_msm8939() && (board_soc_version() !=
777 BOARD_SOC_VERSION3)) || platform_is_msm8929() ||
778 (hw_id == HW_PLATFORM_QRD)) {
Radhika Ranjan Soni7ea98552014-06-11 17:01:12 +0530779 phy_db->regulator_mode = DSI_PHY_REGULATOR_LDO_MODE;
Padmanabhan Komandurub088f922014-10-28 23:55:20 +0530780 memcpy(panel_regulator_settings,
781 ldo_regulator_settings, REGULATOR_SIZE);
782 } else {
783 memcpy(panel_regulator_settings,
784 dcdc_regulator_settings, REGULATOR_SIZE);
785 }
Radhika Ranjan Soni7ea98552014-06-11 17:01:12 +0530786
Jayant Shekharb130da22014-05-29 12:47:51 +0530787 pinfo->pipe_type = MDSS_MDP_PIPE_TYPE_RGB;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530788 return init_panel_data(panelstruct, pinfo, phy_db);
789}