]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - include/media/v4l2-subdev.h
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/drzeus/mmc
[mv-sheeva.git] / include / media / v4l2-subdev.h
index 37b09e56e943ecf0938c175c3a9e83df8b171a7f..1d181b4ccb0143f3f837ded4ab319616cf63a0b0 100644 (file)
@@ -78,6 +78,9 @@ struct v4l2_subdev_core_ops {
        int (*queryctrl)(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc);
        int (*g_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl);
        int (*s_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl);
+       int (*g_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls);
+       int (*s_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls);
+       int (*try_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls);
        int (*querymenu)(struct v4l2_subdev *sd, struct v4l2_querymenu *qm);
        long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg);
 #ifdef CONFIG_VIDEO_ADV_DEBUG
@@ -112,9 +115,17 @@ struct v4l2_subdev_video_ops {
        int (*g_vbi_data)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_data *vbi_data);
        int (*g_sliced_vbi_cap)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_cap *cap);
        int (*s_std_output)(struct v4l2_subdev *sd, v4l2_std_id std);
+       int (*querystd)(struct v4l2_subdev *sd, v4l2_std_id *std);
+       int (*g_input_status)(struct v4l2_subdev *sd, u32 *status);
        int (*s_stream)(struct v4l2_subdev *sd, int enable);
-       int (*s_fmt)(struct v4l2_subdev *sd, struct v4l2_format *fmt);
+       int (*enum_fmt)(struct v4l2_subdev *sd, struct v4l2_fmtdesc *fmtdesc);
        int (*g_fmt)(struct v4l2_subdev *sd, struct v4l2_format *fmt);
+       int (*try_fmt)(struct v4l2_subdev *sd, struct v4l2_format *fmt);
+       int (*s_fmt)(struct v4l2_subdev *sd, struct v4l2_format *fmt);
+       int (*g_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param);
+       int (*s_parm)(struct v4l2_subdev *sd, struct v4l2_streamparm *param);
+       int (*enum_framesizes)(struct v4l2_subdev *sd, struct v4l2_frmsizeenum *fsize);
+       int (*enum_frameintervals)(struct v4l2_subdev *sd, struct v4l2_frmivalenum *fival);
 };
 
 struct v4l2_subdev_ops {
@@ -132,7 +143,7 @@ struct v4l2_subdev_ops {
 struct v4l2_subdev {
        struct list_head list;
        struct module *owner;
-       struct v4l2_device *dev;
+       struct v4l2_device *v4l2_dev;
        const struct v4l2_subdev_ops *ops;
        /* name must be unique */
        char name[V4L2_SUBDEV_NAME_SIZE];
@@ -171,7 +182,7 @@ static inline void v4l2_subdev_init(struct v4l2_subdev *sd,
        /* ops->core MUST be set */
        BUG_ON(!ops || !ops->core);
        sd->ops = ops;
-       sd->dev = NULL;
+       sd->v4l2_dev = NULL;
        sd->name[0] = '\0';
        sd->grp_id = 0;
        sd->priv = NULL;
@@ -186,4 +197,9 @@ static inline void v4l2_subdev_init(struct v4l2_subdev *sd,
        (!(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