blob: 7113c65c738ee196b3b65f1417852ffed7c962d8 [file] [log] [blame]
Aravind Venkateswarand4b57602015-01-29 23:22:14 -08001/* Copyright (c) 2013-2015, The Linux Foundation. All rights reserved.
Arpita Banerjee841fa062013-05-24 14:59:51 -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 <err.h>
32#include <smem.h>
33#include <msm_panel.h>
34#include <board.h>
35#include <mipi_dsi.h>
Aravind Venkateswaran148e0df2014-03-28 16:26:05 -070036#include <target/display.h>
Arpita Banerjee841fa062013-05-24 14:59:51 -070037
38#include "include/panel.h"
39#include "panel_display.h"
40
41/*---------------------------------------------------------------------------*/
42/* GCDB Panel Database */
43/*---------------------------------------------------------------------------*/
44#include "include/panel_toshiba_720p_video.h"
45#include "include/panel_nt35590_720p_video.h"
46#include "include/panel_nt35590_720p_cmd.h"
Ray Zhang70abc542013-07-08 15:48:19 +080047#include "include/panel_hx8394a_720p_video.h"
Arpita Banerjeef04ae4b2013-06-14 11:32:20 -070048#include "include/panel_nt35596_1080p_video.h"
Ray Zhang53b0dce2013-07-08 19:35:48 +080049#include "include/panel_nt35521_720p_video.h"
Ray Zhange100ab62013-09-03 19:17:07 +080050#include "include/panel_ssd2080m_720p_video.h"
Aravind Venkateswaranaf241212013-11-04 16:46:46 -080051#include "include/panel_jdi_1080p_video.h"
Shivaraj Shetty11b10eb2014-03-20 16:50:22 +053052#include "include/panel_nt35590_qvga_cmd.h"
Aravind Venkateswarand4b57602015-01-29 23:22:14 -080053#include "include/panel_auo_qvga_cmd.h"
Arpita Banerjee841fa062013-05-24 14:59:51 -070054
Pradeep Jilagamfeb15982013-10-29 13:08:51 +053055#define DISPLAY_MAX_PANEL_DETECTION 2
56
Ray Zhanga6df18c2013-12-04 16:21:50 +080057#define SSD2080M_720P_VIDEO_PANEL_ON_DELAY 200
Aravind Venkateswaran6bfb29e2014-02-12 12:31:44 -080058#define MAX_PANEL_ID_LEN 64
Ray Zhanga6df18c2013-12-04 16:21:50 +080059
Arpita Banerjee841fa062013-05-24 14:59:51 -070060/*---------------------------------------------------------------------------*/
61/* static panel selection variable */
62/*---------------------------------------------------------------------------*/
63enum {
64TOSHIBA_720P_VIDEO_PANEL,
65NT35590_720P_CMD_PANEL,
Arpita Banerjeef04ae4b2013-06-14 11:32:20 -070066NT35590_720P_VIDEO_PANEL,
Ray Zhang70abc542013-07-08 15:48:19 +080067NT35596_1080P_VIDEO_PANEL,
Ray Zhang53b0dce2013-07-08 19:35:48 +080068HX8394A_720P_VIDEO_PANEL,
Ray Zhange100ab62013-09-03 19:17:07 +080069NT35521_720P_VIDEO_PANEL,
Aravind Venkateswaranaf241212013-11-04 16:46:46 -080070SSD2080M_720P_VIDEO_PANEL,
Pradeep Jilagamfeb15982013-10-29 13:08:51 +053071JDI_1080P_VIDEO_PANEL,
Shivaraj Shetty11b10eb2014-03-20 16:50:22 +053072NT35590_QVGA_CMD_PANEL,
Aravind Venkateswarand4b57602015-01-29 23:22:14 -080073AUO_QVGA_CMD_PANEL,
Pradeep Jilagamfeb15982013-10-29 13:08:51 +053074UNKNOWN_PANEL
Aravind Venkateswaranaf241212013-11-04 16:46:46 -080075};
76
Aravind Venkateswaran6bfb29e2014-02-12 12:31:44 -080077/*
78 * The list of panels that are supported on this target.
79 * Any panel in this list can be selected using fastboot oem command.
80 */
81static struct panel_list supp_panels[] = {
82 {"toshiba_720p_video", TOSHIBA_720P_VIDEO_PANEL},
83 {"nt35590_720p_cmd", NT35590_720P_CMD_PANEL},
84 {"nt35590_720p_video", NT35590_720P_VIDEO_PANEL},
85 {"nt35596_1080p_video", NT35596_1080P_VIDEO_PANEL},
86 {"hx8394a_720p_video", HX8394A_720P_VIDEO_PANEL},
87 {"nt35521_720p_video", NT35521_720P_VIDEO_PANEL},
88 {"ssd2080m_720p_video", SSD2080M_720P_VIDEO_PANEL},
89 {"jdi_1080p_video", JDI_1080P_VIDEO_PANEL},
Shivaraj Shetty11b10eb2014-03-20 16:50:22 +053090 {"nt35590_qvga_cmd", NT35590_QVGA_CMD_PANEL},
Aravind Venkateswarand4b57602015-01-29 23:22:14 -080091 {"auo_qvga_cmd", AUO_QVGA_CMD_PANEL},
Aravind Venkateswaran6bfb29e2014-02-12 12:31:44 -080092};
93
Arpita Banerjee841fa062013-05-24 14:59:51 -070094static uint32_t panel_id;
95
96int oem_panel_rotation()
97{
98 int ret = NO_ERROR;
99 switch (panel_id) {
100 case TOSHIBA_720P_VIDEO_PANEL:
Aravind Venkateswaranf0304a22014-12-18 12:50:03 -0800101 ret = mdss_dsi_cmds_tx(NULL, toshiba_720p_video_rotation,
Aravind Venkateswarance4dd7f2014-12-04 16:54:26 -0800102 TOSHIBA_720P_VIDEO_ROTATION, 0);
Arpita Banerjee841fa062013-05-24 14:59:51 -0700103 break;
104 case NT35590_720P_CMD_PANEL:
Aravind Venkateswaranf0304a22014-12-18 12:50:03 -0800105 ret = mdss_dsi_cmds_tx(NULL, nt35590_720p_cmd_rotation,
Aravind Venkateswarance4dd7f2014-12-04 16:54:26 -0800106 NT35590_720P_CMD_ROTATION, 0);
Arpita Banerjee841fa062013-05-24 14:59:51 -0700107 break;
108 case NT35590_720P_VIDEO_PANEL:
Aravind Venkateswaranf0304a22014-12-18 12:50:03 -0800109 ret = mdss_dsi_cmds_tx(NULL, nt35590_720p_video_rotation,
Aravind Venkateswarance4dd7f2014-12-04 16:54:26 -0800110 NT35590_720P_VIDEO_ROTATION, 0);
Arpita Banerjee841fa062013-05-24 14:59:51 -0700111 break;
112 }
113
114 return ret;
115}
116
Arpita Banerjee841fa062013-05-24 14:59:51 -0700117int oem_panel_on()
118{
119 /* OEM can keep there panel spefic on instructions in this
120 function */
Ray Zhanga6df18c2013-12-04 16:21:50 +0800121 if (panel_id == SSD2080M_720P_VIDEO_PANEL) {
122 /* SSD2080M needs extra delay to avoid unexpected artifacts */
123 mdelay(SSD2080M_720P_VIDEO_PANEL_ON_DELAY);
124 }
Arpita Banerjee841fa062013-05-24 14:59:51 -0700125 return NO_ERROR;
126}
127
128int oem_panel_off()
129{
130 /* OEM can keep there panel spefic off instructions in this
131 function */
132 return NO_ERROR;
133}
134
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700135static int init_panel_data(struct panel_struct *panelstruct,
Arpita Banerjee841fa062013-05-24 14:59:51 -0700136 struct msm_panel_info *pinfo,
137 struct mdss_dsi_phy_ctrl *phy_db)
138{
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700139 int pan_type = PANEL_TYPE_DSI;
140
Arpita Banerjee841fa062013-05-24 14:59:51 -0700141 switch (panel_id) {
142 case TOSHIBA_720P_VIDEO_PANEL:
143 panelstruct->paneldata = &toshiba_720p_video_panel_data;
144 panelstruct->panelres = &toshiba_720p_video_panel_res;
145 panelstruct->color = &toshiba_720p_video_color;
146 panelstruct->videopanel = &toshiba_720p_video_video_panel;
147 panelstruct->commandpanel = &toshiba_720p_video_command_panel;
148 panelstruct->state = &toshiba_720p_video_state;
149 panelstruct->laneconfig = &toshiba_720p_video_lane_config;
150 panelstruct->paneltiminginfo
151 = &toshiba_720p_video_timing_info;
Casey Piper5197f932013-08-14 17:27:29 -0700152 panelstruct->panelresetseq
153 = &toshiba_720p_video_panel_reset_seq;
Arpita Banerjee841fa062013-05-24 14:59:51 -0700154 panelstruct->backlightinfo = &toshiba_720p_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530155 pinfo->mipi.panel_on_cmds
Arpita Banerjee841fa062013-05-24 14:59:51 -0700156 = toshiba_720p_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530157 pinfo->mipi.num_of_panel_on_cmds
Arpita Banerjee841fa062013-05-24 14:59:51 -0700158 = TOSHIBA_720P_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530159 pinfo->mipi.panel_off_cmds
160 = toshiba_720p_video_off_command;
161 pinfo->mipi.num_of_panel_off_cmds
162 = TOSHIBA_720P_VIDEO_OFF_COMMAND;
Arpita Banerjee841fa062013-05-24 14:59:51 -0700163 memcpy(phy_db->timing,
164 toshiba_720p_video_timings, TIMING_SIZE);
165 break;
166 case NT35590_720P_VIDEO_PANEL:
167 panelstruct->paneldata = &nt35590_720p_video_panel_data;
168 panelstruct->panelres = &nt35590_720p_video_panel_res;
169 panelstruct->color = &nt35590_720p_video_color;
170 panelstruct->videopanel = &nt35590_720p_video_video_panel;
171 panelstruct->commandpanel = &nt35590_720p_video_command_panel;
172 panelstruct->state = &nt35590_720p_video_state;
173 panelstruct->laneconfig = &nt35590_720p_video_lane_config;
174 panelstruct->paneltiminginfo
175 = &nt35590_720p_video_timing_info;
Casey Piper5197f932013-08-14 17:27:29 -0700176 panelstruct->panelresetseq
177 = &nt35590_720p_video_panel_reset_seq;
Arpita Banerjee841fa062013-05-24 14:59:51 -0700178 panelstruct->backlightinfo = &nt35590_720p_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530179 pinfo->mipi.panel_on_cmds
Arpita Banerjee841fa062013-05-24 14:59:51 -0700180 = nt35590_720p_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530181 pinfo->mipi.num_of_panel_on_cmds
Arpita Banerjee841fa062013-05-24 14:59:51 -0700182 = NT35590_720P_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530183 pinfo->mipi.panel_off_cmds
184 = nt35590_720p_video_off_command;
185 pinfo->mipi.num_of_panel_off_cmds
186 = NT35590_720P_VIDEO_OFF_COMMAND;
Arpita Banerjee841fa062013-05-24 14:59:51 -0700187 memcpy(phy_db->timing,
188 nt35590_720p_video_timings, TIMING_SIZE);
189 break;
Ray Zhang53b0dce2013-07-08 19:35:48 +0800190 case NT35521_720P_VIDEO_PANEL:
191 panelstruct->paneldata = &nt35521_720p_video_panel_data;
192 panelstruct->panelres = &nt35521_720p_video_panel_res;
193 panelstruct->color = &nt35521_720p_video_color;
194 panelstruct->videopanel = &nt35521_720p_video_video_panel;
195 panelstruct->commandpanel = &nt35521_720p_video_command_panel;
196 panelstruct->state = &nt35521_720p_video_state;
197 panelstruct->laneconfig = &nt35521_720p_video_lane_config;
198 panelstruct->paneltiminginfo
199 = &nt35521_720p_video_timing_info;
Casey Piper5197f932013-08-14 17:27:29 -0700200 panelstruct->panelresetseq
201 = &nt35521_720p_video_panel_reset_seq;
Ray Zhang53b0dce2013-07-08 19:35:48 +0800202 panelstruct->backlightinfo = &nt35521_720p_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530203 pinfo->mipi.panel_on_cmds
Ray Zhang53b0dce2013-07-08 19:35:48 +0800204 = nt35521_720p_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530205 pinfo->mipi.num_of_panel_on_cmds
Ray Zhang53b0dce2013-07-08 19:35:48 +0800206 = NT35521_720P_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530207 pinfo->mipi.panel_off_cmds
208 = nt35521_720p_video_off_command;
209 pinfo->mipi.num_of_panel_off_cmds
210 = NT35521_720P_VIDEO_OFF_COMMAND;
Ray Zhang53b0dce2013-07-08 19:35:48 +0800211 memcpy(phy_db->timing,
212 nt35521_720p_video_timings, TIMING_SIZE);
213 break;
Ray Zhange100ab62013-09-03 19:17:07 +0800214 case SSD2080M_720P_VIDEO_PANEL:
215 panelstruct->paneldata = &ssd2080m_720p_video_panel_data;
216 panelstruct->panelres = &ssd2080m_720p_video_panel_res;
217 panelstruct->color = &ssd2080m_720p_video_color;
218 panelstruct->videopanel = &ssd2080m_720p_video_video_panel;
219 panelstruct->commandpanel = &ssd2080m_720p_video_command_panel;
220 panelstruct->state = &ssd2080m_720p_video_state;
221 panelstruct->laneconfig = &ssd2080m_720p_video_lane_config;
222 panelstruct->paneltiminginfo
223 = &ssd2080m_720p_video_timing_info;
224 panelstruct->panelresetseq
225 = &ssd2080m_720p_video_panel_reset_seq;
226 panelstruct->backlightinfo = &ssd2080m_720p_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530227 pinfo->mipi.panel_on_cmds
Ray Zhange100ab62013-09-03 19:17:07 +0800228 = ssd2080m_720p_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530229 pinfo->mipi.num_of_panel_on_cmds
Ray Zhange100ab62013-09-03 19:17:07 +0800230 = SSD2080M_720P_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530231 pinfo->mipi.panel_off_cmds
232 = ssd2080m_720p_video_off_command;
233 pinfo->mipi.num_of_panel_off_cmds
234 = SSD2080M_720P_VIDEO_OFF_COMMAND;
Ray Zhange100ab62013-09-03 19:17:07 +0800235 memcpy(phy_db->timing,
236 ssd2080m_720p_video_timings, TIMING_SIZE);
237 break;
Ray Zhang70abc542013-07-08 15:48:19 +0800238 case HX8394A_720P_VIDEO_PANEL:
239 panelstruct->paneldata = &hx8394a_720p_video_panel_data;
240 panelstruct->panelres = &hx8394a_720p_video_panel_res;
241 panelstruct->color = &hx8394a_720p_video_color;
242 panelstruct->videopanel = &hx8394a_720p_video_video_panel;
243 panelstruct->commandpanel = &hx8394a_720p_video_command_panel;
244 panelstruct->state = &hx8394a_720p_video_state;
245 panelstruct->laneconfig = &hx8394a_720p_video_lane_config;
246 panelstruct->paneltiminginfo
247 = &hx8394a_720p_video_timing_info;
Casey Piper5197f932013-08-14 17:27:29 -0700248 panelstruct->panelresetseq
249 = &hx8394a_720p_video_panel_reset_seq;
Ray Zhang70abc542013-07-08 15:48:19 +0800250 panelstruct->backlightinfo = &hx8394a_720p_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530251 pinfo->mipi.panel_on_cmds
Ray Zhang70abc542013-07-08 15:48:19 +0800252 = hx8394a_720p_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530253 pinfo->mipi.num_of_panel_on_cmds
Ray Zhang70abc542013-07-08 15:48:19 +0800254 = HX8394A_720P_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530255 pinfo->mipi.panel_off_cmds
256 = hx8394a_720p_video_off_command;
257 pinfo->mipi.num_of_panel_off_cmds
258 = HX8394A_720P_VIDEO_OFF_COMMAND;
Ray Zhang70abc542013-07-08 15:48:19 +0800259 memcpy(phy_db->timing,
260 hx8394a_720p_video_timings, TIMING_SIZE);
Pradeep Jilagamfeb15982013-10-29 13:08:51 +0530261 pinfo->mipi.signature = HX8394A_720P_VIDEO_SIGNATURE;
Ray Zhang70abc542013-07-08 15:48:19 +0800262 break;
263
Arpita Banerjee841fa062013-05-24 14:59:51 -0700264 case NT35590_720P_CMD_PANEL:
265 panelstruct->paneldata = &nt35590_720p_cmd_panel_data;
266 panelstruct->panelres = &nt35590_720p_cmd_panel_res;
267 panelstruct->color = &nt35590_720p_cmd_color;
268 panelstruct->videopanel = &nt35590_720p_cmd_video_panel;
269 panelstruct->commandpanel = &nt35590_720p_cmd_command_panel;
270 panelstruct->state = &nt35590_720p_cmd_state;
271 panelstruct->laneconfig = &nt35590_720p_cmd_lane_config;
272 panelstruct->paneltiminginfo = &nt35590_720p_cmd_timing_info;
Casey Piper5197f932013-08-14 17:27:29 -0700273 panelstruct->panelresetseq
274 = &nt35590_720p_cmd_panel_reset_seq;
Arpita Banerjee841fa062013-05-24 14:59:51 -0700275 panelstruct->backlightinfo = &nt35590_720p_cmd_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530276 pinfo->mipi.panel_on_cmds
Arpita Banerjee841fa062013-05-24 14:59:51 -0700277 = nt35590_720p_cmd_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530278 pinfo->mipi.num_of_panel_on_cmds
Arpita Banerjee841fa062013-05-24 14:59:51 -0700279 = NT35590_720P_CMD_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530280 pinfo->mipi.panel_off_cmds
281 = nt35590_720p_cmd_off_command;
282 pinfo->mipi.num_of_panel_off_cmds
283 = NT35590_720P_CMD_OFF_COMMAND;
Arpita Banerjee841fa062013-05-24 14:59:51 -0700284 memcpy(phy_db->timing,
285 nt35590_720p_cmd_timings, TIMING_SIZE);
286 break;
Arpita Banerjeef04ae4b2013-06-14 11:32:20 -0700287 case NT35596_1080P_VIDEO_PANEL:
288 panelstruct->paneldata = &nt35596_1080p_video_panel_data;
289 panelstruct->panelres = &nt35596_1080p_video_panel_res;
290 panelstruct->color = &nt35596_1080p_video_color;
291 panelstruct->videopanel = &nt35596_1080p_video_video_panel;
292 panelstruct->commandpanel = &nt35596_1080p_video_command_panel;
293 panelstruct->state = &nt35596_1080p_video_state;
294 panelstruct->laneconfig = &nt35596_1080p_video_lane_config;
295 panelstruct->paneltiminginfo
296 = &nt35596_1080p_video_timing_info;
Casey Piper5197f932013-08-14 17:27:29 -0700297 panelstruct->panelresetseq
298 = &nt35596_1080p_video_panel_reset_seq;
Arpita Banerjeef04ae4b2013-06-14 11:32:20 -0700299 panelstruct->backlightinfo
300 = &nt35596_1080p_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530301 pinfo->mipi.panel_on_cmds
Arpita Banerjeef04ae4b2013-06-14 11:32:20 -0700302 = nt35596_1080p_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530303 pinfo->mipi.num_of_panel_on_cmds
Arpita Banerjeef04ae4b2013-06-14 11:32:20 -0700304 = NT35596_1080P_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530305 pinfo->mipi.panel_off_cmds
306 = nt35596_1080p_video_off_command;
307 pinfo->mipi.num_of_panel_off_cmds
308 = NT35596_1080P_VIDEO_OFF_COMMAND;
Arpita Banerjeef04ae4b2013-06-14 11:32:20 -0700309 memcpy(phy_db->timing,
310 nt35596_1080p_video_timings, TIMING_SIZE);
Pradeep Jilagamfeb15982013-10-29 13:08:51 +0530311 pinfo->mipi.signature = NT35596_1080P_VIDEO_SIGNATURE;
Jayant Shekhar24be5e62013-11-18 19:59:50 +0530312 break;
Aravind Venkateswaranaf241212013-11-04 16:46:46 -0800313 case JDI_1080P_VIDEO_PANEL:
314 panelstruct->paneldata = &jdi_1080p_video_panel_data;
315 panelstruct->paneldata->panel_with_enable_gpio = 1;
316 panelstruct->panelres = &jdi_1080p_video_panel_res;
317 panelstruct->color = &jdi_1080p_video_color;
318 panelstruct->videopanel = &jdi_1080p_video_video_panel;
319 panelstruct->commandpanel = &jdi_1080p_video_command_panel;
320 panelstruct->state = &jdi_1080p_video_state;
321 panelstruct->laneconfig = &jdi_1080p_video_lane_config;
322 panelstruct->paneltiminginfo
323 = &jdi_1080p_video_timing_info;
324 panelstruct->panelresetseq
325 = &jdi_1080p_video_panel_reset_seq;
326 panelstruct->backlightinfo = &jdi_1080p_video_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530327 pinfo->mipi.panel_on_cmds
Aravind Venkateswaranaf241212013-11-04 16:46:46 -0800328 = jdi_1080p_video_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530329 pinfo->mipi.num_of_panel_on_cmds
Aravind Venkateswaranaf241212013-11-04 16:46:46 -0800330 = JDI_1080P_VIDEO_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530331 pinfo->mipi.panel_off_cmds
332 = jdi_1080p_video_off_command;
333 pinfo->mipi.num_of_panel_off_cmds
334 = JDI_1080P_VIDEO_OFF_COMMAND;
Aravind Venkateswaranaf241212013-11-04 16:46:46 -0800335 memcpy(phy_db->timing,
336 jdi_1080p_video_timings, TIMING_SIZE);
Arpita Banerjeef04ae4b2013-06-14 11:32:20 -0700337 break;
Shivaraj Shetty11b10eb2014-03-20 16:50:22 +0530338 case NT35590_QVGA_CMD_PANEL:
339 panelstruct->paneldata = &nt35590_qvga_cmd_panel_data;
340 panelstruct->panelres = &nt35590_qvga_cmd_panel_res;
341 panelstruct->color = &nt35590_qvga_cmd_color;
342 panelstruct->videopanel = &nt35590_qvga_cmd_video_panel;
343 panelstruct->commandpanel = &nt35590_qvga_cmd_command_panel;
344 panelstruct->state = &nt35590_qvga_cmd_state;
345 panelstruct->laneconfig = &nt35590_qvga_cmd_lane_config;
346 panelstruct->paneltiminginfo = &nt35590_qvga_cmd_timing_info;
347 panelstruct->panelresetseq
348 = &nt35590_qvga_cmd_panel_reset_seq;
349 panelstruct->backlightinfo = &nt35590_qvga_cmd_backlight;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530350 pinfo->mipi.panel_on_cmds
Shivaraj Shetty11b10eb2014-03-20 16:50:22 +0530351 = nt35590_qvga_cmd_on_command;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530352 pinfo->mipi.num_of_panel_on_cmds
Shivaraj Shetty11b10eb2014-03-20 16:50:22 +0530353 = NT35590_QVGA_CMD_ON_COMMAND;
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530354 pinfo->mipi.panel_off_cmds
355 = nt35590_qvga_cmd_off_command;
356 pinfo->mipi.num_of_panel_off_cmds
357 = NT35590_QVGA_CMD_OFF_COMMAND;
Shivaraj Shetty11b10eb2014-03-20 16:50:22 +0530358 memcpy(phy_db->timing,
359 nt35590_qvga_cmd_timings, TIMING_SIZE);
360 break;
Aravind Venkateswarand4b57602015-01-29 23:22:14 -0800361 case AUO_QVGA_CMD_PANEL:
362 panelstruct->paneldata = &auo_qvga_cmd_panel_data;
363 panelstruct->panelres = &auo_qvga_cmd_panel_res;
364 panelstruct->color = &auo_qvga_cmd_color;
365 panelstruct->videopanel = &auo_qvga_cmd_video_panel;
366 panelstruct->commandpanel = &auo_qvga_cmd_command_panel;
367 panelstruct->state = &auo_qvga_cmd_state;
368 panelstruct->laneconfig = &auo_qvga_cmd_lane_config;
369 panelstruct->paneltiminginfo = &auo_qvga_cmd_timing_info;
370 panelstruct->panelresetseq
371 = &auo_qvga_cmd_panel_reset_seq;
372 panelstruct->backlightinfo = &auo_qvga_cmd_backlight;
373 pinfo->mipi.panel_on_cmds
374 = auo_qvga_cmd_on_command;
375 pinfo->mipi.num_of_panel_on_cmds
376 = auo_QVGA_CMD_ON_COMMAND;
377 pinfo->mipi.panel_off_cmds
378 = auo_qvga_cmd_off_command;
379 pinfo->mipi.num_of_panel_off_cmds
380 = auo_QVGA_CMD_OFF_COMMAND;
381 memcpy(phy_db->timing,
382 auo_qvga_cmd_timings, TIMING_SIZE);
383 break;
Pradeep Jilagamfeb15982013-10-29 13:08:51 +0530384 case UNKNOWN_PANEL:
385 memset(panelstruct, 0, sizeof(struct panel_struct));
Padmanabhan Komandurub3d31842014-11-04 15:47:53 +0530386 memset(pinfo->mipi.panel_on_cmds, 0,
387 sizeof(struct mipi_dsi_cmd));
388 pinfo->mipi.num_of_panel_on_cmds = 0;
389 memset(pinfo->mipi.panel_off_cmds, 0,
390 sizeof(struct mipi_dsi_cmd));
391 pinfo->mipi.num_of_panel_off_cmds = 0;
Pradeep Jilagamfeb15982013-10-29 13:08:51 +0530392 memset(phy_db->timing, 0, TIMING_SIZE);
393 pinfo->mipi.signature = 0;
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700394 pan_type = PANEL_TYPE_UNKNOWN;
Pradeep Jilagamfeb15982013-10-29 13:08:51 +0530395 break;
Arpita Banerjee841fa062013-05-24 14:59:51 -0700396 }
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700397
398 return pan_type;
Arpita Banerjee841fa062013-05-24 14:59:51 -0700399}
400
Pradeep Jilagamfeb15982013-10-29 13:08:51 +0530401uint32_t oem_panel_max_auto_detect_panels()
402{
403 return target_panel_auto_detect_enabled() ?
404 DISPLAY_MAX_PANEL_DETECTION : 0;
405}
406
407static uint32_t auto_pan_loop = 0;
408
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700409int oem_panel_select(const char *panel_name, struct panel_struct *panelstruct,
Arpita Banerjee841fa062013-05-24 14:59:51 -0700410 struct msm_panel_info *pinfo,
411 struct mdss_dsi_phy_ctrl *phy_db)
412{
413 uint32_t hw_id = board_hardware_id();
Ray Zhang70abc542013-07-08 15:48:19 +0800414 uint32_t target_id = board_target_id();
Aravind Venkateswaran9ae369b2013-07-23 22:57:47 -0700415 uint32_t nt35590_panel_id = NT35590_720P_VIDEO_PANEL;
Aravind Venkateswaranaf241212013-11-04 16:46:46 -0800416 uint32_t hw_subtype = board_hardware_subtype();
Dhaval Patelf6dd5772014-02-18 17:10:16 -0800417 int32_t panel_override_id;
Aravind Venkateswaran9ae369b2013-07-23 22:57:47 -0700418
Aravind Venkateswaran6bfb29e2014-02-12 12:31:44 -0800419 if (panel_name) {
Dhaval Patelf6dd5772014-02-18 17:10:16 -0800420 panel_override_id = panel_name_to_id(supp_panels,
421 ARRAY_SIZE(supp_panels), panel_name);
Aravind Venkateswaran6bfb29e2014-02-12 12:31:44 -0800422
Dhaval Patelf6dd5772014-02-18 17:10:16 -0800423 if (panel_override_id < 0) {
424 dprintf(CRITICAL, "Not able to search the panel:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530425 panel_name);
Dhaval Patelf6dd5772014-02-18 17:10:16 -0800426 } else if (panel_override_id < UNKNOWN_PANEL) {
427 /* panel override using fastboot oem command */
428 panel_id = panel_override_id;
429
430 dprintf(INFO, "OEM panel override:%s\n",
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +0530431 panel_name);
Dhaval Patelf6dd5772014-02-18 17:10:16 -0800432 goto panel_init;
433 }
Aravind Venkateswaran6bfb29e2014-02-12 12:31:44 -0800434 }
Arpita Banerjee841fa062013-05-24 14:59:51 -0700435
Dhaval Patelfa5d5872013-08-08 10:52:16 -0700436 switch (hw_id) {
437 case HW_PLATFORM_QRD:
Aravind Venkateswaranaf241212013-11-04 16:46:46 -0800438 if (hw_subtype == HW_PLATFORM_SUBTYPE_SKUF) {
Dhaval Patelfa5d5872013-08-08 10:52:16 -0700439 panel_id = NT35521_720P_VIDEO_PANEL;
Aravind Venkateswaranaf241212013-11-04 16:46:46 -0800440 } else if (hw_subtype == HW_PLATFORM_SUBTYPE_SKUG) {
Ray Zhange100ab62013-09-03 19:17:07 +0800441 panel_id = SSD2080M_720P_VIDEO_PANEL;
Dhaval Patelfa5d5872013-08-08 10:52:16 -0700442 } else {
Kun Liang6bff57d2013-09-29 18:27:23 +0800443 if (((target_id >> 16) & 0xFF) == 0x1 || ((target_id >> 16) & 0xFF) == 0x3) //EVT || PVT
Dhaval Patelfa5d5872013-08-08 10:52:16 -0700444 panel_id = nt35590_panel_id;
Pradeep Jilagamfeb15982013-10-29 13:08:51 +0530445 else if (((target_id >> 16) & 0xFF) == 0x2) { //DVT
Dhaval Patelfa5d5872013-08-08 10:52:16 -0700446 panel_id = HX8394A_720P_VIDEO_PANEL;
Pradeep Jilagamfeb15982013-10-29 13:08:51 +0530447 switch (auto_pan_loop) {
448 case 0:
449 panel_id = HX8394A_720P_VIDEO_PANEL;
450 break;
451 case 1:
452 panel_id = NT35596_1080P_VIDEO_PANEL;
453 break;
454 default:
455 panel_id = UNKNOWN_PANEL;
Pradeep Jilagamfeb15982013-10-29 13:08:51 +0530456 dprintf(CRITICAL, "Unknown panel\n");
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700457 return PANEL_TYPE_UNKNOWN;
Pradeep Jilagamfeb15982013-10-29 13:08:51 +0530458 }
459 auto_pan_loop++;
460 }
Dhaval Patelfa5d5872013-08-08 10:52:16 -0700461 else {
462 dprintf(CRITICAL, "Not supported device, target_id=%x\n"
463 , target_id);
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700464 return PANEL_TYPE_UNKNOWN;
Dhaval Patelfa5d5872013-08-08 10:52:16 -0700465 }
Arpita Banerjee841fa062013-05-24 14:59:51 -0700466 }
467 break;
Dhaval Patelfa5d5872013-08-08 10:52:16 -0700468 case HW_PLATFORM_MTP:
469 case HW_PLATFORM_SURF:
Aravind Venkateswaranc26bb602014-01-23 11:43:02 -0800470 if ((hw_subtype == HW_PLATFORM_SUBTYPE_1080P) ||
471 (hw_subtype == HW_PLATFORM_SUBTYPE_1080P_EXT_BUCK))
Aravind Venkateswaranaf241212013-11-04 16:46:46 -0800472 panel_id = JDI_1080P_VIDEO_PANEL;
Shivaraj Shetty11b10eb2014-03-20 16:50:22 +0530473 else if (hw_subtype == HW_PLATFORM_SUBTYPE_QVGA)
474 panel_id = NT35590_QVGA_CMD_PANEL;
Aravind Venkateswaranc26bb602014-01-23 11:43:02 -0800475 else
Jayant Shekhareb6e0872013-12-23 22:39:35 +0530476 panel_id = nt35590_panel_id;
Arpita Banerjee841fa062013-05-24 14:59:51 -0700477 break;
Dhaval Patele4ef9442013-07-16 12:35:56 -0700478 default:
Dhaval Patelfa5d5872013-08-08 10:52:16 -0700479 dprintf(CRITICAL, "Display not enabled for %d HW type\n"
480 , hw_id);
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700481 return PANEL_TYPE_UNKNOWN;
Arpita Banerjee841fa062013-05-24 14:59:51 -0700482 }
483
Aravind Venkateswaran6bfb29e2014-02-12 12:31:44 -0800484panel_init:
Kuogee Hsieh80b8a6c2014-06-09 17:25:38 -0700485 return init_panel_data(panelstruct, pinfo, phy_db);
Arpita Banerjee841fa062013-05-24 14:59:51 -0700486}