patch-2.4.0-test11 linux/drivers/usb/printer.c
Next file: linux/drivers/usb/rio500.c
Previous file: linux/drivers/usb/plusb.h
Back to the patch index
Back to the overall index
- Lines: 75
- Date:
Tue Nov 14 11:34:42 2000
- Orig file:
v2.4.0-test10/linux/drivers/usb/printer.c
- Orig date:
Tue Oct 31 12:42:27 2000
diff -u --recursive --new-file v2.4.0-test10/linux/drivers/usb/printer.c linux/drivers/usb/printer.c
@@ -393,15 +393,18 @@
return count;
}
-static void *usblp_probe(struct usb_device *dev, unsigned int ifnum)
+static void *usblp_probe(struct usb_device *dev, unsigned int ifnum,
+ const struct usb_device_id *id)
{
struct usb_interface_descriptor *interface;
struct usb_endpoint_descriptor *epread, *epwrite;
struct usblp *usblp;
- int minor, i, alts = -1, bidir = 0;
+ int minor, i, bidir = 0;
+ int alts = dev->actconfig->interface[ifnum].act_altsetting;
int length, err;
char *buf;
+ /* If a bidirectional interface exists, use it. */
for (i = 0; i < dev->actconfig->interface[ifnum].num_altsetting; i++) {
interface = &dev->actconfig->interface[ifnum].altsetting[i];
@@ -411,18 +414,13 @@
(interface->bInterfaceProtocol > 1 && interface->bNumEndpoints < 2))
continue;
- if (alts == -1)
- alts = i;
-
- if (!bidir && interface->bInterfaceProtocol > 1) {
+ if (interface->bInterfaceProtocol > 1) {
bidir = 1;
alts = i;
+ break;
}
}
- if (alts == -1)
- return NULL;
-
interface = &dev->actconfig->interface[ifnum].altsetting[alts];
if (usb_set_interface(dev, ifnum, alts))
err("can't set desired altsetting %d on interface %d", alts, ifnum);
@@ -500,7 +498,7 @@
}
#ifdef DEBUG
- usblp_check_status(usblp);
+ usblp_check_status(usblp, 0);
#endif
info("usblp%d: USB %sdirectional printer dev %d if %d alt %d",
@@ -544,12 +542,22 @@
release: usblp_release,
};
+static struct usb_device_id usblp_ids [] = {
+ { bInterfaceClass: 7, bInterfaceSubClass: 1, bInterfaceProtocol: 1},
+ { bInterfaceClass: 7, bInterfaceSubClass: 1, bInterfaceProtocol: 2},
+ { bInterfaceClass: 7, bInterfaceSubClass: 1, bInterfaceProtocol: 3},
+ { } /* Terminating entry */
+};
+
+MODULE_DEVICE_TABLE (usb, usblp_ids);
+
static struct usb_driver usblp_driver = {
name: "usblp",
probe: usblp_probe,
disconnect: usblp_disconnect,
fops: &usblp_fops,
- minor: USBLP_MINOR_BASE
+ minor: USBLP_MINOR_BASE,
+ id_table: usblp_ids,
};
static int __init usblp_init(void)
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)