drivers/gpu/drm/nouveau/nvkm/subdev/i2c/pad.c

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/pad.c

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/nouveau/nvkm/subdev/i2c/pad.c
Extension
.c
Size
3144 bytes
Lines
117
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 (pad->mode != NVKM_I2C_PAD_OFF) {
			mutex_unlock(&pad->mutex);
			return -EBUSY;
		}
		nvkm_i2c_pad_mode_locked(pad, mode);
	}
	return 0;
}

void
nvkm_i2c_pad_fini(struct nvkm_i2c_pad *pad)
{
	PAD_TRACE(pad, "fini");
	nvkm_i2c_pad_mode_locked(pad, NVKM_I2C_PAD_OFF);
}

void
nvkm_i2c_pad_init(struct nvkm_i2c_pad *pad)
{
	PAD_TRACE(pad, "init");
	nvkm_i2c_pad_mode_locked(pad, pad->mode);
}

void
nvkm_i2c_pad_del(struct nvkm_i2c_pad **ppad)
{
	struct nvkm_i2c_pad *pad = *ppad;
	if (pad) {
		PAD_TRACE(pad, "dtor");
		list_del(&pad->head);
		kfree(pad);
		pad = NULL;
	}
}

void
nvkm_i2c_pad_ctor(const struct nvkm_i2c_pad_func *func, struct nvkm_i2c *i2c,
		  int id, struct nvkm_i2c_pad *pad)
{
	pad->func = func;
	pad->i2c = i2c;
	pad->id = id;
	pad->mode = NVKM_I2C_PAD_OFF;
	mutex_init(&pad->mutex);
	list_add_tail(&pad->head, &i2c->pad);
	PAD_TRACE(pad, "ctor");
}

int
nvkm_i2c_pad_new_(const struct nvkm_i2c_pad_func *func, struct nvkm_i2c *i2c,
		  int id, struct nvkm_i2c_pad **ppad)
{
	if (!(*ppad = kzalloc_obj(**ppad)))
		return -ENOMEM;
	nvkm_i2c_pad_ctor(func, i2c, id, *ppad);
	return 0;
}

Annotation

Implementation Notes