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