drivers/media/platform/arm/mali-c55/mali-c55-core.c

Source file repositories/reference/linux-study-clean/drivers/media/platform/arm/mali-c55/mali-c55-core.c

File Facts

System
Linux kernel
Corpus path
drivers/media/platform/arm/mali-c55/mali-c55-core.c
Extension
.c
Size
25864 bytes
Lines
893
Domain
Driver Families
Bucket
drivers/media
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

if (ret) {
			dev_err(mali_c55->dev,
				"failed to link ISP and DS resizer\n");
			goto err_remove_links;
		}

		ret = media_create_pad_link(&mali_c55->resizers[1].sd.entity,
			MALI_C55_RSZ_SOURCE_PAD,
			&mali_c55->cap_devs[MALI_C55_CAP_DEV_DS].vdev.entity,
			0, MEDIA_LNK_FL_ENABLED);
		if (ret) {
			dev_err(mali_c55->dev,
				"failed to link DS resizer and video device\n");
			goto err_remove_links;
		}
	}

	ret = media_create_pad_link(&mali_c55->isp.sd.entity,
				    MALI_C55_ISP_PAD_SOURCE_STATS,
				    &mali_c55->stats.vdev.entity, 0,
				    MEDIA_LNK_FL_ENABLED);
	if (ret) {
		dev_err(mali_c55->dev,
			"failed to link ISP and 3a stats node\n");
		goto err_remove_links;
	}

	ret = media_create_pad_link(&mali_c55->params.vdev.entity, 0,
				    &mali_c55->isp.sd.entity,
				    MALI_C55_ISP_PAD_SINK_PARAMS,
				    MEDIA_LNK_FL_ENABLED);
	if (ret) {
		dev_err(mali_c55->dev,
			"failed to link ISP and parameters video node\n");
		goto err_remove_links;
	}

	return 0;

err_remove_links:
	mali_c55_remove_links(mali_c55);
	return ret;
}

static void mali_c55_unregister_entities(struct mali_c55 *mali_c55)
{
	mali_c55_remove_links(mali_c55);
	mali_c55_unregister_tpg(mali_c55);
	mali_c55_unregister_isp(mali_c55);
	mali_c55_unregister_resizers(mali_c55);
	mali_c55_unregister_capture_devs(mali_c55);
	mali_c55_unregister_params(mali_c55);
	mali_c55_unregister_stats(mali_c55);
}

static void mali_c55_swap_next_config(struct mali_c55 *mali_c55)
{
	struct mali_c55_context *ctx = mali_c55_get_active_context(mali_c55);

	mali_c55_config_write(ctx, mali_c55->next_config ?
			      MALI_C55_CONFIG_PING : MALI_C55_CONFIG_PONG,
			      false);

	mali_c55_update_bits(mali_c55, MALI_C55_REG_MCU_CONFIG,
		MALI_C55_REG_MCU_CONFIG_WRITE_MASK,
		MALI_C55_MCU_CONFIG_WRITE(mali_c55->next_config));
}

static int mali_c55_register_entities(struct mali_c55 *mali_c55)
{
	int ret;

	ret = mali_c55_register_tpg(mali_c55);
	if (ret)
		return ret;

	ret = mali_c55_register_isp(mali_c55);
	if (ret)
		goto err_unregister_entities;

	ret = mali_c55_register_resizers(mali_c55);
	if (ret)
		goto err_unregister_entities;

	ret = mali_c55_register_capture_devs(mali_c55);
	if (ret)
		goto err_unregister_entities;

	ret = mali_c55_register_params(mali_c55);
	if (ret)

Annotation

Implementation Notes