public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: thomas schorpp <thomas.schorpp@googlemail.com>
To: linux-media@vger.kernel.org
Cc: Antoine Jacquet <royale@zerezo.com>
Subject: Re: zr364xx: Aiptek DV8800 (neo): 08ca:2062: Fails on subsequent zr364xx_open()
Date: Fri, 12 Feb 2010 15:38:03 +0100	[thread overview]
Message-ID: <4B7567CB.20609@gmail.com> (raw)
In-Reply-To: <4B741C47.1090905@zerezo.com>

[-- Attachment #1: Type: text/plain, Size: 14494 bytes --]

Hi Antoine,

Antoine Jacquet wrote:
> Hi Thomas,
> 
>> Looks like the device does not like to be fed with the (full) init 
>> METHOD2 on every open()...
>> Since the VIDIOC_QUERYCAP worked it should not be the wrong METHOD.
> 
> Someone reported similar behavior recently, and was apparently able to 
> fix the issue by adding more delay between open/close sequences.

No search tags to find it on the list, can You remember device model?

> 
> Could you try the attached patch to see if it solves the issue?

Didn't work, same -110 errors, sorry, no v4l-dvb git here, vdr production machine on 2.6.32.7.

> 
> If not, we can also try to add some mdelay() after each usb_control_msg().

1. Patch with optimized delay below, slow but works, 1st try was delaying subsequent msg 
at open sequence i=6, worked until the last 2 open() before capture start.
>From the windows snoopy log I sent yesterday I can see only 1-2 URBs with relevant delay of ~1s but 
cannot see the sequence point.

What is error -22, can not find it in errno.h?

2. Picture with (640->320) lines alignment error with ekiga+cheese 
*attached*, wether cam is configured internally for 640x480 or 320x240, not affecting.
setting the driver to mode=2 fails with libv4l jpeg decoding errors. I try to correct this.

3. Driver oops on modprobe -r or device firmware crash, 
I need to unplug first or null pointer fault occours (mutex locks), see below

> 
> Regards,
> 
> Antoine
> 

y
tom

--- drivers/media/video/zr364xx.c.orig	2009-12-18 23:27:07.000000000 +0100
+++ drivers/media/video/zr364xx.c	2010-02-12 12:57:54.000000000 +0100
@@ -205,40 +205,41 @@
 struct zr364xx_buffer {
 	/* common v4l buffer stuff -- must be first */
 	struct videobuf_buffer vb;
 	const struct zr364xx_fmt *fmt;
 };
 
 /* function used to send initialisation commands to the camera */
 static int send_control_msg(struct usb_device *udev, u8 request, u16 value,
 			    u16 index, unsigned char *cp, u16 size)
 {
 	int status;
 
 	unsigned char *transfer_buffer = kmalloc(size, GFP_KERNEL);
 	if (!transfer_buffer) {
 		dev_err(&udev->dev, "kmalloc(%d) failed\n", size);
 		return -ENOMEM;
 	}
 
 	memcpy(transfer_buffer, cp, size);
 
+	mdelay(300);
 	status = usb_control_msg(udev,
 				 usb_sndctrlpipe(udev, 0),
 				 request,
 				 USB_DIR_OUT | USB_TYPE_VENDOR |
 				 USB_RECIP_DEVICE, value, index,
 				 transfer_buffer, size, CTRL_TIMEOUT);
 
 	kfree(transfer_buffer);
 
 	if (status < 0)
 		dev_err(&udev->dev,
 			"Failed sending control message, error %d.\n", status);
 
 	return status;
 }
 
 
 /* Control messages sent to the camera to initialize it
  * and launch the capture */
 typedef struct {
@@ -1248,40 +1249,41 @@
 
 
 /* open the camera */
 static int zr364xx_open(struct file *file)
 {
 	struct video_device *vdev = video_devdata(file);
 	struct zr364xx_camera *cam = video_drvdata(file);
 	struct usb_device *udev = cam->udev;
 	int i, err;
 
 	DBG("%s\n", __func__);
 
 	mutex_lock(&cam->open_lock);
 
 	if (cam->users) {
 		err = -EBUSY;
 		goto out;
 	}
 
 	for (i = 0; init[cam->method][i].size != -1; i++) {
+//		if (i == 6) mdelay(1000);
 		err =
 		    send_control_msg(udev, 1, init[cam->method][i].value,
 				     0, init[cam->method][i].bytes,
 				     init[cam->method][i].size);
 		if (err < 0) {
 			dev_err(&cam->udev->dev,
 				"error during open sequence: %d\n", i);
 			goto out;
 		}
 	}
 
 	cam->skip = 2;
 	cam->users++;
 	file->private_data = vdev;
 	cam->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
 	cam->fmt = formats;
 
 	videobuf_queue_vmalloc_init(&cam->vb_vidq, &zr364xx_video_qops,
 				    NULL, &cam->slock,
 				    cam->type,


usb 1-2: new high speed USB device using ehci_hcd and address 7
usb 1-2: New USB device found, idVendor=08ca, idProduct=2062
usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-2: Product: DV 8800
usb 1-2: Manufacturer: AIPTEK
usb 1-2: configuration #1 chosen from 1 choice
zr364xx probing...
zr364xx 1-2:1.0: Zoran 364xx compatible webcam plugged
zr364xx 1-2:1.0: model 08ca:2062 detected
usb 1-2: 320x240 mode selected
zr364xx dev: ffff880039379000, udev ffff8800388d1800 interface ffff880039380a00
zr364xx num endpoints 3
zr364xx board init: ffff880039379000
zr364xx valloc ffff880039379028, idx 0, pdata ffffc900019ef000
zr364xx zr364xx_start_readpipe: start pipe IN x81
zr364xx submitting URB ffff8800393a1900
zr364xx : board initialized
usb 1-2: Zoran 364xx controlling video device 3
zr364xx zr364xx_open
zr364xx zr364xx_open: 0
Zoran 364xx: VIDIOC_QUERYCAP driver=Zoran 364xx, card=DV 8800, bus=1-2, version=0x00000703, capabilities=0x05000001
zr364xx zr364xx_release
zr364xx zr364xx_open
zr364xx zr364xx_open: 0
zr364xx zr364xx_release
zr364xx zr364xx_open
zr364xx zr364xx_open: 0
Zoran 364xx: VIDIOC_QUERYCAP driver=Zoran 364xx, card=DV 8800, bus=1-2, version=0x00000703, capabilities=0x05000001
zr364xx zr364xx_release
zr364xx zr364xx_open
zr364xx zr364xx_open: 0
zr364xx zr364xx_release
zr364xx zr364xx_open
zr364xx zr364xx_open: 0
Zoran 364xx: VIDIOC_QUERYCAP driver=Zoran 364xx, card=DV 8800, bus=1-2, version=0x00000703, capabilities=0x05000001
Zoran 364xx: VIDIOC_ENUMINPUT index=0, name=Zoran 364xx Camera, type=2, audioset=0, tuner=0, std=00000000, status=0
Zoran 364xx: VIDIOC_ENUMINPUT error -22
Zoran 364xx: VIDIOC_ENUM_FMT index=0, type=1, flags=1, pixelformat=JPEG, description='JPG'
Zoran 364xx: VIDIOC_TRY_FMT type=vid-cap
zr364xx zr364xx_vidioc_try_fmt_vid_cap: V4L2_PIX_FMT_JPEG (1) ok!
Zoran 364xx: width=320, height=240, format=JPEG, field=none, bytesperline=640 sizeimage=153600, colorspace=0
zr364xx zr364xx_release
zr364xx zr364xx_open
zr364xx zr364xx_open: 0
zr364xx zr364xx_release
zr364xx zr364xx_open
zr364xx zr364xx_open: 0
Zoran 364xx: VIDIOC_QUERYCAP driver=Zoran 364xx, card=DV 8800, bus=1-2, version=0x00000703, capabilities=0x05000001
zr364xx zr364xx_release
zr364xx zr364xx_open
zr364xx zr364xx_open: 0
zr364xx zr364xx_release
zr364xx zr364xx_open
zr364xx zr364xx_open: 0
Zoran 364xx: VIDIOC_QUERYCAP driver=Zoran 364xx, card=DV 8800, bus=1-2, version=0x00000703, capabilities=0x05000001
zr364xx zr364xx_release
zr364xx zr364xx_open
zr364xx zr364xx_open: 0
Zoran 364xx: VIDIOC_QUERYCAP driver=Zoran 364xx, card=DV 8800, bus=1-2, version=0x00000703, capabilities=0x05000001
Zoran 364xx: VIDIOC_G_FMT type=vid-cap
Zoran 364xx: width=320, height=240, format=JPEG, field=none, bytesperline=640 sizeimage=153600, colorspace=0
Zoran 364xx: VIDIOC_ENUM_FMT index=0, type=1, flags=1, pixelformat=JPEG, description='JPG'
Zoran 364xx: VIDIOC_ENUM_FRAMESIZES error -22
Zoran 364xx: VIDIOC_ENUM_FMT error -22
Zoran 364xx: VIDIOC_QUERYCAP driver=Zoran 364xx, card=DV 8800, bus=1-2, version=0x00000703, capabilities=0x05000001
Zoran 364xx: VIDIOC_G_INPUT value=0
Zoran 364xx: VIDIOC_ENUMINPUT index=0, name=Zoran 364xx Camera, type=2, audioset=0, tuner=0, std=00000000, status=0
Zoran 364xx: VIDIOC_QUERYCTRL id=0x80000000
Zoran 364xx: VIDIOC_QUERYCTRL error -22
Zoran 364xx: VIDIOC_QUERYCAP driver=Zoran 364xx, card=DV 8800, bus=1-2, version=0x00000703, capabilities=0x05000001
Zoran 364xx: VIDIOC_G_PARM type=1
Zoran 364xx: VIDIOC_G_PARM error -22
Zoran 364xx: VIDIOC_S_STD std=000000ff
Zoran 364xx: VIDIOC_S_STD error -22
Zoran 364xx: VIDIOC_ENUMINPUT index=0, name=Zoran 364xx Camera, type=2, audioset=0, tuner=0, std=00000000, status=0
Zoran 364xx: VIDIOC_ENUMINPUT error -22
Zoran 364xx: VIDIOC_S_INPUT value=0
Zoran 364xx: VIDIOC_QUERYBUF error -22
Zoran 364xx: VIDIOC_G_PARM type=1
Zoran 364xx: VIDIOC_G_PARM error -22
Zoran 364xx: VIDIOC_TRY_FMT type=vid-cap
zr364xx zr364xx_vidioc_try_fmt_vid_cap: V4L2_PIX_FMT_JPEG (1) ok!
Zoran 364xx: width=320, height=240, format=JPEG, field=none, bytesperline=640 sizeimage=153600, colorspace=0
Zoran 364xx: VIDIOC_TRY_FMT type=vid-cap
zr364xx zr364xx_vidioc_try_fmt_vid_cap: V4L2_PIX_FMT_JPEG (1) ok!
Zoran 364xx: width=320, height=240, format=JPEG, field=none, bytesperline=640 sizeimage=153600, colorspace=0
Zoran 364xx: VIDIOC_TRY_FMT type=vid-cap
zr364xx zr364xx_vidioc_try_fmt_vid_cap: V4L2_PIX_FMT_JPEG (1) ok!
Zoran 364xx: width=320, height=240, format=JPEG, field=none, bytesperline=640 sizeimage=153600, colorspace=0
Zoran 364xx: VIDIOC_QUERYBUF error -22
Zoran 364xx: VIDIOC_G_PARM type=1
Zoran 364xx: VIDIOC_G_PARM error -22
Zoran 364xx: VIDIOC_REQBUFS count=4, type=vid-cap, memory=mmap
Zoran 364xx: VIDIOC_QUERYBUF 00:00:00.00000000 index=0, type=vid-cap, bytesused=0, flags=0x00000000, field=0, sequence=0, memory=mmap, offset/userptr=0x00000000, length=233472
...
Zoran 364xx: VIDIOC_QUERYBUF 351661:46:32.00475137 index=3, type=vid-cap, bytesused=230400, flags=0x00000001, field=1, sequence=9, memory=mmap, offset/userptr=0x000ab000, length=233472
Zoran 364xx: timecode=00:00:00 type=0, flags=0x00000000, frames=0, userbits=0x00000000
Zoran 364xx: VIDIOC_QUERYBUF error -22
zr364xx zr364xx_release
usb 1-2: USB disconnect, address 7
zr364xx read_pipe_completion, err shutdown
zr364xx 1-2:1.0: Zoran 364xx webcam unplugged
zr364xx stop read pipe
zr364xx vfree ffffc900019ef000


Feb 12 07:35:17 tom1 kernel: usb 1-2: USB disconnect, address 9
Feb 12 07:35:17 tom1 kernel: zr364xx read_pipe_completion, err shutdown
Feb 12 07:35:17 tom1 kernel: BUG: unable to handle kernel NULL pointer dereference at (null)
Feb 12 07:35:17 tom1 kernel: IP: [<ffffffff8160f168>] __mutex_lock_slowpath+0x48/0x140
Feb 12 07:35:17 tom1 kernel: PGD 3cf8f067 PUD 2fd36067 PMD 0 
Feb 12 07:35:17 tom1 kernel: Oops: 0002 [#1] PREEMPT 
Feb 12 07:35:17 tom1 kernel: last sysfs file: /sys/devices/platform/w83627hf.656/fan2_input
Feb 12 07:35:17 tom1 kernel: CPU 0 
Feb 12 07:35:17 tom1 kernel: Modules linked in: zr364xx videobuf_vmalloc isofs ehci_hcd dvb_usb_dibusb_mc dvb_usb_dibusb_common dib3000mc dibx000_common dvb_usb mt2060 radeon ttm drm_kms_helper drm i2c_algo_bit cfbcopyarea cfbimgblt cfbfillrect ppdev lp parport sco bridge stp llc bnep l2cap bluetooth rfkill battery cpufreq_userspace cpufreq_powersave cpufreq_conservative cpufreq_stats cpufreq_ondemand freq_table nfsd nfs lockd sunrpc ipv6 af_packet joydev hid_sunplus fuse w83627hf hwmon_vid usbhid snd_usb_audio hid snd_usb_lib uvcvideo snd_hwdep ves1820 snd_via82xx gameport snd_ac97_codec ac97_bus snd_pcm_oss snd_mixer_oss snd_pcm dvb_ttpci snd_page_alloc snd_mpu401_uart tda10021 snd_seq_dummy snd_seq_oss snd_seq_midi snd_rawmidi snd_seq_midi_event budget_av budget_core saa7146_vv uhci_hcd snd_seq videodev v4l1_compat v4l2_compat_ioctl32 videobuf_dma_sg snd_timer snd_seq_device videobuf_core dvb_core psmouse ohci1394 k8temp saa7146 snd ttpci_eeprom usbcore rtc_cmos evdev proc
essor thermal hwmon button serio_r
Feb 12 07:35:17 tom1 kernel: w pcspkr ieee1394 i2c_viapro sata_promise r8169 mii soundcore i2c_core unix [last unloaded: videobuf_vmalloc]
Feb 12 07:35:17 tom1 kernel: Pid: 1474, comm: khubd Not tainted 2.6.32.7 #4 MS-6702E
Feb 12 07:35:17 tom1 kernel: RIP: 0010:[<ffffffff8160f168>]  [<ffffffff8160f168>] __mutex_lock_slowpath+0x48/0x140
Feb 12 07:35:17 tom1 kernel: RSP: 0018:ffff88003da73b50  EFLAGS: 00010213
Feb 12 07:35:17 tom1 kernel: RAX: ffff88003da73b50 RBX: ffff880001e0a500 RCX: ffff88003ba3fc00
Feb 12 07:35:17 tom1 kernel: RDX: 0000000000000000 RSI: 0000000000000083 RDI: 0000000000000001
Feb 12 07:35:17 tom1 kernel: RBP: ffff88003da73ba0 R08: 0000000000000000 R09: 00000000000043c1
Feb 12 07:35:17 tom1 kernel: R10: 0000000000000000 R11: 0000000000000000 R12: ffff88002c514000
Feb 12 07:35:17 tom1 kernel: R13: ffff88003df95320 R14: ffff880019289800 R15: ffff880001e0a508
Feb 12 07:35:17 tom1 kernel: FS:  00007f0a41208910(0000) GS:ffffffff817e6000(0000) knlGS:0000000000000000
Feb 12 07:35:17 tom1 kernel: CS:  0010 DS: 0018 ES: 0018 CR0: 000000008005003b
Feb 12 07:35:17 tom1 kernel: CR2: 0000000000000000 CR3: 000000003ebde000 CR4: 00000000000006f0
Feb 12 07:35:17 tom1 kernel: DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
Feb 12 07:35:17 tom1 kernel: DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Feb 12 07:35:17 tom1 kernel: Process khubd (pid: 1474, threadinfo ffff88003da72000, task ffff88003df95320)
Feb 12 07:35:17 tom1 kernel: Stack:
Feb 12 07:35:17 tom1 kernel:  ffff880001e0a508 0000000000000000 ffff88003da73b88 ffff88003da73fd8
Feb 12 07:35:17 tom1 kernel: <0> ffff88003da73fd8 ffff880001e0a500 ffff88002c514000 ffff880001e0a400
Feb 12 07:35:17 tom1 kernel: <0> ffff880019289800 ffff880019289890 ffff88003da73bb0 ffffffff8160f08d
Feb 12 07:35:17 tom1 kernel: Call Trace:
Feb 12 07:35:17 tom1 kernel:  [<ffffffff8160f08d>] mutex_lock+0xd/0x10
Feb 12 07:35:17 tom1 kernel:  [<ffffffffa01645b9>] videobuf_mmap_free+0x19/0x40 [videobuf_core]
Feb 12 07:35:17 tom1 kernel:  [<ffffffffa01bb12b>] zr364xx_disconnect+0x2b/0x1a0 [zr364xx]
Feb 12 07:35:17 tom1 kernel:  [<ffffffffa00bc78c>] usb_unbind_interface+0xac/0x100 [usbcore]
Feb 12 07:35:17 tom1 kernel:  [<ffffffff814690f0>] __device_release_driver+0x70/0xd0
Feb 12 07:35:17 tom1 kernel:  [<ffffffff81469268>] device_release_driver+0x28/0x40
Feb 12 07:35:17 tom1 kernel:  [<ffffffff8146856c>] bus_remove_device+0x9c/0xd0
Feb 12 07:35:17 tom1 kernel:  [<ffffffff814666ab>] device_del+0x12b/0x1d0
Feb 12 07:35:17 tom1 kernel:  [<ffffffffa00b9885>] usb_disable_device+0x95/0x110 [usbcore]
Feb 12 07:35:17 tom1 kernel:  [<ffffffffa00b3d23>] usb_disconnect+0xb3/0x140 [usbcore]
Feb 12 07:35:17 tom1 kernel:  [<ffffffffa00b4ce9>] hub_thread+0x339/0x1340 [usbcore]
Feb 12 07:35:17 tom1 kernel:  [<ffffffff81038488>] ? pick_next_task_fair+0xc8/0x110
Feb 12 07:35:17 tom1 kernel:  [<ffffffff8105c3a0>] ? autoremove_wake_function+0x0/0x40
Feb 12 07:35:17 tom1 kernel:  [<ffffffffa00b49b0>] ? hub_thread+0x0/0x1340 [usbcore]
Feb 12 07:35:17 tom1 kernel:  [<ffffffffa00b49b0>] ? hub_thread+0x0/0x1340 [usbcore]
Feb 12 07:35:17 tom1 kernel:  [<ffffffff8105bfae>] kthread+0x8e/0xa0
Feb 12 07:35:17 tom1 kernel:  [<ffffffff8100c14a>] child_rip+0xa/0x20
Feb 12 07:35:17 tom1 kernel:  [<ffffffff8105bf20>] ? kthread+0x0/0xa0
Feb 12 07:35:17 tom1 kernel:  [<ffffffff8100c140>] ? child_rip+0x0/0x20
Feb 12 07:35:17 tom1 kernel: Code: 48 83 ec 28 e8 7a 97 a2 ff bf 01 00 00 00 e8 70 97 a2 ff 48 8b 53 10 48 8d 45 b0 4c 8d 7b 08 48 89 43 10 4c 89 7d b0 48 89 55 b8 <48> 89 02 48 c7 c2 ff ff ff ff 4c 89 6d c0 48 89 d0 87 03 ff c8 
Feb 12 07:35:17 tom1 kernel: RIP  [<ffffffff8160f168>] __mutex_lock_slowpath+0x48/0x140
Feb 12 07:35:17 tom1 kernel:  RSP <ffff88003da73b50>
Feb 12 07:35:17 tom1 kernel: CR2: 0000000000000000
Feb 12 07:35:17 tom1 kernel: ---[ end trace 6a5f37e07ec8365f ]---



[-- Attachment #2: 2010-02-12-095743.jpg --]
[-- Type: image/jpeg, Size: 10108 bytes --]

  reply	other threads:[~2010-02-12 14:38 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-11  9:02 zr364xx: Aiptek DV8800 (neo): 08ca:2062: Fails on subsequent zr364xx_open() thomas schorpp
2010-02-11 15:03 ` Antoine Jacquet
2010-02-12 14:38   ` thomas schorpp [this message]
2010-02-14 22:21     ` Antoine Jacquet

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4B7567CB.20609@gmail.com \
    --to=thomas.schorpp@googlemail.com \
    --cc=linux-media@vger.kernel.org \
    --cc=royale@zerezo.com \
    --cc=thomas.schorpp@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox