[media] V4L: Add V4L2_ASYNC_MATCH_OF subdev matching type
authorSylwester Nawrocki <s.nawrocki@samsung.com>
Fri, 19 Jul 2013 15:21:29 +0000 (12:21 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Tue, 30 Jul 2013 18:52:32 +0000 (15:52 -0300)
Add support for matching by device_node pointer. This allows
the notifier user to simply pass a list of device_node pointers
corresponding to sub-devices.

Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Acked-by: Lad, Prabhakar <prabhakar.csengg@gmail.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
drivers/media/v4l2-core/v4l2-async.c
include/media/v4l2-async.h

index 86934ca733573866cf76707aba7242a7de883ef0..9f91013a600d516aca48a6f7410ea8a73d2c910a 100644 (file)
@@ -39,6 +39,11 @@ static bool match_devname(struct device *dev, struct v4l2_async_subdev *asd)
        return !strcmp(asd->match.device_name.name, dev_name(dev));
 }
 
+static bool match_of(struct device *dev, struct v4l2_async_subdev *asd)
+{
+       return dev->of_node == asd->match.of.node;
+}
+
 static LIST_HEAD(subdev_list);
 static LIST_HEAD(notifier_list);
 static DEFINE_MUTEX(list_lock);
@@ -66,6 +71,9 @@ static struct v4l2_async_subdev *v4l2_async_belongs(struct v4l2_async_notifier *
                case V4L2_ASYNC_MATCH_I2C:
                        match = match_i2c;
                        break;
+               case V4L2_ASYNC_MATCH_OF:
+                       match = match_of;
+                       break;
                default:
                        /* Cannot happen, unless someone breaks us */
                        WARN_ON(true);
@@ -145,6 +153,7 @@ int v4l2_async_notifier_register(struct v4l2_device *v4l2_dev,
                case V4L2_ASYNC_MATCH_CUSTOM:
                case V4L2_ASYNC_MATCH_DEVNAME:
                case V4L2_ASYNC_MATCH_I2C:
+               case V4L2_ASYNC_MATCH_OF:
                        break;
                default:
                        dev_err(notifier->v4l2_dev ? notifier->v4l2_dev->dev : NULL,
index 33e3b2a30ecbcca3d87105b695c3ee2eeb696933..82b29813f8bed989acb24e377f7d5cfca313a251 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/mutex.h>
 
 struct device;
+struct device_node;
 struct v4l2_device;
 struct v4l2_subdev;
 struct v4l2_async_notifier;
@@ -26,6 +27,7 @@ enum v4l2_async_match_type {
        V4L2_ASYNC_MATCH_CUSTOM,
        V4L2_ASYNC_MATCH_DEVNAME,
        V4L2_ASYNC_MATCH_I2C,
+       V4L2_ASYNC_MATCH_OF,
 };
 
 /**
@@ -38,6 +40,9 @@ enum v4l2_async_match_type {
 struct v4l2_async_subdev {
        enum v4l2_async_match_type match_type;
        union {
+               struct {
+                       const struct device_node *node;
+               } of;
                struct {
                        const char *name;
                } device_name;