blob: e60327e2a4e3e90609f9bf20b31f537ba57d62f1 [file] [log] [blame]
Lei Chene19e0aa2018-05-08 20:01:50 +08001/* Copyright (c) 2016,2018-2019, The Linux Foundation. All rights reserved.
Padmanabhan Komanduru0104a892016-01-22 16:58:10 +05302 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are
5 * 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
9 * copyright notice, this list of conditions and the following
10 * disclaimer in the documentation and/or other materials provided
11 * with the 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 "AS IS" AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
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>
36#include <qtimer.h>
37#include <mipi_dsi.h>
38#include <mdp5.h>
39#include <target/display.h>
40
41#include "gcdb_display.h"
42#include "include/panel.h"
43#include "panel_display.h"
44
45/*---------------------------------------------------------------------------*/
46/* GCDB Panel Database */
47/*---------------------------------------------------------------------------*/
48#include "include/panel_truly_1080p_video.h"
49#include "include/panel_truly_1080p_cmd.h"
Mao Flynn5ecc8c92016-01-29 14:06:10 +080050#include "include/panel_r69006_1080p_video.h"
51#include "include/panel_r69006_1080p_cmd.h"
Padmanabhan Komanduru52567fb2016-02-03 16:03:13 +053052#include "include/panel_truly_wuxga_video.h"
Lei Chen84755442017-11-28 18:28:15 +080053#include "include/panel_hx8399c_fhd_pluse_video.h"
Ravikanth Tuniki1af05fd2018-06-29 18:07:59 +053054#include "include/panel_hx8399c_hd_plus_video.h"
jialongjhanb2dda0b2020-04-21 20:20:51 +080055/*[Arima_8901][Jialong] lcm driver porting begin*/
56#include "include/panel_truly_hx83112b_1080p_video.h"
57#include "include/panel_djn_hx83112b_1080p_cmd.h"
58/*[Arima_8901][Jialong] lcm driver porting end*/
Padmanabhan Komanduru0104a892016-01-22 16:58:10 +053059
60/*---------------------------------------------------------------------------*/
61/* static panel selection variable */
62/*---------------------------------------------------------------------------*/
63enum {
64 TRULY_1080P_VIDEO_PANEL,
65 TRULY_1080P_CMD_PANEL,
Mao Flynn5ecc8c92016-01-29 14:06:10 +080066 R69006_1080P_VIDEO_PANEL,
67 R69006_1080P_CMD_PANEL,
Padmanabhan Komanduru52567fb2016-02-03 16:03:13 +053068 TRULY_WUXGA_VIDEO_PANEL,
Lei Chen84755442017-11-28 18:28:15 +080069 HX8399C_FHD_PLUSE_VIDEO_PANEL,
Ravikanth Tuniki1af05fd2018-06-29 18:07:59 +053070 HX8399C_HD_PLUS_VIDEO_PANEL,
jialongjhanb2dda0b2020-04-21 20:20:51 +080071 /*[Arima_8901][Jialong] lcm driver porting begin*/
72 TRULY_HX83112B_1080P_VIDEO_PANEL,
73 DJN_HX83112B_1080P_CMD_PANEL,
74 /*[Arima_8901][Jialong] lcm driver porting end*/
Padmanabhan Komanduru0104a892016-01-22 16:58:10 +053075 UNKNOWN_PANEL
76};
77
78/*
79 * The list of panels that are supported on this target.
80 * Any panel in this list can be selected using fastboot oem command.
81 */
82static struct panel_list supp_panels[] = {
83 {"truly_1080p_video", TRULY_1080P_VIDEO_PANEL},
84 {"truly_1080p_cmd", TRULY_1080P_CMD_PANEL},
Mao Flynn5ecc8c92016-01-29 14:06:10 +080085 {"r69006_1080p_video", R69006_1080P_VIDEO_PANEL},
86 {"r69006_1080p_cmd", R69006_1080P_CMD_PANEL},
Padmanabhan Komanduru52567fb2016-02-03 16:03:13 +053087 {"truly_wuxga_video", TRULY_WUXGA_VIDEO_PANEL},
Lei Chen84755442017-11-28 18:28:15 +080088 {"hx8399c_fhd_pluse_video", HX8399C_FHD_PLUSE_VIDEO_PANEL},
Ravikanth Tuniki1af05fd2018-06-29 18:07:59 +053089 {"hx8399c_hd_plus_video", HX8399C_HD_PLUS_VIDEO_PANEL},
jialongjhanb2dda0b2020-04-21 20:20:51 +080090 /*[Arima_8901][Jialong] lcm driver porting begin*/
91 {"truly_hx83112b_1080p_video", TRULY_HX83112B_1080P_VIDEO_PANEL},
92 {"djn_hx83112b_1080p_cmd", DJN_HX83112B_1080P_CMD_PANEL},
93 /*[Arima_8901][Jialong] lcm driver porting end*/
94
Padmanabhan Komanduru0104a892016-01-22 16:58:10 +053095};
96
97static uint32_t panel_id;
98
99int oem_panel_rotation()
100{
101 return NO_ERROR;
102}
103
104#define TRULY_1080P_PANEL_ON_DELAY 40
105int oem_panel_on()
106{
107 if (panel_id == TRULY_1080P_CMD_PANEL ||
108 panel_id == TRULY_1080P_VIDEO_PANEL)
109 mdelay(TRULY_1080P_PANEL_ON_DELAY);
Mao Flynn5ecc8c92016-01-29 14:06:10 +0800110 else if (panel_id == R69006_1080P_CMD_PANEL) {
111 mdelay(R69006_1080P_CMD_PANEL_ON_DELAY);
112 }
jialongjhanb2dda0b2020-04-21 20:20:51 +0800113
114 /*[Arima_8901][Jialong] lcm driver porting begin*/
115 //[Arima][8901][JialongJhan] Command mode fix fuzzy screen when booting 20190516 Start
116 else if( panel_id == TRULY_HX83112B_1080P_VIDEO_PANEL || panel_id==DJN_HX83112B_1080P_CMD_PANEL)
117 {
118 mdelay(40);
119 }
120 //[Arima][8901][JialongJhan] Command mode fix fuzzy screen when booting 20190516 End
121 /*[Arima_8901][Jialong] lcm driver porting end*/
122
Padmanabhan Komanduru0104a892016-01-22 16:58:10 +0530123 return NO_ERROR;
124}
125
126int oem_panel_off()
127{
128 /* OEM can keep their panel specific off instructions
129 * in this function
130 */
131 return NO_ERROR;
132}
133
134static int init_panel_data(struct panel_struct *panelstruct,
135 struct msm_panel_info *pinfo,
136 struct mdss_dsi_phy_ctrl *phy_db)
137{
138 int pan_type = PANEL_TYPE_DSI;
139
140 switch (panel_id) {
141 case TRULY_1080P_VIDEO_PANEL:
142 panelstruct->paneldata = &truly_1080p_video_panel_data;
Padmanabhan Komanduruc2a81e92016-02-03 16:00:42 +0530143 panelstruct->paneldata->panel_with_enable_gpio = 0;
Padmanabhan Komanduru0104a892016-01-22 16:58:10 +0530144 panelstruct->panelres = &truly_1080p_video_panel_res;
145 panelstruct->color = &truly_1080p_video_color;
146 panelstruct->videopanel = &truly_1080p_video_video_panel;
147 panelstruct->commandpanel = &truly_1080p_video_command_panel;
148 panelstruct->state = &truly_1080p_video_state;
149 panelstruct->laneconfig = &truly_1080p_video_lane_config;
150 panelstruct->paneltiminginfo
151 = &truly_1080p_video_timing_info;
152 panelstruct->panelresetseq
153 = &truly_1080p_video_panel_reset_seq;
154 panelstruct->backlightinfo = &truly_1080p_video_backlight;
155 pinfo->mipi.panel_on_cmds
156 = truly_1080p_video_on_command;
157 pinfo->mipi.num_of_panel_on_cmds
158 = TRULY_1080P_VIDEO_ON_COMMAND;
159 pinfo->mipi.panel_off_cmds
160 = truly_1080p_video_off_command;
161 pinfo->mipi.num_of_panel_off_cmds
162 = TRULY_1080P_VIDEO_OFF_COMMAND;
163 memcpy(phy_db->timing,
164 truly_1080p_14nm_video_timings,
165 MAX_TIMING_CONFIG * sizeof(uint32_t));
Padmanabhan Komanduru6f0b6322016-01-22 16:37:53 +0530166 pinfo->dfps.panel_dfps = truly_1080p_video_dfps;
Padmanabhan Komanduru0104a892016-01-22 16:58:10 +0530167 pinfo->mipi.signature = TRULY_1080P_VIDEO_SIGNATURE;
168 break;
169 case TRULY_1080P_CMD_PANEL:
170 panelstruct->paneldata = &truly_1080p_cmd_panel_data;
Padmanabhan Komanduruc2a81e92016-02-03 16:00:42 +0530171 panelstruct->paneldata->panel_with_enable_gpio = 0;
Padmanabhan Komanduru0104a892016-01-22 16:58:10 +0530172 panelstruct->panelres = &truly_1080p_cmd_panel_res;
173 panelstruct->color = &truly_1080p_cmd_color;
174 panelstruct->videopanel = &truly_1080p_cmd_video_panel;
175 panelstruct->commandpanel = &truly_1080p_cmd_command_panel;
176 panelstruct->state = &truly_1080p_cmd_state;
177 panelstruct->laneconfig = &truly_1080p_cmd_lane_config;
178 panelstruct->paneltiminginfo
179 = &truly_1080p_cmd_timing_info;
180 panelstruct->panelresetseq
181 = &truly_1080p_cmd_panel_reset_seq;
182 panelstruct->backlightinfo = &truly_1080p_cmd_backlight;
183 pinfo->mipi.panel_on_cmds
184 = truly_1080p_cmd_on_command;
185 pinfo->mipi.num_of_panel_on_cmds
186 = TRULY_1080P_CMD_ON_COMMAND;
187 pinfo->mipi.panel_off_cmds
188 = truly_1080p_cmd_off_command;
189 pinfo->mipi.num_of_panel_off_cmds
190 = TRULY_1080P_CMD_OFF_COMMAND;
191 memcpy(phy_db->timing,
192 truly_1080p_14nm_cmd_timings,
193 MAX_TIMING_CONFIG * sizeof(uint32_t));
194 pinfo->mipi.signature = TRULY_1080P_CMD_SIGNATURE;
195 break;
Mao Flynn5ecc8c92016-01-29 14:06:10 +0800196 case R69006_1080P_VIDEO_PANEL:
197 panelstruct->paneldata = &r69006_1080p_video_panel_data;
198 panelstruct->panelres = &r69006_1080p_video_panel_res;
199 panelstruct->color = &r69006_1080p_video_color;
200 panelstruct->videopanel = &r69006_1080p_video_video_panel;
201 panelstruct->commandpanel = &r69006_1080p_video_command_panel;
202 panelstruct->state = &r69006_1080p_video_state;
203 panelstruct->laneconfig = &r69006_1080p_video_lane_config;
204 panelstruct->paneltiminginfo
205 = &r69006_1080p_video_timing_info;
206 panelstruct->panelresetseq
207 = &r69006_1080p_video_reset_seq;
208 panelstruct->backlightinfo = &r69006_1080p_video_backlight;
209 pinfo->labibb = &r69006_1080p_video_labibb;
210 pinfo->mipi.panel_on_cmds
211 = r69006_1080p_video_on_command;
212 pinfo->mipi.num_of_panel_on_cmds
213 = R69006_1080P_VIDEO_ON_COMMAND;
214 pinfo->mipi.panel_off_cmds
215 = r69006_1080p_video_off_command;
216 pinfo->mipi.num_of_panel_off_cmds
217 = R69006_1080P_VIDEO_OFF_COMMAND;
218 memcpy(phy_db->timing,
219 r69006_1080p_14nm_video_timings,
220 MAX_TIMING_CONFIG * sizeof(uint32_t));
221 pinfo->mipi.signature = R69006_1080P_VIDEO_SIGNATURE;
222 break;
223 case R69006_1080P_CMD_PANEL:
224 panelstruct->paneldata = &r69006_1080p_cmd_panel_data;
225 panelstruct->panelres = &r69006_1080p_cmd_panel_res;
226 panelstruct->color = &r69006_1080p_cmd_color;
227 panelstruct->videopanel = &r69006_1080p_cmd_video_panel;
228 panelstruct->commandpanel = &r69006_1080p_cmd_command_panel;
229 panelstruct->state = &r69006_1080p_cmd_state;
230 panelstruct->laneconfig = &r69006_1080p_cmd_lane_config;
231 panelstruct->paneltiminginfo
232 = &r69006_1080p_cmd_timing_info;
233 panelstruct->panelresetseq
234 = &r69006_1080p_cmd_reset_seq;
235 panelstruct->backlightinfo = &r69006_1080p_cmd_backlight;
236 pinfo->labibb = &r69006_1080p_cmd_labibb;
237 pinfo->mipi.panel_on_cmds
238 = r69006_1080p_cmd_on_command;
239 pinfo->mipi.num_of_panel_on_cmds
240 = R69006_1080P_CMD_ON_COMMAND;
241 pinfo->mipi.panel_off_cmds
242 = r69006_1080p_cmd_off_command;
243 pinfo->mipi.num_of_panel_off_cmds
244 = R69006_1080P_CMD_OFF_COMMAND;
245 memcpy(phy_db->timing,
246 r69006_1080p_14nm_cmd_timings,
247 MAX_TIMING_CONFIG * sizeof(uint32_t));
248 pinfo->mipi.signature = R69006_1080P_CMD_SIGNATURE;
249 pinfo->mipi.tx_eot_append = true;
250 pinfo->mipi.rx_eot_ignore = true;
251 break;
Padmanabhan Komanduru52567fb2016-02-03 16:03:13 +0530252 case TRULY_WUXGA_VIDEO_PANEL:
253 panelstruct->paneldata = &truly_wuxga_video_panel_data;
254 panelstruct->paneldata->panel_with_enable_gpio = 1;
255 panelstruct->panelres = &truly_wuxga_video_panel_res;
256 panelstruct->color = &truly_wuxga_video_color;
257 panelstruct->videopanel = &truly_wuxga_video_video_panel;
258 panelstruct->commandpanel = &truly_wuxga_video_command_panel;
259 panelstruct->state = &truly_wuxga_video_state;
260 panelstruct->laneconfig = &truly_wuxga_video_lane_config;
261 panelstruct->paneltiminginfo
262 = &truly_wuxga_video_timing_info;
263 panelstruct->panelresetseq
264 = &truly_wuxga_video_panel_reset_seq;
265 panelstruct->backlightinfo = &truly_wuxga_video_backlight;
266 pinfo->mipi.panel_on_cmds
267 = truly_wuxga_video_on_command;
268 pinfo->mipi.num_of_panel_on_cmds
269 = TRULY_WUXGA_VIDEO_ON_COMMAND;
270 pinfo->mipi.panel_off_cmds
271 = truly_wuxga_video_off_command;
272 pinfo->mipi.num_of_panel_off_cmds
273 = TRULY_WUXGA_VIDEO_OFF_COMMAND;
274 memcpy(phy_db->timing,
275 truly_wuxga_14nm_video_timings, MAX_TIMING_CONFIG * sizeof(uint32_t));
Vishnuvardhan Prodduturi154d9452016-02-22 16:13:49 +0530276 pinfo->dfps.panel_dfps = truly_wuxga_video_dfps;
Padmanabhan Komanduru52567fb2016-02-03 16:03:13 +0530277 pinfo->mipi.signature = TRULY_WUXGA_VIDEO_SIGNATURE;
278 break;
Lei Chen84755442017-11-28 18:28:15 +0800279 case HX8399C_FHD_PLUSE_VIDEO_PANEL:
280 panelstruct->paneldata = &hx8399c_fhd_pluse_video_panel_data;
281 panelstruct->panelres = &hx8399c_fhd_pluse_video_panel_res;
Lei Chen31ec6f82018-06-25 09:47:56 +0800282 panelstruct->panelres->hfront_porch = 52;
283 panelstruct->panelres->hback_porch = 48;
284 panelstruct->panelres->hpulse_width = 8;
285 panelstruct->panelres->vfront_porch = 8;
286 panelstruct->panelres->vback_porch = 8;
287 panelstruct->panelres->vpulse_width = 4;
Lei Chen84755442017-11-28 18:28:15 +0800288 panelstruct->color = &hx8399c_fhd_pluse_video_color;
289 panelstruct->videopanel =
290 &hx8399c_fhd_pluse_video_video_panel;
291 panelstruct->commandpanel =
292 &hx8399c_fhd_pluse_video_command_panel;
293 panelstruct->state = &hx8399c_fhd_pluse_video_state;
294 panelstruct->laneconfig =
295 &hx8399c_fhd_pluse_video_lane_config;
296 panelstruct->paneltiminginfo
297 = &hx8399c_fhd_pluse_video_timing_info;
298 panelstruct->panelresetseq
299 = &hx8399c_fhd_pluse_video_panel_reset_seq;
300 panelstruct->backlightinfo = &hx8399c_fhd_pluse_video_backlight;
301 pinfo->labibb = &hx8399c_fhd_pluse_video_labibb;
302 pinfo->mipi.panel_on_cmds
303 = hx8399c_fhd_pluse_video_on_command;
304 pinfo->mipi.num_of_panel_on_cmds
305 = HX8399C_FHD_PLUSE_VIDEO_ON_COMMAND;
306 pinfo->mipi.panel_off_cmds
307 = hx8399c_fhd_pluse_video_off_command;
308 pinfo->mipi.num_of_panel_off_cmds
309 = HX8399C_FHD_PLUSE_VIDEO_OFF_COMMAND;
310 memcpy(phy_db->timing,
311 hx8399c_fhd_pluse_14nm_video_timings, MAX_TIMING_CONFIG * sizeof(uint32_t));
312 pinfo->mipi.signature = HX8399C_FHD_PLUSE_VIDEO_SIGNATURE;
313 break;
Ravikanth Tuniki1af05fd2018-06-29 18:07:59 +0530314 case HX8399C_HD_PLUS_VIDEO_PANEL:
315 panelstruct->paneldata = &hx8399c_hd_plus_video_panel_data;
316 panelstruct->panelres = &hx8399c_hd_plus_video_panel_res;
317 panelstruct->color = &hx8399c_hd_plus_video_color;
318 panelstruct->videopanel =
319 &hx8399c_hd_plus_video_video_panel;
320 panelstruct->commandpanel =
321 &hx8399c_hd_plus_video_command_panel;
322 panelstruct->state = &hx8399c_hd_plus_video_state;
323 panelstruct->laneconfig =
324 &hx8399c_hd_plus_video_lane_config;
325 panelstruct->paneltiminginfo
326 = &hx8399c_hd_plus_video_timing_info;
327 panelstruct->panelresetseq
328 = &hx8399c_hd_plus_video_panel_reset_seq;
329 panelstruct->backlightinfo = &hx8399c_hd_plus_video_backlight;
330 pinfo->labibb = &hx8399c_hd_plus_video_labibb;
331 pinfo->mipi.panel_on_cmds
332 = hx8399c_hd_plus_video_on_command;
333 pinfo->mipi.num_of_panel_on_cmds
334 = HX8399C_HD_PLUS_VIDEO_ON_COMMAND;
335 pinfo->mipi.panel_off_cmds
336 = hx8399c_hd_plus_video_off_command;
337 pinfo->mipi.num_of_panel_off_cmds
338 = HX8399C_HD_PLUS_VIDEO_OFF_COMMAND;
339 memcpy(phy_db->timing,
340 hx8399c_hd_plus_14nm_video_timings, MAX_TIMING_CONFIG * sizeof(uint32_t));
341 pinfo->mipi.signature = HX8399C_HD_PLUS_VIDEO_SIGNATURE;
342 break;
jialongjhanb2dda0b2020-04-21 20:20:51 +0800343
344 /*[Arima_8901][Jialong] lcm driver porting begin*/
345 case TRULY_HX83112B_1080P_VIDEO_PANEL:
346 panelstruct->paneldata = &truly_hx83112b_1080p_video_panel_data;
347 panelstruct->paneldata->panel_with_enable_gpio = 0;
348 panelstruct->panelres = &truly_hx83112b_1080p_video_panel_res;
349 panelstruct->color = &truly_hx83112b_1080p_video_color;
350 panelstruct->videopanel = &truly_hx83112b_1080p_video_video_panel;
351 panelstruct->commandpanel = &truly_hx83112b_1080p_video_command_panel;
352 panelstruct->state = &truly_hx83112b_1080p_video_state;
353 panelstruct->laneconfig = &truly_hx83112b_1080p_video_lane_config;
354 panelstruct->paneltiminginfo = &truly_hx83112b_1080p_video_timing_info;
355 panelstruct->panelresetseq = &truly_hx83112b_1080p_video_reset_seq;
356 panelstruct->backlightinfo = &truly_hx83112b_1080p_video_backlight;
357 //pinfo->labibb = &truly_hx83112b_1080p_video_labibb;
358 pinfo->mipi.panel_on_cmds = truly_hx83112b_1080p_video_on_command;
359 pinfo->mipi.num_of_panel_on_cmds = TRULY_HX83112B_1080P_VIDEO_ON_COMMAND;
360 pinfo->mipi.panel_off_cmds = truly_hx83112b_1080p_video_off_command;
361 pinfo->mipi.num_of_panel_off_cmds = TRULY_HX83112B_1080P_VIDEO_OFF_COMMAND;
362 //carful timing...
363 memcpy(phy_db->timing,
364 truly_hx83112b_1080p_14nm_video_timings, MAX_TIMING_CONFIG * sizeof(uint32_t));
365 //pinfo->mipi.signature = TRULY_HX83112B_1080P_VIDEO_SIGNATURE;
366 break;
367
368
369 case DJN_HX83112B_1080P_CMD_PANEL:
370 panelstruct->paneldata = &djn_hx83112b_1080p_cmd_panel_data;
371 panelstruct->paneldata->panel_with_enable_gpio = 0;
372 panelstruct->panelres = &djn_hx83112b_1080p_cmd_panel_res;
373 panelstruct->color = &djn_hx83112b_1080p_cmd_color;
374 panelstruct->videopanel = &djn_hx83112b_1080p_cmd_video_panel;
375 panelstruct->commandpanel = &djn_hx83112b_1080p_cmd_command_panel;
376 panelstruct->state = &djn_hx83112b_1080p_cmd_state;
377 panelstruct->laneconfig = &djn_hx83112b_1080p_cmd_lane_config;
378 panelstruct->paneltiminginfo = &djn_hx83112b_1080p_cmd_timing_info;
379 panelstruct->panelresetseq = &djn_hx83112b_1080p_cmd_reset_seq;
380 panelstruct->backlightinfo = &djn_hx83112b_1080p_cmd_backlight;
381 //pinfo->labibb = &djn_hx83112b_1080p_cmd_labibb;
382 pinfo->mipi.panel_on_cmds = djn_hx83112b_1080p_cmd_on_command;
383 pinfo->mipi.num_of_panel_on_cmds = DJN_HX83112B_1080P_CMD_ON_COMMAND;
384 pinfo->mipi.panel_off_cmds = djn_hx83112b_1080p_cmd_off_command;
385 pinfo->mipi.num_of_panel_off_cmds = DJN_HX83112B_1080P_CMD_OFF_COMMAND;
386 //carful timing...
387 memcpy(phy_db->timing,
388 djn_hx83112b_1080p_14nm_cmd_timings, MAX_TIMING_CONFIG * sizeof(uint32_t));
389 pinfo->mipi.signature = DJN_HX83112B_1080P_CMD_SIGNATURE;
390
391 break;
392 /*[Arima_8901][Jialong] lcm driver porting end*/
393
Padmanabhan Komanduru0104a892016-01-22 16:58:10 +0530394 case UNKNOWN_PANEL:
395 default:
396 memset(panelstruct, 0, sizeof(struct panel_struct));
397 memset(pinfo->mipi.panel_on_cmds, 0,
398 sizeof(struct mipi_dsi_cmd));
399 pinfo->mipi.num_of_panel_on_cmds = 0;
400 memset(pinfo->mipi.panel_off_cmds, 0,
401 sizeof(struct mipi_dsi_cmd));
402 pinfo->mipi.num_of_panel_off_cmds = 0;
403 memset(phy_db->timing, 0, TIMING_SIZE);
404 pan_type = PANEL_TYPE_UNKNOWN;
405 break;
406 }
407 return pan_type;
408}
409
410#define DISPLAY_MAX_PANEL_DETECTION 2
411
412uint32_t oem_panel_max_auto_detect_panels()
413{
414 return target_panel_auto_detect_enabled() ?
415 DISPLAY_MAX_PANEL_DETECTION : 0;
416}
417
418int oem_panel_select(const char *panel_name, struct panel_struct *panelstruct,
419 struct msm_panel_info *pinfo,
420 struct mdss_dsi_phy_ctrl *phy_db)
421{
422 uint32_t hw_id = board_hardware_id();
jialongjhanb2dda0b2020-04-21 20:20:51 +0800423 //uint32_t platform_subtype = board_hardware_subtype();
Padmanabhan Komanduru0104a892016-01-22 16:58:10 +0530424 int32_t panel_override_id;
425 phy_db->pll_type = DSI_PLL_TYPE_THULIUM;
426
427 if (panel_name) {
428 panel_override_id = panel_name_to_id(supp_panels,
429 ARRAY_SIZE(supp_panels), panel_name);
430
431 if (panel_override_id < 0) {
432 dprintf(CRITICAL, "Not able to search the panel:%s\n",
433 panel_name + strspn(panel_name, " "));
434 } else if (panel_override_id < UNKNOWN_PANEL) {
435 /* panel override using fastboot oem command */
436 panel_id = panel_override_id;
437
438 dprintf(INFO, "OEM panel override:%s\n",
439 panel_name + strspn(panel_name, " "));
440 goto panel_init;
441 }
442 }
443
444 switch (hw_id) {
jialongjhanb2dda0b2020-04-21 20:20:51 +0800445
446 /*[Arima_8901][Jialong] lcm driver porting begin*/
Padmanabhan Komanduru0104a892016-01-22 16:58:10 +0530447 case HW_PLATFORM_MTP:
jialongjhanb2dda0b2020-04-21 20:20:51 +0800448 //panel_id = TRULY_1080P_VIDEO_PANEL;
449 //if (platform_subtype == 0x03)
450 // panel_id = HX8399C_FHD_PLUSE_VIDEO_PANEL;
451 //break;
Padmanabhan Komanduru0104a892016-01-22 16:58:10 +0530452 case HW_PLATFORM_SURF:
453 case HW_PLATFORM_RCM:
jialongjhanb2dda0b2020-04-21 20:20:51 +0800454 //panel_id = TRULY_1080P_VIDEO_PANEL;
455 //if (platform_subtype == 0x02)
456 // panel_id = HX8399C_FHD_PLUSE_VIDEO_PANEL;
457 //break;
Mao Flynn5ecc8c92016-01-29 14:06:10 +0800458 case HW_PLATFORM_QRD:
jialongjhanb2dda0b2020-04-21 20:20:51 +0800459 //panel_id = R69006_1080P_CMD_PANEL;
460 //if (platform_subtype == 0x01 || platform_subtype == 0x03)
461 // panel_id = HX8399C_FHD_PLUSE_VIDEO_PANEL;
462
463 //[Arima][8901][JialongJhan] Command mode 20190516 Start
464 //[Jialong]This is default for video mode
465 //panel_id = TRULY_HX83112B_1080P_VIDEO_PANEL;
466
467 //[Jialong]This is default for command mode
468 panel_id = DJN_HX83112B_1080P_CMD_PANEL;
469 //[Arima][8901][JialongJhan] Command mode 20190516 End
Mao Flynn5ecc8c92016-01-29 14:06:10 +0800470 break;
jialongjhanb2dda0b2020-04-21 20:20:51 +0800471 /*[Arima_8901][Jialong] lcm driver porting end*/
472
Padmanabhan Komanduru0104a892016-01-22 16:58:10 +0530473 default:
474 dprintf(CRITICAL, "Display not enabled for %d HW type\n",
475 hw_id);
476 return PANEL_TYPE_UNKNOWN;
477 }
jialongjhanb2dda0b2020-04-21 20:20:51 +0800478
Padmanabhan Komanduru0104a892016-01-22 16:58:10 +0530479panel_init:
480 /*
481 * Update all data structures after 'panel_init' label. Only panel
482 * selection is supposed to happen before that.
483 */
484 pinfo->pipe_type = MDSS_MDP_PIPE_TYPE_RGB;
485 return init_panel_data(panelstruct, pinfo, phy_db);
486}