diff options
Diffstat (limited to 'debian/patches/0100-usb3-corrections.patch')
-rw-r--r-- | debian/patches/0100-usb3-corrections.patch | 168 |
1 files changed, 0 insertions, 168 deletions
diff --git a/debian/patches/0100-usb3-corrections.patch b/debian/patches/0100-usb3-corrections.patch deleted file mode 100644 index eb2d5a5..0000000 --- a/debian/patches/0100-usb3-corrections.patch +++ /dev/null @@ -1,168 +0,0 @@ -Description: work around USB3/xhci problems in Linux. - Backport from upstream. -Author: m. allan noah <kitno455 at gmail dot com> -Origin: upstream,http://anonscm.debian.org/cgit/sane/sane-backends.git/commit/?id=014b45d920f1fb630e1a31bb01f1da02ea2a6a87 -Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=738592 -Forwarded: not-needed -Last-Update: 2014-12-26 ---- -This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ -Index: trunk/sanei/sanei_usb.c -=================================================================== ---- trunk.orig/sanei/sanei_usb.c -+++ trunk/sanei/sanei_usb.c -@@ -154,6 +154,7 @@ typedef struct - SANE_Int control_in_ep; - SANE_Int control_out_ep; - SANE_Int interface_nr; -+ SANE_Int alt_setting; - SANE_Int missing; - #ifdef HAVE_LIBUSB - usb_dev_handle *libusb_handle; -@@ -635,6 +636,7 @@ static void usbcall_scan_devices(void) - device.product = pDevDesc->idProduct; - device.method = sanei_usb_method_usbcalls; - device.interface_nr = interface; -+ device.alt_setting = 0; - DBG (4, "%s: found usbcalls device (0x%04x/0x%04x) as device number %s\n", __func__, - pDevDesc->idVendor, pDevDesc->idProduct,device.devname); - store_device(device); -@@ -821,7 +823,7 @@ static void libusb_scan_devices(void) - "scanner (%d/%d)\n", __func__, dev->descriptor.idVendor, - dev->descriptor.idProduct, interface, - dev->descriptor.bDeviceClass, -- dev->config[0].interface[interface].altsetting != 0 -+ dev->config[0].interface[interface].num_altsetting != 0 - ? dev->config[0].interface[interface].altsetting[0]. - bInterfaceClass : -1); - } -@@ -845,6 +847,7 @@ static void libusb_scan_devices(void) - device.product = dev->descriptor.idProduct; - device.method = sanei_usb_method_libusb; - device.interface_nr = interface; -+ device.alt_setting = 0; - DBG (4, - "%s: found libusb device (0x%04x/0x%04x) interface " - "%d at %s\n", __func__, -@@ -991,7 +994,7 @@ static void libusb_scan_devices(void) - "%s: device 0x%04x/0x%04x, interface %d " - "doesn't look like a scanner (%d/%d)\n", __func__, - vid, pid, interface, desc.bDeviceClass, -- (config0->interface[interface].altsetting != 0) -+ (config0->interface[interface].num_altsetting != 0) - ? config0->interface[interface].altsetting[0].bInterfaceClass : -1); - } - -@@ -1018,6 +1021,7 @@ static void libusb_scan_devices(void) - device.product = pid; - device.method = sanei_usb_method_libusb; - device.interface_nr = interface; -+ device.alt_setting = 0; - DBG (4, - "%s: found libusb-1.0 device (0x%04x/0x%04x) interface " - "%d at %s\n", __func__, -@@ -2128,22 +2132,24 @@ sanei_usb_close (SANE_Int dn) - else - #ifdef HAVE_LIBUSB - { --#if 0 -- /* Should only be done in case of a stall */ -- usb_clear_halt (devices[dn].libusb_handle, devices[dn].bulk_in_ep); -- usb_clear_halt (devices[dn].libusb_handle, devices[dn].bulk_out_ep); -- usb_clear_halt (devices[dn].libusb_handle, devices[dn].iso_in_ep); -- /* be careful, we don't know if we are in DATA0 stage now */ -- usb_resetep (devices[dn].libusb_handle, devices[dn].bulk_in_ep); -- usb_resetep (devices[dn].libusb_handle, devices[dn].bulk_out_ep); -- usb_resetep (devices[dn].libusb_handle, devices[dn].iso_in_ep); --#endif /* 0 */ -+ /* This call seems to be required by Linux xhci driver -+ * even though it should be a no-op. Without it, the -+ * host or driver does not reset it's data toggle bit. -+ * We intentionally ignore the return val */ -+ sanei_usb_set_altinterface (dn, devices[dn].alt_setting); -+ - usb_release_interface (devices[dn].libusb_handle, - devices[dn].interface_nr); - usb_close (devices[dn].libusb_handle); - } - #elif defined(HAVE_LIBUSB_1_0) - { -+ /* This call seems to be required by Linux xhci driver -+ * even though it should be a no-op. Without it, the -+ * host or driver does not reset it's data toggle bit. -+ * We intentionally ignore the return val */ -+ sanei_usb_set_altinterface (dn, devices[dn].alt_setting); -+ - libusb_release_interface (devices[dn].lu_handle, - devices[dn].interface_nr); - libusb_close (devices[dn].lu_handle); -@@ -2168,7 +2174,6 @@ sanei_usb_set_timeout (SANE_Int timeout) - SANE_Status - sanei_usb_clear_halt (SANE_Int dn) - { --#ifdef HAVE_LIBUSB - int ret; - - if (dn >= device_number || dn < 0) -@@ -2177,6 +2182,14 @@ sanei_usb_clear_halt (SANE_Int dn) - return SANE_STATUS_INVAL; - } - -+#ifdef HAVE_LIBUSB -+ -+ /* This call seems to be required by Linux xhci driver -+ * even though it should be a no-op. Without it, the -+ * host or driver does not send the clear to the device. -+ * We intentionally ignore the return val */ -+ sanei_usb_set_altinterface (dn, devices[dn].alt_setting); -+ - ret = usb_clear_halt (devices[dn].libusb_handle, devices[dn].bulk_in_ep); - if (ret){ - DBG (1, "sanei_usb_clear_halt: BULK_IN ret=%d\n", ret); -@@ -2189,18 +2202,13 @@ sanei_usb_clear_halt (SANE_Int dn) - return SANE_STATUS_INVAL; - } - -- /* be careful, we don't know if we are in DATA0 stage now -- ret = usb_resetep (devices[dn].libusb_handle, devices[dn].bulk_in_ep); -- ret = usb_resetep (devices[dn].libusb_handle, devices[dn].bulk_out_ep); -- */ - #elif defined(HAVE_LIBUSB_1_0) -- int ret; - -- if (dn >= device_number || dn < 0) -- { -- DBG (1, "sanei_usb_clear_halt: dn >= device number || dn < 0\n"); -- return SANE_STATUS_INVAL; -- } -+ /* This call seems to be required by Linux xhci driver -+ * even though it should be a no-op. Without it, the -+ * host or driver does not send the clear to the device. -+ * We intentionally ignore the return val */ -+ sanei_usb_set_altinterface (dn, devices[dn].alt_setting); - - ret = libusb_clear_halt (devices[dn].lu_handle, devices[dn].bulk_in_ep); - if (ret){ -@@ -3038,6 +3046,8 @@ sanei_usb_set_altinterface (SANE_Int dn, - - DBG (5, "sanei_usb_set_altinterface: alternate = %d\n", alternate); - -+ devices[dn].alt_setting = alternate; -+ - if (devices[dn].method == sanei_usb_method_scanner_driver) - { - #if defined(__linux__) -Index: trunk/ChangeLog -=================================================================== ---- trunk.orig/ChangeLog -+++ trunk/ChangeLog -@@ -1,3 +1,9 @@ -+2014-12-16 m. allan noah <kitno455 at gmail dot com> -+ * sanei/sanei_usb.c: add calls to sanei_usb_set_altinterface in -+ sanei_usb_close and sanei_usb_clear_halt- hopefully work around -+ USB3/xhci problems in Linux. -+ -+ - ****** Release of sane-backends 1.0.24. End of code freeze ****** - - 2013-09-30 m. allan noah <kitno455 at gmail dot com> |