forked from luck/tmp_suning_uos_patched
spi: Fixes for v4.10
The usual small smattering of driver specific fixes. A few bits that stand out here: - The R-Car patches adding fallbacks are just adding new compatible strings to the driver so that device trees are written in a more robustly future proof fashion, this isn't strictly a fix but it's just new IDs and it's better to get it into mainline sooner to improve the ABI. - The DesignWare "switch to new API part 2" patch is actually a misleadingly titled fix for a bit that got missed in the original conversion. -----BEGIN PGP SIGNATURE----- iQFHBAABCAAxFiEEreZoqmdXGLWf4p/qJNaLcl1Uh9AFAliA0xcTHGJyb29uaWVA a2VybmVsLm9yZwAKCRAk1otyXVSH0O/kB/9XpR63v5Ej1surlHLJdX7GEk1Oaoy9 CoCHcwBCPfAlLstkVARbvQegdEl3WKZ7FFhIRKhuiW62hVPV8otOv6chyX++zdWo sYcLHESyuVDydvFdsoMZOvxP22tUNGom6Dhmsf2sXSbWwV/Q2yFahouhAeMPZJ+c kiZ1OUqae6YIL8EIt0fIFiLp1m2vVpXPLYAYr24a6G4P7nrnLwdMfD2+NnbE9YG8 5zTkFrzh7d7izj3QqGGvW/zMPB7fvP+kY2MdDHx2/lEFjMB4qg/i6C+8bRZGRnWO FE3Z++LDQZmKpKcPKZlV53yiX1anEpR3mpKGEGSon9zZlBRZhvYJGZtN =EoLd -----END PGP SIGNATURE----- Merge tag 'spi-fix-v4.10-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi Pull spi fixes from Mark Brown: "The usual small smattering of driver specific fixes. A few bits that stand out here: - the R-Car patches adding fallbacks are just adding new compatible strings to the driver so that device trees are written in a more robustly future proof fashion, this isn't strictly a fix but it's just new IDs and it's better to get it into mainline sooner to improve the ABI - the DesignWare "switch to new API part 2" patch is actually a misleadingly titled fix for a bit that got missed in the original conversion" * tag 'spi-fix-v4.10-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi: spi: davinci: use dma_mapping_error() spi: spi-axi: Free resources on error path spi: pxa2xx: add missed break spi: dw-mid: switch to new dmaengine_terminate_* API (part 2) spi: dw: Make debugfs name unique between instances spi: sh-msiof: Do not use C++ style comment spi: armada-3700: Set mode bits correctly spi: armada-3700: fix unsigned compare than zero on irq spi: sh-msiof: Add R-Car Gen 2 and 3 fallback bindings spi: SPI_FSL_DSPI should depend on HAS_DMA
This commit is contained in:
commit
cca112ecf2
|
@ -1,17 +1,23 @@
|
||||||
Renesas MSIOF spi controller
|
Renesas MSIOF spi controller
|
||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
- compatible : "renesas,msiof-<soctype>" for SoCs,
|
- compatible : "renesas,msiof-r8a7790" (R-Car H2)
|
||||||
"renesas,sh-msiof" for SuperH, or
|
|
||||||
"renesas,sh-mobile-msiof" for SH Mobile series.
|
|
||||||
Examples with soctypes are:
|
|
||||||
"renesas,msiof-r8a7790" (R-Car H2)
|
|
||||||
"renesas,msiof-r8a7791" (R-Car M2-W)
|
"renesas,msiof-r8a7791" (R-Car M2-W)
|
||||||
"renesas,msiof-r8a7792" (R-Car V2H)
|
"renesas,msiof-r8a7792" (R-Car V2H)
|
||||||
"renesas,msiof-r8a7793" (R-Car M2-N)
|
"renesas,msiof-r8a7793" (R-Car M2-N)
|
||||||
"renesas,msiof-r8a7794" (R-Car E2)
|
"renesas,msiof-r8a7794" (R-Car E2)
|
||||||
"renesas,msiof-r8a7796" (R-Car M3-W)
|
"renesas,msiof-r8a7796" (R-Car M3-W)
|
||||||
"renesas,msiof-sh73a0" (SH-Mobile AG5)
|
"renesas,msiof-sh73a0" (SH-Mobile AG5)
|
||||||
|
"renesas,sh-mobile-msiof" (generic SH-Mobile compatibile device)
|
||||||
|
"renesas,rcar-gen2-msiof" (generic R-Car Gen2 compatible device)
|
||||||
|
"renesas,rcar-gen3-msiof" (generic R-Car Gen3 compatible device)
|
||||||
|
"renesas,sh-msiof" (deprecated)
|
||||||
|
|
||||||
|
When compatible with the generic version, nodes
|
||||||
|
must list the SoC-specific version corresponding
|
||||||
|
to the platform first followed by the generic
|
||||||
|
version.
|
||||||
|
|
||||||
- reg : A list of offsets and lengths of the register sets for
|
- reg : A list of offsets and lengths of the register sets for
|
||||||
the device.
|
the device.
|
||||||
If only one register set is present, it is to be used
|
If only one register set is present, it is to be used
|
||||||
|
@ -61,7 +67,8 @@ Documentation/devicetree/bindings/pinctrl/renesas,*.
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
msiof0: spi@e6e20000 {
|
msiof0: spi@e6e20000 {
|
||||||
compatible = "renesas,msiof-r8a7791";
|
compatible = "renesas,msiof-r8a7791",
|
||||||
|
"renesas,rcar-gen2-msiof";
|
||||||
reg = <0 0xe6e20000 0 0x0064>;
|
reg = <0 0xe6e20000 0 0x0064>;
|
||||||
interrupts = <0 156 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <0 156 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
clocks = <&mstp0_clks R8A7791_CLK_MSIOF0>;
|
clocks = <&mstp0_clks R8A7791_CLK_MSIOF0>;
|
||||||
|
|
|
@ -378,6 +378,7 @@ config SPI_FSL_SPI
|
||||||
config SPI_FSL_DSPI
|
config SPI_FSL_DSPI
|
||||||
tristate "Freescale DSPI controller"
|
tristate "Freescale DSPI controller"
|
||||||
select REGMAP_MMIO
|
select REGMAP_MMIO
|
||||||
|
depends on HAS_DMA
|
||||||
depends on SOC_VF610 || SOC_LS1021A || ARCH_LAYERSCAPE || COMPILE_TEST
|
depends on SOC_VF610 || SOC_LS1021A || ARCH_LAYERSCAPE || COMPILE_TEST
|
||||||
help
|
help
|
||||||
This enables support for the Freescale DSPI controller in master
|
This enables support for the Freescale DSPI controller in master
|
||||||
|
|
|
@ -800,7 +800,7 @@ static int a3700_spi_probe(struct platform_device *pdev)
|
||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
struct a3700_spi *spi;
|
struct a3700_spi *spi;
|
||||||
u32 num_cs = 0;
|
u32 num_cs = 0;
|
||||||
int ret = 0;
|
int irq, ret = 0;
|
||||||
|
|
||||||
master = spi_alloc_master(dev, sizeof(*spi));
|
master = spi_alloc_master(dev, sizeof(*spi));
|
||||||
if (!master) {
|
if (!master) {
|
||||||
|
@ -825,7 +825,7 @@ static int a3700_spi_probe(struct platform_device *pdev)
|
||||||
master->unprepare_message = a3700_spi_unprepare_message;
|
master->unprepare_message = a3700_spi_unprepare_message;
|
||||||
master->set_cs = a3700_spi_set_cs;
|
master->set_cs = a3700_spi_set_cs;
|
||||||
master->flags = SPI_MASTER_HALF_DUPLEX;
|
master->flags = SPI_MASTER_HALF_DUPLEX;
|
||||||
master->mode_bits |= (SPI_RX_DUAL | SPI_RX_DUAL |
|
master->mode_bits |= (SPI_RX_DUAL | SPI_TX_DUAL |
|
||||||
SPI_RX_QUAD | SPI_TX_QUAD);
|
SPI_RX_QUAD | SPI_TX_QUAD);
|
||||||
|
|
||||||
platform_set_drvdata(pdev, master);
|
platform_set_drvdata(pdev, master);
|
||||||
|
@ -846,12 +846,13 @@ static int a3700_spi_probe(struct platform_device *pdev)
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
spi->irq = platform_get_irq(pdev, 0);
|
irq = platform_get_irq(pdev, 0);
|
||||||
if (spi->irq < 0) {
|
if (irq < 0) {
|
||||||
dev_err(dev, "could not get irq: %d\n", spi->irq);
|
dev_err(dev, "could not get irq: %d\n", irq);
|
||||||
ret = -ENXIO;
|
ret = -ENXIO;
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
spi->irq = irq;
|
||||||
|
|
||||||
init_completion(&spi->done);
|
init_completion(&spi->done);
|
||||||
|
|
||||||
|
|
|
@ -494,7 +494,8 @@ static int spi_engine_probe(struct platform_device *pdev)
|
||||||
SPI_ENGINE_VERSION_MAJOR(version),
|
SPI_ENGINE_VERSION_MAJOR(version),
|
||||||
SPI_ENGINE_VERSION_MINOR(version),
|
SPI_ENGINE_VERSION_MINOR(version),
|
||||||
SPI_ENGINE_VERSION_PATCH(version));
|
SPI_ENGINE_VERSION_PATCH(version));
|
||||||
return -ENODEV;
|
ret = -ENODEV;
|
||||||
|
goto err_put_master;
|
||||||
}
|
}
|
||||||
|
|
||||||
spi_engine->clk = devm_clk_get(&pdev->dev, "s_axi_aclk");
|
spi_engine->clk = devm_clk_get(&pdev->dev, "s_axi_aclk");
|
||||||
|
|
|
@ -646,7 +646,7 @@ static int davinci_spi_bufs(struct spi_device *spi, struct spi_transfer *t)
|
||||||
buf = t->rx_buf;
|
buf = t->rx_buf;
|
||||||
t->rx_dma = dma_map_single(&spi->dev, buf,
|
t->rx_dma = dma_map_single(&spi->dev, buf,
|
||||||
t->len, DMA_FROM_DEVICE);
|
t->len, DMA_FROM_DEVICE);
|
||||||
if (!t->rx_dma) {
|
if (dma_mapping_error(&spi->dev, !t->rx_dma)) {
|
||||||
ret = -EFAULT;
|
ret = -EFAULT;
|
||||||
goto err_rx_map;
|
goto err_rx_map;
|
||||||
}
|
}
|
||||||
|
@ -660,7 +660,7 @@ static int davinci_spi_bufs(struct spi_device *spi, struct spi_transfer *t)
|
||||||
buf = (void *)t->tx_buf;
|
buf = (void *)t->tx_buf;
|
||||||
t->tx_dma = dma_map_single(&spi->dev, buf,
|
t->tx_dma = dma_map_single(&spi->dev, buf,
|
||||||
t->len, DMA_TO_DEVICE);
|
t->len, DMA_TO_DEVICE);
|
||||||
if (!t->tx_dma) {
|
if (dma_mapping_error(&spi->dev, t->tx_dma)) {
|
||||||
ret = -EFAULT;
|
ret = -EFAULT;
|
||||||
goto err_tx_map;
|
goto err_tx_map;
|
||||||
}
|
}
|
||||||
|
|
|
@ -274,11 +274,11 @@ static int mid_spi_dma_transfer(struct dw_spi *dws, struct spi_transfer *xfer)
|
||||||
static void mid_spi_dma_stop(struct dw_spi *dws)
|
static void mid_spi_dma_stop(struct dw_spi *dws)
|
||||||
{
|
{
|
||||||
if (test_bit(TX_BUSY, &dws->dma_chan_busy)) {
|
if (test_bit(TX_BUSY, &dws->dma_chan_busy)) {
|
||||||
dmaengine_terminate_all(dws->txchan);
|
dmaengine_terminate_sync(dws->txchan);
|
||||||
clear_bit(TX_BUSY, &dws->dma_chan_busy);
|
clear_bit(TX_BUSY, &dws->dma_chan_busy);
|
||||||
}
|
}
|
||||||
if (test_bit(RX_BUSY, &dws->dma_chan_busy)) {
|
if (test_bit(RX_BUSY, &dws->dma_chan_busy)) {
|
||||||
dmaengine_terminate_all(dws->rxchan);
|
dmaengine_terminate_sync(dws->rxchan);
|
||||||
clear_bit(RX_BUSY, &dws->dma_chan_busy);
|
clear_bit(RX_BUSY, &dws->dma_chan_busy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,7 +107,10 @@ static const struct file_operations dw_spi_regs_ops = {
|
||||||
|
|
||||||
static int dw_spi_debugfs_init(struct dw_spi *dws)
|
static int dw_spi_debugfs_init(struct dw_spi *dws)
|
||||||
{
|
{
|
||||||
dws->debugfs = debugfs_create_dir("dw_spi", NULL);
|
char name[128];
|
||||||
|
|
||||||
|
snprintf(name, 128, "dw_spi-%s", dev_name(&dws->master->dev));
|
||||||
|
dws->debugfs = debugfs_create_dir(name, NULL);
|
||||||
if (!dws->debugfs)
|
if (!dws->debugfs)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
|
|
@ -1690,6 +1690,7 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)
|
||||||
pxa2xx_spi_write(drv_data, SSCR1, tmp);
|
pxa2xx_spi_write(drv_data, SSCR1, tmp);
|
||||||
tmp = SSCR0_SCR(2) | SSCR0_Motorola | SSCR0_DataSize(8);
|
tmp = SSCR0_SCR(2) | SSCR0_Motorola | SSCR0_DataSize(8);
|
||||||
pxa2xx_spi_write(drv_data, SSCR0, tmp);
|
pxa2xx_spi_write(drv_data, SSCR0, tmp);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
tmp = SSCR1_RxTresh(RX_THRESH_DFLT) |
|
tmp = SSCR1_RxTresh(RX_THRESH_DFLT) |
|
||||||
SSCR1_TxTresh(TX_THRESH_DFLT);
|
SSCR1_TxTresh(TX_THRESH_DFLT);
|
||||||
|
|
|
@ -973,14 +973,16 @@ static const struct sh_msiof_chipdata r8a779x_data = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct of_device_id sh_msiof_match[] = {
|
static const struct of_device_id sh_msiof_match[] = {
|
||||||
{ .compatible = "renesas,sh-msiof", .data = &sh_data },
|
|
||||||
{ .compatible = "renesas,sh-mobile-msiof", .data = &sh_data },
|
{ .compatible = "renesas,sh-mobile-msiof", .data = &sh_data },
|
||||||
{ .compatible = "renesas,msiof-r8a7790", .data = &r8a779x_data },
|
{ .compatible = "renesas,msiof-r8a7790", .data = &r8a779x_data },
|
||||||
{ .compatible = "renesas,msiof-r8a7791", .data = &r8a779x_data },
|
{ .compatible = "renesas,msiof-r8a7791", .data = &r8a779x_data },
|
||||||
{ .compatible = "renesas,msiof-r8a7792", .data = &r8a779x_data },
|
{ .compatible = "renesas,msiof-r8a7792", .data = &r8a779x_data },
|
||||||
{ .compatible = "renesas,msiof-r8a7793", .data = &r8a779x_data },
|
{ .compatible = "renesas,msiof-r8a7793", .data = &r8a779x_data },
|
||||||
{ .compatible = "renesas,msiof-r8a7794", .data = &r8a779x_data },
|
{ .compatible = "renesas,msiof-r8a7794", .data = &r8a779x_data },
|
||||||
|
{ .compatible = "renesas,rcar-gen2-msiof", .data = &r8a779x_data },
|
||||||
{ .compatible = "renesas,msiof-r8a7796", .data = &r8a779x_data },
|
{ .compatible = "renesas,msiof-r8a7796", .data = &r8a779x_data },
|
||||||
|
{ .compatible = "renesas,rcar-gen3-msiof", .data = &r8a779x_data },
|
||||||
|
{ .compatible = "renesas,sh-msiof", .data = &sh_data }, /* Deprecated */
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(of, sh_msiof_match);
|
MODULE_DEVICE_TABLE(of, sh_msiof_match);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user