Skip to content

Commit

Permalink
Merge remote-tracking branch 'spi/for-5.11' into spi-next
Browse files Browse the repository at this point in the history
  • Loading branch information
broonie committed Dec 8, 2020
2 parents cea96c6 + 7634734 commit 37e85f1
Show file tree
Hide file tree
Showing 40 changed files with 376 additions and 220 deletions.
10 changes: 6 additions & 4 deletions Documentation/devicetree/bindings/spi/spi-sifive.yaml
Expand Up @@ -17,15 +17,17 @@ allOf:
properties:
compatible:
items:
- const: sifive,fu540-c000-spi
- enum:
- sifive,fu540-c000-spi
- sifive,fu740-c000-spi
- const: sifive,spi0

description:
Should be "sifive,<chip>-spi" and "sifive,spi<version>".
Supported compatible strings are -
"sifive,fu540-c000-spi" for the SiFive SPI v0 as integrated
onto the SiFive FU540 chip, and "sifive,spi0" for the SiFive
SPI v0 IP block with no chip integration tweaks.
"sifive,fu540-c000-spi" and "sifive,fu740-c000-spi" for the SiFive SPI v0
as integrated onto the SiFive FU540 and FU740 chip resp, and "sifive,spi0"
for the SiFive SPI v0 IP block with no chip integration tweaks.
Please refer to sifive-blocks-ip-versioning.txt for details

SPI RTL that corresponds to the IP block version numbers can be found here -
Expand Down
3 changes: 2 additions & 1 deletion drivers/input/touchscreen/ads7846.c
Expand Up @@ -1288,7 +1288,8 @@ static int ads7846_probe(struct spi_device *spi)
* may not. So we stick to very-portable 8 bit words, both RX and TX.
*/
spi->bits_per_word = 8;
spi->mode = SPI_MODE_0;
spi->mode &= ~SPI_MODE_X_MASK;
spi->mode |= SPI_MODE_0;
err = spi_setup(spi);
if (err < 0)
return err;
Expand Down
5 changes: 3 additions & 2 deletions drivers/media/pci/netup_unidvb/netup_unidvb_spi.c
Expand Up @@ -175,7 +175,7 @@ int netup_spi_init(struct netup_unidvb_dev *ndev)
struct spi_master *master;
struct netup_spi *nspi;

master = spi_alloc_master(&ndev->pci_dev->dev,
master = devm_spi_alloc_master(&ndev->pci_dev->dev,
sizeof(struct netup_spi));
if (!master) {
dev_err(&ndev->pci_dev->dev,
Expand Down Expand Up @@ -208,6 +208,7 @@ int netup_spi_init(struct netup_unidvb_dev *ndev)
ndev->pci_slot,
ndev->pci_func);
if (!spi_new_device(master, &netup_spi_board)) {
spi_unregister_master(master);
ndev->spi = NULL;
dev_err(&ndev->pci_dev->dev,
"%s(): unable to create SPI device\n", __func__);
Expand All @@ -226,13 +227,13 @@ void netup_spi_release(struct netup_unidvb_dev *ndev)
if (!spi)
return;

spi_unregister_master(spi->master);
spin_lock_irqsave(&spi->lock, flags);
reg = readw(&spi->regs->control_stat);
writew(reg | NETUP_SPI_CTRL_IRQ, &spi->regs->control_stat);
reg = readw(&spi->regs->control_stat);
writew(reg & ~NETUP_SPI_CTRL_IMASK, &spi->regs->control_stat);
spin_unlock_irqrestore(&spi->lock, flags);
spi_unregister_master(spi->master);
ndev->spi = NULL;
}

Expand Down
42 changes: 19 additions & 23 deletions drivers/spi/atmel-quadspi.c
Expand Up @@ -365,10 +365,14 @@ static int atmel_qspi_set_cfg(struct atmel_qspi *aq,
if (dummy_cycles)
ifr |= QSPI_IFR_NBDUM(dummy_cycles);

/* Set data enable */
if (op->data.nbytes)
/* Set data enable and data transfer type. */
if (op->data.nbytes) {
ifr |= QSPI_IFR_DATAEN;

if (op->addr.nbytes)
ifr |= QSPI_IFR_TFRTYP_MEM;
}

/*
* If the QSPI controller is set in regular SPI mode, set it in
* Serial Memory Mode (SMM).
Expand All @@ -381,27 +385,24 @@ static int atmel_qspi_set_cfg(struct atmel_qspi *aq,
/* Clear pending interrupts */
(void)atmel_qspi_read(aq, QSPI_SR);

if (aq->caps->has_ricr) {
if (!op->addr.nbytes && op->data.dir == SPI_MEM_DATA_IN)
ifr |= QSPI_IFR_APBTFRTYP_READ;

/* Set QSPI Instruction Frame registers */
/* Set QSPI Instruction Frame registers. */
if (op->addr.nbytes && !op->data.nbytes)
atmel_qspi_write(iar, aq, QSPI_IAR);

if (aq->caps->has_ricr) {
if (op->data.dir == SPI_MEM_DATA_IN)
atmel_qspi_write(icr, aq, QSPI_RICR);
else
atmel_qspi_write(icr, aq, QSPI_WICR);
atmel_qspi_write(ifr, aq, QSPI_IFR);
} else {
if (op->data.dir == SPI_MEM_DATA_OUT)
if (op->data.nbytes && op->data.dir == SPI_MEM_DATA_OUT)
ifr |= QSPI_IFR_SAMA5D2_WRITE_TRSFR;

/* Set QSPI Instruction Frame registers */
atmel_qspi_write(iar, aq, QSPI_IAR);
atmel_qspi_write(icr, aq, QSPI_ICR);
atmel_qspi_write(ifr, aq, QSPI_IFR);
}

atmel_qspi_write(ifr, aq, QSPI_IFR);

return 0;
}

Expand Down Expand Up @@ -535,7 +536,7 @@ static int atmel_qspi_probe(struct platform_device *pdev)
struct resource *res;
int irq, err = 0;

ctrl = spi_alloc_master(&pdev->dev, sizeof(*aq));
ctrl = devm_spi_alloc_master(&pdev->dev, sizeof(*aq));
if (!ctrl)
return -ENOMEM;

Expand All @@ -557,17 +558,15 @@ static int atmel_qspi_probe(struct platform_device *pdev)
aq->regs = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(aq->regs)) {
dev_err(&pdev->dev, "missing registers\n");
err = PTR_ERR(aq->regs);
goto exit;
return PTR_ERR(aq->regs);
}

/* Map the AHB memory */
res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "qspi_mmap");
aq->mem = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(aq->mem)) {
dev_err(&pdev->dev, "missing AHB memory\n");
err = PTR_ERR(aq->mem);
goto exit;
return PTR_ERR(aq->mem);
}

aq->mmap_size = resource_size(res);
Expand All @@ -579,22 +578,21 @@ static int atmel_qspi_probe(struct platform_device *pdev)

if (IS_ERR(aq->pclk)) {
dev_err(&pdev->dev, "missing peripheral clock\n");
err = PTR_ERR(aq->pclk);
goto exit;
return PTR_ERR(aq->pclk);
}

/* Enable the peripheral clock */
err = clk_prepare_enable(aq->pclk);
if (err) {
dev_err(&pdev->dev, "failed to enable the peripheral clock\n");
goto exit;
return err;
}

aq->caps = of_device_get_match_data(&pdev->dev);
if (!aq->caps) {
dev_err(&pdev->dev, "Could not retrieve QSPI caps\n");
err = -EINVAL;
goto exit;
goto disable_pclk;
}

if (aq->caps->has_qspick) {
Expand Down Expand Up @@ -638,8 +636,6 @@ static int atmel_qspi_probe(struct platform_device *pdev)
clk_disable_unprepare(aq->qspick);
disable_pclk:
clk_disable_unprepare(aq->pclk);
exit:
spi_controller_put(ctrl);

return err;
}
Expand Down
5 changes: 1 addition & 4 deletions drivers/spi/spi-amd.c
Expand Up @@ -250,7 +250,6 @@ static int amd_spi_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev;
struct spi_master *master;
struct amd_spi *amd_spi;
struct resource *res;
int err = 0;

/* Allocate storage for spi_master and driver private data */
Expand All @@ -261,9 +260,7 @@ static int amd_spi_probe(struct platform_device *pdev)
}

amd_spi = spi_master_get_devdata(master);

res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
amd_spi->io_remap_addr = devm_ioremap_resource(&pdev->dev, res);
amd_spi->io_remap_addr = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(amd_spi->io_remap_addr)) {
err = PTR_ERR(amd_spi->io_remap_addr);
dev_err(dev, "error %d ioremap of SPI registers failed\n", err);
Expand Down
14 changes: 11 additions & 3 deletions drivers/spi/spi-ar934x.c
Expand Up @@ -176,10 +176,11 @@ static int ar934x_spi_probe(struct platform_device *pdev)
if (ret)
return ret;

ctlr = spi_alloc_master(&pdev->dev, sizeof(*sp));
ctlr = devm_spi_alloc_master(&pdev->dev, sizeof(*sp));
if (!ctlr) {
dev_info(&pdev->dev, "failed to allocate spi controller\n");
return -ENOMEM;
ret = -ENOMEM;
goto err_clk_disable;
}

/* disable flash mapping and expose spi controller registers */
Expand All @@ -202,7 +203,13 @@ static int ar934x_spi_probe(struct platform_device *pdev)
sp->clk_freq = clk_get_rate(clk);
sp->ctlr = ctlr;

return devm_spi_register_controller(&pdev->dev, ctlr);
ret = spi_register_controller(ctlr);
if (!ret)
return 0;

err_clk_disable:
clk_disable_unprepare(clk);
return ret;
}

static int ar934x_spi_remove(struct platform_device *pdev)
Expand All @@ -213,6 +220,7 @@ static int ar934x_spi_remove(struct platform_device *pdev)
ctlr = dev_get_drvdata(&pdev->dev);
sp = spi_controller_get_devdata(ctlr);

spi_unregister_controller(ctlr);
clk_disable_unprepare(sp->clk);

return 0;
Expand Down
6 changes: 3 additions & 3 deletions drivers/spi/spi-atmel.c
Expand Up @@ -512,8 +512,8 @@ static int atmel_spi_configure_dma(struct spi_master *master,

master->dma_tx = dma_request_chan(dev, "tx");
if (IS_ERR(master->dma_tx)) {
err = dev_err_probe(dev, PTR_ERR(master->dma_tx),
"No TX DMA channel, DMA is disabled\n");
err = PTR_ERR(master->dma_tx);
dev_dbg(dev, "No TX DMA channel, DMA is disabled\n");
goto error_clear;
}

Expand All @@ -524,7 +524,7 @@ static int atmel_spi_configure_dma(struct spi_master *master,
* No reason to check EPROBE_DEFER here since we have already
* requested tx channel.
*/
dev_err(dev, "No RX DMA channel, DMA is disabled\n");
dev_dbg(dev, "No RX DMA channel, DMA is disabled\n");
goto error;
}

Expand Down
4 changes: 3 additions & 1 deletion drivers/spi/spi-bcm63xx-hsspi.c
Expand Up @@ -494,8 +494,10 @@ static int bcm63xx_hsspi_resume(struct device *dev)

if (bs->pll_clk) {
ret = clk_prepare_enable(bs->pll_clk);
if (ret)
if (ret) {
clk_disable_unprepare(bs->clk);
return ret;
}
}

spi_master_resume(master);
Expand Down
2 changes: 1 addition & 1 deletion drivers/spi/spi-davinci.c
Expand Up @@ -1040,13 +1040,13 @@ static int davinci_spi_remove(struct platform_device *pdev)
spi_bitbang_stop(&dspi->bitbang);

clk_disable_unprepare(dspi->clk);
spi_master_put(master);

if (dspi->dma_rx) {
dma_release_channel(dspi->dma_rx);
dma_release_channel(dspi->dma_tx);
}

spi_master_put(master);
return 0;
}

Expand Down
2 changes: 1 addition & 1 deletion drivers/spi/spi-dw-bt1.c
Expand Up @@ -217,7 +217,7 @@ static int dw_spi_bt1_sys_init(struct platform_device *pdev,
if (mem) {
dwsbt1->map = devm_ioremap_resource(&pdev->dev, mem);
if (!IS_ERR(dwsbt1->map)) {
dwsbt1->map_len = (mem->end - mem->start + 1);
dwsbt1->map_len = resource_size(mem);
dws->mem_ops.dirmap_create = dw_spi_bt1_dirmap_create;
dws->mem_ops.dirmap_read = dw_spi_bt1_dirmap_read;
} else {
Expand Down
3 changes: 1 addition & 2 deletions drivers/spi/spi-geni-qcom.c
Expand Up @@ -603,7 +603,7 @@ static int spi_geni_probe(struct platform_device *pdev)
if (IS_ERR(clk))
return PTR_ERR(clk);

spi = spi_alloc_master(dev, sizeof(*mas));
spi = devm_spi_alloc_master(dev, sizeof(*mas));
if (!spi)
return -ENOMEM;

Expand Down Expand Up @@ -673,7 +673,6 @@ static int spi_geni_probe(struct platform_device *pdev)
free_irq(mas->irq, spi);
spi_geni_probe_runtime_disable:
pm_runtime_disable(dev);
spi_master_put(spi);
dev_pm_opp_of_remove_table(&pdev->dev);
put_clkname:
dev_pm_opp_put_clkname(mas->se.opp_table);
Expand Down
15 changes: 2 additions & 13 deletions drivers/spi/spi-gpio.c
Expand Up @@ -350,11 +350,6 @@ static int spi_gpio_probe_pdata(struct platform_device *pdev,
return 0;
}

static void spi_gpio_put(void *data)
{
spi_master_put(data);
}

static int spi_gpio_probe(struct platform_device *pdev)
{
int status;
Expand All @@ -363,16 +358,10 @@ static int spi_gpio_probe(struct platform_device *pdev)
struct device *dev = &pdev->dev;
struct spi_bitbang *bb;

master = spi_alloc_master(dev, sizeof(*spi_gpio));
master = devm_spi_alloc_master(dev, sizeof(*spi_gpio));
if (!master)
return -ENOMEM;

status = devm_add_action_or_reset(&pdev->dev, spi_gpio_put, master);
if (status) {
spi_master_put(master);
return status;
}

if (pdev->dev.of_node)
status = spi_gpio_probe_dt(pdev, master);
else
Expand Down Expand Up @@ -432,7 +421,7 @@ static int spi_gpio_probe(struct platform_device *pdev)
if (status)
return status;

return devm_spi_register_master(&pdev->dev, spi_master_get(master));
return devm_spi_register_master(&pdev->dev, master);
}

MODULE_ALIAS("platform:" DRIVER_NAME);
Expand Down
4 changes: 3 additions & 1 deletion drivers/spi/spi-img-spfi.c
Expand Up @@ -731,8 +731,10 @@ static int img_spfi_resume(struct device *dev)
int ret;

ret = pm_runtime_get_sync(dev);
if (ret)
if (ret) {
pm_runtime_put_noidle(dev);
return ret;
}
spfi_reset(spfi);
pm_runtime_put(dev);

Expand Down

0 comments on commit 37e85f1

Please sign in to comment.