aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/v4l2-core
diff options
context:
space:
mode:
authorSylwester Nawrocki <s.nawrocki@samsung.com>2013-07-19 11:21:29 -0400
committerMauro Carvalho Chehab <m.chehab@samsung.com>2013-07-30 14:52:32 -0400
commite7359f8e660882fb2168609638163561eb2f50f0 (patch)
treef40223db11d3de96d1315023530880d33a844dca /drivers/media/v4l2-core
parentcfca7644d7959e1f50cb132306d1557bf6c2da57 (diff)
[media] V4L: Add V4L2_ASYNC_MATCH_OF subdev matching type
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>
Diffstat (limited to 'drivers/media/v4l2-core')
-rw-r--r--drivers/media/v4l2-core/v4l2-async.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/media/v4l2-core/v4l2-async.c b/drivers/media/v4l2-core/v4l2-async.c
index 86934ca73357..9f91013a600d 100644
--- a/drivers/media/v4l2-core/v4l2-async.c
+++ b/drivers/media/v4l2-core/v4l2-async.c
@@ -39,6 +39,11 @@ static bool match_devname(struct device *dev, struct v4l2_async_subdev *asd)
39 return !strcmp(asd->match.device_name.name, dev_name(dev)); 39 return !strcmp(asd->match.device_name.name, dev_name(dev));
40} 40}
41 41
42static bool match_of(struct device *dev, struct v4l2_async_subdev *asd)
43{
44 return dev->of_node == asd->match.of.node;
45}
46
42static LIST_HEAD(subdev_list); 47static LIST_HEAD(subdev_list);
43static LIST_HEAD(notifier_list); 48static LIST_HEAD(notifier_list);
44static DEFINE_MUTEX(list_lock); 49static DEFINE_MUTEX(list_lock);
@@ -66,6 +71,9 @@ static struct v4l2_async_subdev *v4l2_async_belongs(struct v4l2_async_notifier *
66 case V4L2_ASYNC_MATCH_I2C: 71 case V4L2_ASYNC_MATCH_I2C:
67 match = match_i2c; 72 match = match_i2c;
68 break; 73 break;
74 case V4L2_ASYNC_MATCH_OF:
75 match = match_of;
76 break;
69 default: 77 default:
70 /* Cannot happen, unless someone breaks us */ 78 /* Cannot happen, unless someone breaks us */
71 WARN_ON(true); 79 WARN_ON(true);
@@ -145,6 +153,7 @@ int v4l2_async_notifier_register(struct v4l2_device *v4l2_dev,
145 case V4L2_ASYNC_MATCH_CUSTOM: 153 case V4L2_ASYNC_MATCH_CUSTOM:
146 case V4L2_ASYNC_MATCH_DEVNAME: 154 case V4L2_ASYNC_MATCH_DEVNAME:
147 case V4L2_ASYNC_MATCH_I2C: 155 case V4L2_ASYNC_MATCH_I2C:
156 case V4L2_ASYNC_MATCH_OF:
148 break; 157 break;
149 default: 158 default:
150 dev_err(notifier->v4l2_dev ? notifier->v4l2_dev->dev : NULL, 159 dev_err(notifier->v4l2_dev ? notifier->v4l2_dev->dev : NULL,