static int s3c24xx_serial_probe(struct platform_device *pdev)
 {
        struct s3c24xx_uart_port *ourport;
+       int index = probe_index;
        int ret;
 
-       dbg("s3c24xx_serial_probe(%p) %d\n", pdev, probe_index);
+       if (pdev->dev.of_node) {
+               ret = of_alias_get_id(pdev->dev.of_node, "serial");
+               if (ret >= 0)
+                       index = ret;
+       }
+
+       dbg("s3c24xx_serial_probe(%p) %d\n", pdev, index);
 
-       ourport = &s3c24xx_serial_ports[probe_index];
+       ourport = &s3c24xx_serial_ports[index];
 
        ourport->drv_data = s3c24xx_get_driver_data(pdev);
        if (!ourport->drv_data) {
 
        ourport->port.fifosize = (ourport->info->fifosize) ?
                ourport->info->fifosize :
-               ourport->drv_data->fifosize[probe_index];
+               ourport->drv_data->fifosize[index];
 
        probe_index++;