diff options
| -rw-r--r-- | drivers/spi/spi-fsl-dspi.c | 7 | ||||
| -rw-r--r-- | drivers/spi/spi-fsl-espi.c | 2 | ||||
| -rw-r--r-- | drivers/spi/spi.c | 5 |
3 files changed, 12 insertions, 2 deletions
diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 35c0dd945668..a67b0ff6a362 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c | |||
| @@ -70,6 +70,7 @@ | |||
| 70 | #define SPI_SR 0x2c | 70 | #define SPI_SR 0x2c |
| 71 | #define SPI_SR_EOQF 0x10000000 | 71 | #define SPI_SR_EOQF 0x10000000 |
| 72 | #define SPI_SR_TCFQF 0x80000000 | 72 | #define SPI_SR_TCFQF 0x80000000 |
| 73 | #define SPI_SR_CLEAR 0xdaad0000 | ||
| 73 | 74 | ||
| 74 | #define SPI_RSER 0x30 | 75 | #define SPI_RSER 0x30 |
| 75 | #define SPI_RSER_EOQFE 0x10000000 | 76 | #define SPI_RSER_EOQFE 0x10000000 |
| @@ -646,6 +647,11 @@ static const struct regmap_config dspi_regmap_config = { | |||
| 646 | .max_register = 0x88, | 647 | .max_register = 0x88, |
| 647 | }; | 648 | }; |
| 648 | 649 | ||
| 650 | static void dspi_init(struct fsl_dspi *dspi) | ||
| 651 | { | ||
| 652 | regmap_write(dspi->regmap, SPI_SR, SPI_SR_CLEAR); | ||
| 653 | } | ||
| 654 | |||
| 649 | static int dspi_probe(struct platform_device *pdev) | 655 | static int dspi_probe(struct platform_device *pdev) |
| 650 | { | 656 | { |
| 651 | struct device_node *np = pdev->dev.of_node; | 657 | struct device_node *np = pdev->dev.of_node; |
| @@ -709,6 +715,7 @@ static int dspi_probe(struct platform_device *pdev) | |||
| 709 | return PTR_ERR(dspi->regmap); | 715 | return PTR_ERR(dspi->regmap); |
| 710 | } | 716 | } |
| 711 | 717 | ||
| 718 | dspi_init(dspi); | ||
| 712 | dspi->irq = platform_get_irq(pdev, 0); | 719 | dspi->irq = platform_get_irq(pdev, 0); |
| 713 | if (dspi->irq < 0) { | 720 | if (dspi->irq < 0) { |
| 714 | dev_err(&pdev->dev, "can't get platform irq\n"); | 721 | dev_err(&pdev->dev, "can't get platform irq\n"); |
diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c index 7451585a080e..2c175b9495f7 100644 --- a/drivers/spi/spi-fsl-espi.c +++ b/drivers/spi/spi-fsl-espi.c | |||
| @@ -458,7 +458,7 @@ static void fsl_espi_cpu_irq(struct mpc8xxx_spi *mspi, u32 events) | |||
| 458 | 458 | ||
| 459 | mspi->len -= rx_nr_bytes; | 459 | mspi->len -= rx_nr_bytes; |
| 460 | 460 | ||
| 461 | if (mspi->rx) | 461 | if (rx_nr_bytes && mspi->rx) |
| 462 | mspi->get_rx(rx_data, mspi); | 462 | mspi->get_rx(rx_data, mspi); |
| 463 | } | 463 | } |
| 464 | 464 | ||
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 5787b723b593..838783c3fed0 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c | |||
| @@ -1618,9 +1618,11 @@ static void of_register_spi_devices(struct spi_master *master) | |||
| 1618 | if (of_node_test_and_set_flag(nc, OF_POPULATED)) | 1618 | if (of_node_test_and_set_flag(nc, OF_POPULATED)) |
| 1619 | continue; | 1619 | continue; |
| 1620 | spi = of_register_spi_device(master, nc); | 1620 | spi = of_register_spi_device(master, nc); |
| 1621 | if (IS_ERR(spi)) | 1621 | if (IS_ERR(spi)) { |
| 1622 | dev_warn(&master->dev, "Failed to create SPI device for %s\n", | 1622 | dev_warn(&master->dev, "Failed to create SPI device for %s\n", |
| 1623 | nc->full_name); | 1623 | nc->full_name); |
| 1624 | of_node_clear_flag(nc, OF_POPULATED); | ||
| 1625 | } | ||
| 1624 | } | 1626 | } |
| 1625 | } | 1627 | } |
| 1626 | #else | 1628 | #else |
| @@ -3131,6 +3133,7 @@ static int of_spi_notify(struct notifier_block *nb, unsigned long action, | |||
| 3131 | if (IS_ERR(spi)) { | 3133 | if (IS_ERR(spi)) { |
| 3132 | pr_err("%s: failed to create for '%s'\n", | 3134 | pr_err("%s: failed to create for '%s'\n", |
| 3133 | __func__, rd->dn->full_name); | 3135 | __func__, rd->dn->full_name); |
| 3136 | of_node_clear_flag(rd->dn, OF_POPULATED); | ||
| 3134 | return notifier_from_errno(PTR_ERR(spi)); | 3137 | return notifier_from_errno(PTR_ERR(spi)); |
| 3135 | } | 3138 | } |
| 3136 | break; | 3139 | break; |
