]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - drivers/mtd/spi/winbond.c
sf: unify read functions
[karo-tx-uboot.git] / drivers / mtd / spi / winbond.c
index 8470a826bff7ad291133b90a852c4097bd5c6791..e88802f0e67bdf5a7d62420fcdfa8bbf2222d16f 100644 (file)
@@ -105,44 +105,6 @@ static const struct winbond_spi_flash_params winbond_spi_flash_table[] = {
        },
 };
 
-/*
- * Assemble the address part of a command for Winbond devices in
- * non-power-of-two page size mode.
- */
-static void winbond_build_address(struct winbond_spi_flash *stm, u8 *cmd, u32 offset)
-{
-       unsigned long page_addr;
-       unsigned long byte_addr;
-       unsigned long page_size;
-       unsigned int page_shift;
-
-       /*
-        * The "extra" space per page is the power-of-two page size
-        * divided by 32.
-        */
-       page_shift = stm->params->l2_page_size;
-       page_size = (1 << page_shift);
-       page_addr = offset / page_size;
-       byte_addr = offset % page_size;
-
-       cmd[0] = page_addr >> (16 - page_shift);
-       cmd[1] = page_addr << (page_shift - 8) | (byte_addr >> 8);
-       cmd[2] = byte_addr;
-}
-
-static int winbond_read_fast(struct spi_flash *flash,
-               u32 offset, size_t len, void *buf)
-{
-       struct winbond_spi_flash *stm = to_winbond_spi_flash(flash);
-       u8 cmd[5];
-
-       cmd[0] = CMD_READ_ARRAY_FAST;
-       winbond_build_address(stm, cmd + 1, offset);
-       cmd[4] = 0x00;
-
-       return spi_flash_read_common(flash, cmd, sizeof(cmd), buf, len);
-}
-
 static int winbond_write(struct spi_flash *flash,
                u32 offset, size_t len, const void *buf)
 {
@@ -250,7 +212,7 @@ struct spi_flash *spi_flash_probe_winbond(struct spi_slave *spi, u8 *idcode)
 
        stm->flash.write = winbond_write;
        stm->flash.erase = winbond_erase;
-       stm->flash.read = winbond_read_fast;
+       stm->flash.read = spi_flash_cmd_read_fast;
        stm->flash.size = page_size * params->pages_per_sector
                                * params->sectors_per_block
                                * params->nr_blocks;