]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
sf: Unify the bank handling logic
authorJagannadha Sutradharudu Teki <jaganna@xilinx.com>
Wed, 15 May 2013 18:33:10 +0000 (00:03 +0530)
committerMichal Simek <michal.simek@xilinx.com>
Mon, 27 May 2013 11:21:19 +0000 (13:21 +0200)
Unified the bank handling logic, placed in spi_flash_bank()

Signed-off-by: Jagannadha Sutradharudu Teki <jaganna@xilinx.com>
drivers/mtd/spi/spi_flash.c

index 88c7f1b00ddc5ca8ba4c21c55b33601feea26b0e..53e601fc3e43ba94dbac49d7bcb1fd52f48bf624 100644 (file)
@@ -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;