drm/atomic-helper: Introduce drm_atomic_helper_reset_crtc()

drm_atomic_helper_reset_crtc() allows to reset the CRTC active outputs.

This resets all active components available between the CRTC and
connectors.

Signed-off-by: Herve Codina <herve.codina@bootlin.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Maxime Ripard <mripard@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20250210132620.42263-3-herve.codina@bootlin.com
Signed-off-by: Maxime Ripard <mripard@kernel.org>
This commit is contained in:
Herve Codina 2025-02-10 14:26:17 +01:00 committed by Maxime Ripard
parent feb7ef6e2b
commit ab83b7f6a0
No known key found for this signature in database
GPG key ID: 275FCE19A23DBE76
2 changed files with 43 additions and 0 deletions

View file

@ -3400,6 +3400,47 @@ free:
}
EXPORT_SYMBOL(drm_atomic_helper_disable_all);
/**
* drm_atomic_helper_reset_crtc - reset the active outputs of a CRTC
* @crtc: DRM CRTC
* @ctx: lock acquisition context
*
* Reset the active outputs by indicating that connectors have changed.
* This implies a reset of all active components available between the CRTC and
* connectors.
*
* Returns:
* 0 on success or a negative error code on failure.
*/
int drm_atomic_helper_reset_crtc(struct drm_crtc *crtc,
struct drm_modeset_acquire_ctx *ctx)
{
struct drm_atomic_state *state;
struct drm_crtc_state *crtc_state;
int ret;
state = drm_atomic_state_alloc(crtc->dev);
if (!state)
return -ENOMEM;
state->acquire_ctx = ctx;
crtc_state = drm_atomic_get_crtc_state(state, crtc);
if (IS_ERR(crtc_state)) {
ret = PTR_ERR(crtc_state);
goto out;
}
crtc_state->connectors_changed = true;
ret = drm_atomic_commit(state);
out:
drm_atomic_state_put(state);
return ret;
}
EXPORT_SYMBOL(drm_atomic_helper_reset_crtc);
/**
* drm_atomic_helper_shutdown - shutdown all CRTC
* @dev: DRM device

View file

@ -139,6 +139,8 @@ int drm_atomic_helper_set_config(struct drm_mode_set *set,
int drm_atomic_helper_disable_all(struct drm_device *dev,
struct drm_modeset_acquire_ctx *ctx);
int drm_atomic_helper_reset_crtc(struct drm_crtc *crtc,
struct drm_modeset_acquire_ctx *ctx);
void drm_atomic_helper_shutdown(struct drm_device *dev);
struct drm_atomic_state *
drm_atomic_helper_duplicate_state(struct drm_device *dev,