--- /usr/src/sys/dev/usb/net/if_cdce.c (revision 326479) +++ /usr/src/sys/dev/usb/net/if_cdce.c (working copy) @@ -276,14 +276,13 @@ {USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_SLC750, CDCE_FLAG_ZAURUS | CDCE_FLAG_NO_UNION)}, {USB_VENDOR(USB_VENDOR_HUAWEI), USB_IFACE_CLASS(UICLASS_VENDOR), - USB_IFACE_SUBCLASS(0x02), USB_IFACE_PROTOCOL(0x16), - USB_DRIVER_INFO(0)}, + USB_IFACE_SUBCLASS(0x02), USB_IFACE_PROTOCOL(0x16)}, {USB_VENDOR(USB_VENDOR_HUAWEI), USB_IFACE_CLASS(UICLASS_VENDOR), - USB_IFACE_SUBCLASS(0x02), USB_IFACE_PROTOCOL(0x46), - USB_DRIVER_INFO(0)}, + USB_IFACE_SUBCLASS(0x02), USB_IFACE_PROTOCOL(0x46)}, {USB_VENDOR(USB_VENDOR_HUAWEI), USB_IFACE_CLASS(UICLASS_VENDOR), - USB_IFACE_SUBCLASS(0x02), USB_IFACE_PROTOCOL(0x76), - USB_DRIVER_INFO(0)}, + USB_IFACE_SUBCLASS(0x02), USB_IFACE_PROTOCOL(0x76)}, + {USB_VENDOR(USB_VENDOR_HUAWEI), USB_IFACE_CLASS(UICLASS_VENDOR), + USB_IFACE_SUBCLASS(0x03), USB_IFACE_PROTOCOL(0x16)}, }; static const STRUCT_USB_DUAL_ID cdce_dual_devs[] = { @@ -544,9 +543,13 @@ int error; error = usbd_lookup_id_by_uaa(cdce_host_devs, sizeof(cdce_host_devs), uaa); - if (error) + if (error != 0) { error = usbd_lookup_id_by_uaa(cdce_dual_devs, sizeof(cdce_dual_devs), uaa); - return (error); + if (error != 0) { + return (error); + } + } + return (BUS_PROBE_DEFAULT); } static void --- /usr/src/sys/dev/usb/serial/u3g.c (revision 326479) +++ /usr/src/sys/dev/usb/serial/u3g.c (working copy) @@ -306,7 +306,7 @@ U3G_DEV(HUAWEI, E173, 0), U3G_DEV(HUAWEI, E173_INIT, U3GINIT_HUAWEISCSI), U3G_DEV(HUAWEI, E3131, 0), - U3G_DEV(HUAWEI, E3131_INIT, U3GINIT_HUAWEISCSI), + U3G_DEV(HUAWEI, E3131_INIT, U3GINIT_HUAWEISCSI2), U3G_DEV(HUAWEI, E180V, U3GINIT_HUAWEI), U3G_DEV(HUAWEI, E220, U3GINIT_HUAWEI), U3G_DEV(HUAWEI, E220BIS, U3GINIT_HUAWEI), @@ -324,6 +324,8 @@ U3G_DEV(HUAWEI, K3770_INIT, U3GINIT_HUAWEISCSI), U3G_DEV(HUAWEI, K4505, U3GINIT_HUAWEI), U3G_DEV(HUAWEI, K4505_INIT, U3GINIT_HUAWEISCSI), + U3G_DEV(HUAWEI, E3272_INIT, U3GINIT_HUAWEISCSI), + U3G_DEV(HUAWEI, E3272, 0), U3G_DEV(HUAWEI, ETS2055, U3GINIT_HUAWEI), U3G_DEV(KYOCERA2, CDMA_MSM_K, 0), U3G_DEV(KYOCERA2, KPC680, 0), @@ -828,6 +830,7 @@ static int u3g_probe(device_t self) { + int error; struct usb_attach_arg *uaa = device_get_ivars(self); if (uaa->usb_mode != USB_MODE_HOST) { @@ -839,7 +842,11 @@ if (uaa->info.bInterfaceClass != UICLASS_VENDOR) { return (ENXIO); } - return (usbd_lookup_id_by_uaa(u3g_devs, sizeof(u3g_devs), uaa)); + error = usbd_lookup_id_by_uaa(u3g_devs, sizeof(u3g_devs), uaa); + if (error != 0) { + return (error); + } + return (BUS_PROBE_GENERIC); } static int @@ -864,8 +871,7 @@ } /* copy in USB config */ - for (n = 0; n != U3G_N_TRANSFER; n++) - u3g_config_tmp[n] = u3g_config[n]; + memcpy(&u3g_config_tmp, &u3g_config, sizeof(u3g_config)); device_set_usb_desc(dev); mtx_init(&sc->sc_mtx, "u3g", NULL, MTX_DEF); @@ -882,7 +888,6 @@ id = usbd_get_interface_descriptor(iface); if (id == NULL || id->bInterfaceClass != UICLASS_VENDOR) continue; - usbd_set_parent_iface(uaa->device, i, uaa->info.bIfaceIndex); iface_valid |= (1<device, i); id = usbd_get_interface_descriptor(iface); sc->sc_iface[nports] = id->bInterfaceNumber; + usbd_set_parent_iface(uaa->device, i, uaa->info.bIfaceIndex); if (bootverbose && sc->sc_xfer[nports][U3G_INTR]) { device_printf(dev, "port %d supports modem control\n",