lkml.org 
[lkml]   [2009]   [Oct]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 5/7] ark3116: (3rd try) Add cmset and break
    Signed-off-by: Bart Hartgers <bart.hartgers@gmail.com>
    ---
    Index: linux-2.6.32-rc4/drivers/usb/serial/ark3116.c
    ===================================================================
    --- linux-2.6.32-rc4.orig/drivers/usb/serial/ark3116.c 2009-10-18 16:20:17.000000000 +0200
    +++ linux-2.6.32-rc4/drivers/usb/serial/ark3116.c 2009-10-18 16:20:20.000000000 +0200
    @@ -570,6 +570,62 @@ static int ark3116_tiocmget(struct tty_s
    (ctrl & UART_MCR_OUT2 ? TIOCM_OUT2 : 0);
    }

    +static int ark3116_tiocmset(struct tty_struct *tty, struct file *file,
    + unsigned set, unsigned clr)
    +{
    + struct usb_serial_port *port = tty->driver_data;
    + struct ark3116_private *priv = usb_get_serial_port_data(port);
    + unsigned setmask = 0;
    + unsigned clrmask = 0;
    +
    + if (set & TIOCM_RTS)
    + setmask |= UART_MCR_RTS;
    + if (set & TIOCM_DTR)
    + setmask |= UART_MCR_DTR;
    + if (set & TIOCM_OUT1)
    + setmask |= UART_MCR_OUT1;
    + if (set & TIOCM_OUT2)
    + setmask |= UART_MCR_OUT2;
    + if (clr & TIOCM_RTS)
    + clrmask |= UART_MCR_RTS;
    + if (clr & TIOCM_DTR)
    + clrmask |= UART_MCR_DTR;
    + if (clr & TIOCM_OUT1)
    + clrmask |= UART_MCR_OUT1;
    + if (clr & TIOCM_OUT2)
    + clrmask |= UART_MCR_OUT2;
    +
    + ark3116_atomic_set_clear(setmask, clrmask, &priv->mcr);
    +
    + /* unfortunately, we need the mutex, to make sure that the value
    + * in priv->mcr is actually the one that is in the hardware
    + */
    +
    + mutex_lock(&priv->lock);
    + ark3116_write_reg(port->serial, UART_MCR, atomic_read(&priv->mcr));
    + mutex_unlock(&priv->lock);
    +
    + return 0;
    +}
    +
    +static void ark3116_break_ctl(struct tty_struct *tty, int break_state)
    +{
    + struct usb_serial_port *port = tty->driver_data;
    + struct ark3116_private *priv = usb_get_serial_port_data(port);
    +
    + /* LCR is also used for other things: protect access */
    + mutex_lock(&priv->lock);
    +
    + if (break_state)
    + priv->lcr |= UART_LCR_SBC;
    + else
    + priv->lcr &= UART_LCR_SBC;
    +
    + ark3116_write_reg(port->serial, UART_LCR, priv->lcr);
    +
    + mutex_unlock(&priv->lock);
    +}
    +
    static struct usb_driver ark3116_driver = {
    .name = "ark3116",
    .probe = usb_serial_probe,
    @@ -592,8 +648,10 @@ static struct usb_serial_driver ark3116_
    .init_termios = ark3116_init_termios,
    .ioctl = ark3116_ioctl,
    .tiocmget = ark3116_tiocmget,
    + .tiocmset = ark3116_tiocmset,
    .open = ark3116_open,
    .close = ark3116_close,
    + .break_ctl = ark3116_break_ctl,
    };

    static int __init ark3116_init(void)
    --


    \
     
     \ /
      Last update: 2009-10-25 18:57    [W:0.021 / U:62.740 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site