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;

Reply via email to