struct octeon_spi *p;
int ret;
- host = spi_alloc_host(dev, sizeof(struct octeon_spi));
+ host = devm_spi_alloc_host(dev, sizeof(struct octeon_spi));
if (!host)
return -ENOMEM;
ret = pcim_enable_device(pdev);
if (ret)
- goto error;
+ return ret;
ret = pcim_request_all_regions(pdev, DRV_NAME);
if (ret)
- goto error;
+ return ret;
p->register_base = pcim_iomap(pdev, 0, pci_resource_len(pdev, 0));
- if (!p->register_base) {
- ret = -EINVAL;
- goto error;
- }
+ if (!p->register_base)
+ return -EINVAL;
p->regs.config = 0x1000;
p->regs.status = 0x1008;
p->regs.data = 0x1080;
p->clk = devm_clk_get_enabled(dev, NULL);
- if (IS_ERR(p->clk)) {
- ret = PTR_ERR(p->clk);
- goto error;
- }
+ if (IS_ERR(p->clk))
+ return PTR_ERR(p->clk);
p->sys_freq = clk_get_rate(p->clk);
if (!p->sys_freq)
pci_set_drvdata(pdev, host);
- ret = spi_register_controller(host);
- if (ret)
- goto error;
-
- return 0;
-
-error:
- spi_controller_put(host);
- return ret;
+ return spi_register_controller(host);
}
static void thunderx_spi_remove(struct pci_dev *pdev)
if (!p)
return;
- spi_controller_get(host);
-
spi_unregister_controller(host);
/* Put everything in a known state. */
writeq(0, p->register_base + OCTEON_SPI_CFG(p));
-
- spi_controller_put(host);
}
static const struct pci_device_id thunderx_spi_pci_id_table[] = {