media: v4l: async: Make V4L2 async match information a struct
authorSakari Ailus <sakari.ailus@linux.intel.com>
Sun, 19 Feb 2023 12:09:00 +0000 (13:09 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Fri, 28 Jul 2023 08:40:17 +0000 (10:40 +0200)
Make V4L2 async match information a struct, making it easier to use it
elsewhere outside the scope of struct v4l2_async_subdev.

Also remove an obsolete comment --- none of these fields are supposed to
be touched by drivers.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Tested-by: Philipp Zabel <p.zabel@pengutronix.de> # imx6qp
Tested-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> # rcar + adv746x
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Tested-by: Aishwarya Kothari <aishwarya.kothari@toradex.com> # Apalis i.MX6Q with TC358743
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> # Renesas RZ/G2L SMARC
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/v4l2-core/v4l2-async.c
include/media/v4l2-async.h

index 925ab55..5aa8ab8 100644 (file)
@@ -212,7 +212,7 @@ v4l2_async_find_match(struct v4l2_async_notifier *notifier,
 
        list_for_each_entry(asd, &notifier->waiting, list) {
                /* bus_type has been verified valid before */
-               switch (asd->match_type) {
+               switch (asd->match.type) {
                case V4L2_ASYNC_MATCH_I2C:
                        match = match_i2c;
                        break;
@@ -237,10 +237,10 @@ v4l2_async_find_match(struct v4l2_async_notifier *notifier,
 static bool asd_equal(struct v4l2_async_subdev *asd_x,
                      struct v4l2_async_subdev *asd_y)
 {
-       if (asd_x->match_type != asd_y->match_type)
+       if (asd_x->match.type != asd_y->match.type)
                return false;
 
-       switch (asd_x->match_type) {
+       switch (asd_x->match.type) {
        case V4L2_ASYNC_MATCH_I2C:
                return asd_x->match.i2c.adapter_id ==
                        asd_y->match.i2c.adapter_id &&
@@ -554,7 +554,7 @@ static int v4l2_async_nf_asd_valid(struct v4l2_async_notifier *notifier,
 {
        struct device *dev = notifier_dev(notifier);
 
-       switch (asd->match_type) {
+       switch (asd->match.type) {
        case V4L2_ASYNC_MATCH_I2C:
        case V4L2_ASYNC_MATCH_FWNODE:
                if (v4l2_async_nf_has_async_subdev(notifier, asd, skip_self)) {
@@ -564,7 +564,7 @@ static int v4l2_async_nf_asd_valid(struct v4l2_async_notifier *notifier,
                break;
        default:
                dev_err(dev, "v4l2-async: Invalid match type %u on %p\n",
-                       asd->match_type, asd);
+                       asd->match.type, asd);
                return -EINVAL;
        }
 
@@ -690,7 +690,7 @@ static void __v4l2_async_nf_cleanup(struct v4l2_async_notifier *notifier)
                return;
 
        list_for_each_entry_safe(asd, tmp, &notifier->asd_list, asd_list) {
-               switch (asd->match_type) {
+               switch (asd->match.type) {
                case V4L2_ASYNC_MATCH_FWNODE:
                        fwnode_handle_put(asd->match.fwnode);
                        break;
@@ -745,7 +745,7 @@ __v4l2_async_nf_add_fwnode(struct v4l2_async_notifier *notifier,
        if (!asd)
                return ERR_PTR(-ENOMEM);
 
-       asd->match_type = V4L2_ASYNC_MATCH_FWNODE;
+       asd->match.type = V4L2_ASYNC_MATCH_FWNODE;
        asd->match.fwnode = fwnode_handle_get(fwnode);
 
        ret = __v4l2_async_nf_add_subdev(notifier, asd);
@@ -792,7 +792,7 @@ __v4l2_async_nf_add_i2c(struct v4l2_async_notifier *notifier, int adapter_id,
        if (!asd)
                return ERR_PTR(-ENOMEM);
 
-       asd->match_type = V4L2_ASYNC_MATCH_I2C;
+       asd->match.type = V4L2_ASYNC_MATCH_I2C;
        asd->match.i2c.adapter_id = adapter_id;
        asd->match.i2c.address = address;
 
@@ -905,7 +905,7 @@ EXPORT_SYMBOL(v4l2_async_unregister_subdev);
 static void print_waiting_subdev(struct seq_file *s,
                                 struct v4l2_async_subdev *asd)
 {
-       switch (asd->match_type) {
+       switch (asd->match.type) {
        case V4L2_ASYNC_MATCH_I2C:
                seq_printf(s, " [i2c] dev=%d-%04x\n", asd->match.i2c.adapter_id,
                           asd->match.i2c.address);
index 2c9baa3..d347ef3 100644 (file)
@@ -34,23 +34,37 @@ enum v4l2_async_match_type {
 };
 
 /**
- * struct v4l2_async_subdev - sub-device descriptor, as known to a bridge
+ * struct v4l2_async_match_desc - async sub-device match information
  *
- * @match_type:        type of match that will be used
- * @match:     union of per-bus type matching data sets
- * @match.fwnode:
- *             pointer to &struct fwnode_handle to be matched.
+ * @type:      type of match that will be used
+ * @fwnode:    pointer to &struct fwnode_handle to be matched.
  *             Used if @match_type is %V4L2_ASYNC_MATCH_FWNODE.
- * @match.i2c: embedded struct with I2C parameters to be matched.
+ * @i2c:       embedded struct with I2C parameters to be matched.
  *             Both @match.i2c.adapter_id and @match.i2c.address
  *             should be matched.
  *             Used if @match_type is %V4L2_ASYNC_MATCH_I2C.
- * @match.i2c.adapter_id:
+ * @i2c.adapter_id:
  *             I2C adapter ID to be matched.
  *             Used if @match_type is %V4L2_ASYNC_MATCH_I2C.
- * @match.i2c.address:
+ * @i2c.address:
  *             I2C address to be matched.
  *             Used if @match_type is %V4L2_ASYNC_MATCH_I2C.
+ */
+struct v4l2_async_match_desc {
+       enum v4l2_async_match_type type;
+       union {
+               struct fwnode_handle *fwnode;
+               struct {
+                       int adapter_id;
+                       unsigned short address;
+               } i2c;
+       };
+};
+
+/**
+ * struct v4l2_async_subdev - sub-device descriptor, as known to a bridge
+ *
+ * @match:     struct of match type and per-bus type matching data sets
  * @asd_list:  used to add struct v4l2_async_subdev objects to the
  *             master notifier @asd_list
  * @list:      used to link struct v4l2_async_subdev objects, waiting to be
@@ -61,16 +75,7 @@ enum v4l2_async_match_type {
  * v4l2_async_subdev as its first member.
  */
 struct v4l2_async_subdev {
-       enum v4l2_async_match_type match_type;
-       union {
-               struct fwnode_handle *fwnode;
-               struct {
-                       int adapter_id;
-                       unsigned short address;
-               } i2c;
-       } match;
-
-       /* v4l2-async core private: not to be used by drivers */
+       struct v4l2_async_match_desc match;
        struct list_head list;
        struct list_head asd_list;
 };