usb: acm: fix the computation of the number of data bits
Subsystems (2)
PATCH 1/1 usb: acm: fix the computation of the number of data bits
From: Nicolas Boullis <[email protected]>
The current code assumes that CSIZE is 0000060, which appears to be wrong on some arches (such as powerpc).
Signed-off-by Nicolas Boullis <[email protected]>
Acked-by Oliver Neukum <[email protected]>
---
drivers/usb/class/cdc-acm.c +15 -5
@@ -817,10 +817,6 @@ static const __u32 acm_tty_speed[] = { 2500000, 3000000, 3500000, 4000000 }; -static const __u8 acm_tty_size[] = { -5 ,6 ,7 ,8 -}; -static void acm_tty_set_termios (struct tty_struct *tty,struct ktermios *termios_old) {
@@ -834,7 +830,21 @@ static void acm_tty_set_termios(struct tty_struct *tty, newline.bParityType = termios->c_cflag &PARENB ? (termios->c_cflag &PARODD ?1 :2 ) + (termios->c_cflag &CMSPAR ?2 :0 ) :0 ; - newline.bDataBits = acm_tty_size[(termios->c_cflag &CSIZE ) >>4 ]; +switch (termios->c_cflag &CSIZE ) { +case CS5 : + newline.bDataBits =5 ; +break ; +case CS6 : + newline.bDataBits =6 ; +break ; +case CS7 : + newline.bDataBits =7 ; +break ; +case CS8 : +default : + newline.bDataBits =8 ; +break ; + }/* FIXME: Needs to clear unsupported bits in the termios */ acm->clocal = ((termios->c_cflag &CLOCAL ) !=0 );