Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mtd: rawnand: add basic sandisk manufacturer ops

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

authored by

Johan Jonker and committed by
Miquel Raynal
12ac188b 46c37b99

+29 -1
+1
drivers/mtd/nand/raw/Makefile
··· 67 67 nand-objs += nand_hynix.o 68 68 nand-objs += nand_macronix.o 69 69 nand-objs += nand_micron.o 70 + nand-objs += nand_sandisk.o 70 71 nand-objs += nand_samsung.o 71 72 nand-objs += nand_toshiba.o
+1
drivers/mtd/nand/raw/internals.h
··· 73 73 extern const struct nand_manufacturer_ops macronix_nand_manuf_ops; 74 74 extern const struct nand_manufacturer_ops micron_nand_manuf_ops; 75 75 extern const struct nand_manufacturer_ops samsung_nand_manuf_ops; 76 + extern const struct nand_manufacturer_ops sandisk_nand_manuf_ops; 76 77 extern const struct nand_manufacturer_ops toshiba_nand_manuf_ops; 77 78 78 79 /* MLC pairing schemes */
+1 -1
drivers/mtd/nand/raw/nand_ids.c
··· 188 188 {NAND_MFR_NATIONAL, "National"}, 189 189 {NAND_MFR_RENESAS, "Renesas"}, 190 190 {NAND_MFR_SAMSUNG, "Samsung", &samsung_nand_manuf_ops}, 191 - {NAND_MFR_SANDISK, "SanDisk"}, 191 + {NAND_MFR_SANDISK, "SanDisk", &sandisk_nand_manuf_ops}, 192 192 {NAND_MFR_STMICRO, "ST Micro"}, 193 193 {NAND_MFR_TOSHIBA, "Toshiba", &toshiba_nand_manuf_ops}, 194 194 {NAND_MFR_WINBOND, "Winbond"},
+26
drivers/mtd/nand/raw/nand_sandisk.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-or-later 2 + 3 + #include "internals.h" 4 + 5 + static int 6 + sdtnqgama_choose_interface_config(struct nand_chip *chip, 7 + struct nand_interface_config *iface) 8 + { 9 + onfi_fill_interface_config(chip, iface, NAND_SDR_IFACE, 0); 10 + 11 + return nand_choose_best_sdr_timings(chip, iface, NULL); 12 + } 13 + 14 + static int sandisk_nand_init(struct nand_chip *chip) 15 + { 16 + if (!strncmp("SDTNQGAMA", chip->parameters.model, 17 + sizeof("SDTNQGAMA") - 1)) 18 + chip->ops.choose_interface_config = 19 + &sdtnqgama_choose_interface_config; 20 + 21 + return 0; 22 + } 23 + 24 + const struct nand_manufacturer_ops sandisk_nand_manuf_ops = { 25 + .init = sandisk_nand_init, 26 + };