~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise-security

« back to all changes in this revision

Viewing changes to drivers/media/video/v4l2-subdev.c

  • Committer: Package Import Robot
  • Author(s): Paolo Pisati, Paolo Pisati
  • Date: 2011-12-06 15:56:07 UTC
  • Revision ID: package-import@ubuntu.com-20111206155607-pcf44kv5fmhk564f
Tags: 3.2.0-1401.1
[ Paolo Pisati ]

* Rebased on top of Ubuntu-3.2.0-3.8
* Tilt-tracking @ ef2487af4bb15bdd0689631774b5a5e3a59f74e2
* Delete debian.ti-omap4/control, it shoudln't be tracked
* Fix architecture spelling (s/armel/armhf/)
* [Config] Update configs following 3.2 import
* [Config] Fix compilation: disable CODA and ARCH_OMAP3
* [Config] Fix compilation: disable Ethernet Faraday
* Update series to precise

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
#include <linux/slab.h>
25
25
#include <linux/types.h>
26
26
#include <linux/videodev2.h>
 
27
#include <linux/export.h>
27
28
 
28
29
#include <media/v4l2-ctrls.h>
29
30
#include <media/v4l2-device.h>
75
76
                return ret;
76
77
        }
77
78
 
78
 
        ret = v4l2_fh_init(&subdev_fh->vfh, vdev);
79
 
        if (ret)
80
 
                goto err;
81
 
 
82
 
        if (sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS) {
83
 
                ret = v4l2_event_init(&subdev_fh->vfh);
84
 
                if (ret)
85
 
                        goto err;
86
 
 
87
 
                ret = v4l2_event_alloc(&subdev_fh->vfh, sd->nevents);
88
 
                if (ret)
89
 
                        goto err;
90
 
        }
91
 
 
 
79
        v4l2_fh_init(&subdev_fh->vfh, vdev);
92
80
        v4l2_fh_add(&subdev_fh->vfh);
93
81
        file->private_data = &subdev_fh->vfh;
94
82
#if defined(CONFIG_MEDIA_CONTROLLER)
155
143
 
156
144
        switch (cmd) {
157
145
        case VIDIOC_QUERYCTRL:
158
 
                return v4l2_queryctrl(sd->ctrl_handler, arg);
 
146
                return v4l2_queryctrl(vfh->ctrl_handler, arg);
159
147
 
160
148
        case VIDIOC_QUERYMENU:
161
 
                return v4l2_querymenu(sd->ctrl_handler, arg);
 
149
                return v4l2_querymenu(vfh->ctrl_handler, arg);
162
150
 
163
151
        case VIDIOC_G_CTRL:
164
 
                return v4l2_g_ctrl(sd->ctrl_handler, arg);
 
152
                return v4l2_g_ctrl(vfh->ctrl_handler, arg);
165
153
 
166
154
        case VIDIOC_S_CTRL:
167
 
                return v4l2_s_ctrl(sd->ctrl_handler, arg);
 
155
                return v4l2_s_ctrl(vfh, vfh->ctrl_handler, arg);
168
156
 
169
157
        case VIDIOC_G_EXT_CTRLS:
170
 
                return v4l2_g_ext_ctrls(sd->ctrl_handler, arg);
 
158
                return v4l2_g_ext_ctrls(vfh->ctrl_handler, arg);
171
159
 
172
160
        case VIDIOC_S_EXT_CTRLS:
173
 
                return v4l2_s_ext_ctrls(sd->ctrl_handler, arg);
 
161
                return v4l2_s_ext_ctrls(vfh, vfh->ctrl_handler, arg);
174
162
 
175
163
        case VIDIOC_TRY_EXT_CTRLS:
176
 
                return v4l2_try_ext_ctrls(sd->ctrl_handler, arg);
 
164
                return v4l2_try_ext_ctrls(vfh->ctrl_handler, arg);
177
165
 
178
166
        case VIDIOC_DQEVENT:
179
167
                if (!(sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS))
186
174
 
187
175
        case VIDIOC_UNSUBSCRIBE_EVENT:
188
176
                return v4l2_subdev_call(sd, core, unsubscribe_event, vfh, arg);
 
177
 
 
178
#ifdef CONFIG_VIDEO_ADV_DEBUG
 
179
        case VIDIOC_DBG_G_REGISTER:
 
180
        {
 
181
                struct v4l2_dbg_register *p = arg;
 
182
 
 
183
                if (!capable(CAP_SYS_ADMIN))
 
184
                        return -EPERM;
 
185
                return v4l2_subdev_call(sd, core, g_register, p);
 
186
        }
 
187
        case VIDIOC_DBG_S_REGISTER:
 
188
        {
 
189
                struct v4l2_dbg_register *p = arg;
 
190
 
 
191
                if (!capable(CAP_SYS_ADMIN))
 
192
                        return -EPERM;
 
193
                return v4l2_subdev_call(sd, core, s_register, p);
 
194
        }
 
195
#endif
189
196
#if defined(CONFIG_VIDEO_V4L2_SUBDEV_API)
190
197
        case VIDIOC_SUBDEV_G_FMT: {
191
198
                struct v4l2_subdev_format *format = arg;
297
304
        if (!(sd->flags & V4L2_SUBDEV_FL_HAS_EVENTS))
298
305
                return POLLERR;
299
306
 
300
 
        poll_wait(file, &fh->events->wait, wait);
 
307
        poll_wait(file, &fh->wait, wait);
301
308
 
302
309
        if (v4l2_event_pending(fh))
303
310
                return POLLPRI;