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