The patch number 11021 was added via Hans Verkuil <hverk...@xs4all.nl> to http://linuxtv.org/hg/v4l-dvb master development tree.
Kernel patches in this development tree may be modified to be backward compatible with older kernels. Compatibility modifications will be removed before inclusion into the mainstream Kernel If anyone has any objections, please let us know by sending a message to: Linux Media Mailing List <linux-me...@vger.kernel.org> ------ From: Hans Verkuil <hverk...@xs4all.nl> v4l2-device: add a notify callback. Add a notify callback to v4l2_device to let sub-devices notify their parent of special events. Priority: normal Signed-off-by: Hans Verkuil <hverk...@xs4all.nl> --- linux/Documentation/video4linux/v4l2-framework.txt | 10 ++++++++++ linux/include/media/v4l2-device.h | 3 +++ linux/include/media/v4l2-subdev.h | 5 +++++ 3 files changed, 18 insertions(+) diff -r 7cfb5386b66f -r ba07495a9102 linux/Documentation/video4linux/v4l2-framework.txt --- a/linux/Documentation/video4linux/v4l2-framework.txt Sun Mar 08 14:39:42 2009 -0300 +++ b/linux/Documentation/video4linux/v4l2-framework.txt Sun Mar 08 21:02:10 2009 +0100 @@ -92,6 +92,11 @@ The first 'dev' argument is normally the The first 'dev' argument is normally the struct device pointer of a pci_dev, usb_device or platform_device. It is rare for dev to be NULL, but it happens with ISA devices, for example. + +You can also supply a notify() callback that can be called by sub-devices to +notify you of events. Whether you need to set this depends on the sub-device. +Any notifications a sub-device supports must be defined in a header in +include/media/<subdevice>.h. You unregister with: @@ -280,6 +285,11 @@ v4l2_device_call_all(). That ensures tha v4l2_device_call_all(). That ensures that it will only go to the subdev that needs it. +If the sub-device needs to notify its v4l2_device parent of an event, then +it can call v4l2_subdev_notify(sd, notification, arg). This macro checks +whether there is a notify() callback defined and returns -ENODEV if not. +Otherwise the result of the notify() call is returned. + The advantage of using v4l2_subdev is that it is a generic struct and does not contain any knowledge about the underlying hardware. So a driver might contain several subdevs that use an I2C bus, but also a subdev that is diff -r 7cfb5386b66f -r ba07495a9102 linux/include/media/v4l2-device.h --- a/linux/include/media/v4l2-device.h Sun Mar 08 14:39:42 2009 -0300 +++ b/linux/include/media/v4l2-device.h Sun Mar 08 21:02:10 2009 +0100 @@ -44,6 +44,9 @@ struct v4l2_device { spinlock_t lock; /* unique device name, by default the driver name + bus ID */ char name[V4L2_DEVICE_NAME_SIZE]; + /* notify callback called by some sub-devices. */ + void (*notify)(struct v4l2_subdev *sd, + unsigned int notification, void *arg); }; /* Initialize v4l2_dev and make dev->driver_data point to v4l2_dev. diff -r 7cfb5386b66f -r ba07495a9102 linux/include/media/v4l2-subdev.h --- a/linux/include/media/v4l2-subdev.h Sun Mar 08 14:39:42 2009 -0300 +++ b/linux/include/media/v4l2-subdev.h Sun Mar 08 21:02:10 2009 +0100 @@ -191,4 +191,9 @@ static inline void v4l2_subdev_init(stru (!(sd) ? -ENODEV : (((sd) && (sd)->ops->o && (sd)->ops->o->f) ? \ (sd)->ops->o->f((sd) , ##args) : -ENOIOCTLCMD)) +/* Send a notification to v4l2_device. */ +#define v4l2_subdev_notify(sd, notification, arg) \ + ((!(sd) || !(sd)->v4l2_dev || !(sd)->v4l2_dev->notify) ? -ENODEV : \ + (sd)->v4l2_dev->notify((sd), (notification), (arg))) + #endif --- Patch is available at: http://linuxtv.org/hg/v4l-dvb/rev/ba07495a9102bd18b84ad6afd4f4428dbf902e32 _______________________________________________ linuxtv-commits mailing list linuxtv-commits@linuxtv.org http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits