diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2014-06-04 21:04:04 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-06-04 21:04:04 +0200 |
commit | 7ccfe4d3a013db098c065b345dc0de3ed79934ce (patch) | |
tree | 9fe8cb2e62999199e1d9f1bc25d8fe89240c5bf4 /drivers/spi | |
parent | 73339649ae5c74c7c4dd981cc406500cddf1f4b8 (diff) | |
parent | c4832fcd162c1a35f690d58ad08b189f6633c93f (diff) | |
download | barebox-7ccfe4d3a013db098c065b345dc0de3ed79934ce.tar.gz barebox-7ccfe4d3a013db098c065b345dc0de3ed79934ce.tar.xz |
Merge branch 'for-next/omap'
Conflicts:
arch/arm/configs/am335x_beaglebone_defconfig
arch/arm/configs/am335x_defconfig
Diffstat (limited to 'drivers/spi')
-rw-r--r-- | drivers/spi/omap3_spi.c | 24 | ||||
-rw-r--r-- | drivers/spi/omap3_spi.h | 1 |
2 files changed, 23 insertions, 2 deletions
diff --git a/drivers/spi/omap3_spi.c b/drivers/spi/omap3_spi.c index 073a98f0c1..c62288b160 100644 --- a/drivers/spi/omap3_spi.c +++ b/drivers/spi/omap3_spi.c @@ -106,8 +106,15 @@ int spi_claim_bus(struct spi_device *spi) /* standard 4-wire master mode: SCK, MOSI/out, MISO/in, nCS * REVISIT: this controller could support SPI_3WIRE mode. */ - conf &= ~(OMAP3_MCSPI_CHCONF_IS|OMAP3_MCSPI_CHCONF_DPE1); - conf |= OMAP3_MCSPI_CHCONF_DPE0; + if (omap3_master->swap_miso_mosi) { + /* swapped */ + conf |= (OMAP3_MCSPI_CHCONF_IS | OMAP3_MCSPI_CHCONF_DPE1); + conf &= ~OMAP3_MCSPI_CHCONF_DPE0; + } else { + /* bootloader default */ + conf &= ~(OMAP3_MCSPI_CHCONF_IS | OMAP3_MCSPI_CHCONF_DPE1); + conf |= OMAP3_MCSPI_CHCONF_DPE0; + } /* wordlength */ conf &= ~OMAP3_MCSPI_CHCONF_WL_MASK; @@ -343,6 +350,17 @@ static int omap3_spi_setup(struct spi_device *spi) return 0; } +static int omap3_spi_probe_dt(struct device_d *dev, struct omap3_spi_master *omap3_master) +{ + if (!IS_ENABLED(CONFIG_OFDEVICE) || !dev->device_node) + return -ENODEV; + + if (of_property_read_bool(dev->device_node, "ti,pindir-d0-out-d1-in")) + omap3_master->swap_miso_mosi = 1; + + return 0; +} + static int omap3_spi_probe(struct device_d *dev) { struct spi_master *master; @@ -356,6 +374,8 @@ static int omap3_spi_probe(struct device_d *dev) omap3_master = xzalloc(sizeof(*omap3_master)); + omap3_spi_probe_dt(dev, omap3_master); + master = &omap3_master->master; master->dev = dev; diff --git a/drivers/spi/omap3_spi.h b/drivers/spi/omap3_spi.h index ce4a29beda..6fd6bdac51 100644 --- a/drivers/spi/omap3_spi.h +++ b/drivers/spi/omap3_spi.h @@ -93,6 +93,7 @@ struct omap3_spi_master { * offset of 0x100 between start of register space * and registers */ + int swap_miso_mosi; }; #endif /* _OMAP3_SPI_H_ */ |