svn commit: r211083 - head/sys/dev/usb/serial

Gavin Atkinson gavin at FreeBSD.org
Sun Aug 8 20:53:01 UTC 2010


Author: gavin
Date: Sun Aug  8 20:53:00 2010
New Revision: 211083
URL: http://svn.freebsd.org/changeset/base/211083

Log:
  The PL2302X can support any baud rate <= 6Mbps, allow any rate to be set.
  
  PR:		usb/128324
  Submitted by:	Mike Durian <durian shadetreesoftware.com> (original patch)
  MFC after:	2 weeks

Modified:
  head/sys/dev/usb/serial/uplcom.c

Modified: head/sys/dev/usb/serial/uplcom.c
==============================================================================
--- head/sys/dev/usb/serial/uplcom.c	Sun Aug  8 20:34:53 2010	(r211082)
+++ head/sys/dev/usb/serial/uplcom.c	Sun Aug  8 20:53:00 2010	(r211083)
@@ -599,25 +599,33 @@ static const int32_t uplcom_rates[] = {
 static int
 uplcom_pre_param(struct ucom_softc *ucom, struct termios *t)
 {
+	struct uplcom_softc *sc = ucom->sc_parent;
 	uint8_t i;
 
 	DPRINTF("\n");
 
-	/* check requested baud rate */
-
-	for (i = 0;; i++) {
-
-		if (i != N_UPLCOM_RATES) {
-			if (uplcom_rates[i] == t->c_ospeed) {
-				break;
-			}
-		} else {
-			DPRINTF("invalid baud rate (%d)\n", t->c_ospeed);
-			return (EIO);
+	/**
+	 * Check requested baud rate.
+	 *
+	 * The PL2303 can only set specific baud rates, up to 1228800 baud.
+	 * The PL2303X can set any baud rate up to 6Mb.
+	 * The PL2303HX rev. D can set any baud rate up to 12Mb.
+	 *
+	 * XXX: We currently cannot identify the PL2303HX rev. D, so treat
+	 *      it the same as the PL2303X.
+	 */
+	if (sc->sc_chiptype == TYPE_PL2303) {
+		for (i = 0; i < N_UPLCOM_RATES; i++) {
+			if (uplcom_rates[i] == t->c_ospeed)
+				return (0);
 		}
+ 	} else {
+		if (t->c_ospeed <= 6000000)
+			return (0);
 	}
 
-	return (0);
+	DPRINTF("uplcom_param: bad baud rate (%d)\n", t->c_ospeed);
+	return (EIO);
 }
 
 static void


More information about the svn-src-head mailing list