blob: add0d9e38e359aaa5374776d96b185e5b8fe4b5b [file] [log] [blame]
Sachin Bhayare3068e6e2017-02-15 15:05:44 +05301/* Copyright (c) 2014-2015, 2017, The Linux Foundation. All rights reserved.
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +05302 *
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 <err.h>
32#include <smem.h>
33#include <msm_panel.h>
34#include <board.h>
35#include <mipi_dsi.h>
36#include <target/display.h>
37#include "include/panel.h"
38#include "panel_display.h"
39
40#include "include/panel_hx8394d_720p_video.h"
Ray Zhanga59d9722014-10-23 16:19:07 +080041#include "include/panel_hx8379a_fwvga_skua_video.h"
Shivaraj Shettyf9daa722014-11-17 17:29:49 +053042#include "include/panel_sharp_qhd_video.h"
Sandeep Panda9d9079f2014-11-24 18:46:25 +053043#include "include/panel_truly_wvga_cmd.h"
Ray Zhangafc86662014-11-07 11:23:57 +080044#include "include/panel_ili9806e_fwvga_video.h"
Ray Zhang6da38ca2014-11-18 16:02:11 +080045#include "include/panel_hx8379c_fwvga_video.h"
Shivaraj Shettycecaa0f2014-11-21 14:51:38 +053046#include "include/panel_hx8394d_qhd_video.h"
Yange194df92015-06-09 15:41:01 +080047#include "include/panel_fl10802_fwvga_video.h"
Sachin Bhayare3068e6e2017-02-15 15:05:44 +053048#include "include/panel_auo_qvga_cmd.h"
49#include "include/panel_auo_cx_qvga_cmd.h"
50#include "include/panel_auo_400p_cmd.h"
Ashish Garg22001a92017-08-07 14:46:54 +053051#include "include/panel_auo_390p_cmd.h"
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +053052
53#define DISPLAY_MAX_PANEL_DETECTION 0
Sandeep Panda419bfbb2015-01-09 19:29:20 +053054#define ILI9806E_FWVGA_VIDEO_PANEL_POST_INIT_DELAY 68
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +053055
Ray Zhanga59d9722014-10-23 16:19:07 +080056enum {
57 QRD_SKUA = 0x00,
58 QRD_SKUC = 0x08,
59 QRD_SKUE = 0x09,
Yange194df92015-06-09 15:41:01 +080060 QRD_SKUT = 0x0A,
Ray Zhanga59d9722014-10-23 16:19:07 +080061};
62
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +053063/*---------------------------------------------------------------------------*/
64/* static panel selection variable */
65/*---------------------------------------------------------------------------*/
66static uint32_t auto_pan_loop = 0;
67
68enum {
69 HX8394D_720P_VIDEO_PANEL,
Ray Zhanga59d9722014-10-23 16:19:07 +080070 HX8379A_FWVGA_SKUA_VIDEO_PANEL,
Shivaraj Shettyf9daa722014-11-17 17:29:49 +053071 SHARP_QHD_VIDEO_PANEL,
Sandeep Panda9d9079f2014-11-24 18:46:25 +053072 TRULY_WVGA_CMD_PANEL,
Ray Zhangafc86662014-11-07 11:23:57 +080073 ILI9806E_FWVGA_VIDEO_PANEL,
Ray Zhang6da38ca2014-11-18 16:02:11 +080074 HX8379C_FWVGA_VIDEO_PANEL,
Shivaraj Shettycecaa0f2014-11-21 14:51:38 +053075 HX8394D_QHD_VIDEO_PANEL,
Yange194df92015-06-09 15:41:01 +080076 FL10802_FWVGA_VIDEO_PANEL,
Sachin Bhayare3068e6e2017-02-15 15:05:44 +053077 AUO_QVGA_CMD_PANEL,
78 AUO_CX_QVGA_CMD_PANEL,
79 AUO_400P_CMD_PANEL,
Ashish Garg22001a92017-08-07 14:46:54 +053080 AUO_390P_CMD_PANEL,
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +053081 UNKNOWN_PANEL
82};
83
84/*
85 * The list of panels that are supported on this target.
86 * Any panel in this list can be selected using fastboot oem command.
87 */
88static struct panel_list supp_panels[] = {
Ray Zhanga59d9722014-10-23 16:19:07 +080089 {"hx8394d_720p_video", HX8394D_720P_VIDEO_PANEL},
90 {"hx8379a_fwvga_skua_video", HX8379A_FWVGA_SKUA_VIDEO_PANEL},
Ray Zhangafc86662014-11-07 11:23:57 +080091 {"sharp_qhd_video", SHARP_QHD_VIDEO_PANEL},
Sandeep Panda9d9079f2014-11-24 18:46:25 +053092 {"truly_wvga_cmd", TRULY_WVGA_CMD_PANEL},
Ray Zhangafc86662014-11-07 11:23:57 +080093 {"ili9806e_fwvga_video",ILI9806E_FWVGA_VIDEO_PANEL},
Ray Zhang6da38ca2014-11-18 16:02:11 +080094 {"hx8379c_fwvga_video",HX8379C_FWVGA_VIDEO_PANEL},
Yange194df92015-06-09 15:41:01 +080095 {"hx8394d_qhd_video", HX8394D_QHD_VIDEO_PANEL},
Sachin Bhayare3068e6e2017-02-15 15:05:44 +053096 {"fl10802_fwvga_video", FL10802_FWVGA_VIDEO_PANEL},
97 {"auo_qvga_cmd", AUO_QVGA_CMD_PANEL},
98 {"auo_cx_qvga_cmd", AUO_CX_QVGA_CMD_PANEL},
99 {"auo_400p_cmd", AUO_400P_CMD_PANEL},
Ashish Garg22001a92017-08-07 14:46:54 +0530100 {"auo_390p_cmd", AUO_390P_CMD_PANEL},
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +0530101};
102
103static uint32_t panel_id;
104
105int oem_panel_rotation()
106{
107 return NO_ERROR;
108}
109
110int oem_panel_on()
111{
112 /*
113 * OEM can keep there panel specific on instructions in this
114 * function
115 */
Sandeep Panda419bfbb2015-01-09 19:29:20 +0530116 if (panel_id == ILI9806E_FWVGA_VIDEO_PANEL)
117 mdelay(ILI9806E_FWVGA_VIDEO_PANEL_POST_INIT_DELAY);
118
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +0530119 return NO_ERROR;
120}
121
122int oem_panel_off()
123{
124 /*
125 * OEM can keep their panel specific off instructions
126 * in this function
127 */
128 return NO_ERROR;
129}
130
131static int init_panel_data(struct panel_struct *panelstruct,
132 struct msm_panel_info *pinfo,
133 struct mdss_dsi_phy_ctrl *phy_db)
134{
135 int pan_type = PANEL_TYPE_DSI;
136
137 switch (panel_id) {
138 case HX8394D_720P_VIDEO_PANEL:
139 panelstruct->paneldata = &hx8394d_720p_video_panel_data;
140 panelstruct->panelres = &hx8394d_720p_video_panel_res;
141 panelstruct->color = &hx8394d_720p_video_color;
142 panelstruct->videopanel = &hx8394d_720p_video_video_panel;
143 panelstruct->commandpanel = &hx8394d_720p_video_command_panel;
144 panelstruct->state = &hx8394d_720p_video_state;
145 panelstruct->laneconfig = &hx8394d_720p_video_lane_config;
146 panelstruct->paneltiminginfo
147 = &hx8394d_720p_video_timing_info;
148 panelstruct->panelresetseq
149 = &hx8394d_720p_video_panel_reset_seq;
150 panelstruct->backlightinfo = &hx8394d_720p_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530151 pinfo->mipi.panel_on_cmds
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +0530152 = hx8394d_720p_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530153 pinfo->mipi.num_of_panel_on_cmds
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +0530154 = HX8394D_720P_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530155 pinfo->mipi.panel_off_cmds
156 = hx8394d_720p_video_off_command;
157 pinfo->mipi.num_of_panel_off_cmds
158 = HX8394D_720P_VIDEO_OFF_COMMAND;
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +0530159 memcpy(phy_db->timing,
160 hx8394d_720p_video_timings, TIMING_SIZE);
161 pinfo->mipi.signature = HX8394D_720P_VIDEO_SIGNATURE;
162 break;
Ray Zhanga59d9722014-10-23 16:19:07 +0800163 case HX8379A_FWVGA_SKUA_VIDEO_PANEL:
164 panelstruct->paneldata = &hx8379a_fwvga_skua_video_panel_data;
165 panelstruct->panelres = &hx8379a_fwvga_skua_video_panel_res;
166 panelstruct->color = &hx8379a_fwvga_skua_video_color;
167 panelstruct->videopanel = &hx8379a_fwvga_skua_video_video_panel;
168 panelstruct->commandpanel = &hx8379a_fwvga_skua_video_command_panel;
169 panelstruct->state = &hx8379a_fwvga_skua_video_state;
170 panelstruct->laneconfig = &hx8379a_fwvga_skua_video_lane_config;
171 panelstruct->paneltiminginfo
172 = &hx8379a_fwvga_skua_video_timing_info;
173 panelstruct->panelresetseq
174 = &hx8379a_fwvga_skua_video_reset_seq;
175 panelstruct->backlightinfo = &hx8379a_fwvga_skua_video_backlight;
Ray Zhang790af752014-11-14 18:39:10 +0800176 pinfo->mipi.panel_on_cmds
Ray Zhanga59d9722014-10-23 16:19:07 +0800177 = hx8379a_fwvga_skua_video_on_command;
Ray Zhang790af752014-11-14 18:39:10 +0800178 pinfo->mipi.num_of_panel_on_cmds
Ray Zhanga59d9722014-10-23 16:19:07 +0800179 = HX8379A_FWVGA_SKUA_VIDEO_ON_COMMAND;
Ray Zhang790af752014-11-14 18:39:10 +0800180 pinfo->mipi.panel_off_cmds
181 = hx8379a_fwvga_skua_video_off_command;
182 pinfo->mipi.num_of_panel_off_cmds
183 = HX8379A_FWVGA_SKUA_VIDEO_OFF_COMMAND;
Ray Zhanga59d9722014-10-23 16:19:07 +0800184 memcpy(phy_db->timing,
185 hx8379a_fwvga_skua_video_timings, TIMING_SIZE);
186 pinfo->mipi.signature = HX8379A_FWVGA_SKUA_VIDEO_SIGNATURE;
187 break;
Shivaraj Shettyf9daa722014-11-17 17:29:49 +0530188 case SHARP_QHD_VIDEO_PANEL:
189 panelstruct->paneldata = &sharp_qhd_video_panel_data;
190 panelstruct->panelres = &sharp_qhd_video_panel_res;
191 panelstruct->color = &sharp_qhd_video_color;
192 panelstruct->videopanel = &sharp_qhd_video_video_panel;
193 panelstruct->commandpanel = &sharp_qhd_video_command_panel;
194 panelstruct->state = &sharp_qhd_video_state;
195 panelstruct->laneconfig = &sharp_qhd_video_lane_config;
196 panelstruct->paneltiminginfo
197 = &sharp_qhd_video_timing_info;
198 panelstruct->panelresetseq
199 = &sharp_qhd_video_panel_reset_seq;
200 panelstruct->backlightinfo = &sharp_qhd_video_backlight;
201 pinfo->mipi.panel_on_cmds
202 = sharp_qhd_video_on_command;
203 pinfo->mipi.num_of_panel_on_cmds
204 = SHARP_QHD_VIDEO_ON_COMMAND;
205 pinfo->mipi.panel_off_cmds
206 = sharp_qhd_video_off_command;
207 pinfo->mipi.num_of_panel_off_cmds
208 = SHARP_QHD_VIDEO_OFF_COMMAND;
209 memcpy(phy_db->timing, sharp_qhd_video_timings, TIMING_SIZE);
210 break;
Sandeep Panda9d9079f2014-11-24 18:46:25 +0530211 case TRULY_WVGA_CMD_PANEL:
212 panelstruct->paneldata = &truly_wvga_cmd_panel_data;
213 panelstruct->panelres = &truly_wvga_cmd_panel_res;
214 panelstruct->color = &truly_wvga_cmd_color;
215 panelstruct->videopanel = &truly_wvga_cmd_video_panel;
216 panelstruct->commandpanel = &truly_wvga_cmd_command_panel;
217 panelstruct->state = &truly_wvga_cmd_state;
218 panelstruct->laneconfig = &truly_wvga_cmd_lane_config;
219 panelstruct->paneltiminginfo
220 = &truly_wvga_cmd_timing_info;
221 panelstruct->panelresetseq
222 = &truly_wvga_cmd_reset_seq;
223 panelstruct->backlightinfo = &truly_wvga_cmd_backlight;
Shivaraj Shetty0dc27c42015-02-18 12:35:23 +0530224 pinfo->mipi.panel_on_cmds
Sandeep Panda9d9079f2014-11-24 18:46:25 +0530225 = truly_wvga_cmd_on_command;
Shivaraj Shetty0dc27c42015-02-18 12:35:23 +0530226 pinfo->mipi.num_of_panel_on_cmds
Sandeep Panda9d9079f2014-11-24 18:46:25 +0530227 = TRULY_WVGA_CMD_ON_COMMAND;
Shivaraj Shetty0dc27c42015-02-18 12:35:23 +0530228 pinfo->mipi.panel_off_cmds
229 = truly_wvga_cmd_off_command;
230 pinfo->mipi.num_of_panel_off_cmds
231 = TRULY_WVGA_CMD_OFF_COMMAND;
Sandeep Panda9d9079f2014-11-24 18:46:25 +0530232 memcpy(phy_db->timing,
233 truly_wvga_cmd_timings, TIMING_SIZE);
234 break;
Ray Zhangafc86662014-11-07 11:23:57 +0800235 case ILI9806E_FWVGA_VIDEO_PANEL:
236 panelstruct->paneldata = &ili9806e_fwvga_video_panel_data;
237 panelstruct->panelres = &ili9806e_fwvga_video_panel_res;
238 panelstruct->color = &ili9806e_fwvga_video_color;
239 panelstruct->videopanel = &ili9806e_fwvga_video_video_panel;
240 panelstruct->commandpanel = &ili9806e_fwvga_video_command_panel;
241 panelstruct->state = &ili9806e_fwvga_video_state;
242 panelstruct->laneconfig = &ili9806e_fwvga_video_lane_config;
243 panelstruct->paneltiminginfo
244 = &ili9806e_fwvga_video_timing_info;
245 panelstruct->panelresetseq
246 = &ili9806e_fwvga_video_reset_seq;
247 panelstruct->backlightinfo = &ili9806e_fwvga_video_backlight;
248 pinfo->mipi.panel_on_cmds
249 = ili9806e_fwvga_video_on_command;
250 pinfo->mipi.num_of_panel_on_cmds
251 = ILI9806E_FWVGA_VIDEO_ON_COMMAND;
252 pinfo->mipi.panel_off_cmds
253 = ili9806e_fwvga_video_off_command;
254 pinfo->mipi.num_of_panel_off_cmds
255 = ILI9806E_FWVGA_VIDEO_OFF_COMMAND;
256 memcpy(phy_db->timing,
257 ili9806e_fwvga_video_timings, TIMING_SIZE);
258 pinfo->mipi.signature = ILI9806E_FWVGA_VIDEO_SIGNATURE;
259 break;
Ray Zhang6da38ca2014-11-18 16:02:11 +0800260 case HX8379C_FWVGA_VIDEO_PANEL:
261 panelstruct->paneldata = &hx8379c_fwvga_video_panel_data;
262 panelstruct->panelres = &hx8379c_fwvga_video_panel_res;
263 panelstruct->color = &hx8379c_fwvga_video_color;
264 panelstruct->videopanel = &hx8379c_fwvga_video_video_panel;
265 panelstruct->commandpanel = &hx8379c_fwvga_video_command_panel;
266 panelstruct->state = &hx8379c_fwvga_video_state;
267 panelstruct->laneconfig = &hx8379c_fwvga_video_lane_config;
268 panelstruct->paneltiminginfo
269 = &hx8379c_fwvga_video_timing_info;
270 panelstruct->panelresetseq
271 = &hx8379c_fwvga_video_reset_seq;
272 panelstruct->backlightinfo = &hx8379c_fwvga_video_backlight;
273 pinfo->mipi.panel_on_cmds
274 = hx8379c_fwvga_video_on_command;
275 pinfo->mipi.num_of_panel_on_cmds
276 = HX8379C_FWVGA_VIDEO_ON_COMMAND;
277 pinfo->mipi.panel_off_cmds
278 = hx8379c_fwvga_video_off_command;
279 pinfo->mipi.num_of_panel_off_cmds
280 = HX8379C_FWVGA_VIDEO_OFF_COMMAND;
281 memcpy(phy_db->timing,
282 hx8379c_fwvga_video_timings, TIMING_SIZE);
283 pinfo->mipi.signature = HX8379C_FWVGA_VIDEO_SIGNATURE;
284 break;
Shivaraj Shettycecaa0f2014-11-21 14:51:38 +0530285 case HX8394D_QHD_VIDEO_PANEL:
286 panelstruct->paneldata = &hx8394d_qhd_video_panel_data;
287 panelstruct->panelres = &hx8394d_qhd_video_panel_res;
288 panelstruct->color = &hx8394d_qhd_video_color;
289 panelstruct->videopanel = &hx8394d_qhd_video_video_panel;
290 panelstruct->commandpanel = &hx8394d_qhd_video_command_panel;
291 panelstruct->state = &hx8394d_qhd_video_state;
292 panelstruct->laneconfig = &hx8394d_qhd_video_lane_config;
293 panelstruct->paneltiminginfo
294 = &hx8394d_qhd_video_timing_info;
295 panelstruct->panelresetseq
296 = &hx8394d_qhd_video_panel_reset_seq;
297 panelstruct->backlightinfo = &hx8394d_qhd_video_backlight;
Shivaraj Shetty0dc27c42015-02-18 12:35:23 +0530298 pinfo->mipi.panel_on_cmds
Shivaraj Shettycecaa0f2014-11-21 14:51:38 +0530299 = hx8394d_qhd_video_on_command;
Shivaraj Shetty0dc27c42015-02-18 12:35:23 +0530300 pinfo->mipi.num_of_panel_on_cmds
Shivaraj Shettycecaa0f2014-11-21 14:51:38 +0530301 = HX8394D_QHD_VIDEO_ON_COMMAND;
Shivaraj Shetty0dc27c42015-02-18 12:35:23 +0530302 pinfo->mipi.panel_off_cmds
303 = hx8394d_qhd_video_off_command;
304 pinfo->mipi.num_of_panel_off_cmds
305 = HX8394D_QHD_VIDEO_OFF_COMMAND;
Shivaraj Shettycecaa0f2014-11-21 14:51:38 +0530306 memcpy(phy_db->timing,
307 hx8394d_qhd_video_timings, TIMING_SIZE);
308 pinfo->mipi.signature = HX8394D_QHD_VIDEO_SIGNATURE;
309 break;
Yange194df92015-06-09 15:41:01 +0800310 case FL10802_FWVGA_VIDEO_PANEL:
311 panelstruct->paneldata = &fl10802_fwvga_video_panel_data;
312 panelstruct->panelres = &fl10802_fwvga_video_panel_res;
313 panelstruct->color = &fl10802_fwvga_video_color;
314 panelstruct->videopanel = &fl10802_fwvga_video_video_panel;
315 panelstruct->commandpanel = &fl10802_fwvga_video_command_panel;
316 panelstruct->state = &fl10802_fwvga_video_state;
317 panelstruct->laneconfig = &fl10802_fwvga_video_lane_config;
318 panelstruct->paneltiminginfo
319 = &fl10802_fwvga_video_timing_info;
320 panelstruct->panelresetseq
321 = &fl10802_fwvga_video_reset_seq;
322 panelstruct->backlightinfo = &fl10802_fwvga_video_backlight;
323 pinfo->mipi.panel_on_cmds
324 = fl10802_fwvga_video_on_command;
325 pinfo->mipi.num_of_panel_on_cmds
326 = FL10802_FWVGA_VIDEO_ON_COMMAND;
327 pinfo->mipi.panel_off_cmds
328 = fl10802_fwvga_video_off_command;
329 pinfo->mipi.num_of_panel_off_cmds
330 = FL10802_FWVGA_VIDEO_OFF_COMMAND;
331 memcpy(phy_db->timing,
332 fl10802_fwvga_video_timings, TIMING_SIZE);
333 pinfo->mipi.signature = FL10802_FWVGA_VIDEO_SIGNATURE;
Yang Xufbca05e2015-08-04 16:19:51 +0800334 pinfo->mipi.cmds_post_tg = 1;
Yange194df92015-06-09 15:41:01 +0800335 break;
Sachin Bhayare3068e6e2017-02-15 15:05:44 +0530336 case AUO_QVGA_CMD_PANEL:
337 panelstruct->paneldata = &auo_qvga_cmd_panel_data;
338 panelstruct->panelres = &auo_qvga_cmd_panel_res;
339 panelstruct->color = &auo_qvga_cmd_color;
340 panelstruct->videopanel = &auo_qvga_cmd_video_panel;
341 panelstruct->commandpanel = &auo_qvga_cmd_command_panel;
342 panelstruct->state = &auo_qvga_cmd_state;
343 panelstruct->laneconfig = &auo_qvga_cmd_lane_config;
344 panelstruct->paneltiminginfo
345 = &auo_qvga_cmd_timing_info;
346 panelstruct->panelresetseq
347 = &auo_qvga_cmd_panel_reset_seq;
348 panelstruct->backlightinfo
349 = &auo_qvga_cmd_backlight;
350 pinfo->mipi.panel_on_cmds
351 = auo_qvga_cmd_on_command;
352 pinfo->mipi.num_of_panel_on_cmds
353 = auo_QVGA_CMD_ON_COMMAND;
354 pinfo->mipi.panel_off_cmds
355 = auo_qvga_cmd_off_command;
356 pinfo->mipi.num_of_panel_off_cmds
357 = auo_QVGA_CMD_OFF_COMMAND;
358 memcpy(phy_db->timing, auo_qvga_cmd_timings, TIMING_SIZE);
359 break;
360 case AUO_CX_QVGA_CMD_PANEL:
361 panelstruct->paneldata = &auo_cx_qvga_cmd_panel_data;
362 panelstruct->panelres = &auo_cx_qvga_cmd_panel_res;
363 panelstruct->color = &auo_cx_qvga_cmd_color;
364 panelstruct->videopanel = &auo_cx_qvga_cmd_video_panel;
365 panelstruct->commandpanel = &auo_cx_qvga_cmd_command_panel;
366 panelstruct->state = &auo_cx_qvga_cmd_state;
367 panelstruct->laneconfig = &auo_cx_qvga_cmd_lane_config;
368 panelstruct->paneltiminginfo
369 = &auo_cx_qvga_cmd_timing_info;
370 panelstruct->panelresetseq
371 = &auo_cx_qvga_cmd_panel_reset_seq;
372 panelstruct->backlightinfo
373 = &auo_cx_qvga_cmd_backlight;
374 pinfo->mipi.panel_on_cmds
375 = auo_cx_qvga_cmd_on_command;
376 pinfo->mipi.num_of_panel_on_cmds
377 = auo_cx_QVGA_CMD_ON_COMMAND;
378 pinfo->mipi.panel_off_cmds
379 = auo_cx_qvga_cmd_off_command;
380 pinfo->mipi.num_of_panel_off_cmds
381 = auo_cx_QVGA_CMD_OFF_COMMAND;
382 memcpy(phy_db->timing, auo_cx_qvga_cmd_timings, TIMING_SIZE);
383 break;
384 case AUO_400P_CMD_PANEL:
385 panelstruct->paneldata = &auo_400p_cmd_panel_data;
386 panelstruct->panelres = &auo_400p_cmd_panel_res;
387 panelstruct->color = &auo_400p_cmd_color;
388 panelstruct->videopanel = &auo_400p_cmd_video_panel;
389 panelstruct->commandpanel = &auo_400p_cmd_command_panel;
390 panelstruct->state = &auo_400p_cmd_state;
391 panelstruct->laneconfig = &auo_400p_cmd_lane_config;
392 panelstruct->paneltiminginfo
393 = &auo_400p_cmd_timing_info;
394 panelstruct->panelresetseq
395 = &auo_400p_cmd_panel_reset_seq;
396 panelstruct->backlightinfo
397 = &auo_400p_cmd_backlight;
398 pinfo->mipi.panel_on_cmds
399 = auo_400p_cmd_on_command;
400 pinfo->mipi.num_of_panel_on_cmds
401 = auo_400P_CMD_ON_COMMAND;
402 pinfo->mipi.panel_off_cmds
403 = auo_400p_cmd_off_command;
404 pinfo->mipi.num_of_panel_off_cmds
405 = auo_400P_CMD_OFF_COMMAND;
406 memcpy(phy_db->timing, auo_400p_cmd_timings, TIMING_SIZE);
407 break;
Ashish Garg22001a92017-08-07 14:46:54 +0530408 case AUO_390P_CMD_PANEL:
409 panelstruct->paneldata = &auo_390p_cmd_panel_data;
410 panelstruct->panelres = &auo_390p_cmd_panel_res;
411 panelstruct->color = &auo_390p_cmd_color;
412 panelstruct->videopanel = &auo_390p_cmd_video_panel;
413 panelstruct->commandpanel = &auo_390p_cmd_command_panel;
414 panelstruct->state = &auo_390p_cmd_state;
415 panelstruct->laneconfig = &auo_390p_cmd_lane_config;
416 panelstruct->paneltiminginfo
417 = &auo_390p_cmd_timing_info;
418 panelstruct->panelresetseq
419 = &auo_390p_cmd_panel_reset_seq;
420 panelstruct->backlightinfo
421 = &auo_390p_cmd_backlight;
422 pinfo->mipi.panel_on_cmds
423 = auo_390p_cmd_on_command;
424 pinfo->mipi.num_of_panel_on_cmds
425 = AUO_390P_CMD_ON_COMMAND;
426 pinfo->mipi.panel_off_cmds
427 = auo_390p_cmd_off_command;
428 pinfo->mipi.num_of_panel_off_cmds
429 = AUO_390P_CMD_OFF_COMMAND;
430 memcpy(phy_db->timing, auo_390p_cmd_timings, TIMING_SIZE);
431 break;
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +0530432 case UNKNOWN_PANEL:
433 default:
434 memset(panelstruct, 0, sizeof(struct panel_struct));
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530435 memset(pinfo->mipi.panel_on_cmds, 0,
436 sizeof(struct mipi_dsi_cmd));
437 pinfo->mipi.num_of_panel_on_cmds = 0;
438 memset(pinfo->mipi.panel_off_cmds, 0,
439 sizeof(struct mipi_dsi_cmd));
440 pinfo->mipi.num_of_panel_off_cmds = 0;
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +0530441 memset(phy_db->timing, 0, TIMING_SIZE);
442 pan_type = PANEL_TYPE_UNKNOWN;
443 break;
444 }
445 return pan_type;
446}
447
448uint32_t oem_panel_max_auto_detect_panels()
449{
450 return target_panel_auto_detect_enabled() ?
451 DISPLAY_MAX_PANEL_DETECTION : 0;
452}
453
454int oem_panel_select(const char *panel_name, struct panel_struct *panelstruct,
455 struct msm_panel_info *pinfo,
456 struct mdss_dsi_phy_ctrl *phy_db)
457{
458 uint32_t hw_id = board_hardware_id();
Ray Zhanga59d9722014-10-23 16:19:07 +0800459 uint32_t platform_subtype = board_hardware_subtype();
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +0530460 int32_t panel_override_id;
461
462 if (panel_name) {
463 panel_override_id = panel_name_to_id(supp_panels,
464 ARRAY_SIZE(supp_panels), panel_name);
465
466 if (panel_override_id < 0) {
467 dprintf(CRITICAL, "Not able to search the panel:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530468 panel_name);
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +0530469 } else if (panel_override_id < UNKNOWN_PANEL) {
470 /* panel override using fastboot oem command */
471 panel_id = panel_override_id;
472
473 dprintf(INFO, "OEM panel override:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530474 panel_name);
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +0530475 goto panel_init;
476 }
477 }
478 switch (hw_id) {
479 case HW_PLATFORM_SURF:
Shivaraj Shettyaf4c6072014-11-04 16:25:31 +0530480 case HW_PLATFORM_MTP:
Sandeep Panda8ede6502014-12-02 10:56:16 +0530481 case HW_PLATFORM_RCM:
Vishnuvardhan Prodduturif5586852017-05-25 22:17:03 +0530482 switch (platform_subtype) {
Swetha Vuchae3baf912017-12-20 15:49:28 +0530483 case HW_PLATFORM_SUBTYPE_8909_PM660_V1:
484 case HW_PLATFORM_SUBTYPE_8909_PM660:
485 case HW_PLATFORM_SUBTYPE_8909_COMPAL_ALPHA:
Ashish Garg22001a92017-08-07 14:46:54 +0530486 panel_id = AUO_390P_CMD_PANEL;
Vishnuvardhan Prodduturif5586852017-05-25 22:17:03 +0530487 break;
488 default:
489 panel_id = HX8394D_720P_VIDEO_PANEL;
490 break;
491 }
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +0530492 break;
Ray Zhanga59d9722014-10-23 16:19:07 +0800493 case HW_PLATFORM_QRD:
494 switch (platform_subtype) {
495 case QRD_SKUA:
496 panel_id = HX8379A_FWVGA_SKUA_VIDEO_PANEL;
497 break;
498 case QRD_SKUC:
Ray Zhangafc86662014-11-07 11:23:57 +0800499 panel_id = ILI9806E_FWVGA_VIDEO_PANEL;
500 break;
Ray Zhanga59d9722014-10-23 16:19:07 +0800501 case QRD_SKUE:
Ray Zhang6da38ca2014-11-18 16:02:11 +0800502 panel_id = HX8379C_FWVGA_VIDEO_PANEL;
503 break;
Yange194df92015-06-09 15:41:01 +0800504 case QRD_SKUT:
505 panel_id = FL10802_FWVGA_VIDEO_PANEL;
506 break;
Ray Zhanga59d9722014-10-23 16:19:07 +0800507 default:
508 dprintf(CRITICAL, "QRD Display not enabled for %d type\n",
509 platform_subtype);
510 return PANEL_TYPE_UNKNOWN;
511 }
512 break;
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +0530513 default:
514 dprintf(CRITICAL, "Display not enabled for %d HW type\n",
515 hw_id);
516 return PANEL_TYPE_UNKNOWN;
517 }
518
519panel_init:
Shivaraj Shettyaf4c6072014-11-04 16:25:31 +0530520 phy_db->regulator_mode = DSI_PHY_REGULATOR_LDO_MODE;
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +0530521 return init_panel_data(panelstruct, pinfo, phy_db);
522}