drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.c

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.c

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.c
Extension
.c
Size
7516 bytes
Lines
259
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

if (cont->index == args->v0.id) {
			conn = cont;
			break;
		}
	}

	if (!conn)
		return -EINVAL;

	ret = -EBUSY;
	spin_lock(&disp->client.lock);
	if (!conn->object.func) {
		switch (conn->info.type) {
		/* VGA */
		case DCB_CONNECTOR_DVI_A	:
		case DCB_CONNECTOR_POD_VGA	:
		case DCB_CONNECTOR_VGA		: args->v0.type = NVIF_CONN_V0_VGA; break;

		/* TV */
		case DCB_CONNECTOR_TV_0		:
		case DCB_CONNECTOR_TV_1		:
		case DCB_CONNECTOR_TV_2		:
		case DCB_CONNECTOR_TV_SCART	:
		case DCB_CONNECTOR_TV_SCART_D	:
		case DCB_CONNECTOR_TV_DTERM	:
		case DCB_CONNECTOR_POD_TV_3	:
		case DCB_CONNECTOR_POD_TV_1	:
		case DCB_CONNECTOR_POD_TV_0	:
		case DCB_CONNECTOR_TV_3		: args->v0.type = NVIF_CONN_V0_TV; break;

		/* DVI */
		case DCB_CONNECTOR_DVI_I_TV_1	:
		case DCB_CONNECTOR_DVI_I_TV_0	:
		case DCB_CONNECTOR_DVI_I_TV_2	:
		case DCB_CONNECTOR_DVI_ADC	:
		case DCB_CONNECTOR_DMS59_0	:
		case DCB_CONNECTOR_DMS59_1	:
		case DCB_CONNECTOR_DVI_I	: args->v0.type = NVIF_CONN_V0_DVI_I; break;
		case DCB_CONNECTOR_TMDS		:
		case DCB_CONNECTOR_DVI_D	: args->v0.type = NVIF_CONN_V0_DVI_D; break;

		/* LVDS */
		case DCB_CONNECTOR_LVDS		: args->v0.type = NVIF_CONN_V0_LVDS; break;
		case DCB_CONNECTOR_LVDS_SPWG	: args->v0.type = NVIF_CONN_V0_LVDS_SPWG; break;

		/* DP */
		case DCB_CONNECTOR_DMS59_DP0	:
		case DCB_CONNECTOR_DMS59_DP1	:
		case DCB_CONNECTOR_DP		:
		case DCB_CONNECTOR_mDP		:
		case DCB_CONNECTOR_USB_C	: args->v0.type = NVIF_CONN_V0_DP; break;
		case DCB_CONNECTOR_eDP		: args->v0.type = NVIF_CONN_V0_EDP; break;

		/* HDMI */
		case DCB_CONNECTOR_HDMI_0	:
		case DCB_CONNECTOR_HDMI_1	:
		case DCB_CONNECTOR_HDMI_C	: args->v0.type = NVIF_CONN_V0_HDMI; break;

		/*
		 * Dock & unused outputs.
		 * BNC, SPDIF, WFD, and detached LVDS go here.
		 */
		default:
			nvkm_warn(&disp->engine.subdev,
				  "unimplemented connector type 0x%02x\n",
				  conn->info.type);
			args->v0.type = NVIF_CONN_V0_VGA;
			ret = -EINVAL;
			break;
		}

		nvkm_object_ctor(&nvkm_uconn, oclass, &conn->object);
		*pobject = &conn->object;
		ret = 0;
	}
	spin_unlock(&disp->client.lock);
	return ret;
}

Annotation

Implementation Notes