9f01f96054d977d2f0631834c9f88d43ba605aed
[firefly-linux-kernel-4.4.55.git] / drivers / video / rockchip / transmitter / rk32_mipi_dsi.c
1 /*
2  * Copyright (C) 2014 ROCKCHIP, Inc.
3  * drivers/video/display/transmitter/rk32_mipi_dsi.c
4  * author: libing@rock-chips.com
5  * create date: 2014-04-10
6  * debug /sys/kernel/debug/mipidsi*
7  * This software is licensed under the terms of the GNU General Public
8  * License version 2, as published by the Free Software Foundation, and
9  * may be copied, distributed, and modified under those terms.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  */
16
17 /* config */
18 #ifndef CONFIG_RK32_MIPI_DSI
19 #include <common.h>
20 #endif
21
22 #ifdef CONFIG_RK32_MIPI_DSI
23 #define MIPI_DSI_REGISTER_IO    0
24 #define CONFIG_MIPI_DSI_LINUX   0
25 #endif
26 #define DSI_RK3288              0x3288
27 #define DSI_RK312x              0x3128
28 #define DSI_RK3368              0x3368
29 #define DSI_RK3366              0x3366
30 #define DSI_RK3399              0x3399
31 #define DSI_ERR                 -1
32
33 #include <linux/kernel.h>
34 #include <linux/init.h>
35 #include <linux/platform_device.h>
36 #include <linux/slab.h>
37 #include <linux/rk_fb.h>
38 #include <linux/rk_screen.h>
39 #include <linux/delay.h>
40 #include <linux/clk.h>
41 #include <linux/interrupt.h>
42 #include <asm/div64.h>
43
44 #include <linux/fs.h>
45 #include <linux/debugfs.h>
46 #include <linux/seq_file.h>
47 #include <linux/regulator/machine.h>
48
49 #include <linux/dma-mapping.h>
50 #include "mipi_dsi.h"
51 #include "rk32_mipi_dsi.h"
52 #include <linux/rockchip/iomap.h>
53 #include <linux/rockchip/cpu.h>
54 #include<linux/mfd/syscon.h>
55 #include<linux/regmap.h>
56
57 #define MIPI_DBG(x...)  /* printk(KERN_INFO x) */
58
59 #ifdef CONFIG_MIPI_DSI_LINUX
60 #define MIPI_TRACE(x...)        /* printk(KERN_INFO x) */
61 #else
62 #define MIPI_TRACE(...)    \
63         do {\
64                 printf(__VA_ARGS__);\
65                 printf("\n");\
66         } while (0);
67
68 #endif
69
70 /*
71 *                        Driver Version Note
72 *
73 *v1.0 : this driver is rk32 mipi dsi driver of rockchip;
74 *v1.1 : add test eye pattern;
75 *
76 */
77
78 #define RK_MIPI_DSI_VERSION_AND_TIME  "rockchip mipi_dsi v1.1 2014-06-17"
79
80 static struct dsi *dsi0;
81 static struct dsi *dsi1;
82
83 static int rk32_mipi_dsi_is_active(void *arg);
84 static int rk32_mipi_dsi_enable_hs_clk(void *arg, u32 enable);
85 static int rk32_mipi_dsi_enable_video_mode(void *arg, u32 enable);
86 static int rk32_mipi_dsi_enable_command_mode(void *arg, u32 enable);
87 static int rk32_mipi_dsi_is_enable(void *arg, u32 enable);
88 static int rk32_mipi_power_down_DDR(void);
89 static int rk32_mipi_power_up_DDR(void);
90 int rk_mipi_screen_standby(u8 enable);
91
92 int rockchip_get_screen_type(void)
93 {
94         struct device_node *type_node;
95         struct device_node *childnode;
96         u32 val = 0;
97
98         type_node = of_find_node_by_name(NULL, "display-timings");
99         if (!type_node) {
100                 pr_err("could not find display-timings node\n");
101                 return -1;
102         }
103
104         for_each_child_of_node(type_node, childnode) {
105                 if (!of_property_read_u32(childnode, "screen-type", &val))
106                         return val;
107         }
108
109         return 0;
110 }
111
112 static int rk32_dsi_read_reg(struct dsi *dsi, u16 reg, u32 *pval)
113 {
114         if (dsi->ops.id == DSI_RK3288 ||
115             dsi->ops.id == DSI_RK3399)
116                 *pval = __raw_readl(dsi->host.membase + (reg - MIPI_DSI_HOST_OFFSET));
117         else if (dsi->ops.id == DSI_RK312x ||
118                  dsi->ops.id == DSI_RK3368 ||
119                  dsi->ops.id == DSI_RK3366) {
120                 if (reg >= MIPI_DSI_HOST_OFFSET)
121                         *pval = __raw_readl(dsi->host.membase + (reg - MIPI_DSI_HOST_OFFSET));
122                 else if (reg >= MIPI_DSI_PHY_OFFSET)
123                         *pval = __raw_readl(dsi->phy.membase + (reg - MIPI_DSI_PHY_OFFSET));
124         }
125         return 0;
126 }
127
128 static int rk32_dsi_write_reg(struct dsi *dsi, u16 reg, u32 *pval)
129 {
130         if (dsi->ops.id == DSI_RK3288 ||
131             dsi->ops.id == DSI_RK3399)
132                 __raw_writel(*pval, dsi->host.membase + (reg - MIPI_DSI_HOST_OFFSET));
133         else if (dsi->ops.id == DSI_RK312x ||
134                  dsi->ops.id == DSI_RK3368 ||
135                  dsi->ops.id == DSI_RK3366) {
136                 if (reg >= MIPI_DSI_HOST_OFFSET)
137                         __raw_writel(*pval, dsi->host.membase + (reg - MIPI_DSI_HOST_OFFSET));
138                 else if (reg >= MIPI_DSI_PHY_OFFSET)
139                         __raw_writel(*pval, dsi->phy.membase + (reg - MIPI_DSI_PHY_OFFSET));
140         }
141         return 0;
142 }
143
144 static int rk32_dsi_get_bits(struct dsi *dsi, u32 reg)
145 {
146         u32 val = 0;
147         u32 bits = (reg >> 8) & 0xff;
148         u16 reg_addr = (reg >> 16) & 0xffff;
149         u8 offset = reg & 0xff;
150
151         if (bits < 32)
152                 bits = (1 << bits) - 1;
153         else
154                 bits = 0xffffffff;
155
156         rk32_dsi_read_reg(dsi, reg_addr, &val);
157         val >>= offset;
158         val &= bits;
159         return val;
160 }
161
162 static int rk32_dsi_set_bits(struct dsi *dsi, u32 data, u32 reg)
163 {
164         static u32 val;
165         u32 bits = (reg >> 8) & 0xff;
166         u16 reg_addr = (reg >> 16) & 0xffff;
167         u8 offset = reg & 0xff;
168
169         if (bits < 32)
170                 bits = (1 << bits) - 1;
171         else
172                 bits = 0xffffffff;
173
174         if (bits != 0xffffffff)
175                 rk32_dsi_read_reg(dsi, reg_addr, &val);
176
177         val &= ~(bits << offset);
178         val |= (data & bits) << offset;
179         rk32_dsi_write_reg(dsi, reg_addr, &val);
180
181         if (data > ((1 << (bits+1)) - 1)) {
182                 MIPI_TRACE("%s error reg_addr:0x%04x, offset:%d, bits:0x%04x, value:0x%04x\n",
183                                 __func__, reg_addr, offset, bits, data);
184         }
185         return 0;
186 }
187 #if 0
188 static int rk32_dwc_phy_test_rd(struct dsi *dsi, unsigned char test_code)
189 {
190         int val = 0;
191         rk32_dsi_set_bits(dsi, 1, phy_testclk);
192         rk32_dsi_set_bits(dsi, test_code, phy_testdin);
193         rk32_dsi_set_bits(dsi, 1, phy_testen);
194         rk32_dsi_set_bits(dsi, 0, phy_testclk);
195         rk32_dsi_set_bits(dsi, 0, phy_testen);;
196
197         rk32_dsi_set_bits(dsi, 0, phy_testen);
198         val = rk32_dsi_get_bits(dsi, phy_testdout);
199         rk32_dsi_set_bits(dsi, 1, phy_testclk);
200         rk32_dsi_set_bits(dsi, 0, phy_testclk);
201
202         return val;
203 }
204 #endif
205 static int rk32_dwc_phy_test_wr(struct dsi *dsi, unsigned char test_code, unsigned char *test_data, unsigned char size)
206 {
207         int i = 0;
208
209         MIPI_DBG("test_code=0x%x,test_data=0x%x\n", test_code, test_data[0]);
210         rk32_dsi_set_bits(dsi, 0x10000 | test_code, PHY_TEST_CTRL1);
211         rk32_dsi_set_bits(dsi, 0x2, PHY_TEST_CTRL0);
212         rk32_dsi_set_bits(dsi, 0x0, PHY_TEST_CTRL0);
213
214         for (i = 0; i < size; i++) {
215                 rk32_dsi_set_bits(dsi, test_data[i], PHY_TEST_CTRL1);
216                 rk32_dsi_set_bits(dsi, 0x2, PHY_TEST_CTRL0);
217                 rk32_dsi_set_bits(dsi, 0x0, PHY_TEST_CTRL0);
218                 MIPI_DBG("rk32_dwc_phy_test_wr:%08x\n", rk32_dsi_get_bits(dsi, PHY_TEST_CTRL1));
219         }
220         return 0;
221 }
222
223 static int rk32_phy_power_up(struct dsi *dsi)
224 {
225         /* enable ref clock */
226         clk_prepare_enable(dsi->phy.refclk);
227         clk_prepare_enable(dsi->dsi_pclk);
228         if (dsi->ops.id == DSI_RK3399)
229                 clk_prepare_enable(dsi->dsi_host_pclk);
230         udelay(10);
231
232         switch (dsi->host.lane) {
233         case 4:
234                 rk32_dsi_set_bits(dsi, 3, n_lanes);
235                 break;
236         case 3:
237                 rk32_dsi_set_bits(dsi, 2, n_lanes);
238                 break;
239         case 2:
240                 rk32_dsi_set_bits(dsi, 1, n_lanes);
241                 break;
242         case 1:
243                 rk32_dsi_set_bits(dsi, 0, n_lanes);
244                 break;
245         default:
246                 break;
247         }
248         rk32_dsi_set_bits(dsi, 1, phy_shutdownz);
249         rk32_dsi_set_bits(dsi, 1, phy_rstz);
250         rk32_dsi_set_bits(dsi, 1, phy_enableclk);
251         rk32_dsi_set_bits(dsi, 1, phy_forcepll);
252
253         return 0;
254 }
255
256 static int rk312x_mipi_dsi_phy_set_gotp(struct dsi *dsi, u32 offset, int n)
257 {
258         u32 val = 0, temp = 0, Tlpx = 0;
259         u32 ddr_clk = dsi->phy.ddr_clk;
260         u32 Ttxbyte_clk = dsi->phy.Ttxbyte_clk;
261         u32 Tsys_clk = dsi->phy.Tsys_clk;
262         u32 Ttxclkesc = dsi->phy.Ttxclkesc;
263         printk("%s : ddr_clk %d\n", __func__, ddr_clk);
264         switch (offset) {
265         case DPHY_CLOCK_OFFSET:
266                 MIPI_DBG("******set DPHY_CLOCK_OFFSET gotp******\n");
267                 break;
268         case DPHY_LANE0_OFFSET:
269                 MIPI_DBG("******set DPHY_LANE0_OFFSET gotp******\n");
270                 break;
271         case DPHY_LANE1_OFFSET:
272                 MIPI_DBG("******set DPHY_LANE1_OFFSET gotp******\n");
273                 break;
274         case DPHY_LANE2_OFFSET:
275                 MIPI_DBG("******set DPHY_LANE2_OFFSET gotp******\n");
276                 break;
277         case DPHY_LANE3_OFFSET:
278                 MIPI_DBG("******set DPHY_LANE3_OFFSET gotp******\n");
279                 break;
280         default:
281                 break;
282         }
283
284         if (ddr_clk < 110 * MHz)
285                 val = 0;
286         else if (ddr_clk < 150 * MHz)
287                 val = 1;
288         else if (ddr_clk < 200 * MHz)
289                 val = 2;
290         else if (ddr_clk < 250 * MHz)
291                 val = 3;
292         else if (ddr_clk < 300 * MHz)
293                 val = 4;
294         else if (ddr_clk < 400 * MHz)
295                 val = 5;
296         else if (ddr_clk < 500 * MHz)
297                 val = 6;
298         else if (ddr_clk < 600 * MHz)
299                 val = 7;
300         else if (ddr_clk < 700 * MHz)
301                 val = 8;
302         else if (ddr_clk < 800 * MHz)
303                 val = 9;
304         else if (ddr_clk <= 1000 * MHz)
305                 val = 10;
306         printk("%s reg_ths_settle = 0x%x\n", __func__, val);
307         rk32_dsi_set_bits(dsi, val, reg_ths_settle + offset);
308
309         if (ddr_clk < 110 * MHz)
310                 val = 0x20;
311         else if (ddr_clk < 150 * MHz)
312                 val = 0x06;
313         else if (ddr_clk < 200 * MHz)
314                 val = 0x18;
315         else if (ddr_clk < 250 * MHz)
316                 val = 0x05;
317         else if (ddr_clk < 300 * MHz)
318                 val = 0x51;
319         else if (ddr_clk < 400 * MHz)
320                 val = 0x64;
321         else if (ddr_clk < 500 * MHz)
322                 val = 0x59;
323         else if (ddr_clk < 600 * MHz)
324                 val = 0x6a;
325         else if (ddr_clk < 700 * MHz)
326                 val = 0x3e;
327         else if (ddr_clk < 800 * MHz)
328                 val = 0x21;
329         else if (ddr_clk <= 1000 * MHz)
330                 val = 0x09;
331         printk("%s reg_hs_ths_prepare = 0x%x\n", __func__, val);
332         rk32_dsi_set_bits(dsi, val, reg_hs_ths_prepare + offset);
333
334         if (offset != DPHY_CLOCK_OFFSET) {
335                 if (ddr_clk < 110 * MHz)
336                         val = 2;
337                 else if (ddr_clk < 150 * MHz)
338                         val = 3;
339                 else if (ddr_clk < 200 * MHz)
340                         val = 4;
341                 else if (ddr_clk < 250 * MHz)
342                         val = 5;
343                 else if (ddr_clk < 300 * MHz)
344                         val = 6;
345                 else if (ddr_clk < 400 * MHz)
346                         val = 7;
347                 else if (ddr_clk < 500 * MHz)
348                         val = 7;
349                 else if (ddr_clk < 600 * MHz)
350                         val = 8;
351                 else if (ddr_clk < 700 * MHz)
352                         val = 8;
353                 else if (ddr_clk < 800 * MHz)
354                         val = 9;
355                 else if (ddr_clk <= 1000 * MHz)
356                         val = 9;
357         } else {
358                 if (ddr_clk < 110 * MHz)
359                         val = 0x16;
360                 else if (ddr_clk < 150 * MHz)
361                         val = 0x16;
362                 else if (ddr_clk < 200 * MHz)
363                         val = 0x17;
364                 else if (ddr_clk < 250 * MHz)
365                         val = 0x17;
366                 else if (ddr_clk < 300 * MHz)
367                         val = 0x18;
368                 else if (ddr_clk < 400 * MHz)
369                         val = 0x19;
370                 else if (ddr_clk < 500 * MHz)
371                         val = 0x1b;
372                 else if (ddr_clk < 600 * MHz)
373                         val = 0x1d;
374                 else if (ddr_clk < 700 * MHz)
375                         val = 0x1e;
376                 else if (ddr_clk < 800 * MHz)
377                         val = 0x1f;
378                 else if (ddr_clk <= 1000 * MHz)
379                         val = 0x20;
380         }
381         printk("%s reg_hs_the_zero = 0x%x\n", __func__, val);
382         rk32_dsi_set_bits(dsi, val, reg_hs_the_zero + offset);
383
384         if (ddr_clk < 110 * MHz)
385                 val = 0x22;
386         else if (ddr_clk < 150 * MHz)
387                 val = 0x45;
388         else if (ddr_clk < 200 * MHz)
389                 val = 0x0b;
390         else if (ddr_clk < 250 * MHz)
391                 val = 0x16;
392         else if (ddr_clk < 300 * MHz)
393                 val = 0x2c;
394         else if (ddr_clk < 400 * MHz)
395                 val = 0x33;
396         else if (ddr_clk < 500 * MHz)
397                 val = 0x4e;
398         else if (ddr_clk < 600 * MHz)
399                 val = 0x3a;
400         else if (ddr_clk < 700 * MHz)
401                 val = 0x6a;
402         else if (ddr_clk < 800 * MHz)
403                 val = 0x29;
404         else if (ddr_clk <= 1000 * MHz)
405                 val = 0x21;     /* 0x27 */
406
407         printk("%s reg_hs_ths_trail = 0x%x\n", __func__, val);
408
409         rk32_dsi_set_bits(dsi, val, reg_hs_ths_trail + offset);
410         val = 120000 / Ttxbyte_clk + 1;
411         MIPI_DBG("reg_hs_ths_exit: %d, %d\n", val, val*Ttxbyte_clk/1000);
412         rk32_dsi_set_bits(dsi, val, reg_hs_ths_exit + offset);
413
414         if (offset == DPHY_CLOCK_OFFSET) {
415                 val = (60000 + 52*dsi->phy.UI) / Ttxbyte_clk + 1;
416                 MIPI_DBG("reg_hs_tclk_post: %d, %d\n", val, val*Ttxbyte_clk/1000);
417                 rk32_dsi_set_bits(dsi, val, reg_hs_tclk_post + offset);
418                 val = 10*dsi->phy.UI / Ttxbyte_clk + 1;
419                 MIPI_DBG("reg_hs_tclk_pre: %d, %d\n", val, val*Ttxbyte_clk/1000);
420                 rk32_dsi_set_bits(dsi, val, reg_hs_tclk_pre + offset);
421         }
422
423         val = 1010000000 / Tsys_clk + 1;
424         MIPI_DBG("reg_hs_twakup: %d, %d\n", val, val*Tsys_clk/1000);
425         if (val > 0x3ff) {
426                 val = 0x2ff;
427                 MIPI_DBG("val is too large, 0x3ff is the largest\n");
428         }
429         temp = (val >> 8) & 0x03;
430         val &= 0xff;
431         rk32_dsi_set_bits(dsi, temp, reg_hs_twakup_h + offset);
432         rk32_dsi_set_bits(dsi, val, reg_hs_twakup_l + offset);
433
434         if (Ttxclkesc > 50000) {
435                 val = 2*Ttxclkesc;
436                 MIPI_DBG("Ttxclkesc:%d\n", Ttxclkesc);
437         }
438         val = val / Ttxbyte_clk;
439         Tlpx = val*Ttxbyte_clk;
440         MIPI_DBG("reg_hs_tlpx: %d, %d\n", val, Tlpx);
441         val -= 2;
442         rk32_dsi_set_bits(dsi, val, reg_hs_tlpx + offset);
443
444         Tlpx = 2*Ttxclkesc;
445         val = 4*Tlpx / Ttxclkesc;
446         MIPI_DBG("reg_hs_tta_go: %d, %d\n", val, val*Ttxclkesc);
447         rk32_dsi_set_bits(dsi, val, reg_hs_tta_go + offset);
448         val = 3 * Tlpx / 2 / Ttxclkesc;
449         MIPI_DBG("reg_hs_tta_sure: %d, %d\n", val, val*Ttxclkesc);
450         rk32_dsi_set_bits(dsi, val, reg_hs_tta_sure + offset);
451         val = 5 * Tlpx / Ttxclkesc;
452         MIPI_DBG("reg_hs_tta_wait: %d, %d\n", val, val*Ttxclkesc);
453         rk32_dsi_set_bits(dsi, val, reg_hs_tta_wait + offset);
454         return 0;
455 }
456
457 static void rk312x_mipi_dsi_set_hs_clk(struct dsi *dsi)
458 {
459         rk32_dsi_set_bits(dsi, dsi->phy.prediv, reg_prediv);
460         rk32_dsi_set_bits(dsi, dsi->phy.fbdiv & 0xff, reg_fbdiv);
461         rk32_dsi_set_bits(dsi, (dsi->phy.fbdiv >> 8) & 0x01, reg_fbdiv_8);
462 }
463
464 static int rk312x_phy_power_up(struct dsi *dsi)
465 {
466         /* enable ref clock */
467         clk_prepare_enable(dsi->phy.refclk);
468         clk_prepare_enable(dsi->dsi_pclk);
469         clk_prepare_enable(dsi->dsi_host_pclk);
470         if (dsi->ops.id == DSI_RK312x)
471                 clk_prepare_enable(dsi->h2p_hclk);
472
473         udelay(10);
474
475         rk312x_mipi_dsi_set_hs_clk(dsi);
476         rk32_dsi_set_bits(dsi, 0xe4, DPHY_REGISTER1);
477         switch (dsi->host.lane) {
478         case 4:
479                 rk32_dsi_set_bits(dsi, 1, lane_en_3);
480         case 3:
481                 rk32_dsi_set_bits(dsi, 1, lane_en_2);
482         case 2:
483                 rk32_dsi_set_bits(dsi, 1, lane_en_1);
484         case 1:
485                 rk32_dsi_set_bits(dsi, 1, lane_en_0);
486                 rk32_dsi_set_bits(dsi, 1, lane_en_ck);
487                 break;
488         default:
489                 break;
490         }
491
492         rk32_dsi_set_bits(dsi, 0xe0, DPHY_REGISTER1);
493         udelay(10);
494
495         rk32_dsi_set_bits(dsi, 0x1e, DPHY_REGISTER20);
496         rk32_dsi_set_bits(dsi, 0x1f, DPHY_REGISTER20);
497
498         rk32_dsi_set_bits(dsi, 1, phy_enableclk);
499
500         return 0;
501 }
502
503 static int rk_phy_power_up(struct dsi *dsi)
504 {
505         if (dsi->ops.id == DSI_RK3288 ||
506             dsi->ops.id == DSI_RK3399)
507                 rk32_phy_power_up(dsi);
508         else if (dsi->ops.id == DSI_RK312x ||
509                  dsi->ops.id == DSI_RK3368 ||
510                  dsi->ops.id == DSI_RK3366)
511                 rk312x_phy_power_up(dsi);
512         return 0;
513 }
514
515 static int rk32_phy_power_down(struct dsi *dsi)
516 {
517         rk32_dsi_set_bits(dsi, 0, phy_shutdownz);
518         clk_disable_unprepare(dsi->phy.refclk);
519         clk_disable_unprepare(dsi->dsi_pclk);
520         if (dsi->ops.id == DSI_RK3399)
521                 clk_disable_unprepare(dsi->dsi_host_pclk);
522         return 0;
523 }
524
525 static int rk312x_phy_power_down(struct dsi *dsi)
526 {
527         rk32_dsi_set_bits(dsi, 0x01, DPHY_REGISTER0);
528         rk32_dsi_set_bits(dsi, 0xe3, DPHY_REGISTER1);
529
530         clk_disable_unprepare(dsi->phy.refclk);
531         clk_disable_unprepare(dsi->dsi_pclk);
532         clk_disable_unprepare(dsi->dsi_host_pclk);
533
534         if (dsi->ops.id == DSI_RK312x)
535                 clk_disable_unprepare(dsi->h2p_hclk);
536
537         return 0;
538 }
539
540 static int rk_phy_power_down(struct dsi *dsi)
541 {
542         if (dsi->ops.id == DSI_RK3288 ||
543             dsi->ops.id == DSI_RK3399)
544                 rk32_phy_power_down(dsi);
545         else if (dsi->ops.id == DSI_RK312x ||
546                  dsi->ops.id == DSI_RK3368 ||
547                  dsi->ops.id == DSI_RK3366)
548                 rk312x_phy_power_down(dsi);
549         return 0;
550 }
551
552 static int rk32_phy_init(struct dsi *dsi)
553 {
554         u32 val = 0 , ddr_clk = 0, fbdiv = 0, prediv = 0;
555         unsigned char test_data[2] = {0};
556
557         ddr_clk = dsi->phy.ddr_clk;
558         prediv  = dsi->phy.prediv;
559         fbdiv   = dsi->phy.fbdiv;
560
561         if (ddr_clk < 200 * MHz)
562                 val = 0x0;
563         else if (ddr_clk < 300 * MHz)
564                 val = 0x1;
565         else if (ddr_clk < 500 * MHz)
566                 val = 0x2;
567         else if (ddr_clk < 700 * MHz)
568                 val = 0x3;
569         else if (ddr_clk < 900 * MHz)
570                 val = 0x4;
571         else if (ddr_clk < 1100 * MHz)
572                 val = 0x5;
573         else if (ddr_clk < 1300 * MHz)
574                 val = 0x6;
575         else if (ddr_clk <= 1500 * MHz)
576                 val = 0x7;
577
578         test_data[0] = 0x80 | val << 3 | 0x3;
579         rk32_dwc_phy_test_wr(dsi, 0x10, test_data, 1);
580
581         test_data[0] = 0x8;
582         rk32_dwc_phy_test_wr(dsi, 0x11, test_data, 1);
583
584         test_data[0] = 0x80 | 0x40;
585         rk32_dwc_phy_test_wr(dsi, 0x12, test_data, 1);
586
587         if (ddr_clk < 90 * MHz)
588                 val = 0x01;
589         else if (ddr_clk < 100 * MHz)
590                 val = 0x10;
591         else if (ddr_clk < 110 * MHz)
592                 val = 0x20;
593         else if (ddr_clk < 130 * MHz)
594                 val = 0x01;
595         else if (ddr_clk < 140 * MHz)
596                 val = 0x11;
597         else if (ddr_clk < 150 * MHz)
598                 val = 0x21;
599         else if (ddr_clk < 170 * MHz)
600                 val = 0x02;
601         else if (ddr_clk < 180 * MHz)
602                 val = 0x12;
603         else if (ddr_clk < 200 * MHz)
604                 val = 0x22;
605         else if (ddr_clk < 220 * MHz)
606                 val = 0x03;
607         else if (ddr_clk < 240 * MHz)
608                 val = 0x13;
609         else if (ddr_clk < 250 * MHz)
610                 val = 0x23;
611         else if (ddr_clk < 270 * MHz)
612                 val = 0x04;
613         else if (ddr_clk < 300 * MHz)
614                 val = 0x14;
615         else if (ddr_clk < 330 * MHz)
616                 val = 0x05;
617         else if (ddr_clk < 360 * MHz)
618                 val = 0x15;
619         else if (ddr_clk < 400 * MHz)
620                 val = 0x25;
621         else if (ddr_clk < 450 * MHz)
622                 val = 0x06;
623         else if (ddr_clk < 500 * MHz)
624                 val = 0x16;
625         else if (ddr_clk < 550 * MHz)
626                 val = 0x07;
627         else if (ddr_clk < 600 * MHz)
628                 val = 0x17;
629         else if (ddr_clk < 650 * MHz)
630                 val = 0x08;
631         else if (ddr_clk < 700 * MHz)
632                 val = 0x18;
633         else if (ddr_clk < 750 * MHz)
634                 val = 0x09;
635         else if (ddr_clk < 800 * MHz)
636                 val = 0x19;
637         else if (ddr_clk < 850 * MHz)
638                 val = 0x29;
639         else if (ddr_clk < 900 * MHz)
640                 val = 0x39;
641         else if (ddr_clk < 950 * MHz)
642                 val = 0x0a;
643         else if (ddr_clk < 1000 * MHz)
644                 val = 0x1a;
645         else if (ddr_clk < 1050 * MHz)
646                 val = 0x2a;
647         else if (ddr_clk < 1100 * MHz)
648                 val = 0x3a;
649         else if (ddr_clk < 1150 * MHz)
650                 val = 0x0b;
651         else if (ddr_clk < 1200 * MHz)
652                 val = 0x1b;
653         else if (ddr_clk < 1250 * MHz)
654                 val = 0x2b;
655         else if (ddr_clk < 1300 * MHz)
656                 val = 0x3b;
657         else if (ddr_clk < 1350 * MHz)
658                 val = 0x0c;
659         else if (ddr_clk < 1400 * MHz)
660                 val = 0x1c;
661         else if (ddr_clk < 1450 * MHz)
662                 val = 0x2c;
663         else if (ddr_clk <= 1500 * MHz)
664                 val = 0x3c;
665
666         test_data[0] = val << 1;
667         rk32_dwc_phy_test_wr(dsi, code_hs_rx_lane0, test_data, 1);
668
669         test_data[0] = prediv - 1;
670         rk32_dwc_phy_test_wr(dsi, code_pll_input_div_rat, test_data, 1);
671         mdelay(2);
672         test_data[0] = (fbdiv - 1) & 0x1f;
673         rk32_dwc_phy_test_wr(dsi, code_pll_loop_div_rat, test_data, 1);
674         mdelay(2);
675         test_data[0] = (fbdiv - 1) >> 5 | 0x80;
676         rk32_dwc_phy_test_wr(dsi, code_pll_loop_div_rat, test_data, 1);
677         mdelay(2);
678         test_data[0] = 0x30;
679         rk32_dwc_phy_test_wr(dsi, code_pll_input_loop_div_rat, test_data, 1);
680         mdelay(2);
681
682         test_data[0] = 0x4d;
683         rk32_dwc_phy_test_wr(dsi, 0x20, test_data, 1);
684
685         test_data[0] = 0x3d;
686         rk32_dwc_phy_test_wr(dsi, 0x21, test_data, 1);
687
688         test_data[0] = 0xdf;
689         rk32_dwc_phy_test_wr(dsi, 0x21, test_data, 1);
690
691         test_data[0] =  0x7;
692         rk32_dwc_phy_test_wr(dsi, 0x22, test_data, 1);
693
694         test_data[0] = 0x80 | 0x7;
695         rk32_dwc_phy_test_wr(dsi, 0x22, test_data, 1);
696
697         test_data[0] = 0x80 | 15;
698         rk32_dwc_phy_test_wr(dsi, code_hstxdatalanerequsetstatetime, test_data, 1);
699
700         test_data[0] = 0x80 | 85;
701         rk32_dwc_phy_test_wr(dsi, code_hstxdatalanepreparestatetime, test_data, 1);
702
703         test_data[0] = 0x40 | 10;
704         rk32_dwc_phy_test_wr(dsi, code_hstxdatalanehszerostatetime, test_data, 1);
705
706         return 0;
707 }
708
709 static int rk312x_phy_init(struct dsi *dsi, int n)
710 {
711         /* DPHY init */
712         if (dsi->ops.id == DSI_RK3366) {
713                 rk32_dsi_set_bits(dsi, 0x00, DSI_DPHY_BITS(0x06 << 2, 32, 0));
714                 rk32_dsi_set_bits(dsi, 0x00, DSI_DPHY_BITS(0x07 << 2, 32, 0));
715         } else {
716                 rk32_dsi_set_bits(dsi, 0x11, DSI_DPHY_BITS(0x06 << 2, 32, 0));
717                 rk32_dsi_set_bits(dsi, 0x11, DSI_DPHY_BITS(0x07 << 2, 32, 0));
718         }
719         rk32_dsi_set_bits(dsi, 0xcc, DSI_DPHY_BITS(0x09<<2, 32, 0));
720 #if 0
721         dsi_set_bits(0x4e, DSI_DPHY_BITS(0x08<<2, 32, 0));
722         dsi_set_bits(0x84, DSI_DPHY_BITS(0x0a<<2, 32, 0));
723 #endif
724
725         /*reg1[4] 0: enable a function of "pll phase for serial data being captured
726                                  inside analog part"
727                   1: disable it
728         we disable it here because reg5[6:4] is not compatible with the HS speed.
729         */
730
731         if (dsi->phy.ddr_clk >= 800*MHz) {
732                 if (dsi->ops.id == DSI_RK3366) {
733                         rk32_dsi_set_bits(dsi, 0x00,
734                                           DSI_DPHY_BITS(0x05 << 2, 32, 0));
735                 } else if (dsi->ops.id == DSI_RK3368) {
736                         rk32_dsi_set_bits(dsi, 0x10, DSI_DPHY_BITS(0x05<<2, 32, 0));
737                 } else {
738                         rk32_dsi_set_bits(dsi, 0x30, DSI_DPHY_BITS(0x05<<2, 32, 0));
739                 }
740         } else {
741                 rk32_dsi_set_bits(dsi, 1, reg_da_ppfc);
742         }
743
744         switch  (dsi->host.lane) {
745         case 4:
746                 rk312x_mipi_dsi_phy_set_gotp(dsi, DPHY_LANE3_OFFSET, n);
747         case 3:
748                 rk312x_mipi_dsi_phy_set_gotp(dsi, DPHY_LANE2_OFFSET, n);
749         case 2:
750                 rk312x_mipi_dsi_phy_set_gotp(dsi, DPHY_LANE1_OFFSET, n);
751         case 1:
752                 rk312x_mipi_dsi_phy_set_gotp(dsi, DPHY_LANE0_OFFSET, n);
753                 rk312x_mipi_dsi_phy_set_gotp(dsi, DPHY_CLOCK_OFFSET, n);
754                 break;
755         default:
756                 break;
757         }
758 /*
759         rk32_dsi_set_bits(dsi, 0x00e4, reg1_phy);
760         rk32_dsi_set_bits(dsi, 0x007d, reg0_phy);
761         udelay(1000);
762         rk32_dsi_set_bits(dsi, 0x00e0, reg1_phy);
763         rk32_dsi_set_bits(dsi, 0x001e, reg20_phy);
764         udelay(1000);
765         rk32_dsi_set_bits(dsi, 0x001f, reg20_phy);
766
767         rk32_dsi_set_bits(dsi, 0x0063, reg10_phy);
768         */
769         if (dsi->ops.id == DSI_RK3366) {
770                 /* increasing the driver strength */
771                 rk32_dsi_set_bits(dsi, 0x4f, reg8_phy);
772                 rk32_dsi_set_bits(dsi, 0x5f, regb_phy);
773                 /* increasing the slew rate */
774                 rk32_dsi_set_bits(dsi, 0xc6, rega_phy);
775         } else if (dsi->ops.id == DSI_RK3368) {
776                 rk32_dsi_set_bits(dsi, 0x1, reg5_phy);
777                 rk32_dsi_set_bits(dsi, 0x9, regb_0_3_phy);
778         } else {
779                 rk32_dsi_set_bits(dsi, 0x6, reg5_phy);
780                 rk32_dsi_set_bits(dsi, 0x9, regb_0_3_phy);
781         }
782         rk32_dsi_set_bits(dsi, 0x6, reg10_4_6_phy);
783
784         return 0;
785 }
786
787 static int rk_phy_init(struct dsi *dsi)
788 {
789         if (dsi->ops.id == DSI_RK3288 ||
790             dsi->ops.id == DSI_RK3399)
791                 rk32_phy_init(dsi);
792         else if (dsi->ops.id == DSI_RK312x ||
793                  dsi->ops.id == DSI_RK3368 ||
794                  dsi->ops.id == DSI_RK3366)
795                 rk312x_phy_init(dsi, 4);
796         return 0;
797 }
798
799 static int rk32_mipi_dsi_host_power_up(struct dsi *dsi)
800 {
801         int ret = 0;
802         u32 val;
803
804         /* disable all interrupt */
805         rk32_dsi_set_bits(dsi, 0x1fffff, INT_MKS0);
806         rk32_dsi_set_bits(dsi, 0x3ffff, INT_MKS1);
807
808         rk32_mipi_dsi_is_enable(dsi, 1);
809
810         val = 10;
811         while (!rk32_dsi_get_bits(dsi, phylock) && val--) {
812                 udelay(10);
813         };
814
815         if (val == 0) {
816                 ret = -1;
817                 MIPI_TRACE("%s:phylock fail.\n", __func__);
818         }
819
820         val = 10;
821         while (!rk32_dsi_get_bits(dsi, phystopstateclklane) && val--) {
822                 udelay(10);
823         };
824
825         return ret;
826 }
827
828 static int rk32_mipi_dsi_host_power_down(struct dsi *dsi)
829 {
830         rk32_mipi_dsi_enable_video_mode(dsi, 0);
831         rk32_mipi_dsi_enable_hs_clk(dsi, 0);
832         rk32_mipi_dsi_is_enable(dsi, 0);
833         return 0;
834 }
835
836 static int rk32_mipi_dsi_host_init(struct dsi *dsi)
837 {
838         u32 val = 0, bytes_px = 0;
839         struct mipi_dsi_screen *screen = &dsi->screen;
840         u32 decimals = dsi->phy.Ttxbyte_clk, temp = 0, i = 0;
841         u32 m = 1, lane = dsi->host.lane, Tpclk = dsi->phy.Tpclk,
842                         Ttxbyte_clk = dsi->phy.Ttxbyte_clk;
843
844         rk32_dsi_set_bits(dsi, dsi->host.lane - 1, n_lanes);
845         rk32_dsi_set_bits(dsi, dsi->vid, dpi_vcid);
846
847         switch (screen->face) {
848         case OUT_P888:
849                 rk32_dsi_set_bits(dsi, 5, dpi_color_coding);
850                 bytes_px = 3;
851                 break;
852         case OUT_D888_P666:
853         case OUT_P666:
854                 rk32_dsi_set_bits(dsi, 3, dpi_color_coding);
855                 rk32_dsi_set_bits(dsi, 1, en18_loosely);
856                 bytes_px = 3;
857                 break;
858         case OUT_P565:
859                 rk32_dsi_set_bits(dsi, 0, dpi_color_coding);
860                 bytes_px = 2;
861         default:
862                 break;
863         }
864         if (dsi->ops.id == DSI_RK3288 ||
865             dsi->ops.id == DSI_RK3368 ||
866             dsi->ops.id == DSI_RK3366 ||
867             dsi->ops.id == DSI_RK3399) {
868                 rk32_dsi_set_bits(dsi, 1, hsync_active_low);
869                 rk32_dsi_set_bits(dsi, 1, vsync_active_low);
870
871                 rk32_dsi_set_bits(dsi, 0, dataen_active_low);
872                 rk32_dsi_set_bits(dsi, 0, colorm_active_low);
873                 rk32_dsi_set_bits(dsi, 0, shutd_active_low);
874         } else if (dsi->ops.id == DSI_RK312x) {
875                 rk32_dsi_set_bits(dsi, !screen->pin_hsync, hsync_active_low);
876                 rk32_dsi_set_bits(dsi, !screen->pin_vsync, vsync_active_low);
877
878                 rk32_dsi_set_bits(dsi, screen->pin_den, dataen_active_low);
879                 rk32_dsi_set_bits(dsi, 0, colorm_active_low);
880                 rk32_dsi_set_bits(dsi, 0, shutd_active_low);
881         }
882
883         rk32_dsi_set_bits(dsi, dsi->host.video_mode, vid_mode_type); /* burst mode */
884
885         switch (dsi->host.video_mode) {
886         case VM_BM:
887                 if (screen->type == SCREEN_DUAL_MIPI)
888                         rk32_dsi_set_bits(dsi, screen->x_res / 2 + 4, vid_pkt_size);
889                 else
890                         rk32_dsi_set_bits(dsi, screen->x_res, vid_pkt_size);
891                 break;
892         case VM_NBMWSE:
893         case VM_NBMWSP:
894                 for (i = 8; i < 32; i++) {
895                         temp = i * lane * Tpclk % Ttxbyte_clk;
896                         if (decimals > temp) {
897                                 decimals = temp;
898                                 m = i;
899                         }
900                         if (decimals == 0)
901                                 break;
902                 }
903
904                 rk32_dsi_set_bits(dsi, screen->x_res / m + 1, num_chunks);
905                 rk32_dsi_set_bits(dsi, m, vid_pkt_size);
906                 temp = m * lane * Tpclk / Ttxbyte_clk - m * bytes_px;
907                 MIPI_DBG("%s:%d, %d\n", __func__, m, temp);
908
909                 if (temp >= 12)
910                         rk32_dsi_set_bits(dsi, temp - 12, null_pkt_size);
911                 break;
912         default:
913                 break;
914         }
915
916         /* rk32_dsi_set_bits(dsi, 0, CMD_MODE_CFG << 16); */
917         if (screen->type == SCREEN_MIPI) {
918                 rk32_dsi_set_bits(dsi, dsi->phy.Tpclk * (screen->x_res + screen->left_margin +
919                                         screen->hsync_len + screen->right_margin) \
920                                                 / dsi->phy.Ttxbyte_clk, vid_hline_time);
921         } else { /* used for dual mipi screen */
922                 rk32_dsi_set_bits(dsi, dsi->phy.Tpclk * (screen->x_res + 8 + screen->left_margin +
923                                         screen->hsync_len + screen->right_margin) \
924                                                 / dsi->phy.Ttxbyte_clk, vid_hline_time);
925         }
926         MIPI_DBG("dsi->phy.Tpclk = %d\n", dsi->phy.Tpclk);
927         MIPI_DBG("screen->left_margin = %d\n", screen->left_margin);
928         MIPI_DBG("dsi->phy.Ttxbyte_clk = %d\n", dsi->phy.Ttxbyte_clk);
929         MIPI_DBG("screen->hsync_len = %d\n", screen->hsync_len);
930         rk32_dsi_set_bits(dsi, dsi->phy.Tpclk * (screen->left_margin) / dsi->phy.Ttxbyte_clk,
931                                         vid_hbp_time);
932         rk32_dsi_set_bits(dsi, dsi->phy.Tpclk * (screen->hsync_len) / dsi->phy.Ttxbyte_clk,
933                                         vid_hsa_time);
934
935         rk32_dsi_set_bits(dsi, screen->y_res , vid_active_lines);
936         rk32_dsi_set_bits(dsi, screen->lower_margin, vid_vfp_lines);
937         rk32_dsi_set_bits(dsi, screen->upper_margin, vid_vbp_lines);
938         rk32_dsi_set_bits(dsi, screen->vsync_len, vid_vsa_lines);
939
940         dsi->phy.txclkesc = 20 * MHz;
941         val = dsi->phy.txbyte_clk / dsi->phy.txclkesc + 1;
942         dsi->phy.txclkesc = dsi->phy.txbyte_clk / val;
943         rk32_dsi_set_bits(dsi, val, TX_ESC_CLK_DIVISION);
944
945         rk32_dsi_set_bits(dsi, 10, TO_CLK_DIVISION);
946         rk32_dsi_set_bits(dsi, 1000, hstx_to_cnt); /* no sure */
947         rk32_dsi_set_bits(dsi, 1000, lprx_to_cnt);
948         if (dsi->ops.id == DSI_RK3399)
949                 rk32_dsi_set_bits(dsi, 32, phy_stop_wait_time);
950         else
951                 rk32_dsi_set_bits(dsi, 100, phy_stop_wait_time);
952
953         /* enable send command in low power mode */
954         rk32_dsi_set_bits(dsi, 4, outvact_lpcmd_time);
955         rk32_dsi_set_bits(dsi, 4, invact_lpcmd_time);
956         rk32_dsi_set_bits(dsi, 1, lp_cmd_en);
957
958         rk32_dsi_set_bits(dsi, 20, phy_hs2lp_time);
959         rk32_dsi_set_bits(dsi, 16, phy_lp2hs_time);
960         /*
961         rk32_dsi_set_bits(dsi, 87, phy_hs2lp_time_clk_lane);
962         rk32_dsi_set_bits(dsi, 25, phy_hs2hs_time_clk_lane);
963         */
964         rk32_dsi_set_bits(dsi, 10000, max_rd_time);
965
966         rk32_dsi_set_bits(dsi, 1, lp_hfp_en);
967         /* rk32_dsi_set_bits(dsi, 1, lp_hbp_en); */
968         rk32_dsi_set_bits(dsi, 1, lp_vact_en);
969         rk32_dsi_set_bits(dsi, 1, lp_vfp_en);
970         rk32_dsi_set_bits(dsi, 1, lp_vbp_en);
971         rk32_dsi_set_bits(dsi, 1, lp_vsa_en);
972
973         /* rk32_dsi_set_bits(dsi, 1, frame_bta_ack_en); */
974         rk32_dsi_set_bits(dsi, 1, phy_enableclk);
975         rk32_dsi_set_bits(dsi, 0, phy_tx_triggers);
976
977         /* enable non-continued function */
978         /* rk32_dsi_set_bits(dsi, 1, auto_clklane_ctrl); */
979         /*
980         rk32_dsi_set_bits(dsi, 1, phy_txexitulpslan);
981         rk32_dsi_set_bits(dsi, 1, phy_txexitulpsclk);
982         */
983         return 0;
984 }
985
986 /*
987  *      mipi protocol layer definition
988  */
989 static int rk_mipi_dsi_init(void *arg, u32 n)
990 {
991         u32 decimals = 1000, i = 0, pre = 0;
992         struct dsi *dsi = arg;
993         struct mipi_dsi_screen *screen = &dsi->screen;
994
995         if (!screen)
996                 return -1;
997
998         if ((screen->type != SCREEN_MIPI) && (screen->type != SCREEN_DUAL_MIPI)) {
999                 MIPI_TRACE("only mipi dsi lcd is supported!\n");
1000                 return -1;
1001         }
1002
1003         if (((screen->type == SCREEN_DUAL_MIPI) && (rk_mipi_get_dsi_num() == 1)) || ((screen->type == SCREEN_MIPI) && (rk_mipi_get_dsi_num() == 2))) {
1004                 MIPI_TRACE("dsi number and mipi type not match!\n");
1005                 return -1;
1006         }
1007
1008         dsi->phy.Tpclk = rk_fb_get_prmry_screen_pixclock();
1009
1010         if (dsi->phy.refclk)
1011                 dsi->phy.ref_clk = clk_get_rate(dsi->phy.refclk) ;
1012         if (dsi->ops.id == DSI_RK312x ||
1013             dsi->ops.id == DSI_RK3368 ||
1014             dsi->ops.id == DSI_RK3366)
1015                 dsi->phy.ref_clk = dsi->phy.ref_clk / 2; /* 1/2 of input refclk */
1016
1017         dsi->phy.sys_clk = dsi->phy.ref_clk;
1018
1019         printk("dsi->phy.sys_clk =%d\n", dsi->phy.sys_clk);
1020         if (dsi->ops.id == DSI_RK3288 ||
1021             dsi->ops.id == DSI_RK3399) {
1022                 if ((screen->hs_tx_clk <= 90 * MHz) || (screen->hs_tx_clk >= 1500 * MHz))
1023                         dsi->phy.ddr_clk = 1500 * MHz; /* default is 1.5HGz */
1024                 else
1025                         dsi->phy.ddr_clk = screen->hs_tx_clk;
1026         } else if (dsi->ops.id == DSI_RK312x ||
1027                 dsi->ops.id == DSI_RK3368 ||
1028                 dsi->ops.id == DSI_RK3366) {
1029                 if ((screen->hs_tx_clk <= 80 * MHz) || (screen->hs_tx_clk >= 1000 * MHz))
1030                         dsi->phy.ddr_clk = 1000 * MHz; /* default is 1GHz */
1031                 else
1032                         dsi->phy.ddr_clk = screen->hs_tx_clk;
1033         }
1034
1035         if (n != 0)
1036                 dsi->phy.ddr_clk = n;
1037
1038         decimals = dsi->phy.ref_clk;
1039         for (i = 1; i < 6; i++) {
1040                 pre = dsi->phy.ref_clk / i;
1041                 if ((decimals > (dsi->phy.ddr_clk % pre)) && (dsi->phy.ddr_clk / pre < 512)) {
1042                         decimals = dsi->phy.ddr_clk % pre;
1043                         dsi->phy.prediv = i;
1044                         dsi->phy.fbdiv = dsi->phy.ddr_clk / pre;
1045                 }
1046                 if (decimals == 0)
1047                         break;
1048         }
1049
1050         MIPI_DBG("prediv:%d, fbdiv:%d,dsi->phy.ddr_clk:%d\n", dsi->phy.prediv, dsi->phy.fbdiv, dsi->phy.ref_clk / dsi->phy.prediv * dsi->phy.fbdiv);
1051
1052         dsi->phy.ddr_clk = dsi->phy.ref_clk / dsi->phy.prediv * dsi->phy.fbdiv;
1053
1054         MIPI_DBG("dsi->phy.ddr_clk =%d\n", dsi->phy.ddr_clk);
1055         dsi->phy.txbyte_clk = dsi->phy.ddr_clk / 8;
1056
1057         dsi->phy.txclkesc = 20 * MHz; /* < 20MHz */
1058         dsi->phy.txclkesc = dsi->phy.txbyte_clk / (dsi->phy.txbyte_clk / dsi->phy.txclkesc + 1);
1059
1060         dsi->phy.pclk = div_u64(1000000000000llu, dsi->phy.Tpclk);
1061         dsi->phy.Ttxclkesc = div_u64(1000000000000llu, dsi->phy.txclkesc);
1062         dsi->phy.Tsys_clk = div_u64(1000000000000llu, dsi->phy.sys_clk);
1063         dsi->phy.Tddr_clk = div_u64(1000000000000llu, dsi->phy.ddr_clk);
1064         dsi->phy.Ttxbyte_clk = div_u64(1000000000000llu, dsi->phy.txbyte_clk);
1065
1066         dsi->phy.UI = dsi->phy.Tddr_clk;
1067         dsi->vid = 0;
1068
1069         if (screen->dsi_lane > 0 && screen->dsi_lane <= 4)
1070                 dsi->host.lane = screen->dsi_lane;
1071         else
1072                 dsi->host.lane = 4;
1073
1074         dsi->host.video_mode = VM_BM;
1075
1076         MIPI_DBG("UI:%d\n", dsi->phy.UI);
1077         MIPI_DBG("ref_clk:%d\n", dsi->phy.ref_clk);
1078         MIPI_DBG("pclk:%d, Tpclk:%d\n", dsi->phy.pclk, dsi->phy.Tpclk);
1079         MIPI_DBG("sys_clk:%d, Tsys_clk:%d\n", dsi->phy.sys_clk, dsi->phy.Tsys_clk);
1080         MIPI_DBG("ddr_clk:%d, Tddr_clk:%d\n", dsi->phy.ddr_clk, dsi->phy.Tddr_clk);
1081         MIPI_DBG("txbyte_clk:%d, Ttxbyte_clk:%d\n", dsi->phy.txbyte_clk,
1082                                 dsi->phy.Ttxbyte_clk);
1083         MIPI_DBG("txclkesc:%d, Ttxclkesc:%d\n", dsi->phy.txclkesc, dsi->phy.Ttxclkesc);
1084
1085         mdelay(10);
1086         rk_phy_power_up(dsi);
1087         rk32_mipi_dsi_host_power_up(dsi);
1088         rk_phy_init(dsi);
1089         rk32_mipi_dsi_host_init(dsi);
1090
1091         return 0;
1092 }
1093
1094 static int rk32_mipi_dsi_is_enable(void *arg, u32 enable)
1095 {
1096         struct dsi *dsi = arg;
1097
1098         rk32_dsi_set_bits(dsi, enable, shutdownz);
1099         return 0;
1100 }
1101
1102 static int rk32_mipi_dsi_enable_video_mode(void *arg, u32 enable)
1103 {
1104         struct dsi *dsi = arg;
1105
1106         rk32_dsi_set_bits(dsi, !enable, cmd_video_mode);
1107         return 0;
1108 }
1109
1110 static int rk32_mipi_dsi_enable_command_mode(void *arg, u32 enable)
1111 {
1112         struct dsi *dsi = arg;
1113
1114         rk32_dsi_set_bits(dsi, enable, cmd_video_mode);
1115         return 0;
1116 }
1117
1118 static int rk32_mipi_dsi_enable_hs_clk(void *arg, u32 enable)
1119 {
1120         struct dsi *dsi = arg;
1121
1122         rk32_dsi_set_bits(dsi, enable, phy_txrequestclkhs);
1123         return 0;
1124 }
1125
1126 static int rk32_mipi_dsi_is_active(void *arg)
1127 {
1128         struct dsi *dsi = arg;
1129
1130         return rk32_dsi_get_bits(dsi, shutdownz);
1131 }
1132
1133 static int rk32_mipi_dsi_send_packet(void *arg, unsigned char cmds[], u32 length)
1134 {
1135         struct dsi *dsi = arg;
1136         unsigned char *regs;
1137         u32 type, liTmp = 0, i = 0, j = 0, data = 0;
1138
1139         if (rk32_dsi_get_bits(dsi, gen_cmd_full) == 1) {
1140                 MIPI_TRACE("gen_cmd_full\n");
1141                 return -1;
1142         }
1143         regs = kmalloc(0x400, GFP_KERNEL);
1144         if (!regs) {
1145                 printk("request regs fail!\n");
1146                 return -ENOMEM;
1147         }
1148         memcpy(regs, cmds, length);
1149
1150         liTmp = length - 2;
1151         type = regs[1];
1152
1153         switch (type) {
1154         case DTYPE_DCS_SWRITE_0P:
1155                 rk32_dsi_set_bits(dsi, regs[0], dcs_sw_0p_tx);
1156                 data = regs[2] << 8 | type;
1157                 break;
1158         case DTYPE_DCS_SWRITE_1P:
1159                 rk32_dsi_set_bits(dsi, regs[0], dcs_sw_1p_tx);
1160                 data = regs[2] << 8 | type;
1161                 data |= regs[3] << 16;
1162                 break;
1163         case DTYPE_DCS_LWRITE:
1164                 rk32_dsi_set_bits(dsi, regs[0], dcs_lw_tx);
1165                 for (i = 0; i < liTmp; i++) {
1166                         regs[i] = regs[i+2];
1167                 }
1168                 for (i = 0; i < liTmp; i++) {
1169                         j = i % 4;
1170                         data |= regs[i] << (j * 8);
1171                         if (j == 3 || ((i + 1) == liTmp)) {
1172                                 if (rk32_dsi_get_bits(dsi, gen_pld_w_full) == 1) {
1173                                         MIPI_TRACE("gen_pld_w_full :%d\n", i);
1174                                         break;
1175                                 }
1176                                 rk32_dsi_set_bits(dsi, data, GEN_PLD_DATA);
1177                                 MIPI_DBG("write GEN_PLD_DATA:%d, %08x\n", i, data);
1178                                 data = 0;
1179                         }
1180                 }
1181                 data = type;
1182                 data |= (liTmp & 0xffff) << 8;
1183                 break;
1184         case DTYPE_GEN_LWRITE:
1185                 rk32_dsi_set_bits(dsi, regs[0], gen_lw_tx);
1186                 for (i = 0; i < liTmp; i++) {
1187                         regs[i] = regs[i+2];
1188                 }
1189                 for (i = 0; i < liTmp; i++) {
1190                         j = i % 4;
1191                         data |= regs[i] << (j * 8);
1192                         if (j == 3 || ((i + 1) == liTmp)) {
1193                                 if (rk32_dsi_get_bits(dsi, gen_pld_w_full) == 1) {
1194                                         MIPI_TRACE("gen_pld_w_full :%d\n", i);
1195                                         break;
1196                                 }
1197                                 rk32_dsi_set_bits(dsi, data, GEN_PLD_DATA);
1198                                 MIPI_DBG("write GEN_PLD_DATA:%d, %08x\n", i, data);
1199                                 data = 0;
1200                         }
1201                 }
1202                 data = (dsi->vid << 6) | type;
1203                 data |= (liTmp & 0xffff) << 8;
1204                 break;
1205         case DTYPE_GEN_SWRITE_2P: /* one command and one parameter */
1206                 rk32_dsi_set_bits(dsi, regs[0], gen_sw_2p_tx);
1207                 if (liTmp <= 2) {
1208                         /* It is used for normal Generic Short WRITE Packet with 2 parameters. */
1209                         data = type;
1210                         data |= regs[2] << 8;   /* dcs command */
1211                         data |= regs[3] << 16;  /* parameter of command */
1212                         break;
1213                 }
1214
1215                 /* The below is used for Generic Short WRITE Packet with 2 parameters
1216                  * that more than 2 parameters. Though it is illegal dcs command, we can't
1217                  * make sure the users do not send that command.
1218                  */
1219                 for (i = 0; i < liTmp; i++) {
1220                         regs[i] = regs[i+2];
1221                 }
1222                 for (i = 0; i < liTmp; i++) {
1223                         j = i % 4;
1224                         data |= regs[i] << (j * 8);
1225                         if (j == 3 || ((i + 1) == liTmp)) {
1226                                 if (rk32_dsi_get_bits(dsi, gen_pld_w_full) == 1) {
1227                                         MIPI_TRACE("gen_pld_w_full :%d\n", i);
1228                                         break;
1229                                 }
1230                                 rk32_dsi_set_bits(dsi, data, GEN_PLD_DATA);
1231                                 MIPI_DBG("write GEN_PLD_DATA:%d, %08x\n", i, data);
1232                                 data = 0;
1233                         }
1234                 }
1235                 data = type;
1236                 data |= (liTmp & 0xffff) << 8;
1237                 break;
1238         case DTYPE_GEN_SWRITE_1P: /* one command without parameter */
1239                 rk32_dsi_set_bits(dsi, regs[0], gen_sw_1p_tx);
1240                 data = type;
1241                 data |= regs[2] << 8;
1242                 break;
1243         case DTYPE_GEN_SWRITE_0P: /* nop packet without command and parameter */
1244                 rk32_dsi_set_bits(dsi, regs[0], gen_sw_0p_tx);
1245                 data =  type;
1246                 break;
1247         default:
1248                 printk("0x%x:this type not suppport!\n", type);
1249         }
1250
1251         MIPI_DBG("%d command sent in %s size:%d\n", __LINE__, regs[0] ? "LP mode" : "HS mode", liTmp);
1252
1253         MIPI_DBG("write GEN_HDR:%08x\n", data);
1254         rk32_dsi_set_bits(dsi, data, GEN_HDR);
1255
1256         i = 10;
1257         while (!rk32_dsi_get_bits(dsi, gen_cmd_empty) && i--) {
1258                 MIPI_DBG(".");
1259                 udelay(10);
1260         }
1261         udelay(10);
1262         kfree(regs);
1263         return 0;
1264 }
1265
1266 static int rk32_mipi_dsi_read_dcs_packet(void *arg, unsigned char *data1, u32 n)
1267 {
1268         struct dsi *dsi = arg;
1269         unsigned char regs[2];
1270         u32 data = 0;
1271         int type = 0x06;
1272         regs[0] = LPDT;
1273         regs[1] = 0x0a;
1274         n = n - 1;
1275
1276         rk32_dsi_set_bits(dsi, regs[0], dcs_sr_0p_tx);
1277         /*
1278         if(type == DTYPE_GEN_SWRITE_0P)
1279                 data = (dsi->vid << 6) | (n << 4) | type;
1280         else
1281                 data = (dsi->vid << 6) | ((n-1) << 4) | type;
1282         */
1283
1284         data |= regs[1] << 8 | type;
1285
1286         printk("write GEN_HDR:%08x\n", data);
1287
1288         rk32_dsi_set_bits(dsi, 0xFFFF, bta_to_cnt);
1289         rk32_dsi_set_bits(dsi, 1, bta_en);
1290         rk32_dsi_set_bits(dsi, data, GEN_HDR);
1291         udelay(20);
1292
1293         printk("rk32_mipi_dsi_read_dcs_packet==0x%x\n", rk32_dsi_get_bits(dsi, GEN_PLD_DATA));
1294         rk32_dsi_set_bits(dsi, 0, bta_en);
1295
1296         return 0;
1297 }
1298
1299 static int rk32_mipi_dsi_power_up(void *arg)
1300 {
1301         struct dsi *dsi = arg;
1302
1303         rk32_phy_power_up(dsi);
1304         rk32_mipi_dsi_host_power_up(dsi);
1305         return 0;
1306 }
1307
1308 static int rk32_mipi_dsi_power_down(void *arg)
1309 {
1310         struct dsi *dsi = arg;
1311         struct mipi_dsi_screen *screen = &dsi->screen;
1312
1313         if (!screen)
1314                 return -1;
1315
1316         rk32_mipi_dsi_host_power_down(dsi);
1317         rk_phy_power_down(dsi);
1318
1319         MIPI_TRACE("%s:%d\n", __func__, __LINE__);
1320         return 0;
1321 }
1322
1323 static int rk32_mipi_dsi_get_id(void *arg)
1324 {
1325         u32 id = 0;
1326         struct dsi *dsi = arg;
1327
1328         id = rk32_dsi_get_bits(dsi, VERSION);
1329         return id;
1330 }
1331
1332 #ifdef MIPI_DSI_REGISTER_IO
1333 #include <linux/proc_fs.h>
1334 #include <asm/uaccess.h>
1335 #include <linux/slab.h>
1336
1337 ssize_t reg_proc_write(struct file *file, const char __user *buff, size_t count, loff_t *offp)
1338 {
1339         int ret = -1, i = 0;
1340         u32 read_val = 0;
1341         char *buf = kmalloc(count, GFP_KERNEL);
1342         char *data = buf;
1343         char str[32];
1344         char command = 0;
1345         u64 regs_val = 0;
1346         memset(buf, 0, count);
1347         ret = copy_from_user((void *)buf, buff, count);
1348         data = strstr(data, "-");
1349         if (data == NULL)
1350                 goto reg_proc_write_exit;
1351         command = *(++data);
1352         switch (command) {
1353         case 'w':
1354                 while (1) {
1355                         data = strstr(data, "0x");
1356                         if (data == NULL)
1357                                 goto reg_proc_write_exit;
1358                         sscanf(data, "0x%llx", &regs_val);
1359                         if ((regs_val & 0xffff00000000ULL) == 0)
1360                                 goto reg_proc_write_exit;
1361                         read_val = regs_val & 0xffffffff;
1362                         printk("regs_val=0x%llx\n", regs_val);
1363                         rk32_dsi_write_reg(dsi0, regs_val >> 32, &read_val);
1364                         rk32_dsi_read_reg(dsi0, regs_val >> 32, &read_val);
1365                         regs_val &= 0xffffffff;
1366                         if (read_val != regs_val)
1367                                 MIPI_TRACE("%s fail:0x%08x\n", __func__, read_val);
1368                         data += 3;
1369                         msleep(1);
1370                 }
1371                 break;
1372         case 'r':
1373                 data = strstr(data, "0x");
1374                 if (data == NULL) {
1375                         goto reg_proc_write_exit;
1376                 }
1377                 sscanf(data, "0x%llx", &regs_val);
1378                 rk32_dsi_read_reg(dsi0, (u16)regs_val, &read_val);
1379                 MIPI_TRACE("*%04x : %08x\n", (u16)regs_val, read_val);
1380                 msleep(1);
1381                 break;
1382         case 's':
1383                 while (*(++data) == ' ')
1384                         ;
1385                 sscanf(data, "%d", &read_val);
1386                 if (read_val == 11)
1387                         read_val = 11289600;
1388                 else
1389                         read_val *= MHz;
1390                 break;
1391         case 'd':
1392         case 'g':
1393         case 'c':
1394                 while (*(++data) == ' ')
1395                         ;
1396                 i = 0;
1397                 MIPI_TRACE("****%d:%d\n", data-buf, count);
1398                 do {
1399                         if (i > 31) {
1400                                 MIPI_TRACE("payload entry is larger than 32\n");
1401                                 break;
1402                         }
1403                         sscanf(data, "%x,", (unsigned int *)(str + i)); /* -c 1,29,02,03,05,06,> pro */
1404                         data = strstr(data, ",");
1405                         if (data == NULL)
1406                                 break;
1407                         data++;
1408                         i++;
1409                 } while (1);
1410                 read_val = i;
1411                 i = 2;
1412                 while (i--) {
1413                         msleep(10);
1414                         if (command == 'd')
1415                                 rk32_mipi_dsi_send_packet(dsi0, str, read_val);
1416                         else
1417                                 rk32_mipi_dsi_send_packet(dsi0, str, read_val);
1418                 }
1419                 i = 1;
1420                 while (i--) {
1421                         msleep(1000);
1422                 }
1423                 break;
1424         default:
1425                 break;
1426         }
1427
1428 reg_proc_write_exit:
1429         kfree(buf);
1430         msleep(20);
1431         return count;
1432 }
1433
1434 int reg_proc_read(struct seq_file *s, void *v)
1435 {
1436         int i = 0;
1437         u32 val = 0;
1438         struct dsi *dsi = s->private;
1439
1440         for (i = VERSION; i < (VERSION + (0xdc << 16)); i += 4<<16) {
1441                 val = rk32_dsi_get_bits(dsi, i);
1442                 seq_printf(s, "%04x: %08x\n", i>>16, val);
1443         }
1444         return 0;
1445 }
1446 static int reg_proc_open(struct inode *inode, struct file *file)
1447 {
1448         struct dsi *dsi = inode->i_private;
1449
1450         return single_open(file, reg_proc_read, dsi);
1451 }
1452
1453 int reg_proc_close(struct inode *inode, struct file *file)
1454 {
1455         return 0;
1456 }
1457
1458 struct file_operations reg_proc_fops = {
1459         .owner = THIS_MODULE,
1460         .open = reg_proc_open,
1461         .release = reg_proc_close,
1462         .write = reg_proc_write,
1463         .read = seq_read,
1464 };
1465
1466 ssize_t reg_proc_write1(struct file *file, const char __user *buff, size_t count, loff_t *offp)
1467 {
1468         int ret = -1, i = 0;
1469         u32 read_val = 0;
1470         char *buf = kmalloc(count, GFP_KERNEL);
1471         char *data = buf;
1472         char str[32];
1473         char command = 0;
1474         u64 regs_val = 0;
1475         memset(buf, 0, count);
1476         ret = copy_from_user((void *)buf, buff, count);
1477
1478         data = strstr(data, "-");
1479         if (data == NULL)
1480                 goto reg_proc_write_exit;
1481         command = *(++data);
1482
1483         switch (command) {
1484         case 'w':
1485                 while (1) {
1486                         data = strstr(data, "0x");
1487                         if (data == NULL)
1488                                 goto reg_proc_write_exit;
1489                         sscanf(data, "0x%llx", &regs_val);
1490                         if ((regs_val & 0xffff00000000ULL) == 0)
1491                                 goto reg_proc_write_exit;
1492                         read_val = regs_val & 0xffffffff;
1493                         rk32_dsi_write_reg(dsi1, regs_val >> 32, &read_val);
1494                         rk32_dsi_read_reg(dsi1, regs_val >> 32, &read_val);
1495                         regs_val &= 0xffffffff;
1496                         if (read_val != regs_val)
1497                                 MIPI_TRACE("%s fail:0x%08x\n", __func__, read_val);
1498                         data += 3;
1499                         msleep(1);
1500                 }
1501                 break;
1502         case 'r':
1503                 data = strstr(data, "0x");
1504                 if (data == NULL)
1505                         goto reg_proc_write_exit;
1506                 sscanf(data, "0x%llx", &regs_val);
1507                 rk32_dsi_read_reg(dsi1, (u16)regs_val, &read_val);
1508                 MIPI_TRACE("*%04x : %08x\n", (u16)regs_val, read_val);
1509                 msleep(1);
1510                 break;
1511         case 's':
1512                 while (*(++data) == ' ')
1513                         ;
1514                 sscanf(data, "%d", &read_val);
1515                 if (read_val == 11)
1516                         read_val = 11289600;
1517                 else
1518                         read_val *= MHz;
1519                 break;
1520         case 'd':
1521         case 'g':
1522         case 'c':
1523                 while (*(++data) == ' ')
1524                         ;
1525                 i = 0;
1526                 MIPI_TRACE("****%d:%d\n", data-buf, count);
1527                 do {
1528                         if (i > 31) {
1529                                 MIPI_TRACE("payload entry is larger than 32\n");
1530                                 break;
1531                         }
1532                         sscanf(data, "%x,", (unsigned int *)(str + i)); /* -c 1,29,02,03,05,06,> pro */
1533                         data = strstr(data, ",");
1534                         if (data == NULL)
1535                                 break;
1536                         data++;
1537                         i++;
1538                 } while (1);
1539                 read_val = i;
1540                 i = 2;
1541                 while (i--) {
1542                         msleep(10);
1543                         if (command == 'd')
1544                                 rk32_mipi_dsi_send_packet(dsi1, str, read_val);
1545                         else
1546                                 rk32_mipi_dsi_send_packet(dsi1, str, read_val);
1547                 }
1548                 i = 1;
1549                 while (i--) {
1550                         msleep(1000);
1551                 }
1552                 break;
1553         default:
1554                 break;
1555         }
1556
1557 reg_proc_write_exit:
1558         kfree(buf);
1559         msleep(20);
1560         return count;
1561 }
1562
1563 int reg_proc_close1(struct inode *inode, struct file *file)
1564 {
1565         return 0;
1566 }
1567
1568 struct file_operations reg_proc_fops1 = {
1569         .owner = THIS_MODULE,
1570         .open = reg_proc_open,
1571         .release = reg_proc_close1,
1572         .write = reg_proc_write1,
1573         .read = seq_read,
1574 };
1575 #endif
1576 #if 0/* def CONFIG_MIPI_DSI_LINUX */
1577 static irqreturn_t rk32_mipi_dsi_irq_handler(int irq, void *data)
1578 {
1579         printk("-------rk32_mipi_dsi_irq_handler-------\n");
1580         return IRQ_HANDLED;
1581 }
1582 #endif
1583
1584 #if 0
1585 static int dwc_phy_test_rd(struct dsi *dsi, unsigned char test_code)
1586 {
1587         int val = 0;
1588
1589         rk32_dsi_set_bits(dsi, 0x10000 | test_code, PHY_TEST_CTRL1);
1590         rk32_dsi_set_bits(dsi, 0x2, PHY_TEST_CTRL0);
1591         rk32_dsi_set_bits(dsi, 0x0, PHY_TEST_CTRL0);
1592
1593         val = rk32_dsi_get_bits(dsi, PHY_TEST_CTRL1);
1594         return val;
1595 }
1596 #endif
1597 static int rk32_dsi_enable(void)
1598 {
1599         MIPI_DBG("rk32_dsi_enable-------\n");
1600         if (!dsi0->clk_on) {
1601                 dsi0->clk_on = 1;
1602                 rk_fb_get_prmry_screen(dsi0->screen.screen);
1603                 dsi0->screen.lcdc_id = dsi0->screen.screen->lcdc_id;
1604                 rk32_init_phy_mode(dsi0->screen.lcdc_id);
1605
1606                 dsi_init(0, 0);
1607                 if (rk_mipi_get_dsi_num() == 2)
1608                         dsi_init(1, 0);
1609
1610                 rk_mipi_screen_standby(0);
1611
1612         /* After the core reset, DPI waits for the first VSYNC
1613         active transition to start signal sampling, including pixel data,
1614         and preventing image transmission in the middle of a frame.
1615         */
1616                 dsi_is_enable(0, 0);
1617                 if (rk_mipi_get_dsi_num() == 2)
1618                         dsi_is_enable(1, 0);
1619
1620                 dsi_enable_video_mode(0, 1);
1621                 if (rk_mipi_get_dsi_num() == 2)
1622                         dsi_enable_video_mode(1, 1);
1623
1624                 dsi_is_enable(0, 1);
1625                 if (rk_mipi_get_dsi_num() == 2)
1626                         dsi_is_enable(1, 1);
1627         }
1628         return 0;
1629 }
1630
1631 #ifdef CONFIG_MIPI_DSI_LINUX
1632 static int rk32_dsi_disable(void)
1633 {
1634         MIPI_DBG("rk32_dsi_disable-------\n");
1635         if (dsi0->clk_on) {
1636                 dsi0->clk_on = 0;
1637                 rk_mipi_screen_standby(1);
1638                 dsi_power_off(0);
1639                 if (rk_mipi_get_dsi_num() == 2)
1640                         dsi_power_off(1);
1641         }
1642         return 0;
1643 }
1644
1645 static struct rk_fb_trsm_ops trsm_dsi_ops = {
1646         .enable = rk32_dsi_enable,
1647         .disable = rk32_dsi_disable,
1648         .dsp_pwr_on = rk32_mipi_power_up_DDR,
1649         .dsp_pwr_off = rk32_mipi_power_down_DDR,
1650 };
1651 #endif
1652 static void rk32_init_phy_mode(int lcdc_id)
1653 {
1654         int val0 = 0, val1 = 0;
1655
1656         MIPI_DBG("rk32_init_phy_mode----------lcdc_id=%d\n", lcdc_id);
1657
1658         /* Only the rk3288 VOP need setting the VOP output. */
1659         if (dsi0->ops.id == DSI_RK3288) {
1660                 /* D-PHY mode select */
1661                 if (rk_mipi_get_dsi_num() == 1) {
1662                         if (lcdc_id == 1)
1663                                 /* 1'b1: VOP LIT output to DSI host0;1'b0: VOP BIG output to DSI host0 */
1664                                 val0 = 0x1 << 22 | 0x1 << 6;
1665                         else
1666                                 val0 = 0x1 << 22 | 0x0 << 6;
1667                         writel_relaxed(val0, RK_GRF_VIRT + RK3288_GRF_SOC_CON6);
1668                 } else {
1669                         if (lcdc_id == 1) {
1670                                 val0 = 0x1 << 25 | 0x1 <<  9 | 0x1 << 22 | 0x1 <<  6;
1671                                 val1 = 0x1 << 31 | 0x1 << 30 | 0x0 << 15 | 0x1 << 14;
1672                         } else {
1673                                 val0 = 0x1 << 25 | 0x0 <<  9 | 0x1 << 22 | 0x0 << 14;
1674                                 val1 = 0x1 << 31 | 0x1 << 30 | 0x0 << 15 | 0x1 << 14;
1675                         }
1676                         writel_relaxed(val0, RK_GRF_VIRT + RK3288_GRF_SOC_CON6);
1677                         writel_relaxed(val1, RK_GRF_VIRT + RK3288_GRF_SOC_CON14);
1678                 }
1679         } else if (dsi0->ops.id == DSI_RK3399) {
1680                 val0 = 0x1 << 16 | 0x0;
1681                 regmap_write(dsi0->grf_base, RK3399_GRF_CON20, val0);
1682
1683                 val0 = 0x1 << 28 | 0x0 << 12;
1684                 val0 |= 0xf << 20 | 0x0 << 4;
1685                 val0 |= 0xf << 16 | 0x0;
1686                 regmap_write(dsi0->grf_base, RK3399_GRF_CON22, val0);
1687         }
1688 }
1689
1690 #ifdef CONFIG_MIPI_DSI_LINUX
1691 static int rk32_mipi_power_down_DDR(void)
1692 {
1693         dsi_is_enable(0, 0);
1694         if (rk_mipi_get_dsi_num() == 2)
1695                 dsi_is_enable(1, 0);
1696         return 0;
1697 }
1698
1699 static int rk32_mipi_power_up_DDR(void)
1700 {
1701         dsi_is_enable(0, 0);
1702         if (rk_mipi_get_dsi_num() == 2)
1703                 dsi_is_enable(1, 0);
1704         dsi_enable_video_mode(0, 1);
1705         dsi_enable_video_mode(1, 1);
1706         dsi_is_enable(0, 1);
1707         if (rk_mipi_get_dsi_num() == 2)
1708                 dsi_is_enable(1, 1);
1709         return 0;
1710 }
1711
1712 struct dsi_type {
1713         char *label;
1714         u32 dsi_id;
1715 };
1716
1717 static struct dsi_type dsi_rk312x = {
1718         .label = "rk312-dsi",
1719         .dsi_id = DSI_RK312x,
1720 };
1721
1722 static struct dsi_type dsi_rk32 = {
1723         .label = "rk32-dsi",
1724         .dsi_id = DSI_RK3288,
1725 };
1726
1727 static struct dsi_type dsi_rk3368 = {
1728         .label = "rk3368-dsi",
1729         .dsi_id = DSI_RK3368,
1730 };
1731
1732 static struct dsi_type dsi_rk3366 = {
1733         .label = "rk3366-dsi",
1734         .dsi_id = DSI_RK3366,
1735 };
1736
1737 static struct dsi_type dsi_rk3399 = {
1738         .label = "rk3399-dsi",
1739         .dsi_id = DSI_RK3399,
1740 };
1741
1742 static const struct of_device_id of_rk_mipi_dsi_match[] = {
1743         { .compatible = "rockchip,rk32-dsi", .data = &dsi_rk32},
1744         { .compatible = "rockchip,rk312x-dsi", .data = &dsi_rk312x},
1745         { .compatible = "rockchip,rk3368-dsi", .data = &dsi_rk3368},
1746         { .compatible = "rockchip,rk3366-dsi", .data = &dsi_rk3366},
1747         { .compatible = "rockchip,rk3399-dsi", .data = &dsi_rk3399},
1748         { /* Sentinel */ }
1749 };
1750
1751 static int rk32_mipi_dsi_probe(struct platform_device *pdev)
1752 {
1753         int ret = 0;
1754         static int id;
1755         struct dsi *dsi;
1756         struct mipi_dsi_ops *ops;
1757         struct rk_screen *screen;
1758         struct mipi_dsi_screen *dsi_screen;
1759         struct resource *res_host, *res_phy;
1760         struct device_node *np = pdev->dev.of_node;
1761         const struct dsi_type *data;
1762         const struct of_device_id *of_id =
1763                         of_match_device(of_rk_mipi_dsi_match, &pdev->dev);
1764         if (!of_id) {
1765                 dev_err(&pdev->dev, "failed to match device\n");
1766                 return -ENODEV;
1767         }
1768         data = of_id->data;
1769
1770         dsi = devm_kzalloc(&pdev->dev, sizeof(struct dsi), GFP_KERNEL);
1771         if (!dsi) {
1772                 dev_err(&pdev->dev, "request struct dsi fail!\n");
1773                 return -ENOMEM;
1774         }
1775         dsi->ops.id = data->dsi_id;
1776         printk(KERN_INFO "%s\n", data->label);
1777         if (dsi->ops.id == DSI_RK3288 ||
1778             dsi->ops.id == DSI_RK3399) {
1779                 res_host = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1780                 dsi->host.membase = devm_ioremap_resource(&pdev->dev, res_host);
1781                 if (IS_ERR(dsi->host.membase)) {
1782                         dev_err(&pdev->dev, "get resource mipi host membase fail!\n");
1783                         return PTR_ERR(dsi->host.membase);
1784                 }
1785         } else if (dsi->ops.id == DSI_RK312x ||
1786                         dsi->ops.id == DSI_RK3368 ||
1787                         dsi->ops.id == DSI_RK3366) {
1788                 res_host = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mipi_dsi_host");
1789                 dsi->host.membase = devm_ioremap_resource(&pdev->dev, res_host);
1790                 if (IS_ERR(dsi->host.membase)) {
1791                         dev_err(&pdev->dev, "get resource mipi host membase fail!\n");
1792                         return PTR_ERR(dsi->host.membase);
1793                 }
1794                 res_phy = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mipi_dsi_phy");
1795                 dsi->phy.membase = devm_ioremap_resource(&pdev->dev, res_phy);
1796                 if (IS_ERR(dsi->phy.membase)) {
1797                         dev_err(&pdev->dev, "get resource mipi phy membase fail!\n");
1798                         return PTR_ERR(dsi->phy.membase);
1799                 }
1800         }
1801
1802         dsi->phy.refclk  = devm_clk_get(&pdev->dev, "clk_mipi_24m");
1803         if (unlikely(IS_ERR(dsi->phy.refclk))) {
1804                 dev_err(&pdev->dev, "get clk_mipi_24m clock fail\n");
1805                 return PTR_ERR(dsi->phy.refclk);
1806         }
1807
1808         /* Get the APB bus clk access mipi phy */
1809         dsi->dsi_pclk = devm_clk_get(&pdev->dev, "pclk_mipi_dsi");
1810         if (unlikely(IS_ERR(dsi->dsi_pclk))) {
1811                 dev_err(&pdev->dev, "get pclk_mipi_dsi clock fail\n");
1812                 return PTR_ERR(dsi->dsi_pclk);
1813         }
1814
1815         if (dsi->ops.id == DSI_RK3368 ||
1816             dsi->ops.id == DSI_RK3366) {
1817                 /* Get the APB bus clk access mipi host */
1818                 dsi->dsi_host_pclk = devm_clk_get(&pdev->dev, "pclk_mipi_dsi_host");
1819                 if (unlikely(IS_ERR(dsi->dsi_host_pclk))) {
1820                         dev_err(&pdev->dev, "get pclk_mipi_dsi_host clock fail\n");
1821                         return PTR_ERR(dsi->dsi_host_pclk);
1822                 }
1823         }
1824
1825         if (dsi->ops.id == DSI_RK312x) {
1826                 /* Get the APB bus clk access mipi host */
1827                 dsi->dsi_host_pclk = devm_clk_get(&pdev->dev, "pclk_mipi_dsi_host");
1828                 if (unlikely(IS_ERR(dsi->dsi_host_pclk))) {
1829                         dev_err(&pdev->dev, "get pclk_mipi_dsi_host clock fail\n");
1830                         return PTR_ERR(dsi->dsi_host_pclk);
1831                 }
1832                 /* Get the pd_vio AHB h2p bridge clock */
1833                 dsi->h2p_hclk = devm_clk_get(&pdev->dev, "hclk_vio_h2p");
1834                 if (unlikely(IS_ERR(dsi->h2p_hclk))) {
1835                         dev_err(&pdev->dev, "get hclk_vio_h2p clock fail\n");
1836                         return PTR_ERR(dsi->h2p_hclk);
1837                 }
1838         }
1839
1840         if (dsi->ops.id == DSI_RK3399) {
1841                 /* Get mipi phy cfg clk */
1842                 dsi->dsi_host_pclk = devm_clk_get(&pdev->dev, "mipi_dphy_cfg");
1843                 if (unlikely(IS_ERR(dsi->dsi_host_pclk))) {
1844                         dev_err(&pdev->dev, "get mipi_dphy_cfg clock fail\n");
1845                         return PTR_ERR(dsi->dsi_host_pclk);
1846                 }
1847
1848                 dsi->grf_base = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
1849                 if (IS_ERR(dsi->grf_base)) {
1850                         dev_err(&pdev->dev, "can't find mipi grf property\n");
1851                         dsi->grf_base = NULL;
1852                 }
1853         }
1854
1855         dsi->host.irq = platform_get_irq(pdev, 0);
1856         if (dsi->host.irq < 0) {
1857                 dev_err(&pdev->dev, "no irq resource?\n");
1858                 return dsi->host.irq;
1859         }
1860         /*
1861         ret = request_irq(dsi->host.irq, rk32_mipi_dsi_irq_handler, 0,dev_name(&pdev->dev), dsi);
1862         if (ret) {
1863                 dev_err(&pdev->dev, "request mipi_dsi irq fail\n");
1864                 return -EINVAL;
1865         }
1866         */
1867         printk("dsi->host.irq =%d\n", dsi->host.irq);
1868
1869         disable_irq(dsi->host.irq);
1870
1871         screen = devm_kzalloc(&pdev->dev, sizeof(struct rk_screen), GFP_KERNEL);
1872         if (!screen) {
1873                 dev_err(&pdev->dev, "request struct rk_screen fail!\n");
1874                 return -1;
1875         }
1876         rk_fb_get_prmry_screen(screen);
1877
1878         dsi->pdev = pdev;
1879         ops = &dsi->ops;
1880         ops->dsi = dsi;
1881
1882         ops->get_id = rk32_mipi_dsi_get_id,
1883         ops->dsi_send_packet = rk32_mipi_dsi_send_packet;
1884         ops->dsi_read_dcs_packet = rk32_mipi_dsi_read_dcs_packet,
1885         ops->dsi_enable_video_mode = rk32_mipi_dsi_enable_video_mode,
1886         ops->dsi_enable_command_mode = rk32_mipi_dsi_enable_command_mode,
1887         ops->dsi_enable_hs_clk = rk32_mipi_dsi_enable_hs_clk,
1888         ops->dsi_is_active = rk32_mipi_dsi_is_active,
1889         ops->dsi_is_enable = rk32_mipi_dsi_is_enable,
1890         ops->power_up = rk32_mipi_dsi_power_up,
1891         ops->power_down = rk32_mipi_dsi_power_down,
1892         ops->dsi_init = rk_mipi_dsi_init,
1893
1894         dsi_screen = &dsi->screen;
1895         dsi_screen->screen = screen;
1896         dsi_screen->type = screen->type;
1897         dsi_screen->face = screen->face;
1898         dsi_screen->lcdc_id = screen->lcdc_id;
1899         dsi_screen->screen_id = screen->screen_id;
1900         dsi_screen->pixclock = screen->mode.pixclock;
1901         dsi_screen->left_margin = screen->mode.left_margin;
1902         dsi_screen->right_margin = screen->mode.right_margin;
1903         dsi_screen->hsync_len = screen->mode.hsync_len;
1904         dsi_screen->upper_margin = screen->mode.upper_margin;
1905         dsi_screen->lower_margin = screen->mode.lower_margin;
1906         dsi_screen->vsync_len = screen->mode.vsync_len;
1907         dsi_screen->x_res = screen->mode.xres;
1908         dsi_screen->y_res = screen->mode.yres;
1909         dsi_screen->pin_hsync = screen->pin_hsync;
1910         dsi_screen->pin_vsync = screen->pin_vsync;
1911         dsi_screen->pin_den = screen->pin_den;
1912         dsi_screen->pin_dclk = screen->pin_dclk;
1913         dsi_screen->dsi_lane = rk_mipi_get_dsi_lane();
1914         /* dsi_screen->dsi_video_mode = screen->dsi_video_mode; */
1915         dsi_screen->dsi_lane = rk_mipi_get_dsi_lane();
1916         dsi_screen->hs_tx_clk = rk_mipi_get_dsi_clk();
1917         /* dsi_screen->lcdc_id = 1; */
1918
1919         dsi->dsi_id = id++;
1920
1921         sprintf(ops->name, "rk_mipi_dsi.%d", dsi->dsi_id);
1922         platform_set_drvdata(pdev, dsi);
1923
1924         register_dsi_ops(dsi->dsi_id, &dsi->ops);
1925
1926         if (id == 1) {
1927                 /*
1928                 if(!support_uboot_display())
1929                         rk32_init_phy_mode(dsi_screen->lcdc_id);
1930                 */
1931                 rk_fb_trsm_ops_register(&trsm_dsi_ops, SCREEN_MIPI);
1932 #ifdef MIPI_DSI_REGISTER_IO
1933                 debugfs_create_file("mipidsi0", S_IFREG | S_IRUGO, dsi->debugfs_dir, dsi,
1934                                                         &reg_proc_fops);
1935 #endif
1936                 dsi0 = dsi;
1937         } else {
1938                 dsi1 = dsi;
1939 #ifdef MIPI_DSI_REGISTER_IO
1940                 debugfs_create_file("mipidsi1", S_IFREG | S_IRUGO, dsi->debugfs_dir, dsi,
1941                                                         &reg_proc_fops1);
1942 #endif
1943         }
1944
1945         if (support_uboot_display()) {
1946                 clk_prepare_enable(dsi->phy.refclk);
1947                 clk_prepare_enable(dsi->dsi_pclk);
1948                 if (dsi->ops.id == DSI_RK312x) {
1949                         clk_prepare_enable(dsi->dsi_host_pclk);
1950                         clk_prepare_enable(dsi->h2p_hclk);
1951                 } else if (dsi->ops.id == DSI_RK3368 ||
1952                         dsi->ops.id == DSI_RK3366)
1953                         clk_prepare_enable(dsi->dsi_host_pclk);
1954                 else if (dsi->ops.id == DSI_RK3399)
1955                         clk_prepare_enable(dsi->dsi_host_pclk);
1956
1957                 dsi->clk_on = 1;
1958                 udelay(10);
1959         }
1960
1961         dev_info(&pdev->dev, "rk mipi_dsi probe success!\n");
1962         dev_info(&pdev->dev, "%s\n", RK_MIPI_DSI_VERSION_AND_TIME);
1963
1964         return ret;
1965 }
1966
1967 static struct platform_driver rk32_mipi_dsi_driver = {
1968         .probe = rk32_mipi_dsi_probe,
1969         .driver = {
1970                 .name = "rk32-mipi",
1971                 .owner = THIS_MODULE,
1972 #ifdef CONFIG_OF
1973                 .of_match_table = of_rk_mipi_dsi_match,
1974 #endif
1975         },
1976 };
1977
1978 static int __init rk32_mipi_dsi_init(void)
1979 {
1980         return platform_driver_register(&rk32_mipi_dsi_driver);
1981 }
1982 fs_initcall(rk32_mipi_dsi_init);
1983
1984 static void __exit rk32_mipi_dsi_exit(void)
1985 {
1986         platform_driver_unregister(&rk32_mipi_dsi_driver);
1987 }
1988 module_exit(rk32_mipi_dsi_exit);
1989 #endif