xref: /rk3399_rockchip-uboot/drivers/video/drm/rockchip_connector.h (revision 690e9ed17aeae22edefd790be3aa69d5fb401bae)
1 /*
2  * (C) Copyright 2008-2017 Fuzhou Rockchip Electronics Co., Ltd
3  *
4  * SPDX-License-Identifier:	GPL-2.0+
5  */
6 
7 #ifndef _ROCKCHIP_CONNECTOR_H_
8 #define _ROCKCHIP_CONNECTOR_H_
9 
10 #ifdef CONFIG_SPL_BUILD
11 struct rockchip_connector {
12 	struct rockchip_phy *phy;
13 	int id;
14 	int type;
15 	bool hpd;
16 
17 	const struct rockchip_connector_funcs *funcs;
18 	void *data;
19 };
20 #else
21 #include "rockchip_bridge.h"
22 #include "rockchip_panel.h"
23 
24 struct rockchip_connector {
25 	struct udevice *dev;
26 	struct rockchip_bridge *bridge;
27 	struct rockchip_panel *panel;
28 	struct rockchip_phy *phy;
29 	struct list_head head;
30 	int id;
31 	int type;
32 	bool hpd;
33 
34 	const struct rockchip_connector_funcs *funcs;
35 	void *data;
36 };
37 #endif
38 
39 struct rockchip_connector_funcs {
40 	/*
41 	 * pre init connector, prepare some parameter out_if, this will be
42 	 * used by rockchip_display.c and vop
43 	 */
44 	int (*pre_init)(struct rockchip_connector *connector, struct display_state *state);
45 
46 	/*
47 	 * init connector, prepare resource to ensure
48 	 * detect and get_timing can works
49 	 */
50 	int (*init)(struct rockchip_connector *connector, struct display_state *state);
51 
52 	void (*deinit)(struct rockchip_connector *connector, struct display_state *state);
53 	/*
54 	 * Optional, if connector not support hotplug,
55 	 * Returns:
56 	 *   0 means disconnected, else means connected
57 	 */
58 	int (*detect)(struct rockchip_connector *connector, struct display_state *state);
59 	/*
60 	 * Optional, if implement it, need fill the timing data:
61 	 *     state->conn_state->mode
62 	 * you can refer to the rockchip_display: display_get_timing(),
63 	 * Returns:
64 	 *   0 means success, else means failed
65 	 */
66 	int (*get_timing)(struct rockchip_connector *connector, struct display_state *state);
67 	/*
68 	 * Optional, if implement it, need fill the edid data:
69 	 *     state->conn_state->edid
70 	 * Returns:
71 	 *   0 means success, else means failed
72 	 */
73 	int (*get_edid)(struct rockchip_connector *connector, struct display_state *state);
74 	/*
75 	 * call before crtc enable.
76 	 */
77 	int (*prepare)(struct rockchip_connector *connector, struct display_state *state);
78 	/*
79 	 * call after crtc enable
80 	 */
81 	int (*enable)(struct rockchip_connector *connector, struct display_state *state);
82 	int (*disable)(struct rockchip_connector *connector, struct display_state *state);
83 	void (*unprepare)(struct rockchip_connector *connector, struct display_state *state);
84 
85 	int (*check)(struct rockchip_connector *connector, struct display_state *state);
86 	int (*mode_valid)(struct rockchip_connector *connector, struct display_state *state);
87 };
88 
89 const struct rockchip_connector *
90 rockchip_get_connector(const void *blob, int connector_node);
91 int rockchip_connector_bind(struct rockchip_connector *connector, struct udevice *dev, int id,
92 			    const struct rockchip_connector_funcs *funcs, void *data, int type);
93 struct rockchip_connector *get_rockchip_connector_by_device(struct udevice *dev);
94 int rockchip_connector_pre_init(struct display_state *state);
95 int rockchip_connector_init(struct display_state *state);
96 int rockchip_connector_deinit(struct display_state *state);
97 bool rockchip_connector_detect(struct display_state *state);
98 int rockchip_connector_get_timing(struct display_state *state);
99 int rockchip_connector_get_edid(struct display_state *state);
100 int rockchip_connector_pre_enable(struct display_state *state);
101 int rockchip_connector_enable(struct display_state *state);
102 int rockchip_connector_disable(struct display_state *state);
103 int rockchip_connector_post_disable(struct display_state *state);
104 
105 #ifdef CONFIG_DRM_ROCKCHIP_ANALOGIX_DP
106 struct rockchip_dp_chip_data;
107 extern const struct rockchip_connector_funcs rockchip_analogix_dp_funcs;
108 extern const struct rockchip_dp_chip_data rk3399_analogix_edp_drv_data;
109 extern const struct rockchip_dp_chip_data rk3368_analogix_edp_drv_data;
110 extern const struct rockchip_dp_chip_data rk3288_analogix_dp_drv_data;
111 #endif
112 #endif
113