Index: sys/dev/usb/serial/ugensa.c =================================================================== --- sys/dev/usb/serial/ugensa.c +++ sys/dev/usb/serial/ugensa.c @@ -162,6 +162,8 @@ {USB_VPI(USB_VENDOR_KYOCERA2, USB_PRODUCT_KYOCERA2_CDMA_MSM_K, 1)}, {USB_VPI(USB_VENDOR_HP, USB_PRODUCT_HP_49GPLUS, 1)}, {USB_VPI(USB_VENDOR_NOVATEL2, USB_PRODUCT_NOVATEL2_FLEXPACKGPS, 3)}, + {USB_VENDOR(USB_VENDOR_GOOGLE), USB_IFACE_CLASS(UICLASS_VENDOR), + USB_IFACE_SUBCLASS(0x50), USB_IFACE_PROTOCOL(0x01), USB_DRIVER_INFO(10)}, }; DRIVER_MODULE(ugensa, uhub, ugensa_driver, ugensa_devclass, NULL, 0); @@ -211,6 +213,11 @@ /* Not a serial port, most likely a SD reader */ continue; + /* XXX: default is 0, right? */ + if (uaa->info.bInterfaceSubClass != 0 && iface->idesc->bInterfaceSubClass != uaa->info.bInterfaceSubClass) + /* Not a serial port, most likely an I2C or flash interface */ + continue; + /* Loop over all endpoints pairwise */ for (x = 0; x < maxports && sc->sc_nports < UGENSA_PORT_MAX; x++) { @@ -234,11 +241,12 @@ break; } + /* XXX: do any devices need it? leave it on for non-google? */ /* clear stall at first run */ - mtx_lock(&sc->sc_mtx); - usbd_xfer_set_stall(ssc->sc_xfer[UGENSA_BULK_DT_WR]); - usbd_xfer_set_stall(ssc->sc_xfer[UGENSA_BULK_DT_RD]); - mtx_unlock(&sc->sc_mtx); + /* mtx_lock(&sc->sc_mtx); */ + /* usbd_xfer_set_stall(ssc->sc_xfer[UGENSA_BULK_DT_WR]); */ + /* usbd_xfer_set_stall(ssc->sc_xfer[UGENSA_BULK_DT_RD]); */ + /* mtx_unlock(&sc->sc_mtx); */ /* initialize port number */ ssc->sc_ucom_ptr->sc_portno = sc->sc_nports;