Index: uvisor.c =================================================================== RCS file: /cvs/src/sys/dev/usb/uvisor.c,v retrieving revision 1.27 diff -u -p -r1.27 uvisor.c --- uvisor.c 23 Jun 2006 06:27:12 -0000 1.27 +++ uvisor.c 22 Nov 2006 12:23:11 -0000 @@ -140,6 +140,7 @@ struct uvisor_softc { * added sc_vendor for later interrogation in failed initialisations */ int sc_vendor; /* USB device vendor */ + int sc_product; /* USB device product */ device_ptr_t sc_subdevs[UVISOR_MAX_CONN]; int sc_numcon; @@ -256,6 +257,7 @@ USB_ATTACH(uvisor) sc->sc_flags = uvisor_lookup(uaa->vendor, uaa->product)->uv_flags; sc->sc_vendor = uaa->vendor; + sc->sc_product = uaa->product; if ((sc->sc_flags & (VISOR | PALM4)) == 0) { printf("%s: device is neither visor nor palm\n", @@ -463,18 +465,21 @@ uvisor_init(struct uvisor_softc *sc, str if (sc->sc_flags & NOFRE) return (err); - - DPRINTF(("uvisor_init: getting available bytes\n")); - req.bmRequestType = UT_READ_VENDOR_ENDPOINT; - req.bRequest = UVISOR_REQUEST_BYTES_AVAILABLE; - USETW(req.wValue, 0); - USETW(req.wIndex, 5); - USETW(req.wLength, sizeof avail); - err = usbd_do_request(sc->sc_udev, &req, &avail); - if (err) - return (err); - DPRINTF(("uvisor_init: avail=%d\n", UGETW(avail))); - DPRINTF(("uvisor_init: done\n")); + + if (sc->sc_product != USB_PRODUCT_PALM_ZIRE_31) { + DPRINTF(("uvisor_init: getting available bytes\n")); + req.bmRequestType = UT_READ_VENDOR_ENDPOINT; + req.bRequest = UVISOR_REQUEST_BYTES_AVAILABLE; + USETW(req.wValue, 0); + USETW(req.wIndex, 5); + USETW(req.wLength, sizeof avail); + err = usbd_do_request(sc->sc_udev, &req, &avail); + if (err) + return (err); + DPRINTF(("uvisor_init: avail=%d\n", UGETW(avail))); + DPRINTF(("uvisor_init: done\n")); + } + return (err); }