mtd: spinand: add spinand_read_cfg() helper
authorPatrice Chotard <patrice.chotard@foss.st.com>
Wed, 2 Jun 2021 09:49:11 +0000 (11:49 +0200)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Fri, 18 Jun 2021 07:45:20 +0000 (09:45 +0200)
Put REG_CFG reading code in spinand_read_cfg().
This function will be needed by the future SPI-NAND resume ops.

Signed-off-by: Patrice Chotard <patrice.chotard@foss.st.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20210602094913.26472-2-patrice.chotard@foss.st.com
drivers/mtd/nand/spi/core.c

index 54ae540bc66b4e847c24a41bbb80ca86a27bcd0f..a559f6107f78ca12a1ebad516621179bb02a1294 100644 (file)
@@ -138,20 +138,12 @@ int spinand_select_target(struct spinand_device *spinand, unsigned int target)
        return 0;
 }
 
-static int spinand_init_cfg_cache(struct spinand_device *spinand)
+static int spinand_read_cfg(struct spinand_device *spinand)
 {
        struct nand_device *nand = spinand_to_nand(spinand);
-       struct device *dev = &spinand->spimem->spi->dev;
        unsigned int target;
        int ret;
 
-       spinand->cfg_cache = devm_kcalloc(dev,
-                                         nand->memorg.ntargets,
-                                         sizeof(*spinand->cfg_cache),
-                                         GFP_KERNEL);
-       if (!spinand->cfg_cache)
-               return -ENOMEM;
-
        for (target = 0; target < nand->memorg.ntargets; target++) {
                ret = spinand_select_target(spinand, target);
                if (ret)
@@ -170,6 +162,21 @@ static int spinand_init_cfg_cache(struct spinand_device *spinand)
        return 0;
 }
 
+static int spinand_init_cfg_cache(struct spinand_device *spinand)
+{
+       struct nand_device *nand = spinand_to_nand(spinand);
+       struct device *dev = &spinand->spimem->spi->dev;
+
+       spinand->cfg_cache = devm_kcalloc(dev,
+                                         nand->memorg.ntargets,
+                                         sizeof(*spinand->cfg_cache),
+                                         GFP_KERNEL);
+       if (!spinand->cfg_cache)
+               return -ENOMEM;
+
+       return 0;
+}
+
 static int spinand_init_quad_enable(struct spinand_device *spinand)
 {
        bool enable = false;
@@ -1117,6 +1124,10 @@ static int spinand_init(struct spinand_device *spinand)
        if (ret)
                goto err_free_bufs;
 
+       ret = spinand_read_cfg(spinand);
+       if (ret)
+               goto err_free_bufs;
+
        ret = spinand_init_quad_enable(spinand);
        if (ret)
                goto err_free_bufs;