mtd/w25: add missing locking and fix SPI_SELECT usage for w25_unprotect

This commit is contained in:
Jussi Kivilinna 2017-06-13 07:33:34 -06:00 committed by Gregory Nutt
parent e379491d13
commit 2596b14c90

View File

@ -440,19 +440,16 @@ static inline int w25_readid(struct w25_dev_s *priv)
#ifndef CONFIG_W25_READONLY #ifndef CONFIG_W25_READONLY
static void w25_unprotect(FAR struct w25_dev_s *priv) static void w25_unprotect(FAR struct w25_dev_s *priv)
{ {
/* Select this FLASH part */ /* Lock and configure the SPI bus */
SPI_SELECT(priv->spi, SPIDEV_FLASH(0), true); w25_lock(priv->spi);
/* Send "Write enable (WREN)" */ /* Send "Write enable (WREN)" */
w25_wren(priv); w25_wren(priv);
/* Re-select this FLASH part (This might not be necessary... but is it shown in /* Select this FLASH part */
* the SST25 timing diagrams from which this code was leveraged.)
*/
SPI_SELECT(priv->spi, SPIDEV_FLASH(0), false);
SPI_SELECT(priv->spi, SPIDEV_FLASH(0), true); SPI_SELECT(priv->spi, SPIDEV_FLASH(0), true);
/* Send "Write enable status (EWSR)" */ /* Send "Write enable status (EWSR)" */
@ -463,6 +460,11 @@ static void w25_unprotect(FAR struct w25_dev_s *priv)
SPI_SEND(priv->spi, 0); SPI_SEND(priv->spi, 0);
SPI_SEND(priv->spi, 0); SPI_SEND(priv->spi, 0);
/* Deselect the FLASH and unlock the bus */
SPI_SELECT(priv->spi, SPIDEV_FLASH(0), false);
w25_unlock(priv->spi);
} }
#endif #endif