===================================================================
@@ -1044,17 +1044,28 @@ static int msm_serial_probe(struct platf
struct resource *resource;
struct uart_port *port;
const struct of_device_id *id;
- int irq;
+ int irq, line;
+ static int no_prev_alias = 1;
- if (pdev->id == -1)
- pdev->id = atomic_inc_return(&msm_uart_next_id) - 1;
+ if (pdev->dev.of_node) {
+ line = of_alias_get_id(pdev->dev.of_node, "serial");
+ if (line < 0 && no_prev_alias)
+ line = atomic_inc_return(&msm_uart_next_id) - 1;
+ else
+ no_prev_alias = 0;
+ } else {
+ if (pdev->id < 0 && no_prev_alias)
+ line = atomic_inc_return(&msm_uart_next_id) - 1;
+ else
+ line = pdev->id;
+ }
- if (unlikely(pdev->id < 0 || pdev->id >= UART_NR))
+ if (unlikely(line < 0 || line >= UART_NR))
return -ENXIO;
- dev_info(&pdev->dev, "msm_serial: detected port #%d\n", pdev->id);
+ dev_info(&pdev->dev, "msm_serial: detected port #%d\n", line);
- port = get_port_from_line(pdev->id);
+ port = get_port_from_line(line);
port->dev = &pdev->dev;
msm_port = UART_TO_MSM(port);