diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2015-12-04 03:45:47 -0500 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2015-12-08 10:07:53 -0500 |
commit | da024fe58680a46346cfbeba5db705d33f39b313 (patch) | |
tree | 56a22b3ff8d9bbf387f83aef21b0205cce09985d /drivers/gpu/drm/drm_bridge.c | |
parent | 2be94971c759da872efce99fa823ea17cdb7cc8b (diff) |
drm/bridge: Improve kerneldoc
Especially document the assumptions and semantics of the callbacks
carefully. Just a warm-up excercise really.
v2: Spelling fixes (Eric).
v3: Consolidate more with existing docs:
- Remove the overview section explaining the bridge funcs, that's
now all in the drm_bridge_funcs kerneldoc in much more detail.
- Use & to reference structs so that kerneldoc automatically inserts
hyperlinks.
v4: Review from Thierry.
Cc: Eric Anholt <eric@anholt.net>
Cc: Archit Taneja <architt@codeaurora.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Archit Taneja <architt@codeaurora.org> (v3)
Link: http://patchwork.freedesktop.org/patch/msgid/1449218769-16577-7-git-send-email-daniel.vetter@ffwll.ch
Reviewed-by: Thierry Reding <treding@nvidia.com>
Diffstat (limited to 'drivers/gpu/drm/drm_bridge.c')
-rw-r--r-- | drivers/gpu/drm/drm_bridge.c | 69 |
1 files changed, 26 insertions, 43 deletions
diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index 6b8f7211e543..bd93453afa61 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c | |||
@@ -31,14 +31,14 @@ | |||
31 | /** | 31 | /** |
32 | * DOC: overview | 32 | * DOC: overview |
33 | * | 33 | * |
34 | * drm_bridge represents a device that hangs on to an encoder. These are handy | 34 | * struct &drm_bridge represents a device that hangs on to an encoder. These are |
35 | * when a regular drm_encoder entity isn't enough to represent the entire | 35 | * handy when a regular &drm_encoder entity isn't enough to represent the entire |
36 | * encoder chain. | 36 | * encoder chain. |
37 | * | 37 | * |
38 | * A bridge is always associated to a single drm_encoder at a time, but can be | 38 | * A bridge is always attached to a single &drm_encoder at a time, but can be |
39 | * either connected to it directly, or through an intermediate bridge: | 39 | * either connected to it directly, or through an intermediate bridge: |
40 | * | 40 | * |
41 | * encoder ---> bridge B ---> bridge A | 41 | * encoder ---> bridge B ---> bridge A |
42 | * | 42 | * |
43 | * Here, the output of the encoder feeds to bridge B, and that furthers feeds to | 43 | * Here, the output of the encoder feeds to bridge B, and that furthers feeds to |
44 | * bridge A. | 44 | * bridge A. |
@@ -46,11 +46,16 @@ | |||
46 | * The driver using the bridge is responsible to make the associations between | 46 | * The driver using the bridge is responsible to make the associations between |
47 | * the encoder and bridges. Once these links are made, the bridges will | 47 | * the encoder and bridges. Once these links are made, the bridges will |
48 | * participate along with encoder functions to perform mode_set/enable/disable | 48 | * participate along with encoder functions to perform mode_set/enable/disable |
49 | * through the ops provided in drm_bridge_funcs. | 49 | * through the ops provided in &drm_bridge_funcs. |
50 | * | 50 | * |
51 | * drm_bridge, like drm_panel, aren't drm_mode_object entities like planes, | 51 | * drm_bridge, like drm_panel, aren't drm_mode_object entities like planes, |
52 | * crtcs, encoders or connectors. They just provide additional hooks to get the | 52 | * CRTCs, encoders or connectors and hence are not visible to userspace. They |
53 | * desired output at the end of the encoder chain. | 53 | * just provide additional hooks to get the desired output at the end of the |
54 | * encoder chain. | ||
55 | * | ||
56 | * Bridges can also be chained up using the next pointer in struct &drm_bridge. | ||
57 | * | ||
58 | * Both legacy CRTC helpers and the new atomic modeset helpers support bridges. | ||
54 | */ | 59 | */ |
55 | 60 | ||
56 | static DEFINE_MUTEX(bridge_lock); | 61 | static DEFINE_MUTEX(bridge_lock); |
@@ -122,34 +127,12 @@ EXPORT_SYMBOL(drm_bridge_attach); | |||
122 | /** | 127 | /** |
123 | * DOC: bridge callbacks | 128 | * DOC: bridge callbacks |
124 | * | 129 | * |
125 | * The drm_bridge_funcs ops are populated by the bridge driver. The drm | 130 | * The &drm_bridge_funcs ops are populated by the bridge driver. The DRM |
126 | * internals(atomic and crtc helpers) use the helpers defined in drm_bridge.c | 131 | * internals (atomic and CRTC helpers) use the helpers defined in drm_bridge.c |
127 | * These helpers call a specific drm_bridge_funcs op for all the bridges | 132 | * These helpers call a specific &drm_bridge_funcs op for all the bridges |
128 | * during encoder configuration. | 133 | * during encoder configuration. |
129 | * | 134 | * |
130 | * When creating a bridge driver, one can implement drm_bridge_funcs op with | 135 | * For detailed specification of the bridge callbacks see &drm_bridge_funcs. |
131 | * the help of these rough rules: | ||
132 | * | ||
133 | * pre_enable: this contains things needed to be done for the bridge before | ||
134 | * its clock and timings are enabled by its source. For a bridge, its source | ||
135 | * is generally the encoder or bridge just before it in the encoder chain. | ||
136 | * | ||
137 | * enable: this contains things needed to be done for the bridge once its | ||
138 | * source is enabled. In other words, enable is called once the source is | ||
139 | * ready with clock and timing needed by the bridge. | ||
140 | * | ||
141 | * disable: this contains things needed to be done for the bridge assuming | ||
142 | * that its source is still enabled, i.e. clock and timings are still on. | ||
143 | * | ||
144 | * post_disable: this contains things needed to be done for the bridge once | ||
145 | * its source is disabled, i.e. once clocks and timings are off. | ||
146 | * | ||
147 | * mode_fixup: this should fixup the given mode for the bridge. It is called | ||
148 | * after the encoder's mode fixup. mode_fixup can also reject a mode completely | ||
149 | * if it's unsuitable for the hardware. | ||
150 | * | ||
151 | * mode_set: this sets up the mode for the bridge. It assumes that its source | ||
152 | * (an encoder or a bridge) has set the mode too. | ||
153 | */ | 136 | */ |
154 | 137 | ||
155 | /** | 138 | /** |
@@ -159,7 +142,7 @@ EXPORT_SYMBOL(drm_bridge_attach); | |||
159 | * @mode: desired mode to be set for the bridge | 142 | * @mode: desired mode to be set for the bridge |
160 | * @adjusted_mode: updated mode that works for this bridge | 143 | * @adjusted_mode: updated mode that works for this bridge |
161 | * | 144 | * |
162 | * Calls 'mode_fixup' drm_bridge_funcs op for all the bridges in the | 145 | * Calls ->mode_fixup() &drm_bridge_funcs op for all the bridges in the |
163 | * encoder chain, starting from the first bridge to the last. | 146 | * encoder chain, starting from the first bridge to the last. |
164 | * | 147 | * |
165 | * Note: the bridge passed should be the one closest to the encoder | 148 | * Note: the bridge passed should be the one closest to the encoder |
@@ -186,11 +169,11 @@ bool drm_bridge_mode_fixup(struct drm_bridge *bridge, | |||
186 | EXPORT_SYMBOL(drm_bridge_mode_fixup); | 169 | EXPORT_SYMBOL(drm_bridge_mode_fixup); |
187 | 170 | ||
188 | /** | 171 | /** |
189 | * drm_bridge_disable - calls 'disable' drm_bridge_funcs op for all | 172 | * drm_bridge_disable - calls ->disable() &drm_bridge_funcs op for all |
190 | * bridges in the encoder chain. | 173 | * bridges in the encoder chain. |
191 | * @bridge: bridge control structure | 174 | * @bridge: bridge control structure |
192 | * | 175 | * |
193 | * Calls 'disable' drm_bridge_funcs op for all the bridges in the encoder | 176 | * Calls ->disable() &drm_bridge_funcs op for all the bridges in the encoder |
194 | * chain, starting from the last bridge to the first. These are called before | 177 | * chain, starting from the last bridge to the first. These are called before |
195 | * calling the encoder's prepare op. | 178 | * calling the encoder's prepare op. |
196 | * | 179 | * |
@@ -208,11 +191,11 @@ void drm_bridge_disable(struct drm_bridge *bridge) | |||
208 | EXPORT_SYMBOL(drm_bridge_disable); | 191 | EXPORT_SYMBOL(drm_bridge_disable); |
209 | 192 | ||
210 | /** | 193 | /** |
211 | * drm_bridge_post_disable - calls 'post_disable' drm_bridge_funcs op for | 194 | * drm_bridge_post_disable - calls ->post_disable() &drm_bridge_funcs op for |
212 | * all bridges in the encoder chain. | 195 | * all bridges in the encoder chain. |
213 | * @bridge: bridge control structure | 196 | * @bridge: bridge control structure |
214 | * | 197 | * |
215 | * Calls 'post_disable' drm_bridge_funcs op for all the bridges in the | 198 | * Calls ->post_disable() &drm_bridge_funcs op for all the bridges in the |
216 | * encoder chain, starting from the first bridge to the last. These are called | 199 | * encoder chain, starting from the first bridge to the last. These are called |
217 | * after completing the encoder's prepare op. | 200 | * after completing the encoder's prepare op. |
218 | * | 201 | * |
@@ -236,7 +219,7 @@ EXPORT_SYMBOL(drm_bridge_post_disable); | |||
236 | * @mode: desired mode to be set for the bridge | 219 | * @mode: desired mode to be set for the bridge |
237 | * @adjusted_mode: updated mode that works for this bridge | 220 | * @adjusted_mode: updated mode that works for this bridge |
238 | * | 221 | * |
239 | * Calls 'mode_set' drm_bridge_funcs op for all the bridges in the | 222 | * Calls ->mode_set() &drm_bridge_funcs op for all the bridges in the |
240 | * encoder chain, starting from the first bridge to the last. | 223 | * encoder chain, starting from the first bridge to the last. |
241 | * | 224 | * |
242 | * Note: the bridge passed should be the one closest to the encoder | 225 | * Note: the bridge passed should be the one closest to the encoder |
@@ -256,11 +239,11 @@ void drm_bridge_mode_set(struct drm_bridge *bridge, | |||
256 | EXPORT_SYMBOL(drm_bridge_mode_set); | 239 | EXPORT_SYMBOL(drm_bridge_mode_set); |
257 | 240 | ||
258 | /** | 241 | /** |
259 | * drm_bridge_pre_enable - calls 'pre_enable' drm_bridge_funcs op for all | 242 | * drm_bridge_pre_enable - calls ->pre_enable() &drm_bridge_funcs op for all |
260 | * bridges in the encoder chain. | 243 | * bridges in the encoder chain. |
261 | * @bridge: bridge control structure | 244 | * @bridge: bridge control structure |
262 | * | 245 | * |
263 | * Calls 'pre_enable' drm_bridge_funcs op for all the bridges in the encoder | 246 | * Calls ->pre_enable() &drm_bridge_funcs op for all the bridges in the encoder |
264 | * chain, starting from the last bridge to the first. These are called | 247 | * chain, starting from the last bridge to the first. These are called |
265 | * before calling the encoder's commit op. | 248 | * before calling the encoder's commit op. |
266 | * | 249 | * |
@@ -278,11 +261,11 @@ void drm_bridge_pre_enable(struct drm_bridge *bridge) | |||
278 | EXPORT_SYMBOL(drm_bridge_pre_enable); | 261 | EXPORT_SYMBOL(drm_bridge_pre_enable); |
279 | 262 | ||
280 | /** | 263 | /** |
281 | * drm_bridge_enable - calls 'enable' drm_bridge_funcs op for all bridges | 264 | * drm_bridge_enable - calls ->enable() &drm_bridge_funcs op for all bridges |
282 | * in the encoder chain. | 265 | * in the encoder chain. |
283 | * @bridge: bridge control structure | 266 | * @bridge: bridge control structure |
284 | * | 267 | * |
285 | * Calls 'enable' drm_bridge_funcs op for all the bridges in the encoder | 268 | * Calls ->enable() &drm_bridge_funcs op for all the bridges in the encoder |
286 | * chain, starting from the first bridge to the last. These are called | 269 | * chain, starting from the first bridge to the last. These are called |
287 | * after completing the encoder's commit op. | 270 | * after completing the encoder's commit op. |
288 | * | 271 | * |