Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9a8baec77205dfe14f98a4e291c830a311125a8b
Commit:     9a8baec77205dfe14f98a4e291c830a311125a8b
Parent:     568c24adeaa4d9ec2fd04c6ae226eeb673a385db
Author:     Alan Cox <[EMAIL PROTECTED]>
AuthorDate: Fri Jun 22 14:40:18 2007 +0100
Committer:  Greg Kroah-Hartman <[EMAIL PROTECTED]>
CommitDate: Thu Jul 12 16:34:37 2007 -0700

    USB: serial: belkin_sa: Various needed fixes
    
    Use the baud rate stuff from the kernel don't parse CBAUD directly
    Remove pointless and wrong 'no change' check
    
    Could do with some good testing as well but again better than adding &&
    BROKEN
    
    (The use of BELKIN_SA_BAUD() might seem a bit odd but x/a = b and x/b =
    a (rounded for integers)).
    
    
    
    Signed-off-by: Alan Cox <[EMAIL PROTECTED]>
    Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>
---
 drivers/usb/serial/belkin_sa.c |   69 +++++++++++++++------------------------
 1 files changed, 27 insertions(+), 42 deletions(-)

diff --git a/drivers/usb/serial/belkin_sa.c b/drivers/usb/serial/belkin_sa.c
index 50194ee..e67ce25 100644
--- a/drivers/usb/serial/belkin_sa.c
+++ b/drivers/usb/serial/belkin_sa.c
@@ -349,6 +349,7 @@ static void belkin_sa_set_termios (struct usb_serial_port 
*port, struct ktermios
        unsigned long flags;
        unsigned long control_state;
        int bad_flow_control;
+       speed_t baud;
        
        if ((!port->tty) || (!port->tty->termios)) {
                dbg ("%s - no tty or termios structure", __FUNCTION__);
@@ -364,16 +365,8 @@ static void belkin_sa_set_termios (struct usb_serial_port 
*port, struct ktermios
        bad_flow_control = priv->bad_flow_control;
        spin_unlock_irqrestore(&priv->lock, flags);
        
-       /* check that they really want us to change something */
-       if (old_termios) {
-               if ((cflag == old_termios->c_cflag) &&
-                   (RELEVANT_IFLAG(port->tty->termios->c_iflag) == 
RELEVANT_IFLAG(old_termios->c_iflag))) {
-                       dbg("%s - nothing to change...", __FUNCTION__);
-                       return;
-               }
-               old_iflag = old_termios->c_iflag;
-               old_cflag = old_termios->c_cflag;
-       }
+       old_iflag = old_termios->c_iflag;
+       old_cflag = old_termios->c_cflag;
 
        /* Set the baud rate */
        if( (cflag&CBAUD) != (old_cflag&CBAUD) ) {
@@ -387,38 +380,30 @@ static void belkin_sa_set_termios (struct usb_serial_port 
*port, struct ktermios
                                if (BSA_USB_CMD(BELKIN_SA_SET_RTS_REQUEST, 1) < 
0)
                                        err("Set RTS error");
                }
+       }
 
-               switch(cflag & CBAUD) {
-                       case B0: /* handled below */ break;
-                       case B300: urb_value = BELKIN_SA_BAUD(300); break;
-                       case B600: urb_value = BELKIN_SA_BAUD(600); break;
-                       case B1200: urb_value = BELKIN_SA_BAUD(1200); break;
-                       case B2400: urb_value = BELKIN_SA_BAUD(2400); break;
-                       case B4800: urb_value = BELKIN_SA_BAUD(4800); break;
-                       case B9600: urb_value = BELKIN_SA_BAUD(9600); break;
-                       case B19200: urb_value = BELKIN_SA_BAUD(19200); break;
-                       case B38400: urb_value = BELKIN_SA_BAUD(38400); break;
-                       case B57600: urb_value = BELKIN_SA_BAUD(57600); break;
-                       case B115200: urb_value = BELKIN_SA_BAUD(115200); break;
-                       case B230400: urb_value = BELKIN_SA_BAUD(230400); break;
-                       default: err("BELKIN USB Serial Adapter: unsupported 
baudrate request, using default of 9600");
-                               urb_value = BELKIN_SA_BAUD(9600); break;
-               }
-               if ((cflag & CBAUD) != B0 ) {
-                       if (BSA_USB_CMD(BELKIN_SA_SET_BAUDRATE_REQUEST, 
urb_value) < 0)
-                               err("Set baudrate error");
-               } else {
-                       /* Disable flow control */
-                       if (BSA_USB_CMD(BELKIN_SA_SET_FLOW_CTRL_REQUEST, 
BELKIN_SA_FLOW_NONE) < 0)
-                               err("Disable flowcontrol error");
-
-                       /* Drop RTS and DTR */
-                       control_state &= ~(TIOCM_DTR | TIOCM_RTS);
-                       if (BSA_USB_CMD(BELKIN_SA_SET_DTR_REQUEST, 0) < 0)
-                               err("DTR LOW error");
-                       if (BSA_USB_CMD(BELKIN_SA_SET_RTS_REQUEST, 0) < 0)
-                               err("RTS LOW error");
-               }
+       baud = tty_get_baud_rate(port->tty);
+       urb_value = BELKIN_SA_BAUD(baud);
+       /* Clip to maximum speed */
+       if (urb_value == 0)
+               urb_value = 1;
+       /* Turn it back into a resulting real baud rate */
+       baud = BELKIN_SA_BAUD(urb_value);
+       /* FIXME: Once the tty updates are done then push this back to the tty 
*/
+
+       if ((cflag & CBAUD) != B0 ) {
+               if (BSA_USB_CMD(BELKIN_SA_SET_BAUDRATE_REQUEST, urb_value) < 0)
+                       err("Set baudrate error");
+       } else {
+               /* Disable flow control */
+               if (BSA_USB_CMD(BELKIN_SA_SET_FLOW_CTRL_REQUEST, 
BELKIN_SA_FLOW_NONE) < 0)
+                       err("Disable flowcontrol error");
+               /* Drop RTS and DTR */
+               control_state &= ~(TIOCM_DTR | TIOCM_RTS);
+               if (BSA_USB_CMD(BELKIN_SA_SET_DTR_REQUEST, 0) < 0)
+                       err("DTR LOW error");
+               if (BSA_USB_CMD(BELKIN_SA_SET_RTS_REQUEST, 0) < 0)
+                       err("RTS LOW error");
        }
 
        /* set the parity */
@@ -438,7 +423,7 @@ static void belkin_sa_set_termios (struct usb_serial_port 
*port, struct ktermios
                        case CS6: urb_value = BELKIN_SA_DATA_BITS(6); break;
                        case CS7: urb_value = BELKIN_SA_DATA_BITS(7); break;
                        case CS8: urb_value = BELKIN_SA_DATA_BITS(8); break;
-                       default: err("CSIZE was not CS5-CS8, using default of 
8");
+                       default: dbg("CSIZE was not CS5-CS8, using default of 
8");
                                urb_value = BELKIN_SA_DATA_BITS(8);
                                break;
                }
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to