blob: 9f0a7ee317ac7374266cc7fc732e4e49a754412c [file] [log] [blame]
Shuo Yan0ee55922013-08-09 16:48:05 +08001/* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
2 *
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.
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 "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#include <stdint.h>
31#include <msm_panel.h>
32#include <mipi_dsi.h>
33#include <sys/types.h>
34#include <err.h>
35#include <reg.h>
36#include <debug.h>
37#include <target/display.h>
38#include <platform/iomap.h>
39
40#define WVGA_MIPI_FB_WIDTH 480
41#define WVGA_MIPI_FB_HEIGHT 854
42
43#define OTM8018B_PANEL_FRAME_RATE 60
44#define OTM8018B_PANEL_NUM_OF_LANES 2
45#define OTM8018B_PANEL_LANE_SWAP 1
46#define OTM8018B_PANEL_T_CLK_PRE 0x41b
47#define OTM8018B_PANEL_T_CLK_POST 0x0
48#define OTM8018B_PANEL_BPP 24
49#define OTM8018B_PANEL_CLK_RATE 499000000
50
51#define MIPI_HSYNC_PULSE_WIDTH 8
52#define MIPI_HSYNC_BACK_PORCH_DCLK 54
53#define MIPI_HSYNC_FRONT_PORCH_DCLK 80
54#define MIPI_VSYNC_PULSE_WIDTH 2
55#define MIPI_VSYNC_BACK_PORCH_LINES 16
56#define MIPI_VSYNC_FRONT_PORCH_LINES 12
57
58static char disp_on0[8] = {
59 0x02, 0x00, 0x29, 0xC0,
60 0x00, 0x00, 0xFF, 0xFF
61};
62
63static char disp_on1[8] = {
64 0x04, 0x00, 0x29, 0xC0,
65 0xFF, 0x80, 0x09, 0x01
66};
67static char disp_on2[8] = {
68 0x02, 0x00, 0x29, 0xC0,
69 0x00, 0x80, 0xFF, 0xFF
70};
71static char disp_on3[8] = {
72 0x03, 0x00, 0x29, 0xC0,
73 0xFF, 0x80, 0x09, 0xFF
74};
75
76static char disp_on4[8] = {
77 0x02, 0x00, 0x29, 0xC0,
78 0x00, 0x80, 0xFF, 0xFF
79};
80static char disp_on5[8] = {
81 0x02, 0x00, 0x29, 0xC0,
82 0xD6, 0x48, 0xFF, 0xFF
83};
84
85static char disp_on6[8] = {
86 0x02, 0x00, 0x29, 0xC0,
87 0x00, 0x03, 0xFF, 0xFF
88};
89static char disp_on7[8] = {
90 0x02, 0x00, 0x29, 0xC0,
91 0xFF, 0x01, 0xFF, 0xFF
92};
93
94static char disp_on8[8] = {
95 0x02, 0x00, 0x29, 0xC0,
96 0x00, 0xB4, 0xFF, 0xFF
97};
98
99static char disp_on9[8] = {
100 0x02, 0x00, 0x29, 0xC0,
101 0xC0, 0x10, 0xFF, 0xFF
102};
103
104static char disp_on10[8] = {
105 0x02, 0x00, 0x29, 0xC0,
106 0x00, 0x82, 0xFF, 0xFF
107};
108static char disp_on11[8] = {
109 0x02, 0x00, 0x29, 0xC0,
110 0xC5, 0xA3, 0xFF, 0xFF
111};
112static char disp_on12[8] = {
113 0x02, 0x00, 0x29, 0xC0,
114 0x00, 0x90, 0xFF, 0xFF
115};
116static char disp_on13[8] = {
117 0x03, 0x00, 0x29, 0xC0,
118 0xC5, 0x96, 0x87, 0xFF
119};
120static char disp_on14[8] = {
121 0x02, 0x00, 0x29, 0xC0,
122 0x00, 0x00, 0xFF, 0xFF
123};
124static char disp_on15[8] = {
125 0x03, 0x00, 0x29, 0xC0,
126 0xD8, 0x74, 0x72, 0xFF
127};
128static char disp_on16[8] = {
129 0x02, 0x00, 0x29, 0xC0,
130 0x00, 0x00, 0xFF, 0xFF
131};
132static char disp_on17[8] = {
133 0x02, 0x00, 0x29, 0xC0,
134 0xD9, 0x56, 0xFF, 0xFF
135};
136static char disp_on18[8] = {
137 0x02, 0x00, 0x29, 0xC0,
138 0x00, 0x00, 0xFF, 0xFF
139};
140static char disp_on19[24] = {
141 0x11, 0x00, 0x29, 0xC0,
142 0xE1, 0x00, 0x06, 0x0A,
143 0x07, 0x03, 0x16, 0x08,
144 0x0A, 0x04, 0x06, 0x07,
145 0x08, 0x0F, 0x23, 0x22,
146 0x05, 0xff, 0xff, 0xff
147};
148static char disp_on20[8] = {
149 0x02, 0x00, 0x29, 0xC0,
150 0x00, 0x00, 0xFF, 0xFF
151};
152static char disp_on21[24] = {
153 0x11, 0x00, 0x29, 0xC0,
154 0xE2, 0x00, 0x06, 0x0A,
155 0x07, 0x03, 0x16, 0x08,
156 0x0A, 0x04, 0x06, 0x07,
157 0x08, 0x0F, 0x23, 0x22,
158 0x05, 0xff, 0xff, 0xff
159};
160static char disp_on22[8] = {
161 0x02, 0x00, 0x29, 0xC0,
162 0x00, 0x81, 0xFF, 0xFF
163};
164static char disp_on23[8] = {
165 0x02, 0x00, 0x29, 0xC0,
166 0xC1, 0x77, 0xFF, 0xFF
167};
168static char disp_on24[8] = {
169 0x02, 0x00, 0x29, 0xC0,
170 0x00, 0xA0, 0xFF, 0xFF
171};
172static char disp_on25[8] = {
173 0x02, 0x00, 0x29, 0xC0,
174 0xC1, 0xEA, 0xFF, 0xFF
175};
176static char disp_on26[8] = {
177 0x02, 0x00, 0x29, 0xC0,
178 0x00, 0xA1, 0xFF, 0xFF
179};
180static char disp_on27[8] = {
181 0x02, 0x00, 0x29, 0xC0,
182 0xC1, 0x08, 0xFF, 0xFF
183};
184static char disp_on28[8] = {
185 0x02, 0x00, 0x29, 0xC0,
186 0x00, 0x89, 0xFF, 0xFF
187};
188static char disp_on29[8] = {
189 0x02, 0x00, 0x29, 0xC0,
190 0xC4, 0x08, 0xFF, 0xFF
191};
192static char disp_on30[8] = {
193 0x02, 0x00, 0x29, 0xC0,
194 0x00, 0x81, 0xFF, 0xFF
195};
196static char disp_on31[8] = {
197 0x02, 0x00, 0x29, 0xC0,
198 0xC4, 0x83, 0xFF, 0xFF
199};
200static char disp_on32[8] = {
201 0x02, 0x00, 0x29, 0xC0,
202 0x00, 0x92, 0xFF, 0xFF
203};
204static char disp_on33[8] = {
205 0x02, 0x00, 0x29, 0xC0,
206 0xC5, 0x01, 0xFF, 0xFF
207};
208static char disp_on34[8] = {
209 0x02, 0x00, 0x29, 0xC0,
210 0x00, 0xB1, 0xFF, 0xFF
211};
212static char disp_on35[8] = {
213 0x02, 0x00, 0x29, 0xC0,
214 0xC5, 0xA9, 0xFF, 0xFF
215};
216static char disp_on36[8] = {
217 0x02, 0x00, 0x29, 0xC0,
218 0x00, 0x92, 0xFF, 0xFF
219};
220static char disp_on37[8] = {
221 0x02, 0x00, 0x29, 0xC0,
222 0xB3, 0x45, 0xFF, 0xFF
223};
224static char disp_on38[8] = {
225 0x02, 0x00, 0x29, 0xC0,
226 0x00, 0x90, 0xFF, 0xFF
227};
228static char disp_on39[8] = {
229 0x02, 0x00, 0x29, 0xC0,
230 0xB3, 0x02, 0xFF, 0xFF
231};
232static char disp_on40[8] = {
233 0x02, 0x00, 0x29, 0xC0,
234 0x00, 0x80, 0xFF, 0xFF
235};
236static char disp_on41[12] = {
237 0x06, 0x00, 0x29, 0xC0,
238 0xC0, 0x00, 0x58, 0x00,
239 0x14, 0x16, 0xff, 0xff
240};
241static char disp_on42[8] = {
242 0x02, 0x00, 0x29, 0xC0,
243 0x00, 0x80, 0xFF, 0xFF
244};
245static char disp_on43[8] = {
246 0x02, 0x00, 0x29, 0xC0,
247 0xC4, 0x30, 0xFF, 0xFF
248};
249static char disp_on44[8] = {
250 0x02, 0x00, 0x29, 0xC0,
251 0x00, 0x90, 0xFF, 0xFF
252};
253static char disp_on45[12] = {
254 0x07, 0x00, 0x29, 0xC0,
255 0xC0, 0x00, 0x44, 0x00,
256 0x00, 0x00, 0x03, 0xff
257};
258static char disp_on46[8] = {
259 0x02, 0x00, 0x29, 0xC0,
260 0x00, 0xA6, 0xFF, 0xFF
261};
262static char disp_on47[8] = {
263 0x04, 0x00, 0x29, 0xC0,
264 0xC1, 0x01, 0x00, 0x00
265};
266static char disp_on48[8] = {
267 0x02, 0x00, 0x29, 0xC0,
268 0x00, 0x80, 0xFF, 0xFF
269};
270static char disp_on49[20] = {
271 0x0D, 0x00, 0x29, 0xC0,
272 0xCE, 0x87, 0x03, 0x00,
273 0x85, 0x03, 0x00, 0x86,
274 0x03, 0x00, 0x84, 0x03,
275 0x00, 0xff, 0xff, 0xff
276};
277static char disp_on50[8] = {
278 0x02, 0x00, 0x29, 0xC0,
279 0x00, 0xA0, 0xFF, 0xFF
280};
281static char disp_on51[20] = {
282 0x0F, 0x00, 0x29, 0xC0,
283 0xCE, 0x38, 0x03, 0x03,
284 0x58, 0x00, 0x00, 0x00,
285 0x38, 0x02, 0x03, 0x59,
286 0x00, 0x00, 0x00, 0xff
287};
288static char disp_on52[8] = {
289 0x02, 0x00, 0x29, 0xC0,
290 0x00, 0xB0, 0xFF, 0xFF
291};
292static char disp_on53[20] = {
293 0x0F, 0x00, 0x29, 0xC0,
294 0xCE, 0x38, 0x01, 0x03,
295 0x5A, 0x00, 0x00, 0x00,
296 0x38, 0x00, 0x03, 0x5B,
297 0x00, 0x00, 0x00, 0xff
298};
299static char disp_on54[8] = {
300 0x02, 0x00, 0x29, 0xC0,
301 0x00, 0xC0, 0xFF, 0xFF
302};
303static char disp_on55[20] = {
304 0x0F, 0x00, 0x29, 0xC0,
305 0xCE, 0x30, 0x00, 0x03,
306 0x5C, 0x00, 0x00, 0x00,
307 0x30, 0x01, 0x03, 0x5D,
308 0x00, 0x00, 0x00, 0xff
309};
310static char disp_on56[8] = {
311 0x02, 0x00, 0x29, 0xC0,
312 0x00, 0xD0, 0xFF, 0xFF
313};
314static char disp_on57[20] = {
315 0x0F, 0x00, 0x29, 0xC0,
316 0xCE, 0x30, 0x02, 0x03,
317 0x5E, 0x00, 0x00, 0x00,
318 0x30, 0x03, 0x03, 0x5F,
319 0x00, 0x00, 0x00, 0xff
320};
321static char disp_on58[8] = {
322 0x02, 0x00, 0x29, 0xC0,
323 0x00, 0xC7, 0xFF, 0xFF
324};
325static char disp_on59[8] = {
326 0x02, 0x00, 0x29, 0xC0,
327 0xCF, 0x00, 0xFF, 0xFF
328};
329static char disp_on60[8] = {
330 0x02, 0x00, 0x29, 0xC0,
331 0x00, 0xC9, 0xFF, 0xFF
332};
333static char disp_on61[8] = {
334 0x02, 0x00, 0x29, 0xC0,
335 0xCF, 0x00, 0xFF, 0xFF
336};
337static char disp_on62[8] = {
338 0x02, 0x00, 0x29, 0xC0,
339 0x00, 0xD0, 0xFF, 0xFF
340};
341static char disp_on63[8] = {
342 0x02, 0x00, 0x29, 0xC0,
343 0xCF, 0x00, 0xFF, 0xFF
344};
345static char disp_on64[8] = {
346 0x02, 0x00, 0x29, 0xC0,
347 0x00, 0xC4, 0xFF, 0xFF
348};
349static char disp_on65[12] = {
350 0x07, 0x00, 0x29, 0xC0,
351 0xCB, 0x04, 0x04, 0x04,
352 0x04, 0x04, 0x04, 0xff
353};
354static char disp_on66[8] = {
355 0x02, 0x00, 0x29, 0xC0,
356 0x00, 0xD9, 0xFF, 0xFF
357};
358static char disp_on67[12] = {
359 0x07, 0x00, 0x29, 0xC0,
360 0xCB, 0x04, 0x04, 0x04,
361 0x04, 0x04, 0x04, 0xff
362};
363static char disp_on68[8] = {
364 0x02, 0x00, 0x29, 0xC0,
365 0x00, 0x84, 0xFF, 0xFF
366};
367static char disp_on69[12] = {
368 0x07, 0x00, 0x29, 0xC0,
369 0xCC, 0x0C, 0x0A, 0x10,
370 0x0E, 0x03, 0x04, 0xFF
371};
372static char disp_on70[8] = {
373 0x02, 0x00, 0x29, 0xC0,
374 0x00, 0x9E, 0xFF, 0xFF
375};
376static char disp_on71[8] = {
377 0x02, 0x00, 0x29, 0xC0,
378 0xCC, 0x0B, 0xFF, 0xFF
379};
380static char disp_on72[8] = {
381 0x02, 0x00, 0x29, 0xC0,
382 0x00, 0xA0, 0xFF, 0xFF
383};
384static char disp_on73[12] = {
385 0x06, 0x00, 0x29, 0xC0,
386 0xCC, 0x09, 0x0F, 0x0D,
387 0x01, 0x02, 0xFF, 0xFF
388};
389static char disp_on74[8] = {
390 0x02, 0x00, 0x29, 0xC0,
391 0x00, 0xB4, 0xFF, 0xFF
392};
393static char disp_on75[12] = {
394 0x07, 0x00, 0x29, 0xC0,
395 0xCC, 0x0D, 0x0F, 0x09,
396 0x0B, 0x02, 0x01, 0xFF
397};
398static char disp_on76[8] = {
399 0x02, 0x00, 0x29, 0xC0,
400 0x00, 0xCE, 0xFF, 0xFF
401};
402static char disp_on77[8] = {
403 0x02, 0x00, 0x29, 0xC0,
404 0xCC, 0x0E, 0xFF, 0xFF
405};
406static char disp_on78[8] = {
407 0x02, 0x00, 0x29, 0xC0,
408 0x00, 0xD0, 0xFF, 0xFF
409};
410static char disp_on79[12] = {
411 0x06, 0x00, 0x29, 0xC0,
412 0xCC, 0x10, 0x0A, 0x0C,
413 0x04, 0x03, 0xFF, 0xFF
414};
415static char disp_on80[8] = {
416 0x02, 0x00, 0x29, 0xC0,
417 0x00, 0x00, 0xFF, 0xFF
418};
419static char disp_on81[8] = {
420 0x04, 0x00, 0x29, 0xC0,
421 0xFF, 0xFF, 0xFF, 0xFF
422};
423static char disp_on82[4] = {
424 0x11, 0x00, 0x05, 0x80
425};
426static char disp_on83[4] = {
427 0x29, 0x00, 0x05, 0x80
428};
429
430static struct mipi_dsi_cmd otm8018b_wvga_panel_video_mode_cmds[] = {
431 {sizeof(disp_on0), (char *)disp_on0},
432 {sizeof(disp_on1), (char *)disp_on1},
433 {sizeof(disp_on2), (char *)disp_on2},
434 {sizeof(disp_on3), (char *)disp_on3},
435 {sizeof(disp_on4), (char *)disp_on4},
436 {sizeof(disp_on5), (char *)disp_on5},
437 {sizeof(disp_on6), (char *)disp_on6},
438 {sizeof(disp_on7), (char *)disp_on7},
439 {sizeof(disp_on8), (char *)disp_on8},
440 {sizeof(disp_on9), (char *)disp_on9},
441 {sizeof(disp_on10), (char *)disp_on10},
442 {sizeof(disp_on11), (char *)disp_on11},
443 {sizeof(disp_on12), (char *)disp_on12},
444 {sizeof(disp_on13), (char *)disp_on13},
445 {sizeof(disp_on14), (char *)disp_on14},
446 {sizeof(disp_on15), (char *)disp_on15},
447 {sizeof(disp_on16), (char *)disp_on16},
448 {sizeof(disp_on17), (char *)disp_on17},
449 {sizeof(disp_on18), (char *)disp_on18},
450 {sizeof(disp_on19), (char *)disp_on19},
451 {sizeof(disp_on20), (char *)disp_on20},
452 {sizeof(disp_on21), (char *)disp_on21},
453 {sizeof(disp_on22), (char *)disp_on22},
454 {sizeof(disp_on23), (char *)disp_on23},
455 {sizeof(disp_on24), (char *)disp_on24},
456 {sizeof(disp_on25), (char *)disp_on25},
457 {sizeof(disp_on26), (char *)disp_on26},
458 {sizeof(disp_on27), (char *)disp_on27},
459 {sizeof(disp_on28), (char *)disp_on28},
460 {sizeof(disp_on29), (char *)disp_on29},
461 {sizeof(disp_on30), (char *)disp_on30},
462 {sizeof(disp_on31), (char *)disp_on31},
463 {sizeof(disp_on32), (char *)disp_on32},
464 {sizeof(disp_on33), (char *)disp_on33},
465 {sizeof(disp_on34), (char *)disp_on34},
466 {sizeof(disp_on35), (char *)disp_on35},
467 {sizeof(disp_on36), (char *)disp_on36},
468 {sizeof(disp_on37), (char *)disp_on37},
469 {sizeof(disp_on38), (char *)disp_on38},
470 {sizeof(disp_on39), (char *)disp_on39},
471 {sizeof(disp_on40), (char *)disp_on40},
472 {sizeof(disp_on41), (char *)disp_on41},
473 {sizeof(disp_on42), (char *)disp_on42},
474 {sizeof(disp_on43), (char *)disp_on43},
475 {sizeof(disp_on44), (char *)disp_on44},
476 {sizeof(disp_on45), (char *)disp_on45},
477 {sizeof(disp_on46), (char *)disp_on46},
478 {sizeof(disp_on47), (char *)disp_on47},
479 {sizeof(disp_on48), (char *)disp_on48},
480 {sizeof(disp_on49), (char *)disp_on49},
481 {sizeof(disp_on50), (char *)disp_on50},
482 {sizeof(disp_on51), (char *)disp_on51},
483 {sizeof(disp_on52), (char *)disp_on52},
484 {sizeof(disp_on53), (char *)disp_on53},
485 {sizeof(disp_on54), (char *)disp_on54},
486 {sizeof(disp_on55), (char *)disp_on55},
487 {sizeof(disp_on56), (char *)disp_on56},
488 {sizeof(disp_on57), (char *)disp_on57},
489 {sizeof(disp_on58), (char *)disp_on58},
490 {sizeof(disp_on59), (char *)disp_on59},
491 {sizeof(disp_on60), (char *)disp_on60},
492 {sizeof(disp_on61), (char *)disp_on61},
493 {sizeof(disp_on62), (char *)disp_on62},
494 {sizeof(disp_on63), (char *)disp_on63},
495 {sizeof(disp_on64), (char *)disp_on64},
496 {sizeof(disp_on65), (char *)disp_on65},
497 {sizeof(disp_on66), (char *)disp_on66},
498 {sizeof(disp_on67), (char *)disp_on67},
499 {sizeof(disp_on68), (char *)disp_on68},
500 {sizeof(disp_on69), (char *)disp_on69},
501 {sizeof(disp_on70), (char *)disp_on70},
502 {sizeof(disp_on71), (char *)disp_on71},
503 {sizeof(disp_on72), (char *)disp_on72},
504 {sizeof(disp_on73), (char *)disp_on73},
505 {sizeof(disp_on74), (char *)disp_on74},
506 {sizeof(disp_on75), (char *)disp_on75},
507 {sizeof(disp_on76), (char *)disp_on76},
508 {sizeof(disp_on77), (char *)disp_on77},
509 {sizeof(disp_on78), (char *)disp_on78},
510 {sizeof(disp_on79), (char *)disp_on79},
511 {sizeof(disp_on80), (char *)disp_on80},
512 {sizeof(disp_on81), (char *)disp_on81},
513 {sizeof(disp_on82), (char *)disp_on82},
514 {sizeof(disp_on83), (char *)disp_on83},
515};
516
517int mipi_otm8018b_video_wvga_config(void *pdata)
518{
519 int ret = NO_ERROR;
520 /* 2 Lanes -- Enables Data Lane0, 1 */
521 unsigned char lane_en = 3;
522 unsigned long low_pwr_stop_mode = 0;
523
524 /* Needed or else will have blank line at top of display */
525 unsigned char eof_bllp_pwr = 0x9;
526
527 unsigned char interleav = 0;
528 struct lcdc_panel_info *lcdc = NULL;
529 struct msm_panel_info *pinfo = (struct msm_panel_info *) pdata;
530
531 if (pinfo == NULL)
532 return ERR_INVALID_ARGS;
533
534 lcdc = &(pinfo->lcdc);
535 if (lcdc == NULL)
536 return ERR_INVALID_ARGS;
537
538 ret = mdss_dsi_video_mode_config((pinfo->xres),
539 (pinfo->yres),
540 (pinfo->xres),
541 (pinfo->yres),
542 (lcdc->h_front_porch),
shuoy9a8cd3f2013-08-20 16:00:54 +0800543 (lcdc->h_back_porch + lcdc->h_pulse_width),
Shuo Yan0ee55922013-08-09 16:48:05 +0800544 (lcdc->v_front_porch),
shuoy9a8cd3f2013-08-20 16:00:54 +0800545 (lcdc->v_back_porch + lcdc->v_pulse_width),
Shuo Yan0ee55922013-08-09 16:48:05 +0800546 (lcdc->h_pulse_width),
547 (lcdc->v_pulse_width),
548 pinfo->mipi.dst_format,
549 pinfo->mipi.traffic_mode,
550 lane_en,
551 low_pwr_stop_mode,
552 eof_bllp_pwr,
553 interleav,
554 MIPI_DSI0_BASE);
555 return ret;
556}
557
558int mipi_otm8018b_video_wvga_on()
559{
560 int ret = NO_ERROR;
561 return ret;
562}
563
564int mipi_otm8018b_video_wvga_off()
565{
566 int ret = NO_ERROR;
567 return ret;
568}
569
570static struct mdss_dsi_phy_ctrl dsi_video_mode_phy_db = {
571 {0x02, 0x08, 0x05, 0x00, 0x20, 0x03},
572 {0x8B, 0x1F, 0x05, 0x00, 0x45, 0x4A,
573 0x19, 0x23, 0x23, 0x03, 0x04, 0x00},
574 {0x7f, 0x00, 0x00, 0x00},
575 {0xff, 0x06},
576 {0x03, 0x03, 0x00, 0x00, 0x0f, 0x00},
577 { 0x80, 0x45, 0x00, 0x00, 0x00, 0x01, 0x66, 0x00, 0x00,
578 0x80, 0x45, 0x00, 0x00, 0x00, 0x01, 0x66, 0x00, 0x00,
579 0x80, 0x45, 0x00, 0x00, 0x00, 0x01, 0x66, 0x00, 0x00,
580 0x80, 0x45, 0x00, 0x00, 0x00, 0x01, 0x66, 0x00, 0x00,
581 0x40, 0x67, 0x00, 0x00, 0x00, 0x01, 0x88, 0x00, 0x00},
582};
583
584void mipi_otm8018b_video_wvga_init(struct msm_panel_info *pinfo)
585{
586 if (!pinfo)
587 return;
588
589 pinfo->xres = WVGA_MIPI_FB_WIDTH;
590 pinfo->yres = WVGA_MIPI_FB_HEIGHT;
591 pinfo->lcdc.h_back_porch = MIPI_HSYNC_BACK_PORCH_DCLK;
592 pinfo->lcdc.h_front_porch = MIPI_HSYNC_FRONT_PORCH_DCLK;
593 pinfo->lcdc.h_pulse_width = MIPI_HSYNC_PULSE_WIDTH;
594 pinfo->lcdc.v_back_porch = MIPI_VSYNC_BACK_PORCH_LINES;
595 pinfo->lcdc.v_front_porch = MIPI_VSYNC_FRONT_PORCH_LINES;
596 pinfo->lcdc.v_pulse_width = MIPI_VSYNC_PULSE_WIDTH;
597 pinfo->mipi.num_of_lanes = OTM8018B_PANEL_NUM_OF_LANES;
598 pinfo->mipi.frame_rate = OTM8018B_PANEL_FRAME_RATE;
599
600 pinfo->type = MIPI_VIDEO_PANEL;
601 pinfo->wait_cycle = 0;
602 pinfo->bpp = OTM8018B_PANEL_BPP;
603 pinfo->clk_rate = OTM8018B_PANEL_CLK_RATE;
604
605 pinfo->mipi.mode = DSI_VIDEO_MODE;
606 pinfo->mipi.traffic_mode = 2;
607 pinfo->mipi.dst_format = DSI_VIDEO_DST_FORMAT_RGB888;
608 pinfo->mipi.mdss_dsi_phy_db = &dsi_video_mode_phy_db;
609 pinfo->mipi.tx_eot_append = TRUE;
610
611 pinfo->mipi.lane_swap = OTM8018B_PANEL_LANE_SWAP;
612 pinfo->mipi.t_clk_post = OTM8018B_PANEL_T_CLK_POST;
613 pinfo->mipi.t_clk_pre = OTM8018B_PANEL_T_CLK_PRE;
614 pinfo->mipi.panel_cmds = otm8018b_wvga_panel_video_mode_cmds;
615 pinfo->mipi.num_of_panel_cmds =
616 ARRAY_SIZE(otm8018b_wvga_panel_video_mode_cmds);
617
618 pinfo->on = mipi_otm8018b_video_wvga_on;
619 pinfo->off = mipi_otm8018b_video_wvga_off;
620 pinfo->config = mipi_otm8018b_video_wvga_config;
621
622 return;
623};