xref: /rk3399_rockchip-uboot/drivers/video/drm/display-serdes/core.h (revision 77c57384925823ac7325dead6d2664651a86d016)
1fb0c3269SLuo Wei /* SPDX-License-Identifier: GPL-2.0-only */
2fb0c3269SLuo Wei /*
3fb0c3269SLuo Wei  * core.h -- core define for mfd display arch
4fb0c3269SLuo Wei  *
5fb0c3269SLuo Wei  * Copyright (c) 2023-2028 Rockchip Electronics Co. Ltd.
6fb0c3269SLuo Wei  *
7fb0c3269SLuo Wei  * Author: luowei <lw@rock-chips.com>
8fb0c3269SLuo Wei  *
9fb0c3269SLuo Wei  */
10fb0c3269SLuo Wei #include <common.h>
11fb0c3269SLuo Wei #include <dm.h>
12fb0c3269SLuo Wei #include <i2c.h>
13fb0c3269SLuo Wei #include <errno.h>
14fb0c3269SLuo Wei #include <drm/drm_mipi_dsi.h>
15fb0c3269SLuo Wei #include <drm/drm_dsc.h>
16fb0c3269SLuo Wei #include <drm_modes.h>
17fb0c3269SLuo Wei #include <video_bridge.h>
18fb0c3269SLuo Wei #include <asm/unaligned.h>
19fb0c3269SLuo Wei #include <linux/media-bus-format.h>
20fb0c3269SLuo Wei #include <linux/bitfield.h>
21fb0c3269SLuo Wei #include <linux/iopoll.h>
22fb0c3269SLuo Wei #include <power/regulator.h>
23fb0c3269SLuo Wei #include <config.h>
24fb0c3269SLuo Wei #include <backlight.h>
25fb0c3269SLuo Wei #include <malloc.h>
26fb0c3269SLuo Wei #include <video.h>
27fb0c3269SLuo Wei 
28fb0c3269SLuo Wei #include <asm/gpio.h>
29fb0c3269SLuo Wei #include <dm/device.h>
30fb0c3269SLuo Wei #include <dm/read.h>
31fb0c3269SLuo Wei #include <dm/pinctrl.h>
32fb0c3269SLuo Wei #include <dm/uclass-id.h>
33fb0c3269SLuo Wei #include <dm/lists.h>
34fb0c3269SLuo Wei 
35fb0c3269SLuo Wei #include <dm/device-internal.h>
36fb0c3269SLuo Wei #include <dm/root.h>
37fb0c3269SLuo Wei #include <fdtdec.h>
38fb0c3269SLuo Wei #include <regmap.h>
39fb0c3269SLuo Wei #include <asm/gpio.h>
40fb0c3269SLuo Wei #include <asm/system.h>
41fb0c3269SLuo Wei #include <asm/io.h>
42fb0c3269SLuo Wei 
43fb0c3269SLuo Wei #include "gpio.h"
44fb0c3269SLuo Wei 
45fb0c3269SLuo Wei #include "../drivers/video/drm/rockchip_bridge.h"
46fb0c3269SLuo Wei #include "../drivers/video/drm/rockchip_display.h"
47fb0c3269SLuo Wei #include "../drivers/video/drm/rockchip_panel.h"
48fb0c3269SLuo Wei 
49fb0c3269SLuo Wei #ifndef __SERDES_DISPLAY_CORE_H__
50fb0c3269SLuo Wei #define __SERDES_DISPLAY_CORE_H__
51fb0c3269SLuo Wei 
52fb0c3269SLuo Wei //#define SERDES_DEBUG_MFD
53fb0c3269SLuo Wei //#define SERDES_DEBUG_I2C
54fb0c3269SLuo Wei //#define SERDES_DEBUG_CHIP
55fb0c3269SLuo Wei 
56fb0c3269SLuo Wei #ifdef SERDES_DEBUG_MFD
57fb0c3269SLuo Wei #define  SERDES_DBG_MFD(x...) printf(x)
58fb0c3269SLuo Wei #else
59fb0c3269SLuo Wei #define  SERDES_DBG_MFD(x...)
60fb0c3269SLuo Wei #endif
61fb0c3269SLuo Wei 
62fb0c3269SLuo Wei #ifdef SERDES_DEBUG_I2C
63fb0c3269SLuo Wei #define  SERDES_DBG_I2C(x...) printf(x)
64fb0c3269SLuo Wei #else
65fb0c3269SLuo Wei #define  SERDES_DBG_I2C(x...)
66fb0c3269SLuo Wei #endif
67fb0c3269SLuo Wei 
68fb0c3269SLuo Wei #ifdef SERDES_DEBUG_CHIP
69fb0c3269SLuo Wei #define  SERDES_DBG_CHIP(x...) printf(x)
70fb0c3269SLuo Wei #else
71fb0c3269SLuo Wei #define  SERDES_DBG_CHIP(x...)
72fb0c3269SLuo Wei #endif
73fb0c3269SLuo Wei 
74fb0c3269SLuo Wei #define SERDES_UBOOT_DISPLAY_VERSION "serdes-uboot-displaly-v10-230920"
75fb0c3269SLuo Wei #define MAX_NUM_SERDES_SPLIT 8
76fb0c3269SLuo Wei struct serdes;
77fb0c3269SLuo Wei 
78fb0c3269SLuo Wei enum ser_link_mode {
79fb0c3269SLuo Wei 	SER_DUAL_LINK,
80fb0c3269SLuo Wei 	SER_LINKA,
81fb0c3269SLuo Wei 	SER_LINKB,
82fb0c3269SLuo Wei 	SER_SPLITTER_MODE,
83fb0c3269SLuo Wei };
84fb0c3269SLuo Wei 
85fb0c3269SLuo Wei /* Convenience macro to define a single named or anonymous pin descriptor */
86fb0c3269SLuo Wei #define PINCTRL_PIN(a, b) { .number = a, .name = b }
87fb0c3269SLuo Wei 
88fb0c3269SLuo Wei /**
89fb0c3269SLuo Wei  * struct pinctrl_pin_desc - boards/machines provide information on their
90fb0c3269SLuo Wei  * pins, pads or other muxable units in this struct
91fb0c3269SLuo Wei  * @number: unique pin number from the global pin number space
92fb0c3269SLuo Wei  * @name: a name for this pin
93fb0c3269SLuo Wei  * @drv_data: driver-defined per-pin data. pinctrl core does not touch this
94fb0c3269SLuo Wei  */
95fb0c3269SLuo Wei struct pinctrl_pin_desc {
96fb0c3269SLuo Wei 	unsigned int number;
97fb0c3269SLuo Wei 	const char *name;
98fb0c3269SLuo Wei 	void *drv_data;
99fb0c3269SLuo Wei };
100fb0c3269SLuo Wei 
101fb0c3269SLuo Wei /**
102fb0c3269SLuo Wei  * struct group_desc - generic pin group descriptor
103fb0c3269SLuo Wei  * @name: name of the pin group
104fb0c3269SLuo Wei  * @pins: array of pins that belong to the group
105fb0c3269SLuo Wei  * @num_pins: number of pins in the group
106fb0c3269SLuo Wei  * @data: pin controller driver specific data
107fb0c3269SLuo Wei  */
108fb0c3269SLuo Wei struct group_desc {
109fb0c3269SLuo Wei 	const char *name;
110fb0c3269SLuo Wei 	int *pins;
111fb0c3269SLuo Wei 	int num_pins;
112fb0c3269SLuo Wei 	void *data;
113fb0c3269SLuo Wei };
114fb0c3269SLuo Wei 
115fb0c3269SLuo Wei /**
116fb0c3269SLuo Wei  * struct function_desc - generic function descriptor
117fb0c3269SLuo Wei  * @name: name of the function
118fb0c3269SLuo Wei  * @group_names: array of pin group names
119fb0c3269SLuo Wei  * @num_group_names: number of pin group names
120fb0c3269SLuo Wei  * @data: pin controller driver specific data
121fb0c3269SLuo Wei  */
122fb0c3269SLuo Wei struct function_desc {
123fb0c3269SLuo Wei 	const char *name;
124fb0c3269SLuo Wei 	const char **group_names;
125fb0c3269SLuo Wei 	int num_group_names;
126fb0c3269SLuo Wei 	void *data;
127fb0c3269SLuo Wei };
128fb0c3269SLuo Wei 
129fb0c3269SLuo Wei struct serdes_chip_pinctrl_info {
130fb0c3269SLuo Wei 	struct pinctrl_pin_desc *pins;
131fb0c3269SLuo Wei 	unsigned int num_pins;
132fb0c3269SLuo Wei 	struct group_desc *groups;
133fb0c3269SLuo Wei 	unsigned int num_groups;
134fb0c3269SLuo Wei 	struct function_desc *functions;
135fb0c3269SLuo Wei 	unsigned int num_functions;
136fb0c3269SLuo Wei };
137fb0c3269SLuo Wei 
138fb0c3269SLuo Wei struct serdes_chip_bridge_ops {
139fb0c3269SLuo Wei 	/*serdes chip function for bridge*/
140fb0c3269SLuo Wei 	int (*power_on)(struct serdes *serdes);
141fb0c3269SLuo Wei 	int (*init)(struct serdes *serdes);
142fb0c3269SLuo Wei 	int (*attach)(struct serdes *serdes);
143d1fd9c74SLuo Wei 	bool (*detect)(struct serdes *serdes, int link);
144fb0c3269SLuo Wei 	int (*get_modes)(struct serdes *serdes);
145fb0c3269SLuo Wei 	int (*pre_enable)(struct serdes *serdes);
146fb0c3269SLuo Wei 	int (*enable)(struct serdes *serdes);
147fb0c3269SLuo Wei 	int (*disable)(struct serdes *serdes);
148fb0c3269SLuo Wei 	int (*post_disable)(struct serdes *serdes);
149fb0c3269SLuo Wei };
150fb0c3269SLuo Wei 
151fb0c3269SLuo Wei struct serdes_chip_panel_ops {
152fb0c3269SLuo Wei 	/*serdes chip function for bridge*/
153fb0c3269SLuo Wei 	int (*power_on)(struct serdes *serdes);
154fb0c3269SLuo Wei 	int (*init)(struct serdes *serdes);
155fb0c3269SLuo Wei 	int (*disable)(struct serdes *serdes);
156fb0c3269SLuo Wei 	int (*unprepare)(struct serdes *serdes);
157fb0c3269SLuo Wei 	int (*prepare)(struct serdes *serdes);
158fb0c3269SLuo Wei 	int (*enable)(struct serdes *serdes);
159fb0c3269SLuo Wei 	int (*get_modes)(struct serdes *serdes);
160fb0c3269SLuo Wei 	int (*mode_set)(struct serdes *serdes);
161fb0c3269SLuo Wei 	int (*backlight_enable)(struct serdes *serdes);
162fb0c3269SLuo Wei 	int (*backlight_disable)(struct serdes *serdes);
163fb0c3269SLuo Wei };
164fb0c3269SLuo Wei 
165fb0c3269SLuo Wei struct serdes_chip_pinctrl_ops {
166fb0c3269SLuo Wei 	int (*pinmux_set)(struct serdes *serdes, unsigned int pin_selector,
167fb0c3269SLuo Wei 			  unsigned int func_selector);
168fb0c3269SLuo Wei 	int (*pinmux_group_set)(struct serdes *serdes,
169fb0c3269SLuo Wei 				unsigned int group_selector,
170fb0c3269SLuo Wei 				unsigned int func_selector);
171fb0c3269SLuo Wei 	int (*pinconf_set)(struct serdes *serdes,
172fb0c3269SLuo Wei 			   unsigned int pin_selector,
173fb0c3269SLuo Wei 			   unsigned int param, unsigned int argument);
174fb0c3269SLuo Wei 	int (*pinconf_group_set)(struct serdes *serdes,
175fb0c3269SLuo Wei 				 unsigned int group_selector,
176fb0c3269SLuo Wei 				 unsigned int param, unsigned int argument);
177fb0c3269SLuo Wei };
178fb0c3269SLuo Wei 
179fb0c3269SLuo Wei struct serdes_chip_gpio_ops {
180fb0c3269SLuo Wei 	/*serdes chip gpio function*/
181fb0c3269SLuo Wei 	int (*direction_input)(struct serdes *serdes, int gpio);
182fb0c3269SLuo Wei 	int (*direction_output)(struct serdes *serdes, int gpio, int value);
183fb0c3269SLuo Wei 	int (*get_level)(struct serdes *serdes, int gpio);
184fb0c3269SLuo Wei 	int (*set_level)(struct serdes *serdes, int gpio, int value);
185fb0c3269SLuo Wei 	int (*set_config)(struct serdes *serdes,
186fb0c3269SLuo Wei 			  int gpio, unsigned long config);
187fb0c3269SLuo Wei 	int (*to_irq)(struct serdes *serdes, int gpio);
188fb0c3269SLuo Wei };
189fb0c3269SLuo Wei 
190fb0c3269SLuo Wei struct serdes_chip_split_ops {
191fb0c3269SLuo Wei 	int (*select)(struct serdes *serdes, int chan);
192fb0c3269SLuo Wei 	int (*deselect)(struct serdes *serdes, int chan);
193fb0c3269SLuo Wei 	int (*set_i2c_addr)(struct serdes *serdes, int address, int link);
194fb0c3269SLuo Wei };
195fb0c3269SLuo Wei struct serdes_chip_irq_ops {
196fb0c3269SLuo Wei 	/*serdes chip function for lock and err irq*/
197fb0c3269SLuo Wei 	int (*lock_handle)(struct serdes *serdes);
198fb0c3269SLuo Wei 	int (*err_handle)(struct serdes *serdes);
199fb0c3269SLuo Wei };
200fb0c3269SLuo Wei 
201fb0c3269SLuo Wei struct serdes_chip_data {
202fb0c3269SLuo Wei 	const char *name;
203fb0c3269SLuo Wei 	enum serdes_type serdes_type;
204fb0c3269SLuo Wei 	enum serdes_id serdes_id;
205fb0c3269SLuo Wei 	enum reg_val_type reg_val_type;
206fb0c3269SLuo Wei 	int sequence_init;
207fb0c3269SLuo Wei 	int connector_type;
208fb0c3269SLuo Wei 	int reg_id;
209fb0c3269SLuo Wei 	int id_data;
210fb0c3269SLuo Wei 	int int_status_reg;
211fb0c3269SLuo Wei 	int int_trig;
212fb0c3269SLuo Wei 	int num_gpio;
213fb0c3269SLuo Wei 	int gpio_base;
214fb0c3269SLuo Wei 	int same_chip_count;
215fb0c3269SLuo Wei 	u8 bank_num;
216fb0c3269SLuo Wei 
217fb0c3269SLuo Wei 	int (*chip_init)(struct serdes *serdes);
218fb0c3269SLuo Wei 	struct serdes_chip_pinctrl_info *pinctrl_info;
219fb0c3269SLuo Wei 	struct serdes_chip_bridge_ops *bridge_ops;
220fb0c3269SLuo Wei 	struct serdes_chip_panel_ops *panel_ops;
221fb0c3269SLuo Wei 	struct serdes_chip_pinctrl_ops *pinctrl_ops;
222fb0c3269SLuo Wei 	struct serdes_chip_gpio_ops *gpio_ops;
223fb0c3269SLuo Wei 	struct serdes_chip_split_ops *split_ops;
224fb0c3269SLuo Wei 	struct serdes_chip_irq_ops *irq_ops;
225fb0c3269SLuo Wei };
226fb0c3269SLuo Wei 
227fb0c3269SLuo Wei struct reg_sequence {
228fb0c3269SLuo Wei 	unsigned int reg;
229fb0c3269SLuo Wei 	unsigned int def;
230fb0c3269SLuo Wei 	unsigned int delay_us;
231fb0c3269SLuo Wei };
232fb0c3269SLuo Wei 
233fb0c3269SLuo Wei struct serdes_init_seq {
234fb0c3269SLuo Wei 	struct reg_sequence *reg_sequence;
235fb0c3269SLuo Wei 	unsigned int reg_seq_cnt;
236fb0c3269SLuo Wei };
237fb0c3269SLuo Wei 
238fb0c3269SLuo Wei struct serdes_gpio {
239fb0c3269SLuo Wei 	struct udevice *dev;
240fb0c3269SLuo Wei 	struct serdes_pinctrl *parent;
241fb0c3269SLuo Wei };
242fb0c3269SLuo Wei 
243fb0c3269SLuo Wei struct serdes_pinctrl {
244fb0c3269SLuo Wei 	struct udevice *dev;
245fb0c3269SLuo Wei 	struct serdes *parent;
246fb0c3269SLuo Wei 	struct serdes_gpio *serdes_gpio;
247fb0c3269SLuo Wei 	struct pinctrl_pin_desc *pdesc;
248fb0c3269SLuo Wei 	struct regmap *regmap;
249fb0c3269SLuo Wei 	struct pinctrl_desc *pinctrl_desc;
250fb0c3269SLuo Wei 	int pin_base;
251fb0c3269SLuo Wei };
252fb0c3269SLuo Wei 
253fb0c3269SLuo Wei struct serdes_panel {
254fb0c3269SLuo Wei 	struct rockchip_panel *panel;
255fb0c3269SLuo Wei 	const char *name;
256fb0c3269SLuo Wei 	u32 width_mm;
257fb0c3269SLuo Wei 	u32 height_mm;
258fb0c3269SLuo Wei 	u32 link_rate;
259fb0c3269SLuo Wei 	u32 lane_count;
260fb0c3269SLuo Wei 	bool ssc;
261fb0c3269SLuo Wei 	struct serdes *parent;
262fb0c3269SLuo Wei 	struct drm_display_mode mode;
263fb0c3269SLuo Wei 	struct udevice *backlight;
264fb0c3269SLuo Wei 	struct rockchip_panel_funcs *panel_ops;
265fb0c3269SLuo Wei };
266fb0c3269SLuo Wei 
267fb0c3269SLuo Wei struct serdes_panel_split {
268fb0c3269SLuo Wei 	struct rockchip_panel *panel;
269fb0c3269SLuo Wei 
270fb0c3269SLuo Wei 	const char *name;
271fb0c3269SLuo Wei 	u32 width_mm;
272fb0c3269SLuo Wei 	u32 height_mm;
273fb0c3269SLuo Wei 	u32 link_rate;
274fb0c3269SLuo Wei 	u32 lane_count;
275fb0c3269SLuo Wei 	bool ssc;
276fb0c3269SLuo Wei 	struct serdes *parent;
277fb0c3269SLuo Wei 	struct drm_display_mode mode;
278fb0c3269SLuo Wei 	struct udevice *backlight;
279fb0c3269SLuo Wei 	struct rockchip_panel_funcs *panel_ops;
280fb0c3269SLuo Wei };
281fb0c3269SLuo Wei 
282fb0c3269SLuo Wei struct serdes_bridge {
283fb0c3269SLuo Wei 	bool sel_mipi;
284fb0c3269SLuo Wei 	struct mipi_dsi_device *dsi;
285fb0c3269SLuo Wei 	struct serdes *parent;
286fb0c3269SLuo Wei 	struct drm_display_mode mode;
287fb0c3269SLuo Wei 	struct rockchip_bridge *bridge;
288fb0c3269SLuo Wei 	struct rockchip_bridge_funcs *bridge_ops;
289fb0c3269SLuo Wei };
290fb0c3269SLuo Wei 
291fb0c3269SLuo Wei struct serdes_bridge_split {
292fb0c3269SLuo Wei 	bool sel_mipi;
293fb0c3269SLuo Wei 	struct mipi_dsi_device *dsi;
294fb0c3269SLuo Wei 	struct serdes *parent;
295fb0c3269SLuo Wei 	struct drm_display_mode mode;
296fb0c3269SLuo Wei 	struct rockchip_bridge *bridge;
297fb0c3269SLuo Wei 	struct rockchip_bridge_funcs *bridge_ops;
298fb0c3269SLuo Wei };
299fb0c3269SLuo Wei 
300fb0c3269SLuo Wei struct serdes {
301fb0c3269SLuo Wei 	struct udevice *dev;
302fb0c3269SLuo Wei 	struct udevice *vpower_supply;
303fb0c3269SLuo Wei 	struct serdes_init_seq *serdes_init_seq;
304fb0c3269SLuo Wei 	enum serdes_type type;
305fb0c3269SLuo Wei 
306fb0c3269SLuo Wei 	/*serdes power and reset pin*/
307fb0c3269SLuo Wei 	struct gpio_desc reset_gpio;
308fb0c3269SLuo Wei 	struct gpio_desc enable_gpio;
309fb0c3269SLuo Wei 
310fb0c3269SLuo Wei 	/* serdes irq pin */
311fb0c3269SLuo Wei 	struct gpio_desc lock_gpio;
312fb0c3269SLuo Wei 	struct gpio_desc err_gpio;
313fb0c3269SLuo Wei 	int lock_irq;
314fb0c3269SLuo Wei 	int err_irq;
315fb0c3269SLuo Wei 	int lock_irq_trig;
316fb0c3269SLuo Wei 	int err_irq_trig;
317fb0c3269SLuo Wei 
318fb0c3269SLuo Wei 	bool sel_mipi;
3193fc0646aSZitong Cai 	bool mcu_enable;
320fb0c3269SLuo Wei 	struct mipi_dsi_device *dsi;
321fb0c3269SLuo Wei 
322fb0c3269SLuo Wei 	bool split_mode_enable;
323fb0c3269SLuo Wei 	unsigned int reg_hw;
324fb0c3269SLuo Wei 	unsigned int reg_use;
325fb0c3269SLuo Wei 	unsigned int link_use;
326fb0c3269SLuo Wei 	unsigned int id_serdes_bridge_split;
327fb0c3269SLuo Wei 	unsigned int id_serdes_panel_split;
328fb0c3269SLuo Wei 	struct serdes *g_serdes_bridge_split;
329fb0c3269SLuo Wei 
330fb0c3269SLuo Wei 	struct serdes_bridge *serdes_bridge;
331fb0c3269SLuo Wei 	struct serdes_bridge_split *serdes_bridge_split;
332fb0c3269SLuo Wei 	struct serdes_panel *serdes_panel;
333fb0c3269SLuo Wei 	struct serdes_panel_split *serdes_panel_split;
334fb0c3269SLuo Wei 	struct serdes_pinctrl *serdes_pinctrl;
335fb0c3269SLuo Wei 	struct serdes_chip_data *chip_data;
336fb0c3269SLuo Wei };
337fb0c3269SLuo Wei 
338fb0c3269SLuo Wei /* Device I/O API */
339fb0c3269SLuo Wei int serdes_reg_read(struct serdes *serdes, unsigned int reg, unsigned int *val);
340fb0c3269SLuo Wei int serdes_reg_write(struct serdes *serdes, unsigned int reg, unsigned int val);
341fb0c3269SLuo Wei int serdes_set_bits(struct serdes *serdes, unsigned int reg,
342fb0c3269SLuo Wei 		    unsigned int mask, unsigned int val);
343fb0c3269SLuo Wei int serdes_multi_reg_write(struct serdes *serdes,
344fb0c3269SLuo Wei 			   const struct reg_sequence *regs,
345fb0c3269SLuo Wei 			   int num_regs);
346fb0c3269SLuo Wei int serdes_i2c_set_sequence(struct serdes *serdes);
347fb0c3269SLuo Wei int serdes_parse_init_seq(struct udevice *dev, const u16 *data,
348fb0c3269SLuo Wei 			  int length, struct serdes_init_seq *seq);
349fb0c3269SLuo Wei int serdes_get_init_seq(struct serdes *serdes);
350*77c57384SZitong Cai int serdes_gpio_register(struct udevice *dev);
351*77c57384SZitong Cai int serdes_pinctrl_register(struct udevice *dev);
352fb0c3269SLuo Wei int serdes_bridge_register(struct udevice *dev, struct serdes *serdes);
353fb0c3269SLuo Wei int serdes_bridge_split_register(struct udevice *dev, struct serdes *serdes);
354fb0c3269SLuo Wei int serdes_power_init(void);
355fb0c3269SLuo Wei int serdes_video_bridge_init(void);
356fb0c3269SLuo Wei int serdes_video_bridge_split_init(void);
357fb0c3269SLuo Wei int serdes_display_init(void);
358fb0c3269SLuo Wei 
359fb0c3269SLuo Wei extern struct serdes_chip_data serdes_bu18tl82_data;
360fb0c3269SLuo Wei extern struct serdes_chip_data serdes_bu18rl82_data;
361fb0c3269SLuo Wei extern struct serdes_chip_data serdes_max96745_data;
362fb0c3269SLuo Wei extern struct serdes_chip_data serdes_max96752_data;
363fb0c3269SLuo Wei extern struct serdes_chip_data serdes_max96755_data;
364fb0c3269SLuo Wei extern struct serdes_chip_data serdes_max96772_data;
365fb0c3269SLuo Wei extern struct serdes_chip_data serdes_max96789_data;
366fb0c3269SLuo Wei extern struct serdes_chip_data serdes_rkx111_data;
367fb0c3269SLuo Wei extern struct serdes_chip_data serdes_rkx121_data;
368fb0c3269SLuo Wei extern struct serdes_chip_data serdes_nca9539_data;
369fb0c3269SLuo Wei 
370fb0c3269SLuo Wei #endif
371