From ddd0dd14c84ba0bb0c2cfdcfb17dff79a4dea41b Mon Sep 17 00:00:00 2001 From: jflyper Date: Fri, 27 Apr 2018 09:46:36 +0900 Subject: [PATCH] Check if a CS pin is already owned by somebody else --- src/main/drivers/flash.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/drivers/flash.c b/src/main/drivers/flash.c index 27170c282d..ee9705e6e7 100644 --- a/src/main/drivers/flash.c +++ b/src/main/drivers/flash.c @@ -46,14 +46,20 @@ static flashDevice_t flashDevice; bool flashInit(const flashConfig_t *flashConfig) { busdev = &busInstance; - busdev->bustype = BUSTYPE_SPI; - spiBusSetInstance(busdev, spiInstanceByDevice(SPI_CFG_TO_DEV(flashConfig->spiDevice))); + if (flashConfig->csTag) { busdev->busdev_u.spi.csnPin = IOGetByTag(flashConfig->csTag); } else { return false; } + if (IOGetOwner(busdev->busdev_u.spi.csnPin) != OWNER_SPI_PREINIT) { + return false; + } + + busdev->bustype = BUSTYPE_SPI; + spiBusSetInstance(busdev, spiInstanceByDevice(SPI_CFG_TO_DEV(flashConfig->spiDevice))); + IOInit(busdev->busdev_u.spi.csnPin, OWNER_FLASH_CS, 0); IOConfigGPIO(busdev->busdev_u.spi.csnPin, SPI_IO_CS_CFG); IOHi(busdev->busdev_u.spi.csnPin);