blob: 27f7eec25f7e1aad5d12c4d6e23b9c6d7ff50ec1 [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 Komanduru19636322018-04-30 16:52:59 +053067#include "include/panel_hx8399c_hd_plus_video.h"
Padmanabhan Komandurub5968282018-05-07 14:07:54 +053068#include "include/panel_nt35695b_truly_fhd_video.h"
69#include "include/panel_nt35695b_truly_fhd_cmd.h"
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -070070
71/*---------------------------------------------------------------------------*/
72/* static panel selection variable */
73/*---------------------------------------------------------------------------*/
74enum {
75 TRULY_1080P_VIDEO_PANEL,
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +053076 TRULY_1080P_CMD_PANEL,
feifanz174c82c2015-04-15 18:57:07 +080077 OTM1906C_1080P_CMD_PANEL,
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +053078 SHARP_1080P_CMD_PANEL,
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +053079 NT35597_WQXGA_DUALDSI_VIDEO_PANEL,
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +053080 NT35597_WQXGA_DUALDSI_CMD_PANEL,
Ray Zhangf95f5b92015-06-25 15:34:29 +080081 HX8399A_1080P_VIDEO_PANEL,
Sandeep Pandaed082922015-08-03 12:18:25 +053082 NT35597_WQXGA_DSC_VIDEO_PANEL,
83 NT35597_WQXGA_DSC_CMD_PANEL,
Padmanabhan Komanduru4927c2c2015-08-21 14:55:16 +053084 HX8394D_720P_VIDEO_PANEL,
Sujeev Dias6bc9fa32015-08-03 23:13:44 -070085 BYD_1200P_VIDEO_PANEL,
Ray Zhang4bbc7b02015-12-04 16:07:20 +080086 R69006_1080P_CMD_PANEL,
87 R69006_1080P_VIDEO_PANEL,
88 HX8394F_720P_VIDEO_PANEL,
Padmanabhan Komandurue108ed02015-12-21 12:43:07 +053089 TRULY_720P_VIDEO_PANEL,
Padmanabhan Komanduru7460e442016-01-21 12:30:34 +053090 TRULY_WUXGA_VIDEO_PANEL,
Vishnuvardhan Prodduturia0989b32016-02-15 18:07:44 +053091 TRULY_720P_CMD_PANEL,
Ray Zhangfb6025a2016-04-08 10:57:30 +080092 LEAD_FL10802_FWVGA_VIDEO_PANEL,
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +053093 HX8399C_FHD_PLUSE_VIDEO_PANEL,
Padmanabhan Komanduru19636322018-04-30 16:52:59 +053094 HX8399C_HD_PLUS_VIDEO_PANEL,
Padmanabhan Komandurub5968282018-05-07 14:07:54 +053095 NT35695B_TRULY_FHD_VIDEO_PANEL,
96 NT35695B_TRULY_FHD_CMD_PANEL,
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -070097 UNKNOWN_PANEL
98};
99
100uint32_t panel_regulator_settings[] = {
101 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
102};
103
104/*
105 * The list of panels that are supported on this target.
106 * Any panel in this list can be selected using fastboot oem command.
107 */
108static struct panel_list supp_panels[] = {
109 {"truly_1080p_video", TRULY_1080P_VIDEO_PANEL},
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +0530110 {"truly_1080p_cmd", TRULY_1080P_CMD_PANEL},
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +0530111 {"sharp_1080p_cmd", SHARP_1080P_CMD_PANEL},
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530112 {"nt35597_wqxga_dualdsi_video", NT35597_WQXGA_DUALDSI_VIDEO_PANEL},
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +0530113 {"nt35597_wqxga_dualdsi_cmd", NT35597_WQXGA_DUALDSI_CMD_PANEL},
Ray Zhangf95f5b92015-06-25 15:34:29 +0800114 {"otm1906c_1080p_cmd", OTM1906C_1080P_CMD_PANEL},
115 {"hx8399a_1080p_video", HX8399A_1080P_VIDEO_PANEL},
Sandeep Pandaed082922015-08-03 12:18:25 +0530116 {"nt35597_wqxga_dsc_video", NT35597_WQXGA_DSC_VIDEO_PANEL},
117 {"nt35597_wqxga_dsc_cmd", NT35597_WQXGA_DSC_CMD_PANEL},
Padmanabhan Komanduru4927c2c2015-08-21 14:55:16 +0530118 {"hx8394d_720p_video", HX8394D_720P_VIDEO_PANEL},
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700119 {"byd_1200p_video", BYD_1200P_VIDEO_PANEL},
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800120 {"r69006_1080p_cmd",R69006_1080P_CMD_PANEL},
121 {"r69006_1080p_video",R69006_1080P_VIDEO_PANEL},
Padmanabhan Komandurue108ed02015-12-21 12:43:07 +0530122 {"hx8394f_720p_video", HX8394F_720P_VIDEO_PANEL},
Padmanabhan Komanduru7460e442016-01-21 12:30:34 +0530123 {"truly_720p_video", TRULY_720P_VIDEO_PANEL},
Vishnuvardhan Prodduturia0989b32016-02-15 18:07:44 +0530124 {"truly_wuxga_video", TRULY_WUXGA_VIDEO_PANEL},
125 {"truly_720p_cmd", TRULY_720P_CMD_PANEL},
Ray Zhangfb6025a2016-04-08 10:57:30 +0800126 {"lead_fl10802_fwvga_video", LEAD_FL10802_FWVGA_VIDEO_PANEL},
Padmanabhan Komanduru19636322018-04-30 16:52:59 +0530127 {"hx8399c_fhd_plus_video", HX8399C_FHD_PLUSE_VIDEO_PANEL},
128 {"hx8399c_hd_plus_video", HX8399C_HD_PLUS_VIDEO_PANEL},
Padmanabhan Komandurub5968282018-05-07 14:07:54 +0530129 {"nt35695b_truly_fhd_video", NT35695B_TRULY_FHD_VIDEO_PANEL},
130 {"nt35695b_truly_fhd_cmd", NT35695B_TRULY_FHD_CMD_PANEL},
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700131};
132
133static uint32_t panel_id;
134
Sandeep Panda75fddaa2015-07-06 11:38:25 +0530135#define TRULY_1080P_PANEL_ON_DELAY 40
Sandeep Pandac797d542015-06-12 14:37:55 +0530136
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700137int oem_panel_rotation()
138{
139 return NO_ERROR;
140}
141
142int oem_panel_on()
143{
144 /*
145 *OEM can keep their panel specific on instructions in this
146 *function
feifanz525046b2015-06-01 20:31:06 +0800147 */
148 if (panel_id == OTM1906C_1080P_CMD_PANEL) {
149 /* needs extra delay to avoid unexpected artifacts */
150 mdelay(OTM1906C_1080P_CMD_PANEL_ON_DELAY);
Sandeep Panda75fddaa2015-07-06 11:38:25 +0530151 } else if (panel_id == TRULY_1080P_CMD_PANEL ||
152 panel_id == TRULY_1080P_VIDEO_PANEL) {
153 mdelay(TRULY_1080P_PANEL_ON_DELAY);
Ray Zhang6ec437c2015-12-04 16:08:08 +0800154 }else if (panel_id == R69006_1080P_CMD_PANEL) {
155 mdelay(R69006_1080P_CMD_PANEL_ON_DELAY);
feifanz525046b2015-06-01 20:31:06 +0800156 }
Sandeep Pandac797d542015-06-12 14:37:55 +0530157
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700158 return NO_ERROR;
159}
160
161int oem_panel_off()
162{
163 /* OEM can keep their panel specific off instructions
164 * in this function
165 */
166 return NO_ERROR;
167}
168
169static int init_panel_data(struct panel_struct *panelstruct,
170 struct msm_panel_info *pinfo,
171 struct mdss_dsi_phy_ctrl *phy_db)
172{
173 int pan_type = PANEL_TYPE_DSI;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700174 struct oem_panel_data *oem_data = mdss_dsi_get_oem_data_ptr();
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700175
176 switch (panel_id) {
177 case TRULY_1080P_VIDEO_PANEL:
178 panelstruct->paneldata = &truly_1080p_video_panel_data;
Padmanabhan Komanduru799dfd02018-06-18 20:00:29 +0530179 panelstruct->backlightinfo = &truly_1080p_video_backlight;
180 if (platform_is_sdm439() || platform_is_sdm429()) {
181 panelstruct->paneldata->panel_with_enable_gpio = 0;
182 panelstruct->backlightinfo->bl_interface_type = 0;
183 } else {
184 panelstruct->paneldata->panel_with_enable_gpio = 1;
185 }
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700186 panelstruct->panelres = &truly_1080p_video_panel_res;
187 panelstruct->color = &truly_1080p_video_color;
188 panelstruct->videopanel = &truly_1080p_video_video_panel;
189 panelstruct->commandpanel = &truly_1080p_video_command_panel;
190 panelstruct->state = &truly_1080p_video_state;
191 panelstruct->laneconfig = &truly_1080p_video_lane_config;
192 panelstruct->paneltiminginfo
193 = &truly_1080p_video_timing_info;
194 panelstruct->panelresetseq
195 = &truly_1080p_video_panel_reset_seq;
Padmanabhan Komanduru799dfd02018-06-18 20:00:29 +0530196 pinfo->labibb = &truly_1080p_video_labibb;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700197 pinfo->mipi.panel_on_cmds
198 = truly_1080p_video_on_command;
199 pinfo->mipi.num_of_panel_on_cmds
200 = TRULY_1080P_VIDEO_ON_COMMAND;
201 pinfo->mipi.panel_off_cmds
202 = truly_1080p_video_off_command;
203 pinfo->mipi.num_of_panel_off_cmds
204 = TRULY_1080P_VIDEO_OFF_COMMAND;
Padmanabhan Komanduru799dfd02018-06-18 20:00:29 +0530205 if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
206 memcpy(phy_db->timing,
207 truly_1080p_video_12nm_timings,
208 TIMING_SIZE_12NM);
209 else
210 memcpy(phy_db->timing,
211 truly_1080p_video_timings, TIMING_SIZE);
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700212 pinfo->mipi.signature = TRULY_1080P_VIDEO_SIGNATURE;
213 break;
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +0530214 case TRULY_1080P_CMD_PANEL:
215 panelstruct->paneldata = &truly_1080p_cmd_panel_data;
Padmanabhan Komanduru799dfd02018-06-18 20:00:29 +0530216 panelstruct->backlightinfo = &truly_1080p_cmd_backlight;
217 if (platform_is_sdm439() || platform_is_sdm429()) {
218 panelstruct->paneldata->panel_with_enable_gpio = 0;
219 panelstruct->backlightinfo->bl_interface_type = 0;
220 } else {
221 panelstruct->paneldata->panel_with_enable_gpio = 1;
222 }
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +0530223 panelstruct->panelres = &truly_1080p_cmd_panel_res;
224 panelstruct->color = &truly_1080p_cmd_color;
225 panelstruct->videopanel = &truly_1080p_cmd_video_panel;
226 panelstruct->commandpanel = &truly_1080p_cmd_command_panel;
227 panelstruct->state = &truly_1080p_cmd_state;
228 panelstruct->laneconfig = &truly_1080p_cmd_lane_config;
229 panelstruct->paneltiminginfo
230 = &truly_1080p_cmd_timing_info;
231 panelstruct->panelresetseq
232 = &truly_1080p_cmd_panel_reset_seq;
Padmanabhan Komanduru799dfd02018-06-18 20:00:29 +0530233 pinfo->labibb = &truly_1080p_cmd_labibb;
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +0530234 pinfo->mipi.panel_on_cmds
235 = truly_1080p_cmd_on_command;
236 pinfo->mipi.num_of_panel_on_cmds
237 = TRULY_1080P_CMD_ON_COMMAND;
238 pinfo->mipi.panel_off_cmds
239 = truly_1080p_cmd_off_command;
240 pinfo->mipi.num_of_panel_off_cmds
241 = TRULY_1080P_CMD_OFF_COMMAND;
Padmanabhan Komanduru799dfd02018-06-18 20:00:29 +0530242 if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
243 memcpy(phy_db->timing,
244 truly_1080p_cmd_12nm_timings,
245 TIMING_SIZE_12NM);
246 else
247 memcpy(phy_db->timing,
248 truly_1080p_cmd_timings, TIMING_SIZE);
Jayant Shekhar9ea8dcd2015-04-20 15:18:37 +0530249 pinfo->mipi.signature = TRULY_1080P_CMD_SIGNATURE;
250 break;
feifanz174c82c2015-04-15 18:57:07 +0800251 case OTM1906C_1080P_CMD_PANEL:
252 panelstruct->paneldata = &otm1906c_1080p_cmd_panel_data;
253 panelstruct->paneldata->panel_with_enable_gpio = 1;
254 panelstruct->panelres = &otm1906c_1080p_cmd_panel_res;
255 panelstruct->color = &otm1906c_1080p_cmd_color;
256 panelstruct->videopanel = &otm1906c_1080p_cmd_video_panel;
257 panelstruct->commandpanel = &otm1906c_1080p_cmd_command_panel;
258 panelstruct->state = &otm1906c_1080p_cmd_state;
259 panelstruct->laneconfig = &otm1906c_1080p_cmd_lane_config;
260 panelstruct->paneltiminginfo
261 = &otm1906c_1080p_cmd_timing_info;
262 panelstruct->panelresetseq
263 = &otm1906c_1080p_cmd_panel_reset_seq;
264 panelstruct->backlightinfo = &otm1906c_1080p_cmd_backlight;
265 pinfo->mipi.panel_on_cmds
266 = otm1906c_1080p_cmd_on_command;
267 pinfo->mipi.num_of_panel_on_cmds
268 = OTM1906C_1080P_CMD_ON_COMMAND;
269 pinfo->mipi.panel_off_cmds
270 = otm1906c_1080p_cmd_off_command;
271 pinfo->mipi.num_of_panel_off_cmds
272 = OTM1906C_1080P_CMD_OFF_COMMAND;
273 memcpy(phy_db->timing,
274 otm1906c_1080p_cmd_timings, TIMING_SIZE);
275 pinfo->mipi.signature = OTM1906C_1080P_CMD_SIGNATURE;
276 break;
Ray Zhangf95f5b92015-06-25 15:34:29 +0800277 case HX8399A_1080P_VIDEO_PANEL:
278 panelstruct->paneldata = &hx8399a_1080p_video_panel_data;
279 panelstruct->panelres = &hx8399a_1080p_video_panel_res;
280 panelstruct->color = &hx8399a_1080p_video_color;
281 panelstruct->videopanel = &hx8399a_1080p_video_video_panel;
282 panelstruct->commandpanel = &hx8399a_1080p_video_command_panel;
283 panelstruct->state = &hx8399a_1080p_video_state;
284 panelstruct->laneconfig = &hx8399a_1080p_video_lane_config;
285 panelstruct->paneltiminginfo
286 = &hx8399a_1080p_video_timing_info;
287 panelstruct->panelresetseq
288 = &hx8399a_1080p_video_reset_seq;
289 panelstruct->backlightinfo = &hx8399a_1080p_video_backlight;
290 pinfo->mipi.panel_on_cmds
291 = hx8399a_1080p_video_on_command;
292 pinfo->mipi.num_of_panel_on_cmds
293 = HX8399A_1080P_VIDEO_ON_COMMAND;
294 pinfo->mipi.panel_off_cmds
295 = hx8399a_1080p_video_off_command;
296 pinfo->mipi.num_of_panel_off_cmds
297 = HX8399A_1080P_VIDEO_OFF_COMMAND;
298 memcpy(phy_db->timing,
299 hx8399a_1080p_video_timings, TIMING_SIZE);
300 pinfo->mipi.signature = HX8399A_1080P_VIDEO_SIGNATURE;
301 break;
Vishnuvardhan Prodduturi16eb20f2015-06-05 18:03:54 +0530302 case SHARP_1080P_CMD_PANEL:
303 panelstruct->paneldata = &sharp_1080p_cmd_panel_data;
304 panelstruct->panelres = &sharp_1080p_cmd_panel_res;
305 panelstruct->paneldata->panel_with_enable_gpio = 1;
306 panelstruct->color = &sharp_1080p_cmd_color;
307 panelstruct->videopanel = &sharp_1080p_cmd_video_panel;
308 panelstruct->commandpanel = &sharp_1080p_cmd_command_panel;
309 panelstruct->state = &sharp_1080p_cmd_state;
310 panelstruct->laneconfig = &sharp_1080p_cmd_lane_config;
311 panelstruct->paneltiminginfo
312 = &sharp_1080p_cmd_timing_info;
313 panelstruct->panelresetseq
314 = &sharp_1080p_cmd_panel_reset_seq;
315 panelstruct->backlightinfo = &sharp_1080p_cmd_backlight;
316 pinfo->mipi.panel_on_cmds
317 = sharp_1080p_cmd_on_command;
318 pinfo->mipi.num_of_panel_on_cmds
319 = SHARP_1080P_CMD_ON_COMMAND;
320 pinfo->mipi.panel_off_cmds
321 = sharp_1080p_cmd_off_command;
322 pinfo->mipi.num_of_panel_off_cmds
323 = SHARP_1080P_CMD_OFF_COMMAND;
324 memcpy(phy_db->timing,
325 sharp_1080p_cmd_timings, TIMING_SIZE);
326 break;
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530327 case NT35597_WQXGA_DUALDSI_VIDEO_PANEL:
328 panelstruct->paneldata = &nt35597_wqxga_dualdsi_video_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_video_panel_res;
334 panelstruct->color = &nt35597_wqxga_dualdsi_video_color;
335 panelstruct->videopanel = &nt35597_wqxga_dualdsi_video_video_panel;
336 panelstruct->commandpanel = &nt35597_wqxga_dualdsi_video_command_panel;
337 panelstruct->state = &nt35597_wqxga_dualdsi_video_state;
338 panelstruct->laneconfig = &nt35597_wqxga_dualdsi_video_lane_config;
339 panelstruct->paneltiminginfo
340 = &nt35597_wqxga_dualdsi_video_timing_info;
341 panelstruct->panelresetseq
342 = &nt35597_wqxga_dualdsi_video_reset_seq;
343 panelstruct->backlightinfo = &nt35597_wqxga_dualdsi_video_backlight;
344 pinfo->labibb = &nt35597_wqxga_dualdsi_video_labibb;
345
346 pinfo->mipi.panel_on_cmds
347 = nt35597_wqxga_dualdsi_video_on_command;
348 pinfo->mipi.num_of_panel_on_cmds
349 = NT35597_WQXGA_DUALDSI_VIDEO_ON_COMMAND;
350 pinfo->mipi.panel_off_cmds
351 = nt35597_wqxga_dualdsi_video_off_command;
352 pinfo->mipi.num_of_panel_off_cmds
353 = NT35597_WQXGA_DUALDSI_VIDEO_OFF_COMMAND;
354 memcpy(phy_db->timing, nt35597_wqxga_dualdsi_video_timings,
355 TIMING_SIZE);
356 pinfo->mipi.tx_eot_append = true;
357 break;
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +0530358 case NT35597_WQXGA_DUALDSI_CMD_PANEL:
359 panelstruct->paneldata = &nt35597_wqxga_dualdsi_cmd_panel_data;
360 panelstruct->paneldata->panel_operating_mode = DST_SPLIT_FLAG |
361 SPLIT_DISPLAY_FLAG | DUAL_DSI_FLAG;
362 panelstruct->paneldata->panel_with_enable_gpio = 0;
363
364 panelstruct->panelres = &nt35597_wqxga_dualdsi_cmd_panel_res;
365 panelstruct->color = &nt35597_wqxga_dualdsi_cmd_color;
366 panelstruct->videopanel = &nt35597_wqxga_dualdsi_cmd_video_panel;
367 panelstruct->commandpanel = &nt35597_wqxga_dualdsi_cmd_command_panel;
368 panelstruct->state = &nt35597_wqxga_dualdsi_cmd_state;
369 panelstruct->laneconfig = &nt35597_wqxga_dualdsi_cmd_lane_config;
370 panelstruct->paneltiminginfo
371 = &nt35597_wqxga_dualdsi_cmd_timing_info;
Padmanabhan Komanduru58fc57e2015-07-07 21:36:14 +0530372 /* Clkout timings are different for this panel on 8956 */
373 panelstruct->paneltiminginfo->tclk_post = 0x2b;
374 panelstruct->paneltiminginfo->tclk_pre = 0x28;
Vishnuvardhan Prodduturic1a46c52015-06-29 16:35:23 +0530375 panelstruct->panelresetseq
376 = &nt35597_wqxga_dualdsi_cmd_reset_seq;
377 panelstruct->backlightinfo = &nt35597_wqxga_dualdsi_cmd_backlight;
378
379 pinfo->labibb = &nt35597_wqxga_dualdsi_cmd_labibb;
380
381 pinfo->mipi.panel_on_cmds
382 = nt35597_wqxga_dualdsi_cmd_on_command;
383 pinfo->mipi.num_of_panel_on_cmds
384 = NT35597_WQXGA_DUALDSI_CMD_ON_COMMAND;
385 pinfo->mipi.panel_off_cmds
386 = nt35597_wqxga_dualdsi_cmd_off_command;
387 pinfo->mipi.num_of_panel_off_cmds
388 = NT35597_WQXGA_DUALDSI_CMD_OFF_COMMAND;
389 memcpy(phy_db->timing, nt35597_wqxga_dualdsi_cmd_timings,
390 TIMING_SIZE);
391 pinfo->mipi.tx_eot_append = true;
392 break;
Sandeep Pandaed082922015-08-03 12:18:25 +0530393 case NT35597_WQXGA_DSC_VIDEO_PANEL:
394 panelstruct->paneldata = &nt35597_wqxga_dsc_video_panel_data;
395 panelstruct->paneldata->panel_with_enable_gpio = 0;
396 panelstruct->paneldata->panel_operating_mode = USE_DSI1_PLL_FLAG;
397 panelstruct->panelres = &nt35597_wqxga_dsc_video_panel_res;
398 panelstruct->color = &nt35597_wqxga_dsc_video_color;
399 panelstruct->videopanel = &nt35597_wqxga_dsc_video_video_panel;
400 panelstruct->commandpanel = &nt35597_wqxga_dsc_video_command_panel;
401 panelstruct->state = &nt35597_wqxga_dsc_video_state;
402 panelstruct->laneconfig = &nt35597_wqxga_dsc_video_lane_config;
403 panelstruct->paneltiminginfo
404 = &nt35597_wqxga_dsc_video_timing_info;
405 panelstruct->panelresetseq
406 = &nt35597_wqxga_dsc_video_reset_seq;
407 panelstruct->backlightinfo = &nt35597_wqxga_dsc_video_backlight;
408 pinfo->labibb = &nt35597_wqxga_dsc_video_labibb;
409
410 pinfo->mipi.panel_on_cmds
411 = nt35597_wqxga_dsc_video_on_command;
412 pinfo->mipi.num_of_panel_on_cmds
413 = NT35597_WQXGA_DSC_VIDEO_ON_COMMAND;
414 pinfo->mipi.panel_off_cmds
415 = nt35597_wqxga_dsc_video_off_command;
416 pinfo->mipi.num_of_panel_off_cmds
417 = NT35597_WQXGA_DSC_VIDEO_OFF_COMMAND;
418 memcpy(phy_db->timing, nt35597_wqxga_dsc_video_timings,
419 TIMING_SIZE);
420 /* Clkout timings are different for this panel on 8956 */
421 panelstruct->paneltiminginfo->tclk_post = 0x04;
422 panelstruct->paneltiminginfo->tclk_pre = 0x20;
423 pinfo->mipi.tx_eot_append = true;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700424
425 panelstruct->paneldata->panel_operating_mode &= ~DUAL_PIPE_FLAG;
426 panelstruct->config = &nt35597_wqxga_dsc_video_config0;
427 if (oem_data) {
428 switch (oem_data->cfg_num[0]) {
429 case -1: /* default */
430 case 0:
431 panelstruct->config =
432 &nt35597_wqxga_dsc_video_config0;
433 break;
434 default:
435 dprintf(CRITICAL, "topology config%d not supported. fallback to default config0\n",
436 oem_data->cfg_num[0]);
437 panelstruct->config = &nt35597_wqxga_dsc_video_config0;
438 }
439 }
440 pinfo->lm_split[0] = panelstruct->config->lm_split[0];
441 pinfo->lm_split[1] = panelstruct->config->lm_split[1];
442 pinfo->num_dsc_enc = panelstruct->config->num_dsc_enc;
Sandeep Pandaed082922015-08-03 12:18:25 +0530443 pinfo->compression_mode = COMPRESSION_DSC;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700444
Sandeep Pandaed082922015-08-03 12:18:25 +0530445 pinfo->dsc.parameter_calc = mdss_dsc_parameters_calc;
446 pinfo->dsc.dsc2buf = mdss_dsc_to_buf;
447 pinfo->dsc.dsi_dsc_config = mdss_dsc_dsi_config;
448 pinfo->dsc.mdp_dsc_config = mdss_dsc_mdp_config;
449 break;
450 case NT35597_WQXGA_DSC_CMD_PANEL:
451 panelstruct->paneldata = &nt35597_wqxga_dsc_cmd_panel_data;
452 panelstruct->paneldata->panel_with_enable_gpio = 0;
453 panelstruct->paneldata->panel_operating_mode = USE_DSI1_PLL_FLAG;
454 panelstruct->panelres = &nt35597_wqxga_dsc_cmd_panel_res;
455 panelstruct->color = &nt35597_wqxga_dsc_cmd_color;
456 panelstruct->videopanel = &nt35597_wqxga_dsc_cmd_video_panel;
457 panelstruct->commandpanel = &nt35597_wqxga_dsc_cmd_command_panel;
458 panelstruct->state = &nt35597_wqxga_dsc_cmd_state;
459 panelstruct->laneconfig = &nt35597_wqxga_dsc_cmd_lane_config;
460 panelstruct->paneltiminginfo
461 = &nt35597_wqxga_dsc_cmd_timing_info;
462 panelstruct->panelresetseq
463 = &nt35597_wqxga_dsc_cmd_reset_seq;
464 panelstruct->backlightinfo = &nt35597_wqxga_dsc_cmd_backlight;
465 pinfo->labibb = &nt35597_wqxga_dsc_cmd_labibb;
466
467 pinfo->mipi.panel_on_cmds
468 = nt35597_wqxga_dsc_cmd_on_command;
469 pinfo->mipi.num_of_panel_on_cmds
470 = NT35597_WQXGA_DSC_CMD_ON_COMMAND;
471 pinfo->mipi.panel_off_cmds
472 = nt35597_wqxga_dsc_cmd_off_command;
473 pinfo->mipi.num_of_panel_off_cmds
474 = NT35597_WQXGA_DSC_CMD_OFF_COMMAND;
475 memcpy(phy_db->timing, nt35597_wqxga_dsc_cmd_timings,
476 TIMING_SIZE);
477 /* Clkout timings are different for this panel on 8956 */
478 panelstruct->paneltiminginfo->tclk_post = 0x04;
479 panelstruct->paneltiminginfo->tclk_pre = 0x20;
480 pinfo->mipi.tx_eot_append = true;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700481
482 panelstruct->paneldata->panel_operating_mode &= ~DUAL_PIPE_FLAG;
483 panelstruct->config = &nt35597_wqxga_dsc_cmd_config0;
484 if (oem_data) {
485 switch (oem_data->cfg_num[0]) {
486 case -1: /* default */
487 case 0:
488 panelstruct->config =
489 &nt35597_wqxga_dsc_cmd_config0;
490 break;
491 default:
492 dprintf(CRITICAL, "topology config%d not supported. fallback to default config0\n",
493 oem_data->cfg_num[0]);
494 panelstruct->config = &nt35597_wqxga_dsc_cmd_config0;
495 }
496 }
497 pinfo->lm_split[0] = panelstruct->config->lm_split[0];
498 pinfo->lm_split[1] = panelstruct->config->lm_split[1];
499 pinfo->num_dsc_enc = panelstruct->config->num_dsc_enc;
Sandeep Pandaed082922015-08-03 12:18:25 +0530500 pinfo->compression_mode = COMPRESSION_DSC;
Ujwal Patel41a665a2015-07-17 13:51:30 -0700501
Sandeep Pandaed082922015-08-03 12:18:25 +0530502 pinfo->dsc.parameter_calc = mdss_dsc_parameters_calc;
503 pinfo->dsc.dsc2buf = mdss_dsc_to_buf;
504 pinfo->dsc.dsi_dsc_config = mdss_dsc_dsi_config;
505 pinfo->dsc.mdp_dsc_config = mdss_dsc_mdp_config;
506 break;
Padmanabhan Komanduru4927c2c2015-08-21 14:55:16 +0530507 case HX8394D_720P_VIDEO_PANEL:
508 panelstruct->paneldata = &hx8394d_720p_video_panel_data;
509 panelstruct->panelres = &hx8394d_720p_video_panel_res;
510 panelstruct->color = &hx8394d_720p_video_color;
511 panelstruct->videopanel = &hx8394d_720p_video_video_panel;
512 panelstruct->commandpanel = &hx8394d_720p_video_command_panel;
513 panelstruct->state = &hx8394d_720p_video_state;
514 panelstruct->laneconfig = &hx8394d_720p_video_lane_config;
515 panelstruct->paneltiminginfo
516 = &hx8394d_720p_video_timing_info;
517 panelstruct->panelresetseq
518 = &hx8394d_720p_video_panel_reset_seq;
519 panelstruct->backlightinfo = &hx8394d_720p_video_backlight;
520 pinfo->mipi.panel_on_cmds
521 = hx8394d_720p_video_on_command;
522 pinfo->mipi.num_of_panel_on_cmds
523 = HX8394D_720P_VIDEO_ON_COMMAND;
524 pinfo->mipi.panel_off_cmds
525 = hx8394d_720p_video_off_command;
526 pinfo->mipi.num_of_panel_off_cmds
527 = HX8394D_720P_VIDEO_OFF_COMMAND;
528 memcpy(phy_db->timing,
529 hx8394d_720p_video_timings, TIMING_SIZE);
530 pinfo->mipi.signature = HX8394D_720P_VIDEO_SIGNATURE;
531 break;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800532 case R69006_1080P_CMD_PANEL:
533 panelstruct->paneldata = &r69006_1080p_cmd_panel_data;
534 panelstruct->panelres = &r69006_1080p_cmd_panel_res;
535 panelstruct->color = &r69006_1080p_cmd_color;
536 panelstruct->videopanel = &r69006_1080p_cmd_video_panel;
537 panelstruct->commandpanel = &r69006_1080p_cmd_command_panel;
538 panelstruct->state = &r69006_1080p_cmd_state;
539 panelstruct->laneconfig = &r69006_1080p_cmd_lane_config;
540 panelstruct->paneltiminginfo
541 = &r69006_1080p_cmd_timing_info;
542 panelstruct->panelresetseq
543 = &r69006_1080p_cmd_reset_seq;
544 panelstruct->backlightinfo = &r69006_1080p_cmd_backlight;
Ray Zhange9e3b692015-12-18 18:03:30 +0800545 pinfo->labibb = &r69006_1080p_cmd_labibb;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800546 pinfo->mipi.panel_on_cmds
547 = r69006_1080p_cmd_on_command;
548 pinfo->mipi.num_of_panel_on_cmds
549 = R69006_1080P_CMD_ON_COMMAND;
550 pinfo->mipi.panel_off_cmds
551 = r69006_1080p_cmd_off_command;
552 pinfo->mipi.num_of_panel_off_cmds
553 = R69006_1080P_CMD_OFF_COMMAND;
554 memcpy(phy_db->timing,
555 r69006_1080p_cmd_timings, TIMING_SIZE);
556 pinfo->mipi.signature = R69006_1080P_CMD_SIGNATURE;
Ray Zhangc8fd3632015-12-23 14:01:13 +0800557 pinfo->mipi.tx_eot_append = true;
558 pinfo->mipi.rx_eot_ignore = true;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800559 break;
560 case R69006_1080P_VIDEO_PANEL:
561 panelstruct->paneldata = &r69006_1080p_video_panel_data;
562 panelstruct->panelres = &r69006_1080p_video_panel_res;
563 panelstruct->color = &r69006_1080p_video_color;
564 panelstruct->videopanel = &r69006_1080p_video_video_panel;
565 panelstruct->commandpanel = &r69006_1080p_video_command_panel;
566 panelstruct->state = &r69006_1080p_video_state;
567 panelstruct->laneconfig = &r69006_1080p_video_lane_config;
568 panelstruct->paneltiminginfo
569 = &r69006_1080p_video_timing_info;
570 panelstruct->panelresetseq
571 = &r69006_1080p_video_reset_seq;
572 panelstruct->backlightinfo = &r69006_1080p_video_backlight;
Ray Zhange9e3b692015-12-18 18:03:30 +0800573 pinfo->labibb = &r69006_1080p_video_labibb;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800574 pinfo->mipi.panel_on_cmds
575 = r69006_1080p_video_on_command;
576 pinfo->mipi.num_of_panel_on_cmds
577 = R69006_1080P_VIDEO_ON_COMMAND;
578 pinfo->mipi.panel_off_cmds
579 = r69006_1080p_video_off_command;
580 pinfo->mipi.num_of_panel_off_cmds
581 = R69006_1080P_VIDEO_OFF_COMMAND;
582 memcpy(phy_db->timing,
583 r69006_1080p_video_timings, TIMING_SIZE);
584 pinfo->mipi.signature = R69006_1080P_VIDEO_SIGNATURE;
585 break;
586 case HX8394F_720P_VIDEO_PANEL:
587 panelstruct->paneldata = &hx8394f_720p_video_panel_data;
588 panelstruct->panelres = &hx8394f_720p_video_panel_res;
589 panelstruct->color = &hx8394f_720p_video_color;
590 panelstruct->videopanel = &hx8394f_720p_video_video_panel;
591 panelstruct->commandpanel = &hx8394f_720p_video_command_panel;
592 panelstruct->state = &hx8394f_720p_video_state;
593 panelstruct->laneconfig = &hx8394f_720p_video_lane_config;
594 panelstruct->paneltiminginfo
595 = &hx8394f_720p_video_timing_info;
596 panelstruct->panelresetseq
597 = &hx8394f_720p_video_reset_seq;
598 panelstruct->backlightinfo = &hx8394f_720p_video_backlight;
599 pinfo->mipi.panel_on_cmds
600 = hx8394f_720p_video_on_command;
601 pinfo->mipi.num_of_panel_on_cmds
602 = HX8394F_720P_VIDEO_ON_COMMAND;
603 pinfo->mipi.panel_off_cmds
604 = hx8394f_720p_video_off_command;
605 pinfo->mipi.num_of_panel_off_cmds
606 = HX8394F_720P_VIDEO_OFF_COMMAND;
607 memcpy(phy_db->timing,
608 hx8394f_720p_video_timings, TIMING_SIZE);
609 pinfo->mipi.signature = HX8394F_720P_VIDEO_SIGNATURE;
raghavendra ambadasdd106522018-07-13 11:11:50 +0530610 if ((board_platform_id() == SDM429) || (board_platform_id() == SDM439) ||
611 (board_platform_id() == SDA429) || (board_platform_id() == SDA439))
612 pinfo->disable_wled_labibb = true;
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800613 break;
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700614 case BYD_1200P_VIDEO_PANEL:
615 panelstruct->paneldata = &byd_1200p_video_panel_data;
616 panelstruct->paneldata->panel_with_enable_gpio = 1;
617 panelstruct->panelres = &byd_1200p_video_panel_res;
618 panelstruct->color = &byd_1200p_video_color;
619 panelstruct->videopanel = &byd_1200p_video_video_panel;
620 panelstruct->commandpanel = &byd_1200p_video_command_panel;
621 panelstruct->state = &byd_1200p_video_state;
622 panelstruct->laneconfig = &byd_1200p_video_lane_config;
623 panelstruct->paneltiminginfo
624 = &byd_1200p_video_timing_info;
625 panelstruct->panelresetseq
626 = &byd_1200p_video_panel_reset_seq;
627 panelstruct->backlightinfo = &byd_1200p_video_backlight;
628 pinfo->mipi.panel_on_cmds
629 = byd_1200p_video_on_command;
630 pinfo->mipi.num_of_panel_on_cmds
631 = BYD_1200P_VIDEO_ON_COMMAND;
632 pinfo->mipi.panel_off_cmds
633 = byd_1200p_video_off_command;
634 pinfo->mipi.num_of_panel_off_cmds
635 = BYD_1200P_VIDEO_OFF_COMMAND;
636 memcpy(phy_db->timing,
637 byd_1200p_video_timings, TIMING_SIZE);
638 pinfo->mipi.signature = BYD_1200P_VIDEO_SIGNATURE;
639 phy_db->regulator_mode = DSI_PHY_REGULATOR_LDO_MODE;
640 break;
Padmanabhan Komandurue108ed02015-12-21 12:43:07 +0530641 case TRULY_720P_VIDEO_PANEL:
642 panelstruct->paneldata = &truly_720p_video_panel_data;
643 panelstruct->paneldata->panel_with_enable_gpio = 1;
644 panelstruct->panelres = &truly_720p_video_panel_res;
645 panelstruct->color = &truly_720p_video_color;
646 panelstruct->videopanel = &truly_720p_video_video_panel;
647 panelstruct->commandpanel = &truly_720p_video_command_panel;
648 panelstruct->state = &truly_720p_video_state;
649 panelstruct->laneconfig = &truly_720p_video_lane_config;
650 panelstruct->paneltiminginfo
651 = &truly_720p_video_timing_info;
652 panelstruct->panelresetseq
653 = &truly_720p_video_panel_reset_seq;
654 panelstruct->backlightinfo = &truly_720p_video_backlight;
655 pinfo->mipi.panel_on_cmds
656 = truly_720p_video_on_command;
657 pinfo->mipi.num_of_panel_on_cmds
658 = TRULY_720P_VIDEO_ON_COMMAND;
659 pinfo->mipi.panel_off_cmds
660 = truly_720p_video_off_command;
661 pinfo->mipi.num_of_panel_off_cmds
662 = TRULY_720P_VIDEO_OFF_COMMAND;
663 memcpy(phy_db->timing,
664 truly_720p_video_timings, TIMING_SIZE);
665 pinfo->mipi.signature = TRULY_720P_VIDEO_SIGNATURE;
666 pinfo->mipi.tx_eot_append = true;
667 break;
Padmanabhan Komanduru7460e442016-01-21 12:30:34 +0530668 case TRULY_WUXGA_VIDEO_PANEL:
669 panelstruct->paneldata = &truly_wuxga_video_panel_data;
670 panelstruct->paneldata->panel_with_enable_gpio = 1;
671 panelstruct->panelres = &truly_wuxga_video_panel_res;
672 panelstruct->color = &truly_wuxga_video_color;
673 panelstruct->videopanel = &truly_wuxga_video_video_panel;
674 panelstruct->commandpanel = &truly_wuxga_video_command_panel;
675 panelstruct->state = &truly_wuxga_video_state;
676 panelstruct->laneconfig = &truly_wuxga_video_lane_config;
677 panelstruct->paneltiminginfo
678 = &truly_wuxga_video_timing_info;
679 panelstruct->panelresetseq
680 = &truly_wuxga_video_panel_reset_seq;
681 panelstruct->backlightinfo = &truly_wuxga_video_backlight;
682 pinfo->mipi.panel_on_cmds
683 = truly_wuxga_video_on_command;
684 pinfo->mipi.num_of_panel_on_cmds
685 = TRULY_WUXGA_VIDEO_ON_COMMAND;
686 pinfo->mipi.panel_off_cmds
687 = truly_wuxga_video_off_command;
688 pinfo->mipi.num_of_panel_off_cmds
689 = TRULY_WUXGA_VIDEO_OFF_COMMAND;
690 memcpy(phy_db->timing,
691 truly_wuxga_video_timings, TIMING_SIZE);
692 pinfo->mipi.signature = TRULY_WUXGA_VIDEO_SIGNATURE;
693 break;
Vishnuvardhan Prodduturia0989b32016-02-15 18:07:44 +0530694 case TRULY_720P_CMD_PANEL:
695 panelstruct->paneldata = &truly_720p_cmd_panel_data;
696 panelstruct->paneldata->panel_with_enable_gpio = 1;
697 panelstruct->panelres = &truly_720p_cmd_panel_res;
698 panelstruct->color = &truly_720p_cmd_color;
699 panelstruct->videopanel = &truly_720p_cmd_video_panel;
700 panelstruct->commandpanel = &truly_720p_cmd_command_panel;
701 panelstruct->state = &truly_720p_cmd_state;
702 panelstruct->laneconfig = &truly_720p_cmd_lane_config;
703 panelstruct->paneltiminginfo
704 = &truly_720p_cmd_timing_info;
705 panelstruct->panelresetseq
706 = &truly_720p_cmd_panel_reset_seq;
707 panelstruct->backlightinfo = &truly_720p_cmd_backlight;
708 pinfo->mipi.panel_on_cmds
709 = truly_720p_cmd_on_command;
710 pinfo->mipi.num_of_panel_on_cmds
711 = TRULY_720P_CMD_ON_COMMAND;
712 pinfo->mipi.panel_off_cmds
713 = truly_720p_cmd_off_command;
714 pinfo->mipi.num_of_panel_off_cmds
715 = TRULY_720P_CMD_OFF_COMMAND;
716 memcpy(phy_db->timing,
717 truly_720p_cmd_timings, TIMING_SIZE);
718 pinfo->mipi.signature = TRULY_720P_CMD_SIGNATURE;
719 pinfo->mipi.tx_eot_append = true;
720 break;
Ray Zhangfb6025a2016-04-08 10:57:30 +0800721 case LEAD_FL10802_FWVGA_VIDEO_PANEL:
722 panelstruct->paneldata = &lead_fl10802_fwvga_video_panel_data;
723 panelstruct->panelres = &lead_fl10802_fwvga_video_panel_res;
724 panelstruct->color = &lead_fl10802_fwvga_video_color;
725 panelstruct->videopanel = &lead_fl10802_fwvga_video_video_panel;
726 panelstruct->commandpanel
727 = &lead_fl10802_fwvga_video_command_panel;
728 panelstruct->state = &lead_fl10802_fwvga_video_state;
729 panelstruct->laneconfig = &lead_fl10802_fwvga_video_lane_config;
730 panelstruct->paneltiminginfo
731 = &lead_fl10802_fwvga_video_timing_info;
732 panelstruct->panelresetseq
733 = &lead_fl10802_fwvga_video_reset_seq;
734 panelstruct->backlightinfo
735 = &lead_fl10802_fwvga_video_backlight;
736 pinfo->mipi.panel_on_cmds
737 = lead_fl10802_fwvga_video_on_command;
738 pinfo->mipi.num_of_panel_on_cmds
739 = LEAD_FL10802_FWVGA_VIDEO_ON_COMMAND;
740 pinfo->mipi.panel_off_cmds
741 = lead_fl10802_fwvga_video_off_command;
742 pinfo->mipi.num_of_panel_off_cmds
743 = LEAD_FL10802_FWVGA_VIDEO_OFF_COMMAND;
744 memcpy(phy_db->timing,
745 lead_fl10802_fwvga_video_timings, TIMING_SIZE);
746 pinfo->mipi.signature = LEAD_FL10802_FWVGA_VIDEO_SIGNATURE;
Ray Zhange3eba402016-05-13 10:33:18 +0800747 pinfo->mipi.cmds_post_tg = 1;
Ray Zhangfb6025a2016-04-08 10:57:30 +0800748 break;
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +0530749 case HX8399C_FHD_PLUSE_VIDEO_PANEL:
750 panelstruct->paneldata = &hx8399c_fhd_pluse_video_panel_data;
751 panelstruct->panelres = &hx8399c_fhd_pluse_video_panel_res;
752 panelstruct->color = &hx8399c_fhd_pluse_video_color;
753 panelstruct->videopanel =
754 &hx8399c_fhd_pluse_video_video_panel;
755 panelstruct->commandpanel =
756 &hx8399c_fhd_pluse_video_command_panel;
757 panelstruct->state = &hx8399c_fhd_pluse_video_state;
758 panelstruct->laneconfig =
759 &hx8399c_fhd_pluse_video_lane_config;
760 panelstruct->paneltiminginfo
761 = &hx8399c_fhd_pluse_video_timing_info;
762 panelstruct->panelresetseq
763 = &hx8399c_fhd_pluse_video_panel_reset_seq;
764 panelstruct->backlightinfo = &hx8399c_fhd_pluse_video_backlight;
765 pinfo->labibb = &hx8399c_fhd_pluse_video_labibb;
766 pinfo->mipi.panel_on_cmds
767 = hx8399c_fhd_pluse_video_on_command;
768 pinfo->mipi.num_of_panel_on_cmds
769 = HX8399C_FHD_PLUSE_VIDEO_ON_COMMAND;
770 pinfo->mipi.panel_off_cmds
771 = hx8399c_fhd_pluse_video_off_command;
772 pinfo->mipi.num_of_panel_off_cmds
773 = HX8399C_FHD_PLUSE_VIDEO_OFF_COMMAND;
774 if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
775 memcpy(phy_db->timing,
776 hx8399c_fhd_pluse_video_12nm_timings,
777 TIMING_SIZE_12NM);
778 else
779 memcpy(phy_db->timing, hx8399c_fhd_pluse_video_timings,
780 TIMING_SIZE);
781 pinfo->mipi.signature = HX8399C_FHD_PLUSE_VIDEO_SIGNATURE;
782 break;
Padmanabhan Komanduru19636322018-04-30 16:52:59 +0530783 case HX8399C_HD_PLUS_VIDEO_PANEL:
784 panelstruct->paneldata = &hx8399c_hd_plus_video_panel_data;
785 panelstruct->panelres = &hx8399c_hd_plus_video_panel_res;
786 panelstruct->color = &hx8399c_hd_plus_video_color;
787 panelstruct->videopanel =
788 &hx8399c_hd_plus_video_video_panel;
789 panelstruct->commandpanel =
790 &hx8399c_hd_plus_video_command_panel;
791 panelstruct->state = &hx8399c_hd_plus_video_state;
792 panelstruct->laneconfig =
793 &hx8399c_hd_plus_video_lane_config;
794 panelstruct->paneltiminginfo
795 = &hx8399c_hd_plus_video_timing_info;
796 panelstruct->panelresetseq
797 = &hx8399c_hd_plus_video_panel_reset_seq;
798 panelstruct->backlightinfo = &hx8399c_hd_plus_video_backlight;
799 pinfo->labibb = &hx8399c_hd_plus_video_labibb;
800 pinfo->mipi.panel_on_cmds
801 = hx8399c_hd_plus_video_on_command;
802 pinfo->mipi.num_of_panel_on_cmds
803 = HX8399C_HD_PLUS_VIDEO_ON_COMMAND;
804 pinfo->mipi.panel_off_cmds
805 = hx8399c_hd_plus_video_off_command;
806 pinfo->mipi.num_of_panel_off_cmds
807 = HX8399C_HD_PLUS_VIDEO_OFF_COMMAND;
808 if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
809 memcpy(phy_db->timing,
810 hx8399c_hd_plus_video_12nm_timings,
811 TIMING_SIZE_12NM);
812 else
813 memcpy(phy_db->timing, hx8399c_hd_plus_video_timings,
814 TIMING_SIZE);
815 pinfo->mipi.signature = HX8399C_HD_PLUS_VIDEO_SIGNATURE;
816 pinfo->mipi.tx_eot_append = true;
817 break;
Padmanabhan Komandurub5968282018-05-07 14:07:54 +0530818 case NT35695B_TRULY_FHD_VIDEO_PANEL:
819 panelstruct->paneldata = &nt35695b_truly_fhd_video_panel_data;
820 panelstruct->panelres = &nt35695b_truly_fhd_video_panel_res;
821 panelstruct->color = &nt35695b_truly_fhd_video_color;
822 panelstruct->videopanel =
823 &nt35695b_truly_fhd_video_video_panel;
824 panelstruct->commandpanel =
825 &nt35695b_truly_fhd_video_command_panel;
826 panelstruct->state = &nt35695b_truly_fhd_video_state;
827 panelstruct->laneconfig =
828 &nt35695b_truly_fhd_video_lane_config;
829 panelstruct->paneltiminginfo
830 = &nt35695b_truly_fhd_video_timing_info;
831 panelstruct->panelresetseq
832 = &nt35695b_truly_fhd_video_panel_reset_seq;
833 panelstruct->backlightinfo = &nt35695b_truly_fhd_video_backlight;
834 pinfo->labibb = &nt35695b_truly_fhd_video_labibb;
835 pinfo->mipi.panel_on_cmds
836 = nt35695b_truly_fhd_video_on_command;
837 pinfo->mipi.num_of_panel_on_cmds
838 = NT35695B_TRULY_FHD_VIDEO_ON_COMMAND;
839 pinfo->mipi.panel_off_cmds
840 = nt35695b_truly_fhd_video_off_command;
841 pinfo->mipi.num_of_panel_off_cmds
842 = NT35695B_TRULY_FHD_VIDEO_OFF_COMMAND;
843 if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
844 memcpy(phy_db->timing,
845 nt35695b_truly_fhd_video_12nm_timings,
846 TIMING_SIZE_12NM);
847 else
848 memcpy(phy_db->timing, nt35695b_truly_fhd_video_timings,
849 TIMING_SIZE);
850 pinfo->mipi.signature = NT35695B_TRULY_FHD_VIDEO_SIGNATURE;
851 pinfo->mipi.tx_eot_append = true;
852 break;
853 case NT35695B_TRULY_FHD_CMD_PANEL:
854 panelstruct->paneldata = &nt35695b_truly_fhd_cmd_panel_data;
855 panelstruct->panelres = &nt35695b_truly_fhd_cmd_panel_res;
856 panelstruct->color = &nt35695b_truly_fhd_cmd_color;
857 panelstruct->videopanel =
858 &nt35695b_truly_fhd_cmd_video_panel;
859 panelstruct->commandpanel =
860 &nt35695b_truly_fhd_cmd_command_panel;
861 panelstruct->state = &nt35695b_truly_fhd_cmd_state;
862 panelstruct->laneconfig =
863 &nt35695b_truly_fhd_cmd_lane_config;
864 panelstruct->paneltiminginfo
865 = &nt35695b_truly_fhd_cmd_timing_info;
866 panelstruct->panelresetseq
867 = &nt35695b_truly_fhd_cmd_panel_reset_seq;
868 panelstruct->backlightinfo = &nt35695b_truly_fhd_cmd_backlight;
869 pinfo->labibb = &nt35695b_truly_fhd_cmd_labibb;
870 pinfo->mipi.panel_on_cmds
871 = nt35695b_truly_fhd_cmd_on_command;
872 pinfo->mipi.num_of_panel_on_cmds
873 = NT35695B_TRULY_FHD_CMD_ON_COMMAND;
874 pinfo->mipi.panel_off_cmds
875 = nt35695b_truly_fhd_cmd_off_command;
876 pinfo->mipi.num_of_panel_off_cmds
877 = NT35695B_TRULY_FHD_CMD_OFF_COMMAND;
878 if (phy_db->pll_type == DSI_PLL_TYPE_12NM)
879 memcpy(phy_db->timing,
880 nt35695b_truly_fhd_cmd_12nm_timings,
881 TIMING_SIZE_12NM);
882 else
883 memcpy(phy_db->timing, nt35695b_truly_fhd_cmd_timings,
884 TIMING_SIZE);
885 pinfo->mipi.signature = NT35695B_TRULY_FHD_CMD_SIGNATURE;
886 pinfo->mipi.tx_eot_append = true;
887 break;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700888 case UNKNOWN_PANEL:
889 default:
890 memset(panelstruct, 0, sizeof(struct panel_struct));
891 memset(pinfo->mipi.panel_on_cmds, 0,
892 sizeof(struct mipi_dsi_cmd));
893 pinfo->mipi.num_of_panel_on_cmds = 0;
894 memset(pinfo->mipi.panel_off_cmds, 0,
895 sizeof(struct mipi_dsi_cmd));
896 pinfo->mipi.num_of_panel_off_cmds = 0;
897 memset(phy_db->timing, 0, TIMING_SIZE);
898 pan_type = PANEL_TYPE_UNKNOWN;
899 break;
900 }
Ujwal Patel41a665a2015-07-17 13:51:30 -0700901
902 dprintf(SPEW, "lm_split[0]=%d lm_split[1]=%d mode=0x%x\n",
903 pinfo->lm_split[0], pinfo->lm_split[1],
904 panelstruct->paneldata->panel_operating_mode);
905
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700906 return pan_type;
907}
908
Ray Zhangf95f5b92015-06-25 15:34:29 +0800909#define DISPLAY_MAX_PANEL_DETECTION 2
910static uint32_t auto_pan_loop = 0;
911
912uint32_t oem_panel_max_auto_detect_panels()
913{
914 return target_panel_auto_detect_enabled() ?
915 DISPLAY_MAX_PANEL_DETECTION : 0;
916}
917
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700918int oem_panel_select(const char *panel_name, struct panel_struct *panelstruct,
919 struct msm_panel_info *pinfo,
920 struct mdss_dsi_phy_ctrl *phy_db)
921{
922 uint32_t hw_id = board_hardware_id();
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700923 uint32_t hw_subtype = board_hardware_subtype();
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700924 int32_t panel_override_id;
feifanz028544e2015-07-28 20:58:57 +0800925 uint32_t target_id, plat_hw_ver_major;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700926
927 if (panel_name) {
928 panel_override_id = panel_name_to_id(supp_panels,
929 ARRAY_SIZE(supp_panels), panel_name);
930
931 if (panel_override_id < 0) {
932 dprintf(CRITICAL, "Not able to search the panel:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530933 panel_name);
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700934 } else if (panel_override_id < UNKNOWN_PANEL) {
935 /* panel override using fastboot oem command */
936 panel_id = panel_override_id;
937
938 dprintf(INFO, "OEM panel override:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530939 panel_name);
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700940 goto panel_init;
941 }
942 }
943
944 switch (hw_id) {
945 case HW_PLATFORM_MTP:
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530946 if (platform_is_msm8956())
947 panel_id = NT35597_WQXGA_DUALDSI_VIDEO_PANEL;
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +0530948 else if (platform_is_msm8917())
Jayant Shekhar9c0533e2016-01-28 11:17:18 +0530949 panel_id = TRULY_720P_VIDEO_PANEL;
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +0530950 else if (platform_is_sdm439())
951 panel_id = HX8399C_FHD_PLUSE_VIDEO_PANEL;
Padmanabhan Komanduru19636322018-04-30 16:52:59 +0530952 else if (platform_is_sdm429())
953 panel_id = HX8399C_HD_PLUS_VIDEO_PANEL;
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530954 else
955 panel_id = TRULY_1080P_VIDEO_PANEL;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700956 break;
957 case HW_PLATFORM_SURF:
Vishnuvardhan Prodduturie116c002015-07-14 17:14:25 +0530958 case HW_PLATFORM_RCM:
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530959 if (platform_is_msm8956())
960 panel_id = NT35597_WQXGA_DUALDSI_VIDEO_PANEL;
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +0530961 else if (platform_is_msm8917())
Jayant Shekhar9c0533e2016-01-28 11:17:18 +0530962 panel_id = TRULY_720P_VIDEO_PANEL;
Padmanabhan Komanduruc570f302018-04-30 09:32:31 +0530963 else if (platform_is_sdm439())
964 panel_id = HX8399C_FHD_PLUSE_VIDEO_PANEL;
Padmanabhan Komanduru19636322018-04-30 16:52:59 +0530965 else if (platform_is_sdm429())
966 panel_id = HX8399C_HD_PLUS_VIDEO_PANEL;
Padmanabhan Komanduru49a86cf2015-06-08 18:24:30 +0530967 else
968 panel_id = TRULY_1080P_VIDEO_PANEL;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -0700969 break;
feifanz174c82c2015-04-15 18:57:07 +0800970 case HW_PLATFORM_QRD:
Vishnuvardhan Prodduturia84a0e82018-10-25 12:55:55 +0530971 if (platform_is_qm215()) {
972 panel_id = HX8399C_HD_PLUS_VIDEO_PANEL;
973 break;
974 }
975
Sujeev Dias6bc9fa32015-08-03 23:13:44 -0700976 if (hw_subtype == HW_PLATFORM_SUBTYPE_POLARIS) {
977 panel_id = BYD_1200P_VIDEO_PANEL;
978 break;
979 }
980
feifanz028544e2015-07-28 20:58:57 +0800981 target_id = board_target_id();
982 plat_hw_ver_major = ((target_id >> 16) & 0xFF);
983
984 /*
985 * 8952 SKUM DVT2 - HX8399A 1080p video panel
986 * 8952 SKUM EVT1/EVT2 - OTM1906C 1080p cmd panel
987 */
988 if (plat_hw_ver_major >= 4)
989 panel_id = HX8399A_1080P_VIDEO_PANEL;
990 else
991 panel_id = OTM1906C_1080P_CMD_PANEL;
Ray Zhangf95f5b92015-06-25 15:34:29 +0800992
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800993 if (platform_is_msm8937()){
Ray Zhang49cfcc82016-08-09 19:08:37 +0800994 if (hw_subtype == 0x80) {
995 /* 8940 SKU7 uses HX8394F */
Ray Zhang4bbc7b02015-12-04 16:07:20 +0800996 panel_id = HX8394F_720P_VIDEO_PANEL;
Ray Zhang49cfcc82016-08-09 19:08:37 +0800997 } else {
998 /* 8937 SKU1 uses R69006, SKU2 uses HX8394F */
999 if (plat_hw_ver_major > 16)
1000 panel_id = HX8394F_720P_VIDEO_PANEL;
1001 else
1002 panel_id = R69006_1080P_CMD_PANEL;
1003 }
Ray Zhang4bbc7b02015-12-04 16:07:20 +08001004 }
1005
Lei Chen4b58d6d2018-03-15 17:52:11 +08001006 if (platform_is_sdm439()) {
1007 panel_id = HX8399C_FHD_PLUSE_VIDEO_PANEL;
1008 }
1009
1010 if (platform_is_sdm429()) {
1011 panel_id = HX8399C_HD_PLUS_VIDEO_PANEL;
1012 }
1013
Ray Zhang4bbc7b02015-12-04 16:07:20 +08001014 /* QRD EVT1 uses OTM1906C, and EVT2 uses HX8394F */
Ray Zhangf95f5b92015-06-25 15:34:29 +08001015 if (platform_is_msm8956()) {
1016 switch (auto_pan_loop) {
1017 case 0:
1018 panel_id = HX8399A_1080P_VIDEO_PANEL;
1019 break;
1020 case 1:
1021 panel_id = OTM1906C_1080P_CMD_PANEL;
1022 break;
1023 default:
1024 panel_id = UNKNOWN_PANEL;
1025 dprintf(CRITICAL, "Unknown panel\n");
1026 return PANEL_TYPE_UNKNOWN;
1027 }
1028 auto_pan_loop++;
Ray Zhangfb6025a2016-04-08 10:57:30 +08001029 } else if (platform_is_msm8917()) {
1030 if (hw_subtype == 0x0A) /* TMO target */
1031 panel_id = LEAD_FL10802_FWVGA_VIDEO_PANEL;
1032 else
1033 panel_id = HX8394F_720P_VIDEO_PANEL;
Ray Zhangf95f5b92015-06-25 15:34:29 +08001034 }
1035
feifanz174c82c2015-04-15 18:57:07 +08001036 break;
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -07001037 default:
1038 dprintf(CRITICAL, "Display not enabled for %d HW type\n",
1039 hw_id);
1040 return PANEL_TYPE_UNKNOWN;
1041 }
1042
1043panel_init:
1044 /*
1045 * Update all data structures after 'panel_init' label. Only panel
1046 * selection is supposed to happen before that.
1047 */
Padmanabhan Komanduru2ab03a62018-05-17 14:38:59 +05301048 if (platform_is_sdm439() || platform_is_sdm429()) {
1049 phy_db->pll_type = DSI_PLL_TYPE_12NM;
1050 pinfo->lane_config = mdss_dsi_lane_config;
1051 goto end;
1052 }
1053
Padmanabhan Komanduru0e19a362015-06-08 13:29:32 +05301054 if (platform_is_msm8956())
1055 memcpy(panel_regulator_settings,
1056 dcdc_regulator_settings_hpm, REGULATOR_SIZE);
1057 else
1058 memcpy(panel_regulator_settings,
1059 dcdc_regulator_settings_lpm, REGULATOR_SIZE);
Padmanabhan Komanduru2ab03a62018-05-17 14:38:59 +05301060end:
Padmanabhan Komanduru9d49f892015-04-10 12:58:46 -07001061 pinfo->pipe_type = MDSS_MDP_PIPE_TYPE_RGB;
1062 return init_panel_data(panelstruct, pinfo, phy_db);
1063}