Commit 52434534 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab

[media] v4l: vsp1: Consolidate entity ops in a struct vsp1_entity_operations

Entities have two operations, a destroy operation stored directly in
vsp1_entity and a set_memory operation stored in a vsp1_rwpf_operations
structure. Move the two to a more generic vsp1_entity_operations
structure that will serve to implement additional operations.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 823329df
...@@ -222,8 +222,8 @@ int vsp1_entity_init(struct vsp1_device *vsp1, struct vsp1_entity *entity, ...@@ -222,8 +222,8 @@ int vsp1_entity_init(struct vsp1_device *vsp1, struct vsp1_entity *entity,
void vsp1_entity_destroy(struct vsp1_entity *entity) void vsp1_entity_destroy(struct vsp1_entity *entity)
{ {
if (entity->destroy) if (entity->ops && entity->ops->destroy)
entity->destroy(entity); entity->ops->destroy(entity);
if (entity->subdev.ctrl_handler) if (entity->subdev.ctrl_handler)
v4l2_ctrl_handler_free(entity->subdev.ctrl_handler); v4l2_ctrl_handler_free(entity->subdev.ctrl_handler);
media_entity_cleanup(&entity->subdev.entity); media_entity_cleanup(&entity->subdev.entity);
......
...@@ -53,10 +53,22 @@ struct vsp1_route { ...@@ -53,10 +53,22 @@ struct vsp1_route {
unsigned int inputs[VSP1_ENTITY_MAX_INPUTS]; unsigned int inputs[VSP1_ENTITY_MAX_INPUTS];
}; };
/**
* struct vsp1_entity_operations - Entity operations
* @destroy: Destroy the entity.
* @set_memory: Setup memory buffer access. This operation applies the settings
* stored in the rwpf mem field to the hardware. Valid for RPF and
* WPF only.
*/
struct vsp1_entity_operations {
void (*destroy)(struct vsp1_entity *);
void (*set_memory)(struct vsp1_entity *);
};
struct vsp1_entity { struct vsp1_entity {
struct vsp1_device *vsp1; struct vsp1_device *vsp1;
void (*destroy)(struct vsp1_entity *); const struct vsp1_entity_operations *ops;
enum vsp1_entity_type type; enum vsp1_entity_type type;
unsigned int index; unsigned int index;
......
...@@ -141,11 +141,13 @@ static struct v4l2_subdev_ops rpf_ops = { ...@@ -141,11 +141,13 @@ static struct v4l2_subdev_ops rpf_ops = {
}; };
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
* Video Device Operations * VSP1 Entity Operations
*/ */
static void rpf_set_memory(struct vsp1_rwpf *rpf) static void rpf_set_memory(struct vsp1_entity *entity)
{ {
struct vsp1_rwpf *rpf = entity_to_rwpf(entity);
vsp1_rpf_write(rpf, VI6_RPF_SRCM_ADDR_Y, vsp1_rpf_write(rpf, VI6_RPF_SRCM_ADDR_Y,
rpf->mem.addr[0] + rpf->offsets[0]); rpf->mem.addr[0] + rpf->offsets[0]);
vsp1_rpf_write(rpf, VI6_RPF_SRCM_ADDR_C0, vsp1_rpf_write(rpf, VI6_RPF_SRCM_ADDR_C0,
...@@ -154,7 +156,7 @@ static void rpf_set_memory(struct vsp1_rwpf *rpf) ...@@ -154,7 +156,7 @@ static void rpf_set_memory(struct vsp1_rwpf *rpf)
rpf->mem.addr[2] + rpf->offsets[1]); rpf->mem.addr[2] + rpf->offsets[1]);
} }
static const struct vsp1_rwpf_operations rpf_vdev_ops = { static const struct vsp1_entity_operations rpf_entity_ops = {
.set_memory = rpf_set_memory, .set_memory = rpf_set_memory,
}; };
...@@ -172,11 +174,10 @@ struct vsp1_rwpf *vsp1_rpf_create(struct vsp1_device *vsp1, unsigned int index) ...@@ -172,11 +174,10 @@ struct vsp1_rwpf *vsp1_rpf_create(struct vsp1_device *vsp1, unsigned int index)
if (rpf == NULL) if (rpf == NULL)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
rpf->ops = &rpf_vdev_ops;
rpf->max_width = RPF_MAX_WIDTH; rpf->max_width = RPF_MAX_WIDTH;
rpf->max_height = RPF_MAX_HEIGHT; rpf->max_height = RPF_MAX_HEIGHT;
rpf->entity.ops = &rpf_entity_ops;
rpf->entity.type = VSP1_ENTITY_RPF; rpf->entity.type = VSP1_ENTITY_RPF;
rpf->entity.index = index; rpf->entity.index = index;
......
...@@ -32,23 +32,12 @@ struct vsp1_rwpf_memory { ...@@ -32,23 +32,12 @@ struct vsp1_rwpf_memory {
dma_addr_t addr[3]; dma_addr_t addr[3];
}; };
/**
* struct vsp1_rwpf_operations - RPF and WPF operations
* @set_memory: Setup memory buffer access. This operation applies the settings
* stored in the rwpf mem field to the hardware.
*/
struct vsp1_rwpf_operations {
void (*set_memory)(struct vsp1_rwpf *rwpf);
};
struct vsp1_rwpf { struct vsp1_rwpf {
struct vsp1_entity entity; struct vsp1_entity entity;
struct v4l2_ctrl_handler ctrls; struct v4l2_ctrl_handler ctrls;
struct vsp1_video *video; struct vsp1_video *video;
const struct vsp1_rwpf_operations *ops;
unsigned int max_width; unsigned int max_width;
unsigned int max_height; unsigned int max_height;
...@@ -73,6 +62,11 @@ static inline struct vsp1_rwpf *to_rwpf(struct v4l2_subdev *subdev) ...@@ -73,6 +62,11 @@ static inline struct vsp1_rwpf *to_rwpf(struct v4l2_subdev *subdev)
return container_of(subdev, struct vsp1_rwpf, entity.subdev); return container_of(subdev, struct vsp1_rwpf, entity.subdev);
} }
static inline struct vsp1_rwpf *entity_to_rwpf(struct vsp1_entity *entity)
{
return container_of(entity, struct vsp1_rwpf, entity);
}
struct vsp1_rwpf *vsp1_rpf_create(struct vsp1_device *vsp1, unsigned int index); struct vsp1_rwpf *vsp1_rpf_create(struct vsp1_device *vsp1, unsigned int index);
struct vsp1_rwpf *vsp1_wpf_create(struct vsp1_device *vsp1, unsigned int index); struct vsp1_rwpf *vsp1_wpf_create(struct vsp1_device *vsp1, unsigned int index);
...@@ -105,7 +99,7 @@ int vsp1_rwpf_set_selection(struct v4l2_subdev *subdev, ...@@ -105,7 +99,7 @@ int vsp1_rwpf_set_selection(struct v4l2_subdev *subdev,
*/ */
static inline void vsp1_rwpf_set_memory(struct vsp1_rwpf *rwpf) static inline void vsp1_rwpf_set_memory(struct vsp1_rwpf *rwpf)
{ {
rwpf->ops->set_memory(rwpf); rwpf->entity.ops->set_memory(&rwpf->entity);
} }
#endif /* __VSP1_RWPF_H__ */ #endif /* __VSP1_RWPF_H__ */
...@@ -152,17 +152,27 @@ static struct v4l2_subdev_ops wpf_ops = { ...@@ -152,17 +152,27 @@ static struct v4l2_subdev_ops wpf_ops = {
}; };
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
* Video Device Operations * VSP1 Entity Operations
*/ */
static void wpf_set_memory(struct vsp1_rwpf *wpf) static void vsp1_wpf_destroy(struct vsp1_entity *entity)
{ {
struct vsp1_rwpf *wpf = entity_to_rwpf(entity);
vsp1_dlm_destroy(wpf->dlm);
}
static void wpf_set_memory(struct vsp1_entity *entity)
{
struct vsp1_rwpf *wpf = entity_to_rwpf(entity);
vsp1_wpf_write(wpf, VI6_WPF_DSTM_ADDR_Y, wpf->mem.addr[0]); vsp1_wpf_write(wpf, VI6_WPF_DSTM_ADDR_Y, wpf->mem.addr[0]);
vsp1_wpf_write(wpf, VI6_WPF_DSTM_ADDR_C0, wpf->mem.addr[1]); vsp1_wpf_write(wpf, VI6_WPF_DSTM_ADDR_C0, wpf->mem.addr[1]);
vsp1_wpf_write(wpf, VI6_WPF_DSTM_ADDR_C1, wpf->mem.addr[2]); vsp1_wpf_write(wpf, VI6_WPF_DSTM_ADDR_C1, wpf->mem.addr[2]);
} }
static const struct vsp1_rwpf_operations wpf_vdev_ops = { static const struct vsp1_entity_operations wpf_entity_ops = {
.destroy = vsp1_wpf_destroy,
.set_memory = wpf_set_memory, .set_memory = wpf_set_memory,
}; };
...@@ -170,13 +180,6 @@ static const struct vsp1_rwpf_operations wpf_vdev_ops = { ...@@ -170,13 +180,6 @@ static const struct vsp1_rwpf_operations wpf_vdev_ops = {
* Initialization and Cleanup * Initialization and Cleanup
*/ */
static void vsp1_wpf_destroy(struct vsp1_entity *entity)
{
struct vsp1_rwpf *wpf = container_of(entity, struct vsp1_rwpf, entity);
vsp1_dlm_destroy(wpf->dlm);
}
struct vsp1_rwpf *vsp1_wpf_create(struct vsp1_device *vsp1, unsigned int index) struct vsp1_rwpf *vsp1_wpf_create(struct vsp1_device *vsp1, unsigned int index)
{ {
struct vsp1_rwpf *wpf; struct vsp1_rwpf *wpf;
...@@ -187,12 +190,10 @@ struct vsp1_rwpf *vsp1_wpf_create(struct vsp1_device *vsp1, unsigned int index) ...@@ -187,12 +190,10 @@ struct vsp1_rwpf *vsp1_wpf_create(struct vsp1_device *vsp1, unsigned int index)
if (wpf == NULL) if (wpf == NULL)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
wpf->ops = &wpf_vdev_ops;
wpf->max_width = WPF_MAX_WIDTH; wpf->max_width = WPF_MAX_WIDTH;
wpf->max_height = WPF_MAX_HEIGHT; wpf->max_height = WPF_MAX_HEIGHT;
wpf->entity.destroy = vsp1_wpf_destroy; wpf->entity.ops = &wpf_entity_ops;
wpf->entity.type = VSP1_ENTITY_WPF; wpf->entity.type = VSP1_ENTITY_WPF;
wpf->entity.index = index; wpf->entity.index = index;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment