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