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.
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.
18 #ifndef CONFIG_RK32_MIPI_DSI
22 #ifdef CONFIG_RK32_MIPI_DSI
23 #define MIPI_DSI_REGISTER_IO 0
24 #define CONFIG_MIPI_DSI_LINUX 0
26 #define DWC_DSI_VERSION 0x3133302A
27 #define DWC_DSI_VERSION_RK312x 0x3132312A
28 #define DWC_DSI_VERSION_ERR -1
30 #include <linux/kernel.h>
31 #include <linux/init.h>
32 #include <linux/platform_device.h>
33 #include <linux/slab.h>
34 #include <linux/rk_fb.h>
35 #include <linux/rk_screen.h>
36 #include <linux/delay.h>
37 #include <linux/clk.h>
38 #include <linux/interrupt.h>
39 #include <asm/div64.h>
42 #include <linux/debugfs.h>
43 #include <linux/seq_file.h>
44 #include <linux/regulator/machine.h>
46 #include <linux/dma-mapping.h>
48 #include "rk32_mipi_dsi.h"
49 #include <linux/rockchip/iomap.h>
50 #include <linux/rockchip/cpu.h>
52 #define MIPI_DBG(x...) /* printk(KERN_INFO x) */
54 #ifdef CONFIG_MIPI_DSI_LINUX
55 #define MIPI_TRACE(x...) /* printk(KERN_INFO x) */
57 #define MIPI_TRACE(...) \
68 *v1.0 : this driver is rk32 mipi dsi driver of rockchip;
69 *v1.1 : add test eye pattern;
73 #define RK_MIPI_DSI_VERSION_AND_TIME "rockchip mipi_dsi v1.1 2014-06-17"
75 static struct dsi *dsi0;
76 static struct dsi *dsi1;
78 static int rk32_mipi_dsi_is_active(void *arg);
79 static int rk32_mipi_dsi_enable_hs_clk(void *arg, u32 enable);
80 static int rk32_mipi_dsi_enable_video_mode(void *arg, u32 enable);
81 static int rk32_mipi_dsi_enable_command_mode(void *arg, u32 enable);
82 static int rk32_mipi_dsi_is_enable(void *arg, u32 enable);
83 static int rk32_mipi_power_down_DDR(void);
84 static int rk32_mipi_power_up_DDR(void);
85 int rk_mipi_screen_standby(u8 enable);
87 static int rk32_dsi_read_reg(struct dsi *dsi, u16 reg, u32 *pval)
89 if (dsi->ops.id == DWC_DSI_VERSION)
90 *pval = __raw_readl(dsi->host.membase + (reg - MIPI_DSI_HOST_OFFSET));
91 else if (dsi->ops.id == DWC_DSI_VERSION_RK312x) {
92 if (reg >= MIPI_DSI_HOST_OFFSET)
93 *pval = __raw_readl(dsi->host.membase + (reg - MIPI_DSI_HOST_OFFSET));
94 else if (reg >= MIPI_DSI_PHY_OFFSET)
95 *pval = __raw_readl(dsi->phy.membase + (reg - MIPI_DSI_PHY_OFFSET));
100 static int rk32_dsi_write_reg(struct dsi *dsi, u16 reg, u32 *pval)
102 if (dsi->ops.id == DWC_DSI_VERSION)
103 __raw_writel(*pval, dsi->host.membase + (reg - MIPI_DSI_HOST_OFFSET));
104 else if (dsi->ops.id == DWC_DSI_VERSION_RK312x) {
105 if (reg >= MIPI_DSI_HOST_OFFSET)
106 __raw_writel(*pval, dsi->host.membase + (reg - MIPI_DSI_HOST_OFFSET));
107 else if (reg >= MIPI_DSI_PHY_OFFSET)
108 __raw_writel(*pval, dsi->phy.membase + (reg - MIPI_DSI_PHY_OFFSET));
113 static int rk32_dsi_get_bits(struct dsi *dsi, u32 reg)
116 u32 bits = (reg >> 8) & 0xff;
117 u16 reg_addr = (reg >> 16) & 0xffff;
118 u8 offset = reg & 0xff;
121 bits = (1 << bits) - 1;
125 rk32_dsi_read_reg(dsi, reg_addr, &val);
131 static int rk32_dsi_set_bits(struct dsi *dsi, u32 data, u32 reg)
134 u32 bits = (reg >> 8) & 0xff;
135 u16 reg_addr = (reg >> 16) & 0xffff;
136 u8 offset = reg & 0xff;
139 bits = (1 << bits) - 1;
143 if (bits != 0xffffffff)
144 rk32_dsi_read_reg(dsi, reg_addr, &val);
146 val &= ~(bits << offset);
147 val |= (data & bits) << offset;
148 rk32_dsi_write_reg(dsi, reg_addr, &val);
151 MIPI_TRACE("%s error reg_addr:0x%04x, offset:%d, bits:0x%04x, value:0x%04x\n",
152 __func__, reg_addr, offset, bits, data);
157 static int rk32_dwc_phy_test_rd(struct dsi *dsi, unsigned char test_code)
160 rk32_dsi_set_bits(dsi, 1, phy_testclk);
161 rk32_dsi_set_bits(dsi, test_code, phy_testdin);
162 rk32_dsi_set_bits(dsi, 1, phy_testen);
163 rk32_dsi_set_bits(dsi, 0, phy_testclk);
164 rk32_dsi_set_bits(dsi, 0, phy_testen);;
166 rk32_dsi_set_bits(dsi, 0, phy_testen);
167 val = rk32_dsi_get_bits(dsi, phy_testdout);
168 rk32_dsi_set_bits(dsi, 1, phy_testclk);
169 rk32_dsi_set_bits(dsi, 0, phy_testclk);
174 static int rk32_dwc_phy_test_wr(struct dsi *dsi, unsigned char test_code, unsigned char *test_data, unsigned char size)
178 MIPI_DBG("test_code=0x%x,test_data=0x%x\n", test_code, test_data[0]);
179 rk32_dsi_set_bits(dsi, 0x10000 | test_code, PHY_TEST_CTRL1);
180 rk32_dsi_set_bits(dsi, 0x2, PHY_TEST_CTRL0);
181 rk32_dsi_set_bits(dsi, 0x0, PHY_TEST_CTRL0);
183 for (i = 0; i < size; i++) {
184 rk32_dsi_set_bits(dsi, test_data[i], PHY_TEST_CTRL1);
185 rk32_dsi_set_bits(dsi, 0x2, PHY_TEST_CTRL0);
186 rk32_dsi_set_bits(dsi, 0x0, PHY_TEST_CTRL0);
187 MIPI_DBG("rk32_dwc_phy_test_wr:%08x\n", rk32_dsi_get_bits(dsi, PHY_TEST_CTRL1));
192 static int rk32_phy_power_up(struct dsi *dsi)
194 /* enable ref clock */
195 clk_prepare_enable(dsi->phy.refclk);
196 clk_prepare_enable(dsi->dsi_pclk);
197 clk_prepare_enable(dsi->dsi_pd);
200 switch (dsi->host.lane) {
202 rk32_dsi_set_bits(dsi, 3, n_lanes);
205 rk32_dsi_set_bits(dsi, 2, n_lanes);
208 rk32_dsi_set_bits(dsi, 1, n_lanes);
211 rk32_dsi_set_bits(dsi, 0, n_lanes);
216 rk32_dsi_set_bits(dsi, 1, phy_shutdownz);
217 rk32_dsi_set_bits(dsi, 1, phy_rstz);
218 rk32_dsi_set_bits(dsi, 1, phy_enableclk);
219 rk32_dsi_set_bits(dsi, 1, phy_forcepll);
224 static int rk312x_mipi_dsi_phy_set_gotp(struct dsi *dsi, u32 offset, int n)
226 u32 val = 0, temp = 0, Tlpx = 0;
227 u32 ddr_clk = dsi->phy.ddr_clk;
228 u32 Ttxbyte_clk = dsi->phy.Ttxbyte_clk;
229 u32 Tsys_clk = dsi->phy.Tsys_clk;
230 u32 Ttxclkesc = dsi->phy.Ttxclkesc;
231 printk("%s : ddr_clk %d\n", __func__, ddr_clk);
233 case DPHY_CLOCK_OFFSET:
234 MIPI_DBG("******set DPHY_CLOCK_OFFSET gotp******\n");
236 case DPHY_LANE0_OFFSET:
237 MIPI_DBG("******set DPHY_LANE0_OFFSET gotp******\n");
239 case DPHY_LANE1_OFFSET:
240 MIPI_DBG("******set DPHY_LANE1_OFFSET gotp******\n");
242 case DPHY_LANE2_OFFSET:
243 MIPI_DBG("******set DPHY_LANE2_OFFSET gotp******\n");
245 case DPHY_LANE3_OFFSET:
246 MIPI_DBG("******set DPHY_LANE3_OFFSET gotp******\n");
252 if (ddr_clk < 110 * MHz)
254 else if (ddr_clk < 150 * MHz)
256 else if (ddr_clk < 200 * MHz)
258 else if (ddr_clk < 250 * MHz)
260 else if (ddr_clk < 300 * MHz)
262 else if (ddr_clk < 400 * MHz)
264 else if (ddr_clk < 500 * MHz)
266 else if (ddr_clk < 600 * MHz)
268 else if (ddr_clk < 700 * MHz)
270 else if (ddr_clk < 800 * MHz)
272 else if (ddr_clk <= 1000 * MHz)
274 printk("%s reg_ths_settle = 0x%x\n", __func__, val);
275 rk32_dsi_set_bits(dsi, val, reg_ths_settle + offset);
277 if (ddr_clk < 110 * MHz)
279 else if (ddr_clk < 150 * MHz)
281 else if (ddr_clk < 200 * MHz)
283 else if (ddr_clk < 250 * MHz)
285 else if (ddr_clk < 300 * MHz)
287 else if (ddr_clk < 400 * MHz)
289 else if (ddr_clk < 500 * MHz)
291 else if (ddr_clk < 600 * MHz)
293 else if (ddr_clk < 700 * MHz)
295 else if (ddr_clk < 800 * MHz)
297 else if (ddr_clk <= 1000 * MHz)
299 printk("%s reg_hs_ths_prepare = 0x%x\n", __func__, val);
300 rk32_dsi_set_bits(dsi, val, reg_hs_ths_prepare + offset);
302 if (offset != DPHY_CLOCK_OFFSET) {
303 if (ddr_clk < 110 * MHz)
305 else if (ddr_clk < 150 * MHz)
307 else if (ddr_clk < 200 * MHz)
309 else if (ddr_clk < 250 * MHz)
311 else if (ddr_clk < 300 * MHz)
313 else if (ddr_clk < 400 * MHz)
315 else if (ddr_clk < 500 * MHz)
317 else if (ddr_clk < 600 * MHz)
319 else if (ddr_clk < 700 * MHz)
321 else if (ddr_clk < 800 * MHz)
323 else if (ddr_clk <= 1000 * MHz)
326 if (ddr_clk < 110 * MHz)
328 else if (ddr_clk < 150 * MHz)
330 else if (ddr_clk < 200 * MHz)
332 else if (ddr_clk < 250 * MHz)
334 else if (ddr_clk < 300 * MHz)
336 else if (ddr_clk < 400 * MHz)
338 else if (ddr_clk < 500 * MHz)
340 else if (ddr_clk < 600 * MHz)
342 else if (ddr_clk < 700 * MHz)
344 else if (ddr_clk < 800 * MHz)
346 else if (ddr_clk <= 1000 * MHz)
349 printk("%s reg_hs_the_zero = 0x%x\n", __func__, val);
350 rk32_dsi_set_bits(dsi, val, reg_hs_the_zero + offset);
352 if (ddr_clk < 110 * MHz)
354 else if (ddr_clk < 150 * MHz)
356 else if (ddr_clk < 200 * MHz)
358 else if (ddr_clk < 250 * MHz)
360 else if (ddr_clk < 300 * MHz)
362 else if (ddr_clk < 400 * MHz)
364 else if (ddr_clk < 500 * MHz)
366 else if (ddr_clk < 600 * MHz)
368 else if (ddr_clk < 700 * MHz)
370 else if (ddr_clk < 800 * MHz)
372 else if (ddr_clk <= 1000 * MHz)
373 val = 0x21; /* 0x27 */
375 printk("%s reg_hs_ths_trail = 0x%x\n", __func__, val);
377 rk32_dsi_set_bits(dsi, val, reg_hs_ths_trail + offset);
378 val = 120000 / Ttxbyte_clk + 1;
379 MIPI_DBG("reg_hs_ths_exit: %d, %d\n", val, val*Ttxbyte_clk/1000);
380 rk32_dsi_set_bits(dsi, val, reg_hs_ths_exit + offset);
382 if (offset == DPHY_CLOCK_OFFSET) {
383 val = (60000 + 52*dsi->phy.UI) / Ttxbyte_clk + 1;
384 MIPI_DBG("reg_hs_tclk_post: %d, %d\n", val, val*Ttxbyte_clk/1000);
385 rk32_dsi_set_bits(dsi, val, reg_hs_tclk_post + offset);
386 val = 10*dsi->phy.UI / Ttxbyte_clk + 1;
387 MIPI_DBG("reg_hs_tclk_pre: %d, %d\n", val, val*Ttxbyte_clk/1000);
388 rk32_dsi_set_bits(dsi, val, reg_hs_tclk_pre + offset);
391 val = 1010000000 / Tsys_clk + 1;
392 MIPI_DBG("reg_hs_twakup: %d, %d\n", val, val*Tsys_clk/1000);
395 MIPI_DBG("val is too large, 0x3ff is the largest\n");
397 temp = (val >> 8) & 0x03;
399 rk32_dsi_set_bits(dsi, temp, reg_hs_twakup_h + offset);
400 rk32_dsi_set_bits(dsi, val, reg_hs_twakup_l + offset);
402 if (Ttxclkesc > 50000) {
404 MIPI_DBG("Ttxclkesc:%d\n", Ttxclkesc);
406 val = val / Ttxbyte_clk;
407 Tlpx = val*Ttxbyte_clk;
408 MIPI_DBG("reg_hs_tlpx: %d, %d\n", val, Tlpx);
410 rk32_dsi_set_bits(dsi, val, reg_hs_tlpx + offset);
413 val = 4*Tlpx / Ttxclkesc;
414 MIPI_DBG("reg_hs_tta_go: %d, %d\n", val, val*Ttxclkesc);
415 rk32_dsi_set_bits(dsi, val, reg_hs_tta_go + offset);
416 val = 3 * Tlpx / 2 / Ttxclkesc;
417 MIPI_DBG("reg_hs_tta_sure: %d, %d\n", val, val*Ttxclkesc);
418 rk32_dsi_set_bits(dsi, val, reg_hs_tta_sure + offset);
419 val = 5 * Tlpx / Ttxclkesc;
420 MIPI_DBG("reg_hs_tta_wait: %d, %d\n", val, val*Ttxclkesc);
421 rk32_dsi_set_bits(dsi, val, reg_hs_tta_wait + offset);
425 static void rk312x_mipi_dsi_set_hs_clk(struct dsi *dsi)
427 rk32_dsi_set_bits(dsi, dsi->phy.prediv, reg_prediv);
428 rk32_dsi_set_bits(dsi, dsi->phy.fbdiv & 0xff, reg_fbdiv);
429 rk32_dsi_set_bits(dsi, (dsi->phy.fbdiv >> 8) & 0x01, reg_fbdiv_8);
432 static int rk312x_phy_power_up(struct dsi *dsi)
434 /* enable ref clock */
435 rk312x_mipi_dsi_set_hs_clk(dsi);
436 clk_prepare_enable(dsi->phy.refclk);
437 clk_prepare_enable(dsi->dsi_pclk);
438 clk_prepare_enable(dsi->dsi_host_pclk);
439 clk_prepare_enable(dsi->h2p_hclk);
440 clk_prepare_enable(dsi->dsi_pd);
443 rk32_dsi_set_bits(dsi, 0xe4, DPHY_REGISTER1);
444 switch (dsi->host.lane) {
446 rk32_dsi_set_bits(dsi, 1, lane_en_3);
448 rk32_dsi_set_bits(dsi, 1, lane_en_2);
450 rk32_dsi_set_bits(dsi, 1, lane_en_1);
452 rk32_dsi_set_bits(dsi, 1, lane_en_0);
453 rk32_dsi_set_bits(dsi, 1, lane_en_ck);
459 rk32_dsi_set_bits(dsi, 0xe0, DPHY_REGISTER1);
462 rk32_dsi_set_bits(dsi, 0x1e, DPHY_REGISTER20);
463 rk32_dsi_set_bits(dsi, 0x1f, DPHY_REGISTER20);
465 rk32_dsi_set_bits(dsi, 1, phy_enableclk);
470 static int rk_phy_power_up(struct dsi *dsi)
472 if (dsi->ops.id == DWC_DSI_VERSION)
473 rk32_phy_power_up(dsi);
474 else if (dsi->ops.id == DWC_DSI_VERSION_RK312x)
475 rk312x_phy_power_up(dsi);
479 static int rk32_phy_power_down(struct dsi *dsi)
481 rk32_dsi_set_bits(dsi, 0, phy_shutdownz);
482 clk_disable_unprepare(dsi->phy.refclk);
483 clk_disable_unprepare(dsi->dsi_pclk);
484 clk_disable_unprepare(dsi->dsi_pd);
488 static int rk312x_phy_power_down(struct dsi *dsi)
490 rk32_dsi_set_bits(dsi, 0x01, DPHY_REGISTER0);
491 rk32_dsi_set_bits(dsi, 0xe3, DPHY_REGISTER1);
493 clk_disable_unprepare(dsi->phy.refclk);
494 clk_disable_unprepare(dsi->dsi_pclk);
495 clk_disable_unprepare(dsi->dsi_host_pclk);
496 clk_disable_unprepare(dsi->h2p_hclk);
497 clk_disable_unprepare(dsi->dsi_pd);
501 static int rk_phy_power_down(struct dsi *dsi)
503 if (dsi->ops.id == DWC_DSI_VERSION)
504 rk32_phy_power_down(dsi);
505 else if (dsi->ops.id == DWC_DSI_VERSION_RK312x)
506 rk312x_phy_power_down(dsi);
510 static int rk32_phy_init(struct dsi *dsi)
512 u32 val = 0 , ddr_clk = 0, fbdiv = 0, prediv = 0;
513 unsigned char test_data[2] = {0};
515 ddr_clk = dsi->phy.ddr_clk;
516 prediv = dsi->phy.prediv;
517 fbdiv = dsi->phy.fbdiv;
519 if (ddr_clk < 200 * MHz)
521 else if (ddr_clk < 300 * MHz)
523 else if (ddr_clk < 500 * MHz)
525 else if (ddr_clk < 700 * MHz)
527 else if (ddr_clk < 900 * MHz)
529 else if (ddr_clk < 1100 * MHz)
531 else if (ddr_clk < 1300 * MHz)
533 else if (ddr_clk <= 1500 * MHz)
536 test_data[0] = 0x80 | val << 3 | 0x3;
537 rk32_dwc_phy_test_wr(dsi, 0x10, test_data, 1);
540 rk32_dwc_phy_test_wr(dsi, 0x11, test_data, 1);
542 test_data[0] = 0x80 | 0x40;
543 rk32_dwc_phy_test_wr(dsi, 0x12, test_data, 1);
545 if (ddr_clk < 90 * MHz)
547 else if (ddr_clk < 100 * MHz)
549 else if (ddr_clk < 110 * MHz)
551 else if (ddr_clk < 130 * MHz)
553 else if (ddr_clk < 140 * MHz)
555 else if (ddr_clk < 150 * MHz)
557 else if (ddr_clk < 170 * MHz)
559 else if (ddr_clk < 180 * MHz)
561 else if (ddr_clk < 200 * MHz)
563 else if (ddr_clk < 220 * MHz)
565 else if (ddr_clk < 240 * MHz)
567 else if (ddr_clk < 250 * MHz)
569 else if (ddr_clk < 270 * MHz)
571 else if (ddr_clk < 300 * MHz)
573 else if (ddr_clk < 330 * MHz)
575 else if (ddr_clk < 360 * MHz)
577 else if (ddr_clk < 400 * MHz)
579 else if (ddr_clk < 450 * MHz)
581 else if (ddr_clk < 500 * MHz)
583 else if (ddr_clk < 550 * MHz)
585 else if (ddr_clk < 600 * MHz)
587 else if (ddr_clk < 650 * MHz)
589 else if (ddr_clk < 700 * MHz)
591 else if (ddr_clk < 750 * MHz)
593 else if (ddr_clk < 800 * MHz)
595 else if (ddr_clk < 850 * MHz)
597 else if (ddr_clk < 900 * MHz)
599 else if (ddr_clk < 950 * MHz)
601 else if (ddr_clk < 1000 * MHz)
603 else if (ddr_clk < 1050 * MHz)
605 else if (ddr_clk < 1100 * MHz)
607 else if (ddr_clk < 1150 * MHz)
609 else if (ddr_clk < 1200 * MHz)
611 else if (ddr_clk < 1250 * MHz)
613 else if (ddr_clk < 1300 * MHz)
615 else if (ddr_clk < 1350 * MHz)
617 else if (ddr_clk < 1400 * MHz)
619 else if (ddr_clk < 1450 * MHz)
621 else if (ddr_clk <= 1500 * MHz)
624 test_data[0] = val << 1;
625 rk32_dwc_phy_test_wr(dsi, code_hs_rx_lane0, test_data, 1);
627 test_data[0] = prediv - 1;
628 rk32_dwc_phy_test_wr(dsi, code_pll_input_div_rat, test_data, 1);
630 test_data[0] = (fbdiv - 1) & 0x1f;
631 rk32_dwc_phy_test_wr(dsi, code_pll_loop_div_rat, test_data, 1);
633 test_data[0] = (fbdiv - 1) >> 5 | 0x80;
634 rk32_dwc_phy_test_wr(dsi, code_pll_loop_div_rat, test_data, 1);
637 rk32_dwc_phy_test_wr(dsi, code_pll_input_loop_div_rat, test_data, 1);
641 rk32_dwc_phy_test_wr(dsi, 0x20, test_data, 1);
644 rk32_dwc_phy_test_wr(dsi, 0x21, test_data, 1);
647 rk32_dwc_phy_test_wr(dsi, 0x21, test_data, 1);
650 rk32_dwc_phy_test_wr(dsi, 0x22, test_data, 1);
652 test_data[0] = 0x80 | 0x7;
653 rk32_dwc_phy_test_wr(dsi, 0x22, test_data, 1);
655 test_data[0] = 0x80 | 15;
656 rk32_dwc_phy_test_wr(dsi, code_hstxdatalanerequsetstatetime, test_data, 1);
658 test_data[0] = 0x80 | 85;
659 rk32_dwc_phy_test_wr(dsi, code_hstxdatalanepreparestatetime, test_data, 1);
661 test_data[0] = 0x40 | 10;
662 rk32_dwc_phy_test_wr(dsi, code_hstxdatalanehszerostatetime, test_data, 1);
667 static int rk312x_phy_init(struct dsi *dsi, int n)
670 rk32_dsi_set_bits(dsi, 0x11, DSI_DPHY_BITS(0x06<<2, 32, 0));
671 rk32_dsi_set_bits(dsi, 0x11, DSI_DPHY_BITS(0x07<<2, 32, 0));
672 rk32_dsi_set_bits(dsi, 0xcc, DSI_DPHY_BITS(0x09<<2, 32, 0));
674 dsi_set_bits(0x4e, DSI_DPHY_BITS(0x08<<2, 32, 0));
675 dsi_set_bits(0x84, DSI_DPHY_BITS(0x0a<<2, 32, 0));
678 /*reg1[4] 0: enable a function of "pll phase for serial data being captured
681 we disable it here because reg5[6:4] is not compatible with the HS speed.
684 if (dsi->phy.ddr_clk >= 800*MHz) {
685 rk32_dsi_set_bits(dsi, 0x30, DSI_DPHY_BITS(0x05<<2, 32, 0));
687 rk32_dsi_set_bits(dsi, 1, reg_da_ppfc);
690 switch (dsi->host.lane) {
692 rk312x_mipi_dsi_phy_set_gotp(dsi, DPHY_LANE3_OFFSET, n);
694 rk312x_mipi_dsi_phy_set_gotp(dsi, DPHY_LANE2_OFFSET, n);
696 rk312x_mipi_dsi_phy_set_gotp(dsi, DPHY_LANE1_OFFSET, n);
698 rk312x_mipi_dsi_phy_set_gotp(dsi, DPHY_LANE0_OFFSET, n);
699 rk312x_mipi_dsi_phy_set_gotp(dsi, DPHY_CLOCK_OFFSET, n);
705 rk32_dsi_set_bits(dsi, 0x00e4, reg1_phy);
706 rk32_dsi_set_bits(dsi, 0x007d, reg0_phy);
708 rk32_dsi_set_bits(dsi, 0x00e0, reg1_phy);
709 rk32_dsi_set_bits(dsi, 0x001e, reg20_phy);
711 rk32_dsi_set_bits(dsi, 0x001f, reg20_phy);
713 rk32_dsi_set_bits(dsi, 0x0063, reg10_phy);
716 rk32_dsi_set_bits(dsi, 0x06, reg5_phy);
717 rk32_dsi_set_bits(dsi, 0x6, reg10_4_6_phy);
718 rk32_dsi_set_bits(dsi, 0x9, regb_phy);
723 static int rk_phy_init(struct dsi *dsi)
725 if (dsi->ops.id == DWC_DSI_VERSION)
727 else if (dsi->ops.id == DWC_DSI_VERSION_RK312x)
728 rk312x_phy_init(dsi, 4);
732 static int rk32_mipi_dsi_host_power_up(struct dsi *dsi)
737 /* disable all interrupt */
738 rk32_dsi_set_bits(dsi, 0x1fffff, INT_MKS0);
739 rk32_dsi_set_bits(dsi, 0x3ffff, INT_MKS1);
741 rk32_mipi_dsi_is_enable(dsi, 1);
744 while (!rk32_dsi_get_bits(dsi, phylock) && val--) {
750 MIPI_TRACE("%s:phylock fail.\n", __func__);
754 while (!rk32_dsi_get_bits(dsi, phystopstateclklane) && val--) {
761 static int rk32_mipi_dsi_host_power_down(struct dsi *dsi)
763 rk32_mipi_dsi_enable_video_mode(dsi, 0);
764 rk32_mipi_dsi_enable_hs_clk(dsi, 0);
765 rk32_mipi_dsi_is_enable(dsi, 0);
769 static int rk32_mipi_dsi_host_init(struct dsi *dsi)
771 u32 val = 0, bytes_px = 0;
772 struct mipi_dsi_screen *screen = &dsi->screen;
773 u32 decimals = dsi->phy.Ttxbyte_clk, temp = 0, i = 0;
774 u32 m = 1, lane = dsi->host.lane, Tpclk = dsi->phy.Tpclk,
775 Ttxbyte_clk = dsi->phy.Ttxbyte_clk;
777 rk32_dsi_set_bits(dsi, dsi->host.lane - 1, n_lanes);
778 rk32_dsi_set_bits(dsi, dsi->vid, dpi_vcid);
780 switch (screen->face) {
782 rk32_dsi_set_bits(dsi, 5, dpi_color_coding);
787 rk32_dsi_set_bits(dsi, 3, dpi_color_coding);
788 rk32_dsi_set_bits(dsi, 1, en18_loosely);
792 rk32_dsi_set_bits(dsi, 0, dpi_color_coding);
797 if (dsi->ops.id == DWC_DSI_VERSION) {
798 rk32_dsi_set_bits(dsi, 1, hsync_active_low);
799 rk32_dsi_set_bits(dsi, 1, vsync_active_low);
801 rk32_dsi_set_bits(dsi, 0, dataen_active_low);
802 rk32_dsi_set_bits(dsi, 0, colorm_active_low);
803 rk32_dsi_set_bits(dsi, 0, shutd_active_low);
804 } else if (dsi->ops.id == DWC_DSI_VERSION_RK312x) {
805 rk32_dsi_set_bits(dsi, !screen->pin_hsync, hsync_active_low);
806 rk32_dsi_set_bits(dsi, !screen->pin_vsync, vsync_active_low);
808 rk32_dsi_set_bits(dsi, screen->pin_den, dataen_active_low);
809 rk32_dsi_set_bits(dsi, 1, colorm_active_low);
810 rk32_dsi_set_bits(dsi, 1, shutd_active_low);
813 rk32_dsi_set_bits(dsi, dsi->host.video_mode, vid_mode_type); /* burst mode */
815 switch (dsi->host.video_mode) {
817 if (screen->type == SCREEN_DUAL_MIPI)
818 rk32_dsi_set_bits(dsi, screen->x_res / 2 + 4, vid_pkt_size);
820 rk32_dsi_set_bits(dsi, screen->x_res, vid_pkt_size);
824 for (i = 8; i < 32; i++) {
825 temp = i * lane * Tpclk % Ttxbyte_clk;
826 if (decimals > temp) {
834 rk32_dsi_set_bits(dsi, screen->x_res / m + 1, num_chunks);
835 rk32_dsi_set_bits(dsi, m, vid_pkt_size);
836 temp = m * lane * Tpclk / Ttxbyte_clk - m * bytes_px;
837 MIPI_DBG("%s:%d, %d\n", __func__, m, temp);
840 rk32_dsi_set_bits(dsi, temp - 12, null_pkt_size);
846 /* rk32_dsi_set_bits(dsi, 0, CMD_MODE_CFG << 16); */
847 if (screen->type == SCREEN_MIPI) {
848 rk32_dsi_set_bits(dsi, dsi->phy.Tpclk * (screen->x_res + screen->left_margin +
849 screen->hsync_len + screen->right_margin) \
850 / dsi->phy.Ttxbyte_clk, vid_hline_time);
852 rk32_dsi_set_bits(dsi, dsi->phy.Tpclk * (screen->x_res + 8 + screen->left_margin +
853 screen->hsync_len + screen->right_margin) \
854 / dsi->phy.Ttxbyte_clk, vid_hline_time);
856 MIPI_DBG("dsi->phy.Tpclk = %d\n", dsi->phy.Tpclk);
857 MIPI_DBG("screen->left_margin = %d\n", screen->left_margin);
858 MIPI_DBG("dsi->phy.Ttxbyte_clk = %d\n", dsi->phy.Ttxbyte_clk);
859 MIPI_DBG("screen->hsync_len = %d\n", screen->hsync_len);
860 rk32_dsi_set_bits(dsi, dsi->phy.Tpclk * (screen->left_margin) / dsi->phy.Ttxbyte_clk,
862 rk32_dsi_set_bits(dsi, dsi->phy.Tpclk * (screen->hsync_len) / dsi->phy.Ttxbyte_clk,
865 rk32_dsi_set_bits(dsi, screen->y_res , vid_active_lines);
866 rk32_dsi_set_bits(dsi, screen->lower_margin, vid_vfp_lines);
867 rk32_dsi_set_bits(dsi, screen->upper_margin, vid_vbp_lines);
868 rk32_dsi_set_bits(dsi, screen->vsync_len, vid_vsa_lines);
870 dsi->phy.txclkesc = 20 * MHz;
871 val = dsi->phy.txbyte_clk / dsi->phy.txclkesc + 1;
872 dsi->phy.txclkesc = dsi->phy.txbyte_clk / val;
873 rk32_dsi_set_bits(dsi, val, TX_ESC_CLK_DIVISION);
875 rk32_dsi_set_bits(dsi, 10, TO_CLK_DIVISION);
876 rk32_dsi_set_bits(dsi, 1000, hstx_to_cnt); /* no sure */
877 rk32_dsi_set_bits(dsi, 1000, lprx_to_cnt);
878 rk32_dsi_set_bits(dsi, 100, phy_stop_wait_time);
881 rk32_dsi_set_bits(dsi, 0, outvact_lpcmd_time);
882 rk32_dsi_set_bits(dsi, 0, invact_lpcmd_time);
884 rk32_dsi_set_bits(dsi, 20, phy_hs2lp_time);
885 rk32_dsi_set_bits(dsi, 16, phy_lp2hs_time);
887 rk32_dsi_set_bits(dsi, 87, phy_hs2lp_time_clk_lane);
888 rk32_dsi_set_bits(dsi, 25, phy_hs2hs_time_clk_lane);
890 rk32_dsi_set_bits(dsi, 10000, max_rd_time);
892 rk32_dsi_set_bits(dsi, 1, lp_hfp_en);
893 /* rk32_dsi_set_bits(dsi, 1, lp_hbp_en); */
894 rk32_dsi_set_bits(dsi, 1, lp_vact_en);
895 rk32_dsi_set_bits(dsi, 1, lp_vfp_en);
896 rk32_dsi_set_bits(dsi, 1, lp_vbp_en);
897 rk32_dsi_set_bits(dsi, 1, lp_vsa_en);
899 /* rk32_dsi_set_bits(dsi, 1, frame_bta_ack_en); */
900 rk32_dsi_set_bits(dsi, 1, phy_enableclk);
901 rk32_dsi_set_bits(dsi, 0, phy_tx_triggers);
903 rk32_dsi_set_bits(dsi, 1, phy_txexitulpslan);
904 rk32_dsi_set_bits(dsi, 1, phy_txexitulpsclk);
910 * mipi protocol layer definition
912 static int rk_mipi_dsi_init(void *arg, u32 n)
914 u32 decimals = 1000, i = 0, pre = 0;
915 struct dsi *dsi = arg;
916 struct mipi_dsi_screen *screen = &dsi->screen;
921 if ((screen->type != SCREEN_MIPI) && (screen->type != SCREEN_DUAL_MIPI)) {
922 MIPI_TRACE("only mipi dsi lcd is supported!\n");
926 if (((screen->type == SCREEN_DUAL_MIPI) && (rk_mipi_get_dsi_num() == 1)) || ((screen->type == SCREEN_MIPI) && (rk_mipi_get_dsi_num() == 2))) {
927 MIPI_TRACE("dsi number and mipi type not match!\n");
931 dsi->phy.Tpclk = rk_fb_get_prmry_screen_pixclock();
934 dsi->phy.ref_clk = clk_get_rate(dsi->phy.refclk) ;
935 if (dsi->ops.id == DWC_DSI_VERSION_RK312x)
936 dsi->phy.ref_clk = dsi->phy.ref_clk / 2; /* 1/2 of input refclk */
938 dsi->phy.sys_clk = dsi->phy.ref_clk;
940 printk("dsi->phy.sys_clk =%d\n", dsi->phy.sys_clk);
941 if (dsi->ops.id == DWC_DSI_VERSION) {
942 if ((screen->hs_tx_clk <= 90 * MHz) || (screen->hs_tx_clk >= 1500 * MHz))
943 dsi->phy.ddr_clk = 1500 * MHz; /* default is 1.5HGz */
945 dsi->phy.ddr_clk = screen->hs_tx_clk;
946 } else if (dsi->ops.id == DWC_DSI_VERSION_RK312x) {
947 if ((screen->hs_tx_clk <= 80 * MHz) || (screen->hs_tx_clk >= 1000 * MHz))
948 dsi->phy.ddr_clk = 1000 * MHz; /* default is 1GHz */
950 dsi->phy.ddr_clk = screen->hs_tx_clk;
954 dsi->phy.ddr_clk = n;
956 decimals = dsi->phy.ref_clk;
957 for (i = 1; i < 6; i++) {
958 pre = dsi->phy.ref_clk / i;
959 if ((decimals > (dsi->phy.ddr_clk % pre)) && (dsi->phy.ddr_clk / pre < 512)) {
960 decimals = dsi->phy.ddr_clk % pre;
962 dsi->phy.fbdiv = dsi->phy.ddr_clk / pre;
968 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);
970 dsi->phy.ddr_clk = dsi->phy.ref_clk / dsi->phy.prediv * dsi->phy.fbdiv;
972 MIPI_DBG("dsi->phy.ddr_clk =%d\n", dsi->phy.ddr_clk);
973 dsi->phy.txbyte_clk = dsi->phy.ddr_clk / 8;
975 dsi->phy.txclkesc = 20 * MHz; /* < 20MHz */
976 dsi->phy.txclkesc = dsi->phy.txbyte_clk / (dsi->phy.txbyte_clk / dsi->phy.txclkesc + 1);
978 dsi->phy.pclk = div_u64(1000000000000llu, dsi->phy.Tpclk);
979 dsi->phy.Ttxclkesc = div_u64(1000000000000llu, dsi->phy.txclkesc);
980 dsi->phy.Tsys_clk = div_u64(1000000000000llu, dsi->phy.sys_clk);
981 dsi->phy.Tddr_clk = div_u64(1000000000000llu, dsi->phy.ddr_clk);
982 dsi->phy.Ttxbyte_clk = div_u64(1000000000000llu, dsi->phy.txbyte_clk);
984 dsi->phy.UI = dsi->phy.Tddr_clk;
987 if (screen->dsi_lane > 0 && screen->dsi_lane <= 4)
988 dsi->host.lane = screen->dsi_lane;
992 dsi->host.video_mode = VM_BM;
994 MIPI_DBG("UI:%d\n", dsi->phy.UI);
995 MIPI_DBG("ref_clk:%d\n", dsi->phy.ref_clk);
996 MIPI_DBG("pclk:%d, Tpclk:%d\n", dsi->phy.pclk, dsi->phy.Tpclk);
997 MIPI_DBG("sys_clk:%d, Tsys_clk:%d\n", dsi->phy.sys_clk, dsi->phy.Tsys_clk);
998 MIPI_DBG("ddr_clk:%d, Tddr_clk:%d\n", dsi->phy.ddr_clk, dsi->phy.Tddr_clk);
999 MIPI_DBG("txbyte_clk:%d, Ttxbyte_clk:%d\n", dsi->phy.txbyte_clk,
1000 dsi->phy.Ttxbyte_clk);
1001 MIPI_DBG("txclkesc:%d, Ttxclkesc:%d\n", dsi->phy.txclkesc, dsi->phy.Ttxclkesc);
1004 rk_phy_power_up(dsi);
1005 rk32_mipi_dsi_host_power_up(dsi);
1007 rk32_mipi_dsi_host_init(dsi);
1012 static int rk32_mipi_dsi_is_enable(void *arg, u32 enable)
1014 struct dsi *dsi = arg;
1016 rk32_dsi_set_bits(dsi, enable, shutdownz);
1020 static int rk32_mipi_dsi_enable_video_mode(void *arg, u32 enable)
1022 struct dsi *dsi = arg;
1024 rk32_dsi_set_bits(dsi, !enable, cmd_video_mode);
1028 static int rk32_mipi_dsi_enable_command_mode(void *arg, u32 enable)
1030 struct dsi *dsi = arg;
1032 rk32_dsi_set_bits(dsi, enable, cmd_video_mode);
1036 static int rk32_mipi_dsi_enable_hs_clk(void *arg, u32 enable)
1038 struct dsi *dsi = arg;
1040 rk32_dsi_set_bits(dsi, enable, phy_txrequestclkhs);
1044 static int rk32_mipi_dsi_is_active(void *arg)
1046 struct dsi *dsi = arg;
1048 return rk32_dsi_get_bits(dsi, shutdownz);
1051 static int rk32_mipi_dsi_send_packet(void *arg, unsigned char cmds[], u32 length)
1053 struct dsi *dsi = arg;
1054 unsigned char *regs;
1055 u32 type, liTmp = 0, i = 0, j = 0, data = 0;
1057 if (rk32_dsi_get_bits(dsi, gen_cmd_full) == 1) {
1058 MIPI_TRACE("gen_cmd_full\n");
1061 regs = kmalloc(0x400, GFP_KERNEL);
1063 printk("request regs fail!\n");
1066 memcpy(regs, cmds, length);
1072 case DTYPE_DCS_SWRITE_0P:
1073 rk32_dsi_set_bits(dsi, regs[0], dcs_sw_0p_tx);
1074 data = regs[2] << 8 | type;
1076 case DTYPE_DCS_SWRITE_1P:
1077 rk32_dsi_set_bits(dsi, regs[0], dcs_sw_1p_tx);
1078 data = regs[2] << 8 | type;
1079 data |= regs[3] << 16;
1081 case DTYPE_DCS_LWRITE:
1082 rk32_dsi_set_bits(dsi, regs[0], dcs_lw_tx);
1083 for (i = 0; i < liTmp; i++) {
1084 regs[i] = regs[i+2];
1086 for (i = 0; i < liTmp; i++) {
1088 data |= regs[i] << (j * 8);
1089 if (j == 3 || ((i + 1) == liTmp)) {
1090 if (rk32_dsi_get_bits(dsi, gen_pld_w_full) == 1) {
1091 MIPI_TRACE("gen_pld_w_full :%d\n", i);
1094 rk32_dsi_set_bits(dsi, data, GEN_PLD_DATA);
1095 MIPI_DBG("write GEN_PLD_DATA:%d, %08x\n", i, data);
1100 data |= (liTmp & 0xffff) << 8;
1102 case DTYPE_GEN_LWRITE:
1103 rk32_dsi_set_bits(dsi, regs[0], gen_lw_tx);
1104 for (i = 0; i < liTmp; i++) {
1105 regs[i] = regs[i+2];
1107 for (i = 0; i < liTmp; i++) {
1109 data |= regs[i] << (j * 8);
1110 if (j == 3 || ((i + 1) == liTmp)) {
1111 if (rk32_dsi_get_bits(dsi, gen_pld_w_full) == 1) {
1112 MIPI_TRACE("gen_pld_w_full :%d\n", i);
1115 rk32_dsi_set_bits(dsi, data, GEN_PLD_DATA);
1116 MIPI_DBG("write GEN_PLD_DATA:%d, %08x\n", i, data);
1120 data = (dsi->vid << 6) | type;
1121 data |= (liTmp & 0xffff) << 8;
1123 case DTYPE_GEN_SWRITE_2P:
1124 rk32_dsi_set_bits(dsi, regs[0], gen_sw_2p_tx);
1125 for (i = 0; i < liTmp; i++) {
1126 regs[i] = regs[i+2];
1128 for (i = 0; i < liTmp; i++) {
1130 data |= regs[i] << (j * 8);
1131 if (j == 3 || ((i + 1) == liTmp)) {
1132 if (rk32_dsi_get_bits(dsi, gen_pld_w_full) == 1) {
1133 MIPI_TRACE("gen_pld_w_full :%d\n", i);
1136 rk32_dsi_set_bits(dsi, data, GEN_PLD_DATA);
1137 MIPI_DBG("write GEN_PLD_DATA:%d, %08x\n", i, data);
1142 data |= (liTmp & 0xffff) << 8;
1144 case DTYPE_GEN_SWRITE_1P:
1145 rk32_dsi_set_bits(dsi, regs[0], gen_sw_1p_tx);
1147 data |= regs[2] << 8;
1148 data |= regs[3] << 16;
1150 case DTYPE_GEN_SWRITE_0P:
1151 rk32_dsi_set_bits(dsi, regs[0], gen_sw_0p_tx);
1153 data |= regs[2] << 8;
1156 printk("0x%x:this type not suppport!\n", type);
1159 MIPI_DBG("%d command sent in %s size:%d\n", __LINE__, regs[0] ? "LP mode" : "HS mode", liTmp);
1161 MIPI_DBG("write GEN_HDR:%08x\n", data);
1162 rk32_dsi_set_bits(dsi, data, GEN_HDR);
1165 while (!rk32_dsi_get_bits(dsi, gen_cmd_empty) && i--) {
1174 static int rk32_mipi_dsi_read_dcs_packet(void *arg, unsigned char *data1, u32 n)
1176 struct dsi *dsi = arg;
1177 unsigned char regs[2];
1184 rk32_dsi_set_bits(dsi, regs[0], dcs_sr_0p_tx);
1186 if(type == DTYPE_GEN_SWRITE_0P)
1187 data = (dsi->vid << 6) | (n << 4) | type;
1189 data = (dsi->vid << 6) | ((n-1) << 4) | type;
1192 data |= regs[1] << 8 | type;
1194 printk("write GEN_HDR:%08x\n", data);
1196 rk32_dsi_set_bits(dsi, 0xFFFF, bta_to_cnt);
1197 rk32_dsi_set_bits(dsi, 1, bta_en);
1198 rk32_dsi_set_bits(dsi, data, GEN_HDR);
1201 printk("rk32_mipi_dsi_read_dcs_packet==0x%x\n", rk32_dsi_get_bits(dsi, GEN_PLD_DATA));
1202 rk32_dsi_set_bits(dsi, 0, bta_en);
1207 static int rk32_mipi_dsi_power_up(void *arg)
1209 struct dsi *dsi = arg;
1211 rk32_phy_power_up(dsi);
1212 rk32_mipi_dsi_host_power_up(dsi);
1216 static int rk32_mipi_dsi_power_down(void *arg)
1218 struct dsi *dsi = arg;
1219 struct mipi_dsi_screen *screen = &dsi->screen;
1224 rk32_mipi_dsi_host_power_down(dsi);
1225 rk_phy_power_down(dsi);
1227 MIPI_TRACE("%s:%d\n", __func__, __LINE__);
1231 static int rk32_mipi_dsi_get_id(void *arg)
1234 struct dsi *dsi = arg;
1236 id = rk32_dsi_get_bits(dsi, VERSION);
1240 /* the most top level of mipi dsi init */
1241 static int rk_mipi_dsi_probe(struct dsi *dsi)
1245 register_dsi_ops(dsi->dsi_id, &dsi->ops);
1246 ret = dsi_probe_current_chip(dsi->dsi_id);
1248 MIPI_TRACE("mipi dsi probe fail\n");
1254 #ifdef MIPI_DSI_REGISTER_IO
1255 #include <linux/proc_fs.h>
1256 #include <asm/uaccess.h>
1257 #include <linux/slab.h>
1259 int reg_proc_write(struct file *file, const char __user *buff, size_t count, loff_t *offp)
1261 int ret = -1, i = 0;
1263 char *buf = kmalloc(count, GFP_KERNEL);
1268 memset(buf, 0, count);
1269 ret = copy_from_user((void *)buf, buff, count);
1270 data = strstr(data, "-");
1272 goto reg_proc_write_exit;
1273 command = *(++data);
1277 data = strstr(data, "0x");
1279 goto reg_proc_write_exit;
1280 sscanf(data, "0x%llx", ®s_val);
1281 if ((regs_val & 0xffff00000000ULL) == 0)
1282 goto reg_proc_write_exit;
1283 read_val = regs_val & 0xffffffff;
1284 printk("regs_val=0x%llx\n", regs_val);
1285 rk32_dsi_write_reg(dsi0, regs_val >> 32, &read_val);
1286 rk32_dsi_read_reg(dsi0, regs_val >> 32, &read_val);
1287 regs_val &= 0xffffffff;
1288 if (read_val != regs_val)
1289 MIPI_TRACE("%s fail:0x%08x\n", __func__, read_val);
1295 data = strstr(data, "0x");
1297 goto reg_proc_write_exit;
1299 sscanf(data, "0x%llx", ®s_val);
1300 rk32_dsi_read_reg(dsi0, (u16)regs_val, &read_val);
1301 MIPI_TRACE("*%04x : %08x\n", (u16)regs_val, read_val);
1305 while (*(++data) == ' ')
1307 sscanf(data, "%d", &read_val);
1309 read_val = 11289600;
1316 while (*(++data) == ' ')
1319 MIPI_TRACE("****%d:%d\n", data-buf, count);
1322 MIPI_TRACE("payload entry is larger than 32\n");
1325 sscanf(data, "%x,", (unsigned int *)(str + i)); /* -c 1,29,02,03,05,06,> pro */
1326 data = strstr(data, ",");
1337 rk32_mipi_dsi_send_packet(dsi0, str, read_val);
1339 rk32_mipi_dsi_send_packet(dsi0, str, read_val);
1350 reg_proc_write_exit:
1356 int reg_proc_read(struct file *file, char __user *buff, size_t count,
1362 for (i = VERSION; i < (VERSION + (0xdc << 16)); i += 4<<16) {
1363 val = rk32_dsi_get_bits(dsi0, i);
1364 MIPI_TRACE("%04x: %08x\n", i>>16, val);
1372 int reg_proc_open(struct inode *inode, struct file *file)
1377 int reg_proc_close(struct inode *inode, struct file *file)
1382 struct file_operations reg_proc_fops = {
1383 .owner = THIS_MODULE,
1384 .open = reg_proc_open,
1385 .release = reg_proc_close,
1386 .write = reg_proc_write,
1387 .read = reg_proc_read,
1390 int reg_proc_write1(struct file *file, const char __user *buff, size_t count, loff_t *offp)
1392 int ret = -1, i = 0;
1394 char *buf = kmalloc(count, GFP_KERNEL);
1399 memset(buf, 0, count);
1400 ret = copy_from_user((void *)buf, buff, count);
1402 data = strstr(data, "-");
1404 goto reg_proc_write_exit;
1405 command = *(++data);
1410 data = strstr(data, "0x");
1412 goto reg_proc_write_exit;
1413 sscanf(data, "0x%llx", ®s_val);
1414 if ((regs_val & 0xffff00000000ULL) == 0)
1415 goto reg_proc_write_exit;
1416 read_val = regs_val & 0xffffffff;
1417 rk32_dsi_write_reg(dsi1, regs_val >> 32, &read_val);
1418 rk32_dsi_read_reg(dsi1, regs_val >> 32, &read_val);
1419 regs_val &= 0xffffffff;
1420 if (read_val != regs_val)
1421 MIPI_TRACE("%s fail:0x%08x\n", __func__, read_val);
1427 data = strstr(data, "0x");
1429 goto reg_proc_write_exit;
1430 sscanf(data, "0x%llx", ®s_val);
1431 rk32_dsi_read_reg(dsi1, (u16)regs_val, &read_val);
1432 MIPI_TRACE("*%04x : %08x\n", (u16)regs_val, read_val);
1436 while (*(++data) == ' ')
1438 sscanf(data, "%d", &read_val);
1440 read_val = 11289600;
1447 while (*(++data) == ' ')
1450 MIPI_TRACE("****%d:%d\n", data-buf, count);
1453 MIPI_TRACE("payload entry is larger than 32\n");
1456 sscanf(data, "%x,", (unsigned int *)(str + i)); /* -c 1,29,02,03,05,06,> pro */
1457 data = strstr(data, ",");
1468 rk32_mipi_dsi_send_packet(dsi1, str, read_val);
1470 rk32_mipi_dsi_send_packet(dsi1, str, read_val);
1481 reg_proc_write_exit:
1487 int reg_proc_read1(struct file *file, char __user *buff, size_t count,
1493 for (i = VERSION; i < (VERSION + (0xdc<<16)); i += 4<<16) {
1494 val = rk32_dsi_get_bits(dsi1, i);
1495 MIPI_TRACE("%04x: %08x\n", i>>16, val);
1503 int reg_proc_open1(struct inode *inode, struct file *file)
1508 int reg_proc_close1(struct inode *inode, struct file *file)
1513 struct file_operations reg_proc_fops1 = {
1514 .owner = THIS_MODULE,
1515 .open = reg_proc_open1,
1516 .release = reg_proc_close1,
1517 .write = reg_proc_write1,
1518 .read = reg_proc_read1,
1521 #if 0/* def CONFIG_MIPI_DSI_LINUX */
1522 static irqreturn_t rk32_mipi_dsi_irq_handler(int irq, void *data)
1524 printk("-------rk32_mipi_dsi_irq_handler-------\n");
1530 static int dwc_phy_test_rd(struct dsi *dsi, unsigned char test_code)
1534 rk32_dsi_set_bits(dsi, 0x10000 | test_code, PHY_TEST_CTRL1);
1535 rk32_dsi_set_bits(dsi, 0x2, PHY_TEST_CTRL0);
1536 rk32_dsi_set_bits(dsi, 0x0, PHY_TEST_CTRL0);
1538 val = rk32_dsi_get_bits(dsi, PHY_TEST_CTRL1);
1542 static int rk32_dsi_enable(void)
1544 MIPI_DBG("rk32_dsi_enable-------\n");
1545 rk_fb_get_prmry_screen(dsi0->screen.screen);
1546 dsi0->screen.lcdc_id = dsi0->screen.screen->lcdc_id;
1547 rk32_init_phy_mode(dsi0->screen.lcdc_id);
1550 if (rk_mipi_get_dsi_num() == 2)
1553 rk_mipi_screen_standby(0);
1556 After the core reset, DPI waits for the first VSYNC active transition to start signal sampling, including
1557 pixel data, and preventing image transmission in the middle of a frame.
1559 dsi_is_enable(0, 0);
1560 if (rk_mipi_get_dsi_num() == 2)
1561 dsi_is_enable(1, 0);
1563 dsi_enable_video_mode(0, 1);
1564 if (rk_mipi_get_dsi_num() == 2)
1565 dsi_enable_video_mode(1, 1);
1567 dsi_is_enable(0, 1);
1568 if (rk_mipi_get_dsi_num() == 2)
1569 dsi_is_enable(1, 1);
1573 #ifdef CONFIG_MIPI_DSI_LINUX
1574 static int rk32_dsi_disable(void)
1576 MIPI_DBG("rk32_dsi_disable-------\n");
1577 rk_mipi_screen_standby(1);
1579 if (rk_mipi_get_dsi_num() == 2)
1584 static struct rk_fb_trsm_ops trsm_dsi_ops = {
1585 .enable = rk32_dsi_enable,
1586 .disable = rk32_dsi_disable,
1587 .dsp_pwr_on = rk32_mipi_power_up_DDR,
1588 .dsp_pwr_off = rk32_mipi_power_down_DDR,
1591 static void rk32_init_phy_mode(int lcdc_id)
1593 int val0 = 0, val1 = 0;
1595 MIPI_DBG("rk32_init_phy_mode----------lcdc_id=%d\n", lcdc_id);
1597 if (dsi0->ops.id == DWC_DSI_VERSION_RK312x)
1600 /* D-PHY mode select */
1601 if (rk_mipi_get_dsi_num() == 1) {
1603 /* 1'b1: VOP LIT output to DSI host0;1'b0: VOP BIG output to DSI host0 */
1604 val0 = 0x1 << 22 | 0x1 << 6;
1606 val0 = 0x1 << 22 | 0x0 << 6;
1607 writel_relaxed(val0, RK_GRF_VIRT + RK3288_GRF_SOC_CON6);
1610 val0 = 0x1 << 25 | 0x1 << 9 | 0x1 << 22 | 0x1 << 6;
1611 val1 = 0x1 << 31 | 0x1 << 30 | 0x0 << 15 | 0x1 << 14;
1613 val0 = 0x1 << 25 | 0x0 << 9 | 0x1 << 22 | 0x0 << 14;
1614 val1 = 0x1 << 31 | 0x1 << 30 | 0x0 << 15 | 0x1 << 14;
1616 writel_relaxed(val0, RK_GRF_VIRT + RK3288_GRF_SOC_CON6);
1617 writel_relaxed(val1, RK_GRF_VIRT + RK3288_GRF_SOC_CON14);
1621 #ifdef CONFIG_MIPI_DSI_LINUX
1622 static int rk32_mipi_power_down_DDR(void)
1624 dsi_is_enable(0, 0);
1625 if (rk_mipi_get_dsi_num() == 2)
1626 dsi_is_enable(1, 0);
1630 static int rk32_mipi_power_up_DDR(void)
1632 dsi_is_enable(0, 0);
1633 if (rk_mipi_get_dsi_num() == 2)
1634 dsi_is_enable(1, 0);
1635 dsi_enable_video_mode(0, 1);
1636 dsi_enable_video_mode(1, 1);
1637 dsi_is_enable(0, 1);
1638 if (rk_mipi_get_dsi_num() == 2)
1639 dsi_is_enable(1, 1);
1648 static struct dsi_type dsi_rk312x = {
1649 .label = "rk312-dsi",
1650 .dsi_id = DWC_DSI_VERSION_RK312x,
1653 static struct dsi_type dsi_rk32 = {
1654 .label = "rk32-dsi",
1655 .dsi_id = DWC_DSI_VERSION,
1658 static const struct of_device_id of_rk_mipi_dsi_match[] = {
1659 { .compatible = "rockchip,rk32-dsi", .data = &dsi_rk32},
1660 { .compatible = "rockchip,rk312x-dsi", .data = &dsi_rk312x},
1664 static int rk32_mipi_dsi_probe(struct platform_device *pdev)
1669 struct mipi_dsi_ops *ops;
1670 struct rk_screen *screen;
1671 struct mipi_dsi_screen *dsi_screen;
1672 struct resource *res_host, *res_phy;
1673 const struct dsi_type *data;
1674 const struct of_device_id *of_id =
1675 of_match_device(of_rk_mipi_dsi_match, &pdev->dev);
1677 dev_err(&pdev->dev, "failed to match device\n");
1682 dsi = devm_kzalloc(&pdev->dev, sizeof(struct dsi), GFP_KERNEL);
1684 dev_err(&pdev->dev, "request struct dsi fail!\n");
1687 dsi->ops.id = data->dsi_id;
1688 printk(KERN_INFO "%s\n", data->label);
1690 if (dsi->ops.id == DWC_DSI_VERSION) {
1691 res_host = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1692 dsi->host.membase = devm_request_and_ioremap(&pdev->dev, res_host);
1693 if (!dsi->host.membase) {
1694 dev_err(&pdev->dev, "get resource mipi host membase fail!\n");
1697 } else if (dsi->ops.id == DWC_DSI_VERSION_RK312x) {
1698 res_host = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mipi_dsi_host");
1699 dsi->host.membase = devm_request_and_ioremap(&pdev->dev, res_host);
1700 if (!dsi->host.membase) {
1701 dev_err(&pdev->dev, "get resource mipi host membase fail!\n");
1704 res_phy = platform_get_resource_byname(pdev, IORESOURCE_MEM, "mipi_dsi_phy");
1705 dsi->phy.membase = devm_request_and_ioremap(&pdev->dev, res_phy);
1706 if (!dsi->phy.membase) {
1707 dev_err(&pdev->dev, "get resource mipi phy membase fail!\n");
1712 dsi->phy.refclk = devm_clk_get(&pdev->dev, "clk_mipi_24m");
1713 if (unlikely(IS_ERR(dsi->phy.refclk))) {
1714 dev_err(&pdev->dev, "get clk_mipi_24m clock fail\n");
1715 return PTR_ERR(dsi->phy.refclk);
1718 /* Get the mipi phy pclk */
1719 dsi->dsi_pclk = devm_clk_get(&pdev->dev, "pclk_mipi_dsi");
1720 if (unlikely(IS_ERR(dsi->dsi_pclk))) {
1721 dev_err(&pdev->dev, "get pclk_mipi_dsi clock fail\n");
1722 return PTR_ERR(dsi->dsi_pclk);
1725 if (dsi->ops.id == DWC_DSI_VERSION_RK312x) {
1726 /* Get the mipi host pclk */
1727 dsi->dsi_host_pclk = devm_clk_get(&pdev->dev, "pclk_mipi_dsi_host");
1728 if (unlikely(IS_ERR(dsi->dsi_host_pclk))) {
1729 dev_err(&pdev->dev, "get pclk_mipi_dsi_host clock fail\n");
1730 return PTR_ERR(dsi->dsi_host_pclk);
1732 /* Get the pd_vio AHB h2p bridge clock */
1733 dsi->h2p_hclk = devm_clk_get(&pdev->dev, "hclk_vio_h2p");
1734 if (unlikely(IS_ERR(dsi->h2p_hclk))) {
1735 dev_err(&pdev->dev, "get hclk_vio_h2p clock fail\n");
1736 return PTR_ERR(dsi->h2p_hclk);
1739 dsi->dsi_pd = devm_clk_get(&pdev->dev, "pd_mipi_dsi");
1740 if (unlikely(IS_ERR(dsi->dsi_pd))) {
1741 dev_err(&pdev->dev, "get pd_mipi_dsi clock fail\n");
1742 return PTR_ERR(dsi->dsi_pd);
1744 dsi->host.irq = platform_get_irq(pdev, 0);
1745 if (dsi->host.irq < 0) {
1746 dev_err(&pdev->dev, "no irq resource?\n");
1747 return dsi->host.irq;
1750 ret = request_irq(dsi->host.irq, rk32_mipi_dsi_irq_handler, 0,dev_name(&pdev->dev), dsi);
1752 dev_err(&pdev->dev, "request mipi_dsi irq fail\n");
1756 printk("dsi->host.irq =%d\n", dsi->host.irq);
1758 disable_irq(dsi->host.irq);
1760 screen = devm_kzalloc(&pdev->dev, sizeof(struct rk_screen), GFP_KERNEL);
1762 dev_err(&pdev->dev, "request struct rk_screen fail!\n");
1765 rk_fb_get_prmry_screen(screen);
1771 ops->get_id = rk32_mipi_dsi_get_id,
1772 ops->dsi_send_packet = rk32_mipi_dsi_send_packet;
1773 ops->dsi_read_dcs_packet = rk32_mipi_dsi_read_dcs_packet,
1774 ops->dsi_enable_video_mode = rk32_mipi_dsi_enable_video_mode,
1775 ops->dsi_enable_command_mode = rk32_mipi_dsi_enable_command_mode,
1776 ops->dsi_enable_hs_clk = rk32_mipi_dsi_enable_hs_clk,
1777 ops->dsi_is_active = rk32_mipi_dsi_is_active,
1778 ops->dsi_is_enable = rk32_mipi_dsi_is_enable,
1779 ops->power_up = rk32_mipi_dsi_power_up,
1780 ops->power_down = rk32_mipi_dsi_power_down,
1781 ops->dsi_init = rk_mipi_dsi_init,
1783 dsi_screen = &dsi->screen;
1784 dsi_screen->screen = screen;
1785 dsi_screen->type = screen->type;
1786 dsi_screen->face = screen->face;
1787 dsi_screen->lcdc_id = screen->lcdc_id;
1788 dsi_screen->screen_id = screen->screen_id;
1789 dsi_screen->pixclock = screen->mode.pixclock;
1790 dsi_screen->left_margin = screen->mode.left_margin;
1791 dsi_screen->right_margin = screen->mode.right_margin;
1792 dsi_screen->hsync_len = screen->mode.hsync_len;
1793 dsi_screen->upper_margin = screen->mode.upper_margin;
1794 dsi_screen->lower_margin = screen->mode.lower_margin;
1795 dsi_screen->vsync_len = screen->mode.vsync_len;
1796 dsi_screen->x_res = screen->mode.xres;
1797 dsi_screen->y_res = screen->mode.yres;
1798 dsi_screen->pin_hsync = screen->pin_hsync;
1799 dsi_screen->pin_vsync = screen->pin_vsync;
1800 dsi_screen->pin_den = screen->pin_den;
1801 dsi_screen->pin_dclk = screen->pin_dclk;
1802 dsi_screen->dsi_lane = rk_mipi_get_dsi_lane();
1803 /* dsi_screen->dsi_video_mode = screen->dsi_video_mode; */
1804 dsi_screen->dsi_lane = rk_mipi_get_dsi_lane();
1805 dsi_screen->hs_tx_clk = rk_mipi_get_dsi_clk();
1806 /* dsi_screen->lcdc_id = 1; */
1810 sprintf(ops->name, "rk_mipi_dsi.%d", dsi->dsi_id);
1811 platform_set_drvdata(pdev, dsi);
1813 ret = rk_mipi_dsi_probe(dsi);
1815 dev_err(&pdev->dev, "rk mipi_dsi probe fail!\n");
1816 dev_err(&pdev->dev, "%s\n", RK_MIPI_DSI_VERSION_AND_TIME);
1822 if(!support_uboot_display())
1823 rk32_init_phy_mode(dsi_screen->lcdc_id);
1825 rk_fb_trsm_ops_register(&trsm_dsi_ops, SCREEN_MIPI);
1826 #ifdef MIPI_DSI_REGISTER_IO
1827 debugfs_create_file("mipidsi0", S_IFREG | S_IRUGO, dsi->debugfs_dir, dsi,
1833 #ifdef MIPI_DSI_REGISTER_IO
1834 debugfs_create_file("mipidsi1", S_IFREG | S_IRUGO, dsi->debugfs_dir, dsi,
1839 if (support_uboot_display()) {
1840 clk_prepare_enable(dsi->phy.refclk);
1841 clk_prepare_enable(dsi->dsi_pclk);
1842 if (dsi->ops.id == DWC_DSI_VERSION_RK312x) {
1843 clk_prepare_enable(dsi->dsi_host_pclk);
1844 clk_prepare_enable(dsi->h2p_hclk);
1846 clk_prepare_enable(dsi->dsi_pd);
1849 dev_info(&pdev->dev, "rk mipi_dsi probe success!\n");
1850 dev_info(&pdev->dev, "%s\n", RK_MIPI_DSI_VERSION_AND_TIME);
1855 static struct platform_driver rk32_mipi_dsi_driver = {
1856 .probe = rk32_mipi_dsi_probe,
1858 .name = "rk32-mipi",
1859 .owner = THIS_MODULE,
1861 .of_match_table = of_rk_mipi_dsi_match,
1866 static int __init rk32_mipi_dsi_init(void)
1868 return platform_driver_register(&rk32_mipi_dsi_driver);
1870 fs_initcall(rk32_mipi_dsi_init);
1872 static void __exit rk32_mipi_dsi_exit(void)
1874 platform_driver_unregister(&rk32_mipi_dsi_driver);
1876 module_exit(rk32_mipi_dsi_exit);