blob: 8ad28b0445b03eeaba1fa5bc32a3880f4a5deba1 [file] [log] [blame]
Wenjun Zhange9647e22018-02-01 03:42:29 -05001/* Copyright (c) 2012-2016, 2018 The Linux Foundation. All rights reserved.
Shashank Mittal4bfb2e32012-04-16 10:56:27 -07002 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are
5 * 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
9 * copyright notice, this list of conditions and the following
10 * disclaimer in the documentation and/or other materials provided
11 * with the distribution.
Siddhartha Agrawal7e2e2152013-01-23 17:06:58 -080012 * * Neither the name of The Linux Foundation nor the names of its
Shashank Mittal4bfb2e32012-04-16 10:56:27 -070013 * 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 "AS IS" AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#include <debug.h>
30#include <err.h>
31#include <msm_panel.h>
32#include <mdp4.h>
33#include <mipi_dsi.h>
Amol Jadi5f0fab02013-03-18 14:50:52 -070034#include <boot_stats.h>
Veera Sundaram Sankarandb0b2bf2014-12-16 18:09:27 -080035#include <platform.h>
36#include <malloc.h>
Sridhar Parasuramc9abcdd2014-12-29 13:43:28 -080037#include <qpic.h>
38#include <target.h>
Veera Sundaram Sankarandb0b2bf2014-12-16 18:09:27 -080039#ifdef DISPLAY_TYPE_MDSS
40#include <target/display.h>
41#endif
jialongjhanb2dda0b2020-04-21 20:20:51 +080042//[Arima][8901][JialongJhan]Set Fastboot logo delay function 20190627 Start
43#include <platform/timer.h>
44extern bool boot_into_fastboot;
45//[Arima][8901][JialongJhan]Set Fastboot logo delay function 20190627 Start
Shashank Mittal4bfb2e32012-04-16 10:56:27 -070046
47static struct msm_fb_panel_data *panel;
48
49extern int lvds_on(struct msm_fb_panel_data *pdata);
50
51static int msm_fb_alloc(struct fbcon_config *fb)
52{
53 if (fb == NULL)
54 return ERROR;
55
56 if (fb->base == NULL)
57 fb->base = memalign(4096, fb->width
58 * fb->height
59 * (fb->bpp / 8));
60
61 if (fb->base == NULL)
62 return ERROR;
63
64 return NO_ERROR;
65}
66
67int msm_display_config()
68{
69 int ret = NO_ERROR;
Sridhar Parasuramc9abcdd2014-12-29 13:43:28 -080070#ifdef DISPLAY_TYPE_MDSS
Terence Hampsonf49ff4e2013-06-18 15:11:31 -040071 int mdp_rev;
Sridhar Parasuramc9abcdd2014-12-29 13:43:28 -080072#endif
Shashank Mittal4bfb2e32012-04-16 10:56:27 -070073 struct msm_panel_info *pinfo;
74
75 if (!panel)
76 return ERR_INVALID_ARGS;
77
78 pinfo = &(panel->panel_info);
79
80 /* Set MDP revision */
81 mdp_set_revision(panel->mdp_rev);
82
83 switch (pinfo->type) {
Zohaib Alamb7b677f2014-10-24 15:54:42 -040084#ifdef DISPLAY_TYPE_MDSS
Shashank Mittal4bfb2e32012-04-16 10:56:27 -070085 case LVDS_PANEL:
86 dprintf(INFO, "Config LVDS_PANEL.\n");
87 ret = mdp_lcdc_config(pinfo, &(panel->fb));
88 if (ret)
89 goto msm_display_config_out;
90 break;
91 case MIPI_VIDEO_PANEL:
92 dprintf(INFO, "Config MIPI_VIDEO_PANEL.\n");
Siddhartha Agrawal7e2e2152013-01-23 17:06:58 -080093
Terence Hampsonf49ff4e2013-06-18 15:11:31 -040094 mdp_rev = mdp_get_revision();
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +053095 if (mdp_rev == MDP_REV_50 || mdp_rev == MDP_REV_304 ||
96 mdp_rev == MDP_REV_305)
Siddhartha Agrawal7e2e2152013-01-23 17:06:58 -080097 ret = mdss_dsi_config(panel);
98 else
99 ret = mipi_config(panel);
100
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700101 if (ret)
102 goto msm_display_config_out;
Amir Samuelov2d4ba162012-07-22 11:53:14 +0300103
104 if (pinfo->early_config)
105 ret = pinfo->early_config((void *)pinfo);
106
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700107 ret = mdp_dsi_video_config(pinfo, &(panel->fb));
108 if (ret)
109 goto msm_display_config_out;
110 break;
Channagoud Kadabi10189fd2012-05-25 13:33:39 +0530111 case MIPI_CMD_PANEL:
112 dprintf(INFO, "Config MIPI_CMD_PANEL.\n");
Xiaoming Zhou8d534dd2013-07-29 15:49:19 -0400113 mdp_rev = mdp_get_revision();
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +0530114 if (mdp_rev == MDP_REV_50 || mdp_rev == MDP_REV_304 ||
115 mdp_rev == MDP_REV_305)
Siddhartha Agrawale900fdf2013-04-21 16:18:17 -0700116 ret = mdss_dsi_config(panel);
117 else
118 ret = mipi_config(panel);
Channagoud Kadabi10189fd2012-05-25 13:33:39 +0530119 if (ret)
120 goto msm_display_config_out;
Siddhartha Agrawale900fdf2013-04-21 16:18:17 -0700121
Channagoud Kadabi10189fd2012-05-25 13:33:39 +0530122 ret = mdp_dsi_cmd_config(pinfo, &(panel->fb));
123 if (ret)
124 goto msm_display_config_out;
125 break;
Channagoud Kadabi43000a62012-06-28 18:23:24 +0530126 case LCDC_PANEL:
127 dprintf(INFO, "Config LCDC PANEL.\n");
128 ret = mdp_lcdc_config(pinfo, &(panel->fb));
129 if (ret)
130 goto msm_display_config_out;
131 break;
Wenjun Zhange9647e22018-02-01 03:42:29 -0500132 case SPI_PANEL:
133 dprintf(INFO, "Config SPI PANEL.\n");
134 ret = mdss_spi_init();
135 if (ret)
136 goto msm_display_config_out;
137 ret = mdss_spi_panel_init(pinfo);
138 if (ret)
139 goto msm_display_config_out;
140 break;
Ajay Singh Parmar7c1cd522013-02-13 20:33:49 +0530141 case HDMI_PANEL:
142 dprintf(INFO, "Config HDMI PANEL.\n");
Ajay Singh Parmar243d82b2014-07-23 23:01:44 -0700143 ret = mdss_hdmi_config(pinfo, &(panel->fb));
Ajay Singh Parmar7c1cd522013-02-13 20:33:49 +0530144 if (ret)
145 goto msm_display_config_out;
146 break;
Asaf Pensob262f852013-05-19 18:32:38 +0300147 case EDP_PANEL:
148 dprintf(INFO, "Config EDP PANEL.\n");
149 ret = mdp_edp_config(pinfo, &(panel->fb));
150 if (ret)
151 goto msm_display_config_out;
152 break;
Zohaib Alamb7b677f2014-10-24 15:54:42 -0400153#endif
154#ifdef DISPLAY_TYPE_QPIC
155 case QPIC_PANEL:
156 dprintf(INFO, "Config QPIC_PANEL.\n");
Sridhar Parasuramc9abcdd2014-12-29 13:43:28 -0800157 qpic_init(pinfo, (int) panel->fb.base);
Zohaib Alamb7b677f2014-10-24 15:54:42 -0400158 break;
159#endif
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700160 default:
161 return ERR_INVALID_ARGS;
162 };
163
164 if (pinfo->config)
165 ret = pinfo->config((void *)pinfo);
166
Sridhar Parasuramc9abcdd2014-12-29 13:43:28 -0800167#ifdef DISPLAY_TYPE_MDSS
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700168msm_display_config_out:
Sridhar Parasuramc9abcdd2014-12-29 13:43:28 -0800169#endif
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700170 return ret;
171}
172
173int msm_display_on()
174{
175 int ret = NO_ERROR;
Sridhar Parasuramc9abcdd2014-12-29 13:43:28 -0800176#ifdef DISPLAY_TYPE_MDSS
Xiaoming Zhou8d534dd2013-07-29 15:49:19 -0400177 int mdp_rev;
Sridhar Parasuramc9abcdd2014-12-29 13:43:28 -0800178#endif
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700179 struct msm_panel_info *pinfo;
180
181 if (!panel)
182 return ERR_INVALID_ARGS;
183
Amol Jadi5f0fab02013-03-18 14:50:52 -0700184 bs_set_timestamp(BS_SPLASH_SCREEN_DISPLAY);
185
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700186 pinfo = &(panel->panel_info);
187
Dhaval Patelaa081d32013-10-25 13:47:46 -0700188 if (pinfo->pre_on) {
189 ret = pinfo->pre_on();
190 if (ret)
191 goto msm_display_on_out;
192 }
193
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700194 switch (pinfo->type) {
Zohaib Alamb7b677f2014-10-24 15:54:42 -0400195#ifdef DISPLAY_TYPE_MDSS
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700196 case LVDS_PANEL:
197 dprintf(INFO, "Turn on LVDS PANEL.\n");
198 ret = mdp_lcdc_on(panel);
199 if (ret)
200 goto msm_display_on_out;
201 ret = lvds_on(panel);
202 if (ret)
203 goto msm_display_on_out;
204 break;
205 case MIPI_VIDEO_PANEL:
206 dprintf(INFO, "Turn on MIPI_VIDEO_PANEL.\n");
Jayant Shekhar32397f92014-03-27 13:30:41 +0530207 ret = mdp_dsi_video_on(pinfo);
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700208 if (ret)
209 goto msm_display_on_out;
Siddhartha Agrawal007ea9e2014-10-14 15:02:48 -0700210
211 ret = mdss_dsi_post_on(panel);
212 if (ret)
213 goto msm_display_on_out;
214
Aravind Venkateswaranfec354c2014-12-04 18:10:14 -0800215 ret = mipi_dsi_on(pinfo);
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700216 if (ret)
217 goto msm_display_on_out;
218 break;
Channagoud Kadabi10189fd2012-05-25 13:33:39 +0530219 case MIPI_CMD_PANEL:
220 dprintf(INFO, "Turn on MIPI_CMD_PANEL.\n");
Jayant Shekhar32397f92014-03-27 13:30:41 +0530221 ret = mdp_dma_on(pinfo);
Channagoud Kadabi10189fd2012-05-25 13:33:39 +0530222 if (ret)
223 goto msm_display_on_out;
Xiaoming Zhou8d534dd2013-07-29 15:49:19 -0400224 mdp_rev = mdp_get_revision();
Shivaraj Shettyf9e10c42014-09-17 04:21:15 +0530225 if (mdp_rev != MDP_REV_50 && mdp_rev != MDP_REV_304 &&
226 mdp_rev != MDP_REV_305) {
Siddhartha Agrawale900fdf2013-04-21 16:18:17 -0700227 ret = mipi_cmd_trigger();
228 if (ret)
229 goto msm_display_on_out;
230 }
Siddhartha Agrawal007ea9e2014-10-14 15:02:48 -0700231
232 ret = mdss_dsi_post_on(panel);
233 if (ret)
234 goto msm_display_on_out;
235
Channagoud Kadabi10189fd2012-05-25 13:33:39 +0530236 break;
Channagoud Kadabi43000a62012-06-28 18:23:24 +0530237 case LCDC_PANEL:
238 dprintf(INFO, "Turn on LCDC PANEL.\n");
239 ret = mdp_lcdc_on(panel);
240 if (ret)
241 goto msm_display_on_out;
242 break;
Ajay Singh Parmar7c1cd522013-02-13 20:33:49 +0530243 case HDMI_PANEL:
244 dprintf(INFO, "Turn on HDMI PANEL.\n");
Ajay Singh Parmar243d82b2014-07-23 23:01:44 -0700245 ret = mdss_hdmi_init();
Ajay Singh Parmar7c1cd522013-02-13 20:33:49 +0530246 if (ret)
247 goto msm_display_on_out;
248
Veera Sundaram Sankarandb0b2bf2014-12-16 18:09:27 -0800249 ret = mdss_hdmi_on(pinfo);
Ajay Singh Parmar7c1cd522013-02-13 20:33:49 +0530250 if (ret)
251 goto msm_display_on_out;
252 break;
Asaf Pensob262f852013-05-19 18:32:38 +0300253 case EDP_PANEL:
254 dprintf(INFO, "Turn on EDP PANEL.\n");
Jayant Shekhar32397f92014-03-27 13:30:41 +0530255 ret = mdp_edp_on(pinfo);
Asaf Pensob262f852013-05-19 18:32:38 +0300256 if (ret)
257 goto msm_display_on_out;
258 break;
Wenjun Zhange9647e22018-02-01 03:42:29 -0500259 case SPI_PANEL:
260 dprintf(INFO, "Turn on SPI_PANEL.\n");
261 ret = mdss_spi_on(pinfo, &(panel->fb));
262 if (ret)
263 goto msm_display_on_out;
Wenjun Zhang150a0cd2018-03-07 01:48:21 -0500264 ret = mdss_spi_cmd_post_on(pinfo);
265 if (ret)
266 goto msm_display_on_out;
Wenjun Zhange9647e22018-02-01 03:42:29 -0500267 break;
Zohaib Alamb7b677f2014-10-24 15:54:42 -0400268#endif
269#ifdef DISPLAY_TYPE_QPIC
270 case QPIC_PANEL:
271 dprintf(INFO, "Turn on QPIC_PANEL.\n");
272 ret = qpic_on();
273 if (ret) {
274 dprintf(CRITICAL, "QPIC panel on failed\n");
275 goto msm_display_on_out;
276 }
277 qpic_update();
278 break;
279#endif
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700280 default:
281 return ERR_INVALID_ARGS;
282 };
283
284 if (pinfo->on)
285 ret = pinfo->on();
286
287msm_display_on_out:
288 return ret;
289}
290
jialongjhanb2dda0b2020-04-21 20:20:51 +0800291//[Arima][8901][JialongJhan] Command mode update screen 20190516 Start
292int msm_display_flush()
293{
294 int ret = NO_ERROR;
295 struct msm_panel_info *pinfo;
296
297 if (!panel)
298 return ERR_INVALID_ARGS;
299
300 pinfo = &(panel->panel_info);
301 if (!pinfo)
302 return ERR_INVALID_ARGS;
303
304 switch (pinfo->type) {
305 case MIPI_CMD_PANEL:
306
307 ret = mdp_dma_on(pinfo);
308 break;
309 }
310 return ret;
311}
312//[Arima][8901][JialongJhan] Command mode update screen 20190516 End
313
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700314int msm_display_init(struct msm_fb_panel_data *pdata)
315{
316 int ret = NO_ERROR;
317
318 panel = pdata;
319 if (!panel) {
320 ret = ERR_INVALID_ARGS;
321 goto msm_display_init_out;
322 }
323
Chandan Uddaraju932723b2013-02-21 18:36:20 -0800324 /* Turn on panel */
325 if (pdata->power_func)
Kuogee Hsieh93bcff62014-08-22 14:02:08 -0700326 ret = pdata->power_func(1, &(panel->panel_info));
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700327
328 if (ret)
329 goto msm_display_init_out;
330
Huaibin Yang88540b32014-11-07 13:59:54 -0800331 if (pdata->dfps_func)
332 ret = pdata->dfps_func(&(panel->panel_info));
333
Chandan Uddaraju932723b2013-02-21 18:36:20 -0800334 /* Enable clock */
335 if (pdata->clk_func)
Veera Sundaram Sankarandb0b2bf2014-12-16 18:09:27 -0800336 ret = pdata->clk_func(1, &(panel->panel_info));
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700337
Casey Piper6c2f1132015-03-24 11:37:19 -0700338 if (ret)
339 goto msm_display_init_out;
340
341 /* Read specifications from panel if available.
342 * If further clocks should be enabled, they can be enabled
343 * using pll_clk_func
344 */
345 if (pdata->update_panel_info)
346 ret = pdata->update_panel_info();
347
348 if (ret)
349 goto msm_display_init_out;
350
351 /* Enabled for auto PLL calculation or to enable
352 * additional clocks
353 */
Arpita Banerjee2522bc62013-05-24 16:03:53 -0700354 if (pdata->pll_clk_func)
355 ret = pdata->pll_clk_func(1, &(panel->panel_info));
356
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700357 if (ret)
358 goto msm_display_init_out;
359
Kuogee Hsiehad69c3c2013-08-01 14:34:29 -0700360 /* pinfo prepare */
361 if (pdata->panel_info.prepare) {
362 /* this is for edp which pinfo derived from edid */
363 ret = pdata->panel_info.prepare();
364 panel->fb.width = panel->panel_info.xres;
365 panel->fb.height = panel->panel_info.yres;
366 panel->fb.stride = panel->panel_info.xres;
367 panel->fb.bpp = panel->panel_info.bpp;
368 }
369
370 if (ret)
371 goto msm_display_init_out;
372
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700373 ret = msm_fb_alloc(&(panel->fb));
374 if (ret)
375 goto msm_display_init_out;
376
377 fbcon_setup(&(panel->fb));
jialongjhanb2dda0b2020-04-21 20:20:51 +0800378 //[Arima][8901][JialongJhan]Shown logo/fastboot logo based on condition 20190627 Start
379
380 if(boot_into_fastboot){
381 mdelay(1100);// avoid fuzzy screen.
jialongjhan1efba002020-05-22 18:25:56 +0800382 display_fastboot_image_on_screen();
jialongjhanb2dda0b2020-04-21 20:20:51 +0800383 }
384 else{
385 display_image_on_screen();
386 }
387 //[Arima][8901][JialongJhan]Shown logo/fastboot logo based on condition 20190627 End
Vineet Bajajc2272462015-05-07 17:35:03 +0530388
Siddharth Zaveriacaacc32015-12-12 15:10:33 -0500389 if ((panel->dsi2HDMI_config) && (panel->panel_info.has_bridge_chip))
Vineet Bajajc2272462015-05-07 17:35:03 +0530390 ret = panel->dsi2HDMI_config(&(panel->panel_info));
391 if (ret)
392 goto msm_display_init_out;
393
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700394 ret = msm_display_config();
395 if (ret)
396 goto msm_display_init_out;
397
398 ret = msm_display_on();
399 if (ret)
400 goto msm_display_init_out;
401
Jayant Shekhar680f04f2013-11-20 14:56:30 +0530402 if (pdata->post_power_func)
403 ret = pdata->post_power_func(1);
404 if (ret)
405 goto msm_display_init_out;
406
Casey Pipera78c3262013-09-11 16:21:05 -0700407 /* Turn on backlight */
408 if (pdata->bl_func)
409 ret = pdata->bl_func(1);
410
411 if (ret)
412 goto msm_display_init_out;
413
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700414msm_display_init_out:
415 return ret;
416}
417
418int msm_display_off()
419{
420 int ret = NO_ERROR;
421 struct msm_panel_info *pinfo;
422
423 if (!panel)
424 return ERR_INVALID_ARGS;
425
426 pinfo = &(panel->panel_info);
427
Dhaval Patelaa081d32013-10-25 13:47:46 -0700428 if (pinfo->pre_off) {
429 ret = pinfo->pre_off();
430 if (ret)
431 goto msm_display_off_out;
432 }
433
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700434 switch (pinfo->type) {
Zohaib Alamb7b677f2014-10-24 15:54:42 -0400435#ifdef DISPLAY_TYPE_MDSS
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700436 case LVDS_PANEL:
437 dprintf(INFO, "Turn off LVDS PANEL.\n");
438 mdp_lcdc_off();
439 break;
440 case MIPI_VIDEO_PANEL:
441 dprintf(INFO, "Turn off MIPI_VIDEO_PANEL.\n");
Aravind Venkateswaranfec354c2014-12-04 18:10:14 -0800442 ret = mdp_dsi_video_off(pinfo);
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700443 if (ret)
444 goto msm_display_off_out;
Siddhartha Agrawal24d81b52013-07-01 11:13:32 -0700445 ret = mipi_dsi_off(pinfo);
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700446 if (ret)
447 goto msm_display_off_out;
448 break;
Channagoud Kadabi10189fd2012-05-25 13:33:39 +0530449 case MIPI_CMD_PANEL:
450 dprintf(INFO, "Turn off MIPI_CMD_PANEL.\n");
451 ret = mdp_dsi_cmd_off();
452 if (ret)
453 goto msm_display_off_out;
Siddhartha Agrawal24d81b52013-07-01 11:13:32 -0700454 ret = mipi_dsi_off(pinfo);
Channagoud Kadabi10189fd2012-05-25 13:33:39 +0530455 if (ret)
456 goto msm_display_off_out;
457 break;
Channagoud Kadabi43000a62012-06-28 18:23:24 +0530458 case LCDC_PANEL:
459 dprintf(INFO, "Turn off LCDC PANEL.\n");
460 mdp_lcdc_off();
461 break;
Asaf Pensob262f852013-05-19 18:32:38 +0300462 case EDP_PANEL:
463 dprintf(INFO, "Turn off EDP PANEL.\n");
464 ret = mdp_edp_off();
465 if (ret)
466 goto msm_display_off_out;
467 break;
Tatenda Chipeperekwad3f2cae2015-12-15 11:52:48 -0800468 case HDMI_PANEL:
469 dprintf(INFO, "Turn off HDMI PANEL.\n");
470 ret = mdss_hdmi_off(pinfo);
471 break;
472
Zohaib Alamb7b677f2014-10-24 15:54:42 -0400473#endif
474#ifdef DISPLAY_TYPE_QPIC
475 case QPIC_PANEL:
476 dprintf(INFO, "Turn off QPIC_PANEL.\n");
477 qpic_off();
478 break;
479#endif
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700480 default:
481 return ERR_INVALID_ARGS;
482 };
483
Siddhartha Agrawal03f6d212013-02-19 13:50:52 -0800484 if (target_cont_splash_screen()) {
485 dprintf(INFO, "Continuous splash enabled, keeping panel alive.\n");
486 return NO_ERROR;
487 }
488
Jayant Shekhar680f04f2013-11-20 14:56:30 +0530489 if (panel->post_power_func)
490 ret = panel->post_power_func(0);
491 if (ret)
492 goto msm_display_off_out;
493
Casey Pipera78c3262013-09-11 16:21:05 -0700494 /* Turn off backlight */
495 if (panel->bl_func)
496 ret = panel->bl_func(0);
497
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700498 if (pinfo->off)
499 ret = pinfo->off();
500
501 /* Disable clock */
502 if (panel->clk_func)
Veera Sundaram Sankarandb0b2bf2014-12-16 18:09:27 -0800503 ret = panel->clk_func(0, pinfo);
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700504
Arpita Banerjee2522bc62013-05-24 16:03:53 -0700505 /* Only for AUTO PLL calculation */
506 if (panel->pll_clk_func)
507 ret = panel->pll_clk_func(0, pinfo);
508
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700509 if (ret)
510 goto msm_display_off_out;
511
512 /* Disable panel */
513 if (panel->power_func)
Kuogee Hsieh93bcff62014-08-22 14:02:08 -0700514 ret = panel->power_func(0, pinfo);
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700515
516msm_display_off_out:
517 return ret;
518}