mr = spi_readl(as, MR);
                mr = SPI_BFINS(PCS, ~(1 << chip_select), mr);
-               if (spi->cs_gpiod && spi->chip_select != 0)
+               if (spi->cs_gpiod)
                        gpiod_set_value(spi->cs_gpiod, 1);
                spi_writel(as, MR, mr);
        }
 
        if (!spi->cs_gpiod)
                spi_writel(as, CR, SPI_BIT(LASTXFER));
-       else if (atmel_spi_is_v2(as) || spi->chip_select != 0)
+       else
                gpiod_set_value(spi->cs_gpiod, 0);
 }
 
        if (!master->cs_gpiods)
                return; /* No CS GPIO */
 
-       for (i = 0; i < 4; i++)
+       /*
+        * On the first version of the controller (AT91RM9200), CS0
+        * can't be used associated with GPIO
+        */
+       if (atmel_spi_is_v2(as))
+               i = 0;
+       else
+               i = 1;
+
+       for (; i < 4; i++)
                if (master->cs_gpiods[i])
                        as->native_cs_free |= BIT(i);