|
@@ -187,11 +187,39 @@ struct media_entity_operations {
|
|
|
int (*link_validate)(struct media_link *link);
|
|
|
};
|
|
|
|
|
|
+/**
|
|
|
+ * enum media_entity_type - Media entity type
|
|
|
+ *
|
|
|
+ * @MEDIA_ENTITY_TYPE_BASE:
|
|
|
+ * The entity isn't embedded in another subsystem structure.
|
|
|
+ * @MEDIA_ENTITY_TYPE_VIDEO_DEVICE:
|
|
|
+ * The entity is embedded in a struct video_device instance.
|
|
|
+ * @MEDIA_ENTITY_TYPE_V4L2_SUBDEV:
|
|
|
+ * The entity is embedded in a struct v4l2_subdev instance.
|
|
|
+ *
|
|
|
+ * Media entity objects are often not instantiated directly, but the media
|
|
|
+ * entity structure is inherited by (through embedding) other subsystem-specific
|
|
|
+ * structures. The media entity type identifies the type of the subclass
|
|
|
+ * structure that implements a media entity instance.
|
|
|
+ *
|
|
|
+ * This allows runtime type identification of media entities and safe casting to
|
|
|
+ * the correct object type. For instance, a media entity structure instance
|
|
|
+ * embedded in a v4l2_subdev structure instance will have the type
|
|
|
+ * MEDIA_ENTITY_TYPE_V4L2_SUBDEV and can safely be cast to a v4l2_subdev
|
|
|
+ * structure using the container_of() macro.
|
|
|
+ */
|
|
|
+enum media_entity_type {
|
|
|
+ MEDIA_ENTITY_TYPE_BASE,
|
|
|
+ MEDIA_ENTITY_TYPE_VIDEO_DEVICE,
|
|
|
+ MEDIA_ENTITY_TYPE_V4L2_SUBDEV,
|
|
|
+};
|
|
|
+
|
|
|
/**
|
|
|
* struct media_entity - A media entity graph object.
|
|
|
*
|
|
|
* @graph_obj: Embedded structure containing the media object common data.
|
|
|
* @name: Entity name.
|
|
|
+ * @obj_type: Type of the object that implements the media_entity.
|
|
|
* @function: Entity main function, as defined in uapi/media.h
|
|
|
* (MEDIA_ENT_F_*)
|
|
|
* @flags: Entity flags, as defined in uapi/media.h (MEDIA_ENT_FL_*)
|
|
@@ -220,6 +248,7 @@ struct media_entity_operations {
|
|
|
struct media_entity {
|
|
|
struct media_gobj graph_obj; /* must be first field in struct */
|
|
|
const char *name;
|
|
|
+ enum media_entity_type obj_type;
|
|
|
u32 function;
|
|
|
unsigned long flags;
|
|
|
|
|
@@ -329,56 +358,29 @@ static inline u32 media_gobj_gen_id(enum media_gobj_type type, u64 local_id)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * is_media_entity_v4l2_io() - identify if the entity main function
|
|
|
- * is a V4L2 I/O
|
|
|
- *
|
|
|
+ * is_media_entity_v4l2_io() - Check if the entity is a video_device
|
|
|
* @entity: pointer to entity
|
|
|
*
|
|
|
- * Return: true if the entity main function is one of the V4L2 I/O types
|
|
|
- * (video, VBI or SDR radio); false otherwise.
|
|
|
+ * Return: true if the entity is an instance of a video_device object and can
|
|
|
+ * safely be cast to a struct video_device using the container_of() macro, or
|
|
|
+ * false otherwise.
|
|
|
*/
|
|
|
static inline bool is_media_entity_v4l2_io(struct media_entity *entity)
|
|
|
{
|
|
|
- if (!entity)
|
|
|
- return false;
|
|
|
-
|
|
|
- switch (entity->function) {
|
|
|
- case MEDIA_ENT_F_IO_V4L:
|
|
|
- case MEDIA_ENT_F_IO_VBI:
|
|
|
- case MEDIA_ENT_F_IO_SWRADIO:
|
|
|
- return true;
|
|
|
- default:
|
|
|
- return false;
|
|
|
- }
|
|
|
+ return entity && entity->obj_type == MEDIA_ENTITY_TYPE_VIDEO_DEVICE;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * is_media_entity_v4l2_subdev - return true if the entity main function is
|
|
|
- * associated with the V4L2 API subdev usage
|
|
|
- *
|
|
|
+ * is_media_entity_v4l2_subdev() - Check if the entity is a v4l2_subdev
|
|
|
* @entity: pointer to entity
|
|
|
*
|
|
|
- * This is an ancillary function used by subdev-based V4L2 drivers.
|
|
|
- * It checks if the entity function is one of functions used by a V4L2 subdev,
|
|
|
- * e. g. camera-relatef functions, analog TV decoder, TV tuner, V4L2 DSPs.
|
|
|
+ * Return: true if the entity is an instance of a v4l2_subdev object and can
|
|
|
+ * safely be cast to a struct v4l2_subdev using the container_of() macro, or
|
|
|
+ * false otherwise.
|
|
|
*/
|
|
|
static inline bool is_media_entity_v4l2_subdev(struct media_entity *entity)
|
|
|
{
|
|
|
- if (!entity)
|
|
|
- return false;
|
|
|
-
|
|
|
- switch (entity->function) {
|
|
|
- case MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN:
|
|
|
- case MEDIA_ENT_F_CAM_SENSOR:
|
|
|
- case MEDIA_ENT_F_FLASH:
|
|
|
- case MEDIA_ENT_F_LENS:
|
|
|
- case MEDIA_ENT_F_ATV_DECODER:
|
|
|
- case MEDIA_ENT_F_TUNER:
|
|
|
- return true;
|
|
|
-
|
|
|
- default:
|
|
|
- return false;
|
|
|
- }
|
|
|
+ return entity && entity->obj_type == MEDIA_ENTITY_TYPE_V4L2_SUBDEV;
|
|
|
}
|
|
|
|
|
|
/**
|