blob: 3bacf19dbb3268c2863fcacbe99fef48cf909c2c [file] [log] [blame]
Siddhartha Agrawal3e694ea2013-01-23 17:01:31 -08001/* Copyright (c) 2010-2013, The Linux Foundation. All rights reserved.
Chandan Uddaraju78ae6752010-10-19 12:57:10 -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 Agrawal3e694ea2013-01-23 17:01:31 -080012 * * Neither the name of The Linux Foundation nor the names of its
Chandan Uddaraju78ae6752010-10-19 12:57:10 -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
30#ifndef _PLATFORM_MSM_SHARED_MIPI_DSI_H_
31#define _PLATFORM_MSM_SHARED_MIPI_DSI_H_
32
Shashank Mittal4bfb2e32012-04-16 10:56:27 -070033#include <msm_panel.h>
34
Chandan Uddaraju78ae6752010-10-19 12:57:10 -070035#define PASS 0
36#define FAIL 1
37
Kinson Chikfe931032011-07-21 10:01:34 -070038#define DSI_CLKOUT_TIMING_CTRL REG_DSI(0x0C0)
39#define DSI_SOFT_RESET REG_DSI(0x114)
40#define DSI_CAL_CTRL REG_DSI(0x0F4)
Chandan Uddarajufe93e822010-11-21 20:44:47 -080041
Kinson Chikfe931032011-07-21 10:01:34 -070042#define DSIPHY_SW_RESET REG_DSI(0x128)
43#define DSIPHY_PLL_RDY REG_DSI(0x280)
44#define DSIPHY_REGULATOR_CAL_PWR_CFG REG_DSI(0x518)
Chandan Uddarajufe93e822010-11-21 20:44:47 -080045
Kinson Chikfe931032011-07-21 10:01:34 -070046#define DSI_CLK_CTRL REG_DSI(0x118)
47#define DSI_TRIG_CTRL REG_DSI(0x080)
48#define DSI_CTRL REG_DSI(0x000)
49#define DSI_COMMAND_MODE_DMA_CTRL REG_DSI(0x038)
50#define DSI_COMMAND_MODE_MDP_CTRL REG_DSI(0x03C)
51#define DSI_COMMAND_MODE_MDP_DCS_CMD_CTRL REG_DSI(0x040)
52#define DSI_DMA_CMD_OFFSET REG_DSI(0x044)
53#define DSI_DMA_CMD_LENGTH REG_DSI(0x048)
54#define DSI_COMMAND_MODE_MDP_STREAM0_CTRL REG_DSI(0x054)
55#define DSI_COMMAND_MODE_MDP_STREAM0_TOTAL REG_DSI(0x058)
56#define DSI_COMMAND_MODE_MDP_STREAM1_CTRL REG_DSI(0x05C)
57#define DSI_COMMAND_MODE_MDP_STREAM1_TOTAL REG_DSI(0x060)
58#define DSI_ERR_INT_MASK0 REG_DSI(0x108)
59#define DSI_INT_CTRL REG_DSI(0x10C)
Chandan Uddaraju78ae6752010-10-19 12:57:10 -070060
Kinson Chikfe931032011-07-21 10:01:34 -070061#define DSI_VIDEO_MODE_ACTIVE_H REG_DSI(0x020)
62#define DSI_VIDEO_MODE_ACTIVE_V REG_DSI(0x024)
63#define DSI_VIDEO_MODE_TOTAL REG_DSI(0x028)
64#define DSI_VIDEO_MODE_HSYNC REG_DSI(0x02C)
65#define DSI_VIDEO_MODE_VSYNC REG_DSI(0x030)
66#define DSI_VIDEO_MODE_VSYNC_VPOS REG_DSI(0x034)
Chandan Uddaraju78ae6752010-10-19 12:57:10 -070067
Kinson Chikfe931032011-07-21 10:01:34 -070068#define DSI_MISR_CMD_CTRL REG_DSI(0x09C)
69#define DSI_MISR_VIDEO_CTRL REG_DSI(0x0A0)
70#define DSI_EOT_PACKET_CTRL REG_DSI(0x0C8)
71#define DSI_VIDEO_MODE_CTRL REG_DSI(0x00C)
72#define DSI_CAL_STRENGTH_CTRL REG_DSI(0x100)
73#define DSI_CMD_MODE_DMA_SW_TRIGGER REG_DSI(0x08C)
74#define DSI_CMD_MODE_MDP_SW_TRIGGER REG_DSI(0x090)
Chandan Uddarajueb1decb2013-04-23 14:27:49 -070075#define DSI_HS_TIMER_CTRL REG_DSI(0x0B8)
Chandan Uddaraju78ae6752010-10-19 12:57:10 -070076
Amir Samuelov2d4ba162012-07-22 11:53:14 +030077#define DSI_LANE_CTRL REG_DSI(0x0A8)
78
Ajay Dudanib01e5062011-12-03 23:23:42 -080079#define MIPI_DSI_MRPS 0x04 /* Maximum Return Packet Size */
80#define MIPI_DSI_REG_LEN 16 /* 4 x 4 bytes register */
Shashank Mittalcbd271d2011-01-14 15:18:33 -080081
Ajay Dudanib01e5062011-12-03 23:23:42 -080082#define DTYPE_GEN_WRITE2 0x23 /* 4th Byte is 0x80 */
83#define DTYPE_GEN_LWRITE 0x29 /* 4th Byte is 0xc0 */
84#define DTYPE_DCS_WRITE1 0x15 /* 4th Byte is 0x80 */
Kinson Chike5c93432011-06-17 09:10:29 -070085
Casey Pipercd156db2013-09-05 14:56:37 -070086#define DSI_RDBK_DATA0 0x06C
87
Chandan Uddaraju78ae6752010-10-19 12:57:10 -070088//BEGINNING OF Tochiba Config- video mode
89
Chandan Uddarajufe93e822010-11-21 20:44:47 -080090static const unsigned char toshiba_panel_mcap_off[8] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -080091 0x02, 0x00, 0x29, 0xc0,
92 0xb2, 0x00, 0xff, 0xff
Chandan Uddaraju78ae6752010-10-19 12:57:10 -070093};
94
Chandan Uddarajufe93e822010-11-21 20:44:47 -080095static const unsigned char toshiba_panel_ena_test_reg[8] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -080096 0x03, 0x00, 0x29, 0xc0,
97 0xEF, 0x01, 0x01, 0xff
Chandan Uddaraju78ae6752010-10-19 12:57:10 -070098};
99
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800100static const unsigned char toshiba_panel_ena_test_reg_wvga[8] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800101 0x03, 0x00, 0x29, 0xc0,
102 0xEF, 0x01, 0x01, 0xff
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700103};
104
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800105static const unsigned char toshiba_panel_num_of_2lane[8] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800106 0x03, 0x00, 0x29, 0xc0, // 63:2lane
107 0xEF, 0x60, 0x63, 0xff
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700108};
109
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800110static const unsigned char toshiba_panel_num_of_1lane[8] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800111 0x03, 0x00, 0x29, 0xc0, // 62:1lane
112 0xEF, 0x60, 0x62, 0xff
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700113};
114
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800115static const unsigned char toshiba_panel_non_burst_sync_pulse[8] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800116 0x03, 0x00, 0x29, 0xc0,
117 0xef, 0x61, 0x09, 0xff
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700118};
119
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800120static const unsigned char toshiba_panel_set_DMODE_WQVGA[8] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800121 0x02, 0x00, 0x29, 0xc0,
122 0xB3, 0x01, 0xFF, 0xff
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700123};
124
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800125static const unsigned char toshiba_panel_set_DMODE_WVGA[8] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800126 0x02, 0x00, 0x29, 0xc0,
127 0xB3, 0x00, 0xFF, 0xff
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700128};
129
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800130static const unsigned char toshiba_panel_set_intern_WR_clk1_wvga[8]
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700131 = {
132
Ajay Dudanib01e5062011-12-03 23:23:42 -0800133 0x03, 0x00, 0x29, 0xC0, // 1 last packet
134 0xef, 0x2f, 0xcc, 0xff,
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700135};
136
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800137static const unsigned char toshiba_panel_set_intern_WR_clk2_wvga[8]
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700138 = {
139
Ajay Dudanib01e5062011-12-03 23:23:42 -0800140 0x03, 0x00, 0x29, 0xC0, // 1 last packet
141 0xef, 0x6e, 0xdd, 0xff,
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700142};
143
144static const unsigned char
Ajay Dudanib01e5062011-12-03 23:23:42 -0800145 toshiba_panel_set_intern_WR_clk1_wqvga[8] = {
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700146
Ajay Dudanib01e5062011-12-03 23:23:42 -0800147 0x03, 0x00, 0x29, 0xC0, // 1 last packet
148 0xef, 0x2f, 0x22, 0xff,
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700149};
150
151static const unsigned char
Ajay Dudanib01e5062011-12-03 23:23:42 -0800152 toshiba_panel_set_intern_WR_clk2_wqvga[8] = {
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700153
Ajay Dudanib01e5062011-12-03 23:23:42 -0800154 0x03, 0x00, 0x29, 0xC0, // 1 last packet
155 0xef, 0x6e, 0x33, 0xff,
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700156};
157
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800158static const unsigned char toshiba_panel_set_hor_addr_2A_wvga[12] = {
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700159
Ajay Dudanib01e5062011-12-03 23:23:42 -0800160 0x05, 0x00, 0x39, 0xC0, // 1 last packet
161 // 0x2A, 0x00, 0x08, 0x00,//100 = 64h
162 // 0x6b, 0xFF, 0xFF, 0xFF,
163 0x2A, 0x00, 0x00, 0x01, // 0X1DF = 480-1 0X13F = 320-1
164 0xdf, 0xFF, 0xFF, 0xFF,
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700165};
166
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800167static const unsigned char toshiba_panel_set_hor_addr_2B_wvga[12] = {
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700168
Ajay Dudanib01e5062011-12-03 23:23:42 -0800169 0x05, 0x00, 0x39, 0xC0, // 1 last packet
170 // 0x2B, 0x00, 0x08, 0x00,//0X355 = 854-1; 0X1DF = 480-1
171 // 0x6b, 0xFF, 0xFF, 0xFF,
172 0x2B, 0x00, 0x00, 0x03, // 0X355 = 854-1; 0X1DF = 480-1
173 0x55, 0xFF, 0xFF, 0xFF,
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700174};
175
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800176static const unsigned char toshiba_panel_set_hor_addr_2A_wqvga[12]
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700177 = {
178
Ajay Dudanib01e5062011-12-03 23:23:42 -0800179 0x05, 0x00, 0x39, 0xC0, // 1 last packet
180 0x2A, 0x00, 0x00, 0x00, // 0XEF = 240-1
181 0xef, 0xFF, 0xFF, 0xFF,
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700182};
183
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800184static const unsigned char toshiba_panel_set_hor_addr_2B_wqvga[12]
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700185 = {
186
Ajay Dudanib01e5062011-12-03 23:23:42 -0800187 0x05, 0x00, 0x39, 0xC0, // 1 last packet
188 0x2B, 0x00, 0x00, 0x01, // 0X1aa = 427-1;
189 0xaa, 0xFF, 0xFF, 0xFF,
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700190};
191
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800192static const unsigned char toshiba_panel_IFSEL[8] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800193 0x02, 0x00, 0x29, 0xc0,
194 0x53, 0x01, 0xff, 0xff
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700195};
196
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800197static const unsigned char toshiba_panel_IFSEL_cmd_mode[8] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800198 0x02, 0x00, 0x29, 0xc0,
199 0x53, 0x00, 0xff, 0xff
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700200};
201
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800202static const unsigned char toshiba_panel_exit_sleep[4] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800203 0x11, 0x00, 0x05, 0x80, // 25 Reg 0x29 < Display On>; generic write 1
204 // params
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700205};
206
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800207static const unsigned char toshiba_panel_display_on[4] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800208 // 0x29, 0x00, 0x05, 0x80,//25 Reg 0x29 < Display On>; generic write 1
209 // params
210 0x29, 0x00, 0x05, 0x80, // 25 Reg 0x29 < Display On>; generic write 1
211 // params
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700212};
213
214//color mode off
215static const unsigned char dsi_display_config_color_mode_off[4] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800216 0x00, 0x00, 0x02, 0x80,
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700217};
218
219//color mode on
220static const unsigned char dsi_display_config_color_mode_on[4] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800221 0x00, 0x00, 0x12, 0x80,
Chandan Uddaraju78ae6752010-10-19 12:57:10 -0700222};
223
224//the end OF Tochiba Config- video mode
225
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800226/* NOVATEK BLUE panel */
Ajay Dudanib01e5062011-12-03 23:23:42 -0800227static char novatek_panel_sw_reset[4] = { 0x01, 0x00, 0x05, 0x00 }; /* DTYPE_DCS_WRITE */
228static char novatek_panel_enter_sleep[4] = { 0x10, 0x00, 0x05, 0x80 }; /* DTYPE_DCS_WRITE */
229static char novatek_panel_exit_sleep[4] = { 0x11, 0x00, 0x05, 0x80 }; /* DTYPE_DCS_WRITE */
230static char novatek_panel_display_off[4] = { 0x28, 0x00, 0x05, 0x80 }; /* DTYPE_DCS_WRITE */
231static char novatek_panel_display_on[4] = { 0x29, 0x00, 0x05, 0x80 }; /* DTYPE_DCS_WRITE */
232static char novatek_panel_max_packet[4] = { 0x04, 0x00, 0x37, 0x80 }; /* DTYPE_SET_MAX_PACKET */
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800233
Ajay Dudanib01e5062011-12-03 23:23:42 -0800234static char novatek_panel_set_onelane[4] = { 0xae, 0x01, 0x15, 0x80 }; /* DTYPE_DCS_WRITE1 */
235static char novatek_panel_rgb_888[4] = { 0x3A, 0x77, 0x15, 0x80 }; /* DTYPE_DCS_WRITE1 */
236static char novatek_panel_set_twolane[4] = { 0xae, 0x03, 0x15, 0x80 }; /* DTYPE_DCS_WRITE1 */
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800237
Ajay Dudanib01e5062011-12-03 23:23:42 -0800238static char novatek_panel_manufacture_id[4] = { 0x04, 0x00, 0x06, 0xA0 }; /* DTYPE_DCS_READ */
Casey Pipercd156db2013-09-05 14:56:37 -0700239static char read_id_a1h_cmd[4] = { 0xA1, 0x00, 0x06, 0xA0 }; /* DTYPE_DCS_READ */
Shashank Mittalcbd271d2011-01-14 15:18:33 -0800240
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800241/* commands by Novatke */
Ajay Dudanib01e5062011-12-03 23:23:42 -0800242static char novatek_panel_f4[4] = { 0xf4, 0x55, 0x15, 0x80 }; /* DTYPE_DCS_WRITE1 */
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800243
Ajay Dudanib01e5062011-12-03 23:23:42 -0800244static char novatek_panel_8c[20] = { /* DTYPE_DCS_LWRITE */
245 0x10, 0x00, 0x39, 0xC0, 0x8C, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
246 0x00, 0x08, 0x08, 0x00, 0x30, 0xC0, 0xB7, 0x37
247};
248static char novatek_panel_ff[4] = { 0xff, 0x55, 0x15, 0x80 }; /* DTYPE_DCS_WRITE1 */
249
250static char novatek_panel_set_width[12] = { /* DTYPE_DCS_LWRITE */
251 0x05, 0x00, 0x39, 0xC0, //1 last packet
252 0x2A, 0x00, 0x00, 0x02, //clmn:0 - 0x21B=539
253 0x1B, 0xFF, 0xFF, 0xFF
254}; /* 540 - 1 */
255
256static char novatek_panel_set_height[12] = { /* DTYPE_DCS_LWRITE */
257 0x05, 0x00, 0x39, 0xC0, //1 last packet
258 0x2B, 0x00, 0x00, 0x03, //row:0 - 0x3BF=959
259 0xBF, 0xFF, 0xFF, 0xFF,
260}; /* 960 - 1 */
Chandan Uddarajud25b3a42011-07-14 13:02:32 -0700261
262/* Commands to control Backlight */
Ajay Dudanib01e5062011-12-03 23:23:42 -0800263static char novatek_panel_set_led_pwm1[8] = { /* DTYPE_DCS_LWRITE */
264 0x02, 0x00, 0x39, 0xC0, //1 last packet
265 0x51, 0xFA, 0xFF, 0xFF, // Brightness level set to 0xFA -> 250
Chandan Uddarajud25b3a42011-07-14 13:02:32 -0700266};
Ajay Dudanib01e5062011-12-03 23:23:42 -0800267
268static char novatek_panel_set_led_pwm2[8] = { /* DTYPE_DCS_LWRITE */
269 0x02, 0x00, 0x39, 0xC0,
270 0x53, 0x24, 0xFF, 0xFF,
Chandan Uddarajud25b3a42011-07-14 13:02:32 -0700271};
Ajay Dudanib01e5062011-12-03 23:23:42 -0800272
273static char novatek_panel_set_led_pwm3[8] = { /* DTYPE_DCS_LWRITE */
274 0x02, 0x00, 0x39, 0xC0,
275 0x55, 0x00, 0xFF, 0xFF,
Chandan Uddarajud25b3a42011-07-14 13:02:32 -0700276};
277
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800278/* End of Novatek Blue panel commands */
279
Kinson Chike5c93432011-06-17 09:10:29 -0700280/* Toshiba mdt61 panel cmds */
281static const unsigned char toshiba_mdt61_mcap_start[4] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800282 0xB0, 0x04, DTYPE_GEN_WRITE2, 0x80,
Kinson Chike5c93432011-06-17 09:10:29 -0700283};
284
285static const unsigned char toshiba_mdt61_num_out_pixelform[8] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800286 0x03, 0x00, DTYPE_GEN_LWRITE, 0xC0,
287 0xB3, 0x00, 0x87, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700288};
289
290static const unsigned char toshiba_mdt61_dsi_ctrl[8] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800291 0x03, 0x00, DTYPE_GEN_LWRITE, 0xC0,
292 0xB6, 0x30, 0x83, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700293};
294
295static const unsigned char toshiba_mdt61_panel_driving[12] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800296 0x07, 0x00, DTYPE_GEN_LWRITE, 0xC0,
297 0xC0, 0x01, 0x00, 0x85,
298 0x00, 0x00, 0x00, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700299};
300
301static const unsigned char toshiba_mdt61_dispV_timing[12] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800302 0x05, 0x00, DTYPE_GEN_LWRITE, 0xC0,
303 0xC1, 0x00, 0x10, 0x00,
304 0x01, 0xFF, 0xFF, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700305};
306
307static const unsigned char toshiba_mdt61_dispCtrl[8] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800308 0x03, 0x00, DTYPE_GEN_LWRITE, 0xC0,
309 0xC3, 0x00, 0x19, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700310};
311
312static const unsigned char toshiba_mdt61_test_mode_c4[4] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800313 0xC4, 0x03, DTYPE_GEN_WRITE2, 0x80,
Kinson Chike5c93432011-06-17 09:10:29 -0700314};
315
316static const unsigned char toshiba_mdt61_dispH_timing[20] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800317 0x0F, 0x00, DTYPE_GEN_LWRITE, 0xC0,
318 0xC5, 0x00, 0x01, 0x05,
319 0x04, 0x5E, 0x00, 0x00,
320 0x00, 0x00, 0x0B, 0x17,
321 0x05, 0x00, 0x00, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700322};
323
324static const unsigned char toshiba_mdt61_test_mode_c6[4] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800325 0xC6, 0x00, DTYPE_GEN_WRITE2, 0x80,
Kinson Chike5c93432011-06-17 09:10:29 -0700326};
327
328static const unsigned char toshiba_mdt61_gamma_setA[20] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800329 0x0D, 0x00, DTYPE_GEN_LWRITE, 0xC0,
330 0xC8, 0x0A, 0x15, 0x18,
331 0x1B, 0x1C, 0x0D, 0x00,
332 0x00, 0x00, 0x00, 0x00,
333 0x00, 0xFF, 0xFF, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700334};
335
336static const unsigned char toshiba_mdt61_gamma_setB[20] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800337 0x0D, 0x00, DTYPE_GEN_LWRITE, 0xC0,
338 0xC9, 0x0D, 0x1D, 0x1F,
339 0x1F, 0x1F, 0x10, 0x00,
340 0x00, 0x00, 0x00, 0x00,
341 0x00, 0xFF, 0xFF, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700342};
343
344static const unsigned char toshiba_mdt61_gamma_setC[20] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800345 0x0D, 0x00, DTYPE_GEN_LWRITE, 0xC0,
346 0xCA, 0x1E, 0x1F, 0x1E,
347 0x1D, 0x1D, 0x10, 0x00,
348 0x00, 0x00, 0x00, 0x00,
349 0x00, 0xFF, 0xFF, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700350};
351
352static const unsigned char toshiba_mdt61_powerSet_ChrgPmp[12] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800353 0x05, 0x00, DTYPE_GEN_LWRITE, 0xC0,
354 0xD0, 0x02, 0x00, 0xA3,
355 0xB8, 0xFF, 0xFF, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700356};
357
358static const unsigned char toshiba_mdt61_testMode_d1[12] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800359 0x06, 0x00, DTYPE_GEN_LWRITE, 0xC0,
360 0xD1, 0x10, 0x14, 0x53,
361 0x64, 0x00, 0xFF, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700362};
363
364static const unsigned char toshiba_mdt61_powerSet_SrcAmp[8] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800365 0x03, 0x00, DTYPE_GEN_LWRITE, 0xC0,
366 0xD2, 0xB3, 0x00, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700367};
368
369static const unsigned char toshiba_mdt61_powerInt_PS[8] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800370 0x03, 0x00, DTYPE_GEN_LWRITE, 0xC0,
371 0xD3, 0x33, 0x03, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700372};
373
374static const unsigned char toshiba_mdt61_vreg[4] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800375 0xD5, 0x00, DTYPE_GEN_WRITE2, 0x80,
Kinson Chike5c93432011-06-17 09:10:29 -0700376};
377
378static const unsigned char toshiba_mdt61_test_mode_d6[4] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800379 0xD6, 0x01, DTYPE_GEN_WRITE2, 0x80,
Kinson Chike5c93432011-06-17 09:10:29 -0700380};
381
382static const unsigned char toshiba_mdt61_timingCtrl_d7[16] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800383 0x09, 0x00, DTYPE_GEN_LWRITE, 0xC0,
384 0xD7, 0x09, 0x00, 0x84,
385 0x81, 0x61, 0xBC, 0xB5,
386 0x05, 0xFF, 0xFF, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700387};
388
389static const unsigned char toshiba_mdt61_timingCtrl_d8[12] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800390 0x07, 0x00, DTYPE_GEN_LWRITE, 0xC0,
391 0xD8, 0x04, 0x25, 0x90,
392 0x4C, 0x92, 0x00, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700393};
394
395static const unsigned char toshiba_mdt61_timingCtrl_d9[8] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800396 0x04, 0x00, DTYPE_GEN_LWRITE, 0xC0,
397 0xD9, 0x5B, 0x7F, 0x05
Kinson Chike5c93432011-06-17 09:10:29 -0700398};
399
400static const unsigned char toshiba_mdt61_white_balance[12] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800401 0x06, 0x00, DTYPE_GEN_LWRITE, 0xC0,
402 0xCB, 0x00, 0x00, 0x00,
403 0x1C, 0x00, 0xFF, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700404};
405
406static const unsigned char toshiba_mdt61_vcs_settings[4] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800407 0xDD, 0x53, DTYPE_GEN_WRITE2, 0x80,
Kinson Chike5c93432011-06-17 09:10:29 -0700408};
409
410static const unsigned char toshiba_mdt61_vcom_dc_settings[4] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800411 0xDE, 0x43, DTYPE_GEN_WRITE2, 0x80,
Kinson Chike5c93432011-06-17 09:10:29 -0700412};
413
414static const unsigned char toshiba_mdt61_testMode_e3[12] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800415 0x05, 0x00, DTYPE_GEN_LWRITE, 0xC0,
416 0xE3, 0x00, 0x00, 0x00,
417 0x00, 0xFF, 0xFF, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700418};
419
420static const unsigned char toshiba_mdt61_testMode_e4[12] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800421 0x06, 0x00, DTYPE_GEN_LWRITE, 0xC0,
422 0xE4, 0x00, 0x00, 0x22,
423 0xAA, 0x00, 0xFF, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700424};
425
426static const unsigned char toshiba_mdt61_testMode_e5[4] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800427 0xE5, 0x00, DTYPE_GEN_WRITE2, 0x80,
Kinson Chike5c93432011-06-17 09:10:29 -0700428};
429
430static const unsigned char toshiba_mdt61_testMode_fa[8] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800431 0x04, 0x00, DTYPE_GEN_LWRITE, 0xC0,
432 0xFA, 0x00, 0x00, 0x00
Kinson Chike5c93432011-06-17 09:10:29 -0700433};
434
Kinson Chike5c93432011-06-17 09:10:29 -0700435static const unsigned char toshiba_mdt61_testMode_fd[12] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800436 0x05, 0x00, DTYPE_GEN_LWRITE, 0xC0,
437 0xFD, 0x00, 0x00, 0x00,
438 0x00, 0xFF, 0xFF, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700439};
440
Kinson Chike5c93432011-06-17 09:10:29 -0700441static const unsigned char toshiba_mdt61_testMode_fe[12] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800442 0x05, 0x00, DTYPE_GEN_LWRITE, 0xC0,
443 0xFE, 0x00, 0x00, 0x00,
444 0x00, 0xFF, 0xFF, 0xFF
Kinson Chike5c93432011-06-17 09:10:29 -0700445};
446
447static const unsigned char toshiba_mdt61_mcap_end[4] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800448 0xB0, 0x03, DTYPE_GEN_WRITE2, 0x80,
Kinson Chike5c93432011-06-17 09:10:29 -0700449};
450
451static const unsigned char toshiba_mdt61_set_add_mode[4] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800452 0x36, 0x00, DTYPE_DCS_WRITE1, 0x80,
Kinson Chike5c93432011-06-17 09:10:29 -0700453};
454
455static const unsigned char toshiba_mdt61_set_pixel_format[4] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800456 0x3A, 0x70, DTYPE_DCS_WRITE1, 0x80,
Kinson Chike5c93432011-06-17 09:10:29 -0700457};
458
459/* Done Toshiba MDT61 Panel Commands */
460/* Toshiba MDT61 (R69320) End */
461
Siddhartha Agrawal3e694ea2013-01-23 17:01:31 -0800462/* Toshiba MDV24 panel commands */
463static const unsigned char toshiba_mdv24_mcap[4] = {
464 0xB0, 0x00, DTYPE_GEN_WRITE2, 0x80,
465};
466
467static const unsigned char toshiba_mdv24_acr[4] = {
468 0xB2, 0x00, DTYPE_GEN_WRITE2, 0x80,
469};
470
471static const unsigned char toshiba_mdv24_intf[4] = {
472 0xB3, 0x0c, DTYPE_GEN_WRITE2, 0x80,
473};
474
475static const unsigned char toshiba_mdv24_pixel[4] = {
476 0xB4, 0x02, DTYPE_GEN_WRITE2, 0x80,
477};
478
479static const unsigned char toshiba_mdv24_drive_setting[12] = {
480 0x06, 0x00, DTYPE_GEN_LWRITE, 0xC0,
481 0xC0, 0x40, 0x02, 0x7F,
482 0xC8, 0x08, 0xFF, 0xFF
483};
484
485static const unsigned char toshiba_mdv24_display_h_timing[20] = {
486 0x10, 0x00, DTYPE_GEN_LWRITE, 0xC0,
487 0xC1, 0x00, 0xA8, 0x00,
488 0x00, 0x00, 0x00, 0x00,
Chandan Uddaraju27065612013-02-08 17:05:24 -0800489 0x9D, 0x08, 0x27, 0x00,
Siddhartha Agrawal3e694ea2013-01-23 17:01:31 -0800490 0x00, 0x00, 0x00, 0x00
491};
492
493static const unsigned char toshiba_mdv24_source_output[12] = {
494 0x06, 0x00, DTYPE_GEN_LWRITE, 0xC0,
495 0xC2, 0x00, 0x00, 0x09,
496 0x00, 0x00, 0xFF, 0xFF
497};
498
499static const unsigned char toshiba_mdv24_gate_control[4] = {
500 0xC3, 0x04, DTYPE_GEN_WRITE2, 0x80,
501};
502
503static const unsigned char toshiba_mdv24_ltps_control_c4[8] = {
504 0x04, 0x00, DTYPE_GEN_LWRITE, 0xC0,
505 0xC4, 0x4d, 0x83, 0x00
506};
507
508static const unsigned char toshiba_mdv24_source_output_mode[16] = {
509 0x0B, 0x00, DTYPE_GEN_LWRITE, 0xC0,
510 0xC6, 0x12, 0x00, 0x08,
511 0x71, 0x00, 0x00, 0x00,
512 0x80, 0x00, 0x04, 0xFF
513};
514
515static const unsigned char toshiba_mdv24_ltps_control_c7[4] = {
516 0xC7, 0x22, DTYPE_GEN_WRITE2, 0x80,
517};
518
519static const unsigned char toshiba_mdv24_gamma_ctrl[12] = {
520 0x05, 0x00, DTYPE_GEN_LWRITE, 0xC0,
521 0xC8, 0x4C, 0x0C, 0x0C,
522 0x0C, 0xFF, 0xFF, 0xFF
523};
524
525static const unsigned char toshiba_mdv24_gamma_ctrl_a_pos[20] = {
526 0x0E, 0x00, DTYPE_GEN_LWRITE, 0xC0,
527 0xC9, 0x00, 0x40, 0x00,
528 0x16, 0x32, 0x2E, 0x3A,
529 0x43, 0x3E, 0x3C, 0x45,
530 0x79, 0x3F, 0xFF, 0xFF
531};
532
533static const unsigned char toshiba_mdv24_gamma_ctrl_a_neg[20] = {
534 0x0E, 0x00, DTYPE_GEN_LWRITE, 0xC0,
535 0xCA, 0x00, 0x46, 0x1A,
536 0x23, 0x21, 0x1C, 0x25,
537 0x31, 0x2D, 0x49, 0x5F,
538 0x7F, 0x3F, 0xFF, 0xFF
539};
540
541static const unsigned char toshiba_mdv24_gamma_ctrl_b_pos[20] = {
542 0x0E, 0x00, DTYPE_GEN_LWRITE, 0xC0,
543 0xCb, 0x00, 0x4c, 0x20,
544 0x3A, 0x42, 0x40, 0x47,
545 0x4B, 0x42, 0x3E, 0x46,
546 0x7E, 0x3F, 0xFF, 0xFF
547};
548
549static const unsigned char toshiba_mdv24_gamma_ctrl_b_neg[20] = {
550 0x0E, 0x00, DTYPE_GEN_LWRITE, 0xC0,
551 0xCC, 0x00, 0x41, 0x19,
552 0x21, 0x1D, 0x14, 0x18,
553 0x1F, 0x1D, 0x25, 0x3F,
554 0x73, 0x3F, 0xFF, 0xFF
555};
556
557static const unsigned char toshiba_mdv24_gamma_ctrl_c_pos[20] = {
558 0x0E, 0x00, DTYPE_GEN_LWRITE, 0xC0,
559 0xCD, 0x23, 0x79, 0x5A,
560 0x5F, 0x57, 0x4C, 0x51,
561 0x51, 0x45, 0x3F, 0x4B,
562 0x7F, 0x3F, 0xFF, 0xFF
563};
564
565static const unsigned char toshiba_mdv24_gamma_ctrl_c_neg[20] = {
566 0x0E, 0x00, DTYPE_GEN_LWRITE, 0xC0,
567 0xCE, 0x00, 0x40, 0x14,
568 0x20, 0x1A, 0x0E, 0x0E,
569 0x13, 0x08, 0x00, 0x05,
570 0x46, 0x1C, 0xFF, 0xFF
571};
572
573static const unsigned char toshiba_mdv24_pwr_setting1[8] = {
574 0x04, 0x00, DTYPE_GEN_LWRITE, 0xC0,
575 0xD0, 0x6A, 0x64, 0x01
576};
577
578static const unsigned char toshiba_mdv24_pwr_setting2[8] = {
579 0x03, 0x00, DTYPE_GEN_LWRITE, 0xC0,
580 0xD1, 0x77, 0xd4, 0xFF
581};
582
583static const unsigned char toshiba_mdv24_pwr_setting_internal[4] = {
584 0xD3, 0x33, DTYPE_GEN_WRITE2, 0x80,
585};
586
587static const unsigned char toshiba_mdv24_lvl_setting[8] = {
588 0x03, 0x00, DTYPE_GEN_LWRITE, 0xC0,
589 0xD5, 0x0F, 0x0F, 0xFF
590};
591
592static const unsigned char toshiba_mdv24_vcomdc_setting1[12] = {
593 0x07, 0x00, DTYPE_GEN_LWRITE, 0xC0,
594 0xD8, 0x34, 0x64, 0x23,
595 0x25, 0x62, 0x32, 0xFF
596};
597
598static const unsigned char toshiba_mdv24_vcomdc_setting2[16] = {
599 0x0C, 0x00, DTYPE_GEN_LWRITE, 0xC0,
600 0xDE, 0x10, 0x7B, 0x11,
601 0x0A, 0x00, 0x00, 0x00,
602 0x00, 0x00, 0x00, 0x00
603};
604
605static const unsigned char toshiba_mdv24_init_fd[16] = {
606 0x09, 0x00, DTYPE_GEN_LWRITE, 0xC0,
607 0xFD, 0x04, 0x55, 0x53,
608 0x00, 0x70, 0xFF, 0x10,
609 0x73, 0xFF, 0xFF, 0xFF
610};
611
612static const unsigned char toshiba_mdv24_nvm_load_ctrl[4] = {
613 0xE2, 0x00, DTYPE_GEN_WRITE2, 0x80,
614};
615
616/* End of Toshiba MDV24 commands */
617
Ajay Dudanib01e5062011-12-03 23:23:42 -0800618static const unsigned char dsi_display_exit_sleep[4] = {
619 0x11, 0x00, 0x15, 0x80,
Kinson Chike5c93432011-06-17 09:10:29 -0700620};
621
Ajay Dudanib01e5062011-12-03 23:23:42 -0800622static const unsigned char dsi_display_display_on[4] = {
623 0x29, 0x00, 0x15, 0x80,
Kinson Chike5c93432011-06-17 09:10:29 -0700624};
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800625
Siddhartha Agrawal3e694ea2013-01-23 17:01:31 -0800626
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800627#define MIPI_VIDEO_MODE 1
628#define MIPI_CMD_MODE 2
629
630struct mipi_dsi_phy_ctrl {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800631 uint32_t regulator[5];
632 uint32_t timing[12];
633 uint32_t ctrl[4];
634 uint32_t strength[4];
635 uint32_t pll[21];
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800636};
637
Siddhartha Agrawal3e694ea2013-01-23 17:01:31 -0800638struct mdss_dsi_phy_ctrl {
639 uint32_t regulator[7];
640 uint32_t timing[12];
641 uint32_t ctrl[4];
642 uint32_t strength[2];
643 char bistCtrl[6];
644 char laneCfg[45];
645};
646
Arpita Banerjee2522bc62013-05-24 16:03:53 -0700647typedef struct mdss_dsi_pll_config {
648 uint32_t pixel_clock;
649 uint32_t pixel_clock_mhz;
650 uint32_t byte_clock;
651 uint32_t bit_clock;
652 uint32_t halfbit_clock;
653 uint32_t vco_clock;
654 uint8_t directpath;
655 uint8_t posdiv1;
656 uint8_t posdiv3;
657 uint8_t pclk_m;
658 uint8_t pclk_n;
659 uint8_t pclk_d;
660};
661
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800662struct mipi_dsi_cmd {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800663 int size;
664 char *payload;
Sangani Suryanarayana Raju769f9ac2013-04-30 19:05:06 +0530665 int wait;
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800666};
667
668struct mipi_dsi_panel_config {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800669 char mode;
670 char num_of_lanes;
Channagoud Kadabi539ef722012-03-29 16:02:50 +0530671 char lane_swap;
Siddhartha Agrawal3e694ea2013-01-23 17:01:31 -0800672 char pack;
Siddhartha Agrawalb6c861f2013-05-31 19:36:44 -0700673 uint8_t t_clk_pre;
674 uint8_t t_clk_post;
Ajay Dudanib01e5062011-12-03 23:23:42 -0800675 struct mipi_dsi_phy_ctrl *dsi_phy_config;
Siddhartha Agrawal3e694ea2013-01-23 17:01:31 -0800676 struct mdss_dsi_phy_ctrl *mdss_dsi_phy_config;
Ajay Dudanib01e5062011-12-03 23:23:42 -0800677 struct mipi_dsi_cmd *panel_cmds;
678 int num_of_panel_cmds;
Casey Pipercd156db2013-09-05 14:56:37 -0700679 uint32_t signature;
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800680};
681
682static struct mipi_dsi_cmd toshiba_panel_video_mode_cmds[] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800683 {sizeof(toshiba_panel_mcap_off), (char *)toshiba_panel_mcap_off},
684 {sizeof(toshiba_panel_ena_test_reg),
685 (char *)toshiba_panel_ena_test_reg},
686 {sizeof(toshiba_panel_num_of_1lane),
687 (char *)toshiba_panel_num_of_1lane},
688 {sizeof(toshiba_panel_non_burst_sync_pulse),
689 (char *)toshiba_panel_non_burst_sync_pulse},
690 {sizeof(toshiba_panel_set_DMODE_WVGA),
691 (char *)toshiba_panel_set_DMODE_WVGA},
692 {sizeof(toshiba_panel_set_intern_WR_clk1_wvga),
693 (char *)toshiba_panel_set_intern_WR_clk1_wvga},
694 {sizeof(toshiba_panel_set_intern_WR_clk2_wvga),
695 (char *)toshiba_panel_set_intern_WR_clk2_wvga},
696 {sizeof(toshiba_panel_set_hor_addr_2A_wvga),
697 (char *)toshiba_panel_set_hor_addr_2A_wvga},
698 {sizeof(toshiba_panel_set_hor_addr_2B_wvga),
699 (char *)toshiba_panel_set_hor_addr_2B_wvga},
700 {sizeof(toshiba_panel_IFSEL), (char *)toshiba_panel_IFSEL},
701 {sizeof(toshiba_panel_exit_sleep), (char *)toshiba_panel_exit_sleep},
702 {sizeof(toshiba_panel_display_on), (char *)toshiba_panel_display_on},
703 {sizeof(dsi_display_config_color_mode_on),
704 (char *)dsi_display_config_color_mode_on},
705 {sizeof(dsi_display_config_color_mode_off),
706 (char *)dsi_display_config_color_mode_off},
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800707};
708
709static struct mipi_dsi_phy_ctrl mipi_dsi_toshiba_panel_phy_ctrl = {
710 /* 480*854, RGB888, 1 Lane 60 fps video mode */
Ajay Dudanib01e5062011-12-03 23:23:42 -0800711 {0x03, 0x01, 0x01, 0x00}, /* regulator */
712 /* timing */
713 {0x50, 0x0f, 0x14, 0x19, 0x23, 0x0e, 0x12, 0x16,
714 0x1b, 0x1c, 0x04},
715 {0x7f, 0x00, 0x00, 0x00}, /* phy ctrl */
716 {0xee, 0x03, 0x86, 0x03}, /* strength */
717 /* pll control */
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800718
719#if defined(DSI_BIT_CLK_366MHZ)
Ajay Dudanib01e5062011-12-03 23:23:42 -0800720 {0x41, 0xdb, 0xb2, 0xf5, 0x00, 0x50, 0x48, 0x63,
721 0x31, 0x0f, 0x07,
722 0x05, 0x14, 0x03, 0x03, 0x03, 0x54, 0x06, 0x10, 0x04, 0x03},
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800723#elif defined(DSI_BIT_CLK_380MHZ)
Ajay Dudanib01e5062011-12-03 23:23:42 -0800724 {0x41, 0xf7, 0xb2, 0xf5, 0x00, 0x50, 0x48, 0x63,
725 0x31, 0x0f, 0x07,
726 0x05, 0x14, 0x03, 0x03, 0x03, 0x54, 0x06, 0x10, 0x04, 0x03},
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800727#elif defined(DSI_BIT_CLK_400MHZ)
Ajay Dudanib01e5062011-12-03 23:23:42 -0800728 {0x41, 0x8f, 0xb1, 0xda, 0x00, 0x50, 0x48, 0x63,
729 0x31, 0x0f, 0x07,
730 0x05, 0x14, 0x03, 0x03, 0x03, 0x54, 0x06, 0x10, 0x04, 0x03},
731#else /* 200 mhz */
732 {0x41, 0x8f, 0xb1, 0xda, 0x00, 0x50, 0x48, 0x63,
733 0x33, 0x1f, 0x1f /* for 1 lane ; 0x0f for 2 lanes */ ,
734 0x05, 0x14, 0x03, 0x03, 0x03, 0x54, 0x06, 0x10, 0x04, 0x03},
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800735#endif
736};
737
Kinson Chike5c93432011-06-17 09:10:29 -0700738static struct mipi_dsi_cmd toshiba_mdt61_video_mode_cmds[] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800739 {sizeof(toshiba_mdt61_mcap_start), (char *)toshiba_mdt61_mcap_start},
740 {sizeof(toshiba_mdt61_num_out_pixelform),
741 (char *)toshiba_mdt61_num_out_pixelform},
742 {sizeof(toshiba_mdt61_dsi_ctrl), (char *)toshiba_mdt61_dsi_ctrl},
743 {sizeof(toshiba_mdt61_panel_driving),
744 (char *)toshiba_mdt61_panel_driving},
745 {sizeof(toshiba_mdt61_dispV_timing),
746 (char *)toshiba_mdt61_dispV_timing},
747 {sizeof(toshiba_mdt61_dispCtrl), (char *)toshiba_mdt61_dispCtrl},
748 {sizeof(toshiba_mdt61_test_mode_c4),
749 (char *)toshiba_mdt61_test_mode_c4},
750 {sizeof(toshiba_mdt61_dispH_timing),
751 (char *)toshiba_mdt61_dispH_timing},
752 {sizeof(toshiba_mdt61_test_mode_c6),
753 (char *)toshiba_mdt61_test_mode_c6},
754 {sizeof(toshiba_mdt61_gamma_setA), (char *)toshiba_mdt61_gamma_setA},
755 {sizeof(toshiba_mdt61_gamma_setB), (char *)toshiba_mdt61_gamma_setB},
756 {sizeof(toshiba_mdt61_gamma_setC), (char *)toshiba_mdt61_gamma_setC},
757 {sizeof(toshiba_mdt61_powerSet_ChrgPmp),
758 (char *)toshiba_mdt61_powerSet_ChrgPmp},
759 {sizeof(toshiba_mdt61_testMode_d1), (char *)toshiba_mdt61_testMode_d1},
760 {sizeof(toshiba_mdt61_powerSet_SrcAmp),
761 (char *)toshiba_mdt61_powerSet_SrcAmp},
762 {sizeof(toshiba_mdt61_powerInt_PS), (char *)toshiba_mdt61_powerInt_PS},
763 {sizeof(toshiba_mdt61_vreg), (char *)toshiba_mdt61_vreg},
764 {sizeof(toshiba_mdt61_test_mode_d6),
765 (char *)toshiba_mdt61_test_mode_d6},
766 {sizeof(toshiba_mdt61_timingCtrl_d7),
767 (char *)toshiba_mdt61_timingCtrl_d7},
768 {sizeof(toshiba_mdt61_timingCtrl_d8),
769 (char *)toshiba_mdt61_timingCtrl_d8},
770 {sizeof(toshiba_mdt61_timingCtrl_d9),
771 (char *)toshiba_mdt61_timingCtrl_d9},
772 {sizeof(toshiba_mdt61_white_balance),
773 (char *)toshiba_mdt61_white_balance},
774 {sizeof(toshiba_mdt61_vcs_settings),
775 (char *)toshiba_mdt61_vcs_settings},
776 {sizeof(toshiba_mdt61_vcom_dc_settings),
777 (char *)toshiba_mdt61_vcom_dc_settings},
778 {sizeof(toshiba_mdt61_testMode_e3), (char *)toshiba_mdt61_testMode_e3},
779 {sizeof(toshiba_mdt61_testMode_e4), (char *)toshiba_mdt61_testMode_e4},
780 {sizeof(toshiba_mdt61_testMode_e5), (char *)toshiba_mdt61_testMode_e5},
781 {sizeof(toshiba_mdt61_testMode_fa), (char *)toshiba_mdt61_testMode_fa},
782 {sizeof(toshiba_mdt61_testMode_fd), (char *)toshiba_mdt61_testMode_fd},
783 {sizeof(toshiba_mdt61_testMode_fe), (char *)toshiba_mdt61_testMode_fe},
784 {sizeof(toshiba_mdt61_mcap_end), (char *)toshiba_mdt61_mcap_end},
785 {sizeof(toshiba_mdt61_set_add_mode),
786 (char *)toshiba_mdt61_set_add_mode},
787 {sizeof(toshiba_mdt61_set_pixel_format),
788 (char *)toshiba_mdt61_set_pixel_format},
789 {sizeof(dsi_display_exit_sleep), (char *)dsi_display_exit_sleep},
790 {sizeof(dsi_display_display_on), (char *)dsi_display_display_on},
Kinson Chike5c93432011-06-17 09:10:29 -0700791};
792
Siddhartha Agrawal3e694ea2013-01-23 17:01:31 -0800793static struct mipi_dsi_cmd toshiba_mdv24_video_mode_cmds[] = {
794 {sizeof(toshiba_mdv24_mcap), (char *)toshiba_mdv24_mcap},
795 {sizeof(toshiba_mdv24_acr),
796 (char *)toshiba_mdv24_acr},
797 {sizeof(toshiba_mdv24_intf), (char *)toshiba_mdv24_intf},
798 {sizeof(toshiba_mdv24_pixel), (char *)toshiba_mdv24_pixel},
799 {sizeof(toshiba_mdv24_drive_setting),
800 (char *)toshiba_mdv24_drive_setting},
801 {sizeof(toshiba_mdv24_display_h_timing),
802 (char *)toshiba_mdv24_display_h_timing},
803 {sizeof(toshiba_mdv24_source_output),
804 (char *)toshiba_mdv24_source_output},
805 {sizeof(toshiba_mdv24_gate_control),
806 (char *)toshiba_mdv24_gate_control},
807 {sizeof(toshiba_mdv24_ltps_control_c4),
808 (char *)toshiba_mdv24_ltps_control_c4},
809 {sizeof(toshiba_mdv24_source_output_mode),
810 (char *)toshiba_mdv24_source_output_mode},
811 {sizeof(toshiba_mdv24_ltps_control_c7),
812 (char *)toshiba_mdv24_ltps_control_c7},
813 {sizeof(toshiba_mdv24_gamma_ctrl),
814 (char *)toshiba_mdv24_gamma_ctrl},
815 {sizeof(toshiba_mdv24_gamma_ctrl_a_pos),
816 (char *)toshiba_mdv24_gamma_ctrl_a_pos},
817 {sizeof(toshiba_mdv24_gamma_ctrl_a_neg),
818 (char *)toshiba_mdv24_gamma_ctrl_a_neg},
Siddhartha Agrawal3e694ea2013-01-23 17:01:31 -0800819 {sizeof(toshiba_mdv24_gamma_ctrl_b_pos),
820 (char *)toshiba_mdv24_gamma_ctrl_b_pos},
Chandan Uddaraju27065612013-02-08 17:05:24 -0800821 {sizeof(toshiba_mdv24_gamma_ctrl_b_neg),
822 (char *)toshiba_mdv24_gamma_ctrl_b_neg},
823 {sizeof(toshiba_mdv24_gamma_ctrl_c_pos),
824 (char *)toshiba_mdv24_gamma_ctrl_c_pos},
Siddhartha Agrawal3e694ea2013-01-23 17:01:31 -0800825 {sizeof(toshiba_mdv24_gamma_ctrl_c_neg),
826 (char *)toshiba_mdv24_gamma_ctrl_c_neg},
827 {sizeof(toshiba_mdv24_pwr_setting1),
828 (char *)toshiba_mdv24_pwr_setting1},
829 {sizeof(toshiba_mdv24_pwr_setting2),
830 (char *)toshiba_mdv24_pwr_setting2},
831 {sizeof(toshiba_mdv24_pwr_setting_internal),
832 (char *)toshiba_mdv24_pwr_setting_internal},
833 {sizeof(toshiba_mdv24_lvl_setting),
834 (char *)toshiba_mdv24_lvl_setting},
835 {sizeof(toshiba_mdv24_vcomdc_setting1),
836 (char *)toshiba_mdv24_vcomdc_setting1},
837 {sizeof(toshiba_mdv24_vcomdc_setting2),
838 (char *)toshiba_mdv24_vcomdc_setting2},
839 {sizeof(toshiba_mdv24_init_fd),
840 (char *)toshiba_mdv24_init_fd},
841 {sizeof(toshiba_mdv24_nvm_load_ctrl),
842 (char *)toshiba_mdv24_nvm_load_ctrl},
843 {sizeof(dsi_display_exit_sleep), (char *)dsi_display_exit_sleep},
844 {sizeof(dsi_display_display_on), (char *)dsi_display_display_on},
845};
846
Kinson Chike5c93432011-06-17 09:10:29 -0700847static struct mipi_dsi_phy_ctrl mipi_dsi_toshiba_mdt61_panel_phy_ctrl = {
848 /* 600*1024, RGB888, 3 Lane 55 fps video mode */
Ajay Dudanib01e5062011-12-03 23:23:42 -0800849 {0x03, 0x0a, 0x04, 0x00, 0x20},
850 /* timing */
851 {0xab, 0x8a, 0x18, 0x00, 0x92, 0x97, 0x1b, 0x8c,
852 0x0c, 0x03, 0x04, 0xa0},
853 {0x5f, 0x00, 0x00, 0x10}, /* phy ctrl */
854 {0xff, 0x00, 0x06, 0x00}, /* strength */
Kinson Chike5c93432011-06-17 09:10:29 -0700855
Ajay Dudanib01e5062011-12-03 23:23:42 -0800856 /* pll control 1- 19 */
857 {0x01, 0x7f, 0x31, 0xda, 0x00, 0x40, 0x03, 0x62,
858 0x41, 0x0f, 0x01,
859 0x00, 0x1a, 0x00, 0x00, 0x02, 0x00, 0x20, 0x00, 0x01, 0x00},
Kinson Chike5c93432011-06-17 09:10:29 -0700860};
861
Shashank Mittalcbd271d2011-01-14 15:18:33 -0800862static struct mipi_dsi_cmd novatek_panel_manufacture_id_cmd =
Ajay Dudanib01e5062011-12-03 23:23:42 -0800863 { sizeof(novatek_panel_manufacture_id), novatek_panel_manufacture_id };
Shashank Mittalcbd271d2011-01-14 15:18:33 -0800864
Casey Pipercd156db2013-09-05 14:56:37 -0700865static struct mipi_dsi_cmd read_ddb_start_cmd =
866 {sizeof(read_id_a1h_cmd), read_id_a1h_cmd};
867
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800868static struct mipi_dsi_cmd novatek_panel_cmd_mode_cmds[] = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800869 {sizeof(novatek_panel_sw_reset), novatek_panel_sw_reset}
870 ,
871 {sizeof(novatek_panel_exit_sleep), novatek_panel_exit_sleep}
872 ,
873 {sizeof(novatek_panel_display_on), novatek_panel_display_on}
874 ,
875 {sizeof(novatek_panel_max_packet), novatek_panel_max_packet}
876 ,
877 {sizeof(novatek_panel_f4), novatek_panel_f4}
878 ,
879 {sizeof(novatek_panel_8c), novatek_panel_8c}
880 ,
881 {sizeof(novatek_panel_ff), novatek_panel_ff}
882 ,
883 {sizeof(novatek_panel_set_twolane), novatek_panel_set_twolane}
884 ,
885 {sizeof(novatek_panel_set_width), novatek_panel_set_width}
886 ,
887 {sizeof(novatek_panel_set_height), novatek_panel_set_height}
888 ,
889 {sizeof(novatek_panel_rgb_888), novatek_panel_rgb_888}
890 ,
891 {sizeof(novatek_panel_set_led_pwm1), novatek_panel_set_led_pwm1}
892 ,
893 {sizeof(novatek_panel_set_led_pwm2), novatek_panel_set_led_pwm2}
894 ,
895 {sizeof(novatek_panel_set_led_pwm3), novatek_panel_set_led_pwm3}
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800896};
897
Asaf Penso2a5acb32013-05-02 22:20:20 +0300898static struct mipi_dsi_cmd sharp_qhd_video_mode_cmds[] = {
899 {sizeof(novatek_panel_sw_reset), novatek_panel_sw_reset}
900 ,
901 {sizeof(novatek_panel_exit_sleep), novatek_panel_exit_sleep}
902 ,
903 {sizeof(novatek_panel_display_on), novatek_panel_display_on}
904 ,
905 {sizeof(novatek_panel_set_twolane), novatek_panel_set_twolane}
906 ,
907 {sizeof(novatek_panel_rgb_888), novatek_panel_rgb_888}
908 ,
909 {sizeof(novatek_panel_set_led_pwm1), novatek_panel_set_led_pwm1}
910 ,
911 {sizeof(novatek_panel_set_led_pwm2), novatek_panel_set_led_pwm2}
912 ,
913 {sizeof(novatek_panel_set_led_pwm3), novatek_panel_set_led_pwm3}
914};
915
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800916static struct mipi_dsi_phy_ctrl mipi_dsi_novatek_panel_phy_ctrl = {
Ajay Dudanib01e5062011-12-03 23:23:42 -0800917 /* DSI_BIT_CLK at 500MHz, 2 lane, RGB888 */
918 {0x03, 0x01, 0x01, 0x00}, /* regulator */
919 /* timing */
920 {0x96, 0x26, 0x23, 0x00, 0x50, 0x4B, 0x1e,
921 0x28, 0x28, 0x03, 0x04},
922 {0x7f, 0x00, 0x00, 0x00}, /* phy ctrl */
923 {0xee, 0x02, 0x86, 0x00}, /* strength */
924 /* pll control */
925 {0x40, 0xf9, 0xb0, 0xda, 0x00, 0x50, 0x48, 0x63,
926 /* 0x30, 0x07, 0x07, --> One lane configuration */
927 0x30, 0x07, 0x03, /* --> Two lane configuration */
928 0x05, 0x14, 0x03, 0x0, 0x0, 0x54, 0x06, 0x10, 0x04, 0x0},
Chandan Uddarajufe93e822010-11-21 20:44:47 -0800929};
930
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700931enum { /* mipi dsi panel */
932 DSI_VIDEO_MODE,
933 DSI_CMD_MODE,
934};
935#define DSI_NON_BURST_SYNCH_PULSE 0
936#define DSI_NON_BURST_SYNCH_EVENT 1
937#define DSI_BURST_MODE 2
938
939#define DSI_RGB_SWAP_RGB 0
940#define DSI_RGB_SWAP_RBG 1
941#define DSI_RGB_SWAP_BGR 2
942#define DSI_RGB_SWAP_BRG 3
943#define DSI_RGB_SWAP_GRB 4
944#define DSI_RGB_SWAP_GBR 5
945
946#define DSI_VIDEO_DST_FORMAT_RGB565 0
947#define DSI_VIDEO_DST_FORMAT_RGB666 1
948#define DSI_VIDEO_DST_FORMAT_RGB666_LOOSE 2
949#define DSI_VIDEO_DST_FORMAT_RGB888 3
950
951#define DSI_CMD_DST_FORMAT_RGB111 0
952#define DSI_CMD_DST_FORMAT_RGB332 3
953#define DSI_CMD_DST_FORMAT_RGB444 4
954#define DSI_CMD_DST_FORMAT_RGB565 6
955#define DSI_CMD_DST_FORMAT_RGB666 7
956#define DSI_CMD_DST_FORMAT_RGB888 8
957
958#define DSI_CMD_TRIGGER_NONE 0x0 /* mdp trigger */
959#define DSI_CMD_TRIGGER_TE 0x02
960#define DSI_CMD_TRIGGER_SW 0x04
961#define DSI_CMD_TRIGGER_SW_SEOF 0x05 /* cmd dma only */
962#define DSI_CMD_TRIGGER_SW_TE 0x06
963
Arpita Banerjeef1a8ac92013-05-21 10:09:35 -0700964#define DSI_DATALANE_SWAP_0123 0
965#define DSI_DATALANE_SWAP_3012 1
966#define DSI_DATALANE_SWAP_2301 2
967#define DSI_DATALANE_SWAP_1230 3
968#define DSI_DATALANE_SWAP_0321 4
969#define DSI_DATALANE_SWAP_1032 5
970#define DSI_DATALANE_SWAP_2103 6
971#define DSI_DATALANE_SWAP_3210 7
972
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700973int mipi_config(struct msm_fb_panel_data *panel);
Siddhartha Agrawal3e694ea2013-01-23 17:01:31 -0800974int mdss_dsi_config(struct msm_fb_panel_data *panel);
Xiaoming Zhou29238642014-07-31 15:24:41 -0400975void mdss_dsi_phy_contention_detection(struct mipi_dsi_panel_config *,
976 uint32_t ctrl_base);
Siddhartha Agrawal3e694ea2013-01-23 17:01:31 -0800977
Siddhartha Agrawal6e760042013-05-30 21:10:18 -0700978int mdss_dsi_video_mode_config(uint16_t disp_width,
979 uint16_t disp_height,
980 uint16_t img_width,
981 uint16_t img_height,
982 uint16_t hsync_porch0_fp,
983 uint16_t hsync_porch0_bp,
984 uint16_t vsync_porch0_fp,
985 uint16_t vsync_porch0_bp,
986 uint16_t hsync_width,
987 uint16_t vsync_width,
988 uint16_t dst_format,
989 uint16_t traffic_mode,
990 uint8_t lane_en,
991 uint16_t low_pwr_stop_mode,
992 uint8_t eof_bllp_pwr,
993 uint8_t interleav,
994 uint32_t ctl_base);
995
Shashank Mittal4bfb2e32012-04-16 10:56:27 -0700996int mipi_dsi_video_mode_config(unsigned short disp_width,
997 unsigned short disp_height,
998 unsigned short img_width,
999 unsigned short img_height,
1000 unsigned short hsync_porch0_fp,
1001 unsigned short hsync_porch0_bp,
1002 unsigned short vsync_porch0_fp,
1003 unsigned short vsync_porch0_bp,
1004 unsigned short hsync_width,
1005 unsigned short vsync_width,
1006 unsigned short dst_format,
1007 unsigned short traffic_mode,
1008 unsigned char lane_en,
1009 unsigned low_pwr_stop_mode,
1010 unsigned char eof_bllp_pwr,
1011 unsigned char interleav);
1012int mipi_dsi_on();
Siddhartha Agrawal24d81b52013-07-01 11:13:32 -07001013int mipi_dsi_off(struct msm_panel_info *pinfo);
Amir Samuelov2d4ba162012-07-22 11:53:14 +03001014int mipi_dsi_cmds_tx(struct mipi_dsi_cmd *cmds, int count);
1015int mipi_dsi_cmds_rx(char **rp, int len);
Chandan Uddaraju78ae6752010-10-19 12:57:10 -07001016#endif