mtd: rawnand: add basic sandisk manufacturer ops
authorJohan Jonker <jbx6244@gmail.com>
Tue, 13 Jun 2023 21:19:58 +0000 (23:19 +0200)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Mon, 19 Jun 2023 08:20:55 +0000 (10:20 +0200)
Add basic Sandisk manufacturer ops support to get
SDTNQGAMA timing data with the nand_get_sdr_timings()
function.

Signed-off-by: Johan Jonker <jbx6244@gmail.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/aaf4580a-a368-8f70-c9c4-21b5ed4dd599@gmail.com
drivers/mtd/nand/raw/Makefile
drivers/mtd/nand/raw/internals.h
drivers/mtd/nand/raw/nand_ids.c
drivers/mtd/nand/raw/nand_sandisk.c [new file with mode: 0644]

index 917cdfb..d93e861 100644 (file)
@@ -67,5 +67,6 @@ nand-objs += nand_esmt.o
 nand-objs += nand_hynix.o
 nand-objs += nand_macronix.o
 nand-objs += nand_micron.o
+nand-objs += nand_sandisk.o
 nand-objs += nand_samsung.o
 nand-objs += nand_toshiba.o
index 7016e0f..e9932da 100644 (file)
@@ -73,6 +73,7 @@ extern const struct nand_manufacturer_ops hynix_nand_manuf_ops;
 extern const struct nand_manufacturer_ops macronix_nand_manuf_ops;
 extern const struct nand_manufacturer_ops micron_nand_manuf_ops;
 extern const struct nand_manufacturer_ops samsung_nand_manuf_ops;
+extern const struct nand_manufacturer_ops sandisk_nand_manuf_ops;
 extern const struct nand_manufacturer_ops toshiba_nand_manuf_ops;
 
 /* MLC pairing schemes */
index dacc552..1a89ed7 100644 (file)
@@ -188,7 +188,7 @@ static const struct nand_manufacturer_desc nand_manufacturer_descs[] = {
        {NAND_MFR_NATIONAL, "National"},
        {NAND_MFR_RENESAS, "Renesas"},
        {NAND_MFR_SAMSUNG, "Samsung", &samsung_nand_manuf_ops},
-       {NAND_MFR_SANDISK, "SanDisk"},
+       {NAND_MFR_SANDISK, "SanDisk", &sandisk_nand_manuf_ops},
        {NAND_MFR_STMICRO, "ST Micro"},
        {NAND_MFR_TOSHIBA, "Toshiba", &toshiba_nand_manuf_ops},
        {NAND_MFR_WINBOND, "Winbond"},
diff --git a/drivers/mtd/nand/raw/nand_sandisk.c b/drivers/mtd/nand/raw/nand_sandisk.c
new file mode 100644 (file)
index 0000000..7c66e41
--- /dev/null
@@ -0,0 +1,26 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "internals.h"
+
+static int
+sdtnqgama_choose_interface_config(struct nand_chip *chip,
+                                 struct nand_interface_config *iface)
+{
+       onfi_fill_interface_config(chip, iface, NAND_SDR_IFACE, 0);
+
+       return nand_choose_best_sdr_timings(chip, iface, NULL);
+}
+
+static int sandisk_nand_init(struct nand_chip *chip)
+{
+       if (!strncmp("SDTNQGAMA", chip->parameters.model,
+                    sizeof("SDTNQGAMA") - 1))
+               chip->ops.choose_interface_config =
+                       &sdtnqgama_choose_interface_config;
+
+       return 0;
+}
+
+const struct nand_manufacturer_ops sandisk_nand_manuf_ops = {
+       .init = sandisk_nand_init,
+};