drivers/gpu/drm/tests/drm_bridge_test.c

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/tests/drm_bridge_test.c

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/tests/drm_bridge_test.c
Extension
.c
Size
14193 bytes
Lines
520
Domain
Driver Families
Bucket
drivers/gpu
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct drm_bridge_priv {
	unsigned int enable_count;
	unsigned int disable_count;
	struct drm_bridge bridge;
	void *data;
};

struct drm_bridge_init_priv {
	struct drm_device drm;
	/** @dev: device, only for tests not needing a whole drm_device */
	struct device *dev;
	struct drm_plane *plane;
	struct drm_crtc *crtc;
	struct drm_encoder encoder;
	struct drm_bridge_priv *test_bridge;
	struct drm_connector *connector;
	bool destroyed;
};

static struct drm_bridge_priv *bridge_to_priv(struct drm_bridge *bridge)
{
	return container_of(bridge, struct drm_bridge_priv, bridge);
}

static void drm_test_bridge_priv_destroy(struct drm_bridge *bridge)
{
	struct drm_bridge_priv *bridge_priv = bridge_to_priv(bridge);
	struct drm_bridge_init_priv *priv = (struct drm_bridge_init_priv *)bridge_priv->data;

	priv->destroyed = true;
}

static void drm_test_bridge_enable(struct drm_bridge *bridge)
{
	struct drm_bridge_priv *priv = bridge_to_priv(bridge);

	priv->enable_count++;
}

static void drm_test_bridge_disable(struct drm_bridge *bridge)
{
	struct drm_bridge_priv *priv = bridge_to_priv(bridge);

	priv->disable_count++;
}

static const struct drm_bridge_funcs drm_test_bridge_legacy_funcs = {
	.destroy		= drm_test_bridge_priv_destroy,
	.enable			= drm_test_bridge_enable,
	.disable		= drm_test_bridge_disable,
};

static void drm_test_bridge_atomic_enable(struct drm_bridge *bridge,
					  struct drm_atomic_commit *state)
{
	struct drm_bridge_priv *priv = bridge_to_priv(bridge);

	priv->enable_count++;
}

static void drm_test_bridge_atomic_disable(struct drm_bridge *bridge,
					   struct drm_atomic_commit *state)
{
	struct drm_bridge_priv *priv = bridge_to_priv(bridge);

	priv->disable_count++;
}

static const struct drm_bridge_funcs drm_test_bridge_atomic_funcs = {
	.destroy		= drm_test_bridge_priv_destroy,
	.atomic_enable		= drm_test_bridge_atomic_enable,
	.atomic_disable		= drm_test_bridge_atomic_disable,
	.atomic_destroy_state	= drm_atomic_helper_bridge_destroy_state,
	.atomic_duplicate_state	= drm_atomic_helper_bridge_duplicate_state,
	.atomic_reset		= drm_atomic_helper_bridge_reset,
};

KUNIT_DEFINE_ACTION_WRAPPER(drm_bridge_remove_wrapper,
			    drm_bridge_remove,
			    struct drm_bridge *);

static int drm_kunit_bridge_add(struct kunit *test,
				struct drm_bridge *bridge)
{
	drm_bridge_add(bridge);

	return kunit_add_action_or_reset(test,
					 drm_bridge_remove_wrapper,
					 bridge);
}

Annotation

Implementation Notes