From: Jagannadha Sutradharudu Teki Date: Wed, 15 May 2013 18:33:10 +0000 (+0530) Subject: sf: Unify the bank handling logic X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1a8e176032c6fb516a03e932b2c578844ece29f7;p=thirdparty%2Fu-boot.git sf: Unify the bank handling logic Unified the bank handling logic, placed in spi_flash_bank() Signed-off-by: Jagannadha Sutradharudu Teki --- diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c index 88c7f1b00dd..53e601fc3e4 100644 --- a/drivers/mtd/spi/spi_flash.c +++ b/drivers/mtd/spi/spi_flash.c @@ -26,6 +26,15 @@ static void spi_flash_addr(u32 addr, u8 *cmd) cmd[3] = addr >> 0; } +static int spi_flash_bank(struct spi_flash *flash, u32 addr, u8 *bank_sel) +{ + *bank_sel = addr / SPI_FLASH_16MB_BOUN; + if ((flash->spi->is_dual == 1) && (flash->spi->u_page == 1)) + *bank_sel -= ((flash->size / 2) / SPI_FLASH_16MB_BOUN); + + return spi_flash_cmd_bankaddr_write(flash, *bank_sel, flash->idcode0); +} + static int spi_flash_read_write(struct spi_slave *spi, const u8 *cmd, size_t cmd_len, const u8 *data_out, u8 *data_in, @@ -102,12 +111,7 @@ int spi_flash_cmd_write_multi(struct spi_flash *flash, u32 offset, if (flash->spi->is_dual == 2) offset /= 2; - bank_sel = offset / SPI_FLASH_16MB_BOUN; - if ((flash->spi->is_dual == 1) && (flash->spi->u_page == 1)) - bank_sel -= ((flash->size / 2) / SPI_FLASH_16MB_BOUN); - - ret = spi_flash_cmd_bankaddr_write(flash, - bank_sel, flash->idcode0); + ret = spi_flash_bank(flash, offset, &bank_sel); if (ret) { debug("SF: fail to set bank%d\n", bank_sel); return ret; @@ -191,12 +195,7 @@ int spi_flash_cmd_read_fast(struct spi_flash *flash, u32 offset, if (flash->spi->is_dual == 2) offset /= 2; - bank_sel = offset / SPI_FLASH_16MB_BOUN; - if ((flash->spi->is_dual == 1) && (flash->spi->u_page == 1)) - bank_sel -= ((flash->size / 2) / SPI_FLASH_16MB_BOUN); - - ret = spi_flash_cmd_bankaddr_write(flash, - bank_sel, flash->idcode0); + ret = spi_flash_bank(flash, offset, &bank_sel); if (ret) { debug("SF: fail to set bank%d\n", bank_sel); return ret; @@ -299,13 +298,7 @@ int spi_flash_cmd_erase(struct spi_flash *flash, u32 offset, size_t len) flash->spi->u_page = 0; } - bank_sel = offset / SPI_FLASH_16MB_BOUN; - if (((flash->spi->is_dual == 1) && (flash->spi->u_page == 1)) || - (flash->spi->is_dual == 2)) - bank_sel -= ((flash->size / 2) / SPI_FLASH_16MB_BOUN); - - ret = spi_flash_cmd_bankaddr_write(flash, - bank_sel, flash->idcode0); + ret = spi_flash_bank(flash, offset, &bank_sel); if (ret) { debug("SF: fail to set bank%d\n", bank_sel); return ret;