Skip to content

Commit 0c0c5b8

Browse files
committed
Merge remote-tracking branch 'spi/for-5.7' into spi-linus
2 parents 9cb1fd0 + 65e318e commit 0c0c5b8

File tree

10 files changed

+65
-49
lines changed

10 files changed

+65
-49
lines changed

drivers/spi/spi-axi-spi-engine.c

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -489,22 +489,6 @@ static int spi_engine_probe(struct platform_device *pdev)
489489

490490
spin_lock_init(&spi_engine->lock);
491491

492-
spi_engine->base = devm_platform_ioremap_resource(pdev, 0);
493-
if (IS_ERR(spi_engine->base)) {
494-
ret = PTR_ERR(spi_engine->base);
495-
goto err_put_master;
496-
}
497-
498-
version = readl(spi_engine->base + SPI_ENGINE_REG_VERSION);
499-
if (SPI_ENGINE_VERSION_MAJOR(version) != 1) {
500-
dev_err(&pdev->dev, "Unsupported peripheral version %u.%u.%c\n",
501-
SPI_ENGINE_VERSION_MAJOR(version),
502-
SPI_ENGINE_VERSION_MINOR(version),
503-
SPI_ENGINE_VERSION_PATCH(version));
504-
ret = -ENODEV;
505-
goto err_put_master;
506-
}
507-
508492
spi_engine->clk = devm_clk_get(&pdev->dev, "s_axi_aclk");
509493
if (IS_ERR(spi_engine->clk)) {
510494
ret = PTR_ERR(spi_engine->clk);
@@ -525,6 +509,22 @@ static int spi_engine_probe(struct platform_device *pdev)
525509
if (ret)
526510
goto err_clk_disable;
527511

512+
spi_engine->base = devm_platform_ioremap_resource(pdev, 0);
513+
if (IS_ERR(spi_engine->base)) {
514+
ret = PTR_ERR(spi_engine->base);
515+
goto err_ref_clk_disable;
516+
}
517+
518+
version = readl(spi_engine->base + SPI_ENGINE_REG_VERSION);
519+
if (SPI_ENGINE_VERSION_MAJOR(version) != 1) {
520+
dev_err(&pdev->dev, "Unsupported peripheral version %u.%u.%c\n",
521+
SPI_ENGINE_VERSION_MAJOR(version),
522+
SPI_ENGINE_VERSION_MINOR(version),
523+
SPI_ENGINE_VERSION_PATCH(version));
524+
ret = -ENODEV;
525+
goto err_ref_clk_disable;
526+
}
527+
528528
writel_relaxed(0x00, spi_engine->base + SPI_ENGINE_REG_RESET);
529529
writel_relaxed(0xff, spi_engine->base + SPI_ENGINE_REG_INT_PENDING);
530530
writel_relaxed(0x00, spi_engine->base + SPI_ENGINE_REG_INT_ENABLE);

drivers/spi/spi-bcm-qspi.c

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -612,19 +612,15 @@ static int update_qspi_trans_byte_count(struct bcm_qspi *qspi,
612612
if (qt->trans->cs_change &&
613613
(flags & TRANS_STATUS_BREAK_CS_CHANGE))
614614
ret |= TRANS_STATUS_BREAK_CS_CHANGE;
615-
if (ret)
616-
goto done;
617615

618-
dev_dbg(&qspi->pdev->dev, "advance msg exit\n");
619616
if (bcm_qspi_mspi_transfer_is_last(qspi, qt))
620-
ret = TRANS_STATUS_BREAK_EOM;
617+
ret |= TRANS_STATUS_BREAK_EOM;
621618
else
622-
ret = TRANS_STATUS_BREAK_NO_BYTES;
619+
ret |= TRANS_STATUS_BREAK_NO_BYTES;
623620

624621
qt->trans = NULL;
625622
}
626623

627-
done:
628624
dev_dbg(&qspi->pdev->dev, "trans %p len %d byte %d ret %x\n",
629625
qt->trans, qt->trans ? qt->trans->len : 0, qt->byte, ret);
630626
return ret;
@@ -670,15 +666,15 @@ static void read_from_hw(struct bcm_qspi *qspi, int slots)
670666
if (buf)
671667
buf[tp.byte] = read_rxram_slot_u8(qspi, slot);
672668
dev_dbg(&qspi->pdev->dev, "RD %02x\n",
673-
buf ? buf[tp.byte] : 0xff);
669+
buf ? buf[tp.byte] : 0x0);
674670
} else {
675671
u16 *buf = tp.trans->rx_buf;
676672

677673
if (buf)
678674
buf[tp.byte / 2] = read_rxram_slot_u16(qspi,
679675
slot);
680676
dev_dbg(&qspi->pdev->dev, "RD %04x\n",
681-
buf ? buf[tp.byte] : 0xffff);
677+
buf ? buf[tp.byte / 2] : 0x0);
682678
}
683679

684680
update_qspi_trans_byte_count(qspi, &tp,
@@ -733,13 +729,13 @@ static int write_to_hw(struct bcm_qspi *qspi, struct spi_device *spi)
733729
while (!tstatus && slot < MSPI_NUM_CDRAM) {
734730
if (tp.trans->bits_per_word <= 8) {
735731
const u8 *buf = tp.trans->tx_buf;
736-
u8 val = buf ? buf[tp.byte] : 0xff;
732+
u8 val = buf ? buf[tp.byte] : 0x00;
737733

738734
write_txram_slot_u8(qspi, slot, val);
739735
dev_dbg(&qspi->pdev->dev, "WR %02x\n", val);
740736
} else {
741737
const u16 *buf = tp.trans->tx_buf;
742-
u16 val = buf ? buf[tp.byte / 2] : 0xffff;
738+
u16 val = buf ? buf[tp.byte / 2] : 0x0000;
743739

744740
write_txram_slot_u16(qspi, slot, val);
745741
dev_dbg(&qspi->pdev->dev, "WR %04x\n", val);
@@ -771,7 +767,16 @@ static int write_to_hw(struct bcm_qspi *qspi, struct spi_device *spi)
771767
bcm_qspi_write(qspi, MSPI, MSPI_NEWQP, 0);
772768
bcm_qspi_write(qspi, MSPI, MSPI_ENDQP, slot - 1);
773769

774-
if (tstatus & TRANS_STATUS_BREAK_DESELECT) {
770+
/*
771+
* case 1) EOM =1, cs_change =0: SSb inactive
772+
* case 2) EOM =1, cs_change =1: SSb stay active
773+
* case 3) EOM =0, cs_change =0: SSb stay active
774+
* case 4) EOM =0, cs_change =1: SSb inactive
775+
*/
776+
if (((tstatus & TRANS_STATUS_BREAK_DESELECT)
777+
== TRANS_STATUS_BREAK_CS_CHANGE) ||
778+
((tstatus & TRANS_STATUS_BREAK_DESELECT)
779+
== TRANS_STATUS_BREAK_EOM)) {
775780
mspi_cdram = read_cdram_slot(qspi, slot - 1) &
776781
~MSPI_CDRAM_CONT_BIT;
777782
write_cdram_slot(qspi, slot - 1, mspi_cdram);
@@ -1222,6 +1227,11 @@ int bcm_qspi_probe(struct platform_device *pdev,
12221227
}
12231228

12241229
qspi = spi_master_get_devdata(master);
1230+
1231+
qspi->clk = devm_clk_get_optional(&pdev->dev, NULL);
1232+
if (IS_ERR(qspi->clk))
1233+
return PTR_ERR(qspi->clk);
1234+
12251235
qspi->pdev = pdev;
12261236
qspi->trans_pos.trans = NULL;
12271237
qspi->trans_pos.byte = 0;
@@ -1335,13 +1345,6 @@ int bcm_qspi_probe(struct platform_device *pdev,
13351345
qspi->soc_intc = NULL;
13361346
}
13371347

1338-
qspi->clk = devm_clk_get(&pdev->dev, NULL);
1339-
if (IS_ERR(qspi->clk)) {
1340-
dev_warn(dev, "unable to get clock\n");
1341-
ret = PTR_ERR(qspi->clk);
1342-
goto qspi_probe_err;
1343-
}
1344-
13451348
ret = clk_prepare_enable(qspi->clk);
13461349
if (ret) {
13471350
dev_err(dev, "failed to prepare clock\n");
@@ -1406,7 +1409,7 @@ static int __maybe_unused bcm_qspi_suspend(struct device *dev)
14061409
bcm_qspi_read(qspi, BSPI, BSPI_STRAP_OVERRIDE_CTRL);
14071410

14081411
spi_master_suspend(qspi->master);
1409-
clk_disable(qspi->clk);
1412+
clk_disable_unprepare(qspi->clk);
14101413
bcm_qspi_hw_uninit(qspi);
14111414

14121415
return 0;
@@ -1424,7 +1427,7 @@ static int __maybe_unused bcm_qspi_resume(struct device *dev)
14241427
qspi->soc_intc->bcm_qspi_int_set(qspi->soc_intc, MSPI_DONE,
14251428
true);
14261429

1427-
ret = clk_enable(qspi->clk);
1430+
ret = clk_prepare_enable(qspi->clk);
14281431
if (!ret)
14291432
spi_master_resume(qspi->master);
14301433

drivers/spi/spi-bcm2835.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1347,7 +1347,7 @@ static int bcm2835_spi_probe(struct platform_device *pdev)
13471347
goto out_dma_release;
13481348
}
13491349

1350-
err = devm_spi_register_controller(&pdev->dev, ctlr);
1350+
err = spi_register_controller(ctlr);
13511351
if (err) {
13521352
dev_err(&pdev->dev, "could not register SPI controller: %d\n",
13531353
err);
@@ -1374,6 +1374,8 @@ static int bcm2835_spi_remove(struct platform_device *pdev)
13741374

13751375
bcm2835_debugfs_remove(bs);
13761376

1377+
spi_unregister_controller(ctlr);
1378+
13771379
/* Clear FIFOs, and disable the HW block */
13781380
bcm2835_wr(bs, BCM2835_SPI_CS,
13791381
BCM2835_SPI_CS_CLEAR_RX | BCM2835_SPI_CS_CLEAR_TX);

drivers/spi/spi-bcm2835aux.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -569,7 +569,7 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev)
569569
goto out_clk_disable;
570570
}
571571

572-
err = devm_spi_register_master(&pdev->dev, master);
572+
err = spi_register_master(master);
573573
if (err) {
574574
dev_err(&pdev->dev, "could not register SPI master: %d\n", err);
575575
goto out_clk_disable;
@@ -593,6 +593,8 @@ static int bcm2835aux_spi_remove(struct platform_device *pdev)
593593

594594
bcm2835aux_debugfs_remove(bs);
595595

596+
spi_unregister_master(master);
597+
596598
bcm2835aux_spi_reset_hw(bs);
597599

598600
/* disable the HW block by releasing the clock */

drivers/spi/spi-dw.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -526,7 +526,7 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws)
526526
}
527527
}
528528

529-
ret = devm_spi_register_controller(dev, master);
529+
ret = spi_register_controller(master);
530530
if (ret) {
531531
dev_err(&master->dev, "problem registering spi master\n");
532532
goto err_dma_exit;
@@ -550,6 +550,8 @@ void dw_spi_remove_host(struct dw_spi *dws)
550550
{
551551
dw_spi_debugfs_remove(dws);
552552

553+
spi_unregister_controller(dws->master);
554+
553555
if (dws->dma_ops && dws->dma_ops->dma_exit)
554556
dws->dma_ops->dma_exit(dws);
555557

drivers/spi/spi-ep93xx.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@
3131
#include <linux/platform_data/spi-ep93xx.h>
3232

3333
#define SSPCR0 0x0000
34-
#define SSPCR0_MODE_SHIFT 6
34+
#define SSPCR0_SPO BIT(6)
35+
#define SSPCR0_SPH BIT(7)
3536
#define SSPCR0_SCR_SHIFT 8
3637

3738
#define SSPCR1 0x0004
@@ -159,7 +160,10 @@ static int ep93xx_spi_chip_setup(struct spi_master *master,
159160
return err;
160161

161162
cr0 = div_scr << SSPCR0_SCR_SHIFT;
162-
cr0 |= (spi->mode & (SPI_CPHA | SPI_CPOL)) << SSPCR0_MODE_SHIFT;
163+
if (spi->mode & SPI_CPOL)
164+
cr0 |= SSPCR0_SPO;
165+
if (spi->mode & SPI_CPHA)
166+
cr0 |= SSPCR0_SPH;
163167
cr0 |= dss;
164168

165169
dev_dbg(&master->dev, "setup: mode %d, cpsr %d, scr %d, dss %d\n",

drivers/spi/spi-mux.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ static int spi_mux_select(struct spi_device *spi)
5151
struct spi_mux_priv *priv = spi_controller_get_devdata(spi->controller);
5252
int ret;
5353

54+
ret = mux_control_select(priv->mux, spi->chip_select);
55+
if (ret)
56+
return ret;
57+
5458
if (priv->current_cs == spi->chip_select)
5559
return 0;
5660

@@ -62,10 +66,6 @@ static int spi_mux_select(struct spi_device *spi)
6266
priv->spi->mode = spi->mode;
6367
priv->spi->bits_per_word = spi->bits_per_word;
6468

65-
ret = mux_control_select(priv->mux, spi->chip_select);
66-
if (ret)
67-
return ret;
68-
6969
priv->current_cs = spi->chip_select;
7070

7171
return 0;

drivers/spi/spi-pxa2xx.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1884,7 +1884,7 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)
18841884

18851885
/* Register with the SPI framework */
18861886
platform_set_drvdata(pdev, drv_data);
1887-
status = devm_spi_register_controller(&pdev->dev, controller);
1887+
status = spi_register_controller(controller);
18881888
if (status != 0) {
18891889
dev_err(&pdev->dev, "problem registering spi controller\n");
18901890
goto out_error_pm_runtime_enabled;
@@ -1893,7 +1893,6 @@ static int pxa2xx_spi_probe(struct platform_device *pdev)
18931893
return status;
18941894

18951895
out_error_pm_runtime_enabled:
1896-
pm_runtime_put_noidle(&pdev->dev);
18971896
pm_runtime_disable(&pdev->dev);
18981897

18991898
out_error_clock_enabled:
@@ -1916,6 +1915,8 @@ static int pxa2xx_spi_remove(struct platform_device *pdev)
19161915

19171916
pm_runtime_get_sync(&pdev->dev);
19181917

1918+
spi_unregister_controller(drv_data->controller);
1919+
19191920
/* Disable the SSP at the peripheral and SOC level */
19201921
pxa2xx_spi_write(drv_data, SSCR0, 0);
19211922
clk_disable_unprepare(ssp->clk);

drivers/spi/spi-sc18is602.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,6 @@ static struct i2c_driver sc18is602_driver = {
345345

346346
module_i2c_driver(sc18is602_driver);
347347

348-
MODULE_DESCRIPTION("SC18IC602/603 SPI Master Driver");
348+
MODULE_DESCRIPTION("SC18IS602/603 SPI Master Driver");
349349
MODULE_AUTHOR("Guenter Roeck");
350350
MODULE_LICENSE("GPL");

drivers/spi/spi.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2111,6 +2111,7 @@ static int acpi_spi_add_resource(struct acpi_resource *ares, void *data)
21112111
}
21122112

21132113
lookup->max_speed_hz = sb->connection_speed;
2114+
lookup->bits_per_word = sb->data_bit_length;
21142115

21152116
if (sb->clock_phase == ACPI_SPI_SECOND_PHASE)
21162117
lookup->mode |= SPI_CPHA;
@@ -2760,6 +2761,8 @@ void spi_unregister_controller(struct spi_controller *ctlr)
27602761
struct spi_controller *found;
27612762
int id = ctlr->bus_num;
27622763

2764+
device_for_each_child(&ctlr->dev, NULL, __unregister);
2765+
27632766
/* First make sure that this controller was ever added */
27642767
mutex_lock(&board_lock);
27652768
found = idr_find(&spi_master_idr, id);
@@ -2772,7 +2775,6 @@ void spi_unregister_controller(struct spi_controller *ctlr)
27722775
list_del(&ctlr->list);
27732776
mutex_unlock(&board_lock);
27742777

2775-
device_for_each_child(&ctlr->dev, NULL, __unregister);
27762778
device_unregister(&ctlr->dev);
27772779
/* free bus id */
27782780
mutex_lock(&board_lock);

0 commit comments

Comments
 (0)