12d71f9
diff -up cups-1.5.4/backend/usb-libusb.c.usblp-quirks cups-1.5.4/backend/usb-libusb.c
0a1c56e
--- cups-1.5.4/backend/usb-libusb.c.usblp-quirks	2012-07-16 18:16:46.000000000 +0100
0a1c56e
+++ cups-1.5.4/backend/usb-libusb.c	2013-06-25 09:20:42.821779510 +0100
12d71f9
@@ -70,7 +70,7 @@ typedef struct usb_printer_s		/**** USB
12d71f9
 			read_endp,	/* Read endpoint */
12d71f9
 			protocol,	/* Protocol: 1 = Uni-di, 2 = Bi-di. */
12d71f9
 			usblp_attached,	/* "usblp" kernel module attached? */
12d71f9
-			opened_for_job;	/* Set to 1 by print_device() */
12d71f9
+			reset_after_job; /* Set to 1 by print_device() */
12d71f9
   unsigned int		quirks;		/* Quirks flags */
12d71f9
   struct libusb_device_handle *handle;	/* Open handle to device */
12d71f9
 } usb_printer_t;
12d71f9
@@ -122,6 +122,8 @@ struct quirk_printer_struct {
12d71f9
 #define USBLP_QUIRK_USB_INIT	0x2	/* needs vendor USB init string */
12d71f9
 #define USBLP_QUIRK_BAD_CLASS	0x4	/* descriptor uses vendor-specific
12d71f9
 					   Class or SubClass */
12d71f9
+#define USBLP_QUIRK_RESET	0x4000	/* After printing do a reset
12d71f9
+					   for clean-up */
12d71f9
 #define USBLP_QUIRK_NO_REATTACH	0x8000	/* After printing we cannot re-attach
12d71f9
 					   the usblp kernel module */
12d71f9
 
0a1c56e
@@ -141,15 +143,47 @@ static const struct quirk_printer_struct
12d71f9
 	{ 0x0409, 0xf1be, USBLP_QUIRK_BIDIR }, /* NEC Picty800 (HP OEM) */
12d71f9
 	{ 0x0482, 0x0010, USBLP_QUIRK_BIDIR }, /* Kyocera Mita FS 820,
12d71f9
 						  by zut <kernel@zut.de> */
12d71f9
+	{ 0x04a9, 0x10a2, USBLP_QUIRK_BIDIR }, /* Canon, Inc. PIXMA iP4200
12d71f9
+			    Printer, http://www.cups.org/str.php?L4155 */
12d71f9
+	{ 0x04a9, 0x10b6, USBLP_QUIRK_BIDIR }, /* Canon, Inc. PIXMA iP4300
12d71f9
+			    Printer, https://bugs.launchpad.net/bugs/1032385 */
1027b2e
+	{ 0x04a9, 0x1721, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP210
1027b2e
+		      https://bugzilla.redhat.com/show_bug.cgi?id=847923#c53 */
7238440
+	{ 0x04a9, 0x170c, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP500
7238440
+			    Printer, https://bugs.launchpad.net/bugs/1032456 */
7238440
+	{ 0x04a9, 0x1717, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP510
7238440
+			    Printer, https://bugs.launchpad.net/bugs/1050009 */
0a1c56e
+	{ 0x04a9, 0x1730, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP540
0a1c56e
+			    Printer, https://bugzilla.redhat.com/967873 */
7238440
+	{ 0x04a9, 0x173d, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP550
7238440
+			    Printer, http://www.cups.org/str.php?L4155 */
7238440
+	{ 0x04a9, 0x173e, USBLP_QUIRK_BIDIR }, /* Canon, Inc. MP560
7238440
+			    Printer, http://www.cups.org/str.php?L4155 */
7238440
+	{ 0x04f9, 0x001a, USBLP_QUIRK_NO_REATTACH }, /* Brother Industries, Ltd
7238440
+						  HL-1430 Laser Printer,
7238440
+				     https://bugs.launchpad.net/bugs/1038695 */
12d71f9
 	{ 0x04f9, 0x000d, USBLP_QUIRK_BIDIR |
12d71f9
 			  USBLP_QUIRK_NO_REATTACH }, /* Brother Industries, Ltd
7238440
-						  HL-1440 Laser Printer */
7238440
+						  HL-1440 Laser Printer,
7238440
+				     https://bugs.launchpad.net/bugs/1000253 */
7238440
+	{ 0x06bc, 0x000b, USBLP_QUIRK_NO_REATTACH }, /* Oki Data Corp.
7238440
+						  Okipage 14ex Printer,
7238440
+				     https://bugs.launchpad.net/bugs/872483 */
7238440
+	{ 0x06bc, 0x01c7, USBLP_QUIRK_NO_REATTACH }, /* Oki Data Corp. B410d,
7238440
+				     https://bugs.launchpad.net/bugs/872483 */
12d71f9
 	{ 0x04b8, 0x0202, USBLP_QUIRK_BAD_CLASS }, /* Seiko Epson Receipt
12d71f9
 						      Printer M129C */
12d71f9
 	{ 0x067b, 0x2305, USBLP_QUIRK_BIDIR |
12d71f9
-			  USBLP_QUIRK_NO_REATTACH },
12d71f9
+			  USBLP_QUIRK_NO_REATTACH |
12d71f9
+	                  USBLP_QUIRK_RESET },
2645dcc
+	{ 0x0924, 0x3ce9, USBLP_QUIRK_NO_REATTACH }, /* Xerox Phaser 3124
2645dcc
+			  https://bugzilla.redhat.com/show_bug.cgi?id=867392 */
12d71f9
 	/* Prolific Technology, Inc. PL2305 Parallel Port
7238440
-	   (USB -> Parallel adapter) */
7238440
+	   (USB -> Parallel adapter), https://bugs.launchpad.net/bugs/987485 */
7238440
+	{ 0x04e8, 0x0000, USBLP_QUIRK_RESET }, /* All Samsung devices,
7238440
+				     https://bugs.launchpad.net/bugs/1032456 */
7238440
+	{ 0x0a5f, 0x0000, USBLP_QUIRK_BIDIR }, /* All Zebra devices,
7238440
+				     https://bugs.launchpad.net/bugs/1001028 */
12d71f9
 	{ 0, 0 }
12d71f9
 };
12d71f9
 
0a1c56e
@@ -256,7 +290,12 @@ print_device(const char *uri,		/* I - De
12d71f9
   }
12d71f9
 
12d71f9
   g.print_fd = print_fd;
12d71f9
-  g.printer->opened_for_job = 1;
12d71f9
+
12d71f9
+ /*
12d71f9
+  * Some devices need a reset after finishing a job, these devices are
12d71f9
+  * marked with the USBLP_QUIRK_RESET quirk.
12d71f9
+  */
12d71f9
+  g.printer->reset_after_job = (g.printer->quirks & USBLP_QUIRK_RESET ? 1 : 0);
12d71f9
 
12d71f9
  /*
12d71f9
   * If we are printing data from a print driver on stdin, ignore SIGTERM
0a1c56e
@@ -772,7 +811,7 @@ close_device(usb_printer_t *printer)	/*
12d71f9
     * Reset the device to clean up after the job
12d71f9
     */
12d71f9
 
12d71f9
-    if (printer->opened_for_job == 1)
12d71f9
+    if (printer->reset_after_job == 1)
12d71f9
     {
12d71f9
       if ((errcode = libusb_reset_device(printer->handle)) < 0)
12d71f9
 	fprintf(stderr,
0a1c56e
@@ -1288,7 +1327,7 @@ open_device(usb_printer_t *printer,	/* I
12d71f9
   }
12d71f9
 
12d71f9
   printer->usblp_attached = 0;
12d71f9
-  printer->opened_for_job = 0;
12d71f9
+  printer->reset_after_job = 0;
12d71f9
 
12d71f9
   if (verbose)
12d71f9
     fputs("STATE: +connecting-to-device\n", stderr);
0a1c56e
@@ -1586,7 +1625,8 @@ static unsigned int quirks(int vendor, i
12d71f9
   for (i = 0; quirk_printers[i].vendorId; i++)
12d71f9
   {
12d71f9
     if (vendor == quirk_printers[i].vendorId &&
12d71f9
-	product == quirk_printers[i].productId)
12d71f9
+	(quirk_printers[i].productId == 0x0000 ||
12d71f9
+	 product == quirk_printers[i].productId))
12d71f9
       return quirk_printers[i].quirks;
12d71f9
   }
12d71f9
   return 0;