serial/mcf: Use the rs485 functions on serial_core
authorRicardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Thu, 6 Nov 2014 08:22:55 +0000 (09:22 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 6 Nov 2014 22:59:22 +0000 (14:59 -0800)
In order to unify all the rs485 ioctl handling.
Use the implementation of TIOC[GS]RS485 ioctl handling on serial_core.

Reviewed-by: Alan Cox <alan@linux.intel.com>
Cc: Jiri Slaby <jslaby@suse.cz>
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/mcf.c

index bc896dc7d2ed41174e022577474f265bf672d68f..d7be1f18545bab0596d2448d52208c6ac4a38778 100644 (file)
@@ -57,7 +57,6 @@ struct mcf_uart {
        struct uart_port        port;
        unsigned int            sigs;           /* Local copy of line sigs */
        unsigned char           imr;            /* Local IMR mirror */
-       struct serial_rs485     rs485;          /* RS485 settings */
 };
 
 /****************************************************************************/
@@ -104,7 +103,7 @@ static void mcf_start_tx(struct uart_port *port)
 {
        struct mcf_uart *pp = container_of(port, struct mcf_uart, port);
 
-       if (pp->rs485.flags & SER_RS485_ENABLED) {
+       if (port->rs485.flags & SER_RS485_ENABLED) {
                /* Enable Transmitter */
                writeb(MCFUART_UCR_TXENABLE, port->membase + MCFUART_UCR);
                /* Manually assert RTS */
@@ -258,7 +257,7 @@ static void mcf_set_termios(struct uart_port *port, struct ktermios *termios,
                mr2 |= MCFUART_MR2_TXCTS;
        }
 
-       if (pp->rs485.flags & SER_RS485_ENABLED) {
+       if (port->rs485.flags & SER_RS485_ENABLED) {
                dev_dbg(port->dev, "Setting UART to RS485\n");
                mr2 |= MCFUART_MR2_TXRTS;
        }
@@ -360,7 +359,7 @@ static void mcf_tx_chars(struct mcf_uart *pp)
                pp->imr &= ~MCFUART_UIR_TXREADY;
                writeb(pp->imr, port->membase + MCFUART_UIMR);
                /* Disable TX to negate RTS automatically */
-               if (pp->rs485.flags & SER_RS485_ENABLED)
+               if (port->rs485.flags & SER_RS485_ENABLED)
                        writeb(MCFUART_UCR_TXDISABLE,
                                port->membase + MCFUART_UCR);
        }
@@ -440,7 +439,7 @@ static int mcf_verify_port(struct uart_port *port, struct serial_struct *ser)
 /****************************************************************************/
 
 /* Enable or disable the RS485 support */
-static void mcf_config_rs485(struct uart_port *port, struct serial_rs485 *rs485)
+static int mcf_config_rs485(struct uart_port *port, struct serial_rs485 *rs485)
 {
        struct mcf_uart *pp = container_of(port, struct mcf_uart, port);
        unsigned long flags;
@@ -460,32 +459,9 @@ static void mcf_config_rs485(struct uart_port *port, struct serial_rs485 *rs485)
        }
        writeb(mr1, port->membase + MCFUART_UMR);
        writeb(mr2, port->membase + MCFUART_UMR);
-       pp->rs485 = *rs485;
+       port->rs485 = *rs485;
        spin_unlock_irqrestore(&port->lock, flags);
-}
 
-static int mcf_ioctl(struct uart_port *port, unsigned int cmd,
-               unsigned long arg)
-{
-       switch (cmd) {
-       case TIOCSRS485: {
-               struct serial_rs485 rs485;
-               if (copy_from_user(&rs485, (struct serial_rs485 *)arg,
-                               sizeof(struct serial_rs485)))
-                       return -EFAULT;
-               mcf_config_rs485(port, &rs485);
-               break;
-       }
-       case TIOCGRS485: {
-               struct mcf_uart *pp = container_of(port, struct mcf_uart, port);
-               if (copy_to_user((struct serial_rs485 *)arg, &pp->rs485,
-                               sizeof(struct serial_rs485)))
-                       return -EFAULT;
-               break;
-       }
-       default:
-               return -ENOIOCTLCMD;
-       }
        return 0;
 }
 
@@ -510,7 +486,6 @@ static const struct uart_ops mcf_uart_ops = {
        .release_port   = mcf_release_port,
        .config_port    = mcf_config_port,
        .verify_port    = mcf_verify_port,
-       .ioctl          = mcf_ioctl,
 };
 
 static struct mcf_uart mcf_ports[4];
@@ -538,6 +513,7 @@ int __init early_mcf_setup(struct mcf_platform_uart *platp)
                port->irq = platp[i].irq;
                port->uartclk = MCF_BUSCLK;
                port->flags = UPF_BOOT_AUTOCONF;
+               port->rs485_config = mcf_config_rs485;
                port->ops = &mcf_uart_ops;
        }
 
@@ -663,6 +639,7 @@ static int mcf_probe(struct platform_device *pdev)
                port->uartclk = MCF_BUSCLK;
                port->ops = &mcf_uart_ops;
                port->flags = UPF_BOOT_AUTOCONF;
+               port->rs485_config = mcf_config_rs485;
 
                uart_add_one_port(&mcf_driver, port);
        }