webcamd and cameras with Micron (MT9M0x1 and MT9T0x1) chips

Tiemen maillist at diode.be
Sun Apr 25 13:21:03 UTC 2010


Quoting Hans Petter Selasky <hselasky at c2i.net>:
> On Saturday 24 April 2010 21:18:09 maillist at diode.be wrote:
>> Quoting Hans Petter Selasky <hselasky at c2i.net>:
>> > Hi,
>> >
>> >> For both Micron cameras, #webcamd -B just gives `Cannot find USB
>> >> device'.
>> >
>> > This usually happens when the webcamd is not listed.
>> >
>> >> dmesg output for the Mightex camera (MT9M001 chip):
>> >> ugen3.2: <Mightex> at usbus3
>> >>
>> >> and usbconfig -d ugen3.2 dump_device_desc gives:
>> >> ugen3.2: <USB-MT9M001-2 Mightex> at usbus3, cfg=0 md=HOST spd=HIGH
>> >> (480Mbps) pwr=ON
>> >>
>> >>     bLength = 0x0012
>> >>     bDescriptorType = 0x0001
>> >>     bcdUSB = 0x0200
>> >>     bDeviceClass = 0x0000
>> >>     bDeviceSubClass = 0x0000
>> >>     bDeviceProtocol = 0x0000
>> >>     bMaxPacketSize0 = 0x0040
>> >>     idVendor = 0x04b4
>> >>     idProduct = 0x0228
>> >>     bcdDevice = 0x0000
>> >>     iManufacturer = 0x0001  <Mightex>
>> >>     iProduct = 0x0002  <USB-MT9M001-2>
>> >>     iSerialNumber = 0x0000  <no string>
>> >>     bNumConfigurations = 0x0001
>> >>
>> >>
>> >
>> > Hi,
>> >
>> > I did a little bit of grepping, and I think you need to patch the
>> > following file to get your webcam working:
>> >
>> > v4l-dvb/linux/drivers/media/video/gspca/sn9c20x.c
>> >
>> > You can use this entry as an example:
>> >
>> > {USB_DEVICE(0x0c45, 0x6240), SN9C20X(MT9M001, 0x5d, 0)},
>> >
>> > The iProduct dump indicates this is the right place to hack for the
>> > MT9M001 one :-)
>> >
>> > --HPS
>>
>> I added
>> {USB_DEVICE(0x04b4, 0x0228), SN9C20X(MT9M001, 0x5d, 0)},
>> to the list, with 0x5d as i2c address as the other two MT9M001 entries
>> have it too. After re-making ulinux and using the new webcamd from
>> that directory, I get
>>
>> Attached ugen3.2[0] to cuse init 0
>> Cannot find USB device
>>
>
> After you add that USB_DEVICE() entry, the following code should be called.
>
> Try adding
>
> CFLAGS+= -g
>
> in the Makefile.
>
> Then run webcamd via gdb.
>
> In gdb type:
>
> break gspca_dev_probe
> run
>
> at first break:
>
> next
>
> If you don't get the break, you're running an older version of webcamd. Try
> svn up! You might have to do:
>
> make fetch_clean
> make fetch
>
> cd patches/
> ./do_patch.sh
>
> After svn up.
>
> /* -- device connect -- */
> static int sd_probe(struct usb_interface *intf,
>                     const struct usb_device_id *id)
> {
>         return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd),
>                                 THIS_MODULE);
> }
>
> --HPS
>

Thanks. I updated ports and svn upped the webcamd code once more, and  
now I have pwcview working again. Below is the output of gdb with the  
MT9M001 camera, with the USB_DEVICE() added to sn9c20x.c

Maybe one more thing: I checked the hardware, and the bridge of (both)  
cameras is a CY7C68013(A) (a.k.a. Cypress FX2) microprocessor, not a  
SN9C20x. Its behaviour will depend on the firmware, so this may become  
difficult to get to work, and I guess this has more to do with v4l  
than with freebsd-usb. Yet, I noticed that this bridge is sometimes  
integrated in webcams functioning as an OV511 replacement:
http://ovcam.org/ov511/cameras.html
I will try to find out more about what `language' it speaks in my  
specific cameras.

------------------------
testdoos# gdb ./webcamd
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-marcel-freebsd"...
(gdb) break gspca_dev_probe
Breakpoint 1 at 0x806e4a9: file  
/usr/home/tc/ulinux/v4l-dvb/linux/drivers/media/video/gspca/gspca.c,  
line 2290.
(gdb) run
Starting program: /usr/home/tc/ulinux/webcamd
[New LWP 100114]
[New Thread 28401140 (LWP 100114)]
[New Thread 28419140 (LWP 100102)]
[New Thread 28418ec0 (LWP 100115)]
[New Thread 28418d80 (LWP 100132)]
Attached ugen3.2[0] to cuse unit 0
[New Thread 28418c40 (LWP 100139)]
[Switching to Thread 28401140 (LWP 100114)]

Breakpoint 1, gspca_dev_probe (intf=0x285b82b4, id=0x813c020,
     sd_desc=0x8139be0, dev_size=1808, module=0x0)
     at  
/usr/home/tc/ulinux/v4l-dvb/linux/drivers/media/video/gspca/gspca.c:2290
2290            struct usb_device *dev = interface_to_usbdev(intf);
(gdb) next
2293            PDEBUG(D_PROBE, "probing %04x:%04x", id->idVendor,  
id->idProduct);
(gdb) c
Continuing.

Program received signal SIGHUP, Hangup.
[Switching to Thread 28418c40 (LWP 100139)]
0x28288f3f in poll () from /lib/libc.so.7
(gdb) c
Continuing.
[Thread 28418c40 (LWP 100139) exited]
[New Thread 28418c40 (LWP 100139)]
Cannot find USB device

Program exited with code 01.
(gdb) quit
---------------------------------


More information about the freebsd-usb mailing list