USB: PL2303: correctly handle baudrates above 115200
PL2303: correctly handle baudrates above 115200 Signed-off-by: Michal Sroczynski <msroczyn@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
		
					parent
					
						
							
								35da41375c
							
						
					
				
			
			
				commit
				
					
						8d48fdf689
					
				
			
		
					 1 changed files with 22 additions and 4 deletions
				
			
		|  | @ -342,10 +342,28 @@ static void pl2303_set_termios(struct tty_struct *tty, | |||
| 				baud = 6000000; | ||||
| 		} | ||||
| 		dbg("%s - baud set = %d", __func__, baud); | ||||
| 		buf[0] = baud & 0xff; | ||||
| 		buf[1] = (baud >> 8) & 0xff; | ||||
| 		buf[2] = (baud >> 16) & 0xff; | ||||
| 		buf[3] = (baud >> 24) & 0xff; | ||||
| 		if (baud <= 115200) { | ||||
| 			buf[0] = baud & 0xff; | ||||
| 			buf[1] = (baud >> 8) & 0xff; | ||||
| 			buf[2] = (baud >> 16) & 0xff; | ||||
| 			buf[3] = (baud >> 24) & 0xff; | ||||
| 		} else { | ||||
| 			/* apparently the formula for higher speeds is:
 | ||||
| 			 * baudrate = 12M * 32 / (2^buf[1]) / buf[0] | ||||
| 			 */ | ||||
| 			unsigned tmp = 12*1000*1000*32 / baud; | ||||
| 			buf[3] = 0x80; | ||||
| 			buf[2] = 0; | ||||
| 			buf[1] = (tmp >= 256); | ||||
| 			while (tmp >= 256) { | ||||
| 				tmp >>= 2; | ||||
| 				buf[1] <<= 1; | ||||
| 			} | ||||
| 			if (tmp > 256) { | ||||
| 				tmp %= 256; | ||||
| 			} | ||||
| 			buf[0] = tmp; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	/* For reference buf[4]=0 is 1 stop bits */ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Michał Sroczyński
				Michał Sroczyński