blob: 94270b59f41fa0cf522be5e50ea06a6e18b6b4de [file] [log] [blame]
Aravind Venkateswarandd50c1a2014-02-25 14:42:43 -08001/* Copyright (c) 2012, 2014, The Linux Foundation. All rights reserved.
Channagoud Kadabi539ef722012-03-29 16:02:50 +05302 *
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.
Padmanabhan Komandurufa4be752012-10-08 16:51:56 +053012 * * Neither the name of The Linux Foundation, Inc. nor the names of its
Channagoud Kadabi539ef722012-03-29 16:02:50 +053013 * 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 <msm_panel.h>
31#include <target/display.h>
32#include <target/board.h>
Channagoud Kadabi43000a62012-06-28 18:23:24 +053033#include <dev/lcdc.h>
Channagoud Kadabi539ef722012-03-29 16:02:50 +053034
35static struct msm_fb_panel_data panel;
36static uint8_t display_enabled;
37
38extern int msm_display_init(struct msm_fb_panel_data *pdata);
39extern int msm_display_off();
40extern int mipi_renesas_panel_dsi_config(int);
41extern int mipi_nt35510_panel_dsi_config(int);
Channagoud Kadabi43000a62012-06-28 18:23:24 +053042extern int lcdc_truly_panel_on(int);
Channagoud Kadabi539ef722012-03-29 16:02:50 +053043
Channagoud Kadabi10189fd2012-05-25 13:33:39 +053044static int msm7627a_mdp_clock_init(int enable)
45{
46 int ret = 0;
Channagoud Kadabiebbca342012-06-29 18:14:31 +053047 unsigned rate = 0;
48
49 rate = panel.panel_info.clk_rate;
Channagoud Kadabi10189fd2012-05-25 13:33:39 +053050
51 if (enable)
Channagoud Kadabiebbca342012-06-29 18:14:31 +053052 mdp_clock_init(rate);
Aparna Mallavarapuc2163802012-06-19 19:15:32 +053053 else
54 mdp_clock_disable();
Channagoud Kadabi10189fd2012-05-25 13:33:39 +053055 return ret;
56}
57
Channagoud Kadabi43000a62012-06-28 18:23:24 +053058static int msm7627a_lcdc_clock_init(int enable)
59{
60 int ret = 0;
61 unsigned rate = panel.panel_info.clk_rate;
62
63 if (enable) {
64 mdp_clock_init(rate);
65 lcdc_clock_init(rate);
66 } else {
67 mdp_clock_disable();
68 lcdc_clock_disable();
69 }
70 return ret;
71}
Aravind Venkateswaran6385f7e2014-02-25 16:45:11 -080072void target_display_init(const char *panel_name)
Channagoud Kadabi539ef722012-03-29 16:02:50 +053073{
74 unsigned mach_type;
75 mach_type = board_machtype();
76
77 dprintf(SPEW, "display_init\n");
78
79 switch (mach_type) {
80 case MSM7X27A_SURF:
81 case MSM8X25_SURF:
82 case MSM7X27A_FFA:
Channagoud Kadabif2488462012-06-12 15:22:48 +053083#if MIPI_VIDEO_MODE
84 mipi_renesas_video_fwvga_init(&(panel.panel_info));
85#else
Channagoud Kadabi10189fd2012-05-25 13:33:39 +053086 mipi_renesas_cmd_fwvga_init(&(panel.panel_info));
Channagoud Kadabif2488462012-06-12 15:22:48 +053087#endif
Channagoud Kadabi10189fd2012-05-25 13:33:39 +053088 panel.clk_func = msm7627a_mdp_clock_init;
Channagoud Kadabi539ef722012-03-29 16:02:50 +053089 panel.power_func = mipi_renesas_panel_dsi_config;
90 panel.fb.base = MIPI_FB_ADDR;
91 panel.fb.width = panel.panel_info.xres;
92 panel.fb.height = panel.panel_info.yres;
93 panel.fb.stride = panel.panel_info.xres;
94 panel.fb.bpp = panel.panel_info.bpp;
95 panel.fb.format = FB_FORMAT_RGB888;
96 panel.mdp_rev = MDP_REV_303;
97 break;
98 case MSM7X25A_SURF:
99 case MSM7X25A_FFA:
Channagoud Kadabif2488462012-06-12 15:22:48 +0530100#if MIPI_VIDEO_MODE
101 mipi_renesas_video_hvga_init(&(panel.panel_info));
102#else
Channagoud Kadabi10189fd2012-05-25 13:33:39 +0530103 mipi_renesas_cmd_hvga_init(&(panel.panel_info));
Channagoud Kadabif2488462012-06-12 15:22:48 +0530104#endif
Channagoud Kadabi10189fd2012-05-25 13:33:39 +0530105 panel.clk_func = msm7627a_mdp_clock_init;
Channagoud Kadabi539ef722012-03-29 16:02:50 +0530106 panel.power_func = mipi_renesas_panel_dsi_config;
107 panel.fb.base = MIPI_FB_ADDR;
108 panel.fb.width = panel.panel_info.xres;
109 panel.fb.height = panel.panel_info.yres;
110 panel.fb.stride = panel.panel_info.xres;
111 panel.fb.bpp = panel.panel_info.bpp;
112 panel.fb.format = FB_FORMAT_RGB888;
113 panel.mdp_rev = MDP_REV_303;
114 break;
115 case MSM7X27A_EVB:
116 case MSM8X25_EVB:
Aparna Mallavarapu287d89c2012-05-11 14:27:03 +0530117 case MSM8X25_EVT:
Channagoud Kadabif2488462012-06-12 15:22:48 +0530118#if MIPI_VIDEO_MODE
119 mipi_nt35510_video_wvga_init(&(panel.panel_info));
120#else
Channagoud Kadabi10189fd2012-05-25 13:33:39 +0530121 mipi_nt35510_cmd_wvga_init(&(panel.panel_info));
Channagoud Kadabif2488462012-06-12 15:22:48 +0530122#endif
Channagoud Kadabi10189fd2012-05-25 13:33:39 +0530123 panel.clk_func = msm7627a_mdp_clock_init;
Channagoud Kadabi539ef722012-03-29 16:02:50 +0530124 panel.power_func = mipi_nt35510_panel_dsi_config;
125 panel.fb.base = MIPI_FB_ADDR;
126 panel.fb.width = panel.panel_info.xres;
127 panel.fb.height = panel.panel_info.yres;
128 panel.fb.stride = panel.panel_info.xres;
129 panel.fb.bpp = panel.panel_info.bpp;
130 panel.fb.format = FB_FORMAT_RGB888;
131 panel.mdp_rev = MDP_REV_303;
Channagoud Kadabi01c91822012-06-06 15:53:30 +0530132 if (mach_type == MSM8X25_EVT)
133 panel.rotate = 1;
Channagoud Kadabi539ef722012-03-29 16:02:50 +0530134 break;
Channagoud Kadabi43000a62012-06-28 18:23:24 +0530135 case MSM8X25_QRD7:
136 lcdc_truly_hvga_init(&(panel.panel_info));
137 panel.clk_func = msm7627a_lcdc_clock_init;
138 panel.power_func = lcdc_truly_panel_on;
139 panel.fb.base = LCDC_FB_ADDR;
140 panel.fb.width = panel.panel_info.xres;
141 panel.fb.height = panel.panel_info.yres;
142 panel.fb.stride = panel.panel_info.xres;
143 panel.fb.bpp = panel.panel_info.bpp;
144 panel.fb.format = FB_FORMAT_RGB565;
145 panel.mdp_rev = MDP_REV_303;
146 break;
Channagoud Kadabi539ef722012-03-29 16:02:50 +0530147 default:
148 return;
149 };
150
151 if (msm_display_init(&panel)) {
Channagoud Kadabi898453d2012-06-06 11:14:35 +0530152 dprintf(CRITICAL, "Display init failed!\n");
Channagoud Kadabi539ef722012-03-29 16:02:50 +0530153 return;
154 }
Channagoud Kadabi539ef722012-03-29 16:02:50 +0530155 display_enabled = 1;
156}
157
Aravind Venkateswarandd50c1a2014-02-25 14:42:43 -0800158void target_display_shutdown(void)
Channagoud Kadabi539ef722012-03-29 16:02:50 +0530159{
160 dprintf(SPEW, "display_shutdown()\n");
Padmanabhan Komandurufa4be752012-10-08 16:51:56 +0530161 if (display_enabled)
Channagoud Kadabi539ef722012-03-29 16:02:50 +0530162 msm_display_off();
163}