spi: omap2-mcspi: poll OMAP2_MCSPI_CHSTAT_RXS for PIO transfer
[sfrench/cifs-2.6.git] / drivers / spi / spi-omap2-mcspi.c
index d5157b2222ce1d8837ed204598107f4968218aef..7275223dbcd454d879bbb7a61e2ee50479212da8 100644 (file)
@@ -454,6 +454,8 @@ omap2_mcspi_rx_dma(struct spi_device *spi, struct spi_transfer *xfer,
        int                     elements = 0;
        int                     word_len, element_count;
        struct omap2_mcspi_cs   *cs = spi->controller_state;
+       void __iomem            *chstat_reg = cs->base + OMAP2_MCSPI_CHSTAT0;
+
        mcspi = spi_master_get_devdata(spi->master);
        mcspi_dma = &mcspi->dma_channels[spi->chip_select];
        count = xfer->len;
@@ -549,8 +551,8 @@ omap2_mcspi_rx_dma(struct spi_device *spi, struct spi_transfer *xfer,
        if (l & OMAP2_MCSPI_CHCONF_TURBO) {
                elements--;
 
-               if (likely(mcspi_read_cs_reg(spi, OMAP2_MCSPI_CHSTAT0)
-                                  & OMAP2_MCSPI_CHSTAT_RXS)) {
+               if (!mcspi_wait_for_reg_bit(chstat_reg,
+                                           OMAP2_MCSPI_CHSTAT_RXS)) {
                        u32 w;
 
                        w = mcspi_read_cs_reg(spi, OMAP2_MCSPI_RX0);
@@ -568,8 +570,7 @@ omap2_mcspi_rx_dma(struct spi_device *spi, struct spi_transfer *xfer,
                        return count;
                }
        }
-       if (likely(mcspi_read_cs_reg(spi, OMAP2_MCSPI_CHSTAT0)
-                               & OMAP2_MCSPI_CHSTAT_RXS)) {
+       if (!mcspi_wait_for_reg_bit(chstat_reg, OMAP2_MCSPI_CHSTAT_RXS)) {
                u32 w;
 
                w = mcspi_read_cs_reg(spi, OMAP2_MCSPI_RX0);
@@ -1386,20 +1387,13 @@ static int omap2_mcspi_probe(struct platform_device *pdev)
        regs_offset = pdata->regs_offset;
 
        r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       if (r == NULL) {
-               status = -ENODEV;
-               goto free_master;
-       }
-
-       r->start += regs_offset;
-       r->end += regs_offset;
-       mcspi->phys = r->start;
-
        mcspi->base = devm_ioremap_resource(&pdev->dev, r);
        if (IS_ERR(mcspi->base)) {
                status = PTR_ERR(mcspi->base);
                goto free_master;
        }
+       mcspi->phys = r->start + regs_offset;
+       mcspi->base += regs_offset;
 
        mcspi->dev = &pdev->dev;