1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-18 13:55:18 +03:00

Fix use of sdcard.cardDetectPin before it is initialised.

* de-duplicate some SDIO/SPI sd-card detection code.
* ensure detectionInverted is set to false for SDIO case where
`cardDetectTag` is not configured.
This commit is contained in:
Dominic Clifton 2019-07-10 17:06:19 +02:00
parent 7471ada0c1
commit 8d78e15a4b
6 changed files with 12 additions and 20 deletions

View file

@ -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) { if (sdcard.cardDetectPin) {
IOInit(sdcard.cardDetectPin, OWNER_SDCARD_DETECT, 0); IOInit(sdcard.cardDetectPin, OWNER_SDCARD_DETECT, 0);
IOConfigGPIO(sdcard.cardDetectPin, IOCFG_IPU); IOConfigGPIO(sdcard.cardDetectPin, IOCFG_IPU);

View file

@ -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); sdcardOperationStatus_e sdcard_writeBlock(uint32_t blockIndex, uint8_t *buffer, sdcard_operationCompleteCallback_c callback, uint32_t callbackData);
void sdcardInsertionDetectDeinit(void); void sdcardInsertionDetectDeinit(void);
void sdcardInsertionDetectInit(void); void sdcardInsertionDetectInit(const sdcardConfig_t *config);
bool sdcard_isInserted(void); bool sdcard_isInserted(void);
bool sdcard_isInitialized(void); bool sdcard_isInitialized(void);

View file

@ -107,7 +107,7 @@ extern sdcard_t sdcard;
STATIC_ASSERT(sizeof(sdcardCSD_t) == 16, sdcard_csd_bitfields_didnt_pack_properly); STATIC_ASSERT(sizeof(sdcardCSD_t) == 16, sdcard_csd_bitfields_didnt_pack_properly);
void sdcardInsertionDetectInit(void); void sdcardInsertionDetectInit(const sdcardConfig_t *config);
void sdcardInsertionDetectDeinit(void); void sdcardInsertionDetectDeinit(void);
bool sdcard_isInserted(void); bool sdcard_isInserted(void);

View file

@ -217,14 +217,6 @@ static void sdcardSdio_init(const sdcardConfig_t *config, const spiPinConfig_t *
} }
#endif #endif
#endif #endif
if (config->cardDetectTag) {
sdcard.cardDetectPin = IOGetByTag(config->cardDetectTag);
} else {
sdcard.cardDetectPin = IO_NONE;
}
if (config->cardDetectInverted) {
sdcard.detectionInverted = 1;
}
if (sdioConfig()->useCache) { if (sdioConfig()->useCache) {
sdcard.useCache = 1; sdcard.useCache = 1;
} else { } else {

View file

@ -542,14 +542,6 @@ static void sdcardSpi_init(const sdcardConfig_t *config, const spiPinConfig_t *s
} }
sdcard.busdev.busdev_u.spi.csnPin = chipSelectIO; 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 // Max frequency is initially 400kHz
#ifdef USE_SPI_TRANSACTION #ifdef USE_SPI_TRANSACTION

View file

@ -252,7 +252,7 @@ static void configureSPIAndQuadSPI(void)
void sdCardAndFSInit() void sdCardAndFSInit()
{ {
sdcardInsertionDetectInit(); sdcardInsertionDetectInit(sdcardConfig());
sdcard_init(sdcardConfig()); sdcard_init(sdcardConfig());
afatfs_init(); afatfs_init();
} }