blob: 57e069f6c87ea26a1de5d091162f3794d4f01193 [file] [log] [blame]
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -07001/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
2 *
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
41#include "include/panel.h"
42#include "panel_display.h"
43
44/*---------------------------------------------------------------------------*/
45/* GCDB Panel Database */
46/*---------------------------------------------------------------------------*/
47#include "include/panel_truly_1080p_video.h"
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +053048#include "include/panel_truly_1080p_cmd.h"
feifanz174c82c2015-04-15 18:57:07 +080049#include "include/panel_otm1906c_1080p_cmd.h"
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +053050#include "include/panel_sharp_1080p_cmd.h"
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +053051#include "include/panel_nt35597_wqxga_dualdsi_video.h"
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +053052#include "include/panel_nt35597_wqxga_dualdsi_cmd.h"
Ray Zhangf95f5b92015-06-25 15:34:29 +080053#include "include/panel_hx8399a_1080p_video.h"
Sandeep Pandaed082922015-08-03 12:18:25 +053054#include "include/panel_nt35597_wqxga_dsc_video.h"
55#include "include/panel_nt35597_wqxga_dsc_cmd.h"
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -070056
57/*---------------------------------------------------------------------------*/
58/* static panel selection variable */
59/*---------------------------------------------------------------------------*/
60enum {
61 TRULY_1080P_VIDEO_PANEL,
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +053062 TRULY_1080P_CMD_PANEL,
feifanz174c82c2015-04-15 18:57:07 +080063 OTM1906C_1080P_CMD_PANEL,
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +053064 SHARP_1080P_CMD_PANEL,
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +053065 NT35597_WQXGA_DUALDSI_VIDEO_PANEL,
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +053066 NT35597_WQXGA_DUALDSI_CMD_PANEL,
Ray Zhangf95f5b92015-06-25 15:34:29 +080067 HX8399A_1080P_VIDEO_PANEL,
Sandeep Pandaed082922015-08-03 12:18:25 +053068 NT35597_WQXGA_DSC_VIDEO_PANEL,
69 NT35597_WQXGA_DSC_CMD_PANEL,
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -070070 UNKNOWN_PANEL
71};
72
73uint32_t panel_regulator_settings[] = {
74 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
75};
76
77/*
78 * The list of panels that are supported on this target.
79 * Any panel in this list can be selected using fastboot oem command.
80 */
81static struct panel_list supp_panels[] = {
82 {"truly_1080p_video", TRULY_1080P_VIDEO_PANEL},
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +053083 {"truly_1080p_cmd", TRULY_1080P_CMD_PANEL},
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +053084 {"sharp_1080p_cmd", SHARP_1080P_CMD_PANEL},
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +053085 {"nt35597_wqxga_dualdsi_video", NT35597_WQXGA_DUALDSI_VIDEO_PANEL},
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +053086 {"nt35597_wqxga_dualdsi_cmd", NT35597_WQXGA_DUALDSI_CMD_PANEL},
Ray Zhangf95f5b92015-06-25 15:34:29 +080087 {"otm1906c_1080p_cmd", OTM1906C_1080P_CMD_PANEL},
88 {"hx8399a_1080p_video", HX8399A_1080P_VIDEO_PANEL},
Sandeep Pandaed082922015-08-03 12:18:25 +053089 {"nt35597_wqxga_dsc_video", NT35597_WQXGA_DSC_VIDEO_PANEL},
90 {"nt35597_wqxga_dsc_cmd", NT35597_WQXGA_DSC_CMD_PANEL},
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -070091};
92
93static uint32_t panel_id;
94
Sandeep Panda75fddaa2015-07-06 11:38:25 +053095#define TRULY_1080P_PANEL_ON_DELAY 40
Sandeep Pandac797d542015-06-12 14:37:55 +053096
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -070097int oem_panel_rotation()
98{
99 return NO_ERROR;
100}
101
102int oem_panel_on()
103{
104 /*
105 *OEM can keep their panel specific on instructions in this
106 *function
feifanz525046b2015-06-01 20:31:06 +0800107 */
108 if (panel_id == OTM1906C_1080P_CMD_PANEL) {
109 /* needs extra delay to avoid unexpected artifacts */
110 mdelay(OTM1906C_1080P_CMD_PANEL_ON_DELAY);
Sandeep Panda75fddaa2015-07-06 11:38:25 +0530111 } else if (panel_id == TRULY_1080P_CMD_PANEL ||
112 panel_id == TRULY_1080P_VIDEO_PANEL) {
113 mdelay(TRULY_1080P_PANEL_ON_DELAY);
feifanz525046b2015-06-01 20:31:06 +0800114 }
Sandeep Pandac797d542015-06-12 14:37:55 +0530115
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700116 return NO_ERROR;
117}
118
119int oem_panel_off()
120{
121 /* OEM can keep their panel specific off instructions
122 * in this function
123 */
124 return NO_ERROR;
125}
126
127static int init_panel_data(struct panel_struct *panelstruct,
128 struct msm_panel_info *pinfo,
129 struct mdss_dsi_phy_ctrl *phy_db)
130{
131 int pan_type = PANEL_TYPE_DSI;
132
133 switch (panel_id) {
134 case TRULY_1080P_VIDEO_PANEL:
135 panelstruct->paneldata = &truly_1080p_video_panel_data;
136 panelstruct->paneldata->panel_with_enable_gpio = 1;
137 panelstruct->panelres = &truly_1080p_video_panel_res;
138 panelstruct->color = &truly_1080p_video_color;
139 panelstruct->videopanel = &truly_1080p_video_video_panel;
140 panelstruct->commandpanel = &truly_1080p_video_command_panel;
141 panelstruct->state = &truly_1080p_video_state;
142 panelstruct->laneconfig = &truly_1080p_video_lane_config;
143 panelstruct->paneltiminginfo
144 = &truly_1080p_video_timing_info;
145 panelstruct->panelresetseq
146 = &truly_1080p_video_panel_reset_seq;
147 panelstruct->backlightinfo = &truly_1080p_video_backlight;
148 pinfo->mipi.panel_on_cmds
149 = truly_1080p_video_on_command;
150 pinfo->mipi.num_of_panel_on_cmds
151 = TRULY_1080P_VIDEO_ON_COMMAND;
152 pinfo->mipi.panel_off_cmds
153 = truly_1080p_video_off_command;
154 pinfo->mipi.num_of_panel_off_cmds
155 = TRULY_1080P_VIDEO_OFF_COMMAND;
156 memcpy(phy_db->timing,
157 truly_1080p_video_timings, TIMING_SIZE);
158 pinfo->mipi.signature = TRULY_1080P_VIDEO_SIGNATURE;
159 break;
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +0530160 case TRULY_1080P_CMD_PANEL:
161 panelstruct->paneldata = &truly_1080p_cmd_panel_data;
162 panelstruct->paneldata->panel_with_enable_gpio = 1;
163 panelstruct->panelres = &truly_1080p_cmd_panel_res;
164 panelstruct->color = &truly_1080p_cmd_color;
165 panelstruct->videopanel = &truly_1080p_cmd_video_panel;
166 panelstruct->commandpanel = &truly_1080p_cmd_command_panel;
167 panelstruct->state = &truly_1080p_cmd_state;
168 panelstruct->laneconfig = &truly_1080p_cmd_lane_config;
169 panelstruct->paneltiminginfo
170 = &truly_1080p_cmd_timing_info;
171 panelstruct->panelresetseq
172 = &truly_1080p_cmd_panel_reset_seq;
173 panelstruct->backlightinfo = &truly_1080p_cmd_backlight;
174 pinfo->mipi.panel_on_cmds
175 = truly_1080p_cmd_on_command;
176 pinfo->mipi.num_of_panel_on_cmds
177 = TRULY_1080P_CMD_ON_COMMAND;
178 pinfo->mipi.panel_off_cmds
179 = truly_1080p_cmd_off_command;
180 pinfo->mipi.num_of_panel_off_cmds
181 = TRULY_1080P_CMD_OFF_COMMAND;
182 memcpy(phy_db->timing,
183 truly_1080p_cmd_timings, TIMING_SIZE);
184 pinfo->mipi.signature = TRULY_1080P_CMD_SIGNATURE;
185 break;
feifanz174c82c2015-04-15 18:57:07 +0800186 case OTM1906C_1080P_CMD_PANEL:
187 panelstruct->paneldata = &otm1906c_1080p_cmd_panel_data;
188 panelstruct->paneldata->panel_with_enable_gpio = 1;
189 panelstruct->panelres = &otm1906c_1080p_cmd_panel_res;
190 panelstruct->color = &otm1906c_1080p_cmd_color;
191 panelstruct->videopanel = &otm1906c_1080p_cmd_video_panel;
192 panelstruct->commandpanel = &otm1906c_1080p_cmd_command_panel;
193 panelstruct->state = &otm1906c_1080p_cmd_state;
194 panelstruct->laneconfig = &otm1906c_1080p_cmd_lane_config;
195 panelstruct->paneltiminginfo
196 = &otm1906c_1080p_cmd_timing_info;
197 panelstruct->panelresetseq
198 = &otm1906c_1080p_cmd_panel_reset_seq;
199 panelstruct->backlightinfo = &otm1906c_1080p_cmd_backlight;
200 pinfo->mipi.panel_on_cmds
201 = otm1906c_1080p_cmd_on_command;
202 pinfo->mipi.num_of_panel_on_cmds
203 = OTM1906C_1080P_CMD_ON_COMMAND;
204 pinfo->mipi.panel_off_cmds
205 = otm1906c_1080p_cmd_off_command;
206 pinfo->mipi.num_of_panel_off_cmds
207 = OTM1906C_1080P_CMD_OFF_COMMAND;
208 memcpy(phy_db->timing,
209 otm1906c_1080p_cmd_timings, TIMING_SIZE);
210 pinfo->mipi.signature = OTM1906C_1080P_CMD_SIGNATURE;
211 break;
Ray Zhangf95f5b92015-06-25 15:34:29 +0800212 case HX8399A_1080P_VIDEO_PANEL:
213 panelstruct->paneldata = &hx8399a_1080p_video_panel_data;
214 panelstruct->panelres = &hx8399a_1080p_video_panel_res;
215 panelstruct->color = &hx8399a_1080p_video_color;
216 panelstruct->videopanel = &hx8399a_1080p_video_video_panel;
217 panelstruct->commandpanel = &hx8399a_1080p_video_command_panel;
218 panelstruct->state = &hx8399a_1080p_video_state;
219 panelstruct->laneconfig = &hx8399a_1080p_video_lane_config;
220 panelstruct->paneltiminginfo
221 = &hx8399a_1080p_video_timing_info;
222 panelstruct->panelresetseq
223 = &hx8399a_1080p_video_reset_seq;
224 panelstruct->backlightinfo = &hx8399a_1080p_video_backlight;
225 pinfo->mipi.panel_on_cmds
226 = hx8399a_1080p_video_on_command;
227 pinfo->mipi.num_of_panel_on_cmds
228 = HX8399A_1080P_VIDEO_ON_COMMAND;
229 pinfo->mipi.panel_off_cmds
230 = hx8399a_1080p_video_off_command;
231 pinfo->mipi.num_of_panel_off_cmds
232 = HX8399A_1080P_VIDEO_OFF_COMMAND;
233 memcpy(phy_db->timing,
234 hx8399a_1080p_video_timings, TIMING_SIZE);
235 pinfo->mipi.signature = HX8399A_1080P_VIDEO_SIGNATURE;
236 break;
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +0530237 case SHARP_1080P_CMD_PANEL:
238 panelstruct->paneldata = &sharp_1080p_cmd_panel_data;
239 panelstruct->panelres = &sharp_1080p_cmd_panel_res;
240 panelstruct->paneldata->panel_with_enable_gpio = 1;
241 panelstruct->color = &sharp_1080p_cmd_color;
242 panelstruct->videopanel = &sharp_1080p_cmd_video_panel;
243 panelstruct->commandpanel = &sharp_1080p_cmd_command_panel;
244 panelstruct->state = &sharp_1080p_cmd_state;
245 panelstruct->laneconfig = &sharp_1080p_cmd_lane_config;
246 panelstruct->paneltiminginfo
247 = &sharp_1080p_cmd_timing_info;
248 panelstruct->panelresetseq
249 = &sharp_1080p_cmd_panel_reset_seq;
250 panelstruct->backlightinfo = &sharp_1080p_cmd_backlight;
251 pinfo->mipi.panel_on_cmds
252 = sharp_1080p_cmd_on_command;
253 pinfo->mipi.num_of_panel_on_cmds
254 = SHARP_1080P_CMD_ON_COMMAND;
255 pinfo->mipi.panel_off_cmds
256 = sharp_1080p_cmd_off_command;
257 pinfo->mipi.num_of_panel_off_cmds
258 = SHARP_1080P_CMD_OFF_COMMAND;
259 memcpy(phy_db->timing,
260 sharp_1080p_cmd_timings, TIMING_SIZE);
261 break;
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530262 case NT35597_WQXGA_DUALDSI_VIDEO_PANEL:
263 panelstruct->paneldata = &nt35597_wqxga_dualdsi_video_panel_data;
264 panelstruct->paneldata->panel_operating_mode = DST_SPLIT_FLAG |
265 SPLIT_DISPLAY_FLAG | DUAL_DSI_FLAG;
266 panelstruct->paneldata->panel_with_enable_gpio = 0;
267
268 panelstruct->panelres = &nt35597_wqxga_dualdsi_video_panel_res;
269 panelstruct->color = &nt35597_wqxga_dualdsi_video_color;
270 panelstruct->videopanel = &nt35597_wqxga_dualdsi_video_video_panel;
271 panelstruct->commandpanel = &nt35597_wqxga_dualdsi_video_command_panel;
272 panelstruct->state = &nt35597_wqxga_dualdsi_video_state;
273 panelstruct->laneconfig = &nt35597_wqxga_dualdsi_video_lane_config;
274 panelstruct->paneltiminginfo
275 = &nt35597_wqxga_dualdsi_video_timing_info;
276 panelstruct->panelresetseq
277 = &nt35597_wqxga_dualdsi_video_reset_seq;
278 panelstruct->backlightinfo = &nt35597_wqxga_dualdsi_video_backlight;
279 pinfo->labibb = &nt35597_wqxga_dualdsi_video_labibb;
280
281 pinfo->mipi.panel_on_cmds
282 = nt35597_wqxga_dualdsi_video_on_command;
283 pinfo->mipi.num_of_panel_on_cmds
284 = NT35597_WQXGA_DUALDSI_VIDEO_ON_COMMAND;
285 pinfo->mipi.panel_off_cmds
286 = nt35597_wqxga_dualdsi_video_off_command;
287 pinfo->mipi.num_of_panel_off_cmds
288 = NT35597_WQXGA_DUALDSI_VIDEO_OFF_COMMAND;
289 memcpy(phy_db->timing, nt35597_wqxga_dualdsi_video_timings,
290 TIMING_SIZE);
291 pinfo->mipi.tx_eot_append = true;
292 break;
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +0530293 case NT35597_WQXGA_DUALDSI_CMD_PANEL:
294 panelstruct->paneldata = &nt35597_wqxga_dualdsi_cmd_panel_data;
295 panelstruct->paneldata->panel_operating_mode = DST_SPLIT_FLAG |
296 SPLIT_DISPLAY_FLAG | DUAL_DSI_FLAG;
297 panelstruct->paneldata->panel_with_enable_gpio = 0;
298
299 panelstruct->panelres = &nt35597_wqxga_dualdsi_cmd_panel_res;
300 panelstruct->color = &nt35597_wqxga_dualdsi_cmd_color;
301 panelstruct->videopanel = &nt35597_wqxga_dualdsi_cmd_video_panel;
302 panelstruct->commandpanel = &nt35597_wqxga_dualdsi_cmd_command_panel;
303 panelstruct->state = &nt35597_wqxga_dualdsi_cmd_state;
304 panelstruct->laneconfig = &nt35597_wqxga_dualdsi_cmd_lane_config;
305 panelstruct->paneltiminginfo
306 = &nt35597_wqxga_dualdsi_cmd_timing_info;
Padmanabhan Komanduru58fc57e2015-07-07 21:36:14 +0530307 /* Clkout timings are different for this panel on 8956 */
308 panelstruct->paneltiminginfo->tclk_post = 0x2b;
309 panelstruct->paneltiminginfo->tclk_pre = 0x28;
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +0530310 panelstruct->panelresetseq
311 = &nt35597_wqxga_dualdsi_cmd_reset_seq;
312 panelstruct->backlightinfo = &nt35597_wqxga_dualdsi_cmd_backlight;
313
314 pinfo->labibb = &nt35597_wqxga_dualdsi_cmd_labibb;
315
316 pinfo->mipi.panel_on_cmds
317 = nt35597_wqxga_dualdsi_cmd_on_command;
318 pinfo->mipi.num_of_panel_on_cmds
319 = NT35597_WQXGA_DUALDSI_CMD_ON_COMMAND;
320 pinfo->mipi.panel_off_cmds
321 = nt35597_wqxga_dualdsi_cmd_off_command;
322 pinfo->mipi.num_of_panel_off_cmds
323 = NT35597_WQXGA_DUALDSI_CMD_OFF_COMMAND;
324 memcpy(phy_db->timing, nt35597_wqxga_dualdsi_cmd_timings,
325 TIMING_SIZE);
326 pinfo->mipi.tx_eot_append = true;
327 break;
Sandeep Pandaed082922015-08-03 12:18:25 +0530328 case NT35597_WQXGA_DSC_VIDEO_PANEL:
329 panelstruct->paneldata = &nt35597_wqxga_dsc_video_panel_data;
330 panelstruct->paneldata->panel_with_enable_gpio = 0;
331 panelstruct->paneldata->panel_operating_mode = USE_DSI1_PLL_FLAG;
332 panelstruct->panelres = &nt35597_wqxga_dsc_video_panel_res;
333 panelstruct->color = &nt35597_wqxga_dsc_video_color;
334 panelstruct->videopanel = &nt35597_wqxga_dsc_video_video_panel;
335 panelstruct->commandpanel = &nt35597_wqxga_dsc_video_command_panel;
336 panelstruct->state = &nt35597_wqxga_dsc_video_state;
337 panelstruct->laneconfig = &nt35597_wqxga_dsc_video_lane_config;
338 panelstruct->paneltiminginfo
339 = &nt35597_wqxga_dsc_video_timing_info;
340 panelstruct->panelresetseq
341 = &nt35597_wqxga_dsc_video_reset_seq;
342 panelstruct->backlightinfo = &nt35597_wqxga_dsc_video_backlight;
343 pinfo->labibb = &nt35597_wqxga_dsc_video_labibb;
344
345 pinfo->mipi.panel_on_cmds
346 = nt35597_wqxga_dsc_video_on_command;
347 pinfo->mipi.num_of_panel_on_cmds
348 = NT35597_WQXGA_DSC_VIDEO_ON_COMMAND;
349 pinfo->mipi.panel_off_cmds
350 = nt35597_wqxga_dsc_video_off_command;
351 pinfo->mipi.num_of_panel_off_cmds
352 = NT35597_WQXGA_DSC_VIDEO_OFF_COMMAND;
353 memcpy(phy_db->timing, nt35597_wqxga_dsc_video_timings,
354 TIMING_SIZE);
355 /* Clkout timings are different for this panel on 8956 */
356 panelstruct->paneltiminginfo->tclk_post = 0x04;
357 panelstruct->paneltiminginfo->tclk_pre = 0x20;
358 pinfo->mipi.tx_eot_append = true;
359 pinfo->compression_mode = COMPRESSION_DSC;
360 memcpy(&panelstruct->dsc_paras, &nt35597_wqxga_dsc_video_paras,
361 sizeof(struct dsc_parameters));
362 pinfo->dsc.parameter_calc = mdss_dsc_parameters_calc;
363 pinfo->dsc.dsc2buf = mdss_dsc_to_buf;
364 pinfo->dsc.dsi_dsc_config = mdss_dsc_dsi_config;
365 pinfo->dsc.mdp_dsc_config = mdss_dsc_mdp_config;
366 break;
367 case NT35597_WQXGA_DSC_CMD_PANEL:
368 panelstruct->paneldata = &nt35597_wqxga_dsc_cmd_panel_data;
369 panelstruct->paneldata->panel_with_enable_gpio = 0;
370 panelstruct->paneldata->panel_operating_mode = USE_DSI1_PLL_FLAG;
371 panelstruct->panelres = &nt35597_wqxga_dsc_cmd_panel_res;
372 panelstruct->color = &nt35597_wqxga_dsc_cmd_color;
373 panelstruct->videopanel = &nt35597_wqxga_dsc_cmd_video_panel;
374 panelstruct->commandpanel = &nt35597_wqxga_dsc_cmd_command_panel;
375 panelstruct->state = &nt35597_wqxga_dsc_cmd_state;
376 panelstruct->laneconfig = &nt35597_wqxga_dsc_cmd_lane_config;
377 panelstruct->paneltiminginfo
378 = &nt35597_wqxga_dsc_cmd_timing_info;
379 panelstruct->panelresetseq
380 = &nt35597_wqxga_dsc_cmd_reset_seq;
381 panelstruct->backlightinfo = &nt35597_wqxga_dsc_cmd_backlight;
382 pinfo->labibb = &nt35597_wqxga_dsc_cmd_labibb;
383
384 pinfo->mipi.panel_on_cmds
385 = nt35597_wqxga_dsc_cmd_on_command;
386 pinfo->mipi.num_of_panel_on_cmds
387 = NT35597_WQXGA_DSC_CMD_ON_COMMAND;
388 pinfo->mipi.panel_off_cmds
389 = nt35597_wqxga_dsc_cmd_off_command;
390 pinfo->mipi.num_of_panel_off_cmds
391 = NT35597_WQXGA_DSC_CMD_OFF_COMMAND;
392 memcpy(phy_db->timing, nt35597_wqxga_dsc_cmd_timings,
393 TIMING_SIZE);
394 /* Clkout timings are different for this panel on 8956 */
395 panelstruct->paneltiminginfo->tclk_post = 0x04;
396 panelstruct->paneltiminginfo->tclk_pre = 0x20;
397 pinfo->mipi.tx_eot_append = true;
398 pinfo->compression_mode = COMPRESSION_DSC;
399 memcpy(&panelstruct->dsc_paras, &nt35597_wqxga_dsc_cmd_paras,
400 sizeof(struct dsc_parameters));
401 pinfo->dsc.parameter_calc = mdss_dsc_parameters_calc;
402 pinfo->dsc.dsc2buf = mdss_dsc_to_buf;
403 pinfo->dsc.dsi_dsc_config = mdss_dsc_dsi_config;
404 pinfo->dsc.mdp_dsc_config = mdss_dsc_mdp_config;
405 break;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700406 case UNKNOWN_PANEL:
407 default:
408 memset(panelstruct, 0, sizeof(struct panel_struct));
409 memset(pinfo->mipi.panel_on_cmds, 0,
410 sizeof(struct mipi_dsi_cmd));
411 pinfo->mipi.num_of_panel_on_cmds = 0;
412 memset(pinfo->mipi.panel_off_cmds, 0,
413 sizeof(struct mipi_dsi_cmd));
414 pinfo->mipi.num_of_panel_off_cmds = 0;
415 memset(phy_db->timing, 0, TIMING_SIZE);
416 pan_type = PANEL_TYPE_UNKNOWN;
417 break;
418 }
419 return pan_type;
420}
421
Ray Zhangf95f5b92015-06-25 15:34:29 +0800422#define DISPLAY_MAX_PANEL_DETECTION 2
423static uint32_t auto_pan_loop = 0;
424
425uint32_t oem_panel_max_auto_detect_panels()
426{
427 return target_panel_auto_detect_enabled() ?
428 DISPLAY_MAX_PANEL_DETECTION : 0;
429}
430
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700431int oem_panel_select(const char *panel_name, struct panel_struct *panelstruct,
432 struct msm_panel_info *pinfo,
433 struct mdss_dsi_phy_ctrl *phy_db)
434{
435 uint32_t hw_id = board_hardware_id();
436 int32_t panel_override_id;
437
438 if (panel_name) {
439 panel_override_id = panel_name_to_id(supp_panels,
440 ARRAY_SIZE(supp_panels), panel_name);
441
442 if (panel_override_id < 0) {
443 dprintf(CRITICAL, "Not able to search the panel:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530444 panel_name);
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700445 } else if (panel_override_id < UNKNOWN_PANEL) {
446 /* panel override using fastboot oem command */
447 panel_id = panel_override_id;
448
449 dprintf(INFO, "OEM panel override:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530450 panel_name);
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700451 goto panel_init;
452 }
453 }
454
455 switch (hw_id) {
456 case HW_PLATFORM_MTP:
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530457 if (platform_is_msm8956())
458 panel_id = NT35597_WQXGA_DUALDSI_VIDEO_PANEL;
459 else
460 panel_id = TRULY_1080P_VIDEO_PANEL;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700461 break;
462 case HW_PLATFORM_SURF:
Vishnuvardhan Prodduturie116c002015-07-14 17:14:25 +0530463 case HW_PLATFORM_RCM:
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530464 if (platform_is_msm8956())
465 panel_id = NT35597_WQXGA_DUALDSI_VIDEO_PANEL;
466 else
467 panel_id = TRULY_1080P_VIDEO_PANEL;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700468 break;
feifanz174c82c2015-04-15 18:57:07 +0800469 case HW_PLATFORM_QRD:
470 panel_id = OTM1906C_1080P_CMD_PANEL;
Ray Zhangf95f5b92015-06-25 15:34:29 +0800471
472 /* QRD EVT1 uses OTM1906C, and EVT2 uses HX8399A */
473 if (platform_is_msm8956()) {
474 switch (auto_pan_loop) {
475 case 0:
476 panel_id = HX8399A_1080P_VIDEO_PANEL;
477 break;
478 case 1:
479 panel_id = OTM1906C_1080P_CMD_PANEL;
480 break;
481 default:
482 panel_id = UNKNOWN_PANEL;
483 dprintf(CRITICAL, "Unknown panel\n");
484 return PANEL_TYPE_UNKNOWN;
485 }
486 auto_pan_loop++;
487 }
488
feifanz174c82c2015-04-15 18:57:07 +0800489 break;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700490 default:
491 dprintf(CRITICAL, "Display not enabled for %d HW type\n",
492 hw_id);
493 return PANEL_TYPE_UNKNOWN;
494 }
495
496panel_init:
497 /*
498 * Update all data structures after 'panel_init' label. Only panel
499 * selection is supposed to happen before that.
500 */
Padmanabhan Komanduru0e19a362015-06-08 13:29:32 +0530501 if (platform_is_msm8956())
502 memcpy(panel_regulator_settings,
503 dcdc_regulator_settings_hpm, REGULATOR_SIZE);
504 else
505 memcpy(panel_regulator_settings,
506 dcdc_regulator_settings_lpm, REGULATOR_SIZE);
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700507 pinfo->pipe_type = MDSS_MDP_PIPE_TYPE_RGB;
508 return init_panel_data(panelstruct, pinfo, phy_db);
509}