blob: dde07f651813602a9de002a07f79b20d4e90bb75 [file] [log] [blame]
Frank Yi2b7e2b92018-04-25 16:24:45 +08001/* Copyright (c) 2015-2016, 2018 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 Komanduruc570f302018-04-30 09:32:31 +053066#include "include/panel_hx8399c_fhd_pluse_video.h"
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -070067
68/*---------------------------------------------------------------------------*/
69/* static panel selection variable */
70/*---------------------------------------------------------------------------*/
71enum {
72 TRULY_1080P_VIDEO_PANEL,
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +053073 TRULY_1080P_CMD_PANEL,
feifanz174c82c2015-04-15 18:57:07 +080074 OTM1906C_1080P_CMD_PANEL,
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +053075 SHARP_1080P_CMD_PANEL,
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +053076 NT35597_WQXGA_DUALDSI_VIDEO_PANEL,
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +053077 NT35597_WQXGA_DUALDSI_CMD_PANEL,
Ray Zhangf95f5b92015-06-25 15:34:29 +080078 HX8399A_1080P_VIDEO_PANEL,
Sandeep Pandaed082922015-08-03 12:18:25 +053079 NT35597_WQXGA_DSC_VIDEO_PANEL,
80 NT35597_WQXGA_DSC_CMD_PANEL,
Padmanabhan Komanduru4927c2c2015-08-21 14:55:16 +053081 HX8394D_720P_VIDEO_PANEL,
Sujeev Dias6bc9fa32015-08-03 23:13:44 -070082 BYD_1200P_VIDEO_PANEL,
Ray Zhang4bbc7b02015-12-04 16:07:20 +080083 R69006_1080P_CMD_PANEL,
84 R69006_1080P_VIDEO_PANEL,
85 HX8394F_720P_VIDEO_PANEL,
Padmanabhan Komandurue108ed02015-12-21 12:43:07 +053086 TRULY_720P_VIDEO_PANEL,
Padmanabhan Komanduru7460e442016-01-21 12:30:34 +053087 TRULY_WUXGA_VIDEO_PANEL,
Vishnuvardhan Prodduturia0989b32016-02-15 18:07:44 +053088 TRULY_720P_CMD_PANEL,
Ray Zhangfb6025a2016-04-08 10:57:30 +080089 LEAD_FL10802_FWVGA_VIDEO_PANEL,
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +053090 HX8399C_FHD_PLUSE_VIDEO_PANEL,
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -070091 UNKNOWN_PANEL
92};
93
94uint32_t panel_regulator_settings[] = {
95 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
96};
97
98/*
99 * The list of panels that are supported on this target.
100 * Any panel in this list can be selected using fastboot oem command.
101 */
102static struct panel_list supp_panels[] = {
103 {"truly_1080p_video", TRULY_1080P_VIDEO_PANEL},
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +0530104 {"truly_1080p_cmd", TRULY_1080P_CMD_PANEL},
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +0530105 {"sharp_1080p_cmd", SHARP_1080P_CMD_PANEL},
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530106 {"nt35597_wqxga_dualdsi_video", NT35597_WQXGA_DUALDSI_VIDEO_PANEL},
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +0530107 {"nt35597_wqxga_dualdsi_cmd", NT35597_WQXGA_DUALDSI_CMD_PANEL},
Ray Zhangf95f5b92015-06-25 15:34:29 +0800108 {"otm1906c_1080p_cmd", OTM1906C_1080P_CMD_PANEL},
109 {"hx8399a_1080p_video", HX8399A_1080P_VIDEO_PANEL},
Sandeep Pandaed082922015-08-03 12:18:25 +0530110 {"nt35597_wqxga_dsc_video", NT35597_WQXGA_DSC_VIDEO_PANEL},
111 {"nt35597_wqxga_dsc_cmd", NT35597_WQXGA_DSC_CMD_PANEL},
Padmanabhan Komanduru4927c2c2015-08-21 14:55:16 +0530112 {"hx8394d_720p_video", HX8394D_720P_VIDEO_PANEL},
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700113 {"byd_1200p_video", BYD_1200P_VIDEO_PANEL},
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800114 {"r69006_1080p_cmd",R69006_1080P_CMD_PANEL},
115 {"r69006_1080p_video",R69006_1080P_VIDEO_PANEL},
Padmanabhan Komandurue108ed02015-12-21 12:43:07 +0530116 {"hx8394f_720p_video", HX8394F_720P_VIDEO_PANEL},
Padmanabhan Komanduru7460e442016-01-21 12:30:34 +0530117 {"truly_720p_video", TRULY_720P_VIDEO_PANEL},
Vishnuvardhan Prodduturia0989b32016-02-15 18:07:44 +0530118 {"truly_wuxga_video", TRULY_WUXGA_VIDEO_PANEL},
119 {"truly_720p_cmd", TRULY_720P_CMD_PANEL},
Ray Zhangfb6025a2016-04-08 10:57:30 +0800120 {"lead_fl10802_fwvga_video", LEAD_FL10802_FWVGA_VIDEO_PANEL},
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +0530121 {"hx8399c_fhd_pluse_video", HX8399C_FHD_PLUSE_VIDEO_PANEL},
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700122};
123
124static uint32_t panel_id;
125
Sandeep Panda75fddaa2015-07-06 11:38:25 +0530126#define TRULY_1080P_PANEL_ON_DELAY 40
Sandeep Pandac797d542015-06-12 14:37:55 +0530127
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700128int oem_panel_rotation()
129{
130 return NO_ERROR;
131}
132
133int oem_panel_on()
134{
135 /*
136 *OEM can keep their panel specific on instructions in this
137 *function
feifanz525046b2015-06-01 20:31:06 +0800138 */
139 if (panel_id == OTM1906C_1080P_CMD_PANEL) {
140 /* needs extra delay to avoid unexpected artifacts */
141 mdelay(OTM1906C_1080P_CMD_PANEL_ON_DELAY);
Sandeep Panda75fddaa2015-07-06 11:38:25 +0530142 } else if (panel_id == TRULY_1080P_CMD_PANEL ||
143 panel_id == TRULY_1080P_VIDEO_PANEL) {
144 mdelay(TRULY_1080P_PANEL_ON_DELAY);
Ray Zhang6ec437c2015-12-04 16:08:08 +0800145 }else if (panel_id == R69006_1080P_CMD_PANEL) {
146 mdelay(R69006_1080P_CMD_PANEL_ON_DELAY);
feifanz525046b2015-06-01 20:31:06 +0800147 }
Sandeep Pandac797d542015-06-12 14:37:55 +0530148
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700149 return NO_ERROR;
150}
151
152int oem_panel_off()
153{
154 /* OEM can keep their panel specific off instructions
155 * in this function
156 */
157 return NO_ERROR;
158}
159
160static int init_panel_data(struct panel_struct *panelstruct,
161 struct msm_panel_info *pinfo,
162 struct mdss_dsi_phy_ctrl *phy_db)
163{
164 int pan_type = PANEL_TYPE_DSI;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700165 struct oem_panel_data *oem_data = mdss_dsi_get_oem_data_ptr();
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700166
167 switch (panel_id) {
168 case TRULY_1080P_VIDEO_PANEL:
169 panelstruct->paneldata = &truly_1080p_video_panel_data;
170 panelstruct->paneldata->panel_with_enable_gpio = 1;
171 panelstruct->panelres = &truly_1080p_video_panel_res;
172 panelstruct->color = &truly_1080p_video_color;
173 panelstruct->videopanel = &truly_1080p_video_video_panel;
174 panelstruct->commandpanel = &truly_1080p_video_command_panel;
175 panelstruct->state = &truly_1080p_video_state;
176 panelstruct->laneconfig = &truly_1080p_video_lane_config;
177 panelstruct->paneltiminginfo
178 = &truly_1080p_video_timing_info;
179 panelstruct->panelresetseq
180 = &truly_1080p_video_panel_reset_seq;
181 panelstruct->backlightinfo = &truly_1080p_video_backlight;
182 pinfo->mipi.panel_on_cmds
183 = truly_1080p_video_on_command;
184 pinfo->mipi.num_of_panel_on_cmds
185 = TRULY_1080P_VIDEO_ON_COMMAND;
186 pinfo->mipi.panel_off_cmds
187 = truly_1080p_video_off_command;
188 pinfo->mipi.num_of_panel_off_cmds
189 = TRULY_1080P_VIDEO_OFF_COMMAND;
190 memcpy(phy_db->timing,
191 truly_1080p_video_timings, TIMING_SIZE);
192 pinfo->mipi.signature = TRULY_1080P_VIDEO_SIGNATURE;
193 break;
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +0530194 case TRULY_1080P_CMD_PANEL:
195 panelstruct->paneldata = &truly_1080p_cmd_panel_data;
196 panelstruct->paneldata->panel_with_enable_gpio = 1;
197 panelstruct->panelres = &truly_1080p_cmd_panel_res;
198 panelstruct->color = &truly_1080p_cmd_color;
199 panelstruct->videopanel = &truly_1080p_cmd_video_panel;
200 panelstruct->commandpanel = &truly_1080p_cmd_command_panel;
201 panelstruct->state = &truly_1080p_cmd_state;
202 panelstruct->laneconfig = &truly_1080p_cmd_lane_config;
203 panelstruct->paneltiminginfo
204 = &truly_1080p_cmd_timing_info;
205 panelstruct->panelresetseq
206 = &truly_1080p_cmd_panel_reset_seq;
207 panelstruct->backlightinfo = &truly_1080p_cmd_backlight;
208 pinfo->mipi.panel_on_cmds
209 = truly_1080p_cmd_on_command;
210 pinfo->mipi.num_of_panel_on_cmds
211 = TRULY_1080P_CMD_ON_COMMAND;
212 pinfo->mipi.panel_off_cmds
213 = truly_1080p_cmd_off_command;
214 pinfo->mipi.num_of_panel_off_cmds
215 = TRULY_1080P_CMD_OFF_COMMAND;
216 memcpy(phy_db->timing,
217 truly_1080p_cmd_timings, TIMING_SIZE);
218 pinfo->mipi.signature = TRULY_1080P_CMD_SIGNATURE;
219 break;
feifanz174c82c2015-04-15 18:57:07 +0800220 case OTM1906C_1080P_CMD_PANEL:
221 panelstruct->paneldata = &otm1906c_1080p_cmd_panel_data;
222 panelstruct->paneldata->panel_with_enable_gpio = 1;
223 panelstruct->panelres = &otm1906c_1080p_cmd_panel_res;
224 panelstruct->color = &otm1906c_1080p_cmd_color;
225 panelstruct->videopanel = &otm1906c_1080p_cmd_video_panel;
226 panelstruct->commandpanel = &otm1906c_1080p_cmd_command_panel;
227 panelstruct->state = &otm1906c_1080p_cmd_state;
228 panelstruct->laneconfig = &otm1906c_1080p_cmd_lane_config;
229 panelstruct->paneltiminginfo
230 = &otm1906c_1080p_cmd_timing_info;
231 panelstruct->panelresetseq
232 = &otm1906c_1080p_cmd_panel_reset_seq;
233 panelstruct->backlightinfo = &otm1906c_1080p_cmd_backlight;
234 pinfo->mipi.panel_on_cmds
235 = otm1906c_1080p_cmd_on_command;
236 pinfo->mipi.num_of_panel_on_cmds
237 = OTM1906C_1080P_CMD_ON_COMMAND;
238 pinfo->mipi.panel_off_cmds
239 = otm1906c_1080p_cmd_off_command;
240 pinfo->mipi.num_of_panel_off_cmds
241 = OTM1906C_1080P_CMD_OFF_COMMAND;
242 memcpy(phy_db->timing,
243 otm1906c_1080p_cmd_timings, TIMING_SIZE);
244 pinfo->mipi.signature = OTM1906C_1080P_CMD_SIGNATURE;
245 break;
Ray Zhangf95f5b92015-06-25 15:34:29 +0800246 case HX8399A_1080P_VIDEO_PANEL:
247 panelstruct->paneldata = &hx8399a_1080p_video_panel_data;
248 panelstruct->panelres = &hx8399a_1080p_video_panel_res;
249 panelstruct->color = &hx8399a_1080p_video_color;
250 panelstruct->videopanel = &hx8399a_1080p_video_video_panel;
251 panelstruct->commandpanel = &hx8399a_1080p_video_command_panel;
252 panelstruct->state = &hx8399a_1080p_video_state;
253 panelstruct->laneconfig = &hx8399a_1080p_video_lane_config;
254 panelstruct->paneltiminginfo
255 = &hx8399a_1080p_video_timing_info;
256 panelstruct->panelresetseq
257 = &hx8399a_1080p_video_reset_seq;
258 panelstruct->backlightinfo = &hx8399a_1080p_video_backlight;
259 pinfo->mipi.panel_on_cmds
260 = hx8399a_1080p_video_on_command;
261 pinfo->mipi.num_of_panel_on_cmds
262 = HX8399A_1080P_VIDEO_ON_COMMAND;
263 pinfo->mipi.panel_off_cmds
264 = hx8399a_1080p_video_off_command;
265 pinfo->mipi.num_of_panel_off_cmds
266 = HX8399A_1080P_VIDEO_OFF_COMMAND;
267 memcpy(phy_db->timing,
268 hx8399a_1080p_video_timings, TIMING_SIZE);
269 pinfo->mipi.signature = HX8399A_1080P_VIDEO_SIGNATURE;
270 break;
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +0530271 case SHARP_1080P_CMD_PANEL:
272 panelstruct->paneldata = &sharp_1080p_cmd_panel_data;
273 panelstruct->panelres = &sharp_1080p_cmd_panel_res;
274 panelstruct->paneldata->panel_with_enable_gpio = 1;
275 panelstruct->color = &sharp_1080p_cmd_color;
276 panelstruct->videopanel = &sharp_1080p_cmd_video_panel;
277 panelstruct->commandpanel = &sharp_1080p_cmd_command_panel;
278 panelstruct->state = &sharp_1080p_cmd_state;
279 panelstruct->laneconfig = &sharp_1080p_cmd_lane_config;
280 panelstruct->paneltiminginfo
281 = &sharp_1080p_cmd_timing_info;
282 panelstruct->panelresetseq
283 = &sharp_1080p_cmd_panel_reset_seq;
284 panelstruct->backlightinfo = &sharp_1080p_cmd_backlight;
285 pinfo->mipi.panel_on_cmds
286 = sharp_1080p_cmd_on_command;
287 pinfo->mipi.num_of_panel_on_cmds
288 = SHARP_1080P_CMD_ON_COMMAND;
289 pinfo->mipi.panel_off_cmds
290 = sharp_1080p_cmd_off_command;
291 pinfo->mipi.num_of_panel_off_cmds
292 = SHARP_1080P_CMD_OFF_COMMAND;
293 memcpy(phy_db->timing,
294 sharp_1080p_cmd_timings, TIMING_SIZE);
295 break;
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530296 case NT35597_WQXGA_DUALDSI_VIDEO_PANEL:
297 panelstruct->paneldata = &nt35597_wqxga_dualdsi_video_panel_data;
298 panelstruct->paneldata->panel_operating_mode = DST_SPLIT_FLAG |
299 SPLIT_DISPLAY_FLAG | DUAL_DSI_FLAG;
300 panelstruct->paneldata->panel_with_enable_gpio = 0;
301
302 panelstruct->panelres = &nt35597_wqxga_dualdsi_video_panel_res;
303 panelstruct->color = &nt35597_wqxga_dualdsi_video_color;
304 panelstruct->videopanel = &nt35597_wqxga_dualdsi_video_video_panel;
305 panelstruct->commandpanel = &nt35597_wqxga_dualdsi_video_command_panel;
306 panelstruct->state = &nt35597_wqxga_dualdsi_video_state;
307 panelstruct->laneconfig = &nt35597_wqxga_dualdsi_video_lane_config;
308 panelstruct->paneltiminginfo
309 = &nt35597_wqxga_dualdsi_video_timing_info;
310 panelstruct->panelresetseq
311 = &nt35597_wqxga_dualdsi_video_reset_seq;
312 panelstruct->backlightinfo = &nt35597_wqxga_dualdsi_video_backlight;
313 pinfo->labibb = &nt35597_wqxga_dualdsi_video_labibb;
314
315 pinfo->mipi.panel_on_cmds
316 = nt35597_wqxga_dualdsi_video_on_command;
317 pinfo->mipi.num_of_panel_on_cmds
318 = NT35597_WQXGA_DUALDSI_VIDEO_ON_COMMAND;
319 pinfo->mipi.panel_off_cmds
320 = nt35597_wqxga_dualdsi_video_off_command;
321 pinfo->mipi.num_of_panel_off_cmds
322 = NT35597_WQXGA_DUALDSI_VIDEO_OFF_COMMAND;
323 memcpy(phy_db->timing, nt35597_wqxga_dualdsi_video_timings,
324 TIMING_SIZE);
325 pinfo->mipi.tx_eot_append = true;
326 break;
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +0530327 case NT35597_WQXGA_DUALDSI_CMD_PANEL:
328 panelstruct->paneldata = &nt35597_wqxga_dualdsi_cmd_panel_data;
329 panelstruct->paneldata->panel_operating_mode = DST_SPLIT_FLAG |
330 SPLIT_DISPLAY_FLAG | DUAL_DSI_FLAG;
331 panelstruct->paneldata->panel_with_enable_gpio = 0;
332
333 panelstruct->panelres = &nt35597_wqxga_dualdsi_cmd_panel_res;
334 panelstruct->color = &nt35597_wqxga_dualdsi_cmd_color;
335 panelstruct->videopanel = &nt35597_wqxga_dualdsi_cmd_video_panel;
336 panelstruct->commandpanel = &nt35597_wqxga_dualdsi_cmd_command_panel;
337 panelstruct->state = &nt35597_wqxga_dualdsi_cmd_state;
338 panelstruct->laneconfig = &nt35597_wqxga_dualdsi_cmd_lane_config;
339 panelstruct->paneltiminginfo
340 = &nt35597_wqxga_dualdsi_cmd_timing_info;
Padmanabhan Komanduru58fc57e2015-07-07 21:36:14 +0530341 /* Clkout timings are different for this panel on 8956 */
342 panelstruct->paneltiminginfo->tclk_post = 0x2b;
343 panelstruct->paneltiminginfo->tclk_pre = 0x28;
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +0530344 panelstruct->panelresetseq
345 = &nt35597_wqxga_dualdsi_cmd_reset_seq;
346 panelstruct->backlightinfo = &nt35597_wqxga_dualdsi_cmd_backlight;
347
348 pinfo->labibb = &nt35597_wqxga_dualdsi_cmd_labibb;
349
350 pinfo->mipi.panel_on_cmds
351 = nt35597_wqxga_dualdsi_cmd_on_command;
352 pinfo->mipi.num_of_panel_on_cmds
353 = NT35597_WQXGA_DUALDSI_CMD_ON_COMMAND;
354 pinfo->mipi.panel_off_cmds
355 = nt35597_wqxga_dualdsi_cmd_off_command;
356 pinfo->mipi.num_of_panel_off_cmds
357 = NT35597_WQXGA_DUALDSI_CMD_OFF_COMMAND;
358 memcpy(phy_db->timing, nt35597_wqxga_dualdsi_cmd_timings,
359 TIMING_SIZE);
360 pinfo->mipi.tx_eot_append = true;
361 break;
Sandeep Pandaed082922015-08-03 12:18:25 +0530362 case NT35597_WQXGA_DSC_VIDEO_PANEL:
363 panelstruct->paneldata = &nt35597_wqxga_dsc_video_panel_data;
364 panelstruct->paneldata->panel_with_enable_gpio = 0;
365 panelstruct->paneldata->panel_operating_mode = USE_DSI1_PLL_FLAG;
366 panelstruct->panelres = &nt35597_wqxga_dsc_video_panel_res;
367 panelstruct->color = &nt35597_wqxga_dsc_video_color;
368 panelstruct->videopanel = &nt35597_wqxga_dsc_video_video_panel;
369 panelstruct->commandpanel = &nt35597_wqxga_dsc_video_command_panel;
370 panelstruct->state = &nt35597_wqxga_dsc_video_state;
371 panelstruct->laneconfig = &nt35597_wqxga_dsc_video_lane_config;
372 panelstruct->paneltiminginfo
373 = &nt35597_wqxga_dsc_video_timing_info;
374 panelstruct->panelresetseq
375 = &nt35597_wqxga_dsc_video_reset_seq;
376 panelstruct->backlightinfo = &nt35597_wqxga_dsc_video_backlight;
377 pinfo->labibb = &nt35597_wqxga_dsc_video_labibb;
378
379 pinfo->mipi.panel_on_cmds
380 = nt35597_wqxga_dsc_video_on_command;
381 pinfo->mipi.num_of_panel_on_cmds
382 = NT35597_WQXGA_DSC_VIDEO_ON_COMMAND;
383 pinfo->mipi.panel_off_cmds
384 = nt35597_wqxga_dsc_video_off_command;
385 pinfo->mipi.num_of_panel_off_cmds
386 = NT35597_WQXGA_DSC_VIDEO_OFF_COMMAND;
387 memcpy(phy_db->timing, nt35597_wqxga_dsc_video_timings,
388 TIMING_SIZE);
389 /* Clkout timings are different for this panel on 8956 */
390 panelstruct->paneltiminginfo->tclk_post = 0x04;
391 panelstruct->paneltiminginfo->tclk_pre = 0x20;
392 pinfo->mipi.tx_eot_append = true;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700393
394 panelstruct->paneldata->panel_operating_mode &= ~DUAL_PIPE_FLAG;
395 panelstruct->config = &nt35597_wqxga_dsc_video_config0;
396 if (oem_data) {
397 switch (oem_data->cfg_num[0]) {
398 case -1: /* default */
399 case 0:
400 panelstruct->config =
401 &nt35597_wqxga_dsc_video_config0;
402 break;
403 default:
404 dprintf(CRITICAL, "topology config%d not supported. fallback to default config0\n",
405 oem_data->cfg_num[0]);
406 panelstruct->config = &nt35597_wqxga_dsc_video_config0;
407 }
408 }
409 pinfo->lm_split[0] = panelstruct->config->lm_split[0];
410 pinfo->lm_split[1] = panelstruct->config->lm_split[1];
411 pinfo->num_dsc_enc = panelstruct->config->num_dsc_enc;
Sandeep Pandaed082922015-08-03 12:18:25 +0530412 pinfo->compression_mode = COMPRESSION_DSC;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700413
Sandeep Pandaed082922015-08-03 12:18:25 +0530414 pinfo->dsc.parameter_calc = mdss_dsc_parameters_calc;
415 pinfo->dsc.dsc2buf = mdss_dsc_to_buf;
416 pinfo->dsc.dsi_dsc_config = mdss_dsc_dsi_config;
417 pinfo->dsc.mdp_dsc_config = mdss_dsc_mdp_config;
418 break;
419 case NT35597_WQXGA_DSC_CMD_PANEL:
420 panelstruct->paneldata = &nt35597_wqxga_dsc_cmd_panel_data;
421 panelstruct->paneldata->panel_with_enable_gpio = 0;
422 panelstruct->paneldata->panel_operating_mode = USE_DSI1_PLL_FLAG;
423 panelstruct->panelres = &nt35597_wqxga_dsc_cmd_panel_res;
424 panelstruct->color = &nt35597_wqxga_dsc_cmd_color;
425 panelstruct->videopanel = &nt35597_wqxga_dsc_cmd_video_panel;
426 panelstruct->commandpanel = &nt35597_wqxga_dsc_cmd_command_panel;
427 panelstruct->state = &nt35597_wqxga_dsc_cmd_state;
428 panelstruct->laneconfig = &nt35597_wqxga_dsc_cmd_lane_config;
429 panelstruct->paneltiminginfo
430 = &nt35597_wqxga_dsc_cmd_timing_info;
431 panelstruct->panelresetseq
432 = &nt35597_wqxga_dsc_cmd_reset_seq;
433 panelstruct->backlightinfo = &nt35597_wqxga_dsc_cmd_backlight;
434 pinfo->labibb = &nt35597_wqxga_dsc_cmd_labibb;
435
436 pinfo->mipi.panel_on_cmds
437 = nt35597_wqxga_dsc_cmd_on_command;
438 pinfo->mipi.num_of_panel_on_cmds
439 = NT35597_WQXGA_DSC_CMD_ON_COMMAND;
440 pinfo->mipi.panel_off_cmds
441 = nt35597_wqxga_dsc_cmd_off_command;
442 pinfo->mipi.num_of_panel_off_cmds
443 = NT35597_WQXGA_DSC_CMD_OFF_COMMAND;
444 memcpy(phy_db->timing, nt35597_wqxga_dsc_cmd_timings,
445 TIMING_SIZE);
446 /* Clkout timings are different for this panel on 8956 */
447 panelstruct->paneltiminginfo->tclk_post = 0x04;
448 panelstruct->paneltiminginfo->tclk_pre = 0x20;
449 pinfo->mipi.tx_eot_append = true;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700450
451 panelstruct->paneldata->panel_operating_mode &= ~DUAL_PIPE_FLAG;
452 panelstruct->config = &nt35597_wqxga_dsc_cmd_config0;
453 if (oem_data) {
454 switch (oem_data->cfg_num[0]) {
455 case -1: /* default */
456 case 0:
457 panelstruct->config =
458 &nt35597_wqxga_dsc_cmd_config0;
459 break;
460 default:
461 dprintf(CRITICAL, "topology config%d not supported. fallback to default config0\n",
462 oem_data->cfg_num[0]);
463 panelstruct->config = &nt35597_wqxga_dsc_cmd_config0;
464 }
465 }
466 pinfo->lm_split[0] = panelstruct->config->lm_split[0];
467 pinfo->lm_split[1] = panelstruct->config->lm_split[1];
468 pinfo->num_dsc_enc = panelstruct->config->num_dsc_enc;
Sandeep Pandaed082922015-08-03 12:18:25 +0530469 pinfo->compression_mode = COMPRESSION_DSC;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700470
Sandeep Pandaed082922015-08-03 12:18:25 +0530471 pinfo->dsc.parameter_calc = mdss_dsc_parameters_calc;
472 pinfo->dsc.dsc2buf = mdss_dsc_to_buf;
473 pinfo->dsc.dsi_dsc_config = mdss_dsc_dsi_config;
474 pinfo->dsc.mdp_dsc_config = mdss_dsc_mdp_config;
475 break;
Padmanabhan Komanduru4927c2c2015-08-21 14:55:16 +0530476 case HX8394D_720P_VIDEO_PANEL:
477 panelstruct->paneldata = &hx8394d_720p_video_panel_data;
478 panelstruct->panelres = &hx8394d_720p_video_panel_res;
479 panelstruct->color = &hx8394d_720p_video_color;
480 panelstruct->videopanel = &hx8394d_720p_video_video_panel;
481 panelstruct->commandpanel = &hx8394d_720p_video_command_panel;
482 panelstruct->state = &hx8394d_720p_video_state;
483 panelstruct->laneconfig = &hx8394d_720p_video_lane_config;
484 panelstruct->paneltiminginfo
485 = &hx8394d_720p_video_timing_info;
486 panelstruct->panelresetseq
487 = &hx8394d_720p_video_panel_reset_seq;
488 panelstruct->backlightinfo = &hx8394d_720p_video_backlight;
489 pinfo->mipi.panel_on_cmds
490 = hx8394d_720p_video_on_command;
491 pinfo->mipi.num_of_panel_on_cmds
492 = HX8394D_720P_VIDEO_ON_COMMAND;
493 pinfo->mipi.panel_off_cmds
494 = hx8394d_720p_video_off_command;
495 pinfo->mipi.num_of_panel_off_cmds
496 = HX8394D_720P_VIDEO_OFF_COMMAND;
497 memcpy(phy_db->timing,
498 hx8394d_720p_video_timings, TIMING_SIZE);
499 pinfo->mipi.signature = HX8394D_720P_VIDEO_SIGNATURE;
500 break;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800501 case R69006_1080P_CMD_PANEL:
502 panelstruct->paneldata = &r69006_1080p_cmd_panel_data;
503 panelstruct->panelres = &r69006_1080p_cmd_panel_res;
504 panelstruct->color = &r69006_1080p_cmd_color;
505 panelstruct->videopanel = &r69006_1080p_cmd_video_panel;
506 panelstruct->commandpanel = &r69006_1080p_cmd_command_panel;
507 panelstruct->state = &r69006_1080p_cmd_state;
508 panelstruct->laneconfig = &r69006_1080p_cmd_lane_config;
509 panelstruct->paneltiminginfo
510 = &r69006_1080p_cmd_timing_info;
511 panelstruct->panelresetseq
512 = &r69006_1080p_cmd_reset_seq;
513 panelstruct->backlightinfo = &r69006_1080p_cmd_backlight;
Ray Zhange9e3b692015-12-18 18:03:30 +0800514 pinfo->labibb = &r69006_1080p_cmd_labibb;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800515 pinfo->mipi.panel_on_cmds
516 = r69006_1080p_cmd_on_command;
517 pinfo->mipi.num_of_panel_on_cmds
518 = R69006_1080P_CMD_ON_COMMAND;
519 pinfo->mipi.panel_off_cmds
520 = r69006_1080p_cmd_off_command;
521 pinfo->mipi.num_of_panel_off_cmds
522 = R69006_1080P_CMD_OFF_COMMAND;
523 memcpy(phy_db->timing,
524 r69006_1080p_cmd_timings, TIMING_SIZE);
525 pinfo->mipi.signature = R69006_1080P_CMD_SIGNATURE;
Ray Zhangc8fd3632015-12-23 14:01:13 +0800526 pinfo->mipi.tx_eot_append = true;
527 pinfo->mipi.rx_eot_ignore = true;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800528 break;
529 case R69006_1080P_VIDEO_PANEL:
530 panelstruct->paneldata = &r69006_1080p_video_panel_data;
531 panelstruct->panelres = &r69006_1080p_video_panel_res;
532 panelstruct->color = &r69006_1080p_video_color;
533 panelstruct->videopanel = &r69006_1080p_video_video_panel;
534 panelstruct->commandpanel = &r69006_1080p_video_command_panel;
535 panelstruct->state = &r69006_1080p_video_state;
536 panelstruct->laneconfig = &r69006_1080p_video_lane_config;
537 panelstruct->paneltiminginfo
538 = &r69006_1080p_video_timing_info;
539 panelstruct->panelresetseq
540 = &r69006_1080p_video_reset_seq;
541 panelstruct->backlightinfo = &r69006_1080p_video_backlight;
Ray Zhange9e3b692015-12-18 18:03:30 +0800542 pinfo->labibb = &r69006_1080p_video_labibb;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800543 pinfo->mipi.panel_on_cmds
544 = r69006_1080p_video_on_command;
545 pinfo->mipi.num_of_panel_on_cmds
546 = R69006_1080P_VIDEO_ON_COMMAND;
547 pinfo->mipi.panel_off_cmds
548 = r69006_1080p_video_off_command;
549 pinfo->mipi.num_of_panel_off_cmds
550 = R69006_1080P_VIDEO_OFF_COMMAND;
551 memcpy(phy_db->timing,
552 r69006_1080p_video_timings, TIMING_SIZE);
553 pinfo->mipi.signature = R69006_1080P_VIDEO_SIGNATURE;
554 break;
555 case HX8394F_720P_VIDEO_PANEL:
556 panelstruct->paneldata = &hx8394f_720p_video_panel_data;
557 panelstruct->panelres = &hx8394f_720p_video_panel_res;
558 panelstruct->color = &hx8394f_720p_video_color;
559 panelstruct->videopanel = &hx8394f_720p_video_video_panel;
560 panelstruct->commandpanel = &hx8394f_720p_video_command_panel;
561 panelstruct->state = &hx8394f_720p_video_state;
562 panelstruct->laneconfig = &hx8394f_720p_video_lane_config;
563 panelstruct->paneltiminginfo
564 = &hx8394f_720p_video_timing_info;
565 panelstruct->panelresetseq
566 = &hx8394f_720p_video_reset_seq;
567 panelstruct->backlightinfo = &hx8394f_720p_video_backlight;
568 pinfo->mipi.panel_on_cmds
569 = hx8394f_720p_video_on_command;
570 pinfo->mipi.num_of_panel_on_cmds
571 = HX8394F_720P_VIDEO_ON_COMMAND;
572 pinfo->mipi.panel_off_cmds
573 = hx8394f_720p_video_off_command;
574 pinfo->mipi.num_of_panel_off_cmds
575 = HX8394F_720P_VIDEO_OFF_COMMAND;
576 memcpy(phy_db->timing,
577 hx8394f_720p_video_timings, TIMING_SIZE);
578 pinfo->mipi.signature = HX8394F_720P_VIDEO_SIGNATURE;
Frank Yi2b7e2b92018-04-25 16:24:45 +0800579 pinfo->disable_wled_labibb = true;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800580 break;
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700581 case BYD_1200P_VIDEO_PANEL:
582 panelstruct->paneldata = &byd_1200p_video_panel_data;
583 panelstruct->paneldata->panel_with_enable_gpio = 1;
584 panelstruct->panelres = &byd_1200p_video_panel_res;
585 panelstruct->color = &byd_1200p_video_color;
586 panelstruct->videopanel = &byd_1200p_video_video_panel;
587 panelstruct->commandpanel = &byd_1200p_video_command_panel;
588 panelstruct->state = &byd_1200p_video_state;
589 panelstruct->laneconfig = &byd_1200p_video_lane_config;
590 panelstruct->paneltiminginfo
591 = &byd_1200p_video_timing_info;
592 panelstruct->panelresetseq
593 = &byd_1200p_video_panel_reset_seq;
594 panelstruct->backlightinfo = &byd_1200p_video_backlight;
595 pinfo->mipi.panel_on_cmds
596 = byd_1200p_video_on_command;
597 pinfo->mipi.num_of_panel_on_cmds
598 = BYD_1200P_VIDEO_ON_COMMAND;
599 pinfo->mipi.panel_off_cmds
600 = byd_1200p_video_off_command;
601 pinfo->mipi.num_of_panel_off_cmds
602 = BYD_1200P_VIDEO_OFF_COMMAND;
603 memcpy(phy_db->timing,
604 byd_1200p_video_timings, TIMING_SIZE);
605 pinfo->mipi.signature = BYD_1200P_VIDEO_SIGNATURE;
606 phy_db->regulator_mode = DSI_PHY_REGULATOR_LDO_MODE;
607 break;
Padmanabhan Komandurue108ed02015-12-21 12:43:07 +0530608 case TRULY_720P_VIDEO_PANEL:
609 panelstruct->paneldata = &truly_720p_video_panel_data;
610 panelstruct->paneldata->panel_with_enable_gpio = 1;
611 panelstruct->panelres = &truly_720p_video_panel_res;
612 panelstruct->color = &truly_720p_video_color;
613 panelstruct->videopanel = &truly_720p_video_video_panel;
614 panelstruct->commandpanel = &truly_720p_video_command_panel;
615 panelstruct->state = &truly_720p_video_state;
616 panelstruct->laneconfig = &truly_720p_video_lane_config;
617 panelstruct->paneltiminginfo
618 = &truly_720p_video_timing_info;
619 panelstruct->panelresetseq
620 = &truly_720p_video_panel_reset_seq;
621 panelstruct->backlightinfo = &truly_720p_video_backlight;
622 pinfo->mipi.panel_on_cmds
623 = truly_720p_video_on_command;
624 pinfo->mipi.num_of_panel_on_cmds
625 = TRULY_720P_VIDEO_ON_COMMAND;
626 pinfo->mipi.panel_off_cmds
627 = truly_720p_video_off_command;
628 pinfo->mipi.num_of_panel_off_cmds
629 = TRULY_720P_VIDEO_OFF_COMMAND;
630 memcpy(phy_db->timing,
631 truly_720p_video_timings, TIMING_SIZE);
632 pinfo->mipi.signature = TRULY_720P_VIDEO_SIGNATURE;
633 pinfo->mipi.tx_eot_append = true;
634 break;
Padmanabhan Komanduru7460e442016-01-21 12:30:34 +0530635 case TRULY_WUXGA_VIDEO_PANEL:
636 panelstruct->paneldata = &truly_wuxga_video_panel_data;
637 panelstruct->paneldata->panel_with_enable_gpio = 1;
638 panelstruct->panelres = &truly_wuxga_video_panel_res;
639 panelstruct->color = &truly_wuxga_video_color;
640 panelstruct->videopanel = &truly_wuxga_video_video_panel;
641 panelstruct->commandpanel = &truly_wuxga_video_command_panel;
642 panelstruct->state = &truly_wuxga_video_state;
643 panelstruct->laneconfig = &truly_wuxga_video_lane_config;
644 panelstruct->paneltiminginfo
645 = &truly_wuxga_video_timing_info;
646 panelstruct->panelresetseq
647 = &truly_wuxga_video_panel_reset_seq;
648 panelstruct->backlightinfo = &truly_wuxga_video_backlight;
649 pinfo->mipi.panel_on_cmds
650 = truly_wuxga_video_on_command;
651 pinfo->mipi.num_of_panel_on_cmds
652 = TRULY_WUXGA_VIDEO_ON_COMMAND;
653 pinfo->mipi.panel_off_cmds
654 = truly_wuxga_video_off_command;
655 pinfo->mipi.num_of_panel_off_cmds
656 = TRULY_WUXGA_VIDEO_OFF_COMMAND;
657 memcpy(phy_db->timing,
658 truly_wuxga_video_timings, TIMING_SIZE);
659 pinfo->mipi.signature = TRULY_WUXGA_VIDEO_SIGNATURE;
660 break;
Vishnuvardhan Prodduturia0989b32016-02-15 18:07:44 +0530661 case TRULY_720P_CMD_PANEL:
662 panelstruct->paneldata = &truly_720p_cmd_panel_data;
663 panelstruct->paneldata->panel_with_enable_gpio = 1;
664 panelstruct->panelres = &truly_720p_cmd_panel_res;
665 panelstruct->color = &truly_720p_cmd_color;
666 panelstruct->videopanel = &truly_720p_cmd_video_panel;
667 panelstruct->commandpanel = &truly_720p_cmd_command_panel;
668 panelstruct->state = &truly_720p_cmd_state;
669 panelstruct->laneconfig = &truly_720p_cmd_lane_config;
670 panelstruct->paneltiminginfo
671 = &truly_720p_cmd_timing_info;
672 panelstruct->panelresetseq
673 = &truly_720p_cmd_panel_reset_seq;
674 panelstruct->backlightinfo = &truly_720p_cmd_backlight;
675 pinfo->mipi.panel_on_cmds
676 = truly_720p_cmd_on_command;
677 pinfo->mipi.num_of_panel_on_cmds
678 = TRULY_720P_CMD_ON_COMMAND;
679 pinfo->mipi.panel_off_cmds
680 = truly_720p_cmd_off_command;
681 pinfo->mipi.num_of_panel_off_cmds
682 = TRULY_720P_CMD_OFF_COMMAND;
683 memcpy(phy_db->timing,
684 truly_720p_cmd_timings, TIMING_SIZE);
685 pinfo->mipi.signature = TRULY_720P_CMD_SIGNATURE;
686 pinfo->mipi.tx_eot_append = true;
687 break;
Ray Zhangfb6025a2016-04-08 10:57:30 +0800688 case LEAD_FL10802_FWVGA_VIDEO_PANEL:
689 panelstruct->paneldata = &lead_fl10802_fwvga_video_panel_data;
690 panelstruct->panelres = &lead_fl10802_fwvga_video_panel_res;
691 panelstruct->color = &lead_fl10802_fwvga_video_color;
692 panelstruct->videopanel = &lead_fl10802_fwvga_video_video_panel;
693 panelstruct->commandpanel
694 = &lead_fl10802_fwvga_video_command_panel;
695 panelstruct->state = &lead_fl10802_fwvga_video_state;
696 panelstruct->laneconfig = &lead_fl10802_fwvga_video_lane_config;
697 panelstruct->paneltiminginfo
698 = &lead_fl10802_fwvga_video_timing_info;
699 panelstruct->panelresetseq
700 = &lead_fl10802_fwvga_video_reset_seq;
701 panelstruct->backlightinfo
702 = &lead_fl10802_fwvga_video_backlight;
703 pinfo->mipi.panel_on_cmds
704 = lead_fl10802_fwvga_video_on_command;
705 pinfo->mipi.num_of_panel_on_cmds
706 = LEAD_FL10802_FWVGA_VIDEO_ON_COMMAND;
707 pinfo->mipi.panel_off_cmds
708 = lead_fl10802_fwvga_video_off_command;
709 pinfo->mipi.num_of_panel_off_cmds
710 = LEAD_FL10802_FWVGA_VIDEO_OFF_COMMAND;
711 memcpy(phy_db->timing,
712 lead_fl10802_fwvga_video_timings, TIMING_SIZE);
713 pinfo->mipi.signature = LEAD_FL10802_FWVGA_VIDEO_SIGNATURE;
Ray Zhange3eba402016-05-13 10:33:18 +0800714 pinfo->mipi.cmds_post_tg = 1;
Ray Zhangfb6025a2016-04-08 10:57:30 +0800715 break;
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +0530716 case HX8399C_FHD_PLUSE_VIDEO_PANEL:
717 panelstruct->paneldata = &hx8399c_fhd_pluse_video_panel_data;
718 panelstruct->panelres = &hx8399c_fhd_pluse_video_panel_res;
719 panelstruct->color = &hx8399c_fhd_pluse_video_color;
720 panelstruct->videopanel =
721 &hx8399c_fhd_pluse_video_video_panel;
722 panelstruct->commandpanel =
723 &hx8399c_fhd_pluse_video_command_panel;
724 panelstruct->state = &hx8399c_fhd_pluse_video_state;
725 panelstruct->laneconfig =
726 &hx8399c_fhd_pluse_video_lane_config;
727 panelstruct->paneltiminginfo
728 = &hx8399c_fhd_pluse_video_timing_info;
729 panelstruct->panelresetseq
730 = &hx8399c_fhd_pluse_video_panel_reset_seq;
731 panelstruct->backlightinfo = &hx8399c_fhd_pluse_video_backlight;
732 pinfo->labibb = &hx8399c_fhd_pluse_video_labibb;
733 pinfo->mipi.panel_on_cmds
734 = hx8399c_fhd_pluse_video_on_command;
735 pinfo->mipi.num_of_panel_on_cmds
736 = HX8399C_FHD_PLUSE_VIDEO_ON_COMMAND;
737 pinfo->mipi.panel_off_cmds
738 = hx8399c_fhd_pluse_video_off_command;
739 pinfo->mipi.num_of_panel_off_cmds
740 = HX8399C_FHD_PLUSE_VIDEO_OFF_COMMAND;
741 if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
742 memcpy(phy_db->timing,
743 hx8399c_fhd_pluse_video_12nm_timings,
744 TIMING_SIZE_12NM);
745 else
746 memcpy(phy_db->timing, hx8399c_fhd_pluse_video_timings,
747 TIMING_SIZE);
748 pinfo->mipi.signature = HX8399C_FHD_PLUSE_VIDEO_SIGNATURE;
749 break;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700750 case UNKNOWN_PANEL:
751 default:
752 memset(panelstruct, 0, sizeof(struct panel_struct));
753 memset(pinfo->mipi.panel_on_cmds, 0,
754 sizeof(struct mipi_dsi_cmd));
755 pinfo->mipi.num_of_panel_on_cmds = 0;
756 memset(pinfo->mipi.panel_off_cmds, 0,
757 sizeof(struct mipi_dsi_cmd));
758 pinfo->mipi.num_of_panel_off_cmds = 0;
759 memset(phy_db->timing, 0, TIMING_SIZE);
760 pan_type = PANEL_TYPE_UNKNOWN;
761 break;
762 }
Ujwal Patel41a665a2015-07-17 13:51:30 -0700763
764 dprintf(SPEW, "lm_split[0]=%d lm_split[1]=%d mode=0x%x\n",
765 pinfo->lm_split[0], pinfo->lm_split[1],
766 panelstruct->paneldata->panel_operating_mode);
767
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700768 return pan_type;
769}
770
Ray Zhangf95f5b92015-06-25 15:34:29 +0800771#define DISPLAY_MAX_PANEL_DETECTION 2
772static uint32_t auto_pan_loop = 0;
773
774uint32_t oem_panel_max_auto_detect_panels()
775{
776 return target_panel_auto_detect_enabled() ?
777 DISPLAY_MAX_PANEL_DETECTION : 0;
778}
779
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700780int oem_panel_select(const char *panel_name, struct panel_struct *panelstruct,
781 struct msm_panel_info *pinfo,
782 struct mdss_dsi_phy_ctrl *phy_db)
783{
784 uint32_t hw_id = board_hardware_id();
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700785 uint32_t hw_subtype = board_hardware_subtype();
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700786 int32_t panel_override_id;
feifanz028544e2015-07-28 20:58:57 +0800787 uint32_t target_id, plat_hw_ver_major;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700788
789 if (panel_name) {
790 panel_override_id = panel_name_to_id(supp_panels,
791 ARRAY_SIZE(supp_panels), panel_name);
792
793 if (panel_override_id < 0) {
794 dprintf(CRITICAL, "Not able to search the panel:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530795 panel_name);
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700796 } else if (panel_override_id < UNKNOWN_PANEL) {
797 /* panel override using fastboot oem command */
798 panel_id = panel_override_id;
799
800 dprintf(INFO, "OEM panel override:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530801 panel_name);
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700802 goto panel_init;
803 }
804 }
805
806 switch (hw_id) {
807 case HW_PLATFORM_MTP:
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530808 if (platform_is_msm8956())
809 panel_id = NT35597_WQXGA_DUALDSI_VIDEO_PANEL;
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +0530810 else if (platform_is_msm8917())
Jayant Shekhar9c0533e2016-01-28 11:17:18 +0530811 panel_id = TRULY_720P_VIDEO_PANEL;
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +0530812 else if (platform_is_sdm439())
813 panel_id = HX8399C_FHD_PLUSE_VIDEO_PANEL;
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530814 else
815 panel_id = TRULY_1080P_VIDEO_PANEL;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700816 break;
817 case HW_PLATFORM_SURF:
Vishnuvardhan Prodduturie116c002015-07-14 17:14:25 +0530818 case HW_PLATFORM_RCM:
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530819 if (platform_is_msm8956())
820 panel_id = NT35597_WQXGA_DUALDSI_VIDEO_PANEL;
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +0530821 else if (platform_is_msm8917())
Jayant Shekhar9c0533e2016-01-28 11:17:18 +0530822 panel_id = TRULY_720P_VIDEO_PANEL;
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +0530823 else if (platform_is_sdm439())
824 panel_id = HX8399C_FHD_PLUSE_VIDEO_PANEL;
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530825 else
826 panel_id = TRULY_1080P_VIDEO_PANEL;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700827 break;
feifanz174c82c2015-04-15 18:57:07 +0800828 case HW_PLATFORM_QRD:
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700829 if (hw_subtype == HW_PLATFORM_SUBTYPE_POLARIS) {
830 panel_id = BYD_1200P_VIDEO_PANEL;
831 break;
832 }
833
feifanz028544e2015-07-28 20:58:57 +0800834 target_id = board_target_id();
835 plat_hw_ver_major = ((target_id >> 16) & 0xFF);
836
837 /*
838 * 8952 SKUM DVT2 - HX8399A 1080p video panel
839 * 8952 SKUM EVT1/EVT2 - OTM1906C 1080p cmd panel
840 */
841 if (plat_hw_ver_major >= 4)
842 panel_id = HX8399A_1080P_VIDEO_PANEL;
843 else
844 panel_id = OTM1906C_1080P_CMD_PANEL;
Ray Zhangf95f5b92015-06-25 15:34:29 +0800845
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800846 if (platform_is_msm8937()){
Ray Zhang49cfcc82016-08-09 19:08:37 +0800847 if (hw_subtype == 0x80) {
848 /* 8940 SKU7 uses HX8394F */
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800849 panel_id = HX8394F_720P_VIDEO_PANEL;
Ray Zhang49cfcc82016-08-09 19:08:37 +0800850 } else {
851 /* 8937 SKU1 uses R69006, SKU2 uses HX8394F */
852 if (plat_hw_ver_major > 16)
853 panel_id = HX8394F_720P_VIDEO_PANEL;
854 else
855 panel_id = R69006_1080P_CMD_PANEL;
856 }
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800857 }
858
859 /* QRD EVT1 uses OTM1906C, and EVT2 uses HX8394F */
Ray Zhangf95f5b92015-06-25 15:34:29 +0800860 if (platform_is_msm8956()) {
861 switch (auto_pan_loop) {
862 case 0:
863 panel_id = HX8399A_1080P_VIDEO_PANEL;
864 break;
865 case 1:
866 panel_id = OTM1906C_1080P_CMD_PANEL;
867 break;
868 default:
869 panel_id = UNKNOWN_PANEL;
870 dprintf(CRITICAL, "Unknown panel\n");
871 return PANEL_TYPE_UNKNOWN;
872 }
873 auto_pan_loop++;
Ray Zhangfb6025a2016-04-08 10:57:30 +0800874 } else if (platform_is_msm8917()) {
875 if (hw_subtype == 0x0A) /* TMO target */
876 panel_id = LEAD_FL10802_FWVGA_VIDEO_PANEL;
877 else
878 panel_id = HX8394F_720P_VIDEO_PANEL;
Ray Zhangf95f5b92015-06-25 15:34:29 +0800879 }
880
feifanz174c82c2015-04-15 18:57:07 +0800881 break;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700882 default:
883 dprintf(CRITICAL, "Display not enabled for %d HW type\n",
884 hw_id);
885 return PANEL_TYPE_UNKNOWN;
886 }
887
888panel_init:
889 /*
890 * Update all data structures after 'panel_init' label. Only panel
891 * selection is supposed to happen before that.
892 */
Padmanabhan Komanduru2ab03a62018-05-17 14:38:59 +0530893 if (platform_is_sdm439() || platform_is_sdm429()) {
894 phy_db->pll_type = DSI_PLL_TYPE_12NM;
895 pinfo->lane_config = mdss_dsi_lane_config;
896 goto end;
897 }
898
Padmanabhan Komanduru0e19a362015-06-08 13:29:32 +0530899 if (platform_is_msm8956())
900 memcpy(panel_regulator_settings,
901 dcdc_regulator_settings_hpm, REGULATOR_SIZE);
902 else
903 memcpy(panel_regulator_settings,
904 dcdc_regulator_settings_lpm, REGULATOR_SIZE);
Padmanabhan Komanduru2ab03a62018-05-17 14:38:59 +0530905end:
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700906 pinfo->pipe_type = MDSS_MDP_PIPE_TYPE_RGB;
907 return init_panel_data(panelstruct, pinfo, phy_db);
908}