serial/efm32-uart: don't use pdev->id to determine the port's line
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Tue, 30 Jul 2013 14:35:20 +0000 (16:35 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 1 Aug 2013 01:05:39 +0000 (18:05 -0700)
pdev->id is not a valid choice for device-tree probed devices. So use
the (properly determined) line from efm32_uart_probe consistenly

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/efm32-uart.c

index 868dbfb9f89352577335a20dd654d745e4ea9b79..ce1ebbb0fe0dd0ce07bf33b86339f5576bce232b 100644 (file)
@@ -698,6 +698,7 @@ static int efm32_uart_probe(struct platform_device *pdev)
 {
        struct efm32_uart_port *efm_port;
        struct resource *res;
+       unsigned int line;
        int ret;
 
        efm_port = kzalloc(sizeof(*efm_port), GFP_KERNEL);
@@ -752,16 +753,17 @@ static int efm32_uart_probe(struct platform_device *pdev)
                        efm_port->pdata = *pdata;
        }
 
-       if (efm_port->port.line >= 0 &&
-                       efm_port->port.line < ARRAY_SIZE(efm32_uart_ports))
-               efm32_uart_ports[efm_port->port.line] = efm_port;
+       line = efm_port->port.line;
+
+       if (line >= 0 && line < ARRAY_SIZE(efm32_uart_ports))
+               efm32_uart_ports[line] = efm_port;
 
        ret = uart_add_one_port(&efm32_uart_reg, &efm_port->port);
        if (ret) {
                dev_dbg(&pdev->dev, "failed to add port: %d\n", ret);
 
-               if (pdev->id >= 0 && pdev->id < ARRAY_SIZE(efm32_uart_ports))
-                       efm32_uart_ports[pdev->id] = NULL;
+               if (line >= 0 && line < ARRAY_SIZE(efm32_uart_ports))
+                       efm32_uart_ports[line] = NULL;
 err_get_rxirq:
 err_too_small:
 err_get_base:
@@ -777,11 +779,12 @@ err_get_base:
 static int efm32_uart_remove(struct platform_device *pdev)
 {
        struct efm32_uart_port *efm_port = platform_get_drvdata(pdev);
+       unsigned int line = efm_port->port.line;
 
        uart_remove_one_port(&efm32_uart_reg, &efm_port->port);
 
-       if (pdev->id >= 0 && pdev->id < ARRAY_SIZE(efm32_uart_ports))
-               efm32_uart_ports[pdev->id] = NULL;
+       if (line >= 0 && line < ARRAY_SIZE(efm32_uart_ports))
+               efm32_uart_ports[line] = NULL;
 
        kfree(efm_port);