So to just remove the ifaceno check, here's the diff. This matches u3g behaviour for SIERRA TRUINSTALL devices. There is still a bit of hardcoded stuff that needs to be reviewed in umsm for other devices. I think yuo@ was trying to match some of these style checks when he added support for these devices (but it does not appear to be necessary to isolate based on ifaceno for u3g)
Index: umsm.c =================================================================== RCS file: /cvs/src/sys/dev/usb/umsm.c,v retrieving revision 1.104 diff -u -p -u -r1.104 umsm.c --- umsm.c 29 Sep 2015 08:34:28 -0000 1.104 +++ umsm.c 20 May 2016 16:37:08 -0000 @@ -115,6 +115,7 @@ struct umsm_type { static const struct umsm_type umsm_devs[] = { {{ USB_VENDOR_AIRPRIME, USB_PRODUCT_AIRPRIME_PC5220 }, 0}, + {{ USB_VENDOR_AIRPRIME, USB_PRODUCT_AIRPRIME_AIRCARD_313U }, 0}, {{ USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_A2502 }, 0}, {{ USB_VENDOR_ANYDATA, USB_PRODUCT_ANYDATA_ADU_500A }, 0}, @@ -247,6 +248,7 @@ static const struct umsm_type umsm_devs[ {{ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_USB305}, 0}, {{ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_TRUINSTALL }, DEV_TRUINSTALL}, {{ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_MC8355}, 0}, + {{ USB_VENDOR_SIERRA, USB_PRODUCT_SIERRA_AIRCARD_770S}, 0}, {{ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMASS }, DEV_UMASS3}, {{ USB_VENDOR_TCTMOBILE, USB_PRODUCT_TCTMOBILE_UMASS_2 }, DEV_UMASS3}, @@ -358,8 +360,7 @@ umsm_attach(struct device *parent, struc umsm_huawei_changemode(uaa->device); printf("%s: umass only mode. need to reattach\n", sc->sc_dev.dv_xname); - } else if ((sc->sc_flag & DEV_TRUINSTALL) && - uaa->ifaceno == 0) { + } else if (sc->sc_flag & DEV_TRUINSTALL) { umsm_truinstall_changemode(uaa->device); printf("%s: truinstall mode. need to reattach\n", sc->sc_dev.dv_xname);