Skip to content

Commit

Permalink
Merge remote-tracking branches 'spi/fix/complete', 'spi/fix/efm32', '…
Browse files Browse the repository at this point in the history
…spi/fix/omap2-mcspi' and 'spi/fix/qup' into spi-linus
  • Loading branch information
broonie committed Apr 10, 2014
5 parents 09c0998 + 0a6d387 + e287209 + a6f936d + 058f11c commit 6eadd84
Show file tree
Hide file tree
Showing 10 changed files with 35 additions and 28 deletions.
8 changes: 7 additions & 1 deletion Documentation/devicetree/bindings/spi/efm32-spi.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,13 @@ Required properties:
- interrupts: pair specifying rx and tx irq
- clocks: phandle to the spi clock
- cs-gpios: see spi-bus.txt
- efm32,location: Value to write to the ROUTE register's LOCATION bitfield to configure the pinmux for the device, see datasheet for values.

Recommended properties :
- efm32,location: Value to write to the ROUTE register's LOCATION bitfield to
configure the pinmux for the device, see datasheet for values.
If "efm32,location" property is not provided, keeping what is
already configured in the hardware, so its either the reset
default 0 or whatever the bootloader did.

Example:

Expand Down
2 changes: 1 addition & 1 deletion drivers/spi/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -383,7 +383,7 @@ config SPI_RSPI

config SPI_QUP
tristate "Qualcomm SPI controller with QUP interface"
depends on ARCH_MSM_DT || (ARM && COMPILE_TEST)
depends on ARCH_QCOM || (ARM && COMPILE_TEST)
help
Qualcomm Universal Peripheral (QUP) core is an AHB slave that
provides a common data path (an output FIFO and an input FIFO)
Expand Down
3 changes: 2 additions & 1 deletion drivers/spi/spi-fsl-espi.c
Original file line number Diff line number Diff line change
Expand Up @@ -441,7 +441,8 @@ static void fsl_espi_do_one_msg(struct spi_message *m)

m->actual_length = espi_trans.actual_length;
m->status = espi_trans.status;
m->complete(m->context);
if (m->complete)
m->complete(m->context);
}

static int fsl_espi_setup(struct spi_device *spi)
Expand Down
3 changes: 2 additions & 1 deletion drivers/spi/spi-fsl-spi.c
Original file line number Diff line number Diff line change
Expand Up @@ -408,7 +408,8 @@ static void fsl_spi_do_one_msg(struct spi_message *m)
}

m->status = status;
m->complete(m->context);
if (m->complete)
m->complete(m->context);

if (status || !cs_change) {
ndelay(nsecs);
Expand Down
3 changes: 2 additions & 1 deletion drivers/spi/spi-mpc512x-psc.c
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,8 @@ static int mpc512x_psc_spi_msg_xfer(struct spi_master *master,
}

m->status = status;
m->complete(m->context);
if (m->complete)
m->complete(m->context);

if (status || !cs_change)
mpc512x_psc_spi_deactivate_cs(spi);
Expand Down
3 changes: 2 additions & 1 deletion drivers/spi/spi-mpc52xx-psc.c
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,8 @@ static void mpc52xx_psc_spi_work(struct work_struct *work)
}

m->status = status;
m->complete(m->context);
if (m->complete)
m->complete(m->context);

if (status || !cs_change)
mpc52xx_psc_spi_deactivate_cs(spi);
Expand Down
6 changes: 4 additions & 2 deletions drivers/spi/spi-mpc52xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,8 @@ static int mpc52xx_spi_fsmstate_transfer(int irq, struct mpc52xx_spi *ms,
dev_err(&ms->master->dev, "mode fault\n");
mpc52xx_spi_chipsel(ms, 0);
ms->message->status = -EIO;
ms->message->complete(ms->message->context);
if (ms->message->complete)
ms->message->complete(ms->message->context);
ms->state = mpc52xx_spi_fsmstate_idle;
return FSM_CONTINUE;
}
Expand Down Expand Up @@ -288,7 +289,8 @@ mpc52xx_spi_fsmstate_wait(int irq, struct mpc52xx_spi *ms, u8 status, u8 data)
ms->msg_count++;
mpc52xx_spi_chipsel(ms, 0);
ms->message->status = 0;
ms->message->complete(ms->message->context);
if (ms->message->complete)
ms->message->complete(ms->message->context);
ms->state = mpc52xx_spi_fsmstate_idle;
return FSM_CONTINUE;
}
Expand Down
26 changes: 9 additions & 17 deletions drivers/spi/spi-omap2-mcspi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1379,12 +1379,13 @@ static int omap2_mcspi_probe(struct platform_device *pdev)

INIT_LIST_HEAD(&mcspi->ctx.cs);

mcspi->dma_channels = kcalloc(master->num_chipselect,
sizeof(struct omap2_mcspi_dma),
GFP_KERNEL);

if (mcspi->dma_channels == NULL)
mcspi->dma_channels = devm_kcalloc(&pdev->dev, master->num_chipselect,
sizeof(struct omap2_mcspi_dma),
GFP_KERNEL);
if (mcspi->dma_channels == NULL) {
status = -ENOMEM;
goto free_master;
}

for (i = 0; i < master->num_chipselect; i++) {
char *dma_rx_ch_name = mcspi->dma_channels[i].dma_rx_ch_name;
Expand Down Expand Up @@ -1426,7 +1427,7 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
}

if (status < 0)
goto dma_chnl_free;
goto free_master;

pm_runtime_use_autosuspend(&pdev->dev);
pm_runtime_set_autosuspend_delay(&pdev->dev, SPI_AUTOSUSPEND_TIMEOUT);
Expand All @@ -1444,28 +1445,19 @@ static int omap2_mcspi_probe(struct platform_device *pdev)

disable_pm:
pm_runtime_disable(&pdev->dev);
dma_chnl_free:
kfree(mcspi->dma_channels);
free_master:
spi_master_put(master);
return status;
}

static int omap2_mcspi_remove(struct platform_device *pdev)
{
struct spi_master *master;
struct omap2_mcspi *mcspi;
struct omap2_mcspi_dma *dma_channels;

master = platform_get_drvdata(pdev);
mcspi = spi_master_get_devdata(master);
dma_channels = mcspi->dma_channels;
struct spi_master *master = platform_get_drvdata(pdev);
struct omap2_mcspi *mcspi = spi_master_get_devdata(master);

pm_runtime_put_sync(mcspi->dev);
pm_runtime_disable(&pdev->dev);

kfree(dma_channels);

return 0;
}

Expand Down
6 changes: 4 additions & 2 deletions drivers/spi/spi-sh.c
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,8 @@ static void spi_sh_work(struct work_struct *work)
spin_lock_irqsave(&ss->lock, flags);

mesg->status = 0;
mesg->complete(mesg->context);
if (mesg->complete)
mesg->complete(mesg->context);
}

clear_fifo(ss);
Expand All @@ -340,7 +341,8 @@ static void spi_sh_work(struct work_struct *work)

error:
mesg->status = ret;
mesg->complete(mesg->context);
if (mesg->complete)
mesg->complete(mesg->context);

spi_sh_clear_bit(ss, SPI_SH_SSA | SPI_SH_SSDB | SPI_SH_SSD,
SPI_SH_CR1);
Expand Down
3 changes: 2 additions & 1 deletion drivers/spi/spi-txx9.c
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,8 @@ static void txx9spi_work_one(struct txx9spi *c, struct spi_message *m)

exit:
m->status = status;
m->complete(m->context);
if (m->complete)
m->complete(m->context);

/* normally deactivate chipselect ... unless no error and
* cs_change has hinted that the next message will probably
Expand Down

0 comments on commit 6eadd84

Please sign in to comment.