diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2009-12-09 06:38:49 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-03-21 19:32:42 -0400 |
commit | 2096a5dcf9704f5a86ecba37169eb813aaf0431c (patch) | |
tree | 21e7d870302a7c6748667a785b465a7a84805228 /include/media/v4l2-subdev.h | |
parent | 0070d91e5b5ae594116202ab7d62d8264830b1cd (diff) |
[media] v4l: subdev: Add device node support
Create a device node named subdevX for every registered subdev.
As the device node is registered before the subdev core::s_config
function is called, return -EGAIN on open until initialization
completes.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Vimarsh Zutshi <vimarsh.zutshi@gmail.com>
Acked-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'include/media/v4l2-subdev.h')
-rw-r--r-- | include/media/v4l2-subdev.h | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h index da16d2f4a00b..474ef009fd3d 100644 --- a/include/media/v4l2-subdev.h +++ b/include/media/v4l2-subdev.h | |||
@@ -22,6 +22,7 @@ | |||
22 | #define _V4L2_SUBDEV_H | 22 | #define _V4L2_SUBDEV_H |
23 | 23 | ||
24 | #include <media/v4l2-common.h> | 24 | #include <media/v4l2-common.h> |
25 | #include <media/v4l2-dev.h> | ||
25 | #include <media/v4l2-mediabus.h> | 26 | #include <media/v4l2-mediabus.h> |
26 | 27 | ||
27 | /* generic v4l2_device notify callback notification values */ | 28 | /* generic v4l2_device notify callback notification values */ |
@@ -431,9 +432,11 @@ struct v4l2_subdev_internal_ops { | |||
431 | #define V4L2_SUBDEV_NAME_SIZE 32 | 432 | #define V4L2_SUBDEV_NAME_SIZE 32 |
432 | 433 | ||
433 | /* Set this flag if this subdev is a i2c device. */ | 434 | /* Set this flag if this subdev is a i2c device. */ |
434 | #define V4L2_SUBDEV_FL_IS_I2C (1U << 0) | 435 | #define V4L2_SUBDEV_FL_IS_I2C (1U << 0) |
435 | /* Set this flag if this subdev is a spi device. */ | 436 | /* Set this flag if this subdev is a spi device. */ |
436 | #define V4L2_SUBDEV_FL_IS_SPI (1U << 1) | 437 | #define V4L2_SUBDEV_FL_IS_SPI (1U << 1) |
438 | /* Set this flag if this subdev needs a device node. */ | ||
439 | #define V4L2_SUBDEV_FL_HAS_DEVNODE (1U << 2) | ||
437 | 440 | ||
438 | /* Each instance of a subdev driver should create this struct, either | 441 | /* Each instance of a subdev driver should create this struct, either |
439 | stand-alone or embedded in a larger struct. | 442 | stand-alone or embedded in a larger struct. |
@@ -455,8 +458,15 @@ struct v4l2_subdev { | |||
455 | /* pointer to private data */ | 458 | /* pointer to private data */ |
456 | void *dev_priv; | 459 | void *dev_priv; |
457 | void *host_priv; | 460 | void *host_priv; |
461 | /* subdev device node */ | ||
462 | struct video_device devnode; | ||
458 | }; | 463 | }; |
459 | 464 | ||
465 | #define vdev_to_v4l2_subdev(vdev) \ | ||
466 | container_of(vdev, struct v4l2_subdev, devnode) | ||
467 | |||
468 | extern const struct v4l2_file_operations v4l2_subdev_fops; | ||
469 | |||
460 | static inline void v4l2_set_subdevdata(struct v4l2_subdev *sd, void *p) | 470 | static inline void v4l2_set_subdevdata(struct v4l2_subdev *sd, void *p) |
461 | { | 471 | { |
462 | sd->dev_priv = p; | 472 | sd->dev_priv = p; |