sf: unify status register writing (and thus block unlocking)
authorMike Frysinger <vapier@gentoo.org>
Mon, 5 Mar 2012 04:18:17 +0000 (23:18 -0500)
committerMike Frysinger <vapier@gentoo.org>
Mon, 5 Mar 2012 04:18:17 +0000 (23:18 -0500)
The only two drivers to write the status register do it in the same
way, so unify the implementations.  This also makes the block unlock
logic the same.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
drivers/mtd/spi/macronix.c
drivers/mtd/spi/spi_flash.c
drivers/mtd/spi/spi_flash_internal.h
drivers/mtd/spi/sst.c

index 5268c661ea301fd9380a1f15390932dca170cda8..c97a39d49981201aa66178716b1cd457b55b7edc 100644 (file)
@@ -79,45 +79,6 @@ static const struct macronix_spi_flash_params macronix_spi_flash_table[] = {
        },
 };
 
-static int macronix_write_status(struct spi_flash *flash, u8 sr)
-{
-       u8 cmd;
-       int ret;
-
-       ret = spi_flash_cmd_write_enable(flash);
-       if (ret < 0) {
-               debug("SF: enabling write failed\n");
-               return ret;
-       }
-
-       cmd = CMD_WRITE_STATUS;
-       ret = spi_flash_cmd_write(flash->spi, &cmd, 1, &sr, 1);
-       if (ret) {
-               debug("SF: fail to write status register\n");
-               return ret;
-       }
-
-       ret = spi_flash_cmd_wait_ready(flash, SPI_FLASH_PROG_TIMEOUT);
-       if (ret < 0) {
-               debug("SF: write status register timed out\n");
-               return ret;
-       }
-
-       return 0;
-}
-
-static int macronix_unlock(struct spi_flash *flash)
-{
-       int ret;
-
-       /* Enable status register writing and clear BP# bits */
-       ret = macronix_write_status(flash, 0);
-       if (ret)
-               debug("SF: fail to disable write protection\n");
-
-       return ret;
-}
-
 struct spi_flash *spi_flash_probe_macronix(struct spi_slave *spi, u8 *idcode)
 {
        const struct macronix_spi_flash_params *params;
@@ -153,7 +114,7 @@ struct spi_flash *spi_flash_probe_macronix(struct spi_slave *spi, u8 *idcode)
        flash->size = flash->sector_size * params->nr_blocks;
 
        /* Clear BP# bits for read-only flash */
-       macronix_unlock(flash);
+       spi_flash_cmd_write_status(flash, 0);
 
        return flash;
 }
index 4ab4e13b46c2bb4e829182fb49a5439d365ce433..00aece9291c398f44ec4db007d7048ac8727b5a3 100644 (file)
@@ -242,6 +242,33 @@ int spi_flash_cmd_erase(struct spi_flash *flash, u32 offset, size_t len)
        return ret;
 }
 
+int spi_flash_cmd_write_status(struct spi_flash *flash, u8 sr)
+{
+       u8 cmd;
+       int ret;
+
+       ret = spi_flash_cmd_write_enable(flash);
+       if (ret < 0) {
+               debug("SF: enabling write failed\n");
+               return ret;
+       }
+
+       cmd = CMD_WRITE_STATUS;
+       ret = spi_flash_cmd_write(flash->spi, &cmd, 1, &sr, 1);
+       if (ret) {
+               debug("SF: fail to write status register\n");
+               return ret;
+       }
+
+       ret = spi_flash_cmd_wait_ready(flash, SPI_FLASH_PROG_TIMEOUT);
+       if (ret < 0) {
+               debug("SF: write status register timed out\n");
+               return ret;
+       }
+
+       return 0;
+}
+
 /*
  * The following table holds all device probe functions
  *
index 3c6bccf0c88585468bb6fcfd792c805e52b592d6..141cfa8b26d75e6e816c7315530854a93035b803 100644 (file)
@@ -74,6 +74,9 @@ static inline int spi_flash_cmd_write_disable(struct spi_flash *flash)
        return spi_flash_cmd(flash->spi, CMD_WRITE_DISABLE, NULL, 0);
 }
 
+/* Program the status register. */
+int spi_flash_cmd_write_status(struct spi_flash *flash, u8 sr);
+
 /*
  * Same as spi_flash_cmd_read() except it also claims/releases the SPI
  * bus. Used as common part of the ->read() operation.
index 04cc50abcfc868e322462d3070aa553f522e4428..ced4f2473f47189c45169638df6b20cb5a500485 100644 (file)
@@ -185,27 +185,6 @@ sst_write_wp(struct spi_flash *flash, u32 offset, size_t len, const void *buf)
        return ret;
 }
 
-static int
-sst_unlock(struct spi_flash *flash)
-{
-       int ret;
-       u8 cmd, status;
-
-       ret = spi_flash_cmd_write_enable(flash);
-       if (ret)
-               return ret;
-
-       cmd = CMD_WRITE_STATUS;
-       status = 0;
-       ret = spi_flash_cmd_write(flash->spi, &cmd, 1, &status, 1);
-       if (ret)
-               debug("SF: Unable to set status byte\n");
-
-       debug("SF: sst: status = %x\n", spi_w8r8(flash->spi, CMD_READ_STATUS));
-
-       return ret;
-}
-
 struct spi_flash *
 spi_flash_probe_sst(struct spi_slave *spi, u8 *idcode)
 {
@@ -245,7 +224,7 @@ spi_flash_probe_sst(struct spi_slave *spi, u8 *idcode)
        stm->flash.size = stm->flash.sector_size * params->nr_sectors;
 
        /* Flash powers up read-only, so clear BP# bits */
-       sst_unlock(&stm->flash);
+       spi_flash_cmd_write_status(&stm->flash, 0);
 
        return &stm->flash;
 }