int ret;
pdev->id = of_alias_get_id(pdev->dev.of_node, "spi");
- sctlr = spi_alloc_host(&pdev->dev, sizeof(*ss));
+ sctlr = devm_spi_alloc_host(&pdev->dev, sizeof(*ss));
if (!sctlr)
return -ENOMEM;
ss = spi_controller_get_devdata(sctlr);
ss->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
- if (IS_ERR(ss->base)) {
- ret = PTR_ERR(ss->base);
- goto free_controller;
- }
+ if (IS_ERR(ss->base))
+ return PTR_ERR(ss->base);
ss->phy_base = res->start;
ss->dev = &pdev->dev;
platform_set_drvdata(pdev, sctlr);
ret = sprd_spi_clk_init(pdev, ss);
if (ret)
- goto free_controller;
+ return ret;
ret = sprd_spi_irq_init(pdev, ss);
if (ret)
- goto free_controller;
+ return ret;
ret = sprd_spi_dma_init(pdev, ss);
if (ret)
- goto free_controller;
+ return ret;
ret = clk_prepare_enable(ss->clk);
if (ret)
clk_disable_unprepare(ss->clk);
release_dma:
sprd_spi_dma_release(ss);
-free_controller:
- spi_controller_put(sctlr);
return ret;
}
if (ret < 0)
dev_err(ss->dev, "failed to resume SPI controller\n");
- spi_controller_get(sctlr);
-
spi_unregister_controller(sctlr);
if (ret >= 0) {
}
pm_runtime_put_noidle(&pdev->dev);
pm_runtime_disable(&pdev->dev);
-
- spi_controller_put(sctlr);
}
static int __maybe_unused sprd_spi_runtime_suspend(struct device *dev)