@@ -2,7 +2,8 @@
#define _OMAP2_MCSPI_H
struct omap2_mcspi_platform_config {
- unsigned short num_cs;
+ unsigned short num_cs;
+ int *cs_gpios;
};
struct omap2_mcspi_device_config {
@@ -35,6 +35,7 @@
#include <linux/slab.h>
#include <linux/spi/spi.h>
+#include <linux/gpio.h>
#include <plat/dma.h>
#include <plat/clock.h>
@@ -235,11 +236,15 @@ static void omap2_mcspi_set_enable(const struct spi_device *spi, int enable)
static void omap2_mcspi_force_cs(struct spi_device *spi, int cs_active)
{
- u32 l;
-
- l = mcspi_cached_chconf0(spi);
- MOD_REG_BIT(l, OMAP2_MCSPI_CHCONF_FORCE, cs_active);
- mcspi_write_chconf0(spi, l);
+ struct omap2_mcspi_platform_config *pconfig = spi->master->dev.platform_data;
+ if (pconfig->cs_gpios) {
+ int gpio = pconfig->cs_gpios[spi->chip_select];
+ gpio_set_value(gpio, cs_active);
+ } else {
+ u32 l = mcspi_cached_chconf0(spi);
+ MOD_REG_BIT(l, OMAP2_MCSPI_CHCONF_FORCE, cs_active);
+ mcspi_write_chconf0(spi, l);
+ }
}
static void omap2_mcspi_set_master_mode(struct spi_master *master)