Commit e472d6a2 authored by Dafna Hirschfeld's avatar Dafna Hirschfeld Committed by Mauro Carvalho Chehab
Browse files

media: vimc: add vimc_ent_type struct for the callbacks of entities



Since each vimc entity type is defined by the
callbacks implementation, it is a good idea to
add a struct to hold these callbacks.

Each vimc entity then declare its type in the file for
the entity.

Signed-off-by: default avatarDafna Hirschfeld <dafna.hirschfeld@collabora.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 5aa0d096
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -325,7 +325,7 @@ static const struct media_entity_operations vimc_cap_mops = {
	.link_validate		= vimc_vdev_link_validate,
};

void vimc_cap_release(struct vimc_ent_device *ved)
static void vimc_cap_release(struct vimc_ent_device *ved)
{
	struct vimc_cap_device *vcap =
		container_of(ved, struct vimc_cap_device, ved);
@@ -334,7 +334,7 @@ void vimc_cap_release(struct vimc_ent_device *ved)
	kfree(vcap);
}

void vimc_cap_unregister(struct vimc_ent_device *ved)
static void vimc_cap_unregister(struct vimc_ent_device *ved)
{
	struct vimc_cap_device *vcap =
		container_of(ved, struct vimc_cap_device, ved);
@@ -382,7 +382,7 @@ static void *vimc_cap_process_frame(struct vimc_ent_device *ved,
	return NULL;
}

struct vimc_ent_device *vimc_cap_add(struct vimc_device *vimc,
static struct vimc_ent_device *vimc_cap_add(struct vimc_device *vimc,
					    const char *vcfg_name)
{
	struct v4l2_device *v4l2_dev = &vimc->v4l2_dev;
@@ -478,3 +478,9 @@ err_free_vcap:

	return ERR_PTR(ret);
}

struct vimc_ent_type vimc_cap_type = {
	.add = vimc_cap_add,
	.unregister = vimc_cap_unregister,
	.release = vimc_cap_release
};
+20 −22
Original line number Diff line number Diff line
@@ -120,24 +120,35 @@ struct vimc_device {
};

/**
 * struct vimc_ent_config	Structure which describes individual
 *				configuration for each entity
 * struct vimc_ent_type		Structure for the callbacks of the entity types
 *
 *
 * @name			entity name
 * @add				initializes and registers
 *					vimc entity - called from vimc-core
 * @unregister			unregisters vimc entity - called from vimc-core
 * @release			releases vimc entity - called from the v4l2_dev
 *					release callback
 */
struct vimc_ent_config {
	const char *name;
struct vimc_ent_type {
	struct vimc_ent_device *(*add)(struct vimc_device *vimc,
				       const char *vcfg_name);
	void (*unregister)(struct vimc_ent_device *ved);
	void (*release)(struct vimc_ent_device *ved);
};

/**
 * struct vimc_ent_config	Structure which describes individual
 *				configuration for each entity
 *
 * @name			entity name
 * @type			contain the callbacks of this entity type
 *
 */
struct vimc_ent_config {
	const char *name;
	struct vimc_ent_type *type;
};

/**
 * vimc_is_source - returns true if the entity has only source pads
 *
@@ -146,23 +157,10 @@ struct vimc_ent_config {
 */
bool vimc_is_source(struct media_entity *ent);

/* prototypes for vimc_ent_config hooks */
struct vimc_ent_device *vimc_cap_add(struct vimc_device *vimc,
				     const char *vcfg_name);
void vimc_cap_unregister(struct vimc_ent_device *ved);
void vimc_cap_release(struct vimc_ent_device *ved);

struct vimc_ent_device *vimc_deb_add(struct vimc_device *vimc,
				     const char *vcfg_name);
void vimc_deb_release(struct vimc_ent_device *ved);

struct vimc_ent_device *vimc_sca_add(struct vimc_device *vimc,
				     const char *vcfg_name);
void vimc_sca_release(struct vimc_ent_device *ved);

struct vimc_ent_device *vimc_sen_add(struct vimc_device *vimc,
				     const char *vcfg_name);
void vimc_sen_release(struct vimc_ent_device *ved);
extern struct vimc_ent_type vimc_sen_type;
extern struct vimc_ent_type vimc_deb_type;
extern struct vimc_ent_type vimc_sca_type;
extern struct vimc_ent_type vimc_cap_type;

/**
 * vimc_pix_map_by_index - get vimc_pix_map struct by its index
+13 −25
Original line number Diff line number Diff line
@@ -47,52 +47,40 @@ struct vimc_pipeline_config {
static struct vimc_ent_config ent_config[] = {
	{
		.name = "Sensor A",
		.add = vimc_sen_add,
		.release = vimc_sen_release,
		.type = &vimc_sen_type
	},
	{
		.name = "Sensor B",
		.add = vimc_sen_add,
		.release = vimc_sen_release,
		.type = &vimc_sen_type
	},
	{
		.name = "Debayer A",
		.add = vimc_deb_add,
		.release = vimc_deb_release,
		.type = &vimc_deb_type
	},
	{
		.name = "Debayer B",
		.add = vimc_deb_add,
		.release = vimc_deb_release,
		.type = &vimc_deb_type
	},
	{
		.name = "Raw Capture 0",
		.add = vimc_cap_add,
		.unregister = vimc_cap_unregister,
		.release = vimc_cap_release,
		.type = &vimc_cap_type
	},
	{
		.name = "Raw Capture 1",
		.add = vimc_cap_add,
		.unregister = vimc_cap_unregister,
		.release = vimc_cap_release,
		.type = &vimc_cap_type
	},
	{
		/* TODO: change this to vimc-input when it is implemented */
		.name = "RGB/YUV Input",
		.add = vimc_sen_add,
		.release = vimc_sen_release,
		.type = &vimc_sen_type
	},
	{
		.name = "Scaler",
		.add = vimc_sca_add,
		.release = vimc_sca_release,
		.type = &vimc_sca_type
	},
	{
		.name = "RGB/YUV Capture",
		.add = vimc_cap_add,
		.unregister = vimc_cap_unregister,
		.release = vimc_cap_release,
		.type = &vimc_cap_type
	},
};

@@ -166,7 +154,7 @@ static void vimc_release_subdevs(struct vimc_device *vimc)

	for (i = 0; i < vimc->pipe_cfg->num_ents; i++)
		if (vimc->ent_devs[i])
			vimc->pipe_cfg->ents[i].release(vimc->ent_devs[i]);
			vimc->pipe_cfg->ents[i].type->release(vimc->ent_devs[i]);
}

static void vimc_unregister_subdevs(struct vimc_device *vimc)
@@ -174,8 +162,8 @@ static void vimc_unregister_subdevs(struct vimc_device *vimc)
	unsigned int i;

	for (i = 0; i < vimc->pipe_cfg->num_ents; i++)
		if (vimc->ent_devs[i] && vimc->pipe_cfg->ents[i].unregister)
			vimc->pipe_cfg->ents[i].unregister(vimc->ent_devs[i]);
		if (vimc->ent_devs[i] && vimc->pipe_cfg->ents[i].type->unregister)
			vimc->pipe_cfg->ents[i].type->unregister(vimc->ent_devs[i]);
}

static int vimc_add_subdevs(struct vimc_device *vimc)
@@ -185,7 +173,7 @@ static int vimc_add_subdevs(struct vimc_device *vimc)
	for (i = 0; i < vimc->pipe_cfg->num_ents; i++) {
		dev_dbg(vimc->mdev.dev, "new entity for %s\n",
			vimc->pipe_cfg->ents[i].name);
		vimc->ent_devs[i] = vimc->pipe_cfg->ents[i].add(vimc,
		vimc->ent_devs[i] = vimc->pipe_cfg->ents[i].type->add(vimc,
					vimc->pipe_cfg->ents[i].name);
		if (IS_ERR(vimc->ent_devs[i])) {
			int err = PTR_ERR(vimc->ent_devs[i]);
+8 −3
Original line number Diff line number Diff line
@@ -494,7 +494,7 @@ static const struct v4l2_ctrl_ops vimc_deb_ctrl_ops = {
	.s_ctrl = vimc_deb_s_ctrl,
};

void vimc_deb_release(struct vimc_ent_device *ved)
static void vimc_deb_release(struct vimc_ent_device *ved)
{
	struct vimc_deb_device *vdeb =
		container_of(ved, struct vimc_deb_device, ved);
@@ -522,7 +522,7 @@ static const struct v4l2_ctrl_config vimc_deb_ctrl_mean_win_size = {
	.def = 3,
};

struct vimc_ent_device *vimc_deb_add(struct vimc_device *vimc,
static struct vimc_ent_device *vimc_deb_add(struct vimc_device *vimc,
					    const char *vcfg_name)
{
	struct v4l2_device *v4l2_dev = &vimc->v4l2_dev;
@@ -579,3 +579,8 @@ err_free_vdeb:

	return ERR_PTR(ret);
}

struct vimc_ent_type vimc_deb_type = {
	.add = vimc_deb_add,
	.release = vimc_deb_release
};
+8 −3
Original line number Diff line number Diff line
@@ -464,7 +464,7 @@ static void *vimc_sca_process_frame(struct vimc_ent_device *ved,
	return vsca->src_frame;
};

void vimc_sca_release(struct vimc_ent_device *ved)
static void vimc_sca_release(struct vimc_ent_device *ved)
{
	struct vimc_sca_device *vsca =
		container_of(ved, struct vimc_sca_device, ved);
@@ -473,7 +473,7 @@ void vimc_sca_release(struct vimc_ent_device *ved)
	kfree(vsca);
}

struct vimc_ent_device *vimc_sca_add(struct vimc_device *vimc,
static struct vimc_ent_device *vimc_sca_add(struct vimc_device *vimc,
					    const char *vcfg_name)
{
	struct v4l2_device *v4l2_dev = &vimc->v4l2_dev;
@@ -509,3 +509,8 @@ struct vimc_ent_device *vimc_sca_add(struct vimc_device *vimc,

	return &vsca->ved;
}

struct vimc_ent_type vimc_sca_type = {
	.add = vimc_sca_add,
	.release = vimc_sca_release
};
Loading