diff options
| -rw-r--r-- | drivers/spi/spi-mxs.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/drivers/spi/spi-mxs.c b/drivers/spi/spi-mxs.c index 21e1dcad3914..556e5ef907fa 100644 --- a/drivers/spi/spi-mxs.c +++ b/drivers/spi/spi-mxs.c | |||
| @@ -177,25 +177,23 @@ static inline void mxs_spi_disable(struct mxs_spi *spi) | |||
| 177 | 177 | ||
| 178 | static int mxs_ssp_wait(struct mxs_spi *spi, int offset, int mask, bool set) | 178 | static int mxs_ssp_wait(struct mxs_spi *spi, int offset, int mask, bool set) |
| 179 | { | 179 | { |
| 180 | unsigned long timeout = jiffies + msecs_to_jiffies(SSP_TIMEOUT); | 180 | const unsigned long timeout = jiffies + msecs_to_jiffies(SSP_TIMEOUT); |
| 181 | struct mxs_ssp *ssp = &spi->ssp; | 181 | struct mxs_ssp *ssp = &spi->ssp; |
| 182 | uint32_t reg; | 182 | uint32_t reg; |
| 183 | 183 | ||
| 184 | while (1) { | 184 | do { |
| 185 | reg = readl_relaxed(ssp->base + offset); | 185 | reg = readl_relaxed(ssp->base + offset); |
| 186 | 186 | ||
| 187 | if (set && ((reg & mask) == mask)) | 187 | if (!set) |
| 188 | break; | 188 | reg = ~reg; |
| 189 | 189 | ||
| 190 | if (!set && ((~reg & mask) == mask)) | 190 | reg &= mask; |
| 191 | break; | ||
| 192 | 191 | ||
| 193 | udelay(1); | 192 | if (reg == mask) |
| 193 | return 0; | ||
| 194 | } while (time_before(jiffies, timeout)); | ||
| 194 | 195 | ||
| 195 | if (time_after(jiffies, timeout)) | 196 | return -ETIMEDOUT; |
| 196 | return -ETIMEDOUT; | ||
| 197 | } | ||
| 198 | return 0; | ||
| 199 | } | 197 | } |
| 200 | 198 | ||
| 201 | static void mxs_ssp_dma_irq_callback(void *param) | 199 | static void mxs_ssp_dma_irq_callback(void *param) |
