serial: core: Add minor field to uart_port
authorPeter Hurley <peter@hurleysoftware.com>
Tue, 24 Feb 2015 19:25:00 +0000 (14:25 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 26 Mar 2015 15:10:11 +0000 (16:10 +0100)
UART drivers that share ttyS namespace cannot trivially compute the
ttyS index from the port->line value since the minor_start may be
offset from minor 64. Further, to do so requires a pointer to the
uart driver since there is no back pointer from uart_port to
uart_driver.

Rather than have UART drivers computing the minor value by themselves,
encapsulate within the serial core at port registration time.

Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/serial_core.c
include/linux/serial_core.h

index 8379e3fa01625d14ae69f63053d0da26d53b3276..a373eff44ae8aece13552e20a5f16092ef4ec71b 100644 (file)
@@ -2682,6 +2682,7 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *uport)
 
        state->pm_state = UART_PM_STATE_UNDEFINED;
        uport->cons = drv->cons;
+       uport->minor = drv->tty_driver->minor_start + uport->line;
 
        /*
         * If this port is a console, then the spinlock is already
index b0148e7bcbfa0ad8bc5686f2ea8d60b5c663f99a..980170e5a982adc7ffd9929d69c82049f87827c0 100644 (file)
@@ -235,6 +235,7 @@ struct uart_port {
        const struct uart_ops   *ops;
        unsigned int            custom_divisor;
        unsigned int            line;                   /* port index */
+       unsigned int            minor;
        resource_size_t         mapbase;                /* for ioremap */
        struct device           *dev;                   /* parent device */
        unsigned char           hub6;                   /* this should be in the 8250 driver */