|
@@ -1381,29 +1381,24 @@ static int serial_omap_probe(struct platform_device *pdev)
|
|
|
return -ENODEV;
|
|
|
}
|
|
|
|
|
|
- if (!request_mem_region(mem->start, resource_size(mem),
|
|
|
+ if (!devm_request_mem_region(&pdev->dev, mem->start, resource_size(mem),
|
|
|
pdev->dev.driver->name)) {
|
|
|
dev_err(&pdev->dev, "memory region already claimed\n");
|
|
|
return -EBUSY;
|
|
|
}
|
|
|
|
|
|
dma_rx = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx");
|
|
|
- if (!dma_rx) {
|
|
|
- ret = -EINVAL;
|
|
|
- goto err;
|
|
|
- }
|
|
|
+ if (!dma_rx)
|
|
|
+ return -ENXIO;
|
|
|
|
|
|
dma_tx = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx");
|
|
|
- if (!dma_tx) {
|
|
|
- ret = -EINVAL;
|
|
|
- goto err;
|
|
|
- }
|
|
|
+ if (!dma_tx)
|
|
|
+ return -ENXIO;
|
|
|
+
|
|
|
+ up = devm_kzalloc(&pdev->dev, sizeof(*up), GFP_KERNEL);
|
|
|
+ if (!up)
|
|
|
+ return -ENOMEM;
|
|
|
|
|
|
- up = kzalloc(sizeof(*up), GFP_KERNEL);
|
|
|
- if (up == NULL) {
|
|
|
- ret = -ENOMEM;
|
|
|
- goto do_release_region;
|
|
|
- }
|
|
|
up->pdev = pdev;
|
|
|
up->port.dev = &pdev->dev;
|
|
|
up->port.type = PORT_OMAP;
|
|
@@ -1423,16 +1418,17 @@ static int serial_omap_probe(struct platform_device *pdev)
|
|
|
dev_err(&pdev->dev, "failed to get alias/pdev id, errno %d\n",
|
|
|
up->port.line);
|
|
|
ret = -ENODEV;
|
|
|
- goto err;
|
|
|
+ goto err_port_line;
|
|
|
}
|
|
|
|
|
|
sprintf(up->name, "OMAP UART%d", up->port.line);
|
|
|
up->port.mapbase = mem->start;
|
|
|
- up->port.membase = ioremap(mem->start, resource_size(mem));
|
|
|
+ up->port.membase = devm_ioremap(&pdev->dev, mem->start,
|
|
|
+ resource_size(mem));
|
|
|
if (!up->port.membase) {
|
|
|
dev_err(&pdev->dev, "can't ioremap UART\n");
|
|
|
ret = -ENOMEM;
|
|
|
- goto err;
|
|
|
+ goto err_ioremap;
|
|
|
}
|
|
|
|
|
|
up->port.flags = omap_up_info->flags;
|
|
@@ -1478,16 +1474,19 @@ static int serial_omap_probe(struct platform_device *pdev)
|
|
|
|
|
|
ret = uart_add_one_port(&serial_omap_reg, &up->port);
|
|
|
if (ret != 0)
|
|
|
- goto do_release_region;
|
|
|
+ goto err_add_port;
|
|
|
|
|
|
pm_runtime_put(&pdev->dev);
|
|
|
platform_set_drvdata(pdev, up);
|
|
|
return 0;
|
|
|
-err:
|
|
|
+
|
|
|
+err_add_port:
|
|
|
+ pm_runtime_put(&pdev->dev);
|
|
|
+ pm_runtime_disable(&pdev->dev);
|
|
|
+err_ioremap:
|
|
|
+err_port_line:
|
|
|
dev_err(&pdev->dev, "[UART%d]: failure [%s]: %d\n",
|
|
|
pdev->id, __func__, ret);
|
|
|
-do_release_region:
|
|
|
- release_mem_region(mem->start, resource_size(mem));
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -1499,8 +1498,6 @@ static int serial_omap_remove(struct platform_device *dev)
|
|
|
pm_runtime_disable(&up->pdev->dev);
|
|
|
uart_remove_one_port(&serial_omap_reg, &up->port);
|
|
|
pm_qos_remove_request(&up->pm_qos_request);
|
|
|
-
|
|
|
- kfree(up);
|
|
|
}
|
|
|
|
|
|
platform_set_drvdata(dev, NULL);
|