struct fsl_espi *espi;
int ret;
- host = spi_alloc_host(dev, sizeof(struct fsl_espi));
+ host = devm_spi_alloc_host(dev, sizeof(struct fsl_espi));
if (!host)
return -ENOMEM;
espi->spibrg = fsl_get_sys_freq();
if (espi->spibrg == -1) {
dev_err(dev, "Can't get sys frequency!\n");
- ret = -EINVAL;
- goto err_probe;
+ return -EINVAL;
}
/* determined by clock divider fields DIV16/PM in register SPMODEx */
host->min_speed_hz = DIV_ROUND_UP(espi->spibrg, 4 * 16 * 16);
init_completion(&espi->done);
espi->reg_base = devm_ioremap_resource(dev, mem);
- if (IS_ERR(espi->reg_base)) {
- ret = PTR_ERR(espi->reg_base);
- goto err_probe;
- }
+ if (IS_ERR(espi->reg_base))
+ return PTR_ERR(espi->reg_base);
/* Register for SPI Interrupt */
ret = devm_request_irq(dev, irq, fsl_espi_irq, 0, "fsl_espi", espi);
if (ret)
- goto err_probe;
+ return ret;
fsl_espi_init_regs(dev, true);
pm_runtime_put_noidle(dev);
pm_runtime_disable(dev);
pm_runtime_set_suspended(dev);
-err_probe:
- spi_controller_put(host);
+
return ret;
}
{
struct spi_controller *host = platform_get_drvdata(dev);
- spi_controller_get(host);
-
spi_unregister_controller(host);
pm_runtime_disable(&dev->dev);
-
- spi_controller_put(host);
}
#ifdef CONFIG_PM_SLEEP