mtd: rawnand: timings: Provide onfi_fill_data_interface() with a data interface
Right now the core uses onfi_fill_data_interface() to initialize the nand_data_interface object embedded in nand_chip, but we are about to allocate this object dynamically and let manufacturer drivers provide their own interface config. Let's patch the onfi_fill_data_interface() so it can initialize an interface config that's not the one currently attached to the nand_chip. Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Link: https://lore.kernel.org/linux-mtd/20200529111322.7184-14-miquel.raynal@bootlin.com
This commit is contained in:
parent
844cc46460
commit
623c0141f5
@ -85,6 +85,7 @@ int nand_markbad_bbm(struct nand_chip *chip, loff_t ofs);
|
||||
int nand_erase_nand(struct nand_chip *chip, struct erase_info *instr,
|
||||
int allowbbt);
|
||||
int onfi_fill_data_interface(struct nand_chip *chip,
|
||||
struct nand_data_interface *iface,
|
||||
enum nand_data_interface_type type,
|
||||
int timing_mode);
|
||||
int nand_get_features(struct nand_chip *chip, int addr, u8 *subfeature_param);
|
||||
|
@ -927,7 +927,7 @@ static int nand_reset_data_interface(struct nand_chip *chip, int chipnr)
|
||||
* timings to timing mode 0.
|
||||
*/
|
||||
|
||||
onfi_fill_data_interface(chip, NAND_SDR_IFACE, 0);
|
||||
onfi_fill_data_interface(chip, &chip->data_interface, NAND_SDR_IFACE, 0);
|
||||
ret = chip->controller->ops->setup_data_interface(chip, chipnr,
|
||||
&chip->data_interface);
|
||||
if (ret)
|
||||
@ -1040,7 +1040,8 @@ static int nand_choose_data_interface(struct nand_chip *chip)
|
||||
}
|
||||
|
||||
for (mode = fls(modes) - 1; mode >= 0; mode--) {
|
||||
ret = onfi_fill_data_interface(chip, NAND_SDR_IFACE, mode);
|
||||
ret = onfi_fill_data_interface(chip, &chip->data_interface,
|
||||
NAND_SDR_IFACE, mode);
|
||||
if (ret)
|
||||
continue;
|
||||
|
||||
@ -5182,7 +5183,7 @@ static int nand_scan_ident(struct nand_chip *chip, unsigned int maxchips,
|
||||
mutex_init(&chip->lock);
|
||||
|
||||
/* Enforce the right timings for reset/detection */
|
||||
onfi_fill_data_interface(chip, NAND_SDR_IFACE, 0);
|
||||
onfi_fill_data_interface(chip, &chip->data_interface, NAND_SDR_IFACE, 0);
|
||||
|
||||
ret = nand_dt_init(chip);
|
||||
if (ret)
|
||||
|
@ -276,14 +276,15 @@ static const struct nand_data_interface onfi_sdr_timings[] = {
|
||||
/**
|
||||
* onfi_fill_data_interface - Initialize a data interface from a given ONFI mode
|
||||
* @chip: The NAND chip
|
||||
* @iface: The data interface to fill
|
||||
* @type: The data interface type
|
||||
* @timing_mode: The ONFI timing mode
|
||||
*/
|
||||
int onfi_fill_data_interface(struct nand_chip *chip,
|
||||
struct nand_data_interface *iface,
|
||||
enum nand_data_interface_type type,
|
||||
int timing_mode)
|
||||
{
|
||||
struct nand_data_interface *iface = &chip->data_interface;
|
||||
struct onfi_params *onfi = chip->parameters.onfi;
|
||||
|
||||
if (type != NAND_SDR_IFACE)
|
||||
|
Loading…
Reference in New Issue
Block a user