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 @@  #define SPI_SR			0x2c  #define SPI_SR_EOQF		0x10000000  #define SPI_SR_TCFQF		0x80000000 +#define SPI_SR_CLEAR		0xdaad0000  #define SPI_RSER		0x30  #define SPI_RSER_EOQFE		0x10000000 @@ -646,6 +647,11 @@ static const struct regmap_config dspi_regmap_config = {  	.max_register = 0x88,  }; +static void dspi_init(struct fsl_dspi *dspi) +{ +	regmap_write(dspi->regmap, SPI_SR, SPI_SR_CLEAR); +} +  static int dspi_probe(struct platform_device *pdev)  {  	struct device_node *np = pdev->dev.of_node; @@ -709,6 +715,7 @@ static int dspi_probe(struct platform_device *pdev)  		return PTR_ERR(dspi->regmap);  	} +	dspi_init(dspi);  	dspi->irq = platform_get_irq(pdev, 0);  	if (dspi->irq < 0) {  		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)  		mspi->len -= rx_nr_bytes; -		if (mspi->rx) +		if (rx_nr_bytes && mspi->rx)  			mspi->get_rx(rx_data, mspi);  	} 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)  		if (of_node_test_and_set_flag(nc, OF_POPULATED))  			continue;  		spi = of_register_spi_device(master, nc); -		if (IS_ERR(spi)) +		if (IS_ERR(spi)) {  			dev_warn(&master->dev, "Failed to create SPI device for %s\n",  				nc->full_name); +			of_node_clear_flag(nc, OF_POPULATED); +		}  	}  }  #else @@ -3131,6 +3133,7 @@ static int of_spi_notify(struct notifier_block *nb, unsigned long action,  		if (IS_ERR(spi)) {  			pr_err("%s: failed to create for '%s'\n",  					__func__, rd->dn->full_name); +			of_node_clear_flag(rd->dn, OF_POPULATED);  			return notifier_from_errno(PTR_ERR(spi));  		}  		break;  | 
