mtd: rawnand: atmel: Enable the NFC controller at probe time
authorBoris Brezillon <boris.brezillon@collabora.com>
Mon, 20 Jul 2020 13:13:51 +0000 (16:13 +0300)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Wed, 30 Sep 2020 14:44:15 +0000 (16:44 +0200)
No need to enable it everytime select_chip() is called. If we really
care about PM, we should implement runtime PM hooks and disable the
controller and all its clocks when the controller has been unused for
some time.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
Reviewed-by: Tudor Ambarus <tudor.ambarus@microchip.com>
Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20200720131356.1579073-2-tudor.ambarus@microchip.com
drivers/mtd/nand/raw/atmel/nand-controller.c

index c3902e0..21f4f7f 100644 (file)
@@ -525,11 +525,8 @@ static void atmel_hsmc_nand_select_chip(struct nand_chip *chip, int cs)
 
        atmel_nand_select_chip(chip, cs);
 
-       if (!nand->activecs) {
-               regmap_write(nc->base.smc, ATMEL_HSMC_NFC_CTRL,
-                            ATMEL_HSMC_NFC_CTRL_DIS);
+       if (!nand->activecs)
                return;
-       }
 
        if (nand->activecs->rb.type == ATMEL_NAND_NATIVE_RB)
                chip->legacy.dev_ready = atmel_hsmc_nand_dev_ready;
@@ -542,8 +539,6 @@ static void atmel_hsmc_nand_select_chip(struct nand_chip *chip, int cs)
                           ATMEL_HSMC_NFC_CFG_PAGESIZE(mtd->writesize) |
                           ATMEL_HSMC_NFC_CFG_SPARESIZE(mtd->oobsize) |
                           ATMEL_HSMC_NFC_CFG_RSPARE);
-       regmap_write(nc->base.smc, ATMEL_HSMC_NFC_CTRL,
-                    ATMEL_HSMC_NFC_CTRL_EN);
 }
 
 static int atmel_nfc_exec_op(struct atmel_hsmc_nand_controller *nc, bool poll)
@@ -2251,6 +2246,9 @@ atmel_hsmc_nand_controller_remove(struct atmel_nand_controller *nc)
                return ret;
 
        hsmc_nc = container_of(nc, struct atmel_hsmc_nand_controller, base);
+       regmap_write(hsmc_nc->base.smc, ATMEL_HSMC_NFC_CTRL,
+                    ATMEL_HSMC_NFC_CTRL_DIS);
+
        if (hsmc_nc->sram.pool)
                gen_pool_free(hsmc_nc->sram.pool,
                              (unsigned long)hsmc_nc->sram.virt,
@@ -2303,6 +2301,8 @@ static int atmel_hsmc_nand_controller_probe(struct platform_device *pdev,
        /* Initial NFC configuration. */
        regmap_write(nc->base.smc, ATMEL_HSMC_NFC_CFG,
                     ATMEL_HSMC_NFC_CFG_DTO_MAX);
+       regmap_write(nc->base.smc, ATMEL_HSMC_NFC_CTRL,
+                    ATMEL_HSMC_NFC_CTRL_EN);
 
        ret = atmel_nand_controller_add_nands(&nc->base);
        if (ret)