blob: e49252c199ea3979f1788b517ed1d94736b07469 [file] [log] [blame]
Xipeng Gu5affb812019-06-18 14:59:17 +08001/* Copyright (c) 2015-2016, 2018-2019 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 Komanduru19636322018-04-30 16:52:59 +053067#include "include/panel_hx8399c_hd_plus_video.h"
Xipeng Gu5affb812019-06-18 14:59:17 +080068#include "include/panel_edo_rm67162_qvga_cmd.h"
Padmanabhan Komandurub5968282018-05-07 14:07:54 +053069#include "include/panel_nt35695b_truly_fhd_video.h"
70#include "include/panel_nt35695b_truly_fhd_cmd.h"
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -070071
72/*---------------------------------------------------------------------------*/
73/* static panel selection variable */
74/*---------------------------------------------------------------------------*/
75enum {
76 TRULY_1080P_VIDEO_PANEL,
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +053077 TRULY_1080P_CMD_PANEL,
feifanz174c82c2015-04-15 18:57:07 +080078 OTM1906C_1080P_CMD_PANEL,
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +053079 SHARP_1080P_CMD_PANEL,
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +053080 NT35597_WQXGA_DUALDSI_VIDEO_PANEL,
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +053081 NT35597_WQXGA_DUALDSI_CMD_PANEL,
Ray Zhangf95f5b92015-06-25 15:34:29 +080082 HX8399A_1080P_VIDEO_PANEL,
Sandeep Pandaed082922015-08-03 12:18:25 +053083 NT35597_WQXGA_DSC_VIDEO_PANEL,
84 NT35597_WQXGA_DSC_CMD_PANEL,
Padmanabhan Komanduru4927c2c2015-08-21 14:55:16 +053085 HX8394D_720P_VIDEO_PANEL,
Sujeev Dias6bc9fa32015-08-03 23:13:44 -070086 BYD_1200P_VIDEO_PANEL,
Ray Zhang4bbc7b02015-12-04 16:07:20 +080087 R69006_1080P_CMD_PANEL,
88 R69006_1080P_VIDEO_PANEL,
89 HX8394F_720P_VIDEO_PANEL,
Padmanabhan Komandurue108ed02015-12-21 12:43:07 +053090 TRULY_720P_VIDEO_PANEL,
Padmanabhan Komanduru7460e442016-01-21 12:30:34 +053091 TRULY_WUXGA_VIDEO_PANEL,
Vishnuvardhan Prodduturia0989b32016-02-15 18:07:44 +053092 TRULY_720P_CMD_PANEL,
Ray Zhangfb6025a2016-04-08 10:57:30 +080093 LEAD_FL10802_FWVGA_VIDEO_PANEL,
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +053094 HX8399C_FHD_PLUSE_VIDEO_PANEL,
Padmanabhan Komanduru19636322018-04-30 16:52:59 +053095 HX8399C_HD_PLUS_VIDEO_PANEL,
Padmanabhan Komandurub5968282018-05-07 14:07:54 +053096 NT35695B_TRULY_FHD_VIDEO_PANEL,
97 NT35695B_TRULY_FHD_CMD_PANEL,
Xipeng Gu5affb812019-06-18 14:59:17 +080098 RM67162_QVGA_CMD_PANEL,
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -070099 UNKNOWN_PANEL
100};
101
102uint32_t panel_regulator_settings[] = {
103 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
104};
105
106/*
107 * The list of panels that are supported on this target.
108 * Any panel in this list can be selected using fastboot oem command.
109 */
110static struct panel_list supp_panels[] = {
111 {"truly_1080p_video", TRULY_1080P_VIDEO_PANEL},
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +0530112 {"truly_1080p_cmd", TRULY_1080P_CMD_PANEL},
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +0530113 {"sharp_1080p_cmd", SHARP_1080P_CMD_PANEL},
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530114 {"nt35597_wqxga_dualdsi_video", NT35597_WQXGA_DUALDSI_VIDEO_PANEL},
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +0530115 {"nt35597_wqxga_dualdsi_cmd", NT35597_WQXGA_DUALDSI_CMD_PANEL},
Ray Zhangf95f5b92015-06-25 15:34:29 +0800116 {"otm1906c_1080p_cmd", OTM1906C_1080P_CMD_PANEL},
117 {"hx8399a_1080p_video", HX8399A_1080P_VIDEO_PANEL},
Sandeep Pandaed082922015-08-03 12:18:25 +0530118 {"nt35597_wqxga_dsc_video", NT35597_WQXGA_DSC_VIDEO_PANEL},
119 {"nt35597_wqxga_dsc_cmd", NT35597_WQXGA_DSC_CMD_PANEL},
Padmanabhan Komanduru4927c2c2015-08-21 14:55:16 +0530120 {"hx8394d_720p_video", HX8394D_720P_VIDEO_PANEL},
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700121 {"byd_1200p_video", BYD_1200P_VIDEO_PANEL},
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800122 {"r69006_1080p_cmd",R69006_1080P_CMD_PANEL},
123 {"r69006_1080p_video",R69006_1080P_VIDEO_PANEL},
Padmanabhan Komandurue108ed02015-12-21 12:43:07 +0530124 {"hx8394f_720p_video", HX8394F_720P_VIDEO_PANEL},
Padmanabhan Komanduru7460e442016-01-21 12:30:34 +0530125 {"truly_720p_video", TRULY_720P_VIDEO_PANEL},
Vishnuvardhan Prodduturia0989b32016-02-15 18:07:44 +0530126 {"truly_wuxga_video", TRULY_WUXGA_VIDEO_PANEL},
127 {"truly_720p_cmd", TRULY_720P_CMD_PANEL},
Ray Zhangfb6025a2016-04-08 10:57:30 +0800128 {"lead_fl10802_fwvga_video", LEAD_FL10802_FWVGA_VIDEO_PANEL},
Padmanabhan Komanduru19636322018-04-30 16:52:59 +0530129 {"hx8399c_fhd_plus_video", HX8399C_FHD_PLUSE_VIDEO_PANEL},
130 {"hx8399c_hd_plus_video", HX8399C_HD_PLUS_VIDEO_PANEL},
Padmanabhan Komandurub5968282018-05-07 14:07:54 +0530131 {"nt35695b_truly_fhd_video", NT35695B_TRULY_FHD_VIDEO_PANEL},
132 {"nt35695b_truly_fhd_cmd", NT35695B_TRULY_FHD_CMD_PANEL},
Xipeng Gu5affb812019-06-18 14:59:17 +0800133 {"rm67162_qvga_cmd", RM67162_QVGA_CMD_PANEL},
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700134};
135
136static uint32_t panel_id;
137
Sandeep Panda75fddaa2015-07-06 11:38:25 +0530138#define TRULY_1080P_PANEL_ON_DELAY 40
Sandeep Pandac797d542015-06-12 14:37:55 +0530139
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700140int oem_panel_rotation()
141{
142 return NO_ERROR;
143}
144
145int oem_panel_on()
146{
147 /*
148 *OEM can keep their panel specific on instructions in this
149 *function
feifanz525046b2015-06-01 20:31:06 +0800150 */
151 if (panel_id == OTM1906C_1080P_CMD_PANEL) {
152 /* needs extra delay to avoid unexpected artifacts */
153 mdelay(OTM1906C_1080P_CMD_PANEL_ON_DELAY);
Sandeep Panda75fddaa2015-07-06 11:38:25 +0530154 } else if (panel_id == TRULY_1080P_CMD_PANEL ||
155 panel_id == TRULY_1080P_VIDEO_PANEL) {
156 mdelay(TRULY_1080P_PANEL_ON_DELAY);
Ray Zhang6ec437c2015-12-04 16:08:08 +0800157 }else if (panel_id == R69006_1080P_CMD_PANEL) {
158 mdelay(R69006_1080P_CMD_PANEL_ON_DELAY);
feifanz525046b2015-06-01 20:31:06 +0800159 }
Sandeep Pandac797d542015-06-12 14:37:55 +0530160
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700161 return NO_ERROR;
162}
163
164int oem_panel_off()
165{
166 /* OEM can keep their panel specific off instructions
167 * in this function
168 */
169 return NO_ERROR;
170}
171
172static int init_panel_data(struct panel_struct *panelstruct,
173 struct msm_panel_info *pinfo,
174 struct mdss_dsi_phy_ctrl *phy_db)
175{
176 int pan_type = PANEL_TYPE_DSI;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700177 struct oem_panel_data *oem_data = mdss_dsi_get_oem_data_ptr();
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700178
179 switch (panel_id) {
180 case TRULY_1080P_VIDEO_PANEL:
181 panelstruct->paneldata = &truly_1080p_video_panel_data;
Padmanabhan Komanduru799dfd02018-06-18 20:00:29 +0530182 panelstruct->backlightinfo = &truly_1080p_video_backlight;
183 if (platform_is_sdm439() || platform_is_sdm429()) {
184 panelstruct->paneldata->panel_with_enable_gpio = 0;
185 panelstruct->backlightinfo->bl_interface_type = 0;
186 } else {
187 panelstruct->paneldata->panel_with_enable_gpio = 1;
188 }
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700189 panelstruct->panelres = &truly_1080p_video_panel_res;
190 panelstruct->color = &truly_1080p_video_color;
191 panelstruct->videopanel = &truly_1080p_video_video_panel;
192 panelstruct->commandpanel = &truly_1080p_video_command_panel;
193 panelstruct->state = &truly_1080p_video_state;
194 panelstruct->laneconfig = &truly_1080p_video_lane_config;
195 panelstruct->paneltiminginfo
196 = &truly_1080p_video_timing_info;
197 panelstruct->panelresetseq
198 = &truly_1080p_video_panel_reset_seq;
Padmanabhan Komanduru799dfd02018-06-18 20:00:29 +0530199 pinfo->labibb = &truly_1080p_video_labibb;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700200 pinfo->mipi.panel_on_cmds
201 = truly_1080p_video_on_command;
202 pinfo->mipi.num_of_panel_on_cmds
203 = TRULY_1080P_VIDEO_ON_COMMAND;
204 pinfo->mipi.panel_off_cmds
205 = truly_1080p_video_off_command;
206 pinfo->mipi.num_of_panel_off_cmds
207 = TRULY_1080P_VIDEO_OFF_COMMAND;
Padmanabhan Komanduru799dfd02018-06-18 20:00:29 +0530208 if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
209 memcpy(phy_db->timing,
210 truly_1080p_video_12nm_timings,
211 TIMING_SIZE_12NM);
212 else
213 memcpy(phy_db->timing,
214 truly_1080p_video_timings, TIMING_SIZE);
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700215 pinfo->mipi.signature = TRULY_1080P_VIDEO_SIGNATURE;
216 break;
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +0530217 case TRULY_1080P_CMD_PANEL:
218 panelstruct->paneldata = &truly_1080p_cmd_panel_data;
Padmanabhan Komanduru799dfd02018-06-18 20:00:29 +0530219 panelstruct->backlightinfo = &truly_1080p_cmd_backlight;
220 if (platform_is_sdm439() || platform_is_sdm429()) {
221 panelstruct->paneldata->panel_with_enable_gpio = 0;
222 panelstruct->backlightinfo->bl_interface_type = 0;
223 } else {
224 panelstruct->paneldata->panel_with_enable_gpio = 1;
225 }
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +0530226 panelstruct->panelres = &truly_1080p_cmd_panel_res;
227 panelstruct->color = &truly_1080p_cmd_color;
228 panelstruct->videopanel = &truly_1080p_cmd_video_panel;
229 panelstruct->commandpanel = &truly_1080p_cmd_command_panel;
230 panelstruct->state = &truly_1080p_cmd_state;
231 panelstruct->laneconfig = &truly_1080p_cmd_lane_config;
232 panelstruct->paneltiminginfo
233 = &truly_1080p_cmd_timing_info;
234 panelstruct->panelresetseq
235 = &truly_1080p_cmd_panel_reset_seq;
Padmanabhan Komanduru799dfd02018-06-18 20:00:29 +0530236 pinfo->labibb = &truly_1080p_cmd_labibb;
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +0530237 pinfo->mipi.panel_on_cmds
238 = truly_1080p_cmd_on_command;
239 pinfo->mipi.num_of_panel_on_cmds
240 = TRULY_1080P_CMD_ON_COMMAND;
241 pinfo->mipi.panel_off_cmds
242 = truly_1080p_cmd_off_command;
243 pinfo->mipi.num_of_panel_off_cmds
244 = TRULY_1080P_CMD_OFF_COMMAND;
Padmanabhan Komanduru799dfd02018-06-18 20:00:29 +0530245 if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
246 memcpy(phy_db->timing,
247 truly_1080p_cmd_12nm_timings,
248 TIMING_SIZE_12NM);
249 else
250 memcpy(phy_db->timing,
251 truly_1080p_cmd_timings, TIMING_SIZE);
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +0530252 pinfo->mipi.signature = TRULY_1080P_CMD_SIGNATURE;
253 break;
feifanz174c82c2015-04-15 18:57:07 +0800254 case OTM1906C_1080P_CMD_PANEL:
255 panelstruct->paneldata = &otm1906c_1080p_cmd_panel_data;
256 panelstruct->paneldata->panel_with_enable_gpio = 1;
257 panelstruct->panelres = &otm1906c_1080p_cmd_panel_res;
258 panelstruct->color = &otm1906c_1080p_cmd_color;
259 panelstruct->videopanel = &otm1906c_1080p_cmd_video_panel;
260 panelstruct->commandpanel = &otm1906c_1080p_cmd_command_panel;
261 panelstruct->state = &otm1906c_1080p_cmd_state;
262 panelstruct->laneconfig = &otm1906c_1080p_cmd_lane_config;
263 panelstruct->paneltiminginfo
264 = &otm1906c_1080p_cmd_timing_info;
265 panelstruct->panelresetseq
266 = &otm1906c_1080p_cmd_panel_reset_seq;
267 panelstruct->backlightinfo = &otm1906c_1080p_cmd_backlight;
268 pinfo->mipi.panel_on_cmds
269 = otm1906c_1080p_cmd_on_command;
270 pinfo->mipi.num_of_panel_on_cmds
271 = OTM1906C_1080P_CMD_ON_COMMAND;
272 pinfo->mipi.panel_off_cmds
273 = otm1906c_1080p_cmd_off_command;
274 pinfo->mipi.num_of_panel_off_cmds
275 = OTM1906C_1080P_CMD_OFF_COMMAND;
276 memcpy(phy_db->timing,
277 otm1906c_1080p_cmd_timings, TIMING_SIZE);
278 pinfo->mipi.signature = OTM1906C_1080P_CMD_SIGNATURE;
279 break;
Ray Zhangf95f5b92015-06-25 15:34:29 +0800280 case HX8399A_1080P_VIDEO_PANEL:
281 panelstruct->paneldata = &hx8399a_1080p_video_panel_data;
282 panelstruct->panelres = &hx8399a_1080p_video_panel_res;
283 panelstruct->color = &hx8399a_1080p_video_color;
284 panelstruct->videopanel = &hx8399a_1080p_video_video_panel;
285 panelstruct->commandpanel = &hx8399a_1080p_video_command_panel;
286 panelstruct->state = &hx8399a_1080p_video_state;
287 panelstruct->laneconfig = &hx8399a_1080p_video_lane_config;
288 panelstruct->paneltiminginfo
289 = &hx8399a_1080p_video_timing_info;
290 panelstruct->panelresetseq
291 = &hx8399a_1080p_video_reset_seq;
292 panelstruct->backlightinfo = &hx8399a_1080p_video_backlight;
293 pinfo->mipi.panel_on_cmds
294 = hx8399a_1080p_video_on_command;
295 pinfo->mipi.num_of_panel_on_cmds
296 = HX8399A_1080P_VIDEO_ON_COMMAND;
297 pinfo->mipi.panel_off_cmds
298 = hx8399a_1080p_video_off_command;
299 pinfo->mipi.num_of_panel_off_cmds
300 = HX8399A_1080P_VIDEO_OFF_COMMAND;
301 memcpy(phy_db->timing,
302 hx8399a_1080p_video_timings, TIMING_SIZE);
303 pinfo->mipi.signature = HX8399A_1080P_VIDEO_SIGNATURE;
304 break;
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +0530305 case SHARP_1080P_CMD_PANEL:
306 panelstruct->paneldata = &sharp_1080p_cmd_panel_data;
307 panelstruct->panelres = &sharp_1080p_cmd_panel_res;
308 panelstruct->paneldata->panel_with_enable_gpio = 1;
309 panelstruct->color = &sharp_1080p_cmd_color;
310 panelstruct->videopanel = &sharp_1080p_cmd_video_panel;
311 panelstruct->commandpanel = &sharp_1080p_cmd_command_panel;
312 panelstruct->state = &sharp_1080p_cmd_state;
313 panelstruct->laneconfig = &sharp_1080p_cmd_lane_config;
314 panelstruct->paneltiminginfo
315 = &sharp_1080p_cmd_timing_info;
316 panelstruct->panelresetseq
317 = &sharp_1080p_cmd_panel_reset_seq;
318 panelstruct->backlightinfo = &sharp_1080p_cmd_backlight;
319 pinfo->mipi.panel_on_cmds
320 = sharp_1080p_cmd_on_command;
321 pinfo->mipi.num_of_panel_on_cmds
322 = SHARP_1080P_CMD_ON_COMMAND;
323 pinfo->mipi.panel_off_cmds
324 = sharp_1080p_cmd_off_command;
325 pinfo->mipi.num_of_panel_off_cmds
326 = SHARP_1080P_CMD_OFF_COMMAND;
327 memcpy(phy_db->timing,
328 sharp_1080p_cmd_timings, TIMING_SIZE);
329 break;
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530330 case NT35597_WQXGA_DUALDSI_VIDEO_PANEL:
331 panelstruct->paneldata = &nt35597_wqxga_dualdsi_video_panel_data;
332 panelstruct->paneldata->panel_operating_mode = DST_SPLIT_FLAG |
333 SPLIT_DISPLAY_FLAG | DUAL_DSI_FLAG;
334 panelstruct->paneldata->panel_with_enable_gpio = 0;
335
336 panelstruct->panelres = &nt35597_wqxga_dualdsi_video_panel_res;
337 panelstruct->color = &nt35597_wqxga_dualdsi_video_color;
338 panelstruct->videopanel = &nt35597_wqxga_dualdsi_video_video_panel;
339 panelstruct->commandpanel = &nt35597_wqxga_dualdsi_video_command_panel;
340 panelstruct->state = &nt35597_wqxga_dualdsi_video_state;
341 panelstruct->laneconfig = &nt35597_wqxga_dualdsi_video_lane_config;
342 panelstruct->paneltiminginfo
343 = &nt35597_wqxga_dualdsi_video_timing_info;
344 panelstruct->panelresetseq
345 = &nt35597_wqxga_dualdsi_video_reset_seq;
346 panelstruct->backlightinfo = &nt35597_wqxga_dualdsi_video_backlight;
347 pinfo->labibb = &nt35597_wqxga_dualdsi_video_labibb;
348
349 pinfo->mipi.panel_on_cmds
350 = nt35597_wqxga_dualdsi_video_on_command;
351 pinfo->mipi.num_of_panel_on_cmds
352 = NT35597_WQXGA_DUALDSI_VIDEO_ON_COMMAND;
353 pinfo->mipi.panel_off_cmds
354 = nt35597_wqxga_dualdsi_video_off_command;
355 pinfo->mipi.num_of_panel_off_cmds
356 = NT35597_WQXGA_DUALDSI_VIDEO_OFF_COMMAND;
357 memcpy(phy_db->timing, nt35597_wqxga_dualdsi_video_timings,
358 TIMING_SIZE);
359 pinfo->mipi.tx_eot_append = true;
360 break;
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +0530361 case NT35597_WQXGA_DUALDSI_CMD_PANEL:
362 panelstruct->paneldata = &nt35597_wqxga_dualdsi_cmd_panel_data;
363 panelstruct->paneldata->panel_operating_mode = DST_SPLIT_FLAG |
364 SPLIT_DISPLAY_FLAG | DUAL_DSI_FLAG;
365 panelstruct->paneldata->panel_with_enable_gpio = 0;
366
367 panelstruct->panelres = &nt35597_wqxga_dualdsi_cmd_panel_res;
368 panelstruct->color = &nt35597_wqxga_dualdsi_cmd_color;
369 panelstruct->videopanel = &nt35597_wqxga_dualdsi_cmd_video_panel;
370 panelstruct->commandpanel = &nt35597_wqxga_dualdsi_cmd_command_panel;
371 panelstruct->state = &nt35597_wqxga_dualdsi_cmd_state;
372 panelstruct->laneconfig = &nt35597_wqxga_dualdsi_cmd_lane_config;
373 panelstruct->paneltiminginfo
374 = &nt35597_wqxga_dualdsi_cmd_timing_info;
Padmanabhan Komanduru58fc57e2015-07-07 21:36:14 +0530375 /* Clkout timings are different for this panel on 8956 */
376 panelstruct->paneltiminginfo->tclk_post = 0x2b;
377 panelstruct->paneltiminginfo->tclk_pre = 0x28;
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +0530378 panelstruct->panelresetseq
379 = &nt35597_wqxga_dualdsi_cmd_reset_seq;
380 panelstruct->backlightinfo = &nt35597_wqxga_dualdsi_cmd_backlight;
381
382 pinfo->labibb = &nt35597_wqxga_dualdsi_cmd_labibb;
383
384 pinfo->mipi.panel_on_cmds
385 = nt35597_wqxga_dualdsi_cmd_on_command;
386 pinfo->mipi.num_of_panel_on_cmds
387 = NT35597_WQXGA_DUALDSI_CMD_ON_COMMAND;
388 pinfo->mipi.panel_off_cmds
389 = nt35597_wqxga_dualdsi_cmd_off_command;
390 pinfo->mipi.num_of_panel_off_cmds
391 = NT35597_WQXGA_DUALDSI_CMD_OFF_COMMAND;
392 memcpy(phy_db->timing, nt35597_wqxga_dualdsi_cmd_timings,
393 TIMING_SIZE);
394 pinfo->mipi.tx_eot_append = true;
395 break;
Sandeep Pandaed082922015-08-03 12:18:25 +0530396 case NT35597_WQXGA_DSC_VIDEO_PANEL:
397 panelstruct->paneldata = &nt35597_wqxga_dsc_video_panel_data;
398 panelstruct->paneldata->panel_with_enable_gpio = 0;
399 panelstruct->paneldata->panel_operating_mode = USE_DSI1_PLL_FLAG;
400 panelstruct->panelres = &nt35597_wqxga_dsc_video_panel_res;
401 panelstruct->color = &nt35597_wqxga_dsc_video_color;
402 panelstruct->videopanel = &nt35597_wqxga_dsc_video_video_panel;
403 panelstruct->commandpanel = &nt35597_wqxga_dsc_video_command_panel;
404 panelstruct->state = &nt35597_wqxga_dsc_video_state;
405 panelstruct->laneconfig = &nt35597_wqxga_dsc_video_lane_config;
406 panelstruct->paneltiminginfo
407 = &nt35597_wqxga_dsc_video_timing_info;
408 panelstruct->panelresetseq
409 = &nt35597_wqxga_dsc_video_reset_seq;
410 panelstruct->backlightinfo = &nt35597_wqxga_dsc_video_backlight;
411 pinfo->labibb = &nt35597_wqxga_dsc_video_labibb;
412
413 pinfo->mipi.panel_on_cmds
414 = nt35597_wqxga_dsc_video_on_command;
415 pinfo->mipi.num_of_panel_on_cmds
416 = NT35597_WQXGA_DSC_VIDEO_ON_COMMAND;
417 pinfo->mipi.panel_off_cmds
418 = nt35597_wqxga_dsc_video_off_command;
419 pinfo->mipi.num_of_panel_off_cmds
420 = NT35597_WQXGA_DSC_VIDEO_OFF_COMMAND;
421 memcpy(phy_db->timing, nt35597_wqxga_dsc_video_timings,
422 TIMING_SIZE);
423 /* Clkout timings are different for this panel on 8956 */
424 panelstruct->paneltiminginfo->tclk_post = 0x04;
425 panelstruct->paneltiminginfo->tclk_pre = 0x20;
426 pinfo->mipi.tx_eot_append = true;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700427
428 panelstruct->paneldata->panel_operating_mode &= ~DUAL_PIPE_FLAG;
429 panelstruct->config = &nt35597_wqxga_dsc_video_config0;
430 if (oem_data) {
431 switch (oem_data->cfg_num[0]) {
432 case -1: /* default */
433 case 0:
434 panelstruct->config =
435 &nt35597_wqxga_dsc_video_config0;
436 break;
437 default:
438 dprintf(CRITICAL, "topology config%d not supported. fallback to default config0\n",
439 oem_data->cfg_num[0]);
440 panelstruct->config = &nt35597_wqxga_dsc_video_config0;
441 }
442 }
443 pinfo->lm_split[0] = panelstruct->config->lm_split[0];
444 pinfo->lm_split[1] = panelstruct->config->lm_split[1];
445 pinfo->num_dsc_enc = panelstruct->config->num_dsc_enc;
Sandeep Pandaed082922015-08-03 12:18:25 +0530446 pinfo->compression_mode = COMPRESSION_DSC;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700447
Sandeep Pandaed082922015-08-03 12:18:25 +0530448 pinfo->dsc.parameter_calc = mdss_dsc_parameters_calc;
449 pinfo->dsc.dsc2buf = mdss_dsc_to_buf;
450 pinfo->dsc.dsi_dsc_config = mdss_dsc_dsi_config;
451 pinfo->dsc.mdp_dsc_config = mdss_dsc_mdp_config;
452 break;
453 case NT35597_WQXGA_DSC_CMD_PANEL:
454 panelstruct->paneldata = &nt35597_wqxga_dsc_cmd_panel_data;
455 panelstruct->paneldata->panel_with_enable_gpio = 0;
456 panelstruct->paneldata->panel_operating_mode = USE_DSI1_PLL_FLAG;
457 panelstruct->panelres = &nt35597_wqxga_dsc_cmd_panel_res;
458 panelstruct->color = &nt35597_wqxga_dsc_cmd_color;
459 panelstruct->videopanel = &nt35597_wqxga_dsc_cmd_video_panel;
460 panelstruct->commandpanel = &nt35597_wqxga_dsc_cmd_command_panel;
461 panelstruct->state = &nt35597_wqxga_dsc_cmd_state;
462 panelstruct->laneconfig = &nt35597_wqxga_dsc_cmd_lane_config;
463 panelstruct->paneltiminginfo
464 = &nt35597_wqxga_dsc_cmd_timing_info;
465 panelstruct->panelresetseq
466 = &nt35597_wqxga_dsc_cmd_reset_seq;
467 panelstruct->backlightinfo = &nt35597_wqxga_dsc_cmd_backlight;
468 pinfo->labibb = &nt35597_wqxga_dsc_cmd_labibb;
469
470 pinfo->mipi.panel_on_cmds
471 = nt35597_wqxga_dsc_cmd_on_command;
472 pinfo->mipi.num_of_panel_on_cmds
473 = NT35597_WQXGA_DSC_CMD_ON_COMMAND;
474 pinfo->mipi.panel_off_cmds
475 = nt35597_wqxga_dsc_cmd_off_command;
476 pinfo->mipi.num_of_panel_off_cmds
477 = NT35597_WQXGA_DSC_CMD_OFF_COMMAND;
478 memcpy(phy_db->timing, nt35597_wqxga_dsc_cmd_timings,
479 TIMING_SIZE);
480 /* Clkout timings are different for this panel on 8956 */
481 panelstruct->paneltiminginfo->tclk_post = 0x04;
482 panelstruct->paneltiminginfo->tclk_pre = 0x20;
483 pinfo->mipi.tx_eot_append = true;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700484
485 panelstruct->paneldata->panel_operating_mode &= ~DUAL_PIPE_FLAG;
486 panelstruct->config = &nt35597_wqxga_dsc_cmd_config0;
487 if (oem_data) {
488 switch (oem_data->cfg_num[0]) {
489 case -1: /* default */
490 case 0:
491 panelstruct->config =
492 &nt35597_wqxga_dsc_cmd_config0;
493 break;
494 default:
495 dprintf(CRITICAL, "topology config%d not supported. fallback to default config0\n",
496 oem_data->cfg_num[0]);
497 panelstruct->config = &nt35597_wqxga_dsc_cmd_config0;
498 }
499 }
500 pinfo->lm_split[0] = panelstruct->config->lm_split[0];
501 pinfo->lm_split[1] = panelstruct->config->lm_split[1];
502 pinfo->num_dsc_enc = panelstruct->config->num_dsc_enc;
Sandeep Pandaed082922015-08-03 12:18:25 +0530503 pinfo->compression_mode = COMPRESSION_DSC;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700504
Sandeep Pandaed082922015-08-03 12:18:25 +0530505 pinfo->dsc.parameter_calc = mdss_dsc_parameters_calc;
506 pinfo->dsc.dsc2buf = mdss_dsc_to_buf;
507 pinfo->dsc.dsi_dsc_config = mdss_dsc_dsi_config;
508 pinfo->dsc.mdp_dsc_config = mdss_dsc_mdp_config;
509 break;
Padmanabhan Komanduru4927c2c2015-08-21 14:55:16 +0530510 case HX8394D_720P_VIDEO_PANEL:
511 panelstruct->paneldata = &hx8394d_720p_video_panel_data;
512 panelstruct->panelres = &hx8394d_720p_video_panel_res;
513 panelstruct->color = &hx8394d_720p_video_color;
514 panelstruct->videopanel = &hx8394d_720p_video_video_panel;
515 panelstruct->commandpanel = &hx8394d_720p_video_command_panel;
516 panelstruct->state = &hx8394d_720p_video_state;
517 panelstruct->laneconfig = &hx8394d_720p_video_lane_config;
518 panelstruct->paneltiminginfo
519 = &hx8394d_720p_video_timing_info;
520 panelstruct->panelresetseq
521 = &hx8394d_720p_video_panel_reset_seq;
522 panelstruct->backlightinfo = &hx8394d_720p_video_backlight;
523 pinfo->mipi.panel_on_cmds
524 = hx8394d_720p_video_on_command;
525 pinfo->mipi.num_of_panel_on_cmds
526 = HX8394D_720P_VIDEO_ON_COMMAND;
527 pinfo->mipi.panel_off_cmds
528 = hx8394d_720p_video_off_command;
529 pinfo->mipi.num_of_panel_off_cmds
530 = HX8394D_720P_VIDEO_OFF_COMMAND;
531 memcpy(phy_db->timing,
532 hx8394d_720p_video_timings, TIMING_SIZE);
533 pinfo->mipi.signature = HX8394D_720P_VIDEO_SIGNATURE;
534 break;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800535 case R69006_1080P_CMD_PANEL:
536 panelstruct->paneldata = &r69006_1080p_cmd_panel_data;
537 panelstruct->panelres = &r69006_1080p_cmd_panel_res;
538 panelstruct->color = &r69006_1080p_cmd_color;
539 panelstruct->videopanel = &r69006_1080p_cmd_video_panel;
540 panelstruct->commandpanel = &r69006_1080p_cmd_command_panel;
541 panelstruct->state = &r69006_1080p_cmd_state;
542 panelstruct->laneconfig = &r69006_1080p_cmd_lane_config;
543 panelstruct->paneltiminginfo
544 = &r69006_1080p_cmd_timing_info;
545 panelstruct->panelresetseq
546 = &r69006_1080p_cmd_reset_seq;
547 panelstruct->backlightinfo = &r69006_1080p_cmd_backlight;
Ray Zhange9e3b692015-12-18 18:03:30 +0800548 pinfo->labibb = &r69006_1080p_cmd_labibb;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800549 pinfo->mipi.panel_on_cmds
550 = r69006_1080p_cmd_on_command;
551 pinfo->mipi.num_of_panel_on_cmds
552 = R69006_1080P_CMD_ON_COMMAND;
553 pinfo->mipi.panel_off_cmds
554 = r69006_1080p_cmd_off_command;
555 pinfo->mipi.num_of_panel_off_cmds
556 = R69006_1080P_CMD_OFF_COMMAND;
557 memcpy(phy_db->timing,
558 r69006_1080p_cmd_timings, TIMING_SIZE);
559 pinfo->mipi.signature = R69006_1080P_CMD_SIGNATURE;
Ray Zhangc8fd3632015-12-23 14:01:13 +0800560 pinfo->mipi.tx_eot_append = true;
561 pinfo->mipi.rx_eot_ignore = true;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800562 break;
563 case R69006_1080P_VIDEO_PANEL:
564 panelstruct->paneldata = &r69006_1080p_video_panel_data;
565 panelstruct->panelres = &r69006_1080p_video_panel_res;
566 panelstruct->color = &r69006_1080p_video_color;
567 panelstruct->videopanel = &r69006_1080p_video_video_panel;
568 panelstruct->commandpanel = &r69006_1080p_video_command_panel;
569 panelstruct->state = &r69006_1080p_video_state;
570 panelstruct->laneconfig = &r69006_1080p_video_lane_config;
571 panelstruct->paneltiminginfo
572 = &r69006_1080p_video_timing_info;
573 panelstruct->panelresetseq
574 = &r69006_1080p_video_reset_seq;
575 panelstruct->backlightinfo = &r69006_1080p_video_backlight;
Ray Zhange9e3b692015-12-18 18:03:30 +0800576 pinfo->labibb = &r69006_1080p_video_labibb;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800577 pinfo->mipi.panel_on_cmds
578 = r69006_1080p_video_on_command;
579 pinfo->mipi.num_of_panel_on_cmds
580 = R69006_1080P_VIDEO_ON_COMMAND;
581 pinfo->mipi.panel_off_cmds
582 = r69006_1080p_video_off_command;
583 pinfo->mipi.num_of_panel_off_cmds
584 = R69006_1080P_VIDEO_OFF_COMMAND;
585 memcpy(phy_db->timing,
586 r69006_1080p_video_timings, TIMING_SIZE);
587 pinfo->mipi.signature = R69006_1080P_VIDEO_SIGNATURE;
588 break;
589 case HX8394F_720P_VIDEO_PANEL:
590 panelstruct->paneldata = &hx8394f_720p_video_panel_data;
591 panelstruct->panelres = &hx8394f_720p_video_panel_res;
592 panelstruct->color = &hx8394f_720p_video_color;
593 panelstruct->videopanel = &hx8394f_720p_video_video_panel;
594 panelstruct->commandpanel = &hx8394f_720p_video_command_panel;
595 panelstruct->state = &hx8394f_720p_video_state;
596 panelstruct->laneconfig = &hx8394f_720p_video_lane_config;
597 panelstruct->paneltiminginfo
598 = &hx8394f_720p_video_timing_info;
599 panelstruct->panelresetseq
600 = &hx8394f_720p_video_reset_seq;
601 panelstruct->backlightinfo = &hx8394f_720p_video_backlight;
602 pinfo->mipi.panel_on_cmds
603 = hx8394f_720p_video_on_command;
604 pinfo->mipi.num_of_panel_on_cmds
605 = HX8394F_720P_VIDEO_ON_COMMAND;
606 pinfo->mipi.panel_off_cmds
607 = hx8394f_720p_video_off_command;
608 pinfo->mipi.num_of_panel_off_cmds
609 = HX8394F_720P_VIDEO_OFF_COMMAND;
610 memcpy(phy_db->timing,
611 hx8394f_720p_video_timings, TIMING_SIZE);
612 pinfo->mipi.signature = HX8394F_720P_VIDEO_SIGNATURE;
raghavendra ambadasdd106522018-07-13 11:11:50 +0530613 if ((board_platform_id() == SDM429) || (board_platform_id() == SDM439) ||
614 (board_platform_id() == SDA429) || (board_platform_id() == SDA439))
615 pinfo->disable_wled_labibb = true;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800616 break;
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700617 case BYD_1200P_VIDEO_PANEL:
618 panelstruct->paneldata = &byd_1200p_video_panel_data;
619 panelstruct->paneldata->panel_with_enable_gpio = 1;
620 panelstruct->panelres = &byd_1200p_video_panel_res;
621 panelstruct->color = &byd_1200p_video_color;
622 panelstruct->videopanel = &byd_1200p_video_video_panel;
623 panelstruct->commandpanel = &byd_1200p_video_command_panel;
624 panelstruct->state = &byd_1200p_video_state;
625 panelstruct->laneconfig = &byd_1200p_video_lane_config;
626 panelstruct->paneltiminginfo
627 = &byd_1200p_video_timing_info;
628 panelstruct->panelresetseq
629 = &byd_1200p_video_panel_reset_seq;
630 panelstruct->backlightinfo = &byd_1200p_video_backlight;
631 pinfo->mipi.panel_on_cmds
632 = byd_1200p_video_on_command;
633 pinfo->mipi.num_of_panel_on_cmds
634 = BYD_1200P_VIDEO_ON_COMMAND;
635 pinfo->mipi.panel_off_cmds
636 = byd_1200p_video_off_command;
637 pinfo->mipi.num_of_panel_off_cmds
638 = BYD_1200P_VIDEO_OFF_COMMAND;
639 memcpy(phy_db->timing,
640 byd_1200p_video_timings, TIMING_SIZE);
641 pinfo->mipi.signature = BYD_1200P_VIDEO_SIGNATURE;
642 phy_db->regulator_mode = DSI_PHY_REGULATOR_LDO_MODE;
643 break;
Padmanabhan Komandurue108ed02015-12-21 12:43:07 +0530644 case TRULY_720P_VIDEO_PANEL:
645 panelstruct->paneldata = &truly_720p_video_panel_data;
646 panelstruct->paneldata->panel_with_enable_gpio = 1;
647 panelstruct->panelres = &truly_720p_video_panel_res;
648 panelstruct->color = &truly_720p_video_color;
649 panelstruct->videopanel = &truly_720p_video_video_panel;
650 panelstruct->commandpanel = &truly_720p_video_command_panel;
651 panelstruct->state = &truly_720p_video_state;
652 panelstruct->laneconfig = &truly_720p_video_lane_config;
653 panelstruct->paneltiminginfo
654 = &truly_720p_video_timing_info;
655 panelstruct->panelresetseq
656 = &truly_720p_video_panel_reset_seq;
657 panelstruct->backlightinfo = &truly_720p_video_backlight;
658 pinfo->mipi.panel_on_cmds
659 = truly_720p_video_on_command;
660 pinfo->mipi.num_of_panel_on_cmds
661 = TRULY_720P_VIDEO_ON_COMMAND;
662 pinfo->mipi.panel_off_cmds
663 = truly_720p_video_off_command;
664 pinfo->mipi.num_of_panel_off_cmds
665 = TRULY_720P_VIDEO_OFF_COMMAND;
666 memcpy(phy_db->timing,
667 truly_720p_video_timings, TIMING_SIZE);
668 pinfo->mipi.signature = TRULY_720P_VIDEO_SIGNATURE;
669 pinfo->mipi.tx_eot_append = true;
670 break;
Padmanabhan Komanduru7460e442016-01-21 12:30:34 +0530671 case TRULY_WUXGA_VIDEO_PANEL:
672 panelstruct->paneldata = &truly_wuxga_video_panel_data;
673 panelstruct->paneldata->panel_with_enable_gpio = 1;
674 panelstruct->panelres = &truly_wuxga_video_panel_res;
675 panelstruct->color = &truly_wuxga_video_color;
676 panelstruct->videopanel = &truly_wuxga_video_video_panel;
677 panelstruct->commandpanel = &truly_wuxga_video_command_panel;
678 panelstruct->state = &truly_wuxga_video_state;
679 panelstruct->laneconfig = &truly_wuxga_video_lane_config;
680 panelstruct->paneltiminginfo
681 = &truly_wuxga_video_timing_info;
682 panelstruct->panelresetseq
683 = &truly_wuxga_video_panel_reset_seq;
684 panelstruct->backlightinfo = &truly_wuxga_video_backlight;
685 pinfo->mipi.panel_on_cmds
686 = truly_wuxga_video_on_command;
687 pinfo->mipi.num_of_panel_on_cmds
688 = TRULY_WUXGA_VIDEO_ON_COMMAND;
689 pinfo->mipi.panel_off_cmds
690 = truly_wuxga_video_off_command;
691 pinfo->mipi.num_of_panel_off_cmds
692 = TRULY_WUXGA_VIDEO_OFF_COMMAND;
693 memcpy(phy_db->timing,
694 truly_wuxga_video_timings, TIMING_SIZE);
695 pinfo->mipi.signature = TRULY_WUXGA_VIDEO_SIGNATURE;
696 break;
Vishnuvardhan Prodduturia0989b32016-02-15 18:07:44 +0530697 case TRULY_720P_CMD_PANEL:
698 panelstruct->paneldata = &truly_720p_cmd_panel_data;
699 panelstruct->paneldata->panel_with_enable_gpio = 1;
700 panelstruct->panelres = &truly_720p_cmd_panel_res;
701 panelstruct->color = &truly_720p_cmd_color;
702 panelstruct->videopanel = &truly_720p_cmd_video_panel;
703 panelstruct->commandpanel = &truly_720p_cmd_command_panel;
704 panelstruct->state = &truly_720p_cmd_state;
705 panelstruct->laneconfig = &truly_720p_cmd_lane_config;
706 panelstruct->paneltiminginfo
707 = &truly_720p_cmd_timing_info;
708 panelstruct->panelresetseq
709 = &truly_720p_cmd_panel_reset_seq;
710 panelstruct->backlightinfo = &truly_720p_cmd_backlight;
711 pinfo->mipi.panel_on_cmds
712 = truly_720p_cmd_on_command;
713 pinfo->mipi.num_of_panel_on_cmds
714 = TRULY_720P_CMD_ON_COMMAND;
715 pinfo->mipi.panel_off_cmds
716 = truly_720p_cmd_off_command;
717 pinfo->mipi.num_of_panel_off_cmds
718 = TRULY_720P_CMD_OFF_COMMAND;
719 memcpy(phy_db->timing,
720 truly_720p_cmd_timings, TIMING_SIZE);
721 pinfo->mipi.signature = TRULY_720P_CMD_SIGNATURE;
722 pinfo->mipi.tx_eot_append = true;
723 break;
Ray Zhangfb6025a2016-04-08 10:57:30 +0800724 case LEAD_FL10802_FWVGA_VIDEO_PANEL:
725 panelstruct->paneldata = &lead_fl10802_fwvga_video_panel_data;
726 panelstruct->panelres = &lead_fl10802_fwvga_video_panel_res;
727 panelstruct->color = &lead_fl10802_fwvga_video_color;
728 panelstruct->videopanel = &lead_fl10802_fwvga_video_video_panel;
729 panelstruct->commandpanel
730 = &lead_fl10802_fwvga_video_command_panel;
731 panelstruct->state = &lead_fl10802_fwvga_video_state;
732 panelstruct->laneconfig = &lead_fl10802_fwvga_video_lane_config;
733 panelstruct->paneltiminginfo
734 = &lead_fl10802_fwvga_video_timing_info;
735 panelstruct->panelresetseq
736 = &lead_fl10802_fwvga_video_reset_seq;
737 panelstruct->backlightinfo
738 = &lead_fl10802_fwvga_video_backlight;
739 pinfo->mipi.panel_on_cmds
740 = lead_fl10802_fwvga_video_on_command;
741 pinfo->mipi.num_of_panel_on_cmds
742 = LEAD_FL10802_FWVGA_VIDEO_ON_COMMAND;
743 pinfo->mipi.panel_off_cmds
744 = lead_fl10802_fwvga_video_off_command;
745 pinfo->mipi.num_of_panel_off_cmds
746 = LEAD_FL10802_FWVGA_VIDEO_OFF_COMMAND;
747 memcpy(phy_db->timing,
748 lead_fl10802_fwvga_video_timings, TIMING_SIZE);
749 pinfo->mipi.signature = LEAD_FL10802_FWVGA_VIDEO_SIGNATURE;
Ray Zhange3eba402016-05-13 10:33:18 +0800750 pinfo->mipi.cmds_post_tg = 1;
Ray Zhangfb6025a2016-04-08 10:57:30 +0800751 break;
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +0530752 case HX8399C_FHD_PLUSE_VIDEO_PANEL:
753 panelstruct->paneldata = &hx8399c_fhd_pluse_video_panel_data;
754 panelstruct->panelres = &hx8399c_fhd_pluse_video_panel_res;
755 panelstruct->color = &hx8399c_fhd_pluse_video_color;
756 panelstruct->videopanel =
757 &hx8399c_fhd_pluse_video_video_panel;
758 panelstruct->commandpanel =
759 &hx8399c_fhd_pluse_video_command_panel;
760 panelstruct->state = &hx8399c_fhd_pluse_video_state;
761 panelstruct->laneconfig =
762 &hx8399c_fhd_pluse_video_lane_config;
763 panelstruct->paneltiminginfo
764 = &hx8399c_fhd_pluse_video_timing_info;
765 panelstruct->panelresetseq
766 = &hx8399c_fhd_pluse_video_panel_reset_seq;
767 panelstruct->backlightinfo = &hx8399c_fhd_pluse_video_backlight;
768 pinfo->labibb = &hx8399c_fhd_pluse_video_labibb;
769 pinfo->mipi.panel_on_cmds
770 = hx8399c_fhd_pluse_video_on_command;
771 pinfo->mipi.num_of_panel_on_cmds
772 = HX8399C_FHD_PLUSE_VIDEO_ON_COMMAND;
773 pinfo->mipi.panel_off_cmds
774 = hx8399c_fhd_pluse_video_off_command;
775 pinfo->mipi.num_of_panel_off_cmds
776 = HX8399C_FHD_PLUSE_VIDEO_OFF_COMMAND;
777 if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
778 memcpy(phy_db->timing,
779 hx8399c_fhd_pluse_video_12nm_timings,
780 TIMING_SIZE_12NM);
781 else
782 memcpy(phy_db->timing, hx8399c_fhd_pluse_video_timings,
783 TIMING_SIZE);
784 pinfo->mipi.signature = HX8399C_FHD_PLUSE_VIDEO_SIGNATURE;
785 break;
Padmanabhan Komanduru19636322018-04-30 16:52:59 +0530786 case HX8399C_HD_PLUS_VIDEO_PANEL:
787 panelstruct->paneldata = &hx8399c_hd_plus_video_panel_data;
788 panelstruct->panelres = &hx8399c_hd_plus_video_panel_res;
789 panelstruct->color = &hx8399c_hd_plus_video_color;
790 panelstruct->videopanel =
791 &hx8399c_hd_plus_video_video_panel;
792 panelstruct->commandpanel =
793 &hx8399c_hd_plus_video_command_panel;
794 panelstruct->state = &hx8399c_hd_plus_video_state;
795 panelstruct->laneconfig =
796 &hx8399c_hd_plus_video_lane_config;
797 panelstruct->paneltiminginfo
798 = &hx8399c_hd_plus_video_timing_info;
799 panelstruct->panelresetseq
800 = &hx8399c_hd_plus_video_panel_reset_seq;
801 panelstruct->backlightinfo = &hx8399c_hd_plus_video_backlight;
802 pinfo->labibb = &hx8399c_hd_plus_video_labibb;
803 pinfo->mipi.panel_on_cmds
804 = hx8399c_hd_plus_video_on_command;
805 pinfo->mipi.num_of_panel_on_cmds
806 = HX8399C_HD_PLUS_VIDEO_ON_COMMAND;
807 pinfo->mipi.panel_off_cmds
808 = hx8399c_hd_plus_video_off_command;
809 pinfo->mipi.num_of_panel_off_cmds
810 = HX8399C_HD_PLUS_VIDEO_OFF_COMMAND;
811 if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
812 memcpy(phy_db->timing,
813 hx8399c_hd_plus_video_12nm_timings,
814 TIMING_SIZE_12NM);
815 else
816 memcpy(phy_db->timing, hx8399c_hd_plus_video_timings,
817 TIMING_SIZE);
818 pinfo->mipi.signature = HX8399C_HD_PLUS_VIDEO_SIGNATURE;
819 pinfo->mipi.tx_eot_append = true;
820 break;
Xipeng Gu5affb812019-06-18 14:59:17 +0800821 case RM67162_QVGA_CMD_PANEL:
822 panelstruct->paneldata = &edo_rm67162_qvga_cmd_panel_data;
823 panelstruct->panelres = &edo_rm67162_qvga_cmd_panel_res;
824 panelstruct->color = &edo_rm67162_qvga_cmd_color;
825 panelstruct->videopanel =
826 &edo_rm67162_qvga_cmd_video_panel;
827 panelstruct->commandpanel =
828 &edo_rm67162_qvga_cmd_command_panel;
829 panelstruct->state = &edo_rm67162_qvga_cmd_state;
830 panelstruct->laneconfig =
831 &edo_rm67162_qvga_cmd_lane_config;
832 panelstruct->paneltiminginfo
833 = &edo_rm67162_qvga_cmd_timing_info;
834 panelstruct->panelresetseq
835 = &edo_rm67162_qvga_cmd_reset_seq;
836 panelstruct->backlightinfo = &edo_rm67162_qvga_cmd_backlight;
837 pinfo->labibb = NULL;
838 pinfo->mipi.panel_on_cmds
839 = edo_rm67162_qvga_cmd_on_command;
840 pinfo->mipi.num_of_panel_on_cmds
841 = EDO_RM67162_QVGA_CMD_ON_COMMAND;
842 pinfo->mipi.panel_off_cmds
843 = edo_rm67162_qvga_cmd_off_command;
844 pinfo->mipi.num_of_panel_off_cmds
845 = EDO_RM67162_QVGA_CMD_OFF_COMMAND;
846 if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
847 memcpy(phy_db->timing,
848 edo_rm67162_qvga_cmd_12nm_timings,
849 TIMING_SIZE_12NM);
850 pinfo->mipi.tx_eot_append = true;
851 break;
Padmanabhan Komandurub5968282018-05-07 14:07:54 +0530852 case NT35695B_TRULY_FHD_VIDEO_PANEL:
853 panelstruct->paneldata = &nt35695b_truly_fhd_video_panel_data;
854 panelstruct->panelres = &nt35695b_truly_fhd_video_panel_res;
855 panelstruct->color = &nt35695b_truly_fhd_video_color;
856 panelstruct->videopanel =
857 &nt35695b_truly_fhd_video_video_panel;
858 panelstruct->commandpanel =
859 &nt35695b_truly_fhd_video_command_panel;
860 panelstruct->state = &nt35695b_truly_fhd_video_state;
861 panelstruct->laneconfig =
862 &nt35695b_truly_fhd_video_lane_config;
863 panelstruct->paneltiminginfo
864 = &nt35695b_truly_fhd_video_timing_info;
865 panelstruct->panelresetseq
866 = &nt35695b_truly_fhd_video_panel_reset_seq;
867 panelstruct->backlightinfo = &nt35695b_truly_fhd_video_backlight;
868 pinfo->labibb = &nt35695b_truly_fhd_video_labibb;
869 pinfo->mipi.panel_on_cmds
870 = nt35695b_truly_fhd_video_on_command;
871 pinfo->mipi.num_of_panel_on_cmds
872 = NT35695B_TRULY_FHD_VIDEO_ON_COMMAND;
873 pinfo->mipi.panel_off_cmds
874 = nt35695b_truly_fhd_video_off_command;
875 pinfo->mipi.num_of_panel_off_cmds
876 = NT35695B_TRULY_FHD_VIDEO_OFF_COMMAND;
877 if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
878 memcpy(phy_db->timing,
879 nt35695b_truly_fhd_video_12nm_timings,
880 TIMING_SIZE_12NM);
881 else
882 memcpy(phy_db->timing, nt35695b_truly_fhd_video_timings,
883 TIMING_SIZE);
884 pinfo->mipi.signature = NT35695B_TRULY_FHD_VIDEO_SIGNATURE;
885 pinfo->mipi.tx_eot_append = true;
886 break;
887 case NT35695B_TRULY_FHD_CMD_PANEL:
888 panelstruct->paneldata = &nt35695b_truly_fhd_cmd_panel_data;
889 panelstruct->panelres = &nt35695b_truly_fhd_cmd_panel_res;
890 panelstruct->color = &nt35695b_truly_fhd_cmd_color;
891 panelstruct->videopanel =
892 &nt35695b_truly_fhd_cmd_video_panel;
893 panelstruct->commandpanel =
894 &nt35695b_truly_fhd_cmd_command_panel;
895 panelstruct->state = &nt35695b_truly_fhd_cmd_state;
896 panelstruct->laneconfig =
897 &nt35695b_truly_fhd_cmd_lane_config;
898 panelstruct->paneltiminginfo
899 = &nt35695b_truly_fhd_cmd_timing_info;
900 panelstruct->panelresetseq
901 = &nt35695b_truly_fhd_cmd_panel_reset_seq;
902 panelstruct->backlightinfo = &nt35695b_truly_fhd_cmd_backlight;
903 pinfo->labibb = &nt35695b_truly_fhd_cmd_labibb;
904 pinfo->mipi.panel_on_cmds
905 = nt35695b_truly_fhd_cmd_on_command;
906 pinfo->mipi.num_of_panel_on_cmds
907 = NT35695B_TRULY_FHD_CMD_ON_COMMAND;
908 pinfo->mipi.panel_off_cmds
909 = nt35695b_truly_fhd_cmd_off_command;
910 pinfo->mipi.num_of_panel_off_cmds
911 = NT35695B_TRULY_FHD_CMD_OFF_COMMAND;
912 if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
913 memcpy(phy_db->timing,
914 nt35695b_truly_fhd_cmd_12nm_timings,
915 TIMING_SIZE_12NM);
916 else
917 memcpy(phy_db->timing, nt35695b_truly_fhd_cmd_timings,
918 TIMING_SIZE);
919 pinfo->mipi.signature = NT35695B_TRULY_FHD_CMD_SIGNATURE;
920 pinfo->mipi.tx_eot_append = true;
921 break;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700922 case UNKNOWN_PANEL:
923 default:
924 memset(panelstruct, 0, sizeof(struct panel_struct));
925 memset(pinfo->mipi.panel_on_cmds, 0,
926 sizeof(struct mipi_dsi_cmd));
927 pinfo->mipi.num_of_panel_on_cmds = 0;
928 memset(pinfo->mipi.panel_off_cmds, 0,
929 sizeof(struct mipi_dsi_cmd));
930 pinfo->mipi.num_of_panel_off_cmds = 0;
931 memset(phy_db->timing, 0, TIMING_SIZE);
932 pan_type = PANEL_TYPE_UNKNOWN;
933 break;
934 }
Ujwal Patel41a665a2015-07-17 13:51:30 -0700935
936 dprintf(SPEW, "lm_split[0]=%d lm_split[1]=%d mode=0x%x\n",
937 pinfo->lm_split[0], pinfo->lm_split[1],
938 panelstruct->paneldata->panel_operating_mode);
939
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700940 return pan_type;
941}
942
Ray Zhangf95f5b92015-06-25 15:34:29 +0800943#define DISPLAY_MAX_PANEL_DETECTION 2
944static uint32_t auto_pan_loop = 0;
945
946uint32_t oem_panel_max_auto_detect_panels()
947{
948 return target_panel_auto_detect_enabled() ?
949 DISPLAY_MAX_PANEL_DETECTION : 0;
950}
951
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700952int oem_panel_select(const char *panel_name, struct panel_struct *panelstruct,
953 struct msm_panel_info *pinfo,
954 struct mdss_dsi_phy_ctrl *phy_db)
955{
956 uint32_t hw_id = board_hardware_id();
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700957 uint32_t hw_subtype = board_hardware_subtype();
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700958 int32_t panel_override_id;
feifanz028544e2015-07-28 20:58:57 +0800959 uint32_t target_id, plat_hw_ver_major;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700960
961 if (panel_name) {
962 panel_override_id = panel_name_to_id(supp_panels,
963 ARRAY_SIZE(supp_panels), panel_name);
964
965 if (panel_override_id < 0) {
966 dprintf(CRITICAL, "Not able to search the panel:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530967 panel_name);
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700968 } else if (panel_override_id < UNKNOWN_PANEL) {
969 /* panel override using fastboot oem command */
970 panel_id = panel_override_id;
971
972 dprintf(INFO, "OEM panel override:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530973 panel_name);
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700974 goto panel_init;
975 }
976 }
977
978 switch (hw_id) {
979 case HW_PLATFORM_MTP:
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530980 if (platform_is_msm8956())
981 panel_id = NT35597_WQXGA_DUALDSI_VIDEO_PANEL;
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +0530982 else if (platform_is_msm8917())
Jayant Shekhar9c0533e2016-01-28 11:17:18 +0530983 panel_id = TRULY_720P_VIDEO_PANEL;
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +0530984 else if (platform_is_sdm439())
985 panel_id = HX8399C_FHD_PLUSE_VIDEO_PANEL;
Padmanabhan Komanduru19636322018-04-30 16:52:59 +0530986 else if (platform_is_sdm429())
987 panel_id = HX8399C_HD_PLUS_VIDEO_PANEL;
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530988 else
989 panel_id = TRULY_1080P_VIDEO_PANEL;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700990 break;
991 case HW_PLATFORM_SURF:
Vishnuvardhan Prodduturie116c002015-07-14 17:14:25 +0530992 case HW_PLATFORM_RCM:
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530993 if (platform_is_msm8956())
994 panel_id = NT35597_WQXGA_DUALDSI_VIDEO_PANEL;
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +0530995 else if (platform_is_msm8917())
Jayant Shekhar9c0533e2016-01-28 11:17:18 +0530996 panel_id = TRULY_720P_VIDEO_PANEL;
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +0530997 else if (platform_is_sdm439())
998 panel_id = HX8399C_FHD_PLUSE_VIDEO_PANEL;
Padmanabhan Komanduru19636322018-04-30 16:52:59 +0530999 else if (platform_is_sdm429())
1000 panel_id = HX8399C_HD_PLUS_VIDEO_PANEL;
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +05301001 else
1002 panel_id = TRULY_1080P_VIDEO_PANEL;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -07001003 break;
feifanz174c82c2015-04-15 18:57:07 +08001004 case HW_PLATFORM_QRD:
Vishnuvardhan Prodduturia84a0e82018-10-25 12:55:55 +05301005 if (platform_is_qm215()) {
1006 panel_id = HX8399C_HD_PLUS_VIDEO_PANEL;
1007 break;
1008 }
1009
Sujeev Dias6bc9fa32015-08-03 23:13:44 -07001010 if (hw_subtype == HW_PLATFORM_SUBTYPE_POLARIS) {
1011 panel_id = BYD_1200P_VIDEO_PANEL;
1012 break;
1013 }
1014
feifanz028544e2015-07-28 20:58:57 +08001015 target_id = board_target_id();
1016 plat_hw_ver_major = ((target_id >> 16) & 0xFF);
1017
1018 /*
1019 * 8952 SKUM DVT2 - HX8399A 1080p video panel
1020 * 8952 SKUM EVT1/EVT2 - OTM1906C 1080p cmd panel
1021 */
1022 if (plat_hw_ver_major >= 4)
1023 panel_id = HX8399A_1080P_VIDEO_PANEL;
1024 else
1025 panel_id = OTM1906C_1080P_CMD_PANEL;
Ray Zhangf95f5b92015-06-25 15:34:29 +08001026
Ray Zhang4bbc7b02015-12-04 16:07:20 +08001027 if (platform_is_msm8937()){
Ray Zhang49cfcc82016-08-09 19:08:37 +08001028 if (hw_subtype == 0x80) {
1029 /* 8940 SKU7 uses HX8394F */
Ray Zhang4bbc7b02015-12-04 16:07:20 +08001030 panel_id = HX8394F_720P_VIDEO_PANEL;
Ray Zhang49cfcc82016-08-09 19:08:37 +08001031 } else {
1032 /* 8937 SKU1 uses R69006, SKU2 uses HX8394F */
1033 if (plat_hw_ver_major > 16)
1034 panel_id = HX8394F_720P_VIDEO_PANEL;
1035 else
1036 panel_id = R69006_1080P_CMD_PANEL;
1037 }
Ray Zhang4bbc7b02015-12-04 16:07:20 +08001038 }
1039
Lei Chen4b58d6d2018-03-15 17:52:11 +08001040 if (platform_is_sdm439()) {
1041 panel_id = HX8399C_FHD_PLUSE_VIDEO_PANEL;
1042 }
1043
shaoxing0534f8b2019-07-08 19:56:02 +08001044 if (platform_is_sdm429() || platform_is_sdm429w()) {
Xipeng Gu5affb812019-06-18 14:59:17 +08001045 if (hw_subtype == HW_PLATFORM_SUBTYPE_429W_PM660) /* Spyro target */
1046 panel_id = RM67162_QVGA_CMD_PANEL;
1047 else
1048 panel_id = HX8399C_HD_PLUS_VIDEO_PANEL;
Lei Chen4b58d6d2018-03-15 17:52:11 +08001049 }
1050
Ray Zhang4bbc7b02015-12-04 16:07:20 +08001051 /* QRD EVT1 uses OTM1906C, and EVT2 uses HX8394F */
Ray Zhangf95f5b92015-06-25 15:34:29 +08001052 if (platform_is_msm8956()) {
1053 switch (auto_pan_loop) {
1054 case 0:
1055 panel_id = HX8399A_1080P_VIDEO_PANEL;
1056 break;
1057 case 1:
1058 panel_id = OTM1906C_1080P_CMD_PANEL;
1059 break;
1060 default:
1061 panel_id = UNKNOWN_PANEL;
1062 dprintf(CRITICAL, "Unknown panel\n");
1063 return PANEL_TYPE_UNKNOWN;
1064 }
1065 auto_pan_loop++;
Ray Zhangfb6025a2016-04-08 10:57:30 +08001066 } else if (platform_is_msm8917()) {
1067 if (hw_subtype == 0x0A) /* TMO target */
1068 panel_id = LEAD_FL10802_FWVGA_VIDEO_PANEL;
1069 else
1070 panel_id = HX8394F_720P_VIDEO_PANEL;
Ray Zhangf95f5b92015-06-25 15:34:29 +08001071 }
1072
feifanz174c82c2015-04-15 18:57:07 +08001073 break;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -07001074 default:
1075 dprintf(CRITICAL, "Display not enabled for %d HW type\n",
1076 hw_id);
1077 return PANEL_TYPE_UNKNOWN;
1078 }
1079
1080panel_init:
1081 /*
1082 * Update all data structures after 'panel_init' label. Only panel
1083 * selection is supposed to happen before that.
1084 */
shaoxing0534f8b2019-07-08 19:56:02 +08001085 if (platform_is_sdm439() || platform_is_sdm429() || platform_is_sdm429w()) {
Padmanabhan Komanduru2ab03a62018-05-17 14:38:59 +05301086 phy_db->pll_type = DSI_PLL_TYPE_12NM;
1087 pinfo->lane_config = mdss_dsi_lane_config;
1088 goto end;
1089 }
1090
Padmanabhan Komanduru0e19a362015-06-08 13:29:32 +05301091 if (platform_is_msm8956())
1092 memcpy(panel_regulator_settings,
1093 dcdc_regulator_settings_hpm, REGULATOR_SIZE);
1094 else
1095 memcpy(panel_regulator_settings,
1096 dcdc_regulator_settings_lpm, REGULATOR_SIZE);
Padmanabhan Komanduru2ab03a62018-05-17 14:38:59 +05301097end:
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -07001098 pinfo->pipe_type = MDSS_MDP_PIPE_TYPE_RGB;
1099 return init_panel_data(panelstruct, pinfo, phy_db);
1100}