diff options
author | Yuan Yao <yao.yuan@nxp.com> | 2016-10-17 06:02:34 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2016-10-29 14:51:29 -0400 |
commit | 5ee67b587a2b0092bdea3123349c8c3c43e8e46e (patch) | |
tree | ef87489bfc36118b99e15e5ac42ff06f83baed0d | |
parent | 1001354ca34179f3db924eb66672442a173147dc (diff) |
spi: dspi: clear SPI_SR before enable interrupt
Once dspi is used in uboot, the SPI_SR have been set by some value.
At this time, if kernel enable the interrupt before clear the
status flag, that will trigger the wrong interrupt.
Signed-off-by: Yuan Yao <yao.yuan@nxp.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | drivers/spi/spi-fsl-dspi.c | 7 |
1 files changed, 7 insertions, 0 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"); |