diff options
author | Jose Abreu <Jose.Abreu@synopsys.com> | 2017-05-25 10:19:14 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2017-05-30 02:37:50 -0400 |
commit | b1240f81a1865670e44d25593e47c2023a20ab62 (patch) | |
tree | 3a87f2259842ac83499651c9f1384aa3c6bcaac9 | |
parent | da251bf8f93513519a3c18b2b2290557ea5ba860 (diff) |
drm: Introduce drm_bridge_mode_valid()
Introduce a new helper function which calls mode_valid() callback
for all bridges in an encoder chain.
Signed-off-by: Jose Abreu <joabreu@synopsys.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Carlos Palminha <palminha@synopsys.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Dave Airlie <airlied@linux.ie>
Cc: Andrzej Hajda <a.hajda@samsung.com>
Cc: Archit Taneja <architt@codeaurora.org>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Archit Taneja <architt@codeaurora.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/36bd5e054496ad3c9c71f1ffe204f28533f55f1e.1495720737.git.joabreu@synopsys.com
-rw-r--r-- | drivers/gpu/drm/drm_bridge.c | 33 | ||||
-rw-r--r-- | include/drm/drm_bridge.h | 2 |
2 files changed, 35 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index 86a7637ba344..dc8cdfe1dcac 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c | |||
@@ -206,6 +206,39 @@ bool drm_bridge_mode_fixup(struct drm_bridge *bridge, | |||
206 | EXPORT_SYMBOL(drm_bridge_mode_fixup); | 206 | EXPORT_SYMBOL(drm_bridge_mode_fixup); |
207 | 207 | ||
208 | /** | 208 | /** |
209 | * drm_bridge_mode_valid - validate the mode against all bridges in the | ||
210 | * encoder chain. | ||
211 | * @bridge: bridge control structure | ||
212 | * @mode: desired mode to be validated | ||
213 | * | ||
214 | * Calls &drm_bridge_funcs.mode_valid for all the bridges in the encoder | ||
215 | * chain, starting from the first bridge to the last. If at least one bridge | ||
216 | * does not accept the mode the function returns the error code. | ||
217 | * | ||
218 | * Note: the bridge passed should be the one closest to the encoder. | ||
219 | * | ||
220 | * RETURNS: | ||
221 | * MODE_OK on success, drm_mode_status Enum error code on failure | ||
222 | */ | ||
223 | enum drm_mode_status drm_bridge_mode_valid(struct drm_bridge *bridge, | ||
224 | const struct drm_display_mode *mode) | ||
225 | { | ||
226 | enum drm_mode_status ret = MODE_OK; | ||
227 | |||
228 | if (!bridge) | ||
229 | return ret; | ||
230 | |||
231 | if (bridge->funcs->mode_valid) | ||
232 | ret = bridge->funcs->mode_valid(bridge, mode); | ||
233 | |||
234 | if (ret != MODE_OK) | ||
235 | return ret; | ||
236 | |||
237 | return drm_bridge_mode_valid(bridge->next, mode); | ||
238 | } | ||
239 | EXPORT_SYMBOL(drm_bridge_mode_valid); | ||
240 | |||
241 | /** | ||
209 | * drm_bridge_disable - disables all bridges in the encoder chain | 242 | * drm_bridge_disable - disables all bridges in the encoder chain |
210 | * @bridge: bridge control structure | 243 | * @bridge: bridge control structure |
211 | * | 244 | * |
diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index 983054f2e86e..5b106eca6d57 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h | |||
@@ -253,6 +253,8 @@ int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge, | |||
253 | bool drm_bridge_mode_fixup(struct drm_bridge *bridge, | 253 | bool drm_bridge_mode_fixup(struct drm_bridge *bridge, |
254 | const struct drm_display_mode *mode, | 254 | const struct drm_display_mode *mode, |
255 | struct drm_display_mode *adjusted_mode); | 255 | struct drm_display_mode *adjusted_mode); |
256 | enum drm_mode_status drm_bridge_mode_valid(struct drm_bridge *bridge, | ||
257 | const struct drm_display_mode *mode); | ||
256 | void drm_bridge_disable(struct drm_bridge *bridge); | 258 | void drm_bridge_disable(struct drm_bridge *bridge); |
257 | void drm_bridge_post_disable(struct drm_bridge *bridge); | 259 | void drm_bridge_post_disable(struct drm_bridge *bridge); |
258 | void drm_bridge_mode_set(struct drm_bridge *bridge, | 260 | void drm_bridge_mode_set(struct drm_bridge *bridge, |