summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/media-device.c8
-rw-r--r--drivers/media/media-entity.c7
-rw-r--r--include/media/media-device.h3
-rw-r--r--include/media/media-entity.h9
4 files changed, 15 insertions, 12 deletions
diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c
index e429605ca2c3..81d6a130efef 100644
--- a/drivers/media/media-device.c
+++ b/drivers/media/media-device.c
@@ -379,7 +379,6 @@ int __must_check __media_device_register(struct media_device *mdev,
if (WARN_ON(mdev->dev == NULL || mdev->model[0] == 0))
return -EINVAL;
- mdev->entity_id = 1;
INIT_LIST_HEAD(&mdev->entities);
spin_lock_init(&mdev->lock);
mutex_init(&mdev->graph_mutex);
@@ -433,10 +432,8 @@ int __must_check media_device_register_entity(struct media_device *mdev,
entity->parent = mdev;
spin_lock(&mdev->lock);
- if (entity->id == 0)
- entity->id = mdev->entity_id++;
- else
- mdev->entity_id = max(entity->id + 1, mdev->entity_id);
+ /* Initialize media_gobj embedded at the entity */
+ media_gobj_init(mdev, MEDIA_GRAPH_ENTITY, &entity->graph_obj);
list_add_tail(&entity->list, &mdev->entities);
spin_unlock(&mdev->lock);
@@ -459,6 +456,7 @@ void media_device_unregister_entity(struct media_entity *entity)
return;
spin_lock(&mdev->lock);
+ media_gobj_remove(&entity->graph_obj);
list_del(&entity->list);
spin_unlock(&mdev->lock);
entity->parent = NULL;
diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c
index a76655c2ddef..9f6f056eaeb0 100644
--- a/drivers/media/media-entity.c
+++ b/drivers/media/media-entity.c
@@ -43,7 +43,12 @@ void media_gobj_init(struct media_device *mdev,
enum media_gobj_type type,
struct media_gobj *gobj)
{
- /* For now, nothing to do */
+ /* Create a per-type unique object ID */
+ switch (type) {
+ case MEDIA_GRAPH_ENTITY:
+ gobj->id = media_gobj_gen_id(type, ++mdev->entity_id);
+ break;
+ }
}
/**
diff --git a/include/media/media-device.h b/include/media/media-device.h
index a44f18fdf321..f6deef6e5820 100644
--- a/include/media/media-device.h
+++ b/include/media/media-device.h
@@ -41,7 +41,7 @@ struct device;
* @bus_info: Unique and stable device location identifier
* @hw_revision: Hardware device revision
* @driver_version: Device driver version
- * @entity_id: ID of the next entity to be registered
+ * @entity_id: Unique ID used on the last entity registered
* @entities: List of registered entities
* @lock: Entities list lock
* @graph_mutex: Entities graph operation lock
@@ -69,6 +69,7 @@ struct media_device {
u32 driver_version;
u32 entity_id;
+
struct list_head entities;
/* Protects the entities list */
diff --git a/include/media/media-entity.h b/include/media/media-entity.h
index 96626356b8f3..4faa4d830da4 100644
--- a/include/media/media-entity.h
+++ b/include/media/media-entity.h
@@ -33,10 +33,10 @@
/**
* enum media_gobj_type - type of a graph object
*
+ * @MEDIA_GRAPH_ENTITY: Identify a media entity
*/
enum media_gobj_type {
- /* FIXME: add the types here, as we embed media_gobj */
- MEDIA_GRAPH_NONE
+ MEDIA_GRAPH_ENTITY,
};
#define MEDIA_BITS_PER_TYPE 8
@@ -94,10 +94,9 @@ struct media_entity_operations {
};
struct media_entity {
+ struct media_gobj graph_obj;
struct list_head list;
struct media_device *parent; /* Media device this entity belongs to*/
- u32 id; /* Entity ID, unique in the parent media
- * device context */
const char *name; /* Entity name */
u32 type; /* Entity type (MEDIA_ENT_T_*) */
u32 revision; /* Entity revision, driver specific */
@@ -148,7 +147,7 @@ static inline u32 media_entity_subtype(struct media_entity *entity)
static inline u32 media_entity_id(struct media_entity *entity)
{
- return entity->id;
+ return entity->graph_obj.id;
}
static inline enum media_gobj_type media_type(struct media_gobj *gobj)