media: vimc: add vimc_ent_type struct for the callbacks of entities
authorDafna Hirschfeld <dafna.hirschfeld@collabora.com>
Tue, 31 Mar 2020 18:45:15 +0000 (20:45 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 14 Apr 2020 10:05:30 +0000 (12:05 +0200)
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: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/test_drivers/vimc/vimc-capture.c
drivers/media/test_drivers/vimc/vimc-common.h
drivers/media/test_drivers/vimc/vimc-core.c
drivers/media/test_drivers/vimc/vimc-debayer.c
drivers/media/test_drivers/vimc/vimc-scaler.c
drivers/media/test_drivers/vimc/vimc-sensor.c

index 8bafbf90cbf5a037bc1ed936fac77edb57b1c166..5315c201314c9cc42cc1866430c52aa01ae2af71 100644 (file)
@@ -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,8 +382,8 @@ static void *vimc_cap_process_frame(struct vimc_ent_device *ved,
        return NULL;
 }
 
-struct vimc_ent_device *vimc_cap_add(struct vimc_device *vimc,
-                                    const char *vcfg_name)
+static struct vimc_ent_device *vimc_cap_add(struct vimc_device *vimc,
+                                           const char *vcfg_name)
 {
        struct v4l2_device *v4l2_dev = &vimc->v4l2_dev;
        const struct vimc_pix_map *vpix;
@@ -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
+};
index db3062fdc63d8d0be4c0e8dd28058754f3e07cf6..1155eba36b6a8c6641474775caf9fb54d8e73210 100644 (file)
@@ -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
index edac998f58d55b5c7c4818aa1500b760b66f3d43..11210aaa2551da4834217a2d3fca4db4009e03f6 100644 (file)
@@ -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]);
index d591b6a6bcf0cf026957c28548dc46e5e84b5b6c..d10aee9f84c4459f0510b7e162e7935c1c92df07 100644 (file)
@@ -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,8 +522,8 @@ 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,
-                                    const char *vcfg_name)
+static struct vimc_ent_device *vimc_deb_add(struct vimc_device *vimc,
+                                           const char *vcfg_name)
 {
        struct v4l2_device *v4l2_dev = &vimc->v4l2_dev;
        struct vimc_deb_device *vdeb;
@@ -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
+};
index 6ea05dcebc315d196c5b7beacf284a7994f861b2..465b906b749771c844daf4f26959fb220468f614 100644 (file)
@@ -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,8 +473,8 @@ void vimc_sca_release(struct vimc_ent_device *ved)
        kfree(vsca);
 }
 
-struct vimc_ent_device *vimc_sca_add(struct vimc_device *vimc,
-                                    const char *vcfg_name)
+static struct vimc_ent_device *vimc_sca_add(struct vimc_device *vimc,
+                                           const char *vcfg_name)
 {
        struct v4l2_device *v4l2_dev = &vimc->v4l2_dev;
        struct vimc_sca_device *vsca;
@@ -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
+};
index 24ce5b70b97eaf9391ed8e7b61c883534ac326cb..228120b3a6ddca0141134d3c6a4f4a1f05d63768 100644 (file)
@@ -279,7 +279,7 @@ static const struct v4l2_ctrl_ops vimc_sen_ctrl_ops = {
        .s_ctrl = vimc_sen_s_ctrl,
 };
 
-void vimc_sen_release(struct vimc_ent_device *ved)
+static void vimc_sen_release(struct vimc_ent_device *ved)
 {
        struct vimc_sen_device *vsen =
                container_of(ved, struct vimc_sen_device, ved);
@@ -307,8 +307,8 @@ static const struct v4l2_ctrl_config vimc_sen_ctrl_test_pattern = {
        .qmenu = tpg_pattern_strings,
 };
 
-struct vimc_ent_device *vimc_sen_add(struct vimc_device *vimc,
-                                    const char *vcfg_name)
+static struct vimc_ent_device *vimc_sen_add(struct vimc_device *vimc,
+                                           const char *vcfg_name)
 {
        struct v4l2_device *v4l2_dev = &vimc->v4l2_dev;
        struct vimc_sen_device *vsen;
@@ -374,3 +374,8 @@ err_free_vsen:
 
        return ERR_PTR(ret);
 }
+
+struct vimc_ent_type vimc_sen_type = {
+       .add = vimc_sen_add,
+       .release = vimc_sen_release
+};