drivers/gpu/drm/bridge/imx/imx8qxp-pixel-link.c

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/bridge/imx/imx8qxp-pixel-link.c

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/bridge/imx/imx8qxp-pixel-link.c
Extension
.c
Size
10856 bytes
Lines
412
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 imx8qxp_pixel_link {
	struct drm_bridge bridge;
	struct device *dev;
	struct imx_sc_ipc *ipc_handle;
	u8 stream_id;
	u8 dc_id;
	u32 sink_rsc;
	u32 mst_addr;
	u8 mst_addr_ctrl;
	u8 mst_en_ctrl;
	u8 mst_vld_ctrl;
	u8 sync_ctrl;
};

static void imx8qxp_pixel_link_enable_mst_en(struct imx8qxp_pixel_link *pl)
{
	int ret;

	ret = imx_sc_misc_set_control(pl->ipc_handle, pl->sink_rsc,
				      pl->mst_en_ctrl, true);
	if (ret)
		DRM_DEV_ERROR(pl->dev,
			      "failed to enable DC%u stream%u pixel link mst_en: %d\n",
			      pl->dc_id, pl->stream_id, ret);
}

static void imx8qxp_pixel_link_enable_mst_vld(struct imx8qxp_pixel_link *pl)
{
	int ret;

	ret = imx_sc_misc_set_control(pl->ipc_handle, pl->sink_rsc,
				      pl->mst_vld_ctrl, true);
	if (ret)
		DRM_DEV_ERROR(pl->dev,
			      "failed to enable DC%u stream%u pixel link mst_vld: %d\n",
			      pl->dc_id, pl->stream_id, ret);
}

static void imx8qxp_pixel_link_enable_sync(struct imx8qxp_pixel_link *pl)
{
	int ret;

	ret = imx_sc_misc_set_control(pl->ipc_handle, pl->sink_rsc,
				      pl->sync_ctrl, true);
	if (ret)
		DRM_DEV_ERROR(pl->dev,
			      "failed to enable DC%u stream%u pixel link sync: %d\n",
			      pl->dc_id, pl->stream_id, ret);
}

static int imx8qxp_pixel_link_disable_mst_en(struct imx8qxp_pixel_link *pl)
{
	int ret;

	ret = imx_sc_misc_set_control(pl->ipc_handle, pl->sink_rsc,
				      pl->mst_en_ctrl, false);
	if (ret)
		DRM_DEV_ERROR(pl->dev,
			      "failed to disable DC%u stream%u pixel link mst_en: %d\n",
			      pl->dc_id, pl->stream_id, ret);

	return ret;
}

static int imx8qxp_pixel_link_disable_mst_vld(struct imx8qxp_pixel_link *pl)
{
	int ret;

	ret = imx_sc_misc_set_control(pl->ipc_handle, pl->sink_rsc,
				      pl->mst_vld_ctrl, false);
	if (ret)
		DRM_DEV_ERROR(pl->dev,
			      "failed to disable DC%u stream%u pixel link mst_vld: %d\n",
			      pl->dc_id, pl->stream_id, ret);

	return ret;
}

static int imx8qxp_pixel_link_disable_sync(struct imx8qxp_pixel_link *pl)
{
	int ret;

	ret = imx_sc_misc_set_control(pl->ipc_handle, pl->sink_rsc,
				      pl->sync_ctrl, false);
	if (ret)
		DRM_DEV_ERROR(pl->dev,
			      "failed to disable DC%u stream%u pixel link sync: %d\n",
			      pl->dc_id, pl->stream_id, ret);

	return ret;

Annotation

Implementation Notes