diff options
Diffstat (limited to 'drivers/media/video/saa7134/saa7134-empress.c')
-rw-r--r-- | drivers/media/video/saa7134/saa7134-empress.c | 40 |
1 files changed, 17 insertions, 23 deletions
diff --git a/drivers/media/video/saa7134/saa7134-empress.c b/drivers/media/video/saa7134/saa7134-empress.c index 1314522a8130..3ae71a340822 100644 --- a/drivers/media/video/saa7134/saa7134-empress.c +++ b/drivers/media/video/saa7134/saa7134-empress.c | |||
@@ -110,9 +110,10 @@ static int ts_release(struct inode *inode, struct file *file) | |||
110 | { | 110 | { |
111 | struct saa7134_dev *dev = file->private_data; | 111 | struct saa7134_dev *dev = file->private_data; |
112 | 112 | ||
113 | mutex_lock(&dev->empress_tsq.vb_lock); | ||
114 | |||
113 | videobuf_stop(&dev->empress_tsq); | 115 | videobuf_stop(&dev->empress_tsq); |
114 | videobuf_mmap_free(&dev->empress_tsq); | 116 | videobuf_mmap_free(&dev->empress_tsq); |
115 | dev->empress_users--; | ||
116 | 117 | ||
117 | /* stop the encoder */ | 118 | /* stop the encoder */ |
118 | ts_reset_encoder(dev); | 119 | ts_reset_encoder(dev); |
@@ -121,6 +122,10 @@ static int ts_release(struct inode *inode, struct file *file) | |||
121 | saa_writeb(SAA7134_AUDIO_MUTE_CTRL, | 122 | saa_writeb(SAA7134_AUDIO_MUTE_CTRL, |
122 | saa_readb(SAA7134_AUDIO_MUTE_CTRL) | (1 << 6)); | 123 | saa_readb(SAA7134_AUDIO_MUTE_CTRL) | (1 << 6)); |
123 | 124 | ||
125 | dev->empress_users--; | ||
126 | |||
127 | mutex_unlock(&dev->empress_tsq.vb_lock); | ||
128 | |||
124 | return 0; | 129 | return 0; |
125 | } | 130 | } |
126 | 131 | ||
@@ -163,8 +168,7 @@ ts_mmap(struct file *file, struct vm_area_struct * vma) | |||
163 | static int empress_querycap(struct file *file, void *priv, | 168 | static int empress_querycap(struct file *file, void *priv, |
164 | struct v4l2_capability *cap) | 169 | struct v4l2_capability *cap) |
165 | { | 170 | { |
166 | struct saa7134_fh *fh = priv; | 171 | struct saa7134_dev *dev = file->private_data; |
167 | struct saa7134_dev *dev = fh->dev; | ||
168 | 172 | ||
169 | strcpy(cap->driver, "saa7134"); | 173 | strcpy(cap->driver, "saa7134"); |
170 | strlcpy(cap->card, saa7134_boards[dev->board].name, | 174 | strlcpy(cap->card, saa7134_boards[dev->board].name, |
@@ -219,8 +223,7 @@ static int empress_enum_fmt_cap(struct file *file, void *priv, | |||
219 | static int empress_g_fmt_cap(struct file *file, void *priv, | 223 | static int empress_g_fmt_cap(struct file *file, void *priv, |
220 | struct v4l2_format *f) | 224 | struct v4l2_format *f) |
221 | { | 225 | { |
222 | struct saa7134_fh *fh = priv; | 226 | struct saa7134_dev *dev = file->private_data; |
223 | struct saa7134_dev *dev = fh->dev; | ||
224 | 227 | ||
225 | saa7134_i2c_call_clients(dev, VIDIOC_G_FMT, f); | 228 | saa7134_i2c_call_clients(dev, VIDIOC_G_FMT, f); |
226 | 229 | ||
@@ -233,8 +236,7 @@ static int empress_g_fmt_cap(struct file *file, void *priv, | |||
233 | static int empress_s_fmt_cap(struct file *file, void *priv, | 236 | static int empress_s_fmt_cap(struct file *file, void *priv, |
234 | struct v4l2_format *f) | 237 | struct v4l2_format *f) |
235 | { | 238 | { |
236 | struct saa7134_fh *fh = priv; | 239 | struct saa7134_dev *dev = file->private_data; |
237 | struct saa7134_dev *dev = fh->dev; | ||
238 | 240 | ||
239 | saa7134_i2c_call_clients(dev, VIDIOC_S_FMT, f); | 241 | saa7134_i2c_call_clients(dev, VIDIOC_S_FMT, f); |
240 | 242 | ||
@@ -248,8 +250,7 @@ static int empress_s_fmt_cap(struct file *file, void *priv, | |||
248 | static int empress_reqbufs(struct file *file, void *priv, | 250 | static int empress_reqbufs(struct file *file, void *priv, |
249 | struct v4l2_requestbuffers *p) | 251 | struct v4l2_requestbuffers *p) |
250 | { | 252 | { |
251 | struct saa7134_fh *fh = priv; | 253 | struct saa7134_dev *dev = file->private_data; |
252 | struct saa7134_dev *dev = fh->dev; | ||
253 | 254 | ||
254 | return videobuf_reqbufs(&dev->empress_tsq, p); | 255 | return videobuf_reqbufs(&dev->empress_tsq, p); |
255 | } | 256 | } |
@@ -257,24 +258,21 @@ static int empress_reqbufs(struct file *file, void *priv, | |||
257 | static int empress_querybuf(struct file *file, void *priv, | 258 | static int empress_querybuf(struct file *file, void *priv, |
258 | struct v4l2_buffer *b) | 259 | struct v4l2_buffer *b) |
259 | { | 260 | { |
260 | struct saa7134_fh *fh = priv; | 261 | struct saa7134_dev *dev = file->private_data; |
261 | struct saa7134_dev *dev = fh->dev; | ||
262 | 262 | ||
263 | return videobuf_querybuf(&dev->empress_tsq, b); | 263 | return videobuf_querybuf(&dev->empress_tsq, b); |
264 | } | 264 | } |
265 | 265 | ||
266 | static int empress_qbuf(struct file *file, void *priv, struct v4l2_buffer *b) | 266 | static int empress_qbuf(struct file *file, void *priv, struct v4l2_buffer *b) |
267 | { | 267 | { |
268 | struct saa7134_fh *fh = priv; | 268 | struct saa7134_dev *dev = file->private_data; |
269 | struct saa7134_dev *dev = fh->dev; | ||
270 | 269 | ||
271 | return videobuf_qbuf(&dev->empress_tsq, b); | 270 | return videobuf_qbuf(&dev->empress_tsq, b); |
272 | } | 271 | } |
273 | 272 | ||
274 | static int empress_dqbuf(struct file *file, void *priv, struct v4l2_buffer *b) | 273 | static int empress_dqbuf(struct file *file, void *priv, struct v4l2_buffer *b) |
275 | { | 274 | { |
276 | struct saa7134_fh *fh = priv; | 275 | struct saa7134_dev *dev = file->private_data; |
277 | struct saa7134_dev *dev = fh->dev; | ||
278 | 276 | ||
279 | return videobuf_dqbuf(&dev->empress_tsq, b, | 277 | return videobuf_dqbuf(&dev->empress_tsq, b, |
280 | file->f_flags & O_NONBLOCK); | 278 | file->f_flags & O_NONBLOCK); |
@@ -283,8 +281,7 @@ static int empress_dqbuf(struct file *file, void *priv, struct v4l2_buffer *b) | |||
283 | static int empress_streamon(struct file *file, void *priv, | 281 | static int empress_streamon(struct file *file, void *priv, |
284 | enum v4l2_buf_type type) | 282 | enum v4l2_buf_type type) |
285 | { | 283 | { |
286 | struct saa7134_fh *fh = priv; | 284 | struct saa7134_dev *dev = file->private_data; |
287 | struct saa7134_dev *dev = fh->dev; | ||
288 | 285 | ||
289 | return videobuf_streamon(&dev->empress_tsq); | 286 | return videobuf_streamon(&dev->empress_tsq); |
290 | } | 287 | } |
@@ -292,8 +289,7 @@ static int empress_streamon(struct file *file, void *priv, | |||
292 | static int empress_streamoff(struct file *file, void *priv, | 289 | static int empress_streamoff(struct file *file, void *priv, |
293 | enum v4l2_buf_type type) | 290 | enum v4l2_buf_type type) |
294 | { | 291 | { |
295 | struct saa7134_fh *fh = priv; | 292 | struct saa7134_dev *dev = file->private_data; |
296 | struct saa7134_dev *dev = fh->dev; | ||
297 | 293 | ||
298 | return videobuf_streamoff(&dev->empress_tsq); | 294 | return videobuf_streamoff(&dev->empress_tsq); |
299 | } | 295 | } |
@@ -301,8 +297,7 @@ static int empress_streamoff(struct file *file, void *priv, | |||
301 | static int empress_s_ext_ctrls(struct file *file, void *priv, | 297 | static int empress_s_ext_ctrls(struct file *file, void *priv, |
302 | struct v4l2_ext_controls *ctrls) | 298 | struct v4l2_ext_controls *ctrls) |
303 | { | 299 | { |
304 | struct saa7134_fh *fh = priv; | 300 | struct saa7134_dev *dev = file->private_data; |
305 | struct saa7134_dev *dev = fh->dev; | ||
306 | 301 | ||
307 | /* count == 0 is abused in saa6752hs.c, so that special | 302 | /* count == 0 is abused in saa6752hs.c, so that special |
308 | case is handled here explicitly. */ | 303 | case is handled here explicitly. */ |
@@ -321,8 +316,7 @@ static int empress_s_ext_ctrls(struct file *file, void *priv, | |||
321 | static int empress_g_ext_ctrls(struct file *file, void *priv, | 316 | static int empress_g_ext_ctrls(struct file *file, void *priv, |
322 | struct v4l2_ext_controls *ctrls) | 317 | struct v4l2_ext_controls *ctrls) |
323 | { | 318 | { |
324 | struct saa7134_fh *fh = priv; | 319 | struct saa7134_dev *dev = file->private_data; |
325 | struct saa7134_dev *dev = fh->dev; | ||
326 | 320 | ||
327 | if (ctrls->ctrl_class != V4L2_CTRL_CLASS_MPEG) | 321 | if (ctrls->ctrl_class != V4L2_CTRL_CLASS_MPEG) |
328 | return -EINVAL; | 322 | return -EINVAL; |