Date: Friday, August 10, 2012 @ 09:30:13 Author: andyrtr Revision: 165094
upgpkg: cups 1.6.1-3 add fix for some printers failing with usb resets FS#30965; add note about keeping usblp module loaded Added: cups/trunk/usb-backend-reset-after-job-only-for-specific-devices.patch Modified: cups/trunk/PKGBUILD cups/trunk/cups.install -------------------------------------------------------------+ PKGBUILD | 10 - cups.install | 5 usb-backend-reset-after-job-only-for-specific-devices.patch | 74 ++++++++++ 3 files changed, 86 insertions(+), 3 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2012-08-10 09:13:54 UTC (rev 165093) +++ PKGBUILD 2012-08-10 13:30:13 UTC (rev 165094) @@ -4,7 +4,7 @@ pkgbase="cups" pkgname=('libcups' 'cups') pkgver=1.6.1 -pkgrel=2 +pkgrel=3 arch=('i686' 'x86_64') license=('GPL') url="http://www.cups.org/" @@ -18,7 +18,8 @@ cups cups.logrotate cups.pam cupsd-conf-remove-obsolete-browse-directives.patch avahi-missing-in-conditionals.patch - recognize-remote-cups-queue-via-dnssd-uri.patch) + recognize-remote-cups-queue-via-dnssd-uri.patch + usb-backend-reset-after-job-only-for-specific-devices.patch) #options=('!emptydirs') md5sums=('87ade07e3d1efd03c9c3add949cf9c00' '9b8467a1e51d360096b70e2c3c081e6c' @@ -30,7 +31,8 @@ '96f82c38f3f540b53f3e5144900acf17' '6bef262b5081051e88cd2ae94fed1867' '9c91b1319f4b20dc323986cb4abbe806' - 'dcef8dd5614461166cada8a706eebb49') + 'dcef8dd5614461166cada8a706eebb49' + '0779ef8ba1d724ebb3b9bf360deba52b') build() { cd ${srcdir}/${pkgbase}-${pkgver} @@ -54,6 +56,8 @@ patch -Np1 -i ${srcdir}/avahi-missing-in-conditionals.patch # http://www.cups.org/str.php?L4158 - DNS-SD-based print queues pointing to CUPS server are not considered remote printers with driver on server patch -Np1 -i ${srcdir}/recognize-remote-cups-queue-via-dnssd-uri.patch + # http://cups.org/str.php?L4155 / https://bugs.archlinux.org/task/30965 + patch -Np0 -i ${srcdir}/usb-backend-reset-after-job-only-for-specific-devices.patch # Rebuild configure script for not zipping man-pages. aclocal -I config-scripts Modified: cups.install =================================================================== --- cups.install 2012-08-10 09:13:54 UTC (rev 165093) +++ cups.install 2012-08-10 13:30:13 UTC (rev 165094) @@ -24,6 +24,11 @@ echo "* check your config with cupsd -t" echo " and fix all Browsing related settings" fi + if [ "`vercmp $2 1.6.1-3`" -lt 0 ]; then + # important upgrade notice + echo "> It's now safe to load usblp kernel module." + echo "> There's no more need to blacklist it." + fi } post_remove() { Added: usb-backend-reset-after-job-only-for-specific-devices.patch =================================================================== --- usb-backend-reset-after-job-only-for-specific-devices.patch (rev 0) +++ usb-backend-reset-after-job-only-for-specific-devices.patch 2012-08-10 13:30:13 UTC (rev 165094) @@ -0,0 +1,74 @@ +--- backend/usb-libusb.c.orig 2012-07-16 19:10:55.000000000 +0200 ++++ backend/usb-libusb.c 2012-08-06 11:01:58.034150159 +0200 +@@ -70,7 +70,7 @@ + read_endp, /* Read endpoint */ + protocol, /* Protocol: 1 = Uni-di, 2 = Bi-di. */ + usblp_attached, /* "usblp" kernel module attached? */ +- opened_for_job; /* Set to 1 by print_device() */ ++ reset_after_job; /* Set to 1 by print_device() */ + unsigned int quirks; /* Quirks flags */ + struct libusb_device_handle *handle; /* Open handle to device */ + } usb_printer_t; +@@ -122,6 +122,8 @@ + #define USBLP_QUIRK_USB_INIT 0x2 /* needs vendor USB init string */ + #define USBLP_QUIRK_BAD_CLASS 0x4 /* descriptor uses vendor-specific + Class or SubClass */ ++#define USBLP_QUIRK_RESET 0x4000 /* After printing do a reset ++ for clean-up */ + #define USBLP_QUIRK_NO_REATTACH 0x8000 /* After printing we cannot re-attach + the usblp kernel module */ + +@@ -147,9 +149,11 @@ + { 0x04b8, 0x0202, USBLP_QUIRK_BAD_CLASS }, /* Seiko Epson Receipt + Printer M129C */ + { 0x067b, 0x2305, USBLP_QUIRK_BIDIR | +- USBLP_QUIRK_NO_REATTACH }, ++ USBLP_QUIRK_NO_REATTACH | ++ USBLP_QUIRK_RESET }, + /* Prolific Technology, Inc. PL2305 Parallel Port + (USB -> Parallel adapter) */ ++ { 0x04e8, 0x0000, USBLP_QUIRK_RESET }, /* All Samsung devices */ + { 0, 0 } + }; + +@@ -256,7 +260,12 @@ + } + + g.print_fd = print_fd; +- g.printer->opened_for_job = 1; ++ ++ /* ++ * Some devices need a reset after finishing a job, these devices are ++ * marked with the USBLP_QUIRK_RESET quirk. ++ */ ++ g.printer->reset_after_job = (g.printer->quirks & USBLP_QUIRK_RESET ? 1 : 0); + + /* + * If we are printing data from a print driver on stdin, ignore SIGTERM +@@ -772,7 +781,7 @@ + * Reset the device to clean up after the job + */ + +- if (printer->opened_for_job == 1) ++ if (printer->reset_after_job == 1) + { + if ((errcode = libusb_reset_device(printer->handle)) < 0) + fprintf(stderr, +@@ -1288,7 +1297,7 @@ + } + + printer->usblp_attached = 0; +- printer->opened_for_job = 0; ++ printer->reset_after_job = 0; + + if (verbose) + fputs("STATE: +connecting-to-device\n", stderr); +@@ -1586,7 +1595,7 @@ + for (i = 0; quirk_printers[i].vendorId; i++) + { + if (vendor == quirk_printers[i].vendorId && +- product == quirk_printers[i].productId) ++ (product == 0x0000 || product == quirk_printers[i].productId)) + return quirk_printers[i].quirks; + } + return 0;