File tree Expand file tree Collapse file tree 1 file changed +22
-4
lines changed Expand file tree Collapse file tree 1 file changed +22
-4
lines changed Original file line number Diff line number Diff line change @@ -342,10 +342,28 @@ static void pl2303_set_termios(struct tty_struct *tty,
342
342
baud = 6000000 ;
343
343
}
344
344
dbg ("%s - baud set = %d" , __func__ , baud );
345
- buf [0 ] = baud & 0xff ;
346
- buf [1 ] = (baud >> 8 ) & 0xff ;
347
- buf [2 ] = (baud >> 16 ) & 0xff ;
348
- buf [3 ] = (baud >> 24 ) & 0xff ;
345
+ if (baud <= 115200 ) {
346
+ buf [0 ] = baud & 0xff ;
347
+ buf [1 ] = (baud >> 8 ) & 0xff ;
348
+ buf [2 ] = (baud >> 16 ) & 0xff ;
349
+ buf [3 ] = (baud >> 24 ) & 0xff ;
350
+ } else {
351
+ /* apparently the formula for higher speeds is:
352
+ * baudrate = 12M * 32 / (2^buf[1]) / buf[0]
353
+ */
354
+ unsigned tmp = 12 * 1000 * 1000 * 32 / baud ;
355
+ buf [3 ] = 0x80 ;
356
+ buf [2 ] = 0 ;
357
+ buf [1 ] = (tmp >= 256 );
358
+ while (tmp >= 256 ) {
359
+ tmp >>= 2 ;
360
+ buf [1 ] <<= 1 ;
361
+ }
362
+ if (tmp > 256 ) {
363
+ tmp %= 256 ;
364
+ }
365
+ buf [0 ] = tmp ;
366
+ }
349
367
}
350
368
351
369
/* For reference buf[4]=0 is 1 stop bits */
You can’t perform that action at this time.
0 commit comments