aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrank Schäfer <fschaefer.oss@googlemail.com>2013-08-06 13:26:27 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-08-12 18:43:40 -0400
commitb5c16c6a031c52cc4b7dda6c3de46462fbc92eab (patch)
treeb6ba598e720c81ca45c6788080219c871e06321c
parente917ba01d69ad705a4cd6a6c77538f55d84f5907 (diff)
usb: pl2303: increase the allowed baud rate range for the divisor based encoding method
Reinhard Max has done some tests with a PL2303HX (rev A) and a logic analyzer and it seems, that although the PL2303HX is specified for baud rates from 75 to 6M baud, the full divisor range can be used with the divisor based baud rate encoding method. This corresponds to baud rates from 46 to 24M baud. Baud rates down to 46 baud (max. divisor) have been confirmed to work even under heavy/permanent load, so remove the lower limit. Baud rates up to 24M baud should really be tested carefully in "real life" scenarios before removing the upper limit completely. Anyway, the Windows driver allows maximum baud rates of 110% of the specified limit, so for now, increase the upper limit to this value. Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com> Signed-off-by: Reinhard Max <max@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/serial/pl2303.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
index 693ed7e4871a..61c9f9d28ee9 100644
--- a/drivers/usb/serial/pl2303.c
+++ b/drivers/usb/serial/pl2303.c
@@ -324,12 +324,20 @@ static int pl2303_baudrate_encode_divisor(int baud, enum pl2303_type type,
324 */ 324 */
325 unsigned int A, B; 325 unsigned int A, B;
326 326
327 /* Respect the specified baud rate limits */ 327 /*
328 baud = max_t(int, baud, 75); 328 * NOTE: The Windows driver allows maximum baud rates of 110% of the
329 * specified maximium value.
330 * Quick tests with early (2004) HX (rev. A) chips suggest, that even
331 * higher baud rates (up to the maximum of 24M baud !) are working fine,
332 * but that should really be tested carefully in "real life" scenarios
333 * before removing the upper limit completely.
334 * Baud rates smaller than the specified 75 baud are definitely working
335 * fine.
336 */
329 if (type == HX) 337 if (type == HX)
330 baud = min_t(int, baud, 6000000); 338 baud = min_t(int, baud, 6000000 * 1.1);
331 else 339 else
332 baud = min_t(int, baud, 1228800); 340 baud = min_t(int, baud, 1228800 * 1.1);
333 /* Determine factors A and B */ 341 /* Determine factors A and B */
334 A = 0; 342 A = 0;
335 B = 12000000 * 32 / baud; /* 12MHz */ 343 B = 12000000 * 32 / baud; /* 12MHz */