Unverified Commit ab83b7f6 authored by Herve Codina's avatar Herve Codina Committed by Maxime Ripard
Browse files

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: default avatarHerve Codina <herve.codina@bootlin.com>
Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: default avatarMaxime Ripard <mripard@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20250210132620.42263-3-herve.codina@bootlin.com


Signed-off-by: default avatarMaxime Ripard <mripard@kernel.org>
parent feb7ef6e
Loading
Loading
Loading
Loading
+41 −0
Original line number Diff line number Diff line
@@ -3400,6 +3400,47 @@ int drm_atomic_helper_disable_all(struct drm_device *dev,
}
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
+2 −0
Original line number Diff line number Diff line
@@ -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,