blob: 3d57f2435c5335ade150de910ed732fe34623bb4 [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"
41
42/*---------------------------------------------------------------------------*/
43/* GCDB Panel Database */
44/*---------------------------------------------------------------------------*/
45#include "include/panel_jdi_1080p_video.h"
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +053046#include "include/panel_nt35590_720p_video.h"
47#include "include/panel_nt35590_720p_cmd.h"
Mao Flynn81409472014-04-10 15:01:30 +080048#include "include/panel_innolux_720p_video.h"
Shuo Yan40c660c2014-04-24 15:58:43 +080049#include "include/panel_otm8019a_fwvga_video.h"
Mao Flynn67d5c592014-06-17 16:41:02 +080050#include "include/panel_otm1283a_720p_video.h"
Mao Flynn732e3c22014-07-02 17:39:02 +080051#include "include/panel_nt35596_1080p_skuk_video.h"
Vineet Bajaj7339d0b2014-07-24 21:51:44 +053052#include "include/panel_sharp_wqxga_dualdsi_video.h"
Sandeep Panda230cb722014-08-20 11:46:27 +053053#include "include/panel_jdi_fhd_video.h"
Shuo Yan2616adc2014-08-13 08:22:27 +080054#include "include/panel_hx8379a_fwvga_video.h"
Sandeep Panda230cb722014-08-20 11:46:27 +053055#include "include/panel_hx8394d_720p_video.h"
Gustavo Solairafb6fdd62014-09-30 08:15:32 -030056#include "include/panel_nt35521_wxga_video.h"
Gustavo Solaira80c274c2014-10-22 16:21:27 -030057#include "include/panel_samsung_wxga_video.h"
Gustavo Solaira48aa56d2014-10-22 16:26:49 -030058#include "include/panel_hx8279a_wsvga_video.h"
Shuo Yana935c302015-01-06 18:23:24 +080059#include "include/panel_r61318_hd_video.h"
Shuo Yan959d5c12015-01-21 17:31:30 +080060#include "include/panel_r63417_1080p_video.h"
Vineet Bajajcc9f0572015-02-02 13:54:10 +053061#include "include/panel_jdi_a216_fhd_video.h"
Vineet Bajaj02a1a8f2015-04-29 17:19:57 +053062#include "include/panel_adv7533_1080p60.h"
63#include "include/panel_adv7533_720p60.h"
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +053064
65#define DISPLAY_MAX_PANEL_DETECTION 2
Shuo Yan4f57eb22014-05-27 10:57:17 +080066#define OTM8019A_FWVGA_VIDEO_PANEL_ON_DELAY 50
Padmanabhan Komanduru21e465e2014-09-01 13:51:38 +053067#define NT35590_720P_CMD_PANEL_ON_DELAY 40
Gustavo Solaira80c274c2014-10-22 16:21:27 -030068#define SAMSUNG_WXGA_VIDEO_PANEL_ON_DELAY 100
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +053069
Padmanabhan Komanduru7271e162015-03-17 16:06:07 +053070#define BOARD_SOC_VERSION3 0x30000
71
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +053072/*---------------------------------------------------------------------------*/
73/* static panel selection variable */
74/*---------------------------------------------------------------------------*/
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +053075static uint32_t auto_pan_loop = 0;
76
Padmanabhan Komandurub088f922014-10-28 23:55:20 +053077uint32_t panel_regulator_settings[] = {
78 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
79};
80
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +053081/*
82 * The list of panels that are supported on this target.
83 * Any panel in this list can be selected using fastboot oem command.
84 */
85static struct panel_list supp_panels[] = {
86 {"jdi_1080p_video", JDI_1080P_VIDEO_PANEL},
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +053087 {"nt35590_720p_video", NT35590_720P_VIDEO_PANEL},
88 {"nt35590_720p_cmd", NT35590_720P_CMD_PANEL},
Mao Flynn81409472014-04-10 15:01:30 +080089 {"innolux_720p_video", INNOLUX_720P_VIDEO_PANEL},
Shuo Yan40c660c2014-04-24 15:58:43 +080090 {"otm8019a_fwvga_video", OTM8019A_FWVGA_VIDEO_PANEL},
Mao Flynn67d5c592014-06-17 16:41:02 +080091 {"otm1283a_720p_video", OTM1283A_720P_VIDEO_PANEL},
Mao Flynn732e3c22014-07-02 17:39:02 +080092 {"nt35596_1080p_video", NT35596_1080P_VIDEO_PANEL},
Vineet Bajaj7339d0b2014-07-24 21:51:44 +053093 {"sharp_wqxga_dualdsi_video",SHARP_WQXGA_DUALDSI_VIDEO_PANEL},
Shuo Yan2616adc2014-08-13 08:22:27 +080094 {"jdi_fhd_video", JDI_FHD_VIDEO_PANEL},
95 {"hx8379a_wvga_video", HX8379A_FWVGA_VIDEO_PANEL},
Gustavo Solairafb6fdd62014-09-30 08:15:32 -030096 {"hx8394d_720p_video", HX8394D_720P_VIDEO_PANEL},
Gustavo Solaira80c274c2014-10-22 16:21:27 -030097 {"nt35521_wxga_video", NT35521_WXGA_VIDEO_PANEL},
Gustavo Solaira48aa56d2014-10-22 16:26:49 -030098 {"samsung_wxga_video", SAMSUNG_WXGA_VIDEO_PANEL},
Shuo Yana935c302015-01-06 18:23:24 +080099 {"hx8279a_wsvga_video", HX8279A_WSVGA_VIDEO_PANEL},
100 {"r61318_hd_video", R61318_HD_VIDEO_PANEL},
Shuo Yan959d5c12015-01-21 17:31:30 +0800101 {"r63417_1080p_video", R63417_1080P_VIDEO_PANEL},
Vineet Bajajcc9f0572015-02-02 13:54:10 +0530102 {"jdi_a216_fhd_video", JDI_A216_FHD_VIDEO_PANEL},
Vineet Bajaj02a1a8f2015-04-29 17:19:57 +0530103 {"adv7533_1080p_video", ADV7533_1080P_VIDEO_PANEL},
104 {"adv7533_720p_video", ADV7533_720P_VIDEO_PANEL},
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530105};
106
107static uint32_t panel_id;
108
109int oem_panel_rotation()
110{
111 return NO_ERROR;
112}
113
114int oem_panel_on()
115{
Shuo Yan4f57eb22014-05-27 10:57:17 +0800116 /*
Padmanabhan Komanduru21e465e2014-09-01 13:51:38 +0530117 *OEM can keep their panel specific on instructions in this
Shuo Yan4f57eb22014-05-27 10:57:17 +0800118 *function
119 */
120 if (panel_id == OTM8019A_FWVGA_VIDEO_PANEL) {
121 /* needs extra delay to avoid unexpected artifacts */
122 mdelay(OTM8019A_FWVGA_VIDEO_PANEL_ON_DELAY);
Padmanabhan Komanduru21e465e2014-09-01 13:51:38 +0530123 } else if (panel_id == NT35590_720P_CMD_PANEL) {
124 /* needs extra delay to avoid snow screen artifacts */
125 mdelay(NT35590_720P_CMD_PANEL_ON_DELAY);
Gustavo Solaira80c274c2014-10-22 16:21:27 -0300126 } else if (panel_id == SAMSUNG_WXGA_VIDEO_PANEL) {
127 /* needs extra delay to avoid unexpected artifacts */
128 mdelay(SAMSUNG_WXGA_VIDEO_PANEL_ON_DELAY);
Shuo Yan4f57eb22014-05-27 10:57:17 +0800129 }
130
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530131 return NO_ERROR;
132}
133
134int oem_panel_off()
135{
136 /* OEM can keep their panel specific off instructions
137 * in this function
138 */
139 return NO_ERROR;
140}
141
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700142static int init_panel_data(struct panel_struct *panelstruct,
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530143 struct msm_panel_info *pinfo,
144 struct mdss_dsi_phy_ctrl *phy_db)
145{
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700146 int pan_type = PANEL_TYPE_DSI;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530147
148 switch (panel_id) {
149 case JDI_1080P_VIDEO_PANEL:
150 panelstruct->paneldata = &jdi_1080p_video_panel_data;
151 panelstruct->paneldata->panel_with_enable_gpio = 1;
152 panelstruct->panelres = &jdi_1080p_video_panel_res;
153 panelstruct->color = &jdi_1080p_video_color;
154 panelstruct->videopanel = &jdi_1080p_video_video_panel;
155 panelstruct->commandpanel = &jdi_1080p_video_command_panel;
156 panelstruct->state = &jdi_1080p_video_state;
157 panelstruct->laneconfig = &jdi_1080p_video_lane_config;
158 panelstruct->paneltiminginfo
159 = &jdi_1080p_video_timing_info;
160 panelstruct->panelresetseq
161 = &jdi_1080p_video_panel_reset_seq;
162 panelstruct->backlightinfo = &jdi_1080p_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530163 pinfo->mipi.panel_on_cmds
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530164 = jdi_1080p_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530165 pinfo->mipi.num_of_panel_on_cmds
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530166 = JDI_1080P_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530167 pinfo->mipi.panel_off_cmds
168 = jdi_1080p_video_off_command;
169 pinfo->mipi.num_of_panel_off_cmds
170 = JDI_1080P_VIDEO_OFF_COMMAND;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530171 memcpy(phy_db->timing,
172 jdi_1080p_video_timings, TIMING_SIZE);
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530173 pinfo->mipi.signature = JDI_1080P_VIDEO_SIGNATURE;
174 break;
175 case NT35590_720P_VIDEO_PANEL:
176 panelstruct->paneldata = &nt35590_720p_video_panel_data;
177 panelstruct->panelres = &nt35590_720p_video_panel_res;
178 panelstruct->color = &nt35590_720p_video_color;
179 panelstruct->videopanel = &nt35590_720p_video_video_panel;
180 panelstruct->commandpanel = &nt35590_720p_video_command_panel;
181 panelstruct->state = &nt35590_720p_video_state;
182 panelstruct->laneconfig = &nt35590_720p_video_lane_config;
183 panelstruct->paneltiminginfo
184 = &nt35590_720p_video_timing_info;
185 panelstruct->panelresetseq
186 = &nt35590_720p_video_panel_reset_seq;
187 panelstruct->backlightinfo = &nt35590_720p_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530188 pinfo->mipi.panel_on_cmds
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530189 = nt35590_720p_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530190 pinfo->mipi.num_of_panel_on_cmds
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530191 = NT35590_720P_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530192 pinfo->mipi.panel_off_cmds
193 = nt35590_720p_video_off_command;
194 pinfo->mipi.num_of_panel_off_cmds
195 = NT35590_720P_VIDEO_OFF_COMMAND;
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530196 memcpy(phy_db->timing,
197 nt35590_720p_video_timings, TIMING_SIZE);
198 pinfo->mipi.signature = NT35590_720P_VIDEO_SIGNATURE;
199 break;
200 case NT35590_720P_CMD_PANEL:
201 panelstruct->paneldata = &nt35590_720p_cmd_panel_data;
202 panelstruct->panelres = &nt35590_720p_cmd_panel_res;
203 panelstruct->color = &nt35590_720p_cmd_color;
204 panelstruct->videopanel = &nt35590_720p_cmd_video_panel;
205 panelstruct->commandpanel = &nt35590_720p_cmd_command_panel;
206 panelstruct->state = &nt35590_720p_cmd_state;
207 panelstruct->laneconfig = &nt35590_720p_cmd_lane_config;
208 panelstruct->paneltiminginfo = &nt35590_720p_cmd_timing_info;
209 panelstruct->panelresetseq
210 = &nt35590_720p_cmd_panel_reset_seq;
211 panelstruct->backlightinfo = &nt35590_720p_cmd_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530212 pinfo->mipi.panel_on_cmds
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530213 = nt35590_720p_cmd_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530214 pinfo->mipi.num_of_panel_on_cmds
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530215 = NT35590_720P_CMD_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530216 pinfo->mipi.panel_off_cmds
217 = nt35590_720p_cmd_off_command;
218 pinfo->mipi.num_of_panel_off_cmds
219 = NT35590_720P_CMD_OFF_COMMAND;
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530220 memcpy(phy_db->timing,
221 nt35590_720p_cmd_timings, TIMING_SIZE);
222 pinfo->mipi.signature = NT35590_720P_CMD_SIGNATURE;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530223 break;
Mao Flynn81409472014-04-10 15:01:30 +0800224 case INNOLUX_720P_VIDEO_PANEL:
225 panelstruct->paneldata = &innolux_720p_video_panel_data;
226 panelstruct->panelres = &innolux_720p_video_panel_res;
227 panelstruct->color = &innolux_720p_video_color;
228 panelstruct->videopanel = &innolux_720p_video_video_panel;
229 panelstruct->commandpanel = &innolux_720p_video_command_panel;
230 panelstruct->state = &innolux_720p_video_state;
231 panelstruct->laneconfig = &innolux_720p_video_lane_config;
232 panelstruct->paneltiminginfo
Mao Flynn67d5c592014-06-17 16:41:02 +0800233 = &innolux_720p_video_timing_info;
Mao Flynn81409472014-04-10 15:01:30 +0800234 panelstruct->panelresetseq
Mao Flynn67d5c592014-06-17 16:41:02 +0800235 = &innolux_720p_video_reset_seq;
Mao Flynn81409472014-04-10 15:01:30 +0800236 panelstruct->backlightinfo = &innolux_720p_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530237 pinfo->mipi.panel_on_cmds
Mao Flynn67d5c592014-06-17 16:41:02 +0800238 = innolux_720p_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530239 pinfo->mipi.num_of_panel_on_cmds
Mao Flynn67d5c592014-06-17 16:41:02 +0800240 = INNOLUX_720P_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530241 pinfo->mipi.panel_off_cmds
242 = innolux_720p_video_off_command;
243 pinfo->mipi.num_of_panel_off_cmds
244 = INNOLUX_720P_VIDEO_OFF_COMMAND;
Mao Flynn81409472014-04-10 15:01:30 +0800245 memcpy(phy_db->timing,
Mao Flynn67d5c592014-06-17 16:41:02 +0800246 innolux_720p_video_timings, TIMING_SIZE);
Mao Flynn81409472014-04-10 15:01:30 +0800247 break;
Shuo Yan40c660c2014-04-24 15:58:43 +0800248 case OTM8019A_FWVGA_VIDEO_PANEL:
Mao Flynn67d5c592014-06-17 16:41:02 +0800249 panelstruct->paneldata = &otm8019a_fwvga_video_panel_data;
250 panelstruct->panelres = &otm8019a_fwvga_video_panel_res;
251 panelstruct->color = &otm8019a_fwvga_video_color;
252 panelstruct->videopanel = &otm8019a_fwvga_video_video_panel;
253 panelstruct->commandpanel = &otm8019a_fwvga_video_command_panel;
254 panelstruct->state = &otm8019a_fwvga_video_state;
255 panelstruct->laneconfig = &otm8019a_fwvga_video_lane_config;
256 panelstruct->paneltiminginfo
257 = &otm8019a_fwvga_video_timing_info;
258 panelstruct->panelresetseq
259 = &otm8019a_fwvga_video_reset_seq;
260 panelstruct->backlightinfo = &otm8019a_fwvga_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530261 pinfo->mipi.panel_on_cmds
Mao Flynn67d5c592014-06-17 16:41:02 +0800262 = otm8019a_fwvga_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530263 pinfo->mipi.num_of_panel_on_cmds
Mao Flynn67d5c592014-06-17 16:41:02 +0800264 = OTM8019A_FWVGA_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530265 pinfo->mipi.panel_off_cmds
266 = otm8019a_fwvga_video_off_command;
267 pinfo->mipi.num_of_panel_off_cmds
268 = OTM8019A_FWVGA_VIDEO_OFF_COMMAND;
Mao Flynn67d5c592014-06-17 16:41:02 +0800269 memcpy(phy_db->timing,
270 otm8019a_fwvga_video_timings, TIMING_SIZE);
271 break;
272 case OTM1283A_720P_VIDEO_PANEL:
273 panelstruct->paneldata = &otm1283a_720p_video_panel_data;
274 panelstruct->panelres = &otm1283a_720p_video_panel_res;
275 panelstruct->color = &otm1283a_720p_video_color;
276 panelstruct->videopanel = &otm1283a_720p_video_video_panel;
277 panelstruct->commandpanel = &otm1283a_720p_video_command_panel;
278 panelstruct->state = &otm1283a_720p_video_state;
279 panelstruct->laneconfig = &otm1283a_720p_video_lane_config;
280 panelstruct->paneltiminginfo
281 = &otm1283a_720p_video_timing_info;
282 panelstruct->panelresetseq
283 = &otm1283a_720p_video_reset_seq;
284 panelstruct->backlightinfo = &otm1283a_720p_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530285 pinfo->mipi.panel_on_cmds
Mao Flynn67d5c592014-06-17 16:41:02 +0800286 = otm1283a_720p_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530287 pinfo->mipi.num_of_panel_on_cmds
Mao Flynn67d5c592014-06-17 16:41:02 +0800288 = OTM1283A_720P_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530289 pinfo->mipi.panel_off_cmds
290 = otm1283a_720p_video_off_command;
291 pinfo->mipi.num_of_panel_off_cmds
292 = OTM1283A_720P_VIDEO_OFF_COMMAND;
Mao Flynn67d5c592014-06-17 16:41:02 +0800293 memcpy(phy_db->timing,
294 otm1283a_720p_video_timings, TIMING_SIZE);
295 break;
Mao Flynn732e3c22014-07-02 17:39:02 +0800296 case NT35596_1080P_VIDEO_PANEL:
297 panelstruct->paneldata = &nt35596_1080p_skuk_video_panel_data;
298 panelstruct->panelres = &nt35596_1080p_skuk_video_panel_res;
299 panelstruct->color = &nt35596_1080p_skuk_video_color;
300 panelstruct->videopanel = &nt35596_1080p_skuk_video_video_panel;
301 panelstruct->commandpanel = &nt35596_1080p_skuk_video_command_panel;
302 panelstruct->state = &nt35596_1080p_skuk_video_state;
303 panelstruct->laneconfig = &nt35596_1080p_skuk_video_lane_config;
304 panelstruct->paneltiminginfo
305 = &nt35596_1080p_skuk_video_timing_info;
306 panelstruct->panelresetseq
307 = &nt35596_1080p_skuk_video_reset_seq;
308 panelstruct->backlightinfo = &nt35596_1080p_skuk_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530309 pinfo->mipi.panel_on_cmds
Mao Flynn732e3c22014-07-02 17:39:02 +0800310 = nt35596_1080p_skuk_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530311 pinfo->mipi.num_of_panel_on_cmds
Mao Flynn732e3c22014-07-02 17:39:02 +0800312 = NT35596_1080P_SKUK_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530313 pinfo->mipi.panel_off_cmds
314 = nt35596_1080p_skuk_video_off_command;
315 pinfo->mipi.num_of_panel_off_cmds
316 = NT35596_1080P_SKUK_VIDEO_OFF_COMMAND;
Mao Flynn732e3c22014-07-02 17:39:02 +0800317 memcpy(phy_db->timing,
318 nt35596_1080p_skuk_video_timings, TIMING_SIZE);
319 break;
Vineet Bajaj7339d0b2014-07-24 21:51:44 +0530320 case SHARP_WQXGA_DUALDSI_VIDEO_PANEL:
321 panelstruct->paneldata = &sharp_wqxga_dualdsi_video_panel_data;
322 panelstruct->panelres = &sharp_wqxga_dualdsi_video_panel_res;
323 panelstruct->color = &sharp_wqxga_dualdsi_video_color;
324 panelstruct->videopanel = &sharp_wqxga_dualdsi_video_video_panel;
325 panelstruct->commandpanel = &sharp_wqxga_dualdsi_video_command_panel;
326 panelstruct->state = &sharp_wqxga_dualdsi_video_state;
327 panelstruct->laneconfig = &sharp_wqxga_dualdsi_video_lane_config;
328 panelstruct->paneltiminginfo
329 = &sharp_wqxga_dualdsi_video_timing_info;
330 panelstruct->panelresetseq
331 = &sharp_wqxga_dualdsi_video_reset_seq;
332 panelstruct->backlightinfo = &sharp_wqxga_dualdsi_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530333 pinfo->mipi.panel_on_cmds
Vineet Bajaj7339d0b2014-07-24 21:51:44 +0530334 = sharp_wqxga_dualdsi_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530335 pinfo->mipi.num_of_panel_on_cmds
Vineet Bajaj7339d0b2014-07-24 21:51:44 +0530336 = SHARP_WQXGA_DUALDSI_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530337 pinfo->mipi.panel_off_cmds
338 = sharp_wqxga_dualdsi_video_off_command;
339 pinfo->mipi.num_of_panel_off_cmds
340 = SHARP_WQXGA_DUALDSI_VIDEO_OFF_COMMAND;
Vineet Bajaj7339d0b2014-07-24 21:51:44 +0530341 memcpy(phy_db->timing,
342 sharp_wqxga_dualdsi_video_timings, TIMING_SIZE);
343 pinfo->mipi.signature = SHARP_WQXGA_DUALDSI_VIDEO_SIGNATURE;
344 break;
Vineet Bajajf4fcc712014-08-04 17:38:55 +0530345 case JDI_FHD_VIDEO_PANEL:
346 panelstruct->paneldata = &jdi_fhd_video_panel_data;
347 panelstruct->panelres = &jdi_fhd_video_panel_res;
348 panelstruct->color = &jdi_fhd_video_color;
349 panelstruct->videopanel = &jdi_fhd_video_video_panel;
350 panelstruct->commandpanel = &jdi_fhd_video_command_panel;
351 panelstruct->state = &jdi_fhd_video_state;
352 panelstruct->laneconfig = &jdi_fhd_video_lane_config;
353 panelstruct->paneltiminginfo
354 = &jdi_fhd_video_timing_info;
355 panelstruct->panelresetseq
356 = &jdi_fhd_video_reset_seq;
357 panelstruct->backlightinfo = &jdi_fhd_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530358 pinfo->mipi.panel_on_cmds
Vineet Bajajf4fcc712014-08-04 17:38:55 +0530359 = jdi_fhd_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530360 pinfo->mipi.num_of_panel_on_cmds
Vineet Bajajf4fcc712014-08-04 17:38:55 +0530361 = JDI_FHD_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530362 pinfo->mipi.panel_off_cmds
363 = jdi_fhd_video_off_command;
364 pinfo->mipi.num_of_panel_off_cmds
365 = JDI_FHD_VIDEO_OFF_COMMAND;
Vineet Bajajf4fcc712014-08-04 17:38:55 +0530366 memcpy(phy_db->timing,
367 jdi_fhd_video_timings, TIMING_SIZE);
368 break;
Shuo Yan2616adc2014-08-13 08:22:27 +0800369 case HX8379A_FWVGA_VIDEO_PANEL:
370 panelstruct->paneldata = &hx8379a_fwvga_video_panel_data;
371 panelstruct->panelres = &hx8379a_fwvga_video_panel_res;
372 panelstruct->color = &hx8379a_fwvga_video_color;
373 panelstruct->videopanel = &hx8379a_fwvga_video_video_panel;
374 panelstruct->commandpanel = &hx8379a_fwvga_video_command_panel;
375 panelstruct->state = &hx8379a_fwvga_video_state;
376 panelstruct->laneconfig = &hx8379a_fwvga_video_lane_config;
377 panelstruct->paneltiminginfo
378 = &hx8379a_fwvga_video_timing_info;
379 panelstruct->panelresetseq
380 = &hx8379a_fwvga_video_reset_seq;
381 panelstruct->backlightinfo = &hx8379a_fwvga_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530382 pinfo->mipi.panel_on_cmds
Shuo Yan2616adc2014-08-13 08:22:27 +0800383 = hx8379a_fwvga_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530384 pinfo->mipi.num_of_panel_on_cmds
Shuo Yan2616adc2014-08-13 08:22:27 +0800385 = HX8379A_FWVGA_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530386 pinfo->mipi.panel_off_cmds
387 = hx8379a_fwvga_video_off_command;
388 pinfo->mipi.num_of_panel_off_cmds
389 = HX8379A_FWVGA_VIDEO_OFF_COMMAND;
Shuo Yan2616adc2014-08-13 08:22:27 +0800390 memcpy(phy_db->timing,
391 hx8379a_fwvga_video_timings, TIMING_SIZE);
392 break;
Sandeep Panda230cb722014-08-20 11:46:27 +0530393 case HX8394D_720P_VIDEO_PANEL:
394 panelstruct->paneldata = &hx8394d_720p_video_panel_data;
395 panelstruct->panelres = &hx8394d_720p_video_panel_res;
396 panelstruct->color = &hx8394d_720p_video_color;
397 panelstruct->videopanel = &hx8394d_720p_video_video_panel;
398 panelstruct->commandpanel = &hx8394d_720p_video_command_panel;
399 panelstruct->state = &hx8394d_720p_video_state;
400 panelstruct->laneconfig = &hx8394d_720p_video_lane_config;
401 panelstruct->paneltiminginfo
402 = &hx8394d_720p_video_timing_info;
403 panelstruct->panelresetseq
404 = &hx8394d_720p_video_panel_reset_seq;
405 panelstruct->backlightinfo = &hx8394d_720p_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530406 pinfo->mipi.panel_on_cmds
Sandeep Panda230cb722014-08-20 11:46:27 +0530407 = hx8394d_720p_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530408 pinfo->mipi.num_of_panel_on_cmds
Sandeep Panda230cb722014-08-20 11:46:27 +0530409 = HX8394D_720P_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530410 pinfo->mipi.panel_off_cmds
411 = hx8394d_720p_video_off_command;
412 pinfo->mipi.num_of_panel_off_cmds
413 = HX8394D_720P_VIDEO_OFF_COMMAND;
Sandeep Panda230cb722014-08-20 11:46:27 +0530414 memcpy(phy_db->timing,
415 hx8394d_720p_video_timings, TIMING_SIZE);
416 pinfo->mipi.signature = HX8394D_720P_VIDEO_SIGNATURE;
417 break;
Gustavo Solairafb6fdd62014-09-30 08:15:32 -0300418 case NT35521_WXGA_VIDEO_PANEL:
419 panelstruct->paneldata = &nt35521_wxga_video_panel_data;
420 panelstruct->panelres = &nt35521_wxga_video_panel_res;
421 panelstruct->color = &nt35521_wxga_video_color;
422 panelstruct->videopanel = &nt35521_wxga_video_video_panel;
423 panelstruct->commandpanel = &nt35521_wxga_video_command_panel;
424 panelstruct->state = &nt35521_wxga_video_state;
425 panelstruct->laneconfig = &nt35521_wxga_video_lane_config;
426 panelstruct->paneltiminginfo
427 = &nt35521_wxga_video_timing_info;
428 panelstruct->panelresetseq
429 = &nt35521_wxga_video_reset_seq;
430 panelstruct->backlightinfo = &nt35521_wxga_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530431 pinfo->mipi.panel_on_cmds
Gustavo Solairafb6fdd62014-09-30 08:15:32 -0300432 = nt35521_wxga_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530433 pinfo->mipi.num_of_panel_on_cmds
Gustavo Solairafb6fdd62014-09-30 08:15:32 -0300434 = NT35521_WXGA_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530435 pinfo->mipi.panel_off_cmds
436 = nt35521_wxga_video_off_command;
437 pinfo->mipi.num_of_panel_off_cmds
438 = NT35521_WXGA_VIDEO_OFF_COMMAND;
Gustavo Solairafb6fdd62014-09-30 08:15:32 -0300439 memcpy(phy_db->timing,
440 nt35521_wxga_video_timings, TIMING_SIZE);
441 break;
Gustavo Solaira80c274c2014-10-22 16:21:27 -0300442 case SAMSUNG_WXGA_VIDEO_PANEL:
443 panelstruct->paneldata = &samsung_wxga_video_panel_data;
444 panelstruct->panelres = &samsung_wxga_video_panel_res;
445 panelstruct->color = &samsung_wxga_video_color;
446 panelstruct->videopanel = &samsung_wxga_video_video_panel;
447 panelstruct->commandpanel = &samsung_wxga_video_command_panel;
448 panelstruct->state = &samsung_wxga_video_state;
449 panelstruct->laneconfig = &samsung_wxga_video_lane_config;
450 panelstruct->paneltiminginfo
451 = &samsung_wxga_video_timing_info;
452 panelstruct->panelresetseq
453 = &samsung_wxga_video_reset_seq;
454 panelstruct->backlightinfo = &samsung_wxga_video_backlight;
455 pinfo->mipi.panel_on_cmds
456 = samsung_wxga_video_on_command;
457 pinfo->mipi.num_of_panel_on_cmds
458 = SAMSUNG_WXGA_VIDEO_ON_COMMAND;
459 pinfo->mipi.panel_off_cmds
460 = samsung_wxga_video_off_command;
461 pinfo->mipi.num_of_panel_off_cmds
462 = SAMSUNG_WXGA_VIDEO_OFF_COMMAND;
463 memcpy(phy_db->timing,
464 samsung_wxga_video_timings, TIMING_SIZE);
465 break;
Gustavo Solaira48aa56d2014-10-22 16:26:49 -0300466 case HX8279A_WSVGA_VIDEO_PANEL:
467 panelstruct->paneldata = &hx8279a_wsvga_video_panel_data;
468 panelstruct->panelres = &hx8279a_wsvga_video_panel_res;
469 panelstruct->color = &hx8279a_wsvga_video_color;
470 panelstruct->videopanel = &hx8279a_wsvga_video_video_panel;
471 panelstruct->commandpanel = &hx8279a_wsvga_video_command_panel;
472 panelstruct->state = &hx8279a_wsvga_video_state;
473 panelstruct->laneconfig = &hx8279a_wsvga_video_lane_config;
474 panelstruct->paneltiminginfo
475 = &hx8279a_wsvga_video_timing_info;
476 panelstruct->panelresetseq
477 = &hx8279a_wsvga_video_reset_seq;
478 panelstruct->backlightinfo = &hx8279a_wsvga_video_backlight;
479 pinfo->mipi.panel_on_cmds
480 = hx8279a_wsvga_video_on_command;
481 pinfo->mipi.num_of_panel_on_cmds
482 = HX8279A_WSVGA_VIDEO_ON_COMMAND;
483 pinfo->mipi.panel_off_cmds
484 = hx8279a_wsvga_video_off_command;
485 pinfo->mipi.num_of_panel_off_cmds
486 = HX8279A_WSVGA_VIDEO_OFF_COMMAND;
487 memcpy(phy_db->timing,
488 hx8279a_wsvga_video_timings, TIMING_SIZE);
489 break;
Shuo Yana935c302015-01-06 18:23:24 +0800490 case R61318_HD_VIDEO_PANEL:
491 panelstruct->paneldata = & r61318_hd_video_panel_data;
492 panelstruct->panelres = & r61318_hd_video_panel_res;
493 panelstruct->color = & r61318_hd_video_color;
494 panelstruct->videopanel = & r61318_hd_video_video_panel;
495 panelstruct->commandpanel = & r61318_hd_video_command_panel;
496 panelstruct->state = & r61318_hd_video_state;
497 panelstruct->laneconfig = & r61318_hd_video_lane_config;
498 panelstruct->paneltiminginfo
499 = & r61318_hd_video_timing_info;
500 panelstruct->panelresetseq
501 = & r61318_hd_video_reset_seq;
502 panelstruct->backlightinfo = & r61318_hd_video_backlight;
503 pinfo->mipi.panel_on_cmds
504 = r61318_hd_video_on_command;
505 pinfo->mipi.num_of_panel_on_cmds
506 = R61318_HD_VIDEO_ON_COMMAND;
507 pinfo->mipi.panel_off_cmds
508 = r61318_hd_video_off_command;
509 pinfo->mipi.num_of_panel_off_cmds
510 = R61318_HD_VIDEO_OFF_COMMAND;
511 memcpy(phy_db->timing,
512 r61318_hd_video_timings, TIMING_SIZE);
513 break;
Shuo Yan959d5c12015-01-21 17:31:30 +0800514 case R63417_1080P_VIDEO_PANEL:
515 panelstruct->paneldata = & r63417_1080p_video_panel_data;
516 panelstruct->panelres = & r63417_1080p_video_panel_res;
517 panelstruct->color = & r63417_1080p_video_color;
518 panelstruct->videopanel = & r63417_1080p_video_video_panel;
519 panelstruct->commandpanel = & r63417_1080p_video_command_panel;
520 panelstruct->state = & r63417_1080p_video_state;
521 panelstruct->laneconfig = & r63417_1080p_video_lane_config;
522 panelstruct->paneltiminginfo
523 = & r63417_1080p_video_timing_info;
524 panelstruct->panelresetseq
525 = & r63417_1080p_video_reset_seq;
526 panelstruct->backlightinfo = & r63417_1080p_video_backlight;
527 pinfo->mipi.panel_on_cmds
528 = r63417_1080p_video_on_command;
529 pinfo->mipi.num_of_panel_on_cmds
530 = R63417_1080P_VIDEO_ON_COMMAND;
531 pinfo->mipi.panel_off_cmds
532 = r63417_1080p_video_off_command;
533 pinfo->mipi.num_of_panel_off_cmds
534 = R63417_1080P_VIDEO_OFF_COMMAND;
535 memcpy(phy_db->timing,
536 r63417_1080p_video_timings, TIMING_SIZE);
537 break;
Vineet Bajajcc9f0572015-02-02 13:54:10 +0530538 case JDI_A216_FHD_VIDEO_PANEL:
539 panelstruct->paneldata = &jdi_a216_fhd_video_panel_data;
540 panelstruct->panelres = &jdi_a216_fhd_video_panel_res;
541 panelstruct->color = &jdi_a216_fhd_video_color;
542 panelstruct->videopanel = &jdi_a216_fhd_video_video_panel;
543 panelstruct->commandpanel = &jdi_a216_fhd_video_command_panel;
544 panelstruct->state = &jdi_a216_fhd_video_state;
545 panelstruct->laneconfig = &jdi_a216_fhd_video_lane_config;
546 panelstruct->paneltiminginfo
547 = &jdi_a216_fhd_video_timing_info;
548 panelstruct->panelresetseq
549 = &jdi_a216_fhd_video_reset_seq;
550 panelstruct->backlightinfo = &jdi_a216_fhd_video_backlight;
Vineet Bajajf4671f72015-02-11 20:03:52 +0530551 pinfo->mipi.panel_on_cmds
Vineet Bajajcc9f0572015-02-02 13:54:10 +0530552 = jdi_a216_fhd_video_on_command;
Vineet Bajajf4671f72015-02-11 20:03:52 +0530553 pinfo->mipi.num_of_panel_on_cmds
Vineet Bajajcc9f0572015-02-02 13:54:10 +0530554 = JDI_A216_FHD_VIDEO_ON_COMMAND;
Vineet Bajajf4671f72015-02-11 20:03:52 +0530555 pinfo->mipi.panel_off_cmds
556 = jdi_a216_fhd_video_off_command;
557 pinfo->mipi.num_of_panel_off_cmds
558 = JDI_A216_FHD_VIDEO_OFF_COMMAND;
Vineet Bajajcc9f0572015-02-02 13:54:10 +0530559 memcpy(phy_db->timing,
560 jdi_a216_fhd_video_timings, TIMING_SIZE);
561 break;
Vineet Bajaj02a1a8f2015-04-29 17:19:57 +0530562 case ADV7533_1080P_VIDEO_PANEL:
563 panelstruct->paneldata = &adv7533_1080p_video_panel_data;
564 panelstruct->panelres = &adv7533_1080p_video_panel_res;
565 panelstruct->color = &adv7533_1080p_video_color;
566 panelstruct->videopanel = &adv7533_1080p_video_video_panel;
567 panelstruct->commandpanel = &adv7533_1080p_video_command_panel;
568 panelstruct->state = &adv7533_1080p_video_state;
569 panelstruct->laneconfig = &adv7533_1080p_video_lane_config;
570 panelstruct->paneltiminginfo
571 = &adv7533_1080p_video_timing_info;
572 pinfo->adv7533.dsi_tg_i2c_cmd = &adv7533_1080p_tg_i2c_command;
573 pinfo->adv7533.num_of_tg_i2c_cmds = ADV7533_1080P_TG_COMMANDS;
574 pinfo->adv7533.dsi_setup_cfg_i2c_cmd = &adv7533_1080p_common_cfg;
575 pinfo->adv7533.num_of_cfg_i2c_cmds = ADV7533_1080P_CONFIG_COMMANDS;
576 memcpy(phy_db->timing,
577 adv7533_1080p_video_timings, TIMING_SIZE);
578 break;
579
580 case ADV7533_720P_VIDEO_PANEL:
581 panelstruct->paneldata = &adv7533_720p_video_panel_data;
582 panelstruct->panelres = &adv7533_720p_video_panel_res;
583 panelstruct->color = &adv7533_720p_video_color;
584 panelstruct->videopanel = &adv7533_720p_video_video_panel;
585 panelstruct->commandpanel = &adv7533_720p_video_command_panel;
586 panelstruct->state = &adv7533_720p_video_state;
587 panelstruct->laneconfig = &adv7533_720p_video_lane_config;
588 panelstruct->paneltiminginfo
589 = &adv7533_720p_video_timing_info;
590 pinfo->adv7533.dsi_tg_i2c_cmd = &adv7533_720p_tg_i2c_command;
591 pinfo->adv7533.num_of_tg_i2c_cmds = ADV7533_720P_TG_COMMANDS;
592 pinfo->adv7533.dsi_setup_cfg_i2c_cmd = &adv7533_720p_common_cfg;
593 pinfo->adv7533.num_of_cfg_i2c_cmds = ADV7533_720P_CONFIG_COMMANDS;
594 memcpy(phy_db->timing,
595 adv7533_720p_video_timings, TIMING_SIZE);
596 break;
Mao Flynn81409472014-04-10 15:01:30 +0800597 case UNKNOWN_PANEL:
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530598 default:
Mao Flynn81409472014-04-10 15:01:30 +0800599 memset(panelstruct, 0, sizeof(struct panel_struct));
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530600 memset(pinfo->mipi.panel_on_cmds, 0,
601 sizeof(struct mipi_dsi_cmd));
602 pinfo->mipi.num_of_panel_on_cmds = 0;
603 memset(pinfo->mipi.panel_off_cmds, 0,
604 sizeof(struct mipi_dsi_cmd));
605 pinfo->mipi.num_of_panel_off_cmds = 0;
Mao Flynn81409472014-04-10 15:01:30 +0800606 memset(phy_db->timing, 0, TIMING_SIZE);
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700607 pan_type = PANEL_TYPE_UNKNOWN;
Mao Flynn81409472014-04-10 15:01:30 +0800608 break;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530609 }
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700610 return pan_type;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530611}
612
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530613uint32_t oem_panel_max_auto_detect_panels()
614{
615 return target_panel_auto_detect_enabled() ?
616 DISPLAY_MAX_PANEL_DETECTION : 0;
617}
618
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700619int oem_panel_select(const char *panel_name, struct panel_struct *panelstruct,
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530620 struct msm_panel_info *pinfo,
621 struct mdss_dsi_phy_ctrl *phy_db)
622{
623 uint32_t hw_id = board_hardware_id();
Mao Flynn81409472014-04-10 15:01:30 +0800624 uint32_t hw_subtype = board_hardware_subtype();
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530625 int32_t panel_override_id;
Mao Flynn67d5c592014-06-17 16:41:02 +0800626 uint32_t target_id, plat_hw_ver_major;
Vineet Bajaj02a1a8f2015-04-29 17:19:57 +0530627 uint8_t rev = 0;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530628
629 if (panel_name) {
630 panel_override_id = panel_name_to_id(supp_panels,
631 ARRAY_SIZE(supp_panels), panel_name);
632
633 if (panel_override_id < 0) {
634 dprintf(CRITICAL, "Not able to search the panel:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530635 panel_name);
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530636 } else if (panel_override_id < UNKNOWN_PANEL) {
637 /* panel override using fastboot oem command */
638 panel_id = panel_override_id;
639
640 dprintf(INFO, "OEM panel override:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530641 panel_name);
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530642 goto panel_init;
643 }
644 }
645
646 switch (hw_id) {
647 case HW_PLATFORM_MTP:
Vineet Bajajd3db1582015-02-05 15:55:22 +0530648 if (platform_is_msm8939() &&
649 hw_subtype == HW_PLATFORM_SUBTYPE_MTP_3) {
Vineet Bajajc1221412014-11-07 18:15:34 +0530650 panel_id = JDI_FHD_VIDEO_PANEL;
Vineet Bajajd3db1582015-02-05 15:55:22 +0530651 } else {
652 panel_id = JDI_1080P_VIDEO_PANEL;
653 switch (auto_pan_loop) {
654 case 0:
655 panel_id = JDI_1080P_VIDEO_PANEL;
656 break;
657 case 1:
658 panel_id = HX8394D_720P_VIDEO_PANEL;
659 break;
660 default:
661 panel_id = UNKNOWN_PANEL;
662 dprintf(CRITICAL, "Unknown panel\n");
663 return PANEL_TYPE_UNKNOWN;
664 }
665 auto_pan_loop++;
666 }
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530667 break;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530668 case HW_PLATFORM_SURF:
Vineet Bajajc1221412014-11-07 18:15:34 +0530669 if (hw_subtype == HW_PLATFORM_SUBTYPE_CDP_1) {
670 panel_id = JDI_FHD_VIDEO_PANEL;
Vineet Bajajd3d04652015-02-02 14:43:36 +0530671 } else if (hw_subtype == HW_PLATFORM_SUBTYPE_CDP_2) {
672 panel_id = JDI_A216_FHD_VIDEO_PANEL;
Vineet Bajajc1221412014-11-07 18:15:34 +0530673 } else {
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530674 panel_id = JDI_1080P_VIDEO_PANEL;
Vineet Bajajc1221412014-11-07 18:15:34 +0530675 switch (auto_pan_loop) {
676 case 0:
677 panel_id = JDI_1080P_VIDEO_PANEL;
678 break;
679 case 1:
Jayant Shekhar8c5d9d82015-01-08 14:52:30 +0530680 panel_id = HX8394D_720P_VIDEO_PANEL;
681 break;
682 case 2:
Vineet Bajajc1221412014-11-07 18:15:34 +0530683 panel_id = NT35590_720P_VIDEO_PANEL;
684 break;
685 default:
686 panel_id = UNKNOWN_PANEL;
687 dprintf(CRITICAL, "Unknown panel\n");
688 return PANEL_TYPE_UNKNOWN;
689 }
690 auto_pan_loop++;
Padmanabhan Komanduru1869a762014-04-01 20:12:05 +0530691 }
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530692 break;
Mao Flynn81409472014-04-10 15:01:30 +0800693 case HW_PLATFORM_QRD:
Shuo Yan2616adc2014-08-13 08:22:27 +0800694 target_id = board_target_id();
695 plat_hw_ver_major = ((target_id >> 16) & 0xFF);
696
vijay kumardd51c592015-01-05 12:46:28 +0530697 if (platform_is_msm8939() || platform_is_msm8929()) {
Mao Flynn732e3c22014-07-02 17:39:02 +0800698 switch (hw_subtype) {
699 case HW_PLATFORM_SUBTYPE_SKUK:
Shuo Yana935c302015-01-06 18:23:24 +0800700 if ((plat_hw_ver_major >> 4) == 0x1)
701 panel_id = R61318_HD_VIDEO_PANEL;
Shuo Yan959d5c12015-01-21 17:31:30 +0800702 else if ((plat_hw_ver_major >> 4) == 0x2)
703 panel_id = R63417_1080P_VIDEO_PANEL;
Shuo Yana935c302015-01-06 18:23:24 +0800704 else
705 panel_id = NT35596_1080P_VIDEO_PANEL;
Mao Flynn732e3c22014-07-02 17:39:02 +0800706 break;
707 default:
708 dprintf(CRITICAL, "Invalid subtype id %d for QRD HW\n",
709 hw_subtype);
710 return PANEL_TYPE_UNKNOWN;
711 }
712 } else {
713 switch (hw_subtype) {
714 case HW_PLATFORM_SUBTYPE_SKUH:
Shuo Yan2616adc2014-08-13 08:22:27 +0800715 /* qrd SKUIC */
Mao Flynn732e3c22014-07-02 17:39:02 +0800716 if ((plat_hw_ver_major >> 4) == 0x1)
717 panel_id = OTM1283A_720P_VIDEO_PANEL;
718 else
719 panel_id = INNOLUX_720P_VIDEO_PANEL;
720 break;
721 case HW_PLATFORM_SUBTYPE_SKUI:
Shuo Yan2616adc2014-08-13 08:22:27 +0800722 /* qrd SKUIC */
Shuo Yan14ac9012014-09-18 16:39:48 +0800723 if ((plat_hw_ver_major >> 4) == 0)
Shuo Yan2616adc2014-08-13 08:22:27 +0800724 panel_id = OTM8019A_FWVGA_VIDEO_PANEL;
Shuo Yan14ac9012014-09-18 16:39:48 +0800725 else
726 panel_id = HX8379A_FWVGA_VIDEO_PANEL;
Mao Flynn732e3c22014-07-02 17:39:02 +0800727 break;
Gustavo Solairafb6fdd62014-09-30 08:15:32 -0300728 case HW_PLATFORM_SUBTYPE_SKUT1:
Gustavo Solaira80c274c2014-10-22 16:21:27 -0300729 if ((plat_hw_ver_major & 0x0F) == 0x1)
730 /* qrd SKUT1 */
731 panel_id = NT35521_WXGA_VIDEO_PANEL;
Gustavo Solaira48aa56d2014-10-22 16:26:49 -0300732 else if ((plat_hw_ver_major & 0x0F) == 0x2)
Gustavo Solaira80c274c2014-10-22 16:21:27 -0300733 /* qrd SKUT2 */
734 panel_id = SAMSUNG_WXGA_VIDEO_PANEL;
Gustavo Solaira48aa56d2014-10-22 16:26:49 -0300735 else if ((plat_hw_ver_major & 0x0F) == 0x3)
736 /* qrd SKUT3 */
737 panel_id = HX8279A_WSVGA_VIDEO_PANEL;
Gustavo Solairafb6fdd62014-09-30 08:15:32 -0300738 break;
Mao Flynn732e3c22014-07-02 17:39:02 +0800739 default:
740 dprintf(CRITICAL, "Invalid subtype id %d for QRD HW\n",
741 hw_subtype);
742 return PANEL_TYPE_UNKNOWN;
743 }
Mao Flynn81409472014-04-10 15:01:30 +0800744 }
745 break;
Vineet Bajaj02a1a8f2015-04-29 17:19:57 +0530746 case HW_PLATFORM_SBC:
747 if (platform_is_apq8016()) {
748 /* Set Switch GPIO to DSI2HDMI mode */
749 target_set_switch_gpio(1);
750 /* ADV7533 DSI to HDMI Bridge Chip Connected */
751 mipi_dsi_i2c_device_init();
752 /* Read ADV Chip ID */
753 if (!mipi_dsi_i2c_read_byte(ADV7533_MAIN, 0x00, &rev)) {
754 dprintf(INFO, "ADV7533 Rev ID: 0x%x\n",rev);
755 } else {
756 dprintf(CRITICAL, "error reading Rev ID from bridge chip\n");
757 return PANEL_TYPE_UNKNOWN;
758 }
759 panel_id = ADV7533_720P_VIDEO_PANEL;
760 }
761 break;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530762 default:
763 dprintf(CRITICAL, "Display not enabled for %d HW type\n",
764 hw_id);
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700765 return PANEL_TYPE_UNKNOWN;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530766 }
767
768panel_init:
Padmanabhan Komandurub088f922014-10-28 23:55:20 +0530769 /*
770 * Update all data structures after 'panel_init' label. Only panel
771 * selection is supposed to happen before that.
772 */
Padmanabhan Komanduru7271e162015-03-17 16:06:07 +0530773 if ((platform_is_msm8939() && (board_soc_version() !=
774 BOARD_SOC_VERSION3)) || platform_is_msm8929() ||
775 (hw_id == HW_PLATFORM_QRD)) {
Radhika Ranjan Soni7ea98552014-06-11 17:01:12 +0530776 phy_db->regulator_mode = DSI_PHY_REGULATOR_LDO_MODE;
Padmanabhan Komandurub088f922014-10-28 23:55:20 +0530777 memcpy(panel_regulator_settings,
778 ldo_regulator_settings, REGULATOR_SIZE);
779 } else {
780 memcpy(panel_regulator_settings,
781 dcdc_regulator_settings, REGULATOR_SIZE);
782 }
Radhika Ranjan Soni7ea98552014-06-11 17:01:12 +0530783
Jayant Shekharb130da22014-05-29 12:47:51 +0530784 pinfo->pipe_type = MDSS_MDP_PIPE_TYPE_RGB;
Padmanabhan Komandurucd5645e2014-03-25 20:34:18 +0530785 return init_panel_data(panelstruct, pinfo, phy_db);
786}