Index: sys/dev/usbmisc/ulpt/ulpt.c =================================================================== RCS file: /home/dcvs/src/sys/dev/usbmisc/ulpt/ulpt.c,v retrieving revision 1.24 diff -u -r1.24 ulpt.c --- sys/dev/usbmisc/ulpt/ulpt.c 6 Nov 2007 07:37:01 -0000 1.24 +++ sys/dev/usbmisc/ulpt/ulpt.c 7 Feb 2008 11:39:41 -0000 @@ -116,6 +116,8 @@ int sc_refcnt; u_char sc_dying; + int vendor; + int product; }; static d_open_t ulptopen; @@ -256,6 +258,8 @@ sc->sc_in = -1; sc->sc_out = -1; + sc->vendor = uaa->vendor; + sc->product = uaa->product; for (i = 0; i < epcount; i++) { ed = usbd_interface2endpoint_descriptor(iface, i); if (ed == NULL) { @@ -365,6 +369,10 @@ ulpt_reset(struct ulpt_softc *sc) { usb_device_request_t req; + int other_fails; + + /* The Brother HL1240 doesn't handle UT_WRITE_CLASS_OTHER */ + other_fails = (sc->vendor == 0x04f9 && sc->product == 0x0006); DPRINTFN(1, ("ulpt_reset\n")); req.bRequest = UR_SOFT_RESET; @@ -379,7 +387,8 @@ * so we try both. */ req.bmRequestType = UT_WRITE_CLASS_OTHER; - if (usbd_do_request(sc->sc_udev, &req, 0)) { /* 1.0 */ + /* Some printers don't handle UT_WRITE_CLASS_OTHER */ + if (other_fails || usbd_do_request(sc->sc_udev, &req, 0)) {/* 1.0 */ req.bmRequestType = UT_WRITE_CLASS_INTERFACE; (void)usbd_do_request(sc->sc_udev, &req, 0); /* 1.1 */ }