Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm: Extract drm_bridge.h

We don't want to burry the bridge structures kerneldoc in drm_crtc.h.

Cc: Archit Taneja <archit.taneja@gmail.com>
Reviewed-by: Archit Taneja <architt@codeaurora.org>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20160831160913.12991-3-daniel.vetter@ffwll.ch

+237 -189
+7
Documentation/gpu/drm-kms-helpers.rst
··· 126 126 .. kernel-doc:: drivers/gpu/drm/drm_bridge.c 127 127 :doc: bridge callbacks 128 128 129 + 130 + Bridge Helper Reference 131 + ------------------------- 132 + 133 + .. kernel-doc:: include/drm/drm_bridge.h 134 + :internal: 135 + 129 136 .. kernel-doc:: drivers/gpu/drm/drm_bridge.c 130 137 :export: 131 138
+2 -3
drivers/gpu/drm/drm_bridge.c
··· 23 23 24 24 #include <linux/err.h> 25 25 #include <linux/module.h> 26 + #include <linux/mutex.h> 26 27 27 - #include <drm/drm_crtc.h> 28 - 29 - #include "drm/drmP.h" 28 + #include <drm/drm_bridge.h> 30 29 31 30 /** 32 31 * DOC: overview
+218
include/drm/drm_bridge.h
··· 1 + /* 2 + * Copyright (c) 2016 Intel Corporation 3 + * 4 + * Permission to use, copy, modify, distribute, and sell this software and its 5 + * documentation for any purpose is hereby granted without fee, provided that 6 + * the above copyright notice appear in all copies and that both that copyright 7 + * notice and this permission notice appear in supporting documentation, and 8 + * that the name of the copyright holders not be used in advertising or 9 + * publicity pertaining to distribution of the software without specific, 10 + * written prior permission. The copyright holders make no representations 11 + * about the suitability of this software for any purpose. It is provided "as 12 + * is" without express or implied warranty. 13 + * 14 + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 15 + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 16 + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR 17 + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 18 + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 19 + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 20 + * OF THIS SOFTWARE. 21 + */ 22 + 23 + #ifndef __DRM_BRIDGE_H__ 24 + #define __DRM_BRIDGE_H__ 25 + 26 + #include <linux/list.h> 27 + #include <linux/ctype.h> 28 + #include <drm/drm_mode_object.h> 29 + #include <drm/drm_modes.h> 30 + 31 + struct drm_bridge; 32 + 33 + /** 34 + * struct drm_bridge_funcs - drm_bridge control functions 35 + */ 36 + struct drm_bridge_funcs { 37 + /** 38 + * @attach: 39 + * 40 + * This callback is invoked whenever our bridge is being attached to a 41 + * &drm_encoder. 42 + * 43 + * The attach callback is optional. 44 + * 45 + * RETURNS: 46 + * 47 + * Zero on success, error code on failure. 48 + */ 49 + int (*attach)(struct drm_bridge *bridge); 50 + 51 + /** 52 + * @detach: 53 + * 54 + * This callback is invoked whenever our bridge is being detached from a 55 + * &drm_encoder. 56 + * 57 + * The detach callback is optional. 58 + */ 59 + void (*detach)(struct drm_bridge *bridge); 60 + 61 + /** 62 + * @mode_fixup: 63 + * 64 + * This callback is used to validate and adjust a mode. The paramater 65 + * mode is the display mode that should be fed to the next element in 66 + * the display chain, either the final &drm_connector or the next 67 + * &drm_bridge. The parameter adjusted_mode is the input mode the bridge 68 + * requires. It can be modified by this callback and does not need to 69 + * match mode. 70 + * 71 + * This is the only hook that allows a bridge to reject a modeset. If 72 + * this function passes all other callbacks must succeed for this 73 + * configuration. 74 + * 75 + * The mode_fixup callback is optional. 76 + * 77 + * NOTE: 78 + * 79 + * This function is called in the check phase of atomic modesets, which 80 + * can be aborted for any reason (including on userspace's request to 81 + * just check whether a configuration would be possible). Drivers MUST 82 + * NOT touch any persistent state (hardware or software) or data 83 + * structures except the passed in @state parameter. 84 + * 85 + * RETURNS: 86 + * 87 + * True if an acceptable configuration is possible, false if the modeset 88 + * operation should be rejected. 89 + */ 90 + bool (*mode_fixup)(struct drm_bridge *bridge, 91 + const struct drm_display_mode *mode, 92 + struct drm_display_mode *adjusted_mode); 93 + /** 94 + * @disable: 95 + * 96 + * This callback should disable the bridge. It is called right before 97 + * the preceding element in the display pipe is disabled. If the 98 + * preceding element is a bridge this means it's called before that 99 + * bridge's ->disable() function. If the preceding element is a 100 + * &drm_encoder it's called right before the encoder's ->disable(), 101 + * ->prepare() or ->dpms() hook from struct &drm_encoder_helper_funcs. 102 + * 103 + * The bridge can assume that the display pipe (i.e. clocks and timing 104 + * signals) feeding it is still running when this callback is called. 105 + * 106 + * The disable callback is optional. 107 + */ 108 + void (*disable)(struct drm_bridge *bridge); 109 + 110 + /** 111 + * @post_disable: 112 + * 113 + * This callback should disable the bridge. It is called right after 114 + * the preceding element in the display pipe is disabled. If the 115 + * preceding element is a bridge this means it's called after that 116 + * bridge's ->post_disable() function. If the preceding element is a 117 + * &drm_encoder it's called right after the encoder's ->disable(), 118 + * ->prepare() or ->dpms() hook from struct &drm_encoder_helper_funcs. 119 + * 120 + * The bridge must assume that the display pipe (i.e. clocks and timing 121 + * singals) feeding it is no longer running when this callback is 122 + * called. 123 + * 124 + * The post_disable callback is optional. 125 + */ 126 + void (*post_disable)(struct drm_bridge *bridge); 127 + 128 + /** 129 + * @mode_set: 130 + * 131 + * This callback should set the given mode on the bridge. It is called 132 + * after the ->mode_set() callback for the preceding element in the 133 + * display pipeline has been called already. The display pipe (i.e. 134 + * clocks and timing signals) is off when this function is called. 135 + */ 136 + void (*mode_set)(struct drm_bridge *bridge, 137 + struct drm_display_mode *mode, 138 + struct drm_display_mode *adjusted_mode); 139 + /** 140 + * @pre_enable: 141 + * 142 + * This callback should enable the bridge. It is called right before 143 + * the preceding element in the display pipe is enabled. If the 144 + * preceding element is a bridge this means it's called before that 145 + * bridge's ->pre_enable() function. If the preceding element is a 146 + * &drm_encoder it's called right before the encoder's ->enable(), 147 + * ->commit() or ->dpms() hook from struct &drm_encoder_helper_funcs. 148 + * 149 + * The display pipe (i.e. clocks and timing signals) feeding this bridge 150 + * will not yet be running when this callback is called. The bridge must 151 + * not enable the display link feeding the next bridge in the chain (if 152 + * there is one) when this callback is called. 153 + * 154 + * The pre_enable callback is optional. 155 + */ 156 + void (*pre_enable)(struct drm_bridge *bridge); 157 + 158 + /** 159 + * @enable: 160 + * 161 + * This callback should enable the bridge. It is called right after 162 + * the preceding element in the display pipe is enabled. If the 163 + * preceding element is a bridge this means it's called after that 164 + * bridge's ->enable() function. If the preceding element is a 165 + * &drm_encoder it's called right after the encoder's ->enable(), 166 + * ->commit() or ->dpms() hook from struct &drm_encoder_helper_funcs. 167 + * 168 + * The bridge can assume that the display pipe (i.e. clocks and timing 169 + * signals) feeding it is running when this callback is called. This 170 + * callback must enable the display link feeding the next bridge in the 171 + * chain if there is one. 172 + * 173 + * The enable callback is optional. 174 + */ 175 + void (*enable)(struct drm_bridge *bridge); 176 + }; 177 + 178 + /** 179 + * struct drm_bridge - central DRM bridge control structure 180 + * @dev: DRM device this bridge belongs to 181 + * @encoder: encoder to which this bridge is connected 182 + * @next: the next bridge in the encoder chain 183 + * @of_node: device node pointer to the bridge 184 + * @list: to keep track of all added bridges 185 + * @funcs: control functions 186 + * @driver_private: pointer to the bridge driver's internal context 187 + */ 188 + struct drm_bridge { 189 + struct drm_device *dev; 190 + struct drm_encoder *encoder; 191 + struct drm_bridge *next; 192 + #ifdef CONFIG_OF 193 + struct device_node *of_node; 194 + #endif 195 + struct list_head list; 196 + 197 + const struct drm_bridge_funcs *funcs; 198 + void *driver_private; 199 + }; 200 + 201 + int drm_bridge_add(struct drm_bridge *bridge); 202 + void drm_bridge_remove(struct drm_bridge *bridge); 203 + struct drm_bridge *of_drm_find_bridge(struct device_node *np); 204 + int drm_bridge_attach(struct drm_device *dev, struct drm_bridge *bridge); 205 + void drm_bridge_detach(struct drm_bridge *bridge); 206 + 207 + bool drm_bridge_mode_fixup(struct drm_bridge *bridge, 208 + const struct drm_display_mode *mode, 209 + struct drm_display_mode *adjusted_mode); 210 + void drm_bridge_disable(struct drm_bridge *bridge); 211 + void drm_bridge_post_disable(struct drm_bridge *bridge); 212 + void drm_bridge_mode_set(struct drm_bridge *bridge, 213 + struct drm_display_mode *mode, 214 + struct drm_display_mode *adjusted_mode); 215 + void drm_bridge_pre_enable(struct drm_bridge *bridge); 216 + void drm_bridge_enable(struct drm_bridge *bridge); 217 + 218 + #endif
+4
include/drm/drm_connector.h
··· 27 27 #include <linux/ctype.h> 28 28 #include <drm/drm_mode_object.h> 29 29 30 + #include <uapi/drm/drm_mode.h> 31 + 32 + struct drm_device; 33 + 30 34 struct drm_connector_helper_funcs; 31 35 struct drm_device; 32 36 struct drm_crtc;
+1 -186
include/drm/drm_crtc.h
··· 42 42 #include <drm/drm_connector.h> 43 43 #include <drm/drm_encoder.h> 44 44 #include <drm/drm_property.h> 45 + #include <drm/drm_bridge.h> 45 46 46 47 struct drm_device; 47 48 struct drm_mode_set; ··· 1017 1016 struct drm_plane_state *state; 1018 1017 1019 1018 struct drm_property *zpos_property; 1020 - }; 1021 - 1022 - /** 1023 - * struct drm_bridge_funcs - drm_bridge control functions 1024 - */ 1025 - struct drm_bridge_funcs { 1026 - /** 1027 - * @attach: 1028 - * 1029 - * This callback is invoked whenever our bridge is being attached to a 1030 - * &drm_encoder. 1031 - * 1032 - * The attach callback is optional. 1033 - * 1034 - * RETURNS: 1035 - * 1036 - * Zero on success, error code on failure. 1037 - */ 1038 - int (*attach)(struct drm_bridge *bridge); 1039 - 1040 - /** 1041 - * @detach: 1042 - * 1043 - * This callback is invoked whenever our bridge is being detached from a 1044 - * &drm_encoder. 1045 - * 1046 - * The detach callback is optional. 1047 - */ 1048 - void (*detach)(struct drm_bridge *bridge); 1049 - 1050 - /** 1051 - * @mode_fixup: 1052 - * 1053 - * This callback is used to validate and adjust a mode. The paramater 1054 - * mode is the display mode that should be fed to the next element in 1055 - * the display chain, either the final &drm_connector or the next 1056 - * &drm_bridge. The parameter adjusted_mode is the input mode the bridge 1057 - * requires. It can be modified by this callback and does not need to 1058 - * match mode. 1059 - * 1060 - * This is the only hook that allows a bridge to reject a modeset. If 1061 - * this function passes all other callbacks must succeed for this 1062 - * configuration. 1063 - * 1064 - * The mode_fixup callback is optional. 1065 - * 1066 - * NOTE: 1067 - * 1068 - * This function is called in the check phase of atomic modesets, which 1069 - * can be aborted for any reason (including on userspace's request to 1070 - * just check whether a configuration would be possible). Drivers MUST 1071 - * NOT touch any persistent state (hardware or software) or data 1072 - * structures except the passed in @state parameter. 1073 - * 1074 - * RETURNS: 1075 - * 1076 - * True if an acceptable configuration is possible, false if the modeset 1077 - * operation should be rejected. 1078 - */ 1079 - bool (*mode_fixup)(struct drm_bridge *bridge, 1080 - const struct drm_display_mode *mode, 1081 - struct drm_display_mode *adjusted_mode); 1082 - /** 1083 - * @disable: 1084 - * 1085 - * This callback should disable the bridge. It is called right before 1086 - * the preceding element in the display pipe is disabled. If the 1087 - * preceding element is a bridge this means it's called before that 1088 - * bridge's ->disable() function. If the preceding element is a 1089 - * &drm_encoder it's called right before the encoder's ->disable(), 1090 - * ->prepare() or ->dpms() hook from struct &drm_encoder_helper_funcs. 1091 - * 1092 - * The bridge can assume that the display pipe (i.e. clocks and timing 1093 - * signals) feeding it is still running when this callback is called. 1094 - * 1095 - * The disable callback is optional. 1096 - */ 1097 - void (*disable)(struct drm_bridge *bridge); 1098 - 1099 - /** 1100 - * @post_disable: 1101 - * 1102 - * This callback should disable the bridge. It is called right after 1103 - * the preceding element in the display pipe is disabled. If the 1104 - * preceding element is a bridge this means it's called after that 1105 - * bridge's ->post_disable() function. If the preceding element is a 1106 - * &drm_encoder it's called right after the encoder's ->disable(), 1107 - * ->prepare() or ->dpms() hook from struct &drm_encoder_helper_funcs. 1108 - * 1109 - * The bridge must assume that the display pipe (i.e. clocks and timing 1110 - * singals) feeding it is no longer running when this callback is 1111 - * called. 1112 - * 1113 - * The post_disable callback is optional. 1114 - */ 1115 - void (*post_disable)(struct drm_bridge *bridge); 1116 - 1117 - /** 1118 - * @mode_set: 1119 - * 1120 - * This callback should set the given mode on the bridge. It is called 1121 - * after the ->mode_set() callback for the preceding element in the 1122 - * display pipeline has been called already. The display pipe (i.e. 1123 - * clocks and timing signals) is off when this function is called. 1124 - */ 1125 - void (*mode_set)(struct drm_bridge *bridge, 1126 - struct drm_display_mode *mode, 1127 - struct drm_display_mode *adjusted_mode); 1128 - /** 1129 - * @pre_enable: 1130 - * 1131 - * This callback should enable the bridge. It is called right before 1132 - * the preceding element in the display pipe is enabled. If the 1133 - * preceding element is a bridge this means it's called before that 1134 - * bridge's ->pre_enable() function. If the preceding element is a 1135 - * &drm_encoder it's called right before the encoder's ->enable(), 1136 - * ->commit() or ->dpms() hook from struct &drm_encoder_helper_funcs. 1137 - * 1138 - * The display pipe (i.e. clocks and timing signals) feeding this bridge 1139 - * will not yet be running when this callback is called. The bridge must 1140 - * not enable the display link feeding the next bridge in the chain (if 1141 - * there is one) when this callback is called. 1142 - * 1143 - * The pre_enable callback is optional. 1144 - */ 1145 - void (*pre_enable)(struct drm_bridge *bridge); 1146 - 1147 - /** 1148 - * @enable: 1149 - * 1150 - * This callback should enable the bridge. It is called right after 1151 - * the preceding element in the display pipe is enabled. If the 1152 - * preceding element is a bridge this means it's called after that 1153 - * bridge's ->enable() function. If the preceding element is a 1154 - * &drm_encoder it's called right after the encoder's ->enable(), 1155 - * ->commit() or ->dpms() hook from struct &drm_encoder_helper_funcs. 1156 - * 1157 - * The bridge can assume that the display pipe (i.e. clocks and timing 1158 - * signals) feeding it is running when this callback is called. This 1159 - * callback must enable the display link feeding the next bridge in the 1160 - * chain if there is one. 1161 - * 1162 - * The enable callback is optional. 1163 - */ 1164 - void (*enable)(struct drm_bridge *bridge); 1165 - }; 1166 - 1167 - /** 1168 - * struct drm_bridge - central DRM bridge control structure 1169 - * @dev: DRM device this bridge belongs to 1170 - * @encoder: encoder to which this bridge is connected 1171 - * @next: the next bridge in the encoder chain 1172 - * @of_node: device node pointer to the bridge 1173 - * @list: to keep track of all added bridges 1174 - * @funcs: control functions 1175 - * @driver_private: pointer to the bridge driver's internal context 1176 - */ 1177 - struct drm_bridge { 1178 - struct drm_device *dev; 1179 - struct drm_encoder *encoder; 1180 - struct drm_bridge *next; 1181 - #ifdef CONFIG_OF 1182 - struct device_node *of_node; 1183 - #endif 1184 - struct list_head list; 1185 - 1186 - const struct drm_bridge_funcs *funcs; 1187 - void *driver_private; 1188 1019 }; 1189 1020 1190 1021 /** ··· 2032 2199 struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev, 2033 2200 int hsize, int vsize, int fresh, 2034 2201 bool rb); 2035 - 2036 - /* drm_bridge.c */ 2037 - extern int drm_bridge_add(struct drm_bridge *bridge); 2038 - extern void drm_bridge_remove(struct drm_bridge *bridge); 2039 - extern struct drm_bridge *of_drm_find_bridge(struct device_node *np); 2040 - extern int drm_bridge_attach(struct drm_device *dev, struct drm_bridge *bridge); 2041 - extern void drm_bridge_detach(struct drm_bridge *bridge); 2042 - 2043 - bool drm_bridge_mode_fixup(struct drm_bridge *bridge, 2044 - const struct drm_display_mode *mode, 2045 - struct drm_display_mode *adjusted_mode); 2046 - void drm_bridge_disable(struct drm_bridge *bridge); 2047 - void drm_bridge_post_disable(struct drm_bridge *bridge); 2048 - void drm_bridge_mode_set(struct drm_bridge *bridge, 2049 - struct drm_display_mode *mode, 2050 - struct drm_display_mode *adjusted_mode); 2051 - void drm_bridge_pre_enable(struct drm_bridge *bridge); 2052 - void drm_bridge_enable(struct drm_bridge *bridge); 2053 2202 2054 2203 #endif /* __DRM_CRTC_H__ */
+1
include/drm/drm_mode_object.h
··· 26 26 #include <linux/kref.h> 27 27 struct drm_object_properties; 28 28 struct drm_property; 29 + struct drm_device; 29 30 30 31 /** 31 32 * struct drm_mode_object - base structure for modeset objects
+4
include/drm/drm_modes.h
··· 27 27 #ifndef __DRM_MODES_H__ 28 28 #define __DRM_MODES_H__ 29 29 30 + #include <linux/hdmi.h> 31 + 30 32 #include <drm/drm_mode_object.h> 31 33 #include <drm/drm_connector.h> 34 + 35 + struct videomode; 32 36 33 37 /* 34 38 * Note on terminology: here, for brevity and convenience, we refer to connector