On Sun, Jul 26, 2015 at 11:14:34AM +0200, Michał Pecio wrote:
>
> This commit fixes the following issues:
>
> 1. The 9th bit of buf was believed to be the LSB of divisor's
> exponent, but the hardware interprets it as MSB (9th bit) of the
> mantissa. The exponent is actually one bit shorter and applies
> to base 4, not 2 as previously believed.
>
> 2. Loop iterations doubled the exponent instead of incrementing.
>
> 3. The exponent wasn't checked for overflow.
>
> 4. The function returned requested rate instead of actual rate.
>
> Due to issue #2, the old code deviated from the wrong formula
> described in #1 and actually yielded correct rates when divisor
> was lower than 4096 by using exponents of 0, 2 or 4 base-2,
> interpreted as 0, 1, 2 base-4 with the 9th mantissa bit clear.
> However, at 93.75 kbaud or less the rate turned out too slow
> due to #2 or too fast due to #2 and #3.
>
> I tested this patch by sending and validating 0x00,0x01,..,0xff
> to an FTDI dongle at 234, 987, 2401, 9601, 31415, 115199, 250k,
> 500k, 750k, 1M, 1.5M, 3M+1 baud. All rates passed.
>
> I also used pv to check speed at some rates unsupported by FTDI:
> 45 (the lowest possible), 2M, 4M, 5M and 6M-1. Looked sane.
>
> Signed-off-by: Michal Pecio <[email protected]>
Now applied for 4.3 with stable tag for 3.18+. [ Low, non-standard
baudrates were first enabled by 399aa9a75ad3 ("USB: pl2303: use divisors
for unsupported baud rates" ].
Again, thanks for fixing this.
Johan
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html