Merge tag 'sound-5.15-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai...
[platform/kernel/linux-rpi.git] / drivers / gpu / drm / rockchip / dw-mipi-dsi-rockchip.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (C) Fuzhou Rockchip Electronics Co.Ltd
4  * Author:
5  *      Chris Zhong <zyw@rock-chips.com>
6  *      Nickey Yang <nickey.yang@rock-chips.com>
7  */
8
9 #include <linux/clk.h>
10 #include <linux/iopoll.h>
11 #include <linux/math64.h>
12 #include <linux/mfd/syscon.h>
13 #include <linux/module.h>
14 #include <linux/of_device.h>
15 #include <linux/phy/phy.h>
16 #include <linux/pm_runtime.h>
17 #include <linux/phy/phy.h>
18 #include <linux/regmap.h>
19
20 #include <video/mipi_display.h>
21
22 #include <drm/bridge/dw_mipi_dsi.h>
23 #include <drm/drm_mipi_dsi.h>
24 #include <drm/drm_of.h>
25 #include <drm/drm_simple_kms_helper.h>
26
27 #include "rockchip_drm_drv.h"
28 #include "rockchip_drm_vop.h"
29
30 #define DSI_PHY_RSTZ                    0xa0
31 #define PHY_DISFORCEPLL                 0
32 #define PHY_ENFORCEPLL                  BIT(3)
33 #define PHY_DISABLECLK                  0
34 #define PHY_ENABLECLK                   BIT(2)
35 #define PHY_RSTZ                        0
36 #define PHY_UNRSTZ                      BIT(1)
37 #define PHY_SHUTDOWNZ                   0
38 #define PHY_UNSHUTDOWNZ                 BIT(0)
39
40 #define DSI_PHY_IF_CFG                  0xa4
41 #define N_LANES(n)                      ((((n) - 1) & 0x3) << 0)
42 #define PHY_STOP_WAIT_TIME(cycle)       (((cycle) & 0xff) << 8)
43
44 #define DSI_PHY_STATUS                  0xb0
45 #define LOCK                            BIT(0)
46 #define STOP_STATE_CLK_LANE             BIT(2)
47
48 #define DSI_PHY_TST_CTRL0               0xb4
49 #define PHY_TESTCLK                     BIT(1)
50 #define PHY_UNTESTCLK                   0
51 #define PHY_TESTCLR                     BIT(0)
52 #define PHY_UNTESTCLR                   0
53
54 #define DSI_PHY_TST_CTRL1               0xb8
55 #define PHY_TESTEN                      BIT(16)
56 #define PHY_UNTESTEN                    0
57 #define PHY_TESTDOUT(n)                 (((n) & 0xff) << 8)
58 #define PHY_TESTDIN(n)                  (((n) & 0xff) << 0)
59
60 #define DSI_INT_ST0                     0xbc
61 #define DSI_INT_ST1                     0xc0
62 #define DSI_INT_MSK0                    0xc4
63 #define DSI_INT_MSK1                    0xc8
64
65 #define PHY_STATUS_TIMEOUT_US           10000
66 #define CMD_PKT_STATUS_TIMEOUT_US       20000
67
68 #define BYPASS_VCO_RANGE        BIT(7)
69 #define VCO_RANGE_CON_SEL(val)  (((val) & 0x7) << 3)
70 #define VCO_IN_CAP_CON_DEFAULT  (0x0 << 1)
71 #define VCO_IN_CAP_CON_LOW      (0x1 << 1)
72 #define VCO_IN_CAP_CON_HIGH     (0x2 << 1)
73 #define REF_BIAS_CUR_SEL        BIT(0)
74
75 #define CP_CURRENT_3UA  0x1
76 #define CP_CURRENT_4_5UA        0x2
77 #define CP_CURRENT_7_5UA        0x6
78 #define CP_CURRENT_6UA  0x9
79 #define CP_CURRENT_12UA 0xb
80 #define CP_CURRENT_SEL(val)     ((val) & 0xf)
81 #define CP_PROGRAM_EN           BIT(7)
82
83 #define LPF_RESISTORS_15_5KOHM  0x1
84 #define LPF_RESISTORS_13KOHM    0x2
85 #define LPF_RESISTORS_11_5KOHM  0x4
86 #define LPF_RESISTORS_10_5KOHM  0x8
87 #define LPF_RESISTORS_8KOHM     0x10
88 #define LPF_PROGRAM_EN          BIT(6)
89 #define LPF_RESISTORS_SEL(val)  ((val) & 0x3f)
90
91 #define HSFREQRANGE_SEL(val)    (((val) & 0x3f) << 1)
92
93 #define INPUT_DIVIDER(val)      (((val) - 1) & 0x7f)
94 #define LOW_PROGRAM_EN          0
95 #define HIGH_PROGRAM_EN         BIT(7)
96 #define LOOP_DIV_LOW_SEL(val)   (((val) - 1) & 0x1f)
97 #define LOOP_DIV_HIGH_SEL(val)  ((((val) - 1) >> 5) & 0xf)
98 #define PLL_LOOP_DIV_EN         BIT(5)
99 #define PLL_INPUT_DIV_EN        BIT(4)
100
101 #define POWER_CONTROL           BIT(6)
102 #define INTERNAL_REG_CURRENT    BIT(3)
103 #define BIAS_BLOCK_ON           BIT(2)
104 #define BANDGAP_ON              BIT(0)
105
106 #define TER_RESISTOR_HIGH       BIT(7)
107 #define TER_RESISTOR_LOW        0
108 #define LEVEL_SHIFTERS_ON       BIT(6)
109 #define TER_CAL_DONE            BIT(5)
110 #define SETRD_MAX               (0x7 << 2)
111 #define POWER_MANAGE            BIT(1)
112 #define TER_RESISTORS_ON        BIT(0)
113
114 #define BIASEXTR_SEL(val)       ((val) & 0x7)
115 #define BANDGAP_SEL(val)        ((val) & 0x7)
116 #define TLP_PROGRAM_EN          BIT(7)
117 #define THS_PRE_PROGRAM_EN      BIT(7)
118 #define THS_ZERO_PROGRAM_EN     BIT(6)
119
120 #define PLL_BIAS_CUR_SEL_CAP_VCO_CONTROL                0x10
121 #define PLL_CP_CONTROL_PLL_LOCK_BYPASS                  0x11
122 #define PLL_LPF_AND_CP_CONTROL                          0x12
123 #define PLL_INPUT_DIVIDER_RATIO                         0x17
124 #define PLL_LOOP_DIVIDER_RATIO                          0x18
125 #define PLL_INPUT_AND_LOOP_DIVIDER_RATIOS_CONTROL       0x19
126 #define BANDGAP_AND_BIAS_CONTROL                        0x20
127 #define TERMINATION_RESISTER_CONTROL                    0x21
128 #define AFE_BIAS_BANDGAP_ANALOG_PROGRAMMABILITY         0x22
129 #define HS_RX_CONTROL_OF_LANE_CLK                       0x34
130 #define HS_RX_CONTROL_OF_LANE_0                         0x44
131 #define HS_RX_CONTROL_OF_LANE_1                         0x54
132 #define HS_TX_CLOCK_LANE_REQUEST_STATE_TIME_CONTROL     0x60
133 #define HS_TX_CLOCK_LANE_PREPARE_STATE_TIME_CONTROL     0x61
134 #define HS_TX_CLOCK_LANE_HS_ZERO_STATE_TIME_CONTROL     0x62
135 #define HS_TX_CLOCK_LANE_TRAIL_STATE_TIME_CONTROL       0x63
136 #define HS_TX_CLOCK_LANE_EXIT_STATE_TIME_CONTROL        0x64
137 #define HS_TX_CLOCK_LANE_POST_TIME_CONTROL              0x65
138 #define HS_TX_DATA_LANE_REQUEST_STATE_TIME_CONTROL      0x70
139 #define HS_TX_DATA_LANE_PREPARE_STATE_TIME_CONTROL      0x71
140 #define HS_TX_DATA_LANE_HS_ZERO_STATE_TIME_CONTROL      0x72
141 #define HS_TX_DATA_LANE_TRAIL_STATE_TIME_CONTROL        0x73
142 #define HS_TX_DATA_LANE_EXIT_STATE_TIME_CONTROL         0x74
143 #define HS_RX_DATA_LANE_THS_SETTLE_CONTROL              0x75
144 #define HS_RX_CONTROL_OF_LANE_2                         0x84
145 #define HS_RX_CONTROL_OF_LANE_3                         0x94
146
147 #define DW_MIPI_NEEDS_PHY_CFG_CLK       BIT(0)
148 #define DW_MIPI_NEEDS_GRF_CLK           BIT(1)
149
150 #define PX30_GRF_PD_VO_CON1             0x0438
151 #define PX30_DSI_FORCETXSTOPMODE        (0xf << 7)
152 #define PX30_DSI_FORCERXMODE            BIT(6)
153 #define PX30_DSI_TURNDISABLE            BIT(5)
154 #define PX30_DSI_LCDC_SEL               BIT(0)
155
156 #define RK3288_GRF_SOC_CON6             0x025c
157 #define RK3288_DSI0_LCDC_SEL            BIT(6)
158 #define RK3288_DSI1_LCDC_SEL            BIT(9)
159
160 #define RK3399_GRF_SOC_CON20            0x6250
161 #define RK3399_DSI0_LCDC_SEL            BIT(0)
162 #define RK3399_DSI1_LCDC_SEL            BIT(4)
163
164 #define RK3399_GRF_SOC_CON22            0x6258
165 #define RK3399_DSI0_TURNREQUEST         (0xf << 12)
166 #define RK3399_DSI0_TURNDISABLE         (0xf << 8)
167 #define RK3399_DSI0_FORCETXSTOPMODE     (0xf << 4)
168 #define RK3399_DSI0_FORCERXMODE         (0xf << 0)
169
170 #define RK3399_GRF_SOC_CON23            0x625c
171 #define RK3399_DSI1_TURNDISABLE         (0xf << 12)
172 #define RK3399_DSI1_FORCETXSTOPMODE     (0xf << 8)
173 #define RK3399_DSI1_FORCERXMODE         (0xf << 4)
174 #define RK3399_DSI1_ENABLE              (0xf << 0)
175
176 #define RK3399_GRF_SOC_CON24            0x6260
177 #define RK3399_TXRX_MASTERSLAVEZ        BIT(7)
178 #define RK3399_TXRX_ENABLECLK           BIT(6)
179 #define RK3399_TXRX_BASEDIR             BIT(5)
180 #define RK3399_TXRX_SRC_SEL_ISP0        BIT(4)
181 #define RK3399_TXRX_TURNREQUEST         GENMASK(3, 0)
182
183 #define HIWORD_UPDATE(val, mask)        (val | (mask) << 16)
184
185 #define to_dsi(nm)      container_of(nm, struct dw_mipi_dsi_rockchip, nm)
186
187 enum {
188         DW_DSI_USAGE_IDLE,
189         DW_DSI_USAGE_DSI,
190         DW_DSI_USAGE_PHY,
191 };
192
193 enum {
194         BANDGAP_97_07,
195         BANDGAP_98_05,
196         BANDGAP_99_02,
197         BANDGAP_100_00,
198         BANDGAP_93_17,
199         BANDGAP_94_15,
200         BANDGAP_95_12,
201         BANDGAP_96_10,
202 };
203
204 enum {
205         BIASEXTR_87_1,
206         BIASEXTR_91_5,
207         BIASEXTR_95_9,
208         BIASEXTR_100,
209         BIASEXTR_105_94,
210         BIASEXTR_111_88,
211         BIASEXTR_118_8,
212         BIASEXTR_127_7,
213 };
214
215 struct rockchip_dw_dsi_chip_data {
216         u32 reg;
217
218         u32 lcdsel_grf_reg;
219         u32 lcdsel_big;
220         u32 lcdsel_lit;
221
222         u32 enable_grf_reg;
223         u32 enable;
224
225         u32 lanecfg1_grf_reg;
226         u32 lanecfg1;
227         u32 lanecfg2_grf_reg;
228         u32 lanecfg2;
229
230         int (*dphy_rx_init)(struct phy *phy);
231         int (*dphy_rx_power_on)(struct phy *phy);
232         int (*dphy_rx_power_off)(struct phy *phy);
233
234         unsigned int flags;
235         unsigned int max_data_lanes;
236 };
237
238 struct dw_mipi_dsi_rockchip {
239         struct device *dev;
240         struct drm_encoder encoder;
241         void __iomem *base;
242
243         struct regmap *grf_regmap;
244         struct clk *pclk;
245         struct clk *pllref_clk;
246         struct clk *grf_clk;
247         struct clk *phy_cfg_clk;
248
249         /* dual-channel */
250         bool is_slave;
251         struct dw_mipi_dsi_rockchip *slave;
252
253         /* optional external dphy */
254         struct phy *phy;
255         union phy_configure_opts phy_opts;
256
257         /* being a phy for other mipi hosts */
258         unsigned int usage_mode;
259         struct mutex usage_mutex;
260         struct phy *dphy;
261         struct phy_configure_opts_mipi_dphy dphy_config;
262
263         unsigned int lane_mbps; /* per lane */
264         u16 input_div;
265         u16 feedback_div;
266         u32 format;
267
268         struct dw_mipi_dsi *dmd;
269         const struct rockchip_dw_dsi_chip_data *cdata;
270         struct dw_mipi_dsi_plat_data pdata;
271 };
272
273 struct dphy_pll_parameter_map {
274         unsigned int max_mbps;
275         u8 hsfreqrange;
276         u8 icpctrl;
277         u8 lpfctrl;
278 };
279
280 /* The table is based on 27MHz DPHY pll reference clock. */
281 static const struct dphy_pll_parameter_map dppa_map[] = {
282         {  89, 0x00, CP_CURRENT_3UA, LPF_RESISTORS_13KOHM },
283         {  99, 0x10, CP_CURRENT_3UA, LPF_RESISTORS_13KOHM },
284         { 109, 0x20, CP_CURRENT_3UA, LPF_RESISTORS_13KOHM },
285         { 129, 0x01, CP_CURRENT_3UA, LPF_RESISTORS_15_5KOHM },
286         { 139, 0x11, CP_CURRENT_3UA, LPF_RESISTORS_15_5KOHM },
287         { 149, 0x21, CP_CURRENT_3UA, LPF_RESISTORS_15_5KOHM },
288         { 169, 0x02, CP_CURRENT_6UA, LPF_RESISTORS_13KOHM },
289         { 179, 0x12, CP_CURRENT_6UA, LPF_RESISTORS_13KOHM },
290         { 199, 0x22, CP_CURRENT_6UA, LPF_RESISTORS_13KOHM },
291         { 219, 0x03, CP_CURRENT_4_5UA, LPF_RESISTORS_13KOHM },
292         { 239, 0x13, CP_CURRENT_4_5UA, LPF_RESISTORS_13KOHM },
293         { 249, 0x23, CP_CURRENT_4_5UA, LPF_RESISTORS_13KOHM },
294         { 269, 0x04, CP_CURRENT_6UA, LPF_RESISTORS_11_5KOHM },
295         { 299, 0x14, CP_CURRENT_6UA, LPF_RESISTORS_11_5KOHM },
296         { 329, 0x05, CP_CURRENT_3UA, LPF_RESISTORS_15_5KOHM },
297         { 359, 0x15, CP_CURRENT_3UA, LPF_RESISTORS_15_5KOHM },
298         { 399, 0x25, CP_CURRENT_3UA, LPF_RESISTORS_15_5KOHM },
299         { 449, 0x06, CP_CURRENT_7_5UA, LPF_RESISTORS_11_5KOHM },
300         { 499, 0x16, CP_CURRENT_7_5UA, LPF_RESISTORS_11_5KOHM },
301         { 549, 0x07, CP_CURRENT_7_5UA, LPF_RESISTORS_10_5KOHM },
302         { 599, 0x17, CP_CURRENT_7_5UA, LPF_RESISTORS_10_5KOHM },
303         { 649, 0x08, CP_CURRENT_7_5UA, LPF_RESISTORS_11_5KOHM },
304         { 699, 0x18, CP_CURRENT_7_5UA, LPF_RESISTORS_11_5KOHM },
305         { 749, 0x09, CP_CURRENT_7_5UA, LPF_RESISTORS_11_5KOHM },
306         { 799, 0x19, CP_CURRENT_7_5UA, LPF_RESISTORS_11_5KOHM },
307         { 849, 0x29, CP_CURRENT_7_5UA, LPF_RESISTORS_11_5KOHM },
308         { 899, 0x39, CP_CURRENT_7_5UA, LPF_RESISTORS_11_5KOHM },
309         { 949, 0x0a, CP_CURRENT_12UA, LPF_RESISTORS_8KOHM },
310         { 999, 0x1a, CP_CURRENT_12UA, LPF_RESISTORS_8KOHM },
311         {1049, 0x2a, CP_CURRENT_12UA, LPF_RESISTORS_8KOHM },
312         {1099, 0x3a, CP_CURRENT_12UA, LPF_RESISTORS_8KOHM },
313         {1149, 0x0b, CP_CURRENT_12UA, LPF_RESISTORS_10_5KOHM },
314         {1199, 0x1b, CP_CURRENT_12UA, LPF_RESISTORS_10_5KOHM },
315         {1249, 0x2b, CP_CURRENT_12UA, LPF_RESISTORS_10_5KOHM },
316         {1299, 0x3b, CP_CURRENT_12UA, LPF_RESISTORS_10_5KOHM },
317         {1349, 0x0c, CP_CURRENT_12UA, LPF_RESISTORS_10_5KOHM },
318         {1399, 0x1c, CP_CURRENT_12UA, LPF_RESISTORS_10_5KOHM },
319         {1449, 0x2c, CP_CURRENT_12UA, LPF_RESISTORS_10_5KOHM },
320         {1500, 0x3c, CP_CURRENT_12UA, LPF_RESISTORS_10_5KOHM }
321 };
322
323 static int max_mbps_to_parameter(unsigned int max_mbps)
324 {
325         int i;
326
327         for (i = 0; i < ARRAY_SIZE(dppa_map); i++)
328                 if (dppa_map[i].max_mbps >= max_mbps)
329                         return i;
330
331         return -EINVAL;
332 }
333
334 static inline void dsi_write(struct dw_mipi_dsi_rockchip *dsi, u32 reg, u32 val)
335 {
336         writel(val, dsi->base + reg);
337 }
338
339 static inline u32 dsi_read(struct dw_mipi_dsi_rockchip *dsi, u32 reg)
340 {
341         return readl(dsi->base + reg);
342 }
343
344 static inline void dsi_update_bits(struct dw_mipi_dsi_rockchip *dsi, u32 reg,
345                                    u32 mask, u32 val)
346 {
347         dsi_write(dsi, reg, (dsi_read(dsi, reg) & ~mask) | val);
348 }
349
350 static void dw_mipi_dsi_phy_write(struct dw_mipi_dsi_rockchip *dsi,
351                                   u8 test_code,
352                                   u8 test_data)
353 {
354         /*
355          * With the falling edge on TESTCLK, the TESTDIN[7:0] signal content
356          * is latched internally as the current test code. Test data is
357          * programmed internally by rising edge on TESTCLK.
358          */
359         dsi_write(dsi, DSI_PHY_TST_CTRL0, PHY_TESTCLK | PHY_UNTESTCLR);
360
361         dsi_write(dsi, DSI_PHY_TST_CTRL1, PHY_TESTEN | PHY_TESTDOUT(0) |
362                                           PHY_TESTDIN(test_code));
363
364         dsi_write(dsi, DSI_PHY_TST_CTRL0, PHY_UNTESTCLK | PHY_UNTESTCLR);
365
366         dsi_write(dsi, DSI_PHY_TST_CTRL1, PHY_UNTESTEN | PHY_TESTDOUT(0) |
367                                           PHY_TESTDIN(test_data));
368
369         dsi_write(dsi, DSI_PHY_TST_CTRL0, PHY_TESTCLK | PHY_UNTESTCLR);
370 }
371
372 /*
373  * ns2bc - Nanoseconds to byte clock cycles
374  */
375 static inline unsigned int ns2bc(struct dw_mipi_dsi_rockchip *dsi, int ns)
376 {
377         return DIV_ROUND_UP(ns * dsi->lane_mbps / 8, 1000);
378 }
379
380 /*
381  * ns2ui - Nanoseconds to UI time periods
382  */
383 static inline unsigned int ns2ui(struct dw_mipi_dsi_rockchip *dsi, int ns)
384 {
385         return DIV_ROUND_UP(ns * dsi->lane_mbps, 1000);
386 }
387
388 static int dw_mipi_dsi_phy_init(void *priv_data)
389 {
390         struct dw_mipi_dsi_rockchip *dsi = priv_data;
391         int ret, i, vco;
392
393         if (dsi->phy)
394                 return 0;
395
396         /*
397          * Get vco from frequency(lane_mbps)
398          * vco  frequency table
399          * 000 - between   80 and  200 MHz
400          * 001 - between  200 and  300 MHz
401          * 010 - between  300 and  500 MHz
402          * 011 - between  500 and  700 MHz
403          * 100 - between  700 and  900 MHz
404          * 101 - between  900 and 1100 MHz
405          * 110 - between 1100 and 1300 MHz
406          * 111 - between 1300 and 1500 MHz
407          */
408         vco = (dsi->lane_mbps < 200) ? 0 : (dsi->lane_mbps + 100) / 200;
409
410         i = max_mbps_to_parameter(dsi->lane_mbps);
411         if (i < 0) {
412                 DRM_DEV_ERROR(dsi->dev,
413                               "failed to get parameter for %dmbps clock\n",
414                               dsi->lane_mbps);
415                 return i;
416         }
417
418         ret = clk_prepare_enable(dsi->phy_cfg_clk);
419         if (ret) {
420                 DRM_DEV_ERROR(dsi->dev, "Failed to enable phy_cfg_clk\n");
421                 return ret;
422         }
423
424         dw_mipi_dsi_phy_write(dsi, PLL_BIAS_CUR_SEL_CAP_VCO_CONTROL,
425                               BYPASS_VCO_RANGE |
426                               VCO_RANGE_CON_SEL(vco) |
427                               VCO_IN_CAP_CON_LOW |
428                               REF_BIAS_CUR_SEL);
429
430         dw_mipi_dsi_phy_write(dsi, PLL_CP_CONTROL_PLL_LOCK_BYPASS,
431                               CP_CURRENT_SEL(dppa_map[i].icpctrl));
432         dw_mipi_dsi_phy_write(dsi, PLL_LPF_AND_CP_CONTROL,
433                               CP_PROGRAM_EN | LPF_PROGRAM_EN |
434                               LPF_RESISTORS_SEL(dppa_map[i].lpfctrl));
435
436         dw_mipi_dsi_phy_write(dsi, HS_RX_CONTROL_OF_LANE_0,
437                               HSFREQRANGE_SEL(dppa_map[i].hsfreqrange));
438
439         dw_mipi_dsi_phy_write(dsi, PLL_INPUT_DIVIDER_RATIO,
440                               INPUT_DIVIDER(dsi->input_div));
441         dw_mipi_dsi_phy_write(dsi, PLL_LOOP_DIVIDER_RATIO,
442                               LOOP_DIV_LOW_SEL(dsi->feedback_div) |
443                               LOW_PROGRAM_EN);
444         /*
445          * We need set PLL_INPUT_AND_LOOP_DIVIDER_RATIOS_CONTROL immediately
446          * to make the configured LSB effective according to IP simulation
447          * and lab test results.
448          * Only in this way can we get correct mipi phy pll frequency.
449          */
450         dw_mipi_dsi_phy_write(dsi, PLL_INPUT_AND_LOOP_DIVIDER_RATIOS_CONTROL,
451                               PLL_LOOP_DIV_EN | PLL_INPUT_DIV_EN);
452         dw_mipi_dsi_phy_write(dsi, PLL_LOOP_DIVIDER_RATIO,
453                               LOOP_DIV_HIGH_SEL(dsi->feedback_div) |
454                               HIGH_PROGRAM_EN);
455         dw_mipi_dsi_phy_write(dsi, PLL_INPUT_AND_LOOP_DIVIDER_RATIOS_CONTROL,
456                               PLL_LOOP_DIV_EN | PLL_INPUT_DIV_EN);
457
458         dw_mipi_dsi_phy_write(dsi, AFE_BIAS_BANDGAP_ANALOG_PROGRAMMABILITY,
459                               LOW_PROGRAM_EN | BIASEXTR_SEL(BIASEXTR_127_7));
460         dw_mipi_dsi_phy_write(dsi, AFE_BIAS_BANDGAP_ANALOG_PROGRAMMABILITY,
461                               HIGH_PROGRAM_EN | BANDGAP_SEL(BANDGAP_96_10));
462
463         dw_mipi_dsi_phy_write(dsi, BANDGAP_AND_BIAS_CONTROL,
464                               POWER_CONTROL | INTERNAL_REG_CURRENT |
465                               BIAS_BLOCK_ON | BANDGAP_ON);
466
467         dw_mipi_dsi_phy_write(dsi, TERMINATION_RESISTER_CONTROL,
468                               TER_RESISTOR_LOW | TER_CAL_DONE |
469                               SETRD_MAX | TER_RESISTORS_ON);
470         dw_mipi_dsi_phy_write(dsi, TERMINATION_RESISTER_CONTROL,
471                               TER_RESISTOR_HIGH | LEVEL_SHIFTERS_ON |
472                               SETRD_MAX | POWER_MANAGE |
473                               TER_RESISTORS_ON);
474
475         dw_mipi_dsi_phy_write(dsi, HS_TX_CLOCK_LANE_REQUEST_STATE_TIME_CONTROL,
476                               TLP_PROGRAM_EN | ns2bc(dsi, 500));
477         dw_mipi_dsi_phy_write(dsi, HS_TX_CLOCK_LANE_PREPARE_STATE_TIME_CONTROL,
478                               THS_PRE_PROGRAM_EN | ns2ui(dsi, 40));
479         dw_mipi_dsi_phy_write(dsi, HS_TX_CLOCK_LANE_HS_ZERO_STATE_TIME_CONTROL,
480                               THS_ZERO_PROGRAM_EN | ns2bc(dsi, 300));
481         dw_mipi_dsi_phy_write(dsi, HS_TX_CLOCK_LANE_TRAIL_STATE_TIME_CONTROL,
482                               THS_PRE_PROGRAM_EN | ns2ui(dsi, 100));
483         dw_mipi_dsi_phy_write(dsi, HS_TX_CLOCK_LANE_EXIT_STATE_TIME_CONTROL,
484                               BIT(5) | ns2bc(dsi, 100));
485         dw_mipi_dsi_phy_write(dsi, HS_TX_CLOCK_LANE_POST_TIME_CONTROL,
486                               BIT(5) | (ns2bc(dsi, 60) + 7));
487
488         dw_mipi_dsi_phy_write(dsi, HS_TX_DATA_LANE_REQUEST_STATE_TIME_CONTROL,
489                               TLP_PROGRAM_EN | ns2bc(dsi, 500));
490         dw_mipi_dsi_phy_write(dsi, HS_TX_DATA_LANE_PREPARE_STATE_TIME_CONTROL,
491                               THS_PRE_PROGRAM_EN | (ns2ui(dsi, 50) + 20));
492         dw_mipi_dsi_phy_write(dsi, HS_TX_DATA_LANE_HS_ZERO_STATE_TIME_CONTROL,
493                               THS_ZERO_PROGRAM_EN | (ns2bc(dsi, 140) + 2));
494         dw_mipi_dsi_phy_write(dsi, HS_TX_DATA_LANE_TRAIL_STATE_TIME_CONTROL,
495                               THS_PRE_PROGRAM_EN | (ns2ui(dsi, 60) + 8));
496         dw_mipi_dsi_phy_write(dsi, HS_TX_DATA_LANE_EXIT_STATE_TIME_CONTROL,
497                               BIT(5) | ns2bc(dsi, 100));
498
499         clk_disable_unprepare(dsi->phy_cfg_clk);
500
501         return ret;
502 }
503
504 static void dw_mipi_dsi_phy_power_on(void *priv_data)
505 {
506         struct dw_mipi_dsi_rockchip *dsi = priv_data;
507         int ret;
508
509         ret = phy_set_mode(dsi->phy, PHY_MODE_MIPI_DPHY);
510         if (ret) {
511                 DRM_DEV_ERROR(dsi->dev, "failed to set phy mode: %d\n", ret);
512                 return;
513         }
514
515         phy_configure(dsi->phy, &dsi->phy_opts);
516         phy_power_on(dsi->phy);
517 }
518
519 static void dw_mipi_dsi_phy_power_off(void *priv_data)
520 {
521         struct dw_mipi_dsi_rockchip *dsi = priv_data;
522
523         phy_power_off(dsi->phy);
524 }
525
526 static int
527 dw_mipi_dsi_get_lane_mbps(void *priv_data, const struct drm_display_mode *mode,
528                           unsigned long mode_flags, u32 lanes, u32 format,
529                           unsigned int *lane_mbps)
530 {
531         struct dw_mipi_dsi_rockchip *dsi = priv_data;
532         int bpp;
533         unsigned long mpclk, tmp;
534         unsigned int target_mbps = 1000;
535         unsigned int max_mbps = dppa_map[ARRAY_SIZE(dppa_map) - 1].max_mbps;
536         unsigned long best_freq = 0;
537         unsigned long fvco_min, fvco_max, fin, fout;
538         unsigned int min_prediv, max_prediv;
539         unsigned int _prediv, best_prediv;
540         unsigned long _fbdiv, best_fbdiv;
541         unsigned long min_delta = ULONG_MAX;
542
543         dsi->format = format;
544         bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
545         if (bpp < 0) {
546                 DRM_DEV_ERROR(dsi->dev,
547                               "failed to get bpp for pixel format %d\n",
548                               dsi->format);
549                 return bpp;
550         }
551
552         mpclk = DIV_ROUND_UP(mode->clock, MSEC_PER_SEC);
553         if (mpclk) {
554                 /* take 1 / 0.8, since mbps must big than bandwidth of RGB */
555                 tmp = mpclk * (bpp / lanes) * 10 / 8;
556                 if (tmp < max_mbps)
557                         target_mbps = tmp;
558                 else
559                         DRM_DEV_ERROR(dsi->dev,
560                                       "DPHY clock frequency is out of range\n");
561         }
562
563         /* for external phy only a the mipi_dphy_config is necessary */
564         if (dsi->phy) {
565                 phy_mipi_dphy_get_default_config(mode->clock * 1000 * 10 / 8,
566                                                  bpp, lanes,
567                                                  &dsi->phy_opts.mipi_dphy);
568                 dsi->lane_mbps = target_mbps;
569                 *lane_mbps = dsi->lane_mbps;
570
571                 return 0;
572         }
573
574         fin = clk_get_rate(dsi->pllref_clk);
575         fout = target_mbps * USEC_PER_SEC;
576
577         /* constraint: 5Mhz <= Fref / N <= 40MHz */
578         min_prediv = DIV_ROUND_UP(fin, 40 * USEC_PER_SEC);
579         max_prediv = fin / (5 * USEC_PER_SEC);
580
581         /* constraint: 80MHz <= Fvco <= 1500Mhz */
582         fvco_min = 80 * USEC_PER_SEC;
583         fvco_max = 1500 * USEC_PER_SEC;
584
585         for (_prediv = min_prediv; _prediv <= max_prediv; _prediv++) {
586                 u64 tmp;
587                 u32 delta;
588                 /* Fvco = Fref * M / N */
589                 tmp = (u64)fout * _prediv;
590                 do_div(tmp, fin);
591                 _fbdiv = tmp;
592                 /*
593                  * Due to the use of a "by 2 pre-scaler," the range of the
594                  * feedback multiplication value M is limited to even division
595                  * numbers, and m must be greater than 6, not bigger than 512.
596                  */
597                 if (_fbdiv < 6 || _fbdiv > 512)
598                         continue;
599
600                 _fbdiv += _fbdiv % 2;
601
602                 tmp = (u64)_fbdiv * fin;
603                 do_div(tmp, _prediv);
604                 if (tmp < fvco_min || tmp > fvco_max)
605                         continue;
606
607                 delta = abs(fout - tmp);
608                 if (delta < min_delta) {
609                         best_prediv = _prediv;
610                         best_fbdiv = _fbdiv;
611                         min_delta = delta;
612                         best_freq = tmp;
613                 }
614         }
615
616         if (best_freq) {
617                 dsi->lane_mbps = DIV_ROUND_UP(best_freq, USEC_PER_SEC);
618                 *lane_mbps = dsi->lane_mbps;
619                 dsi->input_div = best_prediv;
620                 dsi->feedback_div = best_fbdiv;
621         } else {
622                 DRM_DEV_ERROR(dsi->dev, "Can not find best_freq for DPHY\n");
623                 return -EINVAL;
624         }
625
626         return 0;
627 }
628
629 struct hstt {
630         unsigned int maxfreq;
631         struct dw_mipi_dsi_dphy_timing timing;
632 };
633
634 #define HSTT(_maxfreq, _c_lp2hs, _c_hs2lp, _d_lp2hs, _d_hs2lp)  \
635 {                                       \
636         .maxfreq = _maxfreq,            \
637         .timing = {                     \
638                 .clk_lp2hs = _c_lp2hs,  \
639                 .clk_hs2lp = _c_hs2lp,  \
640                 .data_lp2hs = _d_lp2hs, \
641                 .data_hs2lp = _d_hs2lp, \
642         }                               \
643 }
644
645 /* Table A-3 High-Speed Transition Times */
646 struct hstt hstt_table[] = {
647         HSTT(  90,  32, 20,  26, 13),
648         HSTT( 100,  35, 23,  28, 14),
649         HSTT( 110,  32, 22,  26, 13),
650         HSTT( 130,  31, 20,  27, 13),
651         HSTT( 140,  33, 22,  26, 14),
652         HSTT( 150,  33, 21,  26, 14),
653         HSTT( 170,  32, 20,  27, 13),
654         HSTT( 180,  36, 23,  30, 15),
655         HSTT( 200,  40, 22,  33, 15),
656         HSTT( 220,  40, 22,  33, 15),
657         HSTT( 240,  44, 24,  36, 16),
658         HSTT( 250,  48, 24,  38, 17),
659         HSTT( 270,  48, 24,  38, 17),
660         HSTT( 300,  50, 27,  41, 18),
661         HSTT( 330,  56, 28,  45, 18),
662         HSTT( 360,  59, 28,  48, 19),
663         HSTT( 400,  61, 30,  50, 20),
664         HSTT( 450,  67, 31,  55, 21),
665         HSTT( 500,  73, 31,  59, 22),
666         HSTT( 550,  79, 36,  63, 24),
667         HSTT( 600,  83, 37,  68, 25),
668         HSTT( 650,  90, 38,  73, 27),
669         HSTT( 700,  95, 40,  77, 28),
670         HSTT( 750, 102, 40,  84, 28),
671         HSTT( 800, 106, 42,  87, 30),
672         HSTT( 850, 113, 44,  93, 31),
673         HSTT( 900, 118, 47,  98, 32),
674         HSTT( 950, 124, 47, 102, 34),
675         HSTT(1000, 130, 49, 107, 35),
676         HSTT(1050, 135, 51, 111, 37),
677         HSTT(1100, 139, 51, 114, 38),
678         HSTT(1150, 146, 54, 120, 40),
679         HSTT(1200, 153, 57, 125, 41),
680         HSTT(1250, 158, 58, 130, 42),
681         HSTT(1300, 163, 58, 135, 44),
682         HSTT(1350, 168, 60, 140, 45),
683         HSTT(1400, 172, 64, 144, 47),
684         HSTT(1450, 176, 65, 148, 48),
685         HSTT(1500, 181, 66, 153, 50)
686 };
687
688 static int
689 dw_mipi_dsi_phy_get_timing(void *priv_data, unsigned int lane_mbps,
690                            struct dw_mipi_dsi_dphy_timing *timing)
691 {
692         int i;
693
694         for (i = 0; i < ARRAY_SIZE(hstt_table); i++)
695                 if (lane_mbps < hstt_table[i].maxfreq)
696                         break;
697
698         if (i == ARRAY_SIZE(hstt_table))
699                 i--;
700
701         *timing = hstt_table[i].timing;
702
703         return 0;
704 }
705
706 static const struct dw_mipi_dsi_phy_ops dw_mipi_dsi_rockchip_phy_ops = {
707         .init = dw_mipi_dsi_phy_init,
708         .power_on = dw_mipi_dsi_phy_power_on,
709         .power_off = dw_mipi_dsi_phy_power_off,
710         .get_lane_mbps = dw_mipi_dsi_get_lane_mbps,
711         .get_timing = dw_mipi_dsi_phy_get_timing,
712 };
713
714 static void dw_mipi_dsi_rockchip_config(struct dw_mipi_dsi_rockchip *dsi)
715 {
716         if (dsi->cdata->lanecfg1_grf_reg)
717                 regmap_write(dsi->grf_regmap, dsi->cdata->lanecfg1_grf_reg,
718                                               dsi->cdata->lanecfg1);
719
720         if (dsi->cdata->lanecfg2_grf_reg)
721                 regmap_write(dsi->grf_regmap, dsi->cdata->lanecfg2_grf_reg,
722                                               dsi->cdata->lanecfg2);
723
724         if (dsi->cdata->enable_grf_reg)
725                 regmap_write(dsi->grf_regmap, dsi->cdata->enable_grf_reg,
726                                               dsi->cdata->enable);
727 }
728
729 static void dw_mipi_dsi_rockchip_set_lcdsel(struct dw_mipi_dsi_rockchip *dsi,
730                                             int mux)
731 {
732         regmap_write(dsi->grf_regmap, dsi->cdata->lcdsel_grf_reg,
733                 mux ? dsi->cdata->lcdsel_lit : dsi->cdata->lcdsel_big);
734 }
735
736 static int
737 dw_mipi_dsi_encoder_atomic_check(struct drm_encoder *encoder,
738                                  struct drm_crtc_state *crtc_state,
739                                  struct drm_connector_state *conn_state)
740 {
741         struct rockchip_crtc_state *s = to_rockchip_crtc_state(crtc_state);
742         struct dw_mipi_dsi_rockchip *dsi = to_dsi(encoder);
743
744         switch (dsi->format) {
745         case MIPI_DSI_FMT_RGB888:
746                 s->output_mode = ROCKCHIP_OUT_MODE_P888;
747                 break;
748         case MIPI_DSI_FMT_RGB666:
749                 s->output_mode = ROCKCHIP_OUT_MODE_P666;
750                 break;
751         case MIPI_DSI_FMT_RGB565:
752                 s->output_mode = ROCKCHIP_OUT_MODE_P565;
753                 break;
754         default:
755                 WARN_ON(1);
756                 return -EINVAL;
757         }
758
759         s->output_type = DRM_MODE_CONNECTOR_DSI;
760         if (dsi->slave)
761                 s->output_flags = ROCKCHIP_OUTPUT_DSI_DUAL;
762
763         return 0;
764 }
765
766 static void dw_mipi_dsi_encoder_enable(struct drm_encoder *encoder)
767 {
768         struct dw_mipi_dsi_rockchip *dsi = to_dsi(encoder);
769         int ret, mux;
770
771         mux = drm_of_encoder_active_endpoint_id(dsi->dev->of_node,
772                                                 &dsi->encoder);
773         if (mux < 0)
774                 return;
775
776         pm_runtime_get_sync(dsi->dev);
777         if (dsi->slave)
778                 pm_runtime_get_sync(dsi->slave->dev);
779
780         /*
781          * For the RK3399, the clk of grf must be enabled before writing grf
782          * register. And for RK3288 or other soc, this grf_clk must be NULL,
783          * the clk_prepare_enable return true directly.
784          */
785         ret = clk_prepare_enable(dsi->grf_clk);
786         if (ret) {
787                 DRM_DEV_ERROR(dsi->dev, "Failed to enable grf_clk: %d\n", ret);
788                 return;
789         }
790
791         dw_mipi_dsi_rockchip_set_lcdsel(dsi, mux);
792         if (dsi->slave)
793                 dw_mipi_dsi_rockchip_set_lcdsel(dsi->slave, mux);
794
795         clk_disable_unprepare(dsi->grf_clk);
796 }
797
798 static void dw_mipi_dsi_encoder_disable(struct drm_encoder *encoder)
799 {
800         struct dw_mipi_dsi_rockchip *dsi = to_dsi(encoder);
801
802         if (dsi->slave)
803                 pm_runtime_put(dsi->slave->dev);
804         pm_runtime_put(dsi->dev);
805 }
806
807 static const struct drm_encoder_helper_funcs
808 dw_mipi_dsi_encoder_helper_funcs = {
809         .atomic_check = dw_mipi_dsi_encoder_atomic_check,
810         .enable = dw_mipi_dsi_encoder_enable,
811         .disable = dw_mipi_dsi_encoder_disable,
812 };
813
814 static int rockchip_dsi_drm_create_encoder(struct dw_mipi_dsi_rockchip *dsi,
815                                            struct drm_device *drm_dev)
816 {
817         struct drm_encoder *encoder = &dsi->encoder;
818         int ret;
819
820         encoder->possible_crtcs = drm_of_find_possible_crtcs(drm_dev,
821                                                              dsi->dev->of_node);
822
823         ret = drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_DSI);
824         if (ret) {
825                 DRM_ERROR("Failed to initialize encoder with drm\n");
826                 return ret;
827         }
828
829         drm_encoder_helper_add(encoder, &dw_mipi_dsi_encoder_helper_funcs);
830
831         return 0;
832 }
833
834 static struct device
835 *dw_mipi_dsi_rockchip_find_second(struct dw_mipi_dsi_rockchip *dsi)
836 {
837         const struct of_device_id *match;
838         struct device_node *node = NULL, *local;
839
840         match = of_match_device(dsi->dev->driver->of_match_table, dsi->dev);
841
842         local = of_graph_get_remote_node(dsi->dev->of_node, 1, 0);
843         if (!local)
844                 return NULL;
845
846         while ((node = of_find_compatible_node(node, NULL,
847                                                match->compatible))) {
848                 struct device_node *remote;
849
850                 /* found ourself */
851                 if (node == dsi->dev->of_node)
852                         continue;
853
854                 remote = of_graph_get_remote_node(node, 1, 0);
855                 if (!remote)
856                         continue;
857
858                 /* same display device in port1-ep0 for both */
859                 if (remote == local) {
860                         struct dw_mipi_dsi_rockchip *dsi2;
861                         struct platform_device *pdev;
862
863                         pdev = of_find_device_by_node(node);
864
865                         /*
866                          * we have found the second, so will either return it
867                          * or return with an error. In any case won't need the
868                          * nodes anymore nor continue the loop.
869                          */
870                         of_node_put(remote);
871                         of_node_put(node);
872                         of_node_put(local);
873
874                         if (!pdev)
875                                 return ERR_PTR(-EPROBE_DEFER);
876
877                         dsi2 = platform_get_drvdata(pdev);
878                         if (!dsi2) {
879                                 platform_device_put(pdev);
880                                 return ERR_PTR(-EPROBE_DEFER);
881                         }
882
883                         return &pdev->dev;
884                 }
885
886                 of_node_put(remote);
887         }
888
889         of_node_put(local);
890
891         return NULL;
892 }
893
894 static int dw_mipi_dsi_rockchip_bind(struct device *dev,
895                                      struct device *master,
896                                      void *data)
897 {
898         struct dw_mipi_dsi_rockchip *dsi = dev_get_drvdata(dev);
899         struct drm_device *drm_dev = data;
900         struct device *second;
901         bool master1, master2;
902         int ret;
903
904         second = dw_mipi_dsi_rockchip_find_second(dsi);
905         if (IS_ERR(second))
906                 return PTR_ERR(second);
907
908         if (second) {
909                 master1 = of_property_read_bool(dsi->dev->of_node,
910                                                 "clock-master");
911                 master2 = of_property_read_bool(second->of_node,
912                                                 "clock-master");
913
914                 if (master1 && master2) {
915                         DRM_DEV_ERROR(dsi->dev, "only one clock-master allowed\n");
916                         return -EINVAL;
917                 }
918
919                 if (!master1 && !master2) {
920                         DRM_DEV_ERROR(dsi->dev, "no clock-master defined\n");
921                         return -EINVAL;
922                 }
923
924                 /* we are the slave in dual-DSI */
925                 if (!master1) {
926                         dsi->is_slave = true;
927                         return 0;
928                 }
929
930                 dsi->slave = dev_get_drvdata(second);
931                 if (!dsi->slave) {
932                         DRM_DEV_ERROR(dev, "could not get slaves data\n");
933                         return -ENODEV;
934                 }
935
936                 dsi->slave->is_slave = true;
937                 dw_mipi_dsi_set_slave(dsi->dmd, dsi->slave->dmd);
938                 put_device(second);
939         }
940
941         ret = clk_prepare_enable(dsi->pllref_clk);
942         if (ret) {
943                 DRM_DEV_ERROR(dev, "Failed to enable pllref_clk: %d\n", ret);
944                 return ret;
945         }
946
947         /*
948          * With the GRF clock running, write lane and dual-mode configurations
949          * that won't change immediately. If we waited until enable() to do
950          * this, things like panel preparation would not be able to send
951          * commands over DSI.
952          */
953         ret = clk_prepare_enable(dsi->grf_clk);
954         if (ret) {
955                 DRM_DEV_ERROR(dsi->dev, "Failed to enable grf_clk: %d\n", ret);
956                 return ret;
957         }
958
959         dw_mipi_dsi_rockchip_config(dsi);
960         if (dsi->slave)
961                 dw_mipi_dsi_rockchip_config(dsi->slave);
962
963         clk_disable_unprepare(dsi->grf_clk);
964
965         ret = rockchip_dsi_drm_create_encoder(dsi, drm_dev);
966         if (ret) {
967                 DRM_DEV_ERROR(dev, "Failed to create drm encoder\n");
968                 return ret;
969         }
970
971         ret = dw_mipi_dsi_bind(dsi->dmd, &dsi->encoder);
972         if (ret) {
973                 DRM_DEV_ERROR(dev, "Failed to bind: %d\n", ret);
974                 return ret;
975         }
976
977         return 0;
978 }
979
980 static void dw_mipi_dsi_rockchip_unbind(struct device *dev,
981                                         struct device *master,
982                                         void *data)
983 {
984         struct dw_mipi_dsi_rockchip *dsi = dev_get_drvdata(dev);
985
986         if (dsi->is_slave)
987                 return;
988
989         dw_mipi_dsi_unbind(dsi->dmd);
990
991         clk_disable_unprepare(dsi->pllref_clk);
992 }
993
994 static const struct component_ops dw_mipi_dsi_rockchip_ops = {
995         .bind   = dw_mipi_dsi_rockchip_bind,
996         .unbind = dw_mipi_dsi_rockchip_unbind,
997 };
998
999 static int dw_mipi_dsi_rockchip_host_attach(void *priv_data,
1000                                             struct mipi_dsi_device *device)
1001 {
1002         struct dw_mipi_dsi_rockchip *dsi = priv_data;
1003         struct device *second;
1004         int ret;
1005
1006         mutex_lock(&dsi->usage_mutex);
1007
1008         if (dsi->usage_mode != DW_DSI_USAGE_IDLE) {
1009                 DRM_DEV_ERROR(dsi->dev, "dsi controller already in use\n");
1010                 mutex_unlock(&dsi->usage_mutex);
1011                 return -EBUSY;
1012         }
1013
1014         dsi->usage_mode = DW_DSI_USAGE_DSI;
1015         mutex_unlock(&dsi->usage_mutex);
1016
1017         ret = component_add(dsi->dev, &dw_mipi_dsi_rockchip_ops);
1018         if (ret) {
1019                 DRM_DEV_ERROR(dsi->dev, "Failed to register component: %d\n",
1020                                         ret);
1021                 return ret;
1022         }
1023
1024         second = dw_mipi_dsi_rockchip_find_second(dsi);
1025         if (IS_ERR(second))
1026                 return PTR_ERR(second);
1027         if (second) {
1028                 ret = component_add(second, &dw_mipi_dsi_rockchip_ops);
1029                 if (ret) {
1030                         DRM_DEV_ERROR(second,
1031                                       "Failed to register component: %d\n",
1032                                       ret);
1033                         return ret;
1034                 }
1035         }
1036
1037         return 0;
1038 }
1039
1040 static int dw_mipi_dsi_rockchip_host_detach(void *priv_data,
1041                                             struct mipi_dsi_device *device)
1042 {
1043         struct dw_mipi_dsi_rockchip *dsi = priv_data;
1044         struct device *second;
1045
1046         second = dw_mipi_dsi_rockchip_find_second(dsi);
1047         if (second && !IS_ERR(second))
1048                 component_del(second, &dw_mipi_dsi_rockchip_ops);
1049
1050         component_del(dsi->dev, &dw_mipi_dsi_rockchip_ops);
1051
1052         mutex_lock(&dsi->usage_mutex);
1053         dsi->usage_mode = DW_DSI_USAGE_IDLE;
1054         mutex_unlock(&dsi->usage_mutex);
1055
1056         return 0;
1057 }
1058
1059 static const struct dw_mipi_dsi_host_ops dw_mipi_dsi_rockchip_host_ops = {
1060         .attach = dw_mipi_dsi_rockchip_host_attach,
1061         .detach = dw_mipi_dsi_rockchip_host_detach,
1062 };
1063
1064 static int dw_mipi_dsi_rockchip_dphy_bind(struct device *dev,
1065                                           struct device *master,
1066                                           void *data)
1067 {
1068         /*
1069          * Nothing to do when used as a dphy.
1070          * Just make the rest of Rockchip-DRM happy
1071          * by being here.
1072          */
1073
1074         return 0;
1075 }
1076
1077 static void dw_mipi_dsi_rockchip_dphy_unbind(struct device *dev,
1078                                              struct device *master,
1079                                              void *data)
1080 {
1081         /* Nothing to do when used as a dphy. */
1082 }
1083
1084 static const struct component_ops dw_mipi_dsi_rockchip_dphy_ops = {
1085         .bind   = dw_mipi_dsi_rockchip_dphy_bind,
1086         .unbind = dw_mipi_dsi_rockchip_dphy_unbind,
1087 };
1088
1089 static int dw_mipi_dsi_dphy_init(struct phy *phy)
1090 {
1091         struct dw_mipi_dsi_rockchip *dsi = phy_get_drvdata(phy);
1092         int ret;
1093
1094         mutex_lock(&dsi->usage_mutex);
1095
1096         if (dsi->usage_mode != DW_DSI_USAGE_IDLE) {
1097                 DRM_DEV_ERROR(dsi->dev, "dsi controller already in use\n");
1098                 mutex_unlock(&dsi->usage_mutex);
1099                 return -EBUSY;
1100         }
1101
1102         dsi->usage_mode = DW_DSI_USAGE_PHY;
1103         mutex_unlock(&dsi->usage_mutex);
1104
1105         ret = component_add(dsi->dev, &dw_mipi_dsi_rockchip_dphy_ops);
1106         if (ret < 0)
1107                 goto err_graph;
1108
1109         if (dsi->cdata->dphy_rx_init) {
1110                 ret = clk_prepare_enable(dsi->pclk);
1111                 if (ret < 0)
1112                         goto err_init;
1113
1114                 ret = clk_prepare_enable(dsi->grf_clk);
1115                 if (ret) {
1116                         clk_disable_unprepare(dsi->pclk);
1117                         goto err_init;
1118                 }
1119
1120                 ret = dsi->cdata->dphy_rx_init(phy);
1121                 clk_disable_unprepare(dsi->grf_clk);
1122                 clk_disable_unprepare(dsi->pclk);
1123                 if (ret < 0)
1124                         goto err_init;
1125         }
1126
1127         return 0;
1128
1129 err_init:
1130         component_del(dsi->dev, &dw_mipi_dsi_rockchip_dphy_ops);
1131 err_graph:
1132         mutex_lock(&dsi->usage_mutex);
1133         dsi->usage_mode = DW_DSI_USAGE_IDLE;
1134         mutex_unlock(&dsi->usage_mutex);
1135
1136         return ret;
1137 }
1138
1139 static int dw_mipi_dsi_dphy_exit(struct phy *phy)
1140 {
1141         struct dw_mipi_dsi_rockchip *dsi = phy_get_drvdata(phy);
1142
1143         component_del(dsi->dev, &dw_mipi_dsi_rockchip_dphy_ops);
1144
1145         mutex_lock(&dsi->usage_mutex);
1146         dsi->usage_mode = DW_DSI_USAGE_IDLE;
1147         mutex_unlock(&dsi->usage_mutex);
1148
1149         return 0;
1150 }
1151
1152 static int dw_mipi_dsi_dphy_configure(struct phy *phy, union phy_configure_opts *opts)
1153 {
1154         struct phy_configure_opts_mipi_dphy *config = &opts->mipi_dphy;
1155         struct dw_mipi_dsi_rockchip *dsi = phy_get_drvdata(phy);
1156         int ret;
1157
1158         ret = phy_mipi_dphy_config_validate(&opts->mipi_dphy);
1159         if (ret)
1160                 return ret;
1161
1162         dsi->dphy_config = *config;
1163         dsi->lane_mbps = div_u64(config->hs_clk_rate, 1000 * 1000 * 1);
1164
1165         return 0;
1166 }
1167
1168 static int dw_mipi_dsi_dphy_power_on(struct phy *phy)
1169 {
1170         struct dw_mipi_dsi_rockchip *dsi = phy_get_drvdata(phy);
1171         int i, ret;
1172
1173         DRM_DEV_DEBUG(dsi->dev, "lanes %d - data_rate_mbps %u\n",
1174                       dsi->dphy_config.lanes, dsi->lane_mbps);
1175
1176         i = max_mbps_to_parameter(dsi->lane_mbps);
1177         if (i < 0) {
1178                 DRM_DEV_ERROR(dsi->dev, "failed to get parameter for %dmbps clock\n",
1179                               dsi->lane_mbps);
1180                 return i;
1181         }
1182
1183         ret = pm_runtime_get_sync(dsi->dev);
1184         if (ret < 0) {
1185                 DRM_DEV_ERROR(dsi->dev, "failed to enable device: %d\n", ret);
1186                 return ret;
1187         }
1188
1189         ret = clk_prepare_enable(dsi->pclk);
1190         if (ret) {
1191                 DRM_DEV_ERROR(dsi->dev, "Failed to enable pclk: %d\n", ret);
1192                 goto err_pclk;
1193         }
1194
1195         ret = clk_prepare_enable(dsi->grf_clk);
1196         if (ret) {
1197                 DRM_DEV_ERROR(dsi->dev, "Failed to enable grf_clk: %d\n", ret);
1198                 goto err_grf_clk;
1199         }
1200
1201         ret = clk_prepare_enable(dsi->phy_cfg_clk);
1202         if (ret) {
1203                 DRM_DEV_ERROR(dsi->dev, "Failed to enable phy_cfg_clk: %d\n", ret);
1204                 goto err_phy_cfg_clk;
1205         }
1206
1207         /* do soc-variant specific init */
1208         if (dsi->cdata->dphy_rx_power_on) {
1209                 ret = dsi->cdata->dphy_rx_power_on(phy);
1210                 if (ret < 0) {
1211                         DRM_DEV_ERROR(dsi->dev, "hardware-specific phy bringup failed: %d\n", ret);
1212                         goto err_pwr_on;
1213                 }
1214         }
1215
1216         /*
1217          * Configure hsfreqrange according to frequency values
1218          * Set clock lane and hsfreqrange by lane0(test code 0x44)
1219          */
1220         dw_mipi_dsi_phy_write(dsi, HS_RX_CONTROL_OF_LANE_CLK, 0);
1221         dw_mipi_dsi_phy_write(dsi, HS_RX_CONTROL_OF_LANE_0,
1222                               HSFREQRANGE_SEL(dppa_map[i].hsfreqrange));
1223         dw_mipi_dsi_phy_write(dsi, HS_RX_CONTROL_OF_LANE_1, 0);
1224         dw_mipi_dsi_phy_write(dsi, HS_RX_CONTROL_OF_LANE_2, 0);
1225         dw_mipi_dsi_phy_write(dsi, HS_RX_CONTROL_OF_LANE_3, 0);
1226
1227         /* Normal operation */
1228         dw_mipi_dsi_phy_write(dsi, 0x0, 0);
1229
1230         clk_disable_unprepare(dsi->phy_cfg_clk);
1231         clk_disable_unprepare(dsi->grf_clk);
1232
1233         return ret;
1234
1235 err_pwr_on:
1236         clk_disable_unprepare(dsi->phy_cfg_clk);
1237 err_phy_cfg_clk:
1238         clk_disable_unprepare(dsi->grf_clk);
1239 err_grf_clk:
1240         clk_disable_unprepare(dsi->pclk);
1241 err_pclk:
1242         pm_runtime_put(dsi->dev);
1243         return ret;
1244 }
1245
1246 static int dw_mipi_dsi_dphy_power_off(struct phy *phy)
1247 {
1248         struct dw_mipi_dsi_rockchip *dsi = phy_get_drvdata(phy);
1249         int ret;
1250
1251         ret = clk_prepare_enable(dsi->grf_clk);
1252         if (ret) {
1253                 DRM_DEV_ERROR(dsi->dev, "Failed to enable grf_clk: %d\n", ret);
1254                 return ret;
1255         }
1256
1257         if (dsi->cdata->dphy_rx_power_off) {
1258                 ret = dsi->cdata->dphy_rx_power_off(phy);
1259                 if (ret < 0)
1260                         DRM_DEV_ERROR(dsi->dev, "hardware-specific phy shutdown failed: %d\n", ret);
1261         }
1262
1263         clk_disable_unprepare(dsi->grf_clk);
1264         clk_disable_unprepare(dsi->pclk);
1265
1266         pm_runtime_put(dsi->dev);
1267
1268         return ret;
1269 }
1270
1271 static const struct phy_ops dw_mipi_dsi_dphy_ops = {
1272         .configure      = dw_mipi_dsi_dphy_configure,
1273         .power_on       = dw_mipi_dsi_dphy_power_on,
1274         .power_off      = dw_mipi_dsi_dphy_power_off,
1275         .init           = dw_mipi_dsi_dphy_init,
1276         .exit           = dw_mipi_dsi_dphy_exit,
1277 };
1278
1279 static int dw_mipi_dsi_rockchip_probe(struct platform_device *pdev)
1280 {
1281         struct device *dev = &pdev->dev;
1282         struct device_node *np = dev->of_node;
1283         struct dw_mipi_dsi_rockchip *dsi;
1284         struct phy_provider *phy_provider;
1285         struct resource *res;
1286         const struct rockchip_dw_dsi_chip_data *cdata =
1287                                 of_device_get_match_data(dev);
1288         int ret, i;
1289
1290         dsi = devm_kzalloc(dev, sizeof(*dsi), GFP_KERNEL);
1291         if (!dsi)
1292                 return -ENOMEM;
1293
1294         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1295         dsi->base = devm_ioremap_resource(dev, res);
1296         if (IS_ERR(dsi->base)) {
1297                 DRM_DEV_ERROR(dev, "Unable to get dsi registers\n");
1298                 return PTR_ERR(dsi->base);
1299         }
1300
1301         i = 0;
1302         while (cdata[i].reg) {
1303                 if (cdata[i].reg == res->start) {
1304                         dsi->cdata = &cdata[i];
1305                         break;
1306                 }
1307
1308                 i++;
1309         }
1310
1311         if (!dsi->cdata) {
1312                 DRM_DEV_ERROR(dev, "no dsi-config for %s node\n", np->name);
1313                 return -EINVAL;
1314         }
1315
1316         /* try to get a possible external dphy */
1317         dsi->phy = devm_phy_optional_get(dev, "dphy");
1318         if (IS_ERR(dsi->phy)) {
1319                 ret = PTR_ERR(dsi->phy);
1320                 DRM_DEV_ERROR(dev, "failed to get mipi dphy: %d\n", ret);
1321                 return ret;
1322         }
1323
1324         dsi->pclk = devm_clk_get(dev, "pclk");
1325         if (IS_ERR(dsi->pclk)) {
1326                 ret = PTR_ERR(dsi->pclk);
1327                 DRM_DEV_ERROR(dev, "Unable to get pclk: %d\n", ret);
1328                 return ret;
1329         }
1330
1331         dsi->pllref_clk = devm_clk_get(dev, "ref");
1332         if (IS_ERR(dsi->pllref_clk)) {
1333                 if (dsi->phy) {
1334                         /*
1335                          * if external phy is present, pll will be
1336                          * generated there.
1337                          */
1338                         dsi->pllref_clk = NULL;
1339                 } else {
1340                         ret = PTR_ERR(dsi->pllref_clk);
1341                         DRM_DEV_ERROR(dev,
1342                                       "Unable to get pll reference clock: %d\n",
1343                                       ret);
1344                         return ret;
1345                 }
1346         }
1347
1348         if (dsi->cdata->flags & DW_MIPI_NEEDS_PHY_CFG_CLK) {
1349                 dsi->phy_cfg_clk = devm_clk_get(dev, "phy_cfg");
1350                 if (IS_ERR(dsi->phy_cfg_clk)) {
1351                         ret = PTR_ERR(dsi->phy_cfg_clk);
1352                         DRM_DEV_ERROR(dev,
1353                                       "Unable to get phy_cfg_clk: %d\n", ret);
1354                         return ret;
1355                 }
1356         }
1357
1358         if (dsi->cdata->flags & DW_MIPI_NEEDS_GRF_CLK) {
1359                 dsi->grf_clk = devm_clk_get(dev, "grf");
1360                 if (IS_ERR(dsi->grf_clk)) {
1361                         ret = PTR_ERR(dsi->grf_clk);
1362                         DRM_DEV_ERROR(dev, "Unable to get grf_clk: %d\n", ret);
1363                         return ret;
1364                 }
1365         }
1366
1367         dsi->grf_regmap = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
1368         if (IS_ERR(dsi->grf_regmap)) {
1369                 DRM_DEV_ERROR(dev, "Unable to get rockchip,grf\n");
1370                 return PTR_ERR(dsi->grf_regmap);
1371         }
1372
1373         dsi->dev = dev;
1374         dsi->pdata.base = dsi->base;
1375         dsi->pdata.max_data_lanes = dsi->cdata->max_data_lanes;
1376         dsi->pdata.phy_ops = &dw_mipi_dsi_rockchip_phy_ops;
1377         dsi->pdata.host_ops = &dw_mipi_dsi_rockchip_host_ops;
1378         dsi->pdata.priv_data = dsi;
1379         platform_set_drvdata(pdev, dsi);
1380
1381         mutex_init(&dsi->usage_mutex);
1382
1383         dsi->dphy = devm_phy_create(dev, NULL, &dw_mipi_dsi_dphy_ops);
1384         if (IS_ERR(dsi->dphy)) {
1385                 DRM_DEV_ERROR(&pdev->dev, "failed to create PHY\n");
1386                 return PTR_ERR(dsi->dphy);
1387         }
1388
1389         phy_set_drvdata(dsi->dphy, dsi);
1390         phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
1391         if (IS_ERR(phy_provider))
1392                 return PTR_ERR(phy_provider);
1393
1394         dsi->dmd = dw_mipi_dsi_probe(pdev, &dsi->pdata);
1395         if (IS_ERR(dsi->dmd)) {
1396                 ret = PTR_ERR(dsi->dmd);
1397                 if (ret != -EPROBE_DEFER)
1398                         DRM_DEV_ERROR(dev,
1399                                       "Failed to probe dw_mipi_dsi: %d\n", ret);
1400                 goto err_clkdisable;
1401         }
1402
1403         return 0;
1404
1405 err_clkdisable:
1406         clk_disable_unprepare(dsi->pllref_clk);
1407         return ret;
1408 }
1409
1410 static int dw_mipi_dsi_rockchip_remove(struct platform_device *pdev)
1411 {
1412         struct dw_mipi_dsi_rockchip *dsi = platform_get_drvdata(pdev);
1413
1414         dw_mipi_dsi_remove(dsi->dmd);
1415
1416         return 0;
1417 }
1418
1419 static const struct rockchip_dw_dsi_chip_data px30_chip_data[] = {
1420         {
1421                 .reg = 0xff450000,
1422                 .lcdsel_grf_reg = PX30_GRF_PD_VO_CON1,
1423                 .lcdsel_big = HIWORD_UPDATE(0, PX30_DSI_LCDC_SEL),
1424                 .lcdsel_lit = HIWORD_UPDATE(PX30_DSI_LCDC_SEL,
1425                                             PX30_DSI_LCDC_SEL),
1426
1427                 .lanecfg1_grf_reg = PX30_GRF_PD_VO_CON1,
1428                 .lanecfg1 = HIWORD_UPDATE(0, PX30_DSI_TURNDISABLE |
1429                                              PX30_DSI_FORCERXMODE |
1430                                              PX30_DSI_FORCETXSTOPMODE),
1431
1432                 .max_data_lanes = 4,
1433         },
1434         { /* sentinel */ }
1435 };
1436
1437 static const struct rockchip_dw_dsi_chip_data rk3288_chip_data[] = {
1438         {
1439                 .reg = 0xff960000,
1440                 .lcdsel_grf_reg = RK3288_GRF_SOC_CON6,
1441                 .lcdsel_big = HIWORD_UPDATE(0, RK3288_DSI0_LCDC_SEL),
1442                 .lcdsel_lit = HIWORD_UPDATE(RK3288_DSI0_LCDC_SEL, RK3288_DSI0_LCDC_SEL),
1443
1444                 .max_data_lanes = 4,
1445         },
1446         {
1447                 .reg = 0xff964000,
1448                 .lcdsel_grf_reg = RK3288_GRF_SOC_CON6,
1449                 .lcdsel_big = HIWORD_UPDATE(0, RK3288_DSI1_LCDC_SEL),
1450                 .lcdsel_lit = HIWORD_UPDATE(RK3288_DSI1_LCDC_SEL, RK3288_DSI1_LCDC_SEL),
1451
1452                 .max_data_lanes = 4,
1453         },
1454         { /* sentinel */ }
1455 };
1456
1457 static int rk3399_dphy_tx1rx1_init(struct phy *phy)
1458 {
1459         struct dw_mipi_dsi_rockchip *dsi = phy_get_drvdata(phy);
1460
1461         /*
1462          * Set TX1RX1 source to isp1.
1463          * Assume ISP0 is supplied by the RX0 dphy.
1464          */
1465         regmap_write(dsi->grf_regmap, RK3399_GRF_SOC_CON24,
1466                      HIWORD_UPDATE(0, RK3399_TXRX_SRC_SEL_ISP0));
1467         regmap_write(dsi->grf_regmap, RK3399_GRF_SOC_CON24,
1468                      HIWORD_UPDATE(0, RK3399_TXRX_MASTERSLAVEZ));
1469         regmap_write(dsi->grf_regmap, RK3399_GRF_SOC_CON24,
1470                      HIWORD_UPDATE(0, RK3399_TXRX_BASEDIR));
1471         regmap_write(dsi->grf_regmap, RK3399_GRF_SOC_CON23,
1472                      HIWORD_UPDATE(0, RK3399_DSI1_ENABLE));
1473
1474         return 0;
1475 }
1476
1477 static int rk3399_dphy_tx1rx1_power_on(struct phy *phy)
1478 {
1479         struct dw_mipi_dsi_rockchip *dsi = phy_get_drvdata(phy);
1480
1481         /* tester reset pulse */
1482         dsi_write(dsi, DSI_PHY_TST_CTRL0, PHY_TESTCLK | PHY_TESTCLR);
1483         usleep_range(100, 150);
1484
1485         regmap_write(dsi->grf_regmap, RK3399_GRF_SOC_CON24,
1486                      HIWORD_UPDATE(0, RK3399_TXRX_MASTERSLAVEZ));
1487         regmap_write(dsi->grf_regmap, RK3399_GRF_SOC_CON24,
1488                      HIWORD_UPDATE(RK3399_TXRX_BASEDIR, RK3399_TXRX_BASEDIR));
1489
1490         regmap_write(dsi->grf_regmap, RK3399_GRF_SOC_CON23,
1491                      HIWORD_UPDATE(0, RK3399_DSI1_FORCERXMODE));
1492         regmap_write(dsi->grf_regmap, RK3399_GRF_SOC_CON23,
1493                      HIWORD_UPDATE(0, RK3399_DSI1_FORCETXSTOPMODE));
1494
1495         /* Disable lane turn around, which is ignored in receive mode */
1496         regmap_write(dsi->grf_regmap, RK3399_GRF_SOC_CON24,
1497                      HIWORD_UPDATE(0, RK3399_TXRX_TURNREQUEST));
1498         regmap_write(dsi->grf_regmap, RK3399_GRF_SOC_CON23,
1499                      HIWORD_UPDATE(RK3399_DSI1_TURNDISABLE,
1500                                    RK3399_DSI1_TURNDISABLE));
1501         usleep_range(100, 150);
1502
1503         dsi_write(dsi, DSI_PHY_TST_CTRL0, PHY_TESTCLK | PHY_UNTESTCLR);
1504         usleep_range(100, 150);
1505
1506         /* Enable dphy lanes */
1507         regmap_write(dsi->grf_regmap, RK3399_GRF_SOC_CON23,
1508                      HIWORD_UPDATE(GENMASK(dsi->dphy_config.lanes - 1, 0),
1509                                    RK3399_DSI1_ENABLE));
1510
1511         usleep_range(100, 150);
1512
1513         return 0;
1514 }
1515
1516 static int rk3399_dphy_tx1rx1_power_off(struct phy *phy)
1517 {
1518         struct dw_mipi_dsi_rockchip *dsi = phy_get_drvdata(phy);
1519
1520         regmap_write(dsi->grf_regmap, RK3399_GRF_SOC_CON23,
1521                      HIWORD_UPDATE(0, RK3399_DSI1_ENABLE));
1522
1523         return 0;
1524 }
1525
1526 static const struct rockchip_dw_dsi_chip_data rk3399_chip_data[] = {
1527         {
1528                 .reg = 0xff960000,
1529                 .lcdsel_grf_reg = RK3399_GRF_SOC_CON20,
1530                 .lcdsel_big = HIWORD_UPDATE(0, RK3399_DSI0_LCDC_SEL),
1531                 .lcdsel_lit = HIWORD_UPDATE(RK3399_DSI0_LCDC_SEL,
1532                                             RK3399_DSI0_LCDC_SEL),
1533
1534                 .lanecfg1_grf_reg = RK3399_GRF_SOC_CON22,
1535                 .lanecfg1 = HIWORD_UPDATE(0, RK3399_DSI0_TURNREQUEST |
1536                                              RK3399_DSI0_TURNDISABLE |
1537                                              RK3399_DSI0_FORCETXSTOPMODE |
1538                                              RK3399_DSI0_FORCERXMODE),
1539
1540                 .flags = DW_MIPI_NEEDS_PHY_CFG_CLK | DW_MIPI_NEEDS_GRF_CLK,
1541                 .max_data_lanes = 4,
1542         },
1543         {
1544                 .reg = 0xff968000,
1545                 .lcdsel_grf_reg = RK3399_GRF_SOC_CON20,
1546                 .lcdsel_big = HIWORD_UPDATE(0, RK3399_DSI1_LCDC_SEL),
1547                 .lcdsel_lit = HIWORD_UPDATE(RK3399_DSI1_LCDC_SEL,
1548                                             RK3399_DSI1_LCDC_SEL),
1549
1550                 .lanecfg1_grf_reg = RK3399_GRF_SOC_CON23,
1551                 .lanecfg1 = HIWORD_UPDATE(0, RK3399_DSI1_TURNDISABLE |
1552                                              RK3399_DSI1_FORCETXSTOPMODE |
1553                                              RK3399_DSI1_FORCERXMODE |
1554                                              RK3399_DSI1_ENABLE),
1555
1556                 .lanecfg2_grf_reg = RK3399_GRF_SOC_CON24,
1557                 .lanecfg2 = HIWORD_UPDATE(RK3399_TXRX_MASTERSLAVEZ |
1558                                           RK3399_TXRX_ENABLECLK,
1559                                           RK3399_TXRX_MASTERSLAVEZ |
1560                                           RK3399_TXRX_ENABLECLK |
1561                                           RK3399_TXRX_BASEDIR),
1562
1563                 .enable_grf_reg = RK3399_GRF_SOC_CON23,
1564                 .enable = HIWORD_UPDATE(RK3399_DSI1_ENABLE, RK3399_DSI1_ENABLE),
1565
1566                 .flags = DW_MIPI_NEEDS_PHY_CFG_CLK | DW_MIPI_NEEDS_GRF_CLK,
1567                 .max_data_lanes = 4,
1568
1569                 .dphy_rx_init = rk3399_dphy_tx1rx1_init,
1570                 .dphy_rx_power_on = rk3399_dphy_tx1rx1_power_on,
1571                 .dphy_rx_power_off = rk3399_dphy_tx1rx1_power_off,
1572         },
1573         { /* sentinel */ }
1574 };
1575
1576 static const struct of_device_id dw_mipi_dsi_rockchip_dt_ids[] = {
1577         {
1578          .compatible = "rockchip,px30-mipi-dsi",
1579          .data = &px30_chip_data,
1580         }, {
1581          .compatible = "rockchip,rk3288-mipi-dsi",
1582          .data = &rk3288_chip_data,
1583         }, {
1584          .compatible = "rockchip,rk3399-mipi-dsi",
1585          .data = &rk3399_chip_data,
1586         },
1587         { /* sentinel */ }
1588 };
1589 MODULE_DEVICE_TABLE(of, dw_mipi_dsi_rockchip_dt_ids);
1590
1591 struct platform_driver dw_mipi_dsi_rockchip_driver = {
1592         .probe          = dw_mipi_dsi_rockchip_probe,
1593         .remove         = dw_mipi_dsi_rockchip_remove,
1594         .driver         = {
1595                 .of_match_table = dw_mipi_dsi_rockchip_dt_ids,
1596                 .name   = "dw-mipi-dsi-rockchip",
1597         },
1598 };