]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/mtd/nand/gpmi-nand/gpmi-nand.c
mtd: nand: gpmi: Kill gpmi_nand_exit()
[karo-tx-linux.git] / drivers / mtd / nand / gpmi-nand / gpmi-nand.c
index c8bbf5da2ab8b4e1dffde2478105d07fff5578fc..50f8d4a1b9832326070045d0c294d22393001fbd 100644 (file)
@@ -127,6 +127,18 @@ static const struct gpmi_devdata gpmi_devdata_imx6sx = {
        .clks_count = ARRAY_SIZE(gpmi_clks_for_mx6),
 };
 
+static const char * const gpmi_clks_for_mx7d[] = {
+       "gpmi_io", "gpmi_bch_apb",
+};
+
+static const struct gpmi_devdata gpmi_devdata_imx7d = {
+       .type = IS_MX7D,
+       .bch_max_ecc_strength = 62,
+       .max_chain_delay = 12,
+       .clks = gpmi_clks_for_mx7d,
+       .clks_count = ARRAY_SIZE(gpmi_clks_for_mx7d),
+};
+
 static irqreturn_t bch_irq(int irq, void *cookie)
 {
        struct gpmi_nand_data *this = cookie;
@@ -1924,12 +1936,6 @@ static int gpmi_set_geometry(struct gpmi_nand_data *this)
        return gpmi_alloc_dma_buffer(this);
 }
 
-static void gpmi_nand_exit(struct gpmi_nand_data *this)
-{
-       nand_release(nand_to_mtd(&this->nand));
-       gpmi_free_dma_buffer(this);
-}
-
 static int gpmi_init_last(struct gpmi_nand_data *this)
 {
        struct nand_chip *chip = &this->nand;
@@ -2043,18 +2049,20 @@ static int gpmi_nand_init(struct gpmi_nand_data *this)
 
        ret = nand_boot_init(this);
        if (ret)
-               goto err_out;
+               goto err_nand_cleanup;
        ret = chip->scan_bbt(mtd);
        if (ret)
-               goto err_out;
+               goto err_nand_cleanup;
 
        ret = mtd_device_register(mtd, NULL, 0);
        if (ret)
-               goto err_out;
+               goto err_nand_cleanup;
        return 0;
 
+err_nand_cleanup:
+       nand_cleanup(chip);
 err_out:
-       gpmi_nand_exit(this);
+       gpmi_free_dma_buffer(this);
        return ret;
 }
 
@@ -2071,6 +2079,9 @@ static const struct of_device_id gpmi_nand_id_table[] = {
        }, {
                .compatible = "fsl,imx6sx-gpmi-nand",
                .data = &gpmi_devdata_imx6sx,
+       }, {
+               .compatible = "fsl,imx7d-gpmi-nand",
+               .data = &gpmi_devdata_imx7d,
        }, {}
 };
 MODULE_DEVICE_TABLE(of, gpmi_nand_id_table);
@@ -2124,7 +2135,8 @@ static int gpmi_nand_remove(struct platform_device *pdev)
 {
        struct gpmi_nand_data *this = platform_get_drvdata(pdev);
 
-       gpmi_nand_exit(this);
+       nand_release(nand_to_mtd(&this->nand));
+       gpmi_free_dma_buffer(this);
        release_resources(this);
        return 0;
 }