drm/tests: helpers: Create new helper to enable output

We'll need the HDMI state tests light_up_connector() function in more
tests, so let's promote it to a helper.

Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20250313-bridge-connector-v6-5-511c54a604fb@kernel.org
Signed-off-by: Maxime Ripard <mripard@kernel.org>
This commit is contained in:
Maxime Ripard
2025-03-13 12:59:59 +01:00
parent a7e4886e06
commit e4e3de631d
2 changed files with 69 additions and 0 deletions

View File

@@ -2,6 +2,7 @@
#include <drm/drm_atomic.h>
#include <drm/drm_atomic_helper.h>
#include <drm/drm_atomic_uapi.h>
#include <drm/drm_drv.h>
#include <drm/drm_edid.h>
#include <drm/drm_fourcc.h>
@@ -271,6 +272,66 @@ drm_kunit_helper_create_crtc(struct kunit *test,
}
EXPORT_SYMBOL_GPL(drm_kunit_helper_create_crtc);
/**
* drm_kunit_helper_enable_crtc_connector - Enables a CRTC -> Connector output
* @test: The test context object
* @drm: The device to alloc the plane for
* @crtc: The CRTC to enable
* @connector: The Connector to enable
* @mode: The display mode to configure the CRTC with
* @ctx: Locking context
*
* This function creates an atomic update to enable the route from @crtc
* to @connector, with the given @mode.
*
* Returns:
*
* A pointer to the new CRTC, or an ERR_PTR() otherwise. If the error
* returned is EDEADLK, the entire atomic sequence must be restarted.
*/
int drm_kunit_helper_enable_crtc_connector(struct kunit *test,
struct drm_device *drm,
struct drm_crtc *crtc,
struct drm_connector *connector,
const struct drm_display_mode *mode,
struct drm_modeset_acquire_ctx *ctx)
{
struct drm_atomic_state *state;
struct drm_connector_state *conn_state;
struct drm_crtc_state *crtc_state;
int ret;
state = drm_kunit_helper_atomic_state_alloc(test, drm, ctx);
if (IS_ERR(state))
return PTR_ERR(state);
conn_state = drm_atomic_get_connector_state(state, connector);
if (IS_ERR(conn_state))
return PTR_ERR(conn_state);
ret = drm_atomic_set_crtc_for_connector(conn_state, crtc);
if (ret)
return ret;
crtc_state = drm_atomic_get_crtc_state(state, crtc);
if (IS_ERR(crtc_state))
return PTR_ERR(crtc_state);
ret = drm_atomic_set_mode_for_crtc(crtc_state, mode);
if (ret)
return ret;
crtc_state->enable = true;
crtc_state->active = true;
ret = drm_atomic_commit(state);
if (ret)
return ret;
return 0;
}
EXPORT_SYMBOL_GPL(drm_kunit_helper_enable_crtc_connector);
static void kunit_action_drm_mode_destroy(void *ptr)
{
struct drm_display_mode *mode = ptr;