Date: Wed, 2 Feb 2011 19:35:13 +0100 From: Hans Petter Selasky <hselasky@c2i.net> To: freebsd-usb@freebsd.org Cc: freebsd-gnats-submit@freebsd.org Subject: Re: usb/153929: The umodem driver doesn't support the MTK 3329 GPS chipset. Message-ID: <201102021935.13217.hselasky@c2i.net> In-Reply-To: <201101131320.p0DDK8so007438@freefall.freebsd.org> References: <201101131320.p0DDK8so007438@freefall.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--Boundary-00=_hPaSN1ZTrNWJk0m Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit On Thursday 13 January 2011 14:20:08 Hans Petter Selasky wrote: > The following reply was made to PR usb/153929; it has been noted by GNATS. > > From: Hans Petter Selasky <hselasky@c2i.net> > To: Mykhaylo Yehorov <yehorov@gmail.com> > Cc: freebsd-gnats-submit@freebsd.org > Subject: Re: usb/153929: The umodem driver doesn't support the MTK 3329 GPS > chipset. Date: Thu, 13 Jan 2011 14:12:41 +0100 > > On Thursday 13 January 2011 14:07:22 Mykhaylo Yehorov wrote: > > These are changes for searching the closest unlocked data interface. > > OK, I will see if I can get your patch committed [with some modifications > which I will do] in not so long. > > --HPS Hi Mykhaylo, Can you verify the attached patch with your device? --HPS --Boundary-00=_hPaSN1ZTrNWJk0m Content-Type: text/x-patch; charset="iso-8859-15"; name="umodem.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="umodem.patch" === serial/umodem.c ================================================================== --- serial/umodem.c (revision 218169) +++ serial/umodem.c (local) @@ -197,6 +197,8 @@ static usb_error_t umodem_set_comm_feature(struct usb_device *, uint8_t, uint16_t, uint16_t); static void umodem_poll(struct ucom_softc *ucom); +static void umodem_find_data_iface(struct usb_attach_arg *uaa, + uint8_t, uint8_t *, uint8_t *); static const struct usb_config umodem_config[UMODEM_N_TRANSFER] = { @@ -311,13 +313,30 @@ 0 - 1, UDESCSUB_CDC_UNION, 0 - 1); if ((cud == NULL) || (cud->bLength < sizeof(*cud))) { - device_printf(dev, "Missing descriptor. " + DPRINTF("Missing descriptor. " "Assuming data interface is next.\n"); - if (sc->sc_ctrl_iface_no == 0xFF) + if (sc->sc_ctrl_iface_no == 0xFF) { goto detach; - else - sc->sc_data_iface_no = - sc->sc_ctrl_iface_no + 1; + } else { + uint8_t class_match = 0; + + /* set default interface number */ + sc->sc_data_iface_no = 0xFF; + + /* try to find the data interface backwards */ + umodem_find_data_iface(uaa, + uaa->info.bIfaceIndex - 1, + &sc->sc_data_iface_no, &class_match); + + /* try to find the data interface forwards */ + umodem_find_data_iface(uaa, + uaa->info.bIfaceIndex + 1, + &sc->sc_data_iface_no, &class_match); + + /* check if nothing was found */ + if (sc->sc_data_iface_no == 0xFF) + goto detach; + } } else { sc->sc_data_iface_no = cud->bSlaveInterface[0]; } @@ -398,6 +417,36 @@ } static void +umodem_find_data_iface(struct usb_attach_arg *uaa, + uint8_t iface_index, uint8_t *p_data_no, uint8_t *p_match_class) +{ + struct usb_interface_descriptor *id; + struct usb_interface *iface; + + iface = usbd_get_iface(uaa->device, iface_index); + + /* check for end of interfaces */ + if (iface == NULL) + return; + + id = usbd_get_interface_descriptor(iface); + + /* check for non-matching interface class */ + if (id->bInterfaceClass != UICLASS_CDC_DATA || + id->bInterfaceSubClass != UISUBCLASS_DATA) { + /* if we got a class match then return */ + if (*p_match_class) + return; + } else { + *p_match_class = 1; + } + + DPRINTFN(11, "Match at index %u\n", iface_index); + + *p_data_no = id->bInterfaceNumber; +} + +static void umodem_start_read(struct ucom_softc *ucom) { struct umodem_softc *sc = ucom->sc_parent; === usbdevs ================================================================== --- usbdevs (revision 218169) +++ usbdevs (local) @@ -536,6 +536,7 @@ vendor HAWKING 0x0e66 Hawking vendor FOSSIL 0x0e67 Fossil, Inc vendor GMATE 0x0e7e G.Mate, Inc +vendor MEDIATEK 0x0e8d MediaTek, Inc. vendor OTI 0x0ea0 Ours Technology vendor YISO 0x0eab Yiso Wireless Co. vendor PILOTECH 0x0eaf Pilotech @@ -2120,6 +2121,9 @@ product MCT USB232 0x0210 USB-232 Interface product MCT SITECOM_USB232 0x0230 Sitecom USB-232 Products +/* MediaTek, Inc. */ +product MEDIATEK MTK3329 0x3329 MTK II GPS Receiver + /* Meizu Electronics */ product MEIZU M6_SL 0x0140 MiniPlayer M6 (SL) --Boundary-00=_hPaSN1ZTrNWJk0m--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201102021935.13217.hselasky>