include/media/v4l2-device.h
Source file repositories/reference/linux-study-clean/include/media/v4l2-device.h
File Facts
- System
- Linux kernel
- Corpus path
include/media/v4l2-device.h- Extension
.h- Size
- 19054 bytes
- Lines
- 570
- Domain
- Repository Root And Misc
- Bucket
- include
- Inferred role
- Repository Root And Misc: implementation source
- Status
- source implementation candidate
Why This File Exists
Top-level or miscellaneous repository surface. Use this as map coverage unless a later manual pass promotes the file into a deeper subsystem dossier.
- Top-level or miscellaneous repository surface. Use this as map coverage unless a later manual pass promotes the file into a deeper subsystem dossier.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
media/media-device.hmedia/v4l2-subdev.hmedia/v4l2-dev.h
Detected Declarations
struct v4l2_ctrl_handlerstruct v4l2_devicefunction v4l2_device_getfunction __v4l2_device_register_subdev_nodesfunction __v4l2_device_register_subdev_nodesfunction v4l2_subdev_notifyfunction v4l2_device_supports_requests
Annotated Snippet
struct v4l2_device {
struct device *dev;
struct media_device *mdev;
struct list_head subdevs;
spinlock_t lock;
char name[36];
void (*notify)(struct v4l2_subdev *sd,
unsigned int notification, void *arg);
struct v4l2_ctrl_handler *ctrl_handler;
struct v4l2_prio_state prio;
struct kref ref;
void (*release)(struct v4l2_device *v4l2_dev);
};
/**
* v4l2_device_get - gets a V4L2 device reference
*
* @v4l2_dev: pointer to struct &v4l2_device
*
* This is an ancillary routine meant to increment the usage for the
* struct &v4l2_device pointed by @v4l2_dev.
*/
static inline void v4l2_device_get(struct v4l2_device *v4l2_dev)
{
kref_get(&v4l2_dev->ref);
}
/**
* v4l2_device_put - puts a V4L2 device reference
*
* @v4l2_dev: pointer to struct &v4l2_device
*
* This is an ancillary routine meant to decrement the usage for the
* struct &v4l2_device pointed by @v4l2_dev.
*/
int v4l2_device_put(struct v4l2_device *v4l2_dev);
/**
* v4l2_device_register - Initialize v4l2_dev and make @dev->driver_data
* point to @v4l2_dev.
*
* @dev: pointer to struct &device
* @v4l2_dev: pointer to struct &v4l2_device
*
* .. note::
* @dev may be %NULL in rare cases (ISA devices).
* In such case the caller must fill in the @v4l2_dev->name field
* before calling this function.
*/
int __must_check v4l2_device_register(struct device *dev,
struct v4l2_device *v4l2_dev);
/**
* v4l2_device_set_name - Optional function to initialize the
* name field of struct &v4l2_device
*
* @v4l2_dev: pointer to struct &v4l2_device
* @basename: base name for the device name
* @instance: pointer to a static atomic_t var with the instance usage for
* the device driver.
*
* v4l2_device_set_name() initializes the name field of struct &v4l2_device
* using the driver name and a driver-global atomic_t instance.
*
* This function will increment the instance counter and returns the
* instance value used in the name.
*
* Example:
*
* static atomic_t drv_instance = ATOMIC_INIT(0);
*
* ...
*
* instance = v4l2_device_set_name(&\ v4l2_dev, "foo", &\ drv_instance);
*
* The first time this is called the name field will be set to foo0 and
* this function returns 0. If the name ends with a digit (e.g. cx18),
* then the name will be set to cx18-0 since cx180 would look really odd.
*/
int v4l2_device_set_name(struct v4l2_device *v4l2_dev, const char *basename,
atomic_t *instance);
/**
* v4l2_device_disconnect - Change V4L2 device state to disconnected.
*
* @v4l2_dev: pointer to struct v4l2_device
*
* Should be called when the USB parent disconnects.
* Since the parent disappears, this ensures that @v4l2_dev doesn't have
* an invalid parent pointer.
Annotation
- Immediate include surface: `media/media-device.h`, `media/v4l2-subdev.h`, `media/v4l2-dev.h`.
- Detected declarations: `struct v4l2_ctrl_handler`, `struct v4l2_device`, `function v4l2_device_get`, `function __v4l2_device_register_subdev_nodes`, `function __v4l2_device_register_subdev_nodes`, `function v4l2_subdev_notify`, `function v4l2_device_supports_requests`.
- Atlas domain: Repository Root And Misc / include.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.