DW SPI: Allow to overload the management of the external CS
authorGregory CLEMENT <gregory.clement@bootlin.com>
Tue, 9 Oct 2018 12:14:07 +0000 (14:14 +0200)
committerDaniel Schwierzeck <daniel.schwierzeck@gmail.com>
Wed, 19 Dec 2018 14:23:01 +0000 (15:23 +0100)
On some platforms, as the Ocelot ones, when wanting to control the CS
through software, it is not possible to do it through the GPIO
controller. Indeed, this signal is managed through a dedicated range of
registers inside the SoC..

By declaring the external_cs_manage function as weak, it is possible to
manage the CS at platform level and then using the appropriate registers.

Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
drivers/spi/designware_spi.c

index 5cca41448674aa497bd65228f2e82d25ad1122aa..02d93763d42d8003e485dfaa16ce3f4ea91e0e24 100644 (file)
@@ -369,7 +369,13 @@ static int poll_transfer(struct dw_spi_priv *priv)
        return 0;
 }
 
-static void external_cs_manage(struct udevice *dev, bool on)
+/*
+ * We define external_cs_manage function as 'weak' as some targets
+ * (like MSCC Ocelot) don't control the external CS pin using a GPIO
+ * controller. These SoCs use specific registers to control by
+ * software the SPI pins (and especially the CS).
+ */
+__weak void external_cs_manage(struct udevice *dev, bool on)
 {
 #if defined(CONFIG_DM_GPIO) && !defined(CONFIG_SPL_BUILD)
        struct dw_spi_priv *priv = dev_get_priv(dev->parent);