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