From 119a65b64cc1519946f5a460aeb8fa182a2e4e3a Mon Sep 17 00:00:00 2001 From: Michael Keller Date: Sun, 14 Jul 2019 14:38:10 +1200 Subject: [PATCH] Fix use of sdcard.cardDetectPin before it is initialised. (#8557) Fix use of sdcard.cardDetectPin before it is initialised. --- src/main/drivers/sdcard.c | 10 +++++++++- src/main/drivers/sdcard.h | 2 +- src/main/drivers/sdcard_impl.h | 2 +- src/main/drivers/sdcard_sdio_baremetal.c | 8 -------- src/main/drivers/sdcard_spi.c | 8 -------- src/main/fc/init.c | 2 +- 6 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/main/drivers/sdcard.c b/src/main/drivers/sdcard.c index 642f82055e..da95d93b67 100644 --- a/src/main/drivers/sdcard.c +++ b/src/main/drivers/sdcard.c @@ -75,8 +75,16 @@ void sdcardInsertionDetectDeinit(void) } } -void sdcardInsertionDetectInit(void) +void sdcardInsertionDetectInit(const sdcardConfig_t *config) { + if (config->cardDetectTag) { + sdcard.cardDetectPin = IOGetByTag(config->cardDetectTag); + sdcard.detectionInverted = config->cardDetectInverted; + } else { + sdcard.cardDetectPin = IO_NONE; + sdcard.detectionInverted = false; + } + if (sdcard.cardDetectPin) { IOInit(sdcard.cardDetectPin, OWNER_SDCARD_DETECT, 0); IOConfigGPIO(sdcard.cardDetectPin, IOCFG_IPU); diff --git a/src/main/drivers/sdcard.h b/src/main/drivers/sdcard.h index 4baaa1703f..f39cccc213 100644 --- a/src/main/drivers/sdcard.h +++ b/src/main/drivers/sdcard.h @@ -66,7 +66,7 @@ sdcardOperationStatus_e sdcard_beginWriteBlocks(uint32_t blockIndex, uint32_t bl sdcardOperationStatus_e sdcard_writeBlock(uint32_t blockIndex, uint8_t *buffer, sdcard_operationCompleteCallback_c callback, uint32_t callbackData); void sdcardInsertionDetectDeinit(void); -void sdcardInsertionDetectInit(void); +void sdcardInsertionDetectInit(const sdcardConfig_t *config); bool sdcard_isInserted(void); bool sdcard_isInitialized(void); diff --git a/src/main/drivers/sdcard_impl.h b/src/main/drivers/sdcard_impl.h index 399b276b35..ae7997b80e 100644 --- a/src/main/drivers/sdcard_impl.h +++ b/src/main/drivers/sdcard_impl.h @@ -107,7 +107,7 @@ extern sdcard_t sdcard; STATIC_ASSERT(sizeof(sdcardCSD_t) == 16, sdcard_csd_bitfields_didnt_pack_properly); -void sdcardInsertionDetectInit(void); +void sdcardInsertionDetectInit(const sdcardConfig_t *config); void sdcardInsertionDetectDeinit(void); bool sdcard_isInserted(void); diff --git a/src/main/drivers/sdcard_sdio_baremetal.c b/src/main/drivers/sdcard_sdio_baremetal.c index dae92d1068..15dc9f454e 100644 --- a/src/main/drivers/sdcard_sdio_baremetal.c +++ b/src/main/drivers/sdcard_sdio_baremetal.c @@ -211,14 +211,6 @@ static void sdcardSdio_init(const sdcardConfig_t *config, const spiPinConfig_t * sdcard.state = SDCARD_STATE_NOT_PRESENT; return; } - if (config->cardDetectTag) { - sdcard.cardDetectPin = IOGetByTag(config->cardDetectTag); - } else { - sdcard.cardDetectPin = IO_NONE; - } - if (config->cardDetectInverted) { - sdcard.detectionInverted = 1; - } if (sdioConfig()->useCache) { sdcard.useCache = 1; } else { diff --git a/src/main/drivers/sdcard_spi.c b/src/main/drivers/sdcard_spi.c index 50eaf78cb1..7cd97a91cd 100644 --- a/src/main/drivers/sdcard_spi.c +++ b/src/main/drivers/sdcard_spi.c @@ -542,14 +542,6 @@ static void sdcardSpi_init(const sdcardConfig_t *config, const spiPinConfig_t *s } sdcard.busdev.busdev_u.spi.csnPin = chipSelectIO; - if (config->cardDetectTag) { - sdcard.cardDetectPin = IOGetByTag(config->cardDetectTag); - sdcard.detectionInverted = config->cardDetectInverted; - } else { - sdcard.cardDetectPin = IO_NONE; - sdcard.detectionInverted = false; - } - // Max frequency is initially 400kHz #ifdef USE_SPI_TRANSACTION diff --git a/src/main/fc/init.c b/src/main/fc/init.c index 189119fc88..f7b32e5f30 100644 --- a/src/main/fc/init.c +++ b/src/main/fc/init.c @@ -721,7 +721,7 @@ void init(void) #ifdef USE_SDCARD if (blackboxConfig()->device == BLACKBOX_DEVICE_SDCARD) { if (sdcardConfig()->mode) { - sdcardInsertionDetectInit(); + sdcardInsertionDetectInit(sdcardConfig()); sdcard_init(sdcardConfig()); afatfs_init(); } else {