History

drm/atomic-helper: Add an atomice best_encoder callback

With legacy helpers all the routing was already set up when calling best_encoder and so could be inspected. But with atomic it's staged, hence we need a new atomic compliant callback for drivers which need to inspect the requested state and can't just decided the best encoder statically. This is needed to fix up i915 dp mst where we need to pick the right encoder depending upon the requested CRTC for the connector. v2: Don't forget to amend the kerneldoc

Daniel Vetter committed 11 years ago

Commit 3b8a6841 parent 74d33292 files · +9 −1Browse files

Unified · Split

2 files
  1. drivers/gpu/drm/drm_atomic_helper.c +6 −1
  2. include/drm/drm_crtc_helper.h +3 −0
drivers/gpu/drm/drm_atomic_helper.c+6−1
@@ -196,7 +196,12 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx) · 195 unmodified lines
196 }196 }
197 197
198 funcs = connector->helper_private;198 funcs = connector->helper_private;
199 new_encoder = funcs->best_encoder(connector);199
200 if (funcs->atomic_best_encoder)
201 new_encoder = funcs->atomic_best_encoder(connector,
202 connector_state);
203 else
204 new_encoder = funcs->best_encoder(connector);
200 205
201 if (!new_encoder) {206 if (!new_encoder) {
202 DRM_DEBUG_ATOMIC("No suitable encoder found for [CONNECTOR:%d:%s]\n",207 DRM_DEBUG_ATOMIC("No suitable encoder found for [CONNECTOR:%d:%s]\n",
include/drm/drm_crtc_helper.h+3−0
@@ -168,6 +168,7 @@ struct drm_encoder_helper_funcs { · 167 unmodified lines
168 * @get_modes: get mode list for this connector168 * @get_modes: get mode list for this connector
169 * @mode_valid: is this mode valid on the given connector? (optional)169 * @mode_valid: is this mode valid on the given connector? (optional)
170 * @best_encoder: return the preferred encoder for this connector170 * @best_encoder: return the preferred encoder for this connector
171 * @atomic_best_encoder: atomic version of @best_encoder
171 *172 *
172 * The helper operations are called by the mid-layer CRTC helper.173 * The helper operations are called by the mid-layer CRTC helper.
173 */174 */
@@ -176,6 +177,8 @@ struct drm_connector_helper_funcs { · 2 unmodified lines
176 enum drm_mode_status (*mode_valid)(struct drm_connector *connector,177 enum drm_mode_status (*mode_valid)(struct drm_connector *connector,
177 struct drm_display_mode *mode);178 struct drm_display_mode *mode);
178 struct drm_encoder *(*best_encoder)(struct drm_connector *connector);179 struct drm_encoder *(*best_encoder)(struct drm_connector *connector);
180 struct drm_encoder *(*atomic_best_encoder)(struct drm_connector *connector,
181 struct drm_connector_state *connector_state);
179};182};
180 183
181extern void drm_helper_disable_unused_functions(struct drm_device *dev);184extern void drm_helper_disable_unused_functions(struct drm_device *dev);