mtd: spi-nor: Move manufacturer quad_enable() in ->default_init()
authorTudor Ambarus <tudor.ambarus@microchip.com>
Sat, 24 Aug 2019 12:00:41 +0000 (12:00 +0000)
committerTudor Ambarus <tudor.ambarus@microchip.com>
Wed, 28 Aug 2019 09:40:27 +0000 (12:40 +0300)
The goal is to move the quad_enable manufacturer specific init in the
nor->manufacturer->fixups->default_init()

The legacy quad_enable() implementation is spansion_quad_enable(),
select this method by default.

Set specific manufacturer fixups->default_init() hooks to overwrite
the default quad_enable() implementation when needed.

Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Vignesh Raghavendra <vigneshr@ti.com>
drivers/mtd/spi-nor/spi-nor.c

index 3dbbfe3..2a23953 100644 (file)
@@ -4150,13 +4150,38 @@ exit:
        return err;
 }
 
+static void macronix_set_default_init(struct spi_nor *nor)
+{
+       nor->params.quad_enable = macronix_quad_enable;
+}
+
+static void st_micron_set_default_init(struct spi_nor *nor)
+{
+       nor->params.quad_enable = NULL;
+}
+
 /**
  * spi_nor_manufacturer_init_params() - Initialize the flash's parameters and
- * settings based on ->default_init() hook.
+ * settings based on MFR register and ->default_init() hook.
  * @nor:       pointer to a 'struct spi-nor'.
  */
 static void spi_nor_manufacturer_init_params(struct spi_nor *nor)
 {
+       /* Init flash parameters based on MFR */
+       switch (JEDEC_MFR(nor->info)) {
+       case SNOR_MFR_MACRONIX:
+               macronix_set_default_init(nor);
+               break;
+
+       case SNOR_MFR_ST:
+       case SNOR_MFR_MICRON:
+               st_micron_set_default_init(nor);
+               break;
+
+       default:
+               break;
+       }
+
        if (nor->info->fixups && nor->info->fixups->default_init)
                nor->info->fixups->default_init(nor);
 }
@@ -4168,6 +4193,9 @@ static int spi_nor_init_params(struct spi_nor *nor)
        const struct flash_info *info = nor->info;
        u8 i, erase_mask;
 
+       /* Initialize legacy flash parameters and settings. */
+       params->quad_enable = spansion_quad_enable;
+
        /* Set SPI NOR sizes. */
        params->size = (u64)info->sector_size * info->n_sectors;
        params->page_size = info->page_size;
@@ -4233,24 +4261,6 @@ static int spi_nor_init_params(struct spi_nor *nor)
                               SPINOR_OP_SE);
        spi_nor_init_uniform_erase_map(map, erase_mask, params->size);
 
-       /* Select the procedure to set the Quad Enable bit. */
-       if (params->hwcaps.mask & (SNOR_HWCAPS_READ_QUAD |
-                                  SNOR_HWCAPS_PP_QUAD)) {
-               switch (JEDEC_MFR(info)) {
-               case SNOR_MFR_MACRONIX:
-                       params->quad_enable = macronix_quad_enable;
-                       break;
-
-               case SNOR_MFR_ST:
-               case SNOR_MFR_MICRON:
-                       break;
-
-               default:
-                       /* Kept only for backward compatibility purpose. */
-                       params->quad_enable = spansion_quad_enable;
-                       break;
-               }
-       }
 
        spi_nor_manufacturer_init_params(nor);