aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty/serial/omap-serial.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/tty/serial/omap-serial.c')
-rw-r--r--drivers/tty/serial/omap-serial.c43
1 files changed, 20 insertions, 23 deletions
diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
index 0121486ac4fa..d00b38eb268e 100644
--- a/drivers/tty/serial/omap-serial.c
+++ b/drivers/tty/serial/omap-serial.c
@@ -1381,29 +1381,24 @@ static int serial_omap_probe(struct platform_device *pdev)
1381 return -ENODEV; 1381 return -ENODEV;
1382 } 1382 }
1383 1383
1384 if (!request_mem_region(mem->start, resource_size(mem), 1384 if (!devm_request_mem_region(&pdev->dev, mem->start, resource_size(mem),
1385 pdev->dev.driver->name)) { 1385 pdev->dev.driver->name)) {
1386 dev_err(&pdev->dev, "memory region already claimed\n"); 1386 dev_err(&pdev->dev, "memory region already claimed\n");
1387 return -EBUSY; 1387 return -EBUSY;
1388 } 1388 }
1389 1389
1390 dma_rx = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx"); 1390 dma_rx = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx");
1391 if (!dma_rx) { 1391 if (!dma_rx)
1392 ret = -EINVAL; 1392 return -ENXIO;
1393 goto err;
1394 }
1395 1393
1396 dma_tx = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx"); 1394 dma_tx = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx");
1397 if (!dma_tx) { 1395 if (!dma_tx)
1398 ret = -EINVAL; 1396 return -ENXIO;
1399 goto err; 1397
1400 } 1398 up = devm_kzalloc(&pdev->dev, sizeof(*up), GFP_KERNEL);
1399 if (!up)
1400 return -ENOMEM;
1401 1401
1402 up = kzalloc(sizeof(*up), GFP_KERNEL);
1403 if (up == NULL) {
1404 ret = -ENOMEM;
1405 goto do_release_region;
1406 }
1407 up->pdev = pdev; 1402 up->pdev = pdev;
1408 up->port.dev = &pdev->dev; 1403 up->port.dev = &pdev->dev;
1409 up->port.type = PORT_OMAP; 1404 up->port.type = PORT_OMAP;
@@ -1423,16 +1418,17 @@ static int serial_omap_probe(struct platform_device *pdev)
1423 dev_err(&pdev->dev, "failed to get alias/pdev id, errno %d\n", 1418 dev_err(&pdev->dev, "failed to get alias/pdev id, errno %d\n",
1424 up->port.line); 1419 up->port.line);
1425 ret = -ENODEV; 1420 ret = -ENODEV;
1426 goto err; 1421 goto err_port_line;
1427 } 1422 }
1428 1423
1429 sprintf(up->name, "OMAP UART%d", up->port.line); 1424 sprintf(up->name, "OMAP UART%d", up->port.line);
1430 up->port.mapbase = mem->start; 1425 up->port.mapbase = mem->start;
1431 up->port.membase = ioremap(mem->start, resource_size(mem)); 1426 up->port.membase = devm_ioremap(&pdev->dev, mem->start,
1427 resource_size(mem));
1432 if (!up->port.membase) { 1428 if (!up->port.membase) {
1433 dev_err(&pdev->dev, "can't ioremap UART\n"); 1429 dev_err(&pdev->dev, "can't ioremap UART\n");
1434 ret = -ENOMEM; 1430 ret = -ENOMEM;
1435 goto err; 1431 goto err_ioremap;
1436 } 1432 }
1437 1433
1438 up->port.flags = omap_up_info->flags; 1434 up->port.flags = omap_up_info->flags;
@@ -1478,16 +1474,19 @@ static int serial_omap_probe(struct platform_device *pdev)
1478 1474
1479 ret = uart_add_one_port(&serial_omap_reg, &up->port); 1475 ret = uart_add_one_port(&serial_omap_reg, &up->port);
1480 if (ret != 0) 1476 if (ret != 0)
1481 goto do_release_region; 1477 goto err_add_port;
1482 1478
1483 pm_runtime_put(&pdev->dev); 1479 pm_runtime_put(&pdev->dev);
1484 platform_set_drvdata(pdev, up); 1480 platform_set_drvdata(pdev, up);
1485 return 0; 1481 return 0;
1486err: 1482
1483err_add_port:
1484 pm_runtime_put(&pdev->dev);
1485 pm_runtime_disable(&pdev->dev);
1486err_ioremap:
1487err_port_line:
1487 dev_err(&pdev->dev, "[UART%d]: failure [%s]: %d\n", 1488 dev_err(&pdev->dev, "[UART%d]: failure [%s]: %d\n",
1488 pdev->id, __func__, ret); 1489 pdev->id, __func__, ret);
1489do_release_region:
1490 release_mem_region(mem->start, resource_size(mem));
1491 return ret; 1490 return ret;
1492} 1491}
1493 1492
@@ -1499,8 +1498,6 @@ static int serial_omap_remove(struct platform_device *dev)
1499 pm_runtime_disable(&up->pdev->dev); 1498 pm_runtime_disable(&up->pdev->dev);
1500 uart_remove_one_port(&serial_omap_reg, &up->port); 1499 uart_remove_one_port(&serial_omap_reg, &up->port);
1501 pm_qos_remove_request(&up->pm_qos_request); 1500 pm_qos_remove_request(&up->pm_qos_request);
1502
1503 kfree(up);
1504 } 1501 }
1505 1502
1506 platform_set_drvdata(dev, NULL); 1503 platform_set_drvdata(dev, NULL);