blob: e211c53871648bc209b224c5d58dac783a9c7c0c [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"
Ray Zhangfb6025a2016-04-08 10:57:30 +080065#include "include/panel_lead_fl10802_fwvga_video.h"
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -070066
67/*---------------------------------------------------------------------------*/
68/* static panel selection variable */
69/*---------------------------------------------------------------------------*/
70enum {
71 TRULY_1080P_VIDEO_PANEL,
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +053072 TRULY_1080P_CMD_PANEL,
feifanz174c82c2015-04-15 18:57:07 +080073 OTM1906C_1080P_CMD_PANEL,
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +053074 SHARP_1080P_CMD_PANEL,
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +053075 NT35597_WQXGA_DUALDSI_VIDEO_PANEL,
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +053076 NT35597_WQXGA_DUALDSI_CMD_PANEL,
Ray Zhangf95f5b92015-06-25 15:34:29 +080077 HX8399A_1080P_VIDEO_PANEL,
Sandeep Pandaed082922015-08-03 12:18:25 +053078 NT35597_WQXGA_DSC_VIDEO_PANEL,
79 NT35597_WQXGA_DSC_CMD_PANEL,
Padmanabhan Komanduru4927c2c2015-08-21 14:55:16 +053080 HX8394D_720P_VIDEO_PANEL,
Sujeev Dias6bc9fa32015-08-03 23:13:44 -070081 BYD_1200P_VIDEO_PANEL,
Ray Zhang4bbc7b02015-12-04 16:07:20 +080082 R69006_1080P_CMD_PANEL,
83 R69006_1080P_VIDEO_PANEL,
84 HX8394F_720P_VIDEO_PANEL,
Padmanabhan Komandurue108ed02015-12-21 12:43:07 +053085 TRULY_720P_VIDEO_PANEL,
Padmanabhan Komanduru7460e442016-01-21 12:30:34 +053086 TRULY_WUXGA_VIDEO_PANEL,
Vishnuvardhan Prodduturia0989b32016-02-15 18:07:44 +053087 TRULY_720P_CMD_PANEL,
Ray Zhangfb6025a2016-04-08 10:57:30 +080088 LEAD_FL10802_FWVGA_VIDEO_PANEL,
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -070089 UNKNOWN_PANEL
90};
91
92uint32_t panel_regulator_settings[] = {
93 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
94};
95
96/*
97 * The list of panels that are supported on this target.
98 * Any panel in this list can be selected using fastboot oem command.
99 */
100static struct panel_list supp_panels[] = {
101 {"truly_1080p_video", TRULY_1080P_VIDEO_PANEL},
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +0530102 {"truly_1080p_cmd", TRULY_1080P_CMD_PANEL},
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +0530103 {"sharp_1080p_cmd", SHARP_1080P_CMD_PANEL},
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530104 {"nt35597_wqxga_dualdsi_video", NT35597_WQXGA_DUALDSI_VIDEO_PANEL},
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +0530105 {"nt35597_wqxga_dualdsi_cmd", NT35597_WQXGA_DUALDSI_CMD_PANEL},
Ray Zhangf95f5b92015-06-25 15:34:29 +0800106 {"otm1906c_1080p_cmd", OTM1906C_1080P_CMD_PANEL},
107 {"hx8399a_1080p_video", HX8399A_1080P_VIDEO_PANEL},
Sandeep Pandaed082922015-08-03 12:18:25 +0530108 {"nt35597_wqxga_dsc_video", NT35597_WQXGA_DSC_VIDEO_PANEL},
109 {"nt35597_wqxga_dsc_cmd", NT35597_WQXGA_DSC_CMD_PANEL},
Padmanabhan Komanduru4927c2c2015-08-21 14:55:16 +0530110 {"hx8394d_720p_video", HX8394D_720P_VIDEO_PANEL},
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700111 {"byd_1200p_video", BYD_1200P_VIDEO_PANEL},
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800112 {"r69006_1080p_cmd",R69006_1080P_CMD_PANEL},
113 {"r69006_1080p_video",R69006_1080P_VIDEO_PANEL},
Padmanabhan Komandurue108ed02015-12-21 12:43:07 +0530114 {"hx8394f_720p_video", HX8394F_720P_VIDEO_PANEL},
Padmanabhan Komanduru7460e442016-01-21 12:30:34 +0530115 {"truly_720p_video", TRULY_720P_VIDEO_PANEL},
Vishnuvardhan Prodduturia0989b32016-02-15 18:07:44 +0530116 {"truly_wuxga_video", TRULY_WUXGA_VIDEO_PANEL},
117 {"truly_720p_cmd", TRULY_720P_CMD_PANEL},
Ray Zhangfb6025a2016-04-08 10:57:30 +0800118 {"lead_fl10802_fwvga_video", LEAD_FL10802_FWVGA_VIDEO_PANEL},
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700119};
120
121static uint32_t panel_id;
122
Sandeep Panda75fddaa2015-07-06 11:38:25 +0530123#define TRULY_1080P_PANEL_ON_DELAY 40
Sandeep Pandac797d542015-06-12 14:37:55 +0530124
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700125int oem_panel_rotation()
126{
127 return NO_ERROR;
128}
129
130int oem_panel_on()
131{
132 /*
133 *OEM can keep their panel specific on instructions in this
134 *function
feifanz525046b2015-06-01 20:31:06 +0800135 */
136 if (panel_id == OTM1906C_1080P_CMD_PANEL) {
137 /* needs extra delay to avoid unexpected artifacts */
138 mdelay(OTM1906C_1080P_CMD_PANEL_ON_DELAY);
Sandeep Panda75fddaa2015-07-06 11:38:25 +0530139 } else if (panel_id == TRULY_1080P_CMD_PANEL ||
140 panel_id == TRULY_1080P_VIDEO_PANEL) {
141 mdelay(TRULY_1080P_PANEL_ON_DELAY);
Ray Zhang6ec437c2015-12-04 16:08:08 +0800142 }else if (panel_id == R69006_1080P_CMD_PANEL) {
143 mdelay(R69006_1080P_CMD_PANEL_ON_DELAY);
feifanz525046b2015-06-01 20:31:06 +0800144 }
Sandeep Pandac797d542015-06-12 14:37:55 +0530145
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700146 return NO_ERROR;
147}
148
149int oem_panel_off()
150{
151 /* OEM can keep their panel specific off instructions
152 * in this function
153 */
154 return NO_ERROR;
155}
156
157static int init_panel_data(struct panel_struct *panelstruct,
158 struct msm_panel_info *pinfo,
159 struct mdss_dsi_phy_ctrl *phy_db)
160{
161 int pan_type = PANEL_TYPE_DSI;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700162 struct oem_panel_data *oem_data = mdss_dsi_get_oem_data_ptr();
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700163
164 switch (panel_id) {
165 case TRULY_1080P_VIDEO_PANEL:
166 panelstruct->paneldata = &truly_1080p_video_panel_data;
167 panelstruct->paneldata->panel_with_enable_gpio = 1;
168 panelstruct->panelres = &truly_1080p_video_panel_res;
169 panelstruct->color = &truly_1080p_video_color;
170 panelstruct->videopanel = &truly_1080p_video_video_panel;
171 panelstruct->commandpanel = &truly_1080p_video_command_panel;
172 panelstruct->state = &truly_1080p_video_state;
173 panelstruct->laneconfig = &truly_1080p_video_lane_config;
174 panelstruct->paneltiminginfo
175 = &truly_1080p_video_timing_info;
176 panelstruct->panelresetseq
177 = &truly_1080p_video_panel_reset_seq;
178 panelstruct->backlightinfo = &truly_1080p_video_backlight;
179 pinfo->mipi.panel_on_cmds
180 = truly_1080p_video_on_command;
181 pinfo->mipi.num_of_panel_on_cmds
182 = TRULY_1080P_VIDEO_ON_COMMAND;
183 pinfo->mipi.panel_off_cmds
184 = truly_1080p_video_off_command;
185 pinfo->mipi.num_of_panel_off_cmds
186 = TRULY_1080P_VIDEO_OFF_COMMAND;
187 memcpy(phy_db->timing,
188 truly_1080p_video_timings, TIMING_SIZE);
189 pinfo->mipi.signature = TRULY_1080P_VIDEO_SIGNATURE;
190 break;
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +0530191 case TRULY_1080P_CMD_PANEL:
192 panelstruct->paneldata = &truly_1080p_cmd_panel_data;
193 panelstruct->paneldata->panel_with_enable_gpio = 1;
194 panelstruct->panelres = &truly_1080p_cmd_panel_res;
195 panelstruct->color = &truly_1080p_cmd_color;
196 panelstruct->videopanel = &truly_1080p_cmd_video_panel;
197 panelstruct->commandpanel = &truly_1080p_cmd_command_panel;
198 panelstruct->state = &truly_1080p_cmd_state;
199 panelstruct->laneconfig = &truly_1080p_cmd_lane_config;
200 panelstruct->paneltiminginfo
201 = &truly_1080p_cmd_timing_info;
202 panelstruct->panelresetseq
203 = &truly_1080p_cmd_panel_reset_seq;
204 panelstruct->backlightinfo = &truly_1080p_cmd_backlight;
205 pinfo->mipi.panel_on_cmds
206 = truly_1080p_cmd_on_command;
207 pinfo->mipi.num_of_panel_on_cmds
208 = TRULY_1080P_CMD_ON_COMMAND;
209 pinfo->mipi.panel_off_cmds
210 = truly_1080p_cmd_off_command;
211 pinfo->mipi.num_of_panel_off_cmds
212 = TRULY_1080P_CMD_OFF_COMMAND;
213 memcpy(phy_db->timing,
214 truly_1080p_cmd_timings, TIMING_SIZE);
215 pinfo->mipi.signature = TRULY_1080P_CMD_SIGNATURE;
216 break;
feifanz174c82c2015-04-15 18:57:07 +0800217 case OTM1906C_1080P_CMD_PANEL:
218 panelstruct->paneldata = &otm1906c_1080p_cmd_panel_data;
219 panelstruct->paneldata->panel_with_enable_gpio = 1;
220 panelstruct->panelres = &otm1906c_1080p_cmd_panel_res;
221 panelstruct->color = &otm1906c_1080p_cmd_color;
222 panelstruct->videopanel = &otm1906c_1080p_cmd_video_panel;
223 panelstruct->commandpanel = &otm1906c_1080p_cmd_command_panel;
224 panelstruct->state = &otm1906c_1080p_cmd_state;
225 panelstruct->laneconfig = &otm1906c_1080p_cmd_lane_config;
226 panelstruct->paneltiminginfo
227 = &otm1906c_1080p_cmd_timing_info;
228 panelstruct->panelresetseq
229 = &otm1906c_1080p_cmd_panel_reset_seq;
230 panelstruct->backlightinfo = &otm1906c_1080p_cmd_backlight;
231 pinfo->mipi.panel_on_cmds
232 = otm1906c_1080p_cmd_on_command;
233 pinfo->mipi.num_of_panel_on_cmds
234 = OTM1906C_1080P_CMD_ON_COMMAND;
235 pinfo->mipi.panel_off_cmds
236 = otm1906c_1080p_cmd_off_command;
237 pinfo->mipi.num_of_panel_off_cmds
238 = OTM1906C_1080P_CMD_OFF_COMMAND;
239 memcpy(phy_db->timing,
240 otm1906c_1080p_cmd_timings, TIMING_SIZE);
241 pinfo->mipi.signature = OTM1906C_1080P_CMD_SIGNATURE;
242 break;
Ray Zhangf95f5b92015-06-25 15:34:29 +0800243 case HX8399A_1080P_VIDEO_PANEL:
244 panelstruct->paneldata = &hx8399a_1080p_video_panel_data;
245 panelstruct->panelres = &hx8399a_1080p_video_panel_res;
246 panelstruct->color = &hx8399a_1080p_video_color;
247 panelstruct->videopanel = &hx8399a_1080p_video_video_panel;
248 panelstruct->commandpanel = &hx8399a_1080p_video_command_panel;
249 panelstruct->state = &hx8399a_1080p_video_state;
250 panelstruct->laneconfig = &hx8399a_1080p_video_lane_config;
251 panelstruct->paneltiminginfo
252 = &hx8399a_1080p_video_timing_info;
253 panelstruct->panelresetseq
254 = &hx8399a_1080p_video_reset_seq;
255 panelstruct->backlightinfo = &hx8399a_1080p_video_backlight;
256 pinfo->mipi.panel_on_cmds
257 = hx8399a_1080p_video_on_command;
258 pinfo->mipi.num_of_panel_on_cmds
259 = HX8399A_1080P_VIDEO_ON_COMMAND;
260 pinfo->mipi.panel_off_cmds
261 = hx8399a_1080p_video_off_command;
262 pinfo->mipi.num_of_panel_off_cmds
263 = HX8399A_1080P_VIDEO_OFF_COMMAND;
264 memcpy(phy_db->timing,
265 hx8399a_1080p_video_timings, TIMING_SIZE);
266 pinfo->mipi.signature = HX8399A_1080P_VIDEO_SIGNATURE;
267 break;
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +0530268 case SHARP_1080P_CMD_PANEL:
269 panelstruct->paneldata = &sharp_1080p_cmd_panel_data;
270 panelstruct->panelres = &sharp_1080p_cmd_panel_res;
271 panelstruct->paneldata->panel_with_enable_gpio = 1;
272 panelstruct->color = &sharp_1080p_cmd_color;
273 panelstruct->videopanel = &sharp_1080p_cmd_video_panel;
274 panelstruct->commandpanel = &sharp_1080p_cmd_command_panel;
275 panelstruct->state = &sharp_1080p_cmd_state;
276 panelstruct->laneconfig = &sharp_1080p_cmd_lane_config;
277 panelstruct->paneltiminginfo
278 = &sharp_1080p_cmd_timing_info;
279 panelstruct->panelresetseq
280 = &sharp_1080p_cmd_panel_reset_seq;
281 panelstruct->backlightinfo = &sharp_1080p_cmd_backlight;
282 pinfo->mipi.panel_on_cmds
283 = sharp_1080p_cmd_on_command;
284 pinfo->mipi.num_of_panel_on_cmds
285 = SHARP_1080P_CMD_ON_COMMAND;
286 pinfo->mipi.panel_off_cmds
287 = sharp_1080p_cmd_off_command;
288 pinfo->mipi.num_of_panel_off_cmds
289 = SHARP_1080P_CMD_OFF_COMMAND;
290 memcpy(phy_db->timing,
291 sharp_1080p_cmd_timings, TIMING_SIZE);
292 break;
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530293 case NT35597_WQXGA_DUALDSI_VIDEO_PANEL:
294 panelstruct->paneldata = &nt35597_wqxga_dualdsi_video_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_video_panel_res;
300 panelstruct->color = &nt35597_wqxga_dualdsi_video_color;
301 panelstruct->videopanel = &nt35597_wqxga_dualdsi_video_video_panel;
302 panelstruct->commandpanel = &nt35597_wqxga_dualdsi_video_command_panel;
303 panelstruct->state = &nt35597_wqxga_dualdsi_video_state;
304 panelstruct->laneconfig = &nt35597_wqxga_dualdsi_video_lane_config;
305 panelstruct->paneltiminginfo
306 = &nt35597_wqxga_dualdsi_video_timing_info;
307 panelstruct->panelresetseq
308 = &nt35597_wqxga_dualdsi_video_reset_seq;
309 panelstruct->backlightinfo = &nt35597_wqxga_dualdsi_video_backlight;
310 pinfo->labibb = &nt35597_wqxga_dualdsi_video_labibb;
311
312 pinfo->mipi.panel_on_cmds
313 = nt35597_wqxga_dualdsi_video_on_command;
314 pinfo->mipi.num_of_panel_on_cmds
315 = NT35597_WQXGA_DUALDSI_VIDEO_ON_COMMAND;
316 pinfo->mipi.panel_off_cmds
317 = nt35597_wqxga_dualdsi_video_off_command;
318 pinfo->mipi.num_of_panel_off_cmds
319 = NT35597_WQXGA_DUALDSI_VIDEO_OFF_COMMAND;
320 memcpy(phy_db->timing, nt35597_wqxga_dualdsi_video_timings,
321 TIMING_SIZE);
322 pinfo->mipi.tx_eot_append = true;
323 break;
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +0530324 case NT35597_WQXGA_DUALDSI_CMD_PANEL:
325 panelstruct->paneldata = &nt35597_wqxga_dualdsi_cmd_panel_data;
326 panelstruct->paneldata->panel_operating_mode = DST_SPLIT_FLAG |
327 SPLIT_DISPLAY_FLAG | DUAL_DSI_FLAG;
328 panelstruct->paneldata->panel_with_enable_gpio = 0;
329
330 panelstruct->panelres = &nt35597_wqxga_dualdsi_cmd_panel_res;
331 panelstruct->color = &nt35597_wqxga_dualdsi_cmd_color;
332 panelstruct->videopanel = &nt35597_wqxga_dualdsi_cmd_video_panel;
333 panelstruct->commandpanel = &nt35597_wqxga_dualdsi_cmd_command_panel;
334 panelstruct->state = &nt35597_wqxga_dualdsi_cmd_state;
335 panelstruct->laneconfig = &nt35597_wqxga_dualdsi_cmd_lane_config;
336 panelstruct->paneltiminginfo
337 = &nt35597_wqxga_dualdsi_cmd_timing_info;
Padmanabhan Komanduru58fc57e2015-07-07 21:36:14 +0530338 /* Clkout timings are different for this panel on 8956 */
339 panelstruct->paneltiminginfo->tclk_post = 0x2b;
340 panelstruct->paneltiminginfo->tclk_pre = 0x28;
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +0530341 panelstruct->panelresetseq
342 = &nt35597_wqxga_dualdsi_cmd_reset_seq;
343 panelstruct->backlightinfo = &nt35597_wqxga_dualdsi_cmd_backlight;
344
345 pinfo->labibb = &nt35597_wqxga_dualdsi_cmd_labibb;
346
347 pinfo->mipi.panel_on_cmds
348 = nt35597_wqxga_dualdsi_cmd_on_command;
349 pinfo->mipi.num_of_panel_on_cmds
350 = NT35597_WQXGA_DUALDSI_CMD_ON_COMMAND;
351 pinfo->mipi.panel_off_cmds
352 = nt35597_wqxga_dualdsi_cmd_off_command;
353 pinfo->mipi.num_of_panel_off_cmds
354 = NT35597_WQXGA_DUALDSI_CMD_OFF_COMMAND;
355 memcpy(phy_db->timing, nt35597_wqxga_dualdsi_cmd_timings,
356 TIMING_SIZE);
357 pinfo->mipi.tx_eot_append = true;
358 break;
Sandeep Pandaed082922015-08-03 12:18:25 +0530359 case NT35597_WQXGA_DSC_VIDEO_PANEL:
360 panelstruct->paneldata = &nt35597_wqxga_dsc_video_panel_data;
361 panelstruct->paneldata->panel_with_enable_gpio = 0;
362 panelstruct->paneldata->panel_operating_mode = USE_DSI1_PLL_FLAG;
363 panelstruct->panelres = &nt35597_wqxga_dsc_video_panel_res;
364 panelstruct->color = &nt35597_wqxga_dsc_video_color;
365 panelstruct->videopanel = &nt35597_wqxga_dsc_video_video_panel;
366 panelstruct->commandpanel = &nt35597_wqxga_dsc_video_command_panel;
367 panelstruct->state = &nt35597_wqxga_dsc_video_state;
368 panelstruct->laneconfig = &nt35597_wqxga_dsc_video_lane_config;
369 panelstruct->paneltiminginfo
370 = &nt35597_wqxga_dsc_video_timing_info;
371 panelstruct->panelresetseq
372 = &nt35597_wqxga_dsc_video_reset_seq;
373 panelstruct->backlightinfo = &nt35597_wqxga_dsc_video_backlight;
374 pinfo->labibb = &nt35597_wqxga_dsc_video_labibb;
375
376 pinfo->mipi.panel_on_cmds
377 = nt35597_wqxga_dsc_video_on_command;
378 pinfo->mipi.num_of_panel_on_cmds
379 = NT35597_WQXGA_DSC_VIDEO_ON_COMMAND;
380 pinfo->mipi.panel_off_cmds
381 = nt35597_wqxga_dsc_video_off_command;
382 pinfo->mipi.num_of_panel_off_cmds
383 = NT35597_WQXGA_DSC_VIDEO_OFF_COMMAND;
384 memcpy(phy_db->timing, nt35597_wqxga_dsc_video_timings,
385 TIMING_SIZE);
386 /* Clkout timings are different for this panel on 8956 */
387 panelstruct->paneltiminginfo->tclk_post = 0x04;
388 panelstruct->paneltiminginfo->tclk_pre = 0x20;
389 pinfo->mipi.tx_eot_append = true;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700390
391 panelstruct->paneldata->panel_operating_mode &= ~DUAL_PIPE_FLAG;
392 panelstruct->config = &nt35597_wqxga_dsc_video_config0;
393 if (oem_data) {
394 switch (oem_data->cfg_num[0]) {
395 case -1: /* default */
396 case 0:
397 panelstruct->config =
398 &nt35597_wqxga_dsc_video_config0;
399 break;
400 default:
401 dprintf(CRITICAL, "topology config%d not supported. fallback to default config0\n",
402 oem_data->cfg_num[0]);
403 panelstruct->config = &nt35597_wqxga_dsc_video_config0;
404 }
405 }
406 pinfo->lm_split[0] = panelstruct->config->lm_split[0];
407 pinfo->lm_split[1] = panelstruct->config->lm_split[1];
408 pinfo->num_dsc_enc = panelstruct->config->num_dsc_enc;
Sandeep Pandaed082922015-08-03 12:18:25 +0530409 pinfo->compression_mode = COMPRESSION_DSC;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700410
Sandeep Pandaed082922015-08-03 12:18:25 +0530411 pinfo->dsc.parameter_calc = mdss_dsc_parameters_calc;
412 pinfo->dsc.dsc2buf = mdss_dsc_to_buf;
413 pinfo->dsc.dsi_dsc_config = mdss_dsc_dsi_config;
414 pinfo->dsc.mdp_dsc_config = mdss_dsc_mdp_config;
415 break;
416 case NT35597_WQXGA_DSC_CMD_PANEL:
417 panelstruct->paneldata = &nt35597_wqxga_dsc_cmd_panel_data;
418 panelstruct->paneldata->panel_with_enable_gpio = 0;
419 panelstruct->paneldata->panel_operating_mode = USE_DSI1_PLL_FLAG;
420 panelstruct->panelres = &nt35597_wqxga_dsc_cmd_panel_res;
421 panelstruct->color = &nt35597_wqxga_dsc_cmd_color;
422 panelstruct->videopanel = &nt35597_wqxga_dsc_cmd_video_panel;
423 panelstruct->commandpanel = &nt35597_wqxga_dsc_cmd_command_panel;
424 panelstruct->state = &nt35597_wqxga_dsc_cmd_state;
425 panelstruct->laneconfig = &nt35597_wqxga_dsc_cmd_lane_config;
426 panelstruct->paneltiminginfo
427 = &nt35597_wqxga_dsc_cmd_timing_info;
428 panelstruct->panelresetseq
429 = &nt35597_wqxga_dsc_cmd_reset_seq;
430 panelstruct->backlightinfo = &nt35597_wqxga_dsc_cmd_backlight;
431 pinfo->labibb = &nt35597_wqxga_dsc_cmd_labibb;
432
433 pinfo->mipi.panel_on_cmds
434 = nt35597_wqxga_dsc_cmd_on_command;
435 pinfo->mipi.num_of_panel_on_cmds
436 = NT35597_WQXGA_DSC_CMD_ON_COMMAND;
437 pinfo->mipi.panel_off_cmds
438 = nt35597_wqxga_dsc_cmd_off_command;
439 pinfo->mipi.num_of_panel_off_cmds
440 = NT35597_WQXGA_DSC_CMD_OFF_COMMAND;
441 memcpy(phy_db->timing, nt35597_wqxga_dsc_cmd_timings,
442 TIMING_SIZE);
443 /* Clkout timings are different for this panel on 8956 */
444 panelstruct->paneltiminginfo->tclk_post = 0x04;
445 panelstruct->paneltiminginfo->tclk_pre = 0x20;
446 pinfo->mipi.tx_eot_append = true;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700447
448 panelstruct->paneldata->panel_operating_mode &= ~DUAL_PIPE_FLAG;
449 panelstruct->config = &nt35597_wqxga_dsc_cmd_config0;
450 if (oem_data) {
451 switch (oem_data->cfg_num[0]) {
452 case -1: /* default */
453 case 0:
454 panelstruct->config =
455 &nt35597_wqxga_dsc_cmd_config0;
456 break;
457 default:
458 dprintf(CRITICAL, "topology config%d not supported. fallback to default config0\n",
459 oem_data->cfg_num[0]);
460 panelstruct->config = &nt35597_wqxga_dsc_cmd_config0;
461 }
462 }
463 pinfo->lm_split[0] = panelstruct->config->lm_split[0];
464 pinfo->lm_split[1] = panelstruct->config->lm_split[1];
465 pinfo->num_dsc_enc = panelstruct->config->num_dsc_enc;
Sandeep Pandaed082922015-08-03 12:18:25 +0530466 pinfo->compression_mode = COMPRESSION_DSC;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700467
Sandeep Pandaed082922015-08-03 12:18:25 +0530468 pinfo->dsc.parameter_calc = mdss_dsc_parameters_calc;
469 pinfo->dsc.dsc2buf = mdss_dsc_to_buf;
470 pinfo->dsc.dsi_dsc_config = mdss_dsc_dsi_config;
471 pinfo->dsc.mdp_dsc_config = mdss_dsc_mdp_config;
472 break;
Padmanabhan Komanduru4927c2c2015-08-21 14:55:16 +0530473 case HX8394D_720P_VIDEO_PANEL:
474 panelstruct->paneldata = &hx8394d_720p_video_panel_data;
475 panelstruct->panelres = &hx8394d_720p_video_panel_res;
476 panelstruct->color = &hx8394d_720p_video_color;
477 panelstruct->videopanel = &hx8394d_720p_video_video_panel;
478 panelstruct->commandpanel = &hx8394d_720p_video_command_panel;
479 panelstruct->state = &hx8394d_720p_video_state;
480 panelstruct->laneconfig = &hx8394d_720p_video_lane_config;
481 panelstruct->paneltiminginfo
482 = &hx8394d_720p_video_timing_info;
483 panelstruct->panelresetseq
484 = &hx8394d_720p_video_panel_reset_seq;
485 panelstruct->backlightinfo = &hx8394d_720p_video_backlight;
486 pinfo->mipi.panel_on_cmds
487 = hx8394d_720p_video_on_command;
488 pinfo->mipi.num_of_panel_on_cmds
489 = HX8394D_720P_VIDEO_ON_COMMAND;
490 pinfo->mipi.panel_off_cmds
491 = hx8394d_720p_video_off_command;
492 pinfo->mipi.num_of_panel_off_cmds
493 = HX8394D_720P_VIDEO_OFF_COMMAND;
494 memcpy(phy_db->timing,
495 hx8394d_720p_video_timings, TIMING_SIZE);
496 pinfo->mipi.signature = HX8394D_720P_VIDEO_SIGNATURE;
497 break;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800498 case R69006_1080P_CMD_PANEL:
499 panelstruct->paneldata = &r69006_1080p_cmd_panel_data;
500 panelstruct->panelres = &r69006_1080p_cmd_panel_res;
501 panelstruct->color = &r69006_1080p_cmd_color;
502 panelstruct->videopanel = &r69006_1080p_cmd_video_panel;
503 panelstruct->commandpanel = &r69006_1080p_cmd_command_panel;
504 panelstruct->state = &r69006_1080p_cmd_state;
505 panelstruct->laneconfig = &r69006_1080p_cmd_lane_config;
506 panelstruct->paneltiminginfo
507 = &r69006_1080p_cmd_timing_info;
508 panelstruct->panelresetseq
509 = &r69006_1080p_cmd_reset_seq;
510 panelstruct->backlightinfo = &r69006_1080p_cmd_backlight;
Ray Zhange9e3b692015-12-18 18:03:30 +0800511 pinfo->labibb = &r69006_1080p_cmd_labibb;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800512 pinfo->mipi.panel_on_cmds
513 = r69006_1080p_cmd_on_command;
514 pinfo->mipi.num_of_panel_on_cmds
515 = R69006_1080P_CMD_ON_COMMAND;
516 pinfo->mipi.panel_off_cmds
517 = r69006_1080p_cmd_off_command;
518 pinfo->mipi.num_of_panel_off_cmds
519 = R69006_1080P_CMD_OFF_COMMAND;
520 memcpy(phy_db->timing,
521 r69006_1080p_cmd_timings, TIMING_SIZE);
522 pinfo->mipi.signature = R69006_1080P_CMD_SIGNATURE;
Ray Zhangc8fd3632015-12-23 14:01:13 +0800523 pinfo->mipi.tx_eot_append = true;
524 pinfo->mipi.rx_eot_ignore = true;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800525 break;
526 case R69006_1080P_VIDEO_PANEL:
527 panelstruct->paneldata = &r69006_1080p_video_panel_data;
528 panelstruct->panelres = &r69006_1080p_video_panel_res;
529 panelstruct->color = &r69006_1080p_video_color;
530 panelstruct->videopanel = &r69006_1080p_video_video_panel;
531 panelstruct->commandpanel = &r69006_1080p_video_command_panel;
532 panelstruct->state = &r69006_1080p_video_state;
533 panelstruct->laneconfig = &r69006_1080p_video_lane_config;
534 panelstruct->paneltiminginfo
535 = &r69006_1080p_video_timing_info;
536 panelstruct->panelresetseq
537 = &r69006_1080p_video_reset_seq;
538 panelstruct->backlightinfo = &r69006_1080p_video_backlight;
Ray Zhange9e3b692015-12-18 18:03:30 +0800539 pinfo->labibb = &r69006_1080p_video_labibb;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800540 pinfo->mipi.panel_on_cmds
541 = r69006_1080p_video_on_command;
542 pinfo->mipi.num_of_panel_on_cmds
543 = R69006_1080P_VIDEO_ON_COMMAND;
544 pinfo->mipi.panel_off_cmds
545 = r69006_1080p_video_off_command;
546 pinfo->mipi.num_of_panel_off_cmds
547 = R69006_1080P_VIDEO_OFF_COMMAND;
548 memcpy(phy_db->timing,
549 r69006_1080p_video_timings, TIMING_SIZE);
550 pinfo->mipi.signature = R69006_1080P_VIDEO_SIGNATURE;
551 break;
552 case HX8394F_720P_VIDEO_PANEL:
553 panelstruct->paneldata = &hx8394f_720p_video_panel_data;
554 panelstruct->panelres = &hx8394f_720p_video_panel_res;
555 panelstruct->color = &hx8394f_720p_video_color;
556 panelstruct->videopanel = &hx8394f_720p_video_video_panel;
557 panelstruct->commandpanel = &hx8394f_720p_video_command_panel;
558 panelstruct->state = &hx8394f_720p_video_state;
559 panelstruct->laneconfig = &hx8394f_720p_video_lane_config;
560 panelstruct->paneltiminginfo
561 = &hx8394f_720p_video_timing_info;
562 panelstruct->panelresetseq
563 = &hx8394f_720p_video_reset_seq;
564 panelstruct->backlightinfo = &hx8394f_720p_video_backlight;
565 pinfo->mipi.panel_on_cmds
566 = hx8394f_720p_video_on_command;
567 pinfo->mipi.num_of_panel_on_cmds
568 = HX8394F_720P_VIDEO_ON_COMMAND;
569 pinfo->mipi.panel_off_cmds
570 = hx8394f_720p_video_off_command;
571 pinfo->mipi.num_of_panel_off_cmds
572 = HX8394F_720P_VIDEO_OFF_COMMAND;
573 memcpy(phy_db->timing,
574 hx8394f_720p_video_timings, TIMING_SIZE);
575 pinfo->mipi.signature = HX8394F_720P_VIDEO_SIGNATURE;
576 break;
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700577 case BYD_1200P_VIDEO_PANEL:
578 panelstruct->paneldata = &byd_1200p_video_panel_data;
579 panelstruct->paneldata->panel_with_enable_gpio = 1;
580 panelstruct->panelres = &byd_1200p_video_panel_res;
581 panelstruct->color = &byd_1200p_video_color;
582 panelstruct->videopanel = &byd_1200p_video_video_panel;
583 panelstruct->commandpanel = &byd_1200p_video_command_panel;
584 panelstruct->state = &byd_1200p_video_state;
585 panelstruct->laneconfig = &byd_1200p_video_lane_config;
586 panelstruct->paneltiminginfo
587 = &byd_1200p_video_timing_info;
588 panelstruct->panelresetseq
589 = &byd_1200p_video_panel_reset_seq;
590 panelstruct->backlightinfo = &byd_1200p_video_backlight;
591 pinfo->mipi.panel_on_cmds
592 = byd_1200p_video_on_command;
593 pinfo->mipi.num_of_panel_on_cmds
594 = BYD_1200P_VIDEO_ON_COMMAND;
595 pinfo->mipi.panel_off_cmds
596 = byd_1200p_video_off_command;
597 pinfo->mipi.num_of_panel_off_cmds
598 = BYD_1200P_VIDEO_OFF_COMMAND;
599 memcpy(phy_db->timing,
600 byd_1200p_video_timings, TIMING_SIZE);
601 pinfo->mipi.signature = BYD_1200P_VIDEO_SIGNATURE;
602 phy_db->regulator_mode = DSI_PHY_REGULATOR_LDO_MODE;
603 break;
Padmanabhan Komandurue108ed02015-12-21 12:43:07 +0530604 case TRULY_720P_VIDEO_PANEL:
605 panelstruct->paneldata = &truly_720p_video_panel_data;
606 panelstruct->paneldata->panel_with_enable_gpio = 1;
607 panelstruct->panelres = &truly_720p_video_panel_res;
608 panelstruct->color = &truly_720p_video_color;
609 panelstruct->videopanel = &truly_720p_video_video_panel;
610 panelstruct->commandpanel = &truly_720p_video_command_panel;
611 panelstruct->state = &truly_720p_video_state;
612 panelstruct->laneconfig = &truly_720p_video_lane_config;
613 panelstruct->paneltiminginfo
614 = &truly_720p_video_timing_info;
615 panelstruct->panelresetseq
616 = &truly_720p_video_panel_reset_seq;
617 panelstruct->backlightinfo = &truly_720p_video_backlight;
618 pinfo->mipi.panel_on_cmds
619 = truly_720p_video_on_command;
620 pinfo->mipi.num_of_panel_on_cmds
621 = TRULY_720P_VIDEO_ON_COMMAND;
622 pinfo->mipi.panel_off_cmds
623 = truly_720p_video_off_command;
624 pinfo->mipi.num_of_panel_off_cmds
625 = TRULY_720P_VIDEO_OFF_COMMAND;
626 memcpy(phy_db->timing,
627 truly_720p_video_timings, TIMING_SIZE);
628 pinfo->mipi.signature = TRULY_720P_VIDEO_SIGNATURE;
629 pinfo->mipi.tx_eot_append = true;
630 break;
Padmanabhan Komanduru7460e442016-01-21 12:30:34 +0530631 case TRULY_WUXGA_VIDEO_PANEL:
632 panelstruct->paneldata = &truly_wuxga_video_panel_data;
633 panelstruct->paneldata->panel_with_enable_gpio = 1;
634 panelstruct->panelres = &truly_wuxga_video_panel_res;
635 panelstruct->color = &truly_wuxga_video_color;
636 panelstruct->videopanel = &truly_wuxga_video_video_panel;
637 panelstruct->commandpanel = &truly_wuxga_video_command_panel;
638 panelstruct->state = &truly_wuxga_video_state;
639 panelstruct->laneconfig = &truly_wuxga_video_lane_config;
640 panelstruct->paneltiminginfo
641 = &truly_wuxga_video_timing_info;
642 panelstruct->panelresetseq
643 = &truly_wuxga_video_panel_reset_seq;
644 panelstruct->backlightinfo = &truly_wuxga_video_backlight;
645 pinfo->mipi.panel_on_cmds
646 = truly_wuxga_video_on_command;
647 pinfo->mipi.num_of_panel_on_cmds
648 = TRULY_WUXGA_VIDEO_ON_COMMAND;
649 pinfo->mipi.panel_off_cmds
650 = truly_wuxga_video_off_command;
651 pinfo->mipi.num_of_panel_off_cmds
652 = TRULY_WUXGA_VIDEO_OFF_COMMAND;
653 memcpy(phy_db->timing,
654 truly_wuxga_video_timings, TIMING_SIZE);
655 pinfo->mipi.signature = TRULY_WUXGA_VIDEO_SIGNATURE;
656 break;
Vishnuvardhan Prodduturia0989b32016-02-15 18:07:44 +0530657 case TRULY_720P_CMD_PANEL:
658 panelstruct->paneldata = &truly_720p_cmd_panel_data;
659 panelstruct->paneldata->panel_with_enable_gpio = 1;
660 panelstruct->panelres = &truly_720p_cmd_panel_res;
661 panelstruct->color = &truly_720p_cmd_color;
662 panelstruct->videopanel = &truly_720p_cmd_video_panel;
663 panelstruct->commandpanel = &truly_720p_cmd_command_panel;
664 panelstruct->state = &truly_720p_cmd_state;
665 panelstruct->laneconfig = &truly_720p_cmd_lane_config;
666 panelstruct->paneltiminginfo
667 = &truly_720p_cmd_timing_info;
668 panelstruct->panelresetseq
669 = &truly_720p_cmd_panel_reset_seq;
670 panelstruct->backlightinfo = &truly_720p_cmd_backlight;
671 pinfo->mipi.panel_on_cmds
672 = truly_720p_cmd_on_command;
673 pinfo->mipi.num_of_panel_on_cmds
674 = TRULY_720P_CMD_ON_COMMAND;
675 pinfo->mipi.panel_off_cmds
676 = truly_720p_cmd_off_command;
677 pinfo->mipi.num_of_panel_off_cmds
678 = TRULY_720P_CMD_OFF_COMMAND;
679 memcpy(phy_db->timing,
680 truly_720p_cmd_timings, TIMING_SIZE);
681 pinfo->mipi.signature = TRULY_720P_CMD_SIGNATURE;
682 pinfo->mipi.tx_eot_append = true;
683 break;
Ray Zhangfb6025a2016-04-08 10:57:30 +0800684 case LEAD_FL10802_FWVGA_VIDEO_PANEL:
685 panelstruct->paneldata = &lead_fl10802_fwvga_video_panel_data;
686 panelstruct->panelres = &lead_fl10802_fwvga_video_panel_res;
687 panelstruct->color = &lead_fl10802_fwvga_video_color;
688 panelstruct->videopanel = &lead_fl10802_fwvga_video_video_panel;
689 panelstruct->commandpanel
690 = &lead_fl10802_fwvga_video_command_panel;
691 panelstruct->state = &lead_fl10802_fwvga_video_state;
692 panelstruct->laneconfig = &lead_fl10802_fwvga_video_lane_config;
693 panelstruct->paneltiminginfo
694 = &lead_fl10802_fwvga_video_timing_info;
695 panelstruct->panelresetseq
696 = &lead_fl10802_fwvga_video_reset_seq;
697 panelstruct->backlightinfo
698 = &lead_fl10802_fwvga_video_backlight;
699 pinfo->mipi.panel_on_cmds
700 = lead_fl10802_fwvga_video_on_command;
701 pinfo->mipi.num_of_panel_on_cmds
702 = LEAD_FL10802_FWVGA_VIDEO_ON_COMMAND;
703 pinfo->mipi.panel_off_cmds
704 = lead_fl10802_fwvga_video_off_command;
705 pinfo->mipi.num_of_panel_off_cmds
706 = LEAD_FL10802_FWVGA_VIDEO_OFF_COMMAND;
707 memcpy(phy_db->timing,
708 lead_fl10802_fwvga_video_timings, TIMING_SIZE);
709 pinfo->mipi.signature = LEAD_FL10802_FWVGA_VIDEO_SIGNATURE;
Ray Zhange3eba402016-05-13 10:33:18 +0800710 pinfo->mipi.cmds_post_tg = 1;
Ray Zhangfb6025a2016-04-08 10:57:30 +0800711 break;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700712 case UNKNOWN_PANEL:
713 default:
714 memset(panelstruct, 0, sizeof(struct panel_struct));
715 memset(pinfo->mipi.panel_on_cmds, 0,
716 sizeof(struct mipi_dsi_cmd));
717 pinfo->mipi.num_of_panel_on_cmds = 0;
718 memset(pinfo->mipi.panel_off_cmds, 0,
719 sizeof(struct mipi_dsi_cmd));
720 pinfo->mipi.num_of_panel_off_cmds = 0;
721 memset(phy_db->timing, 0, TIMING_SIZE);
722 pan_type = PANEL_TYPE_UNKNOWN;
723 break;
724 }
Ujwal Patel41a665a2015-07-17 13:51:30 -0700725
726 dprintf(SPEW, "lm_split[0]=%d lm_split[1]=%d mode=0x%x\n",
727 pinfo->lm_split[0], pinfo->lm_split[1],
728 panelstruct->paneldata->panel_operating_mode);
729
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700730 return pan_type;
731}
732
Ray Zhangf95f5b92015-06-25 15:34:29 +0800733#define DISPLAY_MAX_PANEL_DETECTION 2
734static uint32_t auto_pan_loop = 0;
735
736uint32_t oem_panel_max_auto_detect_panels()
737{
738 return target_panel_auto_detect_enabled() ?
739 DISPLAY_MAX_PANEL_DETECTION : 0;
740}
741
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700742int oem_panel_select(const char *panel_name, struct panel_struct *panelstruct,
743 struct msm_panel_info *pinfo,
744 struct mdss_dsi_phy_ctrl *phy_db)
745{
746 uint32_t hw_id = board_hardware_id();
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700747 uint32_t hw_subtype = board_hardware_subtype();
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700748 int32_t panel_override_id;
feifanz028544e2015-07-28 20:58:57 +0800749 uint32_t target_id, plat_hw_ver_major;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700750
751 if (panel_name) {
752 panel_override_id = panel_name_to_id(supp_panels,
753 ARRAY_SIZE(supp_panels), panel_name);
754
755 if (panel_override_id < 0) {
756 dprintf(CRITICAL, "Not able to search the panel:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530757 panel_name);
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700758 } else if (panel_override_id < UNKNOWN_PANEL) {
759 /* panel override using fastboot oem command */
760 panel_id = panel_override_id;
761
762 dprintf(INFO, "OEM panel override:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530763 panel_name);
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700764 goto panel_init;
765 }
766 }
767
768 switch (hw_id) {
769 case HW_PLATFORM_MTP:
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530770 if (platform_is_msm8956())
771 panel_id = NT35597_WQXGA_DUALDSI_VIDEO_PANEL;
Parth Dixit05f3c9f2016-03-18 17:14:57 +0530772 else if (platform_is_msm8917())
Jayant Shekhar9c0533e2016-01-28 11:17:18 +0530773 panel_id = TRULY_720P_VIDEO_PANEL;
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530774 else
775 panel_id = TRULY_1080P_VIDEO_PANEL;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700776 break;
777 case HW_PLATFORM_SURF:
Vishnuvardhan Prodduturie116c002015-07-14 17:14:25 +0530778 case HW_PLATFORM_RCM:
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530779 if (platform_is_msm8956())
780 panel_id = NT35597_WQXGA_DUALDSI_VIDEO_PANEL;
Parth Dixit05f3c9f2016-03-18 17:14:57 +0530781 else if (platform_is_msm8917())
Jayant Shekhar9c0533e2016-01-28 11:17:18 +0530782 panel_id = TRULY_720P_VIDEO_PANEL;
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530783 else
784 panel_id = TRULY_1080P_VIDEO_PANEL;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700785 break;
feifanz174c82c2015-04-15 18:57:07 +0800786 case HW_PLATFORM_QRD:
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700787 if (hw_subtype == HW_PLATFORM_SUBTYPE_POLARIS) {
788 panel_id = BYD_1200P_VIDEO_PANEL;
789 break;
790 }
791
feifanz028544e2015-07-28 20:58:57 +0800792 target_id = board_target_id();
793 plat_hw_ver_major = ((target_id >> 16) & 0xFF);
794
795 /*
796 * 8952 SKUM DVT2 - HX8399A 1080p video panel
797 * 8952 SKUM EVT1/EVT2 - OTM1906C 1080p cmd panel
798 */
799 if (plat_hw_ver_major >= 4)
800 panel_id = HX8399A_1080P_VIDEO_PANEL;
801 else
802 panel_id = OTM1906C_1080P_CMD_PANEL;
Ray Zhangf95f5b92015-06-25 15:34:29 +0800803
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800804 if (platform_is_msm8937()){
Ray Zhang49cfcc82016-08-09 19:08:37 +0800805 if (hw_subtype == 0x80) {
806 /* 8940 SKU7 uses HX8394F */
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800807 panel_id = HX8394F_720P_VIDEO_PANEL;
Ray Zhang49cfcc82016-08-09 19:08:37 +0800808 } else {
809 /* 8937 SKU1 uses R69006, SKU2 uses HX8394F */
810 if (plat_hw_ver_major > 16)
811 panel_id = HX8394F_720P_VIDEO_PANEL;
812 else
813 panel_id = R69006_1080P_CMD_PANEL;
814 }
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800815 }
816
Lei Chen4b58d6d2018-03-15 17:52:11 +0800817 if (platform_is_sdm439()) {
818 panel_id = HX8399C_FHD_PLUSE_VIDEO_PANEL;
819 }
820
821 if (platform_is_sdm429()) {
822 panel_id = HX8399C_HD_PLUS_VIDEO_PANEL;
823 }
824
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800825 /* QRD EVT1 uses OTM1906C, and EVT2 uses HX8394F */
Ray Zhangf95f5b92015-06-25 15:34:29 +0800826 if (platform_is_msm8956()) {
827 switch (auto_pan_loop) {
828 case 0:
829 panel_id = HX8399A_1080P_VIDEO_PANEL;
830 break;
831 case 1:
832 panel_id = OTM1906C_1080P_CMD_PANEL;
833 break;
834 default:
835 panel_id = UNKNOWN_PANEL;
836 dprintf(CRITICAL, "Unknown panel\n");
837 return PANEL_TYPE_UNKNOWN;
838 }
839 auto_pan_loop++;
Ray Zhangfb6025a2016-04-08 10:57:30 +0800840 } else if (platform_is_msm8917()) {
841 if (hw_subtype == 0x0A) /* TMO target */
842 panel_id = LEAD_FL10802_FWVGA_VIDEO_PANEL;
843 else
844 panel_id = HX8394F_720P_VIDEO_PANEL;
Ray Zhangf95f5b92015-06-25 15:34:29 +0800845 }
846
feifanz174c82c2015-04-15 18:57:07 +0800847 break;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700848 default:
849 dprintf(CRITICAL, "Display not enabled for %d HW type\n",
850 hw_id);
851 return PANEL_TYPE_UNKNOWN;
852 }
853
854panel_init:
855 /*
856 * Update all data structures after 'panel_init' label. Only panel
857 * selection is supposed to happen before that.
858 */
Padmanabhan Komanduru0e19a362015-06-08 13:29:32 +0530859 if (platform_is_msm8956())
860 memcpy(panel_regulator_settings,
861 dcdc_regulator_settings_hpm, REGULATOR_SIZE);
862 else
863 memcpy(panel_regulator_settings,
864 dcdc_regulator_settings_lpm, REGULATOR_SIZE);
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700865 pinfo->pipe_type = MDSS_MDP_PIPE_TYPE_RGB;
866 return init_panel_data(panelstruct, pinfo, phy_db);
867}