diff --git a/cups-usblp-quirks.patch b/cups-usblp-quirks.patch new file mode 100644 index 0000000..135f939 --- /dev/null +++ b/cups-usblp-quirks.patch @@ -0,0 +1,86 @@ +diff -up cups-1.5.4/backend/usb-libusb.c.usblp-quirks cups-1.5.4/backend/usb-libusb.c +--- cups-1.5.4/backend/usb-libusb.c.usblp-quirks 2012-07-16 19:16:46.000000000 +0200 ++++ cups-1.5.4/backend/usb-libusb.c 2012-08-23 13:37:28.309013482 +0200 +@@ -70,7 +70,7 @@ typedef struct usb_printer_s /**** USB + 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 @@ struct quirk_printer_struct { + #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 */ + +@@ -141,15 +143,21 @@ static const struct quirk_printer_struct + { 0x0409, 0xf1be, USBLP_QUIRK_BIDIR }, /* NEC Picty800 (HP OEM) */ + { 0x0482, 0x0010, USBLP_QUIRK_BIDIR }, /* Kyocera Mita FS 820, + by zut */ ++ { 0x04a9, 0x10a2, USBLP_QUIRK_BIDIR }, /* Canon, Inc. PIXMA iP4200 ++ Printer, http://www.cups.org/str.php?L4155 */ ++ { 0x04a9, 0x10b6, USBLP_QUIRK_BIDIR }, /* Canon, Inc. PIXMA iP4300 ++ Printer, https://bugs.launchpad.net/bugs/1032385 */ + { 0x04f9, 0x000d, USBLP_QUIRK_BIDIR | + USBLP_QUIRK_NO_REATTACH }, /* Brother Industries, Ltd + HL-1440 Laser Printer */ + { 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 +264,12 @@ print_device(const char *uri, /* I - De + } + + 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 +786,7 @@ close_device(usb_printer_t *printer) /* + * 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 +1302,7 @@ open_device(usb_printer_t *printer, /* I + } + + 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 +1600,8 @@ static unsigned int quirks(int vendor, i + for (i = 0; quirk_printers[i].vendorId; i++) + { + if (vendor == quirk_printers[i].vendorId && +- product == quirk_printers[i].productId) ++ (quirk_printers[i].productId == 0x0000 || ++ product == quirk_printers[i].productId)) + return quirk_printers[i].quirks; + } + return 0; diff --git a/cups.spec b/cups.spec index a97c281..b275688 100644 --- a/cups.spec +++ b/cups.spec @@ -12,7 +12,7 @@ Summary: Common Unix Printing System Name: cups Version: 1.5.4 -Release: 2%{?dist} +Release: 3%{?dist} License: GPLv2 Group: System Environment/Daemons Source: http://ftp.easysw.com/pub/cups/%{version}/cups-%{version}-source.tar.bz2 @@ -55,6 +55,7 @@ Patch20: cups-filter-debug.patch Patch21: cups-uri-compat.patch Patch22: cups-cups-get-classes.patch Patch23: cups-str3382.patch +Patch24: cups-usblp-quirks.patch Patch25: cups-0755.patch Patch26: cups-snmp-quirks.patch Patch27: cups-hp-deviceid-oid.patch @@ -261,6 +262,10 @@ Sends IPP requests to the specified URI and tests and/or displays the results. %patch22 -p1 -b .cups-get-classes # Fix temporary filename creation. %patch23 -p1 -b .str3382 +# Problem is a port reset which is done by the new USB backend of CUPS 1.5.4 and 1.6.x to clean up after the job. +# This patch adds a quirk handler for this reset so that it will not be done for all printers. +#(bug #847923, STR #4155) +%patch24 -p1 -b .usblp-quirks # Use mode 0755 for binaries and libraries where appropriate. %patch25 -p1 -b .0755 # Handle SNMP supply level quirks (bug #581825). @@ -648,6 +653,9 @@ rm -f %{cups_serverbin}/backend/smb %{_mandir}/man1/ipptool.1.gz %changelog +* Thu Aug 23 2012 Jiri Popelka 1:1.5.4-3 +- quirk handler for port reset done by new USB backend (bug #847923, STR #4155) + * Tue Aug 21 2012 Jiri Popelka 1:1.5.4-2 - use new systemd-rpm macros (#850074)