usb/153929: The umodem driver doesn't support the MTK 3329 GPS
chipset.
Hans Petter Selasky
hselasky at c2i.net
Wed Feb 2 18:40:07 UTC 2011
The following reply was made to PR usb/153929; it has been noted by GNATS.
From: Hans Petter Selasky <hselasky at c2i.net>
To: freebsd-usb at freebsd.org
Cc: Mykhaylo Yehorov <yehorov at gmail.com>,
freebsd-gnats-submit at freebsd.org
Subject: Re: usb/153929: The umodem driver doesn't support the MTK 3329 GPS chipset.
Date: Wed, 2 Feb 2011 19:35:13 +0100
--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 at c2i.net>
> To: Mykhaylo Yehorov <yehorov at gmail.com>
> Cc: freebsd-gnats-submit at 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--
More information about the freebsd-usb
mailing list