Package: libgphoto2-port0
Version: 2.3.1-5
Tags: patch

Hello,
  for about month and half I was not able to 
download pictures from my camera to my Linux box.
Today I finally took a look at what's different 
between 2.2.1 and 2.3.1, and found that some 
hack for some other Microsoft hack (MTP) was added 
to the library, and that it is what is breaking
my Olympus.

Problem is that MTP's attempt to read string
descriptor 0xEE from this camera apparently
crashes its firmware, as this request returns
with -EPIPE, and device is gone from lsusb
or any other listing until it is powercycled.

I guess that lot of other devices will be affected
as well, but as I have only this camera, here
I go.  Definitely better solution would be
just first probe for devices by vendor/device
ID, and after that do class-based searches
(especially these violating USB spec). 
Unfortunately it does not seem doable with current
libgphoto infrastructure.

                        Thanks,
                                Petr Vandrovec

diff -urN libgphoto2-2.3.1/libgphoto2_port/usb/libusb.c 
libgphoto2-2.3.1.fixed/libgphoto2_port/usb/libusb.c
--- libgphoto2-2.3.1/libgphoto2_port/usb/libusb.c       2006-11-25 
06:47:35.000000000 -0800
+++ libgphoto2-2.3.1.fixed/libgphoto2_port/usb/libusb.c 2007-05-13 
02:13:20.000000000 -0700
@@ -671,6 +671,10 @@
        int ret,i,i1,i2;
        usb_dev_handle *devh;
 
+       /* If string descriptor 0xEE is read from Olympus C-3000 ZOOM, it dies. 
*/
+       if (dev->descriptor.idVendor == 0x07B4 && dev->descriptor.idProduct == 
0x0100)
+               return 0;
+
        /* All of them are "vendor specific" device class */
 #if 0
        if ((dev->descriptor.bDeviceClass!=0xff) && 
(dev->descriptor.bDeviceClass!=0))
diff -urN libgphoto2-2.3.1/libgphoto2_port/usb/libusb.c 
libgphoto2-2.3.1.fixed/libgphoto2_port/usb/libusb.c
--- libgphoto2-2.3.1/libgphoto2_port/usb/libusb.c       2006-11-25 
06:47:35.000000000 -0800
+++ libgphoto2-2.3.1.fixed/libgphoto2_port/usb/libusb.c 2007-05-13 
02:13:20.000000000 -0700
@@ -671,6 +671,10 @@
        int ret,i,i1,i2;
        usb_dev_handle *devh;
 
+       /* If string descriptor 0xEE is read from Olympus C-3000 ZOOM, it dies. 
*/
+       if (dev->descriptor.idVendor == 0x07B4 && dev->descriptor.idProduct == 
0x0100)
+               return 0;
+
        /* All of them are "vendor specific" device class */
 #if 0
        if ((dev->descriptor.bDeviceClass!=0xff) && 
(dev->descriptor.bDeviceClass!=0))

Reply via email to