diff --git a/src/systemcmds/mtd/24xxxx_mtd.c b/src/systemcmds/mtd/24xxxx_mtd.c index a9cae9929e..ab19f7cc36 100644 --- a/src/systemcmds/mtd/24xxxx_mtd.c +++ b/src/systemcmds/mtd/24xxxx_mtd.c @@ -203,6 +203,8 @@ static int at24c_eraseall(FAR struct at24c_dev_s *priv) memset(&buf[2], 0xff, priv->pagesize); + BOARD_EEPROM_WP_CTRL(false); + for (startblock = 0; startblock < priv->npages; startblock++) { uint16_t offset = startblock * priv->pagesize; buf[1] = offset & 0xff; @@ -214,6 +216,8 @@ static int at24c_eraseall(FAR struct at24c_dev_s *priv) } } + BOARD_EEPROM_WP_CTRL(true); + return OK; } @@ -389,6 +393,8 @@ static ssize_t at24c_bwrite(FAR struct mtd_dev_s *dev, off_t startblock, size_t finfo("startblock: %08lx nblocks: %d\n", (long)startblock, (int)nblocks); + BOARD_EEPROM_WP_CTRL(false); + while (blocksleft-- > 0) { uint16_t offset = startblock * priv->pagesize; unsigned tries = CONFIG_AT24XX_WRITE_TIMEOUT_MS; @@ -415,6 +421,7 @@ static ssize_t at24c_bwrite(FAR struct mtd_dev_s *dev, off_t startblock, size_t */ if (--tries == 0) { perf_count(priv->perf_errors); + BOARD_EEPROM_WP_CTRL(true); return ERROR; } } @@ -423,6 +430,8 @@ static ssize_t at24c_bwrite(FAR struct mtd_dev_s *dev, off_t startblock, size_t buffer += priv->pagesize; } + BOARD_EEPROM_WP_CTRL(true); + #if CONFIG_AT24XX_MTD_BLOCKSIZE > AT24XX_PAGESIZE return nblocks / (CONFIG_AT24XX_MTD_BLOCKSIZE / AT24XX_PAGESIZE); #else @@ -565,6 +574,8 @@ FAR struct mtd_dev_s *at24c_initialize(FAR struct i2c_master_s *dev) } }; + BOARD_EEPROM_WP_CTRL(true); + perf_begin(priv->perf_transfers); int ret = I2C_TRANSFER(priv->dev, &msgv[0], 2); perf_end(priv->perf_transfers);