xref: /linux/drivers/gpu/drm/bridge/lontium-lt9211.c (revision 746680ec6696585e30db3e18c93a63df9cbec39c)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Lontium LT9211 bridge driver
4  *
5  * LT9211 is capable of converting:
6  *   2xDSI/2xLVDS/1xDPI -> 2xDSI/2xLVDS/1xDPI
7  * Currently supported is:
8  *   1xDSI -> 1xLVDS
9  *
10  * Copyright (C) 2022 Marek Vasut <marex@denx.de>
11  */
12 
13 #include <linux/bits.h>
14 #include <linux/clk.h>
15 #include <linux/gpio/consumer.h>
16 #include <linux/i2c.h>
17 #include <linux/media-bus-format.h>
18 #include <linux/module.h>
19 #include <linux/of_graph.h>
20 #include <linux/regmap.h>
21 #include <linux/regulator/consumer.h>
22 
23 #include <drm/drm_atomic_helper.h>
24 #include <drm/drm_bridge.h>
25 #include <drm/drm_mipi_dsi.h>
26 #include <drm/drm_of.h>
27 #include <drm/drm_panel.h>
28 #include <drm/drm_print.h>
29 #include <drm/drm_probe_helper.h>
30 
31 #define REG_PAGE_CONTROL			0xff
32 #define REG_CHIPID0				0x8100
33 #define REG_CHIPID0_VALUE			0x18
34 #define REG_CHIPID1				0x8101
35 #define REG_CHIPID1_VALUE			0x01
36 #define REG_CHIPID2				0x8102
37 #define REG_CHIPID2_VALUE			0xe3
38 
39 #define REG_DSI_LANE				0xd000
40 /* DSI lane count - 0 means 4 lanes ; 1, 2, 3 means 1, 2, 3 lanes. */
41 #define REG_DSI_LANE_COUNT(n)			((n) & 3)
42 
43 struct lt9211 {
44 	struct drm_bridge		bridge;
45 	struct device			*dev;
46 	struct regmap			*regmap;
47 	struct mipi_dsi_device		*dsi;
48 	struct drm_bridge		*panel_bridge;
49 	struct gpio_desc		*reset_gpio;
50 	struct regulator		*vccio;
51 	bool				lvds_dual_link;
52 	bool				lvds_dual_link_even_odd_swap;
53 };
54 
55 static const struct regmap_range lt9211_rw_ranges[] = {
56 	regmap_reg_range(0xff, 0xff),
57 	regmap_reg_range(0x8100, 0x816b),
58 	regmap_reg_range(0x8200, 0x82aa),
59 	regmap_reg_range(0x8500, 0x85ff),
60 	regmap_reg_range(0x8600, 0x86a0),
61 	regmap_reg_range(0x8700, 0x8746),
62 	regmap_reg_range(0xd000, 0xd0a7),
63 	regmap_reg_range(0xd400, 0xd42c),
64 	regmap_reg_range(0xd800, 0xd838),
65 	regmap_reg_range(0xd9c0, 0xd9d5),
66 };
67 
68 static const struct regmap_access_table lt9211_rw_table = {
69 	.yes_ranges = lt9211_rw_ranges,
70 	.n_yes_ranges = ARRAY_SIZE(lt9211_rw_ranges),
71 };
72 
73 static const struct regmap_range_cfg lt9211_range = {
74 	.name = "lt9211",
75 	.range_min = 0x0000,
76 	.range_max = 0xda00,
77 	.selector_reg = REG_PAGE_CONTROL,
78 	.selector_mask = 0xff,
79 	.selector_shift = 0,
80 	.window_start = 0,
81 	.window_len = 0x100,
82 };
83 
84 static const struct regmap_config lt9211_regmap_config = {
85 	.reg_bits = 8,
86 	.val_bits = 8,
87 	.rd_table = &lt9211_rw_table,
88 	.wr_table = &lt9211_rw_table,
89 	.volatile_table	= &lt9211_rw_table,
90 	.ranges = &lt9211_range,
91 	.num_ranges = 1,
92 	.cache_type = REGCACHE_MAPLE,
93 	.max_register = 0xda00,
94 };
95 
96 static struct lt9211 *bridge_to_lt9211(struct drm_bridge *bridge)
97 {
98 	return container_of(bridge, struct lt9211, bridge);
99 }
100 
101 static int lt9211_attach(struct drm_bridge *bridge,
102 			 struct drm_encoder *encoder,
103 			 enum drm_bridge_attach_flags flags)
104 {
105 	struct lt9211 *ctx = bridge_to_lt9211(bridge);
106 
107 	return drm_bridge_attach(encoder, ctx->panel_bridge,
108 				 &ctx->bridge, flags);
109 }
110 
111 static int lt9211_read_chipid(struct lt9211 *ctx)
112 {
113 	u8 chipid[3];
114 	int ret;
115 
116 	/* Read Chip ID registers and verify the chip can communicate. */
117 	ret = regmap_bulk_read(ctx->regmap, REG_CHIPID0, chipid, 3);
118 	if (ret < 0) {
119 		dev_err(ctx->dev, "Failed to read Chip ID: %d\n", ret);
120 		return ret;
121 	}
122 
123 	/* Test for known Chip ID. */
124 	if (chipid[0] != REG_CHIPID0_VALUE || chipid[1] != REG_CHIPID1_VALUE ||
125 	    chipid[2] != REG_CHIPID2_VALUE) {
126 		dev_err(ctx->dev, "Unknown Chip ID: 0x%02x 0x%02x 0x%02x\n",
127 			chipid[0], chipid[1], chipid[2]);
128 		return -EINVAL;
129 	}
130 
131 	return 0;
132 }
133 
134 static int lt9211_system_init(struct lt9211 *ctx)
135 {
136 	const struct reg_sequence lt9211_system_init_seq[] = {
137 		{ 0x8201, 0x18 },
138 		{ 0x8606, 0x61 },
139 		{ 0x8607, 0xa8 },
140 		{ 0x8714, 0x08 },
141 		{ 0x8715, 0x00 },
142 		{ 0x8718, 0x0f },
143 		{ 0x8722, 0x08 },
144 		{ 0x8723, 0x00 },
145 		{ 0x8726, 0x0f },
146 		{ 0x810b, 0xfe },
147 	};
148 
149 	return regmap_multi_reg_write(ctx->regmap, lt9211_system_init_seq,
150 				      ARRAY_SIZE(lt9211_system_init_seq));
151 }
152 
153 static int lt9211_configure_rx(struct lt9211 *ctx)
154 {
155 	const struct reg_sequence lt9211_rx_phy_seq[] = {
156 		{ 0x8202, 0x44 },
157 		{ 0x8204, 0xa0 },
158 		{ 0x8205, 0x22 },
159 		{ 0x8207, 0x9f },
160 		{ 0x8208, 0xfc },
161 		/* ORR with 0xf8 here to enable DSI DN/DP swap. */
162 		{ 0x8209, 0x01 },
163 		{ 0x8217, 0x0c },
164 		{ 0x8633, 0x1b },
165 	};
166 
167 	const struct reg_sequence lt9211_rx_cal_reset_seq[] = {
168 		{ 0x8120, 0x7f },
169 		{ 0x8120, 0xff },
170 	};
171 
172 	const struct reg_sequence lt9211_rx_dig_seq[] = {
173 		{ 0x8630, 0x85 },
174 		/* 0x8588: BIT 6 set = MIPI-RX, BIT 4 unset = LVDS-TX */
175 		{ 0x8588, 0x40 },
176 		{ 0x85ff, 0xd0 },
177 		{ REG_DSI_LANE, REG_DSI_LANE_COUNT(ctx->dsi->lanes) },
178 		{ 0xd002, 0x05 },
179 	};
180 
181 	const struct reg_sequence lt9211_rx_div_reset_seq[] = {
182 		{ 0x810a, 0xc0 },
183 		{ 0x8120, 0xbf },
184 	};
185 
186 	const struct reg_sequence lt9211_rx_div_clear_seq[] = {
187 		{ 0x810a, 0xc1 },
188 		{ 0x8120, 0xff },
189 	};
190 
191 	int ret;
192 
193 	ret = regmap_multi_reg_write(ctx->regmap, lt9211_rx_phy_seq,
194 				     ARRAY_SIZE(lt9211_rx_phy_seq));
195 	if (ret)
196 		return ret;
197 
198 	ret = regmap_multi_reg_write(ctx->regmap, lt9211_rx_cal_reset_seq,
199 				     ARRAY_SIZE(lt9211_rx_cal_reset_seq));
200 	if (ret)
201 		return ret;
202 
203 	ret = regmap_multi_reg_write(ctx->regmap, lt9211_rx_dig_seq,
204 				     ARRAY_SIZE(lt9211_rx_dig_seq));
205 	if (ret)
206 		return ret;
207 
208 	ret = regmap_multi_reg_write(ctx->regmap, lt9211_rx_div_reset_seq,
209 				     ARRAY_SIZE(lt9211_rx_div_reset_seq));
210 	if (ret)
211 		return ret;
212 
213 	usleep_range(10000, 15000);
214 
215 	return regmap_multi_reg_write(ctx->regmap, lt9211_rx_div_clear_seq,
216 				      ARRAY_SIZE(lt9211_rx_div_clear_seq));
217 }
218 
219 static int lt9211_autodetect_rx(struct lt9211 *ctx,
220 				const struct drm_display_mode *mode)
221 {
222 	u16 width, height;
223 	u32 byteclk;
224 	u8 buf[5];
225 	u8 format;
226 	u8 bc[3];
227 	int ret;
228 
229 	/* Measure ByteClock frequency. */
230 	ret = regmap_write(ctx->regmap, 0x8600, 0x01);
231 	if (ret)
232 		return ret;
233 
234 	/* Give the chip time to lock onto RX stream. */
235 	msleep(100);
236 
237 	/* Read the ByteClock frequency from the chip. */
238 	ret = regmap_bulk_read(ctx->regmap, 0x8608, bc, sizeof(bc));
239 	if (ret)
240 		return ret;
241 
242 	/* RX ByteClock in kHz */
243 	byteclk = ((bc[0] & 0xf) << 16) | (bc[1] << 8) | bc[2];
244 
245 	/* Width/Height/Format Auto-detection */
246 	ret = regmap_bulk_read(ctx->regmap, 0xd082, buf, sizeof(buf));
247 	if (ret)
248 		return ret;
249 
250 	width = (buf[0] << 8) | buf[1];
251 	height = (buf[3] << 8) | buf[4];
252 	format = buf[2] & 0xf;
253 
254 	if (format == 0x3) {		/* YUV422 16bit */
255 		width /= 2;
256 	} else if (format == 0xa) {	/* RGB888 24bit */
257 		width /= 3;
258 	} else {
259 		dev_err(ctx->dev, "Unsupported DSI pixel format 0x%01x\n",
260 			format);
261 		return -EINVAL;
262 	}
263 
264 	if (width != mode->hdisplay) {
265 		dev_err(ctx->dev,
266 			"RX: Detected DSI width (%d) does not match mode hdisplay (%d)\n",
267 			width, mode->hdisplay);
268 		return -EINVAL;
269 	}
270 
271 	if (height != mode->vdisplay) {
272 		dev_err(ctx->dev,
273 			"RX: Detected DSI height (%d) does not match mode vdisplay (%d)\n",
274 			height, mode->vdisplay);
275 		return -EINVAL;
276 	}
277 
278 	dev_dbg(ctx->dev, "RX: %dx%d format=0x%01x byteclock=%d kHz\n",
279 		width, height, format, byteclk);
280 
281 	return 0;
282 }
283 
284 static int lt9211_configure_timing(struct lt9211 *ctx,
285 				   const struct drm_display_mode *mode)
286 {
287 	const struct reg_sequence lt9211_timing[] = {
288 		{ 0xd00d, (mode->vtotal >> 8) & 0xff },
289 		{ 0xd00e, mode->vtotal & 0xff },
290 		{ 0xd00f, (mode->vdisplay >> 8) & 0xff },
291 		{ 0xd010, mode->vdisplay & 0xff },
292 		{ 0xd011, (mode->htotal >> 8) & 0xff },
293 		{ 0xd012, mode->htotal & 0xff },
294 		{ 0xd013, (mode->hdisplay >> 8) & 0xff },
295 		{ 0xd014, mode->hdisplay & 0xff },
296 		{ 0xd015, (mode->vsync_end - mode->vsync_start) & 0xff },
297 		{ 0xd016, (mode->hsync_end - mode->hsync_start) & 0xff },
298 		{ 0xd017, ((mode->vsync_start - mode->vdisplay) >> 8) & 0xff },
299 		{ 0xd018, (mode->vsync_start - mode->vdisplay) & 0xff },
300 		{ 0xd019, ((mode->hsync_start - mode->hdisplay) >> 8) & 0xff },
301 		{ 0xd01a, (mode->hsync_start - mode->hdisplay) & 0xff },
302 	};
303 
304 	return regmap_multi_reg_write(ctx->regmap, lt9211_timing,
305 				      ARRAY_SIZE(lt9211_timing));
306 }
307 
308 static int lt9211_configure_plls(struct lt9211 *ctx,
309 				 const struct drm_display_mode *mode)
310 {
311 	const struct reg_sequence lt9211_pcr_seq[] = {
312 		{ 0xd026, 0x17 },
313 		{ 0xd027, 0xc3 },
314 		{ 0xd02d, 0x30 },
315 		{ 0xd031, 0x10 },
316 		{ 0xd023, 0x20 },
317 		{ 0xd038, 0x02 },
318 		{ 0xd039, 0x10 },
319 		{ 0xd03a, 0x20 },
320 		{ 0xd03b, 0x60 },
321 		{ 0xd03f, 0x04 },
322 		{ 0xd040, 0x08 },
323 		{ 0xd041, 0x10 },
324 		{ 0x810b, 0xee },
325 		{ 0x810b, 0xfe },
326 	};
327 
328 	unsigned int pval;
329 	int ret;
330 
331 	/* DeSSC PLL reference clock is 25 MHz XTal. */
332 	ret = regmap_write(ctx->regmap, 0x822d, 0x48);
333 	if (ret)
334 		return ret;
335 
336 	if (mode->clock < 44000) {
337 		ret = regmap_write(ctx->regmap, 0x8235, 0x83);
338 	} else if (mode->clock < 88000) {
339 		ret = regmap_write(ctx->regmap, 0x8235, 0x82);
340 	} else if (mode->clock < 176000) {
341 		ret = regmap_write(ctx->regmap, 0x8235, 0x81);
342 	} else {
343 		dev_err(ctx->dev,
344 			"Unsupported mode clock (%d kHz) above 176 MHz.\n",
345 			mode->clock);
346 		return -EINVAL;
347 	}
348 
349 	if (ret)
350 		return ret;
351 
352 	/* Wait for the DeSSC PLL to stabilize. */
353 	msleep(100);
354 
355 	ret = regmap_multi_reg_write(ctx->regmap, lt9211_pcr_seq,
356 				     ARRAY_SIZE(lt9211_pcr_seq));
357 	if (ret)
358 		return ret;
359 
360 	/* PCR stability test takes seconds. */
361 	ret = regmap_read_poll_timeout(ctx->regmap, 0xd087, pval, pval & 0x8,
362 				       20000, 10000000);
363 	if (ret)
364 		dev_err(ctx->dev, "PCR unstable, ret=%i\n", ret);
365 
366 	return ret;
367 }
368 
369 static int lt9211_configure_tx(struct lt9211 *ctx, bool jeida,
370 			       bool bpp24, bool de)
371 {
372 	const struct reg_sequence system_lt9211_tx_phy_seq[] = {
373 		/* DPI output disable */
374 		{ 0x8262, 0x00 },
375 		/* BIT(7) is LVDS dual-port */
376 		{ 0x823b, 0x38 | (ctx->lvds_dual_link ? BIT(7) : 0) },
377 		{ 0x823e, 0x92 },
378 		{ 0x823f, 0x48 },
379 		{ 0x8240, 0x31 },
380 		{ 0x8243, 0x80 },
381 		{ 0x8244, 0x00 },
382 		{ 0x8245, 0x00 },
383 		{ 0x8249, 0x00 },
384 		{ 0x824a, 0x01 },
385 		{ 0x824e, 0x00 },
386 		{ 0x824f, 0x00 },
387 		{ 0x8250, 0x00 },
388 		{ 0x8253, 0x00 },
389 		{ 0x8254, 0x01 },
390 		/* LVDS channel order, Odd:Even 0x10..A:B, 0x40..B:A */
391 		{ 0x8646, ctx->lvds_dual_link_even_odd_swap ? 0x40 : 0x10 },
392 		{ 0x8120, 0x7b },
393 		{ 0x816b, 0xff },
394 	};
395 
396 	const struct reg_sequence system_lt9211_tx_dig_seq[] = {
397 		{ 0x8559, 0x40 | (jeida ? BIT(7) : 0) |
398 			  (de ? BIT(5) : 0) | (bpp24 ? BIT(4) : 0) },
399 		{ 0x855a, 0xaa },
400 		{ 0x855b, 0xaa },
401 		{ 0x855c, ctx->lvds_dual_link ? BIT(0) : 0 },
402 		{ 0x85a1, 0x77 },
403 		{ 0x8640, 0x40 },
404 		{ 0x8641, 0x34 },
405 		{ 0x8642, 0x10 },
406 		{ 0x8643, 0x23 },
407 		{ 0x8644, 0x41 },
408 		{ 0x8645, 0x02 },
409 	};
410 
411 	const struct reg_sequence system_lt9211_tx_pll_seq[] = {
412 		/* TX PLL power down */
413 		{ 0x8236, 0x01 },
414 		{ 0x8237, ctx->lvds_dual_link ? 0x2a : 0x29 },
415 		{ 0x8238, 0x06 },
416 		{ 0x8239, 0x30 },
417 		{ 0x823a, 0x8e },
418 		{ 0x8737, 0x14 },
419 		{ 0x8713, 0x00 },
420 		{ 0x8713, 0x80 },
421 	};
422 
423 	unsigned int pval;
424 	int ret;
425 
426 	ret = regmap_multi_reg_write(ctx->regmap, system_lt9211_tx_phy_seq,
427 				     ARRAY_SIZE(system_lt9211_tx_phy_seq));
428 	if (ret)
429 		return ret;
430 
431 	ret = regmap_multi_reg_write(ctx->regmap, system_lt9211_tx_dig_seq,
432 				     ARRAY_SIZE(system_lt9211_tx_dig_seq));
433 	if (ret)
434 		return ret;
435 
436 	ret = regmap_multi_reg_write(ctx->regmap, system_lt9211_tx_pll_seq,
437 				     ARRAY_SIZE(system_lt9211_tx_pll_seq));
438 	if (ret)
439 		return ret;
440 
441 	ret = regmap_read_poll_timeout(ctx->regmap, 0x871f, pval, pval & 0x80,
442 				       10000, 1000000);
443 	if (ret) {
444 		dev_err(ctx->dev, "TX PLL unstable, ret=%i\n", ret);
445 		return ret;
446 	}
447 
448 	ret = regmap_read_poll_timeout(ctx->regmap, 0x8720, pval, pval & 0x80,
449 				       10000, 1000000);
450 	if (ret) {
451 		dev_err(ctx->dev, "TX PLL unstable, ret=%i\n", ret);
452 		return ret;
453 	}
454 
455 	return 0;
456 }
457 
458 static void lt9211_atomic_enable(struct drm_bridge *bridge,
459 				 struct drm_atomic_state *state)
460 {
461 	struct lt9211 *ctx = bridge_to_lt9211(bridge);
462 	const struct drm_bridge_state *bridge_state;
463 	const struct drm_crtc_state *crtc_state;
464 	const struct drm_display_mode *mode;
465 	struct drm_connector *connector;
466 	struct drm_crtc *crtc;
467 	bool lvds_format_24bpp;
468 	bool lvds_format_jeida;
469 	u32 bus_flags;
470 	int ret;
471 
472 	ret = regulator_enable(ctx->vccio);
473 	if (ret) {
474 		dev_err(ctx->dev, "Failed to enable vccio: %d\n", ret);
475 		return;
476 	}
477 
478 	/* Deassert reset */
479 	gpiod_set_value(ctx->reset_gpio, 1);
480 	usleep_range(20000, 21000);	/* Very long post-reset delay. */
481 
482 	/* Get the LVDS format from the bridge state. */
483 	bridge_state = drm_atomic_get_new_bridge_state(state, bridge);
484 	bus_flags = bridge_state->output_bus_cfg.flags;
485 
486 	switch (bridge_state->output_bus_cfg.format) {
487 	case MEDIA_BUS_FMT_RGB666_1X7X3_SPWG:
488 		lvds_format_24bpp = false;
489 		lvds_format_jeida = true;
490 		break;
491 	case MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA:
492 		lvds_format_24bpp = true;
493 		lvds_format_jeida = true;
494 		break;
495 	case MEDIA_BUS_FMT_RGB888_1X7X4_SPWG:
496 		lvds_format_24bpp = true;
497 		lvds_format_jeida = false;
498 		break;
499 	default:
500 		/*
501 		 * Some bridges still don't set the correct
502 		 * LVDS bus pixel format, use SPWG24 default
503 		 * format until those are fixed.
504 		 */
505 		lvds_format_24bpp = true;
506 		lvds_format_jeida = false;
507 		dev_warn(ctx->dev,
508 			 "Unsupported LVDS bus format 0x%04x, please check output bridge driver. Falling back to SPWG24.\n",
509 			 bridge_state->output_bus_cfg.format);
510 		break;
511 	}
512 
513 	/*
514 	 * Retrieve the CRTC adjusted mode. This requires a little dance to go
515 	 * from the bridge to the encoder, to the connector and to the CRTC.
516 	 */
517 	connector = drm_atomic_get_new_connector_for_encoder(state,
518 							     bridge->encoder);
519 	crtc = drm_atomic_get_new_connector_state(state, connector)->crtc;
520 	crtc_state = drm_atomic_get_new_crtc_state(state, crtc);
521 	mode = &crtc_state->adjusted_mode;
522 
523 	ret = lt9211_read_chipid(ctx);
524 	if (ret)
525 		return;
526 
527 	ret = lt9211_system_init(ctx);
528 	if (ret)
529 		return;
530 
531 	ret = lt9211_configure_rx(ctx);
532 	if (ret)
533 		return;
534 
535 	ret = lt9211_autodetect_rx(ctx, mode);
536 	if (ret)
537 		return;
538 
539 	ret = lt9211_configure_timing(ctx, mode);
540 	if (ret)
541 		return;
542 
543 	ret = lt9211_configure_plls(ctx, mode);
544 	if (ret)
545 		return;
546 
547 	ret = lt9211_configure_tx(ctx, lvds_format_jeida, lvds_format_24bpp,
548 				  bus_flags & DRM_BUS_FLAG_DE_HIGH);
549 	if (ret)
550 		return;
551 
552 	dev_dbg(ctx->dev, "LT9211 enabled.\n");
553 }
554 
555 static void lt9211_atomic_disable(struct drm_bridge *bridge,
556 				  struct drm_atomic_state *state)
557 {
558 	struct lt9211 *ctx = bridge_to_lt9211(bridge);
559 	int ret;
560 
561 	/*
562 	 * Put the chip in reset, pull nRST line low,
563 	 * and assure lengthy 10ms reset low timing.
564 	 */
565 	gpiod_set_value(ctx->reset_gpio, 0);
566 	usleep_range(10000, 11000);	/* Very long reset duration. */
567 
568 	ret = regulator_disable(ctx->vccio);
569 	if (ret)
570 		dev_err(ctx->dev, "Failed to disable vccio: %d\n", ret);
571 
572 	regcache_mark_dirty(ctx->regmap);
573 }
574 
575 static enum drm_mode_status
576 lt9211_mode_valid(struct drm_bridge *bridge,
577 		  const struct drm_display_info *info,
578 		  const struct drm_display_mode *mode)
579 {
580 	/* LVDS output clock range 25..176 MHz */
581 	if (mode->clock < 25000)
582 		return MODE_CLOCK_LOW;
583 	if (mode->clock > 176000)
584 		return MODE_CLOCK_HIGH;
585 
586 	return MODE_OK;
587 }
588 
589 #define MAX_INPUT_SEL_FORMATS	1
590 
591 static u32 *
592 lt9211_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
593 				 struct drm_bridge_state *bridge_state,
594 				 struct drm_crtc_state *crtc_state,
595 				 struct drm_connector_state *conn_state,
596 				 u32 output_fmt,
597 				 unsigned int *num_input_fmts)
598 {
599 	u32 *input_fmts;
600 
601 	*num_input_fmts = 0;
602 
603 	input_fmts = kcalloc(MAX_INPUT_SEL_FORMATS, sizeof(*input_fmts),
604 			     GFP_KERNEL);
605 	if (!input_fmts)
606 		return NULL;
607 
608 	/* This is the DSI-end bus format */
609 	input_fmts[0] = MEDIA_BUS_FMT_RGB888_1X24;
610 	*num_input_fmts = 1;
611 
612 	return input_fmts;
613 }
614 
615 static const struct drm_bridge_funcs lt9211_funcs = {
616 	.attach			= lt9211_attach,
617 	.mode_valid		= lt9211_mode_valid,
618 	.atomic_enable		= lt9211_atomic_enable,
619 	.atomic_disable		= lt9211_atomic_disable,
620 	.atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state,
621 	.atomic_destroy_state	= drm_atomic_helper_bridge_destroy_state,
622 	.atomic_get_input_bus_fmts = lt9211_atomic_get_input_bus_fmts,
623 	.atomic_reset		= drm_atomic_helper_bridge_reset,
624 };
625 
626 static int lt9211_parse_dt(struct lt9211 *ctx)
627 {
628 	struct device_node *port2, *port3;
629 	struct drm_bridge *panel_bridge;
630 	struct device *dev = ctx->dev;
631 	struct drm_panel *panel;
632 	int dual_link;
633 	int ret;
634 
635 	ctx->vccio = devm_regulator_get(dev, "vccio");
636 	if (IS_ERR(ctx->vccio))
637 		return dev_err_probe(dev, PTR_ERR(ctx->vccio),
638 				     "Failed to get supply 'vccio'\n");
639 
640 	ctx->lvds_dual_link = false;
641 	ctx->lvds_dual_link_even_odd_swap = false;
642 
643 	port2 = of_graph_get_port_by_id(dev->of_node, 2);
644 	port3 = of_graph_get_port_by_id(dev->of_node, 3);
645 	dual_link = drm_of_lvds_get_dual_link_pixel_order(port2, port3);
646 	of_node_put(port2);
647 	of_node_put(port3);
648 
649 	if (dual_link == DRM_LVDS_DUAL_LINK_ODD_EVEN_PIXELS) {
650 		ctx->lvds_dual_link = true;
651 		/* Odd pixels to LVDS Channel A, even pixels to B */
652 		ctx->lvds_dual_link_even_odd_swap = false;
653 	} else if (dual_link == DRM_LVDS_DUAL_LINK_EVEN_ODD_PIXELS) {
654 		ctx->lvds_dual_link = true;
655 		/* Even pixels to LVDS Channel A, odd pixels to B */
656 		ctx->lvds_dual_link_even_odd_swap = true;
657 	}
658 
659 	ret = drm_of_find_panel_or_bridge(dev->of_node, 2, 0, &panel, &panel_bridge);
660 	if (ret < 0)
661 		return ret;
662 	if (panel) {
663 		panel_bridge = devm_drm_panel_bridge_add(dev, panel);
664 		if (IS_ERR(panel_bridge))
665 			return PTR_ERR(panel_bridge);
666 	}
667 
668 	ctx->panel_bridge = panel_bridge;
669 
670 	return 0;
671 }
672 
673 static int lt9211_host_attach(struct lt9211 *ctx)
674 {
675 	const struct mipi_dsi_device_info info = {
676 		.type = "lt9211",
677 		.channel = 0,
678 		.node = NULL,
679 	};
680 	struct device *dev = ctx->dev;
681 	struct device_node *host_node;
682 	struct device_node *endpoint;
683 	struct mipi_dsi_device *dsi;
684 	struct mipi_dsi_host *host;
685 	int dsi_lanes;
686 	int ret;
687 
688 	endpoint = of_graph_get_endpoint_by_regs(dev->of_node, 0, -1);
689 	dsi_lanes = drm_of_get_data_lanes_count(endpoint, 1, 4);
690 	host_node = of_graph_get_remote_port_parent(endpoint);
691 	host = of_find_mipi_dsi_host_by_node(host_node);
692 	of_node_put(host_node);
693 	of_node_put(endpoint);
694 
695 	if (!host)
696 		return -EPROBE_DEFER;
697 
698 	if (dsi_lanes < 0)
699 		return dsi_lanes;
700 
701 	dsi = devm_mipi_dsi_device_register_full(dev, host, &info);
702 	if (IS_ERR(dsi))
703 		return dev_err_probe(dev, PTR_ERR(dsi),
704 				     "failed to create dsi device\n");
705 
706 	ctx->dsi = dsi;
707 
708 	dsi->lanes = dsi_lanes;
709 	dsi->format = MIPI_DSI_FMT_RGB888;
710 	dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
711 			  MIPI_DSI_MODE_VIDEO_HSE | MIPI_DSI_MODE_VIDEO_NO_HSA |
712 			  MIPI_DSI_MODE_VIDEO_NO_HFP | MIPI_DSI_MODE_VIDEO_NO_HBP |
713 			  MIPI_DSI_MODE_NO_EOT_PACKET;
714 
715 	ret = devm_mipi_dsi_attach(dev, dsi);
716 	if (ret < 0) {
717 		dev_err(dev, "failed to attach dsi to host: %d\n", ret);
718 		return ret;
719 	}
720 
721 	return 0;
722 }
723 
724 static int lt9211_probe(struct i2c_client *client)
725 {
726 	struct device *dev = &client->dev;
727 	struct lt9211 *ctx;
728 	int ret;
729 
730 	ctx = devm_drm_bridge_alloc(dev, struct lt9211, bridge, &lt9211_funcs);
731 	if (IS_ERR(ctx))
732 		return PTR_ERR(ctx);
733 
734 	ctx->dev = dev;
735 
736 	/*
737 	 * Put the chip in reset, pull nRST line low,
738 	 * and assure lengthy 10ms reset low timing.
739 	 */
740 	ctx->reset_gpio = devm_gpiod_get_optional(ctx->dev, "reset",
741 						  GPIOD_OUT_LOW);
742 	if (IS_ERR(ctx->reset_gpio))
743 		return PTR_ERR(ctx->reset_gpio);
744 
745 	usleep_range(10000, 11000);	/* Very long reset duration. */
746 
747 	ret = lt9211_parse_dt(ctx);
748 	if (ret)
749 		return ret;
750 
751 	ctx->regmap = devm_regmap_init_i2c(client, &lt9211_regmap_config);
752 	if (IS_ERR(ctx->regmap))
753 		return PTR_ERR(ctx->regmap);
754 
755 	dev_set_drvdata(dev, ctx);
756 	i2c_set_clientdata(client, ctx);
757 
758 	ctx->bridge.of_node = dev->of_node;
759 	drm_bridge_add(&ctx->bridge);
760 
761 	ret = lt9211_host_attach(ctx);
762 	if (ret)
763 		drm_bridge_remove(&ctx->bridge);
764 
765 	return ret;
766 }
767 
768 static void lt9211_remove(struct i2c_client *client)
769 {
770 	struct lt9211 *ctx = i2c_get_clientdata(client);
771 
772 	drm_bridge_remove(&ctx->bridge);
773 }
774 
775 static const struct i2c_device_id lt9211_id[] = {
776 	{ "lontium,lt9211" },
777 	{},
778 };
779 MODULE_DEVICE_TABLE(i2c, lt9211_id);
780 
781 static const struct of_device_id lt9211_match_table[] = {
782 	{ .compatible = "lontium,lt9211" },
783 	{},
784 };
785 MODULE_DEVICE_TABLE(of, lt9211_match_table);
786 
787 static struct i2c_driver lt9211_driver = {
788 	.probe = lt9211_probe,
789 	.remove = lt9211_remove,
790 	.id_table = lt9211_id,
791 	.driver = {
792 		.name = "lt9211",
793 		.of_match_table = lt9211_match_table,
794 	},
795 };
796 module_i2c_driver(lt9211_driver);
797 
798 MODULE_AUTHOR("Marek Vasut <marex@denx.de>");
799 MODULE_DESCRIPTION("Lontium LT9211 DSI/LVDS/DPI bridge driver");
800 MODULE_LICENSE("GPL");
801