usb/153929: commit references a PR

dfilter service dfilter at FreeBSD.ORG
Thu Feb 3 18:30:12 UTC 2011


The following reply was made to PR usb/153929; it has been noted by GNATS.

From: dfilter at FreeBSD.ORG (dfilter service)
To: bug-followup at FreeBSD.org
Cc:  
Subject: Re: usb/153929: commit references a PR
Date: Thu,  3 Feb 2011 18:26:00 +0000 (UTC)

 Author: hselasky
 Date: Thu Feb  3 18:25:55 2011
 New Revision: 218229
 URL: http://svn.freebsd.org/changeset/base/218229
 
 Log:
   Fix for detection of MTK 3329 GPS USB devices.
   
   Submitted by:	Mykhaylo Yehorov
   PR:		usb/153929
   Approved by:	thompsa (mentor)
 
 Modified:
   head/sys/dev/usb/serial/umodem.c
   head/sys/dev/usb/usbdevs
 
 Modified: head/sys/dev/usb/serial/umodem.c
 ==============================================================================
 --- head/sys/dev/usb/serial/umodem.c	Thu Feb  3 18:07:05 2011	(r218228)
 +++ head/sys/dev/usb/serial/umodem.c	Thu Feb  3 18:25:55 2011	(r218229)
 @@ -197,6 +197,8 @@ static void	*umodem_get_desc(struct usb_
  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 @@ umodem_attach(device_t dev)
  		    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 @@ detach:
  }
  
  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;
 
 Modified: head/sys/dev/usb/usbdevs
 ==============================================================================
 --- head/sys/dev/usb/usbdevs	Thu Feb  3 18:07:05 2011	(r218228)
 +++ head/sys/dev/usb/usbdevs	Thu Feb  3 18:25:55 2011	(r218229)
 @@ -536,6 +536,7 @@ vendor SPEEDDRAGON	0x0e55	Speed Dragon M
  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 DU_H3SP_USB232	0x0200	D-Link
  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)
  
 _______________________________________________
 svn-src-all at freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
 


More information about the freebsd-usb mailing list