aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorDmitri Belimov <d.belimov@gmail.com>2008-06-10 13:19:31 -0400
committerMauro Carvalho Chehab <mchehab@infradead.org>2008-06-26 14:58:45 -0400
commita14fe9605bfdfe360b97acc9ef912779eb860507 (patch)
tree36358131bade4c494a0839e1c6364de3889bc678 /drivers/media
parenta8a1f8cc0cae07c209f13857adbdd4b87b36cdde (diff)
V4L/DVB (8020): Fix callbacks functions of saa7134_empress
If I try v4l2-ctl --all -d /dev/video1 or v4l2-ctl --streamon -d /dev/video1 modules crashed: *pde = 00000000 Modules linked in: ac battery loop saa7134_empress(F) saa6752hs(F) tuner_simple(F) tuner_types(F) tea5767(F) tda9887(F) tda8290(F) tea5761(F) tuner(F) snd_cmipci snd_pcm snd_page_alloc snd_opl3_lib saa7134(F) snd_mpu401 parport_pc parport snd_timer snd_hwdep snd_mpu401_uart floppy rtc psmouse videodev(F) v4l1_compat(F) compat_ioctl32(F) v4l2_common(F) videobuf_dma_sg(F) videobuf_core(F) snd_rawmidi snd_seq_device via_ircc pcspkr snd ir_kbd_i2c(F) irda soundcore ir_common(F) crc_ccitt tveeprom(F) i2c_viapro i2c_core button via_agp agpgart evdev ext3 jbd mbcache ide_cd_mod cdrom ide_disk 8139cp via82cxxx ide_core 8139too mii ehci_hcd uhci_hcd usbcore thermal processor fan EIP is at __mutex_lock_slowpath+0x29/0x7b DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068 Process v4l2-ctl (pid: 2742, ti=ced7e000 task=cf325260 task.ti=ced7e000) d08e5411 00000000 ced7fed4 00000000 d0975acb 40045612 cfa86ee0 ffffffcd cf2b7000 ced7febc c03858d6 00000019 00000292 d089e4ec cf37b2a0 d089e4a0 Call Trace: [<c028b52b>] mutex_lock+0xa/0xb [<d08e5411>] videobuf_streamon+0xf/0x9a [videobuf_core] [<d0975acb>] __video_do_ioctl+0x136a/0x2d68 [videodev] [<d088f789>] task_end_request+0x40/0x51 [ide_core] [<d088c4aa>] ide_intr+0x187/0x192 [ide_core] [<c016a551>] mntput_no_expire+0x11/0x64 [<c0160b1c>] path_walk+0x90/0x98 [<d0977738>] video_ioctl2+0x173/0x239 [videodev] [<c0140936>] filemap_fault+0x202/0x370 [<c014930a>] __do_fault+0x2c3/0x2fe [<c014ab03>] handle_mm_fault+0x22a/0x49f [<c0162737>] vfs_ioctl+0x47/0x5d [<c0162992>] do_vfs_ioctl+0x245/0x258 [<c01629e6>] sys_ioctl+0x41/0x5b [<c01036a6>] sysenter_past_esp+0x5f/0x85 ======================= After this fix all of that commands works without problem: v4l2-ctl --all -d /dev/video1 Driver Info: Driver name : saa7134 Card type : Beholder BeholdTV M6 Extra Bus info : PCI:0000:00:0d.0 Driver version: 526 Capabilities : 0x05000001 Video Capture Read/Write Streaming Format Video Capture: Width/Height : 720/576 Pixel Format : MPEG Field : Any Bytes per Line: 0 Size Image : 58656 Colorspace : Unknown (00000000) Video input : 0 (CCIR656) Video Standard = 0x000000ff PAL-B/B1/G/H/I/D/D1/K P.S. data from /dev/video1 is not correct :(( . Signed-off-by: Beholder Intl. Ltd. Dmitry Belimov <d.belimov@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/video/saa7134/saa7134-empress.c30
1 files changed, 10 insertions, 20 deletions
diff --git a/drivers/media/video/saa7134/saa7134-empress.c b/drivers/media/video/saa7134/saa7134-empress.c
index 81431ee41842..94b2585bdf5b 100644
--- a/drivers/media/video/saa7134/saa7134-empress.c
+++ b/drivers/media/video/saa7134/saa7134-empress.c
@@ -218,8 +218,7 @@ static int empress_enum_fmt_cap(struct file *file, void *priv,
218static int empress_g_fmt_cap(struct file *file, void *priv, 218static int empress_g_fmt_cap(struct file *file, void *priv,
219 struct v4l2_format *f) 219 struct v4l2_format *f)
220{ 220{
221 struct saa7134_fh *fh = priv; 221 struct saa7134_dev *dev = file->private_data;
222 struct saa7134_dev *dev = fh->dev;
223 222
224 saa7134_i2c_call_clients(dev, VIDIOC_G_FMT, f); 223 saa7134_i2c_call_clients(dev, VIDIOC_G_FMT, f);
225 224
@@ -232,8 +231,7 @@ static int empress_g_fmt_cap(struct file *file, void *priv,
232static int empress_s_fmt_cap(struct file *file, void *priv, 231static int empress_s_fmt_cap(struct file *file, void *priv,
233 struct v4l2_format *f) 232 struct v4l2_format *f)
234{ 233{
235 struct saa7134_fh *fh = priv; 234 struct saa7134_dev *dev = file->private_data;
236 struct saa7134_dev *dev = fh->dev;
237 235
238 saa7134_i2c_call_clients(dev, VIDIOC_S_FMT, f); 236 saa7134_i2c_call_clients(dev, VIDIOC_S_FMT, f);
239 237
@@ -247,8 +245,7 @@ static int empress_s_fmt_cap(struct file *file, void *priv,
247static int empress_reqbufs(struct file *file, void *priv, 245static int empress_reqbufs(struct file *file, void *priv,
248 struct v4l2_requestbuffers *p) 246 struct v4l2_requestbuffers *p)
249{ 247{
250 struct saa7134_fh *fh = priv; 248 struct saa7134_dev *dev = file->private_data;
251 struct saa7134_dev *dev = fh->dev;
252 249
253 return videobuf_reqbufs(&dev->empress_tsq, p); 250 return videobuf_reqbufs(&dev->empress_tsq, p);
254} 251}
@@ -256,24 +253,21 @@ static int empress_reqbufs(struct file *file, void *priv,
256static int empress_querybuf(struct file *file, void *priv, 253static int empress_querybuf(struct file *file, void *priv,
257 struct v4l2_buffer *b) 254 struct v4l2_buffer *b)
258{ 255{
259 struct saa7134_fh *fh = priv; 256 struct saa7134_dev *dev = file->private_data;
260 struct saa7134_dev *dev = fh->dev;
261 257
262 return videobuf_querybuf(&dev->empress_tsq, b); 258 return videobuf_querybuf(&dev->empress_tsq, b);
263} 259}
264 260
265static int empress_qbuf(struct file *file, void *priv, struct v4l2_buffer *b) 261static int empress_qbuf(struct file *file, void *priv, struct v4l2_buffer *b)
266{ 262{
267 struct saa7134_fh *fh = priv; 263 struct saa7134_dev *dev = file->private_data;
268 struct saa7134_dev *dev = fh->dev;
269 264
270 return videobuf_qbuf(&dev->empress_tsq, b); 265 return videobuf_qbuf(&dev->empress_tsq, b);
271} 266}
272 267
273static int empress_dqbuf(struct file *file, void *priv, struct v4l2_buffer *b) 268static int empress_dqbuf(struct file *file, void *priv, struct v4l2_buffer *b)
274{ 269{
275 struct saa7134_fh *fh = priv; 270 struct saa7134_dev *dev = file->private_data;
276 struct saa7134_dev *dev = fh->dev;
277 271
278 return videobuf_dqbuf(&dev->empress_tsq, b, 272 return videobuf_dqbuf(&dev->empress_tsq, b,
279 file->f_flags & O_NONBLOCK); 273 file->f_flags & O_NONBLOCK);
@@ -282,8 +276,7 @@ static int empress_dqbuf(struct file *file, void *priv, struct v4l2_buffer *b)
282static int empress_streamon(struct file *file, void *priv, 276static int empress_streamon(struct file *file, void *priv,
283 enum v4l2_buf_type type) 277 enum v4l2_buf_type type)
284{ 278{
285 struct saa7134_fh *fh = priv; 279 struct saa7134_dev *dev = file->private_data;
286 struct saa7134_dev *dev = fh->dev;
287 280
288 return videobuf_streamon(&dev->empress_tsq); 281 return videobuf_streamon(&dev->empress_tsq);
289} 282}
@@ -291,8 +284,7 @@ static int empress_streamon(struct file *file, void *priv,
291static int empress_streamoff(struct file *file, void *priv, 284static int empress_streamoff(struct file *file, void *priv,
292 enum v4l2_buf_type type) 285 enum v4l2_buf_type type)
293{ 286{
294 struct saa7134_fh *fh = priv; 287 struct saa7134_dev *dev = file->private_data;
295 struct saa7134_dev *dev = fh->dev;
296 288
297 return videobuf_streamoff(&dev->empress_tsq); 289 return videobuf_streamoff(&dev->empress_tsq);
298} 290}
@@ -300,8 +292,7 @@ static int empress_streamoff(struct file *file, void *priv,
300static int empress_s_ext_ctrls(struct file *file, void *priv, 292static int empress_s_ext_ctrls(struct file *file, void *priv,
301 struct v4l2_ext_controls *ctrls) 293 struct v4l2_ext_controls *ctrls)
302{ 294{
303 struct saa7134_fh *fh = priv; 295 struct saa7134_dev *dev = file->private_data;
304 struct saa7134_dev *dev = fh->dev;
305 296
306 /* count == 0 is abused in saa6752hs.c, so that special 297 /* count == 0 is abused in saa6752hs.c, so that special
307 case is handled here explicitly. */ 298 case is handled here explicitly. */
@@ -320,8 +311,7 @@ static int empress_s_ext_ctrls(struct file *file, void *priv,
320static int empress_g_ext_ctrls(struct file *file, void *priv, 311static int empress_g_ext_ctrls(struct file *file, void *priv,
321 struct v4l2_ext_controls *ctrls) 312 struct v4l2_ext_controls *ctrls)
322{ 313{
323 struct saa7134_fh *fh = priv; 314 struct saa7134_dev *dev = file->private_data;
324 struct saa7134_dev *dev = fh->dev;
325 315
326 if (ctrls->ctrl_class != V4L2_CTRL_CLASS_MPEG) 316 if (ctrls->ctrl_class != V4L2_CTRL_CLASS_MPEG)
327 return -EINVAL; 317 return -EINVAL;