blob: 3da5af198828bac34904afe4f0875ef3d7e79dea [file] [log] [blame]
Jayant Shekhar9c0533e2016-01-28 11:17:18 +05301/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -07002 *
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 <string.h>
32#include <err.h>
33#include <smem.h>
34#include <msm_panel.h>
35#include <board.h>
feifanz525046b2015-06-01 20:31:06 +080036#include <qtimer.h>
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -070037#include <mipi_dsi.h>
Sandeep Pandaed082922015-08-03 12:18:25 +053038#include <mdp5.h>
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -070039#include <target/display.h>
40
Ujwal Patel41a665a2015-07-17 13:51:30 -070041#include "gcdb_display.h"
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -070042#include "include/panel.h"
43#include "panel_display.h"
44
45/*---------------------------------------------------------------------------*/
46/* GCDB Panel Database */
47/*---------------------------------------------------------------------------*/
48#include "include/panel_truly_1080p_video.h"
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +053049#include "include/panel_truly_1080p_cmd.h"
feifanz174c82c2015-04-15 18:57:07 +080050#include "include/panel_otm1906c_1080p_cmd.h"
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +053051#include "include/panel_sharp_1080p_cmd.h"
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +053052#include "include/panel_nt35597_wqxga_dualdsi_video.h"
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +053053#include "include/panel_nt35597_wqxga_dualdsi_cmd.h"
Ray Zhangf95f5b92015-06-25 15:34:29 +080054#include "include/panel_hx8399a_1080p_video.h"
Sandeep Pandaed082922015-08-03 12:18:25 +053055#include "include/panel_nt35597_wqxga_dsc_video.h"
56#include "include/panel_nt35597_wqxga_dsc_cmd.h"
Padmanabhan Komanduru4927c2c2015-08-21 14:55:16 +053057#include "include/panel_hx8394d_720p_video.h"
Sujeev Dias6bc9fa32015-08-03 23:13:44 -070058#include "include/panel_byd_1200p_video.h"
Ray Zhang4bbc7b02015-12-04 16:07:20 +080059#include "include/panel_r69006_1080p_cmd.h"
60#include "include/panel_r69006_1080p_video.h"
61#include "include/panel_hx8394f_720p_video.h"
Padmanabhan Komandurue108ed02015-12-21 12:43:07 +053062#include "include/panel_truly_720p_video.h"
Padmanabhan Komanduru7460e442016-01-21 12:30:34 +053063#include "include/panel_truly_wuxga_video.h"
Vishnuvardhan Prodduturia0989b32016-02-15 18:07:44 +053064#include "include/panel_truly_720p_cmd.h"
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -070065
66/*---------------------------------------------------------------------------*/
67/* static panel selection variable */
68/*---------------------------------------------------------------------------*/
69enum {
70 TRULY_1080P_VIDEO_PANEL,
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +053071 TRULY_1080P_CMD_PANEL,
feifanz174c82c2015-04-15 18:57:07 +080072 OTM1906C_1080P_CMD_PANEL,
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +053073 SHARP_1080P_CMD_PANEL,
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +053074 NT35597_WQXGA_DUALDSI_VIDEO_PANEL,
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +053075 NT35597_WQXGA_DUALDSI_CMD_PANEL,
Ray Zhangf95f5b92015-06-25 15:34:29 +080076 HX8399A_1080P_VIDEO_PANEL,
Sandeep Pandaed082922015-08-03 12:18:25 +053077 NT35597_WQXGA_DSC_VIDEO_PANEL,
78 NT35597_WQXGA_DSC_CMD_PANEL,
Padmanabhan Komanduru4927c2c2015-08-21 14:55:16 +053079 HX8394D_720P_VIDEO_PANEL,
Sujeev Dias6bc9fa32015-08-03 23:13:44 -070080 BYD_1200P_VIDEO_PANEL,
Ray Zhang4bbc7b02015-12-04 16:07:20 +080081 R69006_1080P_CMD_PANEL,
82 R69006_1080P_VIDEO_PANEL,
83 HX8394F_720P_VIDEO_PANEL,
Padmanabhan Komandurue108ed02015-12-21 12:43:07 +053084 TRULY_720P_VIDEO_PANEL,
Padmanabhan Komanduru7460e442016-01-21 12:30:34 +053085 TRULY_WUXGA_VIDEO_PANEL,
Vishnuvardhan Prodduturia0989b32016-02-15 18:07:44 +053086 TRULY_720P_CMD_PANEL,
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -070087 UNKNOWN_PANEL
88};
89
90uint32_t panel_regulator_settings[] = {
91 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
92};
93
94/*
95 * The list of panels that are supported on this target.
96 * Any panel in this list can be selected using fastboot oem command.
97 */
98static struct panel_list supp_panels[] = {
99 {"truly_1080p_video", TRULY_1080P_VIDEO_PANEL},
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +0530100 {"truly_1080p_cmd", TRULY_1080P_CMD_PANEL},
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +0530101 {"sharp_1080p_cmd", SHARP_1080P_CMD_PANEL},
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530102 {"nt35597_wqxga_dualdsi_video", NT35597_WQXGA_DUALDSI_VIDEO_PANEL},
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +0530103 {"nt35597_wqxga_dualdsi_cmd", NT35597_WQXGA_DUALDSI_CMD_PANEL},
Ray Zhangf95f5b92015-06-25 15:34:29 +0800104 {"otm1906c_1080p_cmd", OTM1906C_1080P_CMD_PANEL},
105 {"hx8399a_1080p_video", HX8399A_1080P_VIDEO_PANEL},
Sandeep Pandaed082922015-08-03 12:18:25 +0530106 {"nt35597_wqxga_dsc_video", NT35597_WQXGA_DSC_VIDEO_PANEL},
107 {"nt35597_wqxga_dsc_cmd", NT35597_WQXGA_DSC_CMD_PANEL},
Padmanabhan Komanduru4927c2c2015-08-21 14:55:16 +0530108 {"hx8394d_720p_video", HX8394D_720P_VIDEO_PANEL},
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700109 {"byd_1200p_video", BYD_1200P_VIDEO_PANEL},
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800110 {"r69006_1080p_cmd",R69006_1080P_CMD_PANEL},
111 {"r69006_1080p_video",R69006_1080P_VIDEO_PANEL},
Padmanabhan Komandurue108ed02015-12-21 12:43:07 +0530112 {"hx8394f_720p_video", HX8394F_720P_VIDEO_PANEL},
Padmanabhan Komanduru7460e442016-01-21 12:30:34 +0530113 {"truly_720p_video", TRULY_720P_VIDEO_PANEL},
Vishnuvardhan Prodduturia0989b32016-02-15 18:07:44 +0530114 {"truly_wuxga_video", TRULY_WUXGA_VIDEO_PANEL},
115 {"truly_720p_cmd", TRULY_720P_CMD_PANEL},
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700116};
117
118static uint32_t panel_id;
119
Sandeep Panda75fddaa2015-07-06 11:38:25 +0530120#define TRULY_1080P_PANEL_ON_DELAY 40
Sandeep Pandac797d542015-06-12 14:37:55 +0530121
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700122int oem_panel_rotation()
123{
124 return NO_ERROR;
125}
126
127int oem_panel_on()
128{
129 /*
130 *OEM can keep their panel specific on instructions in this
131 *function
feifanz525046b2015-06-01 20:31:06 +0800132 */
133 if (panel_id == OTM1906C_1080P_CMD_PANEL) {
134 /* needs extra delay to avoid unexpected artifacts */
135 mdelay(OTM1906C_1080P_CMD_PANEL_ON_DELAY);
Sandeep Panda75fddaa2015-07-06 11:38:25 +0530136 } else if (panel_id == TRULY_1080P_CMD_PANEL ||
137 panel_id == TRULY_1080P_VIDEO_PANEL) {
138 mdelay(TRULY_1080P_PANEL_ON_DELAY);
Ray Zhang6ec437c2015-12-04 16:08:08 +0800139 }else if (panel_id == R69006_1080P_CMD_PANEL) {
140 mdelay(R69006_1080P_CMD_PANEL_ON_DELAY);
feifanz525046b2015-06-01 20:31:06 +0800141 }
Sandeep Pandac797d542015-06-12 14:37:55 +0530142
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700143 return NO_ERROR;
144}
145
146int oem_panel_off()
147{
148 /* OEM can keep their panel specific off instructions
149 * in this function
150 */
151 return NO_ERROR;
152}
153
154static int init_panel_data(struct panel_struct *panelstruct,
155 struct msm_panel_info *pinfo,
156 struct mdss_dsi_phy_ctrl *phy_db)
157{
158 int pan_type = PANEL_TYPE_DSI;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700159 struct oem_panel_data *oem_data = mdss_dsi_get_oem_data_ptr();
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700160
161 switch (panel_id) {
162 case TRULY_1080P_VIDEO_PANEL:
163 panelstruct->paneldata = &truly_1080p_video_panel_data;
164 panelstruct->paneldata->panel_with_enable_gpio = 1;
165 panelstruct->panelres = &truly_1080p_video_panel_res;
166 panelstruct->color = &truly_1080p_video_color;
167 panelstruct->videopanel = &truly_1080p_video_video_panel;
168 panelstruct->commandpanel = &truly_1080p_video_command_panel;
169 panelstruct->state = &truly_1080p_video_state;
170 panelstruct->laneconfig = &truly_1080p_video_lane_config;
171 panelstruct->paneltiminginfo
172 = &truly_1080p_video_timing_info;
173 panelstruct->panelresetseq
174 = &truly_1080p_video_panel_reset_seq;
175 panelstruct->backlightinfo = &truly_1080p_video_backlight;
176 pinfo->mipi.panel_on_cmds
177 = truly_1080p_video_on_command;
178 pinfo->mipi.num_of_panel_on_cmds
179 = TRULY_1080P_VIDEO_ON_COMMAND;
180 pinfo->mipi.panel_off_cmds
181 = truly_1080p_video_off_command;
182 pinfo->mipi.num_of_panel_off_cmds
183 = TRULY_1080P_VIDEO_OFF_COMMAND;
184 memcpy(phy_db->timing,
185 truly_1080p_video_timings, TIMING_SIZE);
186 pinfo->mipi.signature = TRULY_1080P_VIDEO_SIGNATURE;
187 break;
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +0530188 case TRULY_1080P_CMD_PANEL:
189 panelstruct->paneldata = &truly_1080p_cmd_panel_data;
190 panelstruct->paneldata->panel_with_enable_gpio = 1;
191 panelstruct->panelres = &truly_1080p_cmd_panel_res;
192 panelstruct->color = &truly_1080p_cmd_color;
193 panelstruct->videopanel = &truly_1080p_cmd_video_panel;
194 panelstruct->commandpanel = &truly_1080p_cmd_command_panel;
195 panelstruct->state = &truly_1080p_cmd_state;
196 panelstruct->laneconfig = &truly_1080p_cmd_lane_config;
197 panelstruct->paneltiminginfo
198 = &truly_1080p_cmd_timing_info;
199 panelstruct->panelresetseq
200 = &truly_1080p_cmd_panel_reset_seq;
201 panelstruct->backlightinfo = &truly_1080p_cmd_backlight;
202 pinfo->mipi.panel_on_cmds
203 = truly_1080p_cmd_on_command;
204 pinfo->mipi.num_of_panel_on_cmds
205 = TRULY_1080P_CMD_ON_COMMAND;
206 pinfo->mipi.panel_off_cmds
207 = truly_1080p_cmd_off_command;
208 pinfo->mipi.num_of_panel_off_cmds
209 = TRULY_1080P_CMD_OFF_COMMAND;
210 memcpy(phy_db->timing,
211 truly_1080p_cmd_timings, TIMING_SIZE);
212 pinfo->mipi.signature = TRULY_1080P_CMD_SIGNATURE;
213 break;
feifanz174c82c2015-04-15 18:57:07 +0800214 case OTM1906C_1080P_CMD_PANEL:
215 panelstruct->paneldata = &otm1906c_1080p_cmd_panel_data;
216 panelstruct->paneldata->panel_with_enable_gpio = 1;
217 panelstruct->panelres = &otm1906c_1080p_cmd_panel_res;
218 panelstruct->color = &otm1906c_1080p_cmd_color;
219 panelstruct->videopanel = &otm1906c_1080p_cmd_video_panel;
220 panelstruct->commandpanel = &otm1906c_1080p_cmd_command_panel;
221 panelstruct->state = &otm1906c_1080p_cmd_state;
222 panelstruct->laneconfig = &otm1906c_1080p_cmd_lane_config;
223 panelstruct->paneltiminginfo
224 = &otm1906c_1080p_cmd_timing_info;
225 panelstruct->panelresetseq
226 = &otm1906c_1080p_cmd_panel_reset_seq;
227 panelstruct->backlightinfo = &otm1906c_1080p_cmd_backlight;
228 pinfo->mipi.panel_on_cmds
229 = otm1906c_1080p_cmd_on_command;
230 pinfo->mipi.num_of_panel_on_cmds
231 = OTM1906C_1080P_CMD_ON_COMMAND;
232 pinfo->mipi.panel_off_cmds
233 = otm1906c_1080p_cmd_off_command;
234 pinfo->mipi.num_of_panel_off_cmds
235 = OTM1906C_1080P_CMD_OFF_COMMAND;
236 memcpy(phy_db->timing,
237 otm1906c_1080p_cmd_timings, TIMING_SIZE);
238 pinfo->mipi.signature = OTM1906C_1080P_CMD_SIGNATURE;
239 break;
Ray Zhangf95f5b92015-06-25 15:34:29 +0800240 case HX8399A_1080P_VIDEO_PANEL:
241 panelstruct->paneldata = &hx8399a_1080p_video_panel_data;
242 panelstruct->panelres = &hx8399a_1080p_video_panel_res;
243 panelstruct->color = &hx8399a_1080p_video_color;
244 panelstruct->videopanel = &hx8399a_1080p_video_video_panel;
245 panelstruct->commandpanel = &hx8399a_1080p_video_command_panel;
246 panelstruct->state = &hx8399a_1080p_video_state;
247 panelstruct->laneconfig = &hx8399a_1080p_video_lane_config;
248 panelstruct->paneltiminginfo
249 = &hx8399a_1080p_video_timing_info;
250 panelstruct->panelresetseq
251 = &hx8399a_1080p_video_reset_seq;
252 panelstruct->backlightinfo = &hx8399a_1080p_video_backlight;
253 pinfo->mipi.panel_on_cmds
254 = hx8399a_1080p_video_on_command;
255 pinfo->mipi.num_of_panel_on_cmds
256 = HX8399A_1080P_VIDEO_ON_COMMAND;
257 pinfo->mipi.panel_off_cmds
258 = hx8399a_1080p_video_off_command;
259 pinfo->mipi.num_of_panel_off_cmds
260 = HX8399A_1080P_VIDEO_OFF_COMMAND;
261 memcpy(phy_db->timing,
262 hx8399a_1080p_video_timings, TIMING_SIZE);
263 pinfo->mipi.signature = HX8399A_1080P_VIDEO_SIGNATURE;
264 break;
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +0530265 case SHARP_1080P_CMD_PANEL:
266 panelstruct->paneldata = &sharp_1080p_cmd_panel_data;
267 panelstruct->panelres = &sharp_1080p_cmd_panel_res;
268 panelstruct->paneldata->panel_with_enable_gpio = 1;
269 panelstruct->color = &sharp_1080p_cmd_color;
270 panelstruct->videopanel = &sharp_1080p_cmd_video_panel;
271 panelstruct->commandpanel = &sharp_1080p_cmd_command_panel;
272 panelstruct->state = &sharp_1080p_cmd_state;
273 panelstruct->laneconfig = &sharp_1080p_cmd_lane_config;
274 panelstruct->paneltiminginfo
275 = &sharp_1080p_cmd_timing_info;
276 panelstruct->panelresetseq
277 = &sharp_1080p_cmd_panel_reset_seq;
278 panelstruct->backlightinfo = &sharp_1080p_cmd_backlight;
279 pinfo->mipi.panel_on_cmds
280 = sharp_1080p_cmd_on_command;
281 pinfo->mipi.num_of_panel_on_cmds
282 = SHARP_1080P_CMD_ON_COMMAND;
283 pinfo->mipi.panel_off_cmds
284 = sharp_1080p_cmd_off_command;
285 pinfo->mipi.num_of_panel_off_cmds
286 = SHARP_1080P_CMD_OFF_COMMAND;
287 memcpy(phy_db->timing,
288 sharp_1080p_cmd_timings, TIMING_SIZE);
289 break;
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530290 case NT35597_WQXGA_DUALDSI_VIDEO_PANEL:
291 panelstruct->paneldata = &nt35597_wqxga_dualdsi_video_panel_data;
292 panelstruct->paneldata->panel_operating_mode = DST_SPLIT_FLAG |
293 SPLIT_DISPLAY_FLAG | DUAL_DSI_FLAG;
294 panelstruct->paneldata->panel_with_enable_gpio = 0;
295
296 panelstruct->panelres = &nt35597_wqxga_dualdsi_video_panel_res;
297 panelstruct->color = &nt35597_wqxga_dualdsi_video_color;
298 panelstruct->videopanel = &nt35597_wqxga_dualdsi_video_video_panel;
299 panelstruct->commandpanel = &nt35597_wqxga_dualdsi_video_command_panel;
300 panelstruct->state = &nt35597_wqxga_dualdsi_video_state;
301 panelstruct->laneconfig = &nt35597_wqxga_dualdsi_video_lane_config;
302 panelstruct->paneltiminginfo
303 = &nt35597_wqxga_dualdsi_video_timing_info;
304 panelstruct->panelresetseq
305 = &nt35597_wqxga_dualdsi_video_reset_seq;
306 panelstruct->backlightinfo = &nt35597_wqxga_dualdsi_video_backlight;
307 pinfo->labibb = &nt35597_wqxga_dualdsi_video_labibb;
308
309 pinfo->mipi.panel_on_cmds
310 = nt35597_wqxga_dualdsi_video_on_command;
311 pinfo->mipi.num_of_panel_on_cmds
312 = NT35597_WQXGA_DUALDSI_VIDEO_ON_COMMAND;
313 pinfo->mipi.panel_off_cmds
314 = nt35597_wqxga_dualdsi_video_off_command;
315 pinfo->mipi.num_of_panel_off_cmds
316 = NT35597_WQXGA_DUALDSI_VIDEO_OFF_COMMAND;
317 memcpy(phy_db->timing, nt35597_wqxga_dualdsi_video_timings,
318 TIMING_SIZE);
319 pinfo->mipi.tx_eot_append = true;
320 break;
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +0530321 case NT35597_WQXGA_DUALDSI_CMD_PANEL:
322 panelstruct->paneldata = &nt35597_wqxga_dualdsi_cmd_panel_data;
323 panelstruct->paneldata->panel_operating_mode = DST_SPLIT_FLAG |
324 SPLIT_DISPLAY_FLAG | DUAL_DSI_FLAG;
325 panelstruct->paneldata->panel_with_enable_gpio = 0;
326
327 panelstruct->panelres = &nt35597_wqxga_dualdsi_cmd_panel_res;
328 panelstruct->color = &nt35597_wqxga_dualdsi_cmd_color;
329 panelstruct->videopanel = &nt35597_wqxga_dualdsi_cmd_video_panel;
330 panelstruct->commandpanel = &nt35597_wqxga_dualdsi_cmd_command_panel;
331 panelstruct->state = &nt35597_wqxga_dualdsi_cmd_state;
332 panelstruct->laneconfig = &nt35597_wqxga_dualdsi_cmd_lane_config;
333 panelstruct->paneltiminginfo
334 = &nt35597_wqxga_dualdsi_cmd_timing_info;
Padmanabhan Komanduru58fc57e2015-07-07 21:36:14 +0530335 /* Clkout timings are different for this panel on 8956 */
336 panelstruct->paneltiminginfo->tclk_post = 0x2b;
337 panelstruct->paneltiminginfo->tclk_pre = 0x28;
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +0530338 panelstruct->panelresetseq
339 = &nt35597_wqxga_dualdsi_cmd_reset_seq;
340 panelstruct->backlightinfo = &nt35597_wqxga_dualdsi_cmd_backlight;
341
342 pinfo->labibb = &nt35597_wqxga_dualdsi_cmd_labibb;
343
344 pinfo->mipi.panel_on_cmds
345 = nt35597_wqxga_dualdsi_cmd_on_command;
346 pinfo->mipi.num_of_panel_on_cmds
347 = NT35597_WQXGA_DUALDSI_CMD_ON_COMMAND;
348 pinfo->mipi.panel_off_cmds
349 = nt35597_wqxga_dualdsi_cmd_off_command;
350 pinfo->mipi.num_of_panel_off_cmds
351 = NT35597_WQXGA_DUALDSI_CMD_OFF_COMMAND;
352 memcpy(phy_db->timing, nt35597_wqxga_dualdsi_cmd_timings,
353 TIMING_SIZE);
354 pinfo->mipi.tx_eot_append = true;
355 break;
Sandeep Pandaed082922015-08-03 12:18:25 +0530356 case NT35597_WQXGA_DSC_VIDEO_PANEL:
357 panelstruct->paneldata = &nt35597_wqxga_dsc_video_panel_data;
358 panelstruct->paneldata->panel_with_enable_gpio = 0;
359 panelstruct->paneldata->panel_operating_mode = USE_DSI1_PLL_FLAG;
360 panelstruct->panelres = &nt35597_wqxga_dsc_video_panel_res;
361 panelstruct->color = &nt35597_wqxga_dsc_video_color;
362 panelstruct->videopanel = &nt35597_wqxga_dsc_video_video_panel;
363 panelstruct->commandpanel = &nt35597_wqxga_dsc_video_command_panel;
364 panelstruct->state = &nt35597_wqxga_dsc_video_state;
365 panelstruct->laneconfig = &nt35597_wqxga_dsc_video_lane_config;
366 panelstruct->paneltiminginfo
367 = &nt35597_wqxga_dsc_video_timing_info;
368 panelstruct->panelresetseq
369 = &nt35597_wqxga_dsc_video_reset_seq;
370 panelstruct->backlightinfo = &nt35597_wqxga_dsc_video_backlight;
371 pinfo->labibb = &nt35597_wqxga_dsc_video_labibb;
372
373 pinfo->mipi.panel_on_cmds
374 = nt35597_wqxga_dsc_video_on_command;
375 pinfo->mipi.num_of_panel_on_cmds
376 = NT35597_WQXGA_DSC_VIDEO_ON_COMMAND;
377 pinfo->mipi.panel_off_cmds
378 = nt35597_wqxga_dsc_video_off_command;
379 pinfo->mipi.num_of_panel_off_cmds
380 = NT35597_WQXGA_DSC_VIDEO_OFF_COMMAND;
381 memcpy(phy_db->timing, nt35597_wqxga_dsc_video_timings,
382 TIMING_SIZE);
383 /* Clkout timings are different for this panel on 8956 */
384 panelstruct->paneltiminginfo->tclk_post = 0x04;
385 panelstruct->paneltiminginfo->tclk_pre = 0x20;
386 pinfo->mipi.tx_eot_append = true;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700387
388 panelstruct->paneldata->panel_operating_mode &= ~DUAL_PIPE_FLAG;
389 panelstruct->config = &nt35597_wqxga_dsc_video_config0;
390 if (oem_data) {
391 switch (oem_data->cfg_num[0]) {
392 case -1: /* default */
393 case 0:
394 panelstruct->config =
395 &nt35597_wqxga_dsc_video_config0;
396 break;
397 default:
398 dprintf(CRITICAL, "topology config%d not supported. fallback to default config0\n",
399 oem_data->cfg_num[0]);
400 panelstruct->config = &nt35597_wqxga_dsc_video_config0;
401 }
402 }
403 pinfo->lm_split[0] = panelstruct->config->lm_split[0];
404 pinfo->lm_split[1] = panelstruct->config->lm_split[1];
405 pinfo->num_dsc_enc = panelstruct->config->num_dsc_enc;
Sandeep Pandaed082922015-08-03 12:18:25 +0530406 pinfo->compression_mode = COMPRESSION_DSC;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700407
Sandeep Pandaed082922015-08-03 12:18:25 +0530408 pinfo->dsc.parameter_calc = mdss_dsc_parameters_calc;
409 pinfo->dsc.dsc2buf = mdss_dsc_to_buf;
410 pinfo->dsc.dsi_dsc_config = mdss_dsc_dsi_config;
411 pinfo->dsc.mdp_dsc_config = mdss_dsc_mdp_config;
412 break;
413 case NT35597_WQXGA_DSC_CMD_PANEL:
414 panelstruct->paneldata = &nt35597_wqxga_dsc_cmd_panel_data;
415 panelstruct->paneldata->panel_with_enable_gpio = 0;
416 panelstruct->paneldata->panel_operating_mode = USE_DSI1_PLL_FLAG;
417 panelstruct->panelres = &nt35597_wqxga_dsc_cmd_panel_res;
418 panelstruct->color = &nt35597_wqxga_dsc_cmd_color;
419 panelstruct->videopanel = &nt35597_wqxga_dsc_cmd_video_panel;
420 panelstruct->commandpanel = &nt35597_wqxga_dsc_cmd_command_panel;
421 panelstruct->state = &nt35597_wqxga_dsc_cmd_state;
422 panelstruct->laneconfig = &nt35597_wqxga_dsc_cmd_lane_config;
423 panelstruct->paneltiminginfo
424 = &nt35597_wqxga_dsc_cmd_timing_info;
425 panelstruct->panelresetseq
426 = &nt35597_wqxga_dsc_cmd_reset_seq;
427 panelstruct->backlightinfo = &nt35597_wqxga_dsc_cmd_backlight;
428 pinfo->labibb = &nt35597_wqxga_dsc_cmd_labibb;
429
430 pinfo->mipi.panel_on_cmds
431 = nt35597_wqxga_dsc_cmd_on_command;
432 pinfo->mipi.num_of_panel_on_cmds
433 = NT35597_WQXGA_DSC_CMD_ON_COMMAND;
434 pinfo->mipi.panel_off_cmds
435 = nt35597_wqxga_dsc_cmd_off_command;
436 pinfo->mipi.num_of_panel_off_cmds
437 = NT35597_WQXGA_DSC_CMD_OFF_COMMAND;
438 memcpy(phy_db->timing, nt35597_wqxga_dsc_cmd_timings,
439 TIMING_SIZE);
440 /* Clkout timings are different for this panel on 8956 */
441 panelstruct->paneltiminginfo->tclk_post = 0x04;
442 panelstruct->paneltiminginfo->tclk_pre = 0x20;
443 pinfo->mipi.tx_eot_append = true;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700444
445 panelstruct->paneldata->panel_operating_mode &= ~DUAL_PIPE_FLAG;
446 panelstruct->config = &nt35597_wqxga_dsc_cmd_config0;
447 if (oem_data) {
448 switch (oem_data->cfg_num[0]) {
449 case -1: /* default */
450 case 0:
451 panelstruct->config =
452 &nt35597_wqxga_dsc_cmd_config0;
453 break;
454 default:
455 dprintf(CRITICAL, "topology config%d not supported. fallback to default config0\n",
456 oem_data->cfg_num[0]);
457 panelstruct->config = &nt35597_wqxga_dsc_cmd_config0;
458 }
459 }
460 pinfo->lm_split[0] = panelstruct->config->lm_split[0];
461 pinfo->lm_split[1] = panelstruct->config->lm_split[1];
462 pinfo->num_dsc_enc = panelstruct->config->num_dsc_enc;
Sandeep Pandaed082922015-08-03 12:18:25 +0530463 pinfo->compression_mode = COMPRESSION_DSC;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700464
Sandeep Pandaed082922015-08-03 12:18:25 +0530465 pinfo->dsc.parameter_calc = mdss_dsc_parameters_calc;
466 pinfo->dsc.dsc2buf = mdss_dsc_to_buf;
467 pinfo->dsc.dsi_dsc_config = mdss_dsc_dsi_config;
468 pinfo->dsc.mdp_dsc_config = mdss_dsc_mdp_config;
469 break;
Padmanabhan Komanduru4927c2c2015-08-21 14:55:16 +0530470 case HX8394D_720P_VIDEO_PANEL:
471 panelstruct->paneldata = &hx8394d_720p_video_panel_data;
472 panelstruct->panelres = &hx8394d_720p_video_panel_res;
473 panelstruct->color = &hx8394d_720p_video_color;
474 panelstruct->videopanel = &hx8394d_720p_video_video_panel;
475 panelstruct->commandpanel = &hx8394d_720p_video_command_panel;
476 panelstruct->state = &hx8394d_720p_video_state;
477 panelstruct->laneconfig = &hx8394d_720p_video_lane_config;
478 panelstruct->paneltiminginfo
479 = &hx8394d_720p_video_timing_info;
480 panelstruct->panelresetseq
481 = &hx8394d_720p_video_panel_reset_seq;
482 panelstruct->backlightinfo = &hx8394d_720p_video_backlight;
483 pinfo->mipi.panel_on_cmds
484 = hx8394d_720p_video_on_command;
485 pinfo->mipi.num_of_panel_on_cmds
486 = HX8394D_720P_VIDEO_ON_COMMAND;
487 pinfo->mipi.panel_off_cmds
488 = hx8394d_720p_video_off_command;
489 pinfo->mipi.num_of_panel_off_cmds
490 = HX8394D_720P_VIDEO_OFF_COMMAND;
491 memcpy(phy_db->timing,
492 hx8394d_720p_video_timings, TIMING_SIZE);
493 pinfo->mipi.signature = HX8394D_720P_VIDEO_SIGNATURE;
494 break;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800495 case R69006_1080P_CMD_PANEL:
496 panelstruct->paneldata = &r69006_1080p_cmd_panel_data;
497 panelstruct->panelres = &r69006_1080p_cmd_panel_res;
498 panelstruct->color = &r69006_1080p_cmd_color;
499 panelstruct->videopanel = &r69006_1080p_cmd_video_panel;
500 panelstruct->commandpanel = &r69006_1080p_cmd_command_panel;
501 panelstruct->state = &r69006_1080p_cmd_state;
502 panelstruct->laneconfig = &r69006_1080p_cmd_lane_config;
503 panelstruct->paneltiminginfo
504 = &r69006_1080p_cmd_timing_info;
505 panelstruct->panelresetseq
506 = &r69006_1080p_cmd_reset_seq;
507 panelstruct->backlightinfo = &r69006_1080p_cmd_backlight;
Ray Zhange9e3b692015-12-18 18:03:30 +0800508 pinfo->labibb = &r69006_1080p_cmd_labibb;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800509 pinfo->mipi.panel_on_cmds
510 = r69006_1080p_cmd_on_command;
511 pinfo->mipi.num_of_panel_on_cmds
512 = R69006_1080P_CMD_ON_COMMAND;
513 pinfo->mipi.panel_off_cmds
514 = r69006_1080p_cmd_off_command;
515 pinfo->mipi.num_of_panel_off_cmds
516 = R69006_1080P_CMD_OFF_COMMAND;
517 memcpy(phy_db->timing,
518 r69006_1080p_cmd_timings, TIMING_SIZE);
519 pinfo->mipi.signature = R69006_1080P_CMD_SIGNATURE;
Ray Zhangc8fd3632015-12-23 14:01:13 +0800520 pinfo->mipi.tx_eot_append = true;
521 pinfo->mipi.rx_eot_ignore = true;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800522 break;
523 case R69006_1080P_VIDEO_PANEL:
524 panelstruct->paneldata = &r69006_1080p_video_panel_data;
525 panelstruct->panelres = &r69006_1080p_video_panel_res;
526 panelstruct->color = &r69006_1080p_video_color;
527 panelstruct->videopanel = &r69006_1080p_video_video_panel;
528 panelstruct->commandpanel = &r69006_1080p_video_command_panel;
529 panelstruct->state = &r69006_1080p_video_state;
530 panelstruct->laneconfig = &r69006_1080p_video_lane_config;
531 panelstruct->paneltiminginfo
532 = &r69006_1080p_video_timing_info;
533 panelstruct->panelresetseq
534 = &r69006_1080p_video_reset_seq;
535 panelstruct->backlightinfo = &r69006_1080p_video_backlight;
Ray Zhange9e3b692015-12-18 18:03:30 +0800536 pinfo->labibb = &r69006_1080p_video_labibb;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800537 pinfo->mipi.panel_on_cmds
538 = r69006_1080p_video_on_command;
539 pinfo->mipi.num_of_panel_on_cmds
540 = R69006_1080P_VIDEO_ON_COMMAND;
541 pinfo->mipi.panel_off_cmds
542 = r69006_1080p_video_off_command;
543 pinfo->mipi.num_of_panel_off_cmds
544 = R69006_1080P_VIDEO_OFF_COMMAND;
545 memcpy(phy_db->timing,
546 r69006_1080p_video_timings, TIMING_SIZE);
547 pinfo->mipi.signature = R69006_1080P_VIDEO_SIGNATURE;
548 break;
549 case HX8394F_720P_VIDEO_PANEL:
550 panelstruct->paneldata = &hx8394f_720p_video_panel_data;
551 panelstruct->panelres = &hx8394f_720p_video_panel_res;
552 panelstruct->color = &hx8394f_720p_video_color;
553 panelstruct->videopanel = &hx8394f_720p_video_video_panel;
554 panelstruct->commandpanel = &hx8394f_720p_video_command_panel;
555 panelstruct->state = &hx8394f_720p_video_state;
556 panelstruct->laneconfig = &hx8394f_720p_video_lane_config;
557 panelstruct->paneltiminginfo
558 = &hx8394f_720p_video_timing_info;
559 panelstruct->panelresetseq
560 = &hx8394f_720p_video_reset_seq;
561 panelstruct->backlightinfo = &hx8394f_720p_video_backlight;
562 pinfo->mipi.panel_on_cmds
563 = hx8394f_720p_video_on_command;
564 pinfo->mipi.num_of_panel_on_cmds
565 = HX8394F_720P_VIDEO_ON_COMMAND;
566 pinfo->mipi.panel_off_cmds
567 = hx8394f_720p_video_off_command;
568 pinfo->mipi.num_of_panel_off_cmds
569 = HX8394F_720P_VIDEO_OFF_COMMAND;
570 memcpy(phy_db->timing,
571 hx8394f_720p_video_timings, TIMING_SIZE);
572 pinfo->mipi.signature = HX8394F_720P_VIDEO_SIGNATURE;
573 break;
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700574 case BYD_1200P_VIDEO_PANEL:
575 panelstruct->paneldata = &byd_1200p_video_panel_data;
576 panelstruct->paneldata->panel_with_enable_gpio = 1;
577 panelstruct->panelres = &byd_1200p_video_panel_res;
578 panelstruct->color = &byd_1200p_video_color;
579 panelstruct->videopanel = &byd_1200p_video_video_panel;
580 panelstruct->commandpanel = &byd_1200p_video_command_panel;
581 panelstruct->state = &byd_1200p_video_state;
582 panelstruct->laneconfig = &byd_1200p_video_lane_config;
583 panelstruct->paneltiminginfo
584 = &byd_1200p_video_timing_info;
585 panelstruct->panelresetseq
586 = &byd_1200p_video_panel_reset_seq;
587 panelstruct->backlightinfo = &byd_1200p_video_backlight;
588 pinfo->mipi.panel_on_cmds
589 = byd_1200p_video_on_command;
590 pinfo->mipi.num_of_panel_on_cmds
591 = BYD_1200P_VIDEO_ON_COMMAND;
592 pinfo->mipi.panel_off_cmds
593 = byd_1200p_video_off_command;
594 pinfo->mipi.num_of_panel_off_cmds
595 = BYD_1200P_VIDEO_OFF_COMMAND;
596 memcpy(phy_db->timing,
597 byd_1200p_video_timings, TIMING_SIZE);
598 pinfo->mipi.signature = BYD_1200P_VIDEO_SIGNATURE;
599 phy_db->regulator_mode = DSI_PHY_REGULATOR_LDO_MODE;
600 break;
Padmanabhan Komandurue108ed02015-12-21 12:43:07 +0530601 case TRULY_720P_VIDEO_PANEL:
602 panelstruct->paneldata = &truly_720p_video_panel_data;
603 panelstruct->paneldata->panel_with_enable_gpio = 1;
604 panelstruct->panelres = &truly_720p_video_panel_res;
605 panelstruct->color = &truly_720p_video_color;
606 panelstruct->videopanel = &truly_720p_video_video_panel;
607 panelstruct->commandpanel = &truly_720p_video_command_panel;
608 panelstruct->state = &truly_720p_video_state;
609 panelstruct->laneconfig = &truly_720p_video_lane_config;
610 panelstruct->paneltiminginfo
611 = &truly_720p_video_timing_info;
612 panelstruct->panelresetseq
613 = &truly_720p_video_panel_reset_seq;
614 panelstruct->backlightinfo = &truly_720p_video_backlight;
615 pinfo->mipi.panel_on_cmds
616 = truly_720p_video_on_command;
617 pinfo->mipi.num_of_panel_on_cmds
618 = TRULY_720P_VIDEO_ON_COMMAND;
619 pinfo->mipi.panel_off_cmds
620 = truly_720p_video_off_command;
621 pinfo->mipi.num_of_panel_off_cmds
622 = TRULY_720P_VIDEO_OFF_COMMAND;
623 memcpy(phy_db->timing,
624 truly_720p_video_timings, TIMING_SIZE);
625 pinfo->mipi.signature = TRULY_720P_VIDEO_SIGNATURE;
626 pinfo->mipi.tx_eot_append = true;
627 break;
Padmanabhan Komanduru7460e442016-01-21 12:30:34 +0530628 case TRULY_WUXGA_VIDEO_PANEL:
629 panelstruct->paneldata = &truly_wuxga_video_panel_data;
630 panelstruct->paneldata->panel_with_enable_gpio = 1;
631 panelstruct->panelres = &truly_wuxga_video_panel_res;
632 panelstruct->color = &truly_wuxga_video_color;
633 panelstruct->videopanel = &truly_wuxga_video_video_panel;
634 panelstruct->commandpanel = &truly_wuxga_video_command_panel;
635 panelstruct->state = &truly_wuxga_video_state;
636 panelstruct->laneconfig = &truly_wuxga_video_lane_config;
637 panelstruct->paneltiminginfo
638 = &truly_wuxga_video_timing_info;
639 panelstruct->panelresetseq
640 = &truly_wuxga_video_panel_reset_seq;
641 panelstruct->backlightinfo = &truly_wuxga_video_backlight;
642 pinfo->mipi.panel_on_cmds
643 = truly_wuxga_video_on_command;
644 pinfo->mipi.num_of_panel_on_cmds
645 = TRULY_WUXGA_VIDEO_ON_COMMAND;
646 pinfo->mipi.panel_off_cmds
647 = truly_wuxga_video_off_command;
648 pinfo->mipi.num_of_panel_off_cmds
649 = TRULY_WUXGA_VIDEO_OFF_COMMAND;
650 memcpy(phy_db->timing,
651 truly_wuxga_video_timings, TIMING_SIZE);
652 pinfo->mipi.signature = TRULY_WUXGA_VIDEO_SIGNATURE;
653 break;
Vishnuvardhan Prodduturia0989b32016-02-15 18:07:44 +0530654 case TRULY_720P_CMD_PANEL:
655 panelstruct->paneldata = &truly_720p_cmd_panel_data;
656 panelstruct->paneldata->panel_with_enable_gpio = 1;
657 panelstruct->panelres = &truly_720p_cmd_panel_res;
658 panelstruct->color = &truly_720p_cmd_color;
659 panelstruct->videopanel = &truly_720p_cmd_video_panel;
660 panelstruct->commandpanel = &truly_720p_cmd_command_panel;
661 panelstruct->state = &truly_720p_cmd_state;
662 panelstruct->laneconfig = &truly_720p_cmd_lane_config;
663 panelstruct->paneltiminginfo
664 = &truly_720p_cmd_timing_info;
665 panelstruct->panelresetseq
666 = &truly_720p_cmd_panel_reset_seq;
667 panelstruct->backlightinfo = &truly_720p_cmd_backlight;
668 pinfo->mipi.panel_on_cmds
669 = truly_720p_cmd_on_command;
670 pinfo->mipi.num_of_panel_on_cmds
671 = TRULY_720P_CMD_ON_COMMAND;
672 pinfo->mipi.panel_off_cmds
673 = truly_720p_cmd_off_command;
674 pinfo->mipi.num_of_panel_off_cmds
675 = TRULY_720P_CMD_OFF_COMMAND;
676 memcpy(phy_db->timing,
677 truly_720p_cmd_timings, TIMING_SIZE);
678 pinfo->mipi.signature = TRULY_720P_CMD_SIGNATURE;
679 pinfo->mipi.tx_eot_append = true;
680 break;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700681 case UNKNOWN_PANEL:
682 default:
683 memset(panelstruct, 0, sizeof(struct panel_struct));
684 memset(pinfo->mipi.panel_on_cmds, 0,
685 sizeof(struct mipi_dsi_cmd));
686 pinfo->mipi.num_of_panel_on_cmds = 0;
687 memset(pinfo->mipi.panel_off_cmds, 0,
688 sizeof(struct mipi_dsi_cmd));
689 pinfo->mipi.num_of_panel_off_cmds = 0;
690 memset(phy_db->timing, 0, TIMING_SIZE);
691 pan_type = PANEL_TYPE_UNKNOWN;
692 break;
693 }
Ujwal Patel41a665a2015-07-17 13:51:30 -0700694
695 dprintf(SPEW, "lm_split[0]=%d lm_split[1]=%d mode=0x%x\n",
696 pinfo->lm_split[0], pinfo->lm_split[1],
697 panelstruct->paneldata->panel_operating_mode);
698
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700699 return pan_type;
700}
701
Ray Zhangf95f5b92015-06-25 15:34:29 +0800702#define DISPLAY_MAX_PANEL_DETECTION 2
703static uint32_t auto_pan_loop = 0;
704
705uint32_t oem_panel_max_auto_detect_panels()
706{
707 return target_panel_auto_detect_enabled() ?
708 DISPLAY_MAX_PANEL_DETECTION : 0;
709}
710
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700711int oem_panel_select(const char *panel_name, struct panel_struct *panelstruct,
712 struct msm_panel_info *pinfo,
713 struct mdss_dsi_phy_ctrl *phy_db)
714{
715 uint32_t hw_id = board_hardware_id();
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700716 uint32_t hw_subtype = board_hardware_subtype();
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700717 int32_t panel_override_id;
feifanz028544e2015-07-28 20:58:57 +0800718 uint32_t target_id, plat_hw_ver_major;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700719
720 if (panel_name) {
721 panel_override_id = panel_name_to_id(supp_panels,
722 ARRAY_SIZE(supp_panels), panel_name);
723
724 if (panel_override_id < 0) {
725 dprintf(CRITICAL, "Not able to search the panel:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530726 panel_name);
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700727 } else if (panel_override_id < UNKNOWN_PANEL) {
728 /* panel override using fastboot oem command */
729 panel_id = panel_override_id;
730
731 dprintf(INFO, "OEM panel override:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530732 panel_name);
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700733 goto panel_init;
734 }
735 }
736
737 switch (hw_id) {
738 case HW_PLATFORM_MTP:
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530739 if (platform_is_msm8956())
740 panel_id = NT35597_WQXGA_DUALDSI_VIDEO_PANEL;
Jayant Shekhar9c0533e2016-01-28 11:17:18 +0530741 else if (platform_is_msmgold())
742 panel_id = TRULY_720P_VIDEO_PANEL;
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530743 else
744 panel_id = TRULY_1080P_VIDEO_PANEL;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700745 break;
746 case HW_PLATFORM_SURF:
Vishnuvardhan Prodduturie116c002015-07-14 17:14:25 +0530747 case HW_PLATFORM_RCM:
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530748 if (platform_is_msm8956())
749 panel_id = NT35597_WQXGA_DUALDSI_VIDEO_PANEL;
Jayant Shekhar9c0533e2016-01-28 11:17:18 +0530750 else if (platform_is_msmgold())
751 panel_id = TRULY_720P_VIDEO_PANEL;
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530752 else
753 panel_id = TRULY_1080P_VIDEO_PANEL;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700754 break;
feifanz174c82c2015-04-15 18:57:07 +0800755 case HW_PLATFORM_QRD:
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700756 if (hw_subtype == HW_PLATFORM_SUBTYPE_POLARIS) {
757 panel_id = BYD_1200P_VIDEO_PANEL;
758 break;
759 }
760
feifanz028544e2015-07-28 20:58:57 +0800761 target_id = board_target_id();
762 plat_hw_ver_major = ((target_id >> 16) & 0xFF);
763
764 /*
765 * 8952 SKUM DVT2 - HX8399A 1080p video panel
766 * 8952 SKUM EVT1/EVT2 - OTM1906C 1080p cmd panel
767 */
768 if (plat_hw_ver_major >= 4)
769 panel_id = HX8399A_1080P_VIDEO_PANEL;
770 else
771 panel_id = OTM1906C_1080P_CMD_PANEL;
Ray Zhangf95f5b92015-06-25 15:34:29 +0800772
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800773 /* QRD 8937 SKU1 uses R69006, and SKU2 uses HX8399A */
774 if (platform_is_msm8937()){
775 if (plat_hw_ver_major > 16)
776 panel_id = HX8394F_720P_VIDEO_PANEL;
777 else
778 panel_id = R69006_1080P_CMD_PANEL;
779 }
780
781 /* QRD EVT1 uses OTM1906C, and EVT2 uses HX8394F */
Ray Zhangf95f5b92015-06-25 15:34:29 +0800782 if (platform_is_msm8956()) {
783 switch (auto_pan_loop) {
784 case 0:
785 panel_id = HX8399A_1080P_VIDEO_PANEL;
786 break;
787 case 1:
788 panel_id = OTM1906C_1080P_CMD_PANEL;
789 break;
790 default:
791 panel_id = UNKNOWN_PANEL;
792 dprintf(CRITICAL, "Unknown panel\n");
793 return PANEL_TYPE_UNKNOWN;
794 }
795 auto_pan_loop++;
Ray Zhang0cddd9f2016-02-17 16:51:29 +0800796 } else if (platform_is_msmgold()) {
797 panel_id = HX8394F_720P_VIDEO_PANEL;
Ray Zhangf95f5b92015-06-25 15:34:29 +0800798 }
799
feifanz174c82c2015-04-15 18:57:07 +0800800 break;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700801 default:
802 dprintf(CRITICAL, "Display not enabled for %d HW type\n",
803 hw_id);
804 return PANEL_TYPE_UNKNOWN;
805 }
806
807panel_init:
808 /*
809 * Update all data structures after 'panel_init' label. Only panel
810 * selection is supposed to happen before that.
811 */
Padmanabhan Komanduru0e19a362015-06-08 13:29:32 +0530812 if (platform_is_msm8956())
813 memcpy(panel_regulator_settings,
814 dcdc_regulator_settings_hpm, REGULATOR_SIZE);
815 else
816 memcpy(panel_regulator_settings,
817 dcdc_regulator_settings_lpm, REGULATOR_SIZE);
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700818 pinfo->pipe_type = MDSS_MDP_PIPE_TYPE_RGB;
819 return init_panel_data(panelstruct, pinfo, phy_db);
820}