mtd: spi: Replace ad-hoc default implementation with spi_mem_op
[oweals/u-boot.git] / drivers / mtd / spi / spi-nor-core.c
index b7f073387796a10e795e7c8b27f16c3a920ee583..c4e2f6a08fa8372cde2e9e5981784e08ec0dac4d 100644 (file)
@@ -524,8 +524,11 @@ static int read_bar(struct spi_nor *nor, const struct flash_info *info)
  */
 static int spi_nor_erase_sector(struct spi_nor *nor, u32 addr)
 {
-       u8 buf[SPI_NOR_MAX_ADDR_WIDTH];
-       int i;
+       struct spi_mem_op op =
+               SPI_MEM_OP(SPI_MEM_OP_CMD(nor->erase_opcode, 1),
+                          SPI_MEM_OP_ADDR(nor->addr_width, addr, 1),
+                          SPI_MEM_OP_NO_DUMMY,
+                          SPI_MEM_OP_NO_DATA);
 
        if (nor->erase)
                return nor->erase(nor, addr);
@@ -534,12 +537,7 @@ static int spi_nor_erase_sector(struct spi_nor *nor, u32 addr)
         * Default implementation, if driver doesn't have a specialized HW
         * control
         */
-       for (i = nor->addr_width - 1; i >= 0; i--) {
-               buf[i] = addr & 0xff;
-               addr >>= 8;
-       }
-
-       return nor->write_reg(nor, nor->erase_opcode, buf, nor->addr_width);
+       return spi_mem_exec_op(nor->spi, &op);
 }
 
 /*