mtd: rawnand: Deprecate the ->select_chip() hook
Now that the CS line to be selected is passed to ->exec_op() and stored in chip->cur_cs and after patching all drivers implementing ->exec_op() to stop implementing this method, we can deprecate it by moving it to the nand_legacy structure. Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com> Tested-by: Janusz Krzysztofik <jmkrzyszt@gmail.com> Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
This commit is contained in:
parent
1770022ffa
commit
7d6c37e90c
|
@ -1477,7 +1477,7 @@ static void atmel_nand_init(struct atmel_nand_controller *nc,
|
|||
chip->legacy.write_byte = atmel_nand_write_byte;
|
||||
chip->legacy.read_buf = atmel_nand_read_buf;
|
||||
chip->legacy.write_buf = atmel_nand_write_buf;
|
||||
chip->select_chip = atmel_nand_select_chip;
|
||||
chip->legacy.select_chip = atmel_nand_select_chip;
|
||||
|
||||
if (nc->mck && nc->caps->ops->setup_data_interface)
|
||||
chip->setup_data_interface = atmel_nand_setup_data_interface;
|
||||
|
@ -1525,7 +1525,7 @@ static void atmel_hsmc_nand_init(struct atmel_nand_controller *nc,
|
|||
|
||||
/* Overload some methods for the HSMC controller. */
|
||||
chip->legacy.cmd_ctrl = atmel_hsmc_nand_cmd_ctrl;
|
||||
chip->select_chip = atmel_hsmc_nand_select_chip;
|
||||
chip->legacy.select_chip = atmel_hsmc_nand_select_chip;
|
||||
}
|
||||
|
||||
static int atmel_nand_controller_remove_nand(struct atmel_nand *nand)
|
||||
|
|
|
@ -430,7 +430,7 @@ static int au1550nd_probe(struct platform_device *pdev)
|
|||
ctx->cs = cs;
|
||||
|
||||
this->legacy.dev_ready = au1550_device_ready;
|
||||
this->select_chip = au1550_select_chip;
|
||||
this->legacy.select_chip = au1550_select_chip;
|
||||
this->legacy.cmdfunc = au1550_command;
|
||||
|
||||
/* 30 us command delay time */
|
||||
|
|
|
@ -383,7 +383,7 @@ int bcm47xxnflash_ops_bcm4706_init(struct bcm47xxnflash *b47n)
|
|||
u8 tbits, col_bits, col_size, row_bits, row_bsize;
|
||||
u32 val;
|
||||
|
||||
b47n->nand_chip.select_chip = bcm47xxnflash_ops_bcm4706_select_chip;
|
||||
nand_chip->legacy.select_chip = bcm47xxnflash_ops_bcm4706_select_chip;
|
||||
nand_chip->legacy.cmd_ctrl = bcm47xxnflash_ops_bcm4706_cmd_ctrl;
|
||||
nand_chip->legacy.dev_ready = bcm47xxnflash_ops_bcm4706_dev_ready;
|
||||
b47n->nand_chip.legacy.cmdfunc = bcm47xxnflash_ops_bcm4706_cmdfunc;
|
||||
|
|
|
@ -708,7 +708,7 @@ static int cafe_nand_probe(struct pci_dev *pdev,
|
|||
cafe->nand.legacy.read_byte = cafe_read_byte;
|
||||
cafe->nand.legacy.read_buf = cafe_read_buf;
|
||||
cafe->nand.legacy.write_buf = cafe_write_buf;
|
||||
cafe->nand.select_chip = cafe_select_chip;
|
||||
cafe->nand.legacy.select_chip = cafe_select_chip;
|
||||
cafe->nand.legacy.set_features = nand_get_set_features_notsupp;
|
||||
cafe->nand.legacy.get_features = nand_get_set_features_notsupp;
|
||||
|
||||
|
|
|
@ -762,7 +762,7 @@ static int nand_davinci_probe(struct platform_device *pdev)
|
|||
info->chip.legacy.IO_ADDR_R = vaddr;
|
||||
info->chip.legacy.IO_ADDR_W = vaddr;
|
||||
info->chip.legacy.chip_delay = 0;
|
||||
info->chip.select_chip = nand_davinci_select_chip;
|
||||
info->chip.legacy.select_chip = nand_davinci_select_chip;
|
||||
|
||||
/* options such as NAND_BBT_USE_FLASH */
|
||||
info->chip.bbt_options = pdata->bbt_options;
|
||||
|
|
|
@ -1355,7 +1355,7 @@ int denali_init(struct denali_nand_info *denali)
|
|||
if (!mtd->name)
|
||||
mtd->name = "denali-nand";
|
||||
|
||||
chip->select_chip = denali_select_chip;
|
||||
chip->legacy.select_chip = denali_select_chip;
|
||||
chip->legacy.read_byte = denali_read_byte;
|
||||
chip->legacy.write_byte = denali_write_byte;
|
||||
chip->legacy.cmd_ctrl = denali_cmd_ctrl;
|
||||
|
|
|
@ -1390,7 +1390,7 @@ static inline int __init doc2001plus_init(struct mtd_info *mtd)
|
|||
this->legacy.read_buf = doc2001plus_readbuf;
|
||||
doc->late_init = inftl_scan_bbt;
|
||||
this->legacy.cmd_ctrl = NULL;
|
||||
this->select_chip = doc2001plus_select_chip;
|
||||
this->legacy.select_chip = doc2001plus_select_chip;
|
||||
this->legacy.cmdfunc = doc2001plus_command;
|
||||
this->ecc.hwctl = doc2001plus_enable_hwecc;
|
||||
|
||||
|
@ -1568,7 +1568,7 @@ static int __init doc_probe(unsigned long physadr)
|
|||
mtd_set_ooblayout(mtd, &doc200x_ooblayout_ops);
|
||||
|
||||
nand_set_controller_data(nand, doc);
|
||||
nand->select_chip = doc200x_select_chip;
|
||||
nand->legacy.select_chip = doc200x_select_chip;
|
||||
nand->legacy.cmd_ctrl = doc200x_hwcontrol;
|
||||
nand->legacy.dev_ready = doc200x_dev_ready;
|
||||
nand->legacy.waitfunc = doc200x_wait;
|
||||
|
|
|
@ -779,7 +779,7 @@ static int fsl_elbc_chip_init(struct fsl_elbc_mtd *priv)
|
|||
chip->legacy.read_byte = fsl_elbc_read_byte;
|
||||
chip->legacy.write_buf = fsl_elbc_write_buf;
|
||||
chip->legacy.read_buf = fsl_elbc_read_buf;
|
||||
chip->select_chip = fsl_elbc_select_chip;
|
||||
chip->legacy.select_chip = fsl_elbc_select_chip;
|
||||
chip->legacy.cmdfunc = fsl_elbc_cmdfunc;
|
||||
chip->legacy.waitfunc = fsl_elbc_wait;
|
||||
chip->legacy.set_features = nand_get_set_features_notsupp;
|
||||
|
|
|
@ -864,7 +864,7 @@ static int fsl_ifc_chip_init(struct fsl_ifc_mtd *priv)
|
|||
|
||||
chip->legacy.write_buf = fsl_ifc_write_buf;
|
||||
chip->legacy.read_buf = fsl_ifc_read_buf;
|
||||
chip->select_chip = fsl_ifc_select_chip;
|
||||
chip->legacy.select_chip = fsl_ifc_select_chip;
|
||||
chip->legacy.cmdfunc = fsl_ifc_cmdfunc;
|
||||
chip->legacy.waitfunc = fsl_ifc_wait;
|
||||
chip->legacy.set_features = nand_get_set_features_notsupp;
|
||||
|
|
|
@ -170,7 +170,7 @@ static int fun_chip_init(struct fsl_upm_nand *fun,
|
|||
fun->chip.ecc.mode = NAND_ECC_SOFT;
|
||||
fun->chip.ecc.algo = NAND_ECC_HAMMING;
|
||||
if (fun->mchip_count > 1)
|
||||
fun->chip.select_chip = fun_select_chip;
|
||||
fun->chip.legacy.select_chip = fun_select_chip;
|
||||
|
||||
if (fun->rnb_gpio[0] >= 0)
|
||||
fun->chip.legacy.dev_ready = fun_chip_ready;
|
||||
|
|
|
@ -1907,7 +1907,7 @@ static int gpmi_nand_init(struct gpmi_nand_data *this)
|
|||
/* init the nand_chip{}, we don't support a 16-bit NAND Flash bus. */
|
||||
nand_set_controller_data(chip, this);
|
||||
nand_set_flash_node(chip, this->pdev->dev.of_node);
|
||||
chip->select_chip = gpmi_select_chip;
|
||||
chip->legacy.select_chip = gpmi_select_chip;
|
||||
chip->setup_data_interface = gpmi_setup_data_interface;
|
||||
chip->legacy.cmd_ctrl = gpmi_cmd_ctrl;
|
||||
chip->legacy.dev_ready = gpmi_dev_ready;
|
||||
|
|
|
@ -783,7 +783,7 @@ static int hisi_nfc_probe(struct platform_device *pdev)
|
|||
nand_set_controller_data(chip, host);
|
||||
nand_set_flash_node(chip, np);
|
||||
chip->legacy.cmdfunc = hisi_nfc_cmdfunc;
|
||||
chip->select_chip = hisi_nfc_select_chip;
|
||||
chip->legacy.select_chip = hisi_nfc_select_chip;
|
||||
chip->legacy.read_byte = hisi_nfc_read_byte;
|
||||
chip->legacy.write_buf = hisi_nfc_write_buf;
|
||||
chip->legacy.read_buf = hisi_nfc_read_buf;
|
||||
|
|
|
@ -427,7 +427,7 @@ static int jz_nand_probe(struct platform_device *pdev)
|
|||
|
||||
chip->legacy.chip_delay = 50;
|
||||
chip->legacy.cmd_ctrl = jz_nand_cmd_ctrl;
|
||||
chip->select_chip = jz_nand_select_chip;
|
||||
chip->legacy.select_chip = jz_nand_select_chip;
|
||||
chip->dummy_controller.ops = &jz_nand_controller_ops;
|
||||
|
||||
if (nand->busy_gpio)
|
||||
|
|
|
@ -279,7 +279,7 @@ static int jz4780_nand_init_chip(struct platform_device *pdev,
|
|||
chip->legacy.IO_ADDR_W = cs->base + OFFSET_DATA;
|
||||
chip->legacy.chip_delay = RB_DELAY_US;
|
||||
chip->options = NAND_NO_SUBPAGE_WRITE;
|
||||
chip->select_chip = jz4780_nand_select_chip;
|
||||
chip->legacy.select_chip = jz4780_nand_select_chip;
|
||||
chip->legacy.cmd_ctrl = jz4780_nand_cmd_ctrl;
|
||||
chip->ecc.mode = NAND_ECC_HW;
|
||||
chip->controller = &nfc->controller;
|
||||
|
|
|
@ -697,7 +697,7 @@ static int mpc5121_nfc_probe(struct platform_device *op)
|
|||
chip->legacy.read_byte = mpc5121_nfc_read_byte;
|
||||
chip->legacy.read_buf = mpc5121_nfc_read_buf;
|
||||
chip->legacy.write_buf = mpc5121_nfc_write_buf;
|
||||
chip->select_chip = mpc5121_nfc_select_chip;
|
||||
chip->legacy.select_chip = mpc5121_nfc_select_chip;
|
||||
chip->legacy.set_features = nand_get_set_features_notsupp;
|
||||
chip->legacy.get_features = nand_get_set_features_notsupp;
|
||||
chip->bbt_options = NAND_BBT_USE_FLASH;
|
||||
|
@ -712,7 +712,7 @@ static int mpc5121_nfc_probe(struct platform_device *op)
|
|||
return retval;
|
||||
}
|
||||
|
||||
chip->select_chip = ads5121_select_chip;
|
||||
chip->legacy.select_chip = ads5121_select_chip;
|
||||
}
|
||||
|
||||
/* Enable NFC clock */
|
||||
|
|
|
@ -1333,7 +1333,7 @@ static int mtk_nfc_nand_chip_init(struct device *dev, struct mtk_nfc *nfc,
|
|||
|
||||
nand->options |= NAND_USE_BOUNCE_BUFFER | NAND_SUBPAGE_READ;
|
||||
nand->legacy.dev_ready = mtk_nfc_dev_ready;
|
||||
nand->select_chip = mtk_nfc_select_chip;
|
||||
nand->legacy.select_chip = mtk_nfc_select_chip;
|
||||
nand->legacy.write_byte = mtk_nfc_write_byte;
|
||||
nand->legacy.write_buf = mtk_nfc_write_buf;
|
||||
nand->legacy.read_byte = mtk_nfc_read_byte;
|
||||
|
|
|
@ -1828,7 +1828,7 @@ static int mxcnd_probe(struct platform_device *pdev)
|
|||
this->ecc.bytes = host->devtype_data->eccbytes;
|
||||
host->eccsize = host->devtype_data->eccsize;
|
||||
|
||||
this->select_chip = host->devtype_data->select_chip;
|
||||
this->legacy.select_chip = host->devtype_data->select_chip;
|
||||
this->ecc.size = 512;
|
||||
mtd_set_ooblayout(mtd, host->devtype_data->ooblayout);
|
||||
|
||||
|
|
|
@ -248,8 +248,8 @@ void nand_select_target(struct nand_chip *chip, unsigned int cs)
|
|||
|
||||
chip->cur_cs = cs;
|
||||
|
||||
if (chip->select_chip)
|
||||
chip->select_chip(chip, cs);
|
||||
if (chip->legacy.select_chip)
|
||||
chip->legacy.select_chip(chip, cs);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nand_select_target);
|
||||
|
||||
|
@ -262,8 +262,8 @@ EXPORT_SYMBOL_GPL(nand_select_target);
|
|||
*/
|
||||
void nand_deselect_target(struct nand_chip *chip)
|
||||
{
|
||||
if (chip->select_chip)
|
||||
chip->select_chip(chip, -1);
|
||||
if (chip->legacy.select_chip)
|
||||
chip->legacy.select_chip(chip, -1);
|
||||
|
||||
chip->cur_cs = -1;
|
||||
}
|
||||
|
|
|
@ -592,8 +592,8 @@ void nand_legacy_set_defaults(struct nand_chip *chip)
|
|||
if (chip->legacy.waitfunc == NULL)
|
||||
chip->legacy.waitfunc = nand_wait;
|
||||
|
||||
if (!chip->select_chip)
|
||||
chip->select_chip = nand_select_chip;
|
||||
if (!chip->legacy.select_chip)
|
||||
chip->legacy.select_chip = nand_select_chip;
|
||||
|
||||
/* If called twice, pointers that depend on busw may need to be reset */
|
||||
if (!chip->legacy.read_byte || chip->legacy.read_byte == nand_read_byte)
|
||||
|
@ -626,9 +626,10 @@ int nand_legacy_check_hooks(struct nand_chip *chip)
|
|||
|
||||
/*
|
||||
* Default functions assigned for ->legacy.cmdfunc() and
|
||||
* ->select_chip() both expect ->legacy.cmd_ctrl() to be populated.
|
||||
* ->legacy.select_chip() both expect ->legacy.cmd_ctrl() to be
|
||||
* populated.
|
||||
*/
|
||||
if ((!chip->legacy.cmdfunc || !chip->select_chip) &&
|
||||
if ((!chip->legacy.cmdfunc || !chip->legacy.select_chip) &&
|
||||
!chip->legacy.cmd_ctrl) {
|
||||
pr_err("->legacy.cmd_ctrl() should be provided\n");
|
||||
return -EINVAL;
|
||||
|
|
|
@ -146,7 +146,7 @@ static int ndfc_chip_init(struct ndfc_controller *ndfc,
|
|||
chip->legacy.IO_ADDR_W = ndfc->ndfcbase + NDFC_DATA;
|
||||
chip->legacy.cmd_ctrl = ndfc_hwcontrol;
|
||||
chip->legacy.dev_ready = ndfc_ready;
|
||||
chip->select_chip = ndfc_select_chip;
|
||||
chip->legacy.select_chip = ndfc_select_chip;
|
||||
chip->legacy.chip_delay = 50;
|
||||
chip->controller = &ndfc->ndfc_control;
|
||||
chip->legacy.read_buf = ndfc_read_buf;
|
||||
|
|
|
@ -63,7 +63,7 @@ static int plat_nand_probe(struct platform_device *pdev)
|
|||
data->chip.legacy.IO_ADDR_W = data->io_base;
|
||||
data->chip.legacy.cmd_ctrl = pdata->ctrl.cmd_ctrl;
|
||||
data->chip.legacy.dev_ready = pdata->ctrl.dev_ready;
|
||||
data->chip.select_chip = pdata->ctrl.select_chip;
|
||||
data->chip.legacy.select_chip = pdata->ctrl.select_chip;
|
||||
data->chip.legacy.write_buf = pdata->ctrl.write_buf;
|
||||
data->chip.legacy.read_buf = pdata->ctrl.read_buf;
|
||||
data->chip.legacy.chip_delay = pdata->chip.chip_delay;
|
||||
|
|
|
@ -2804,7 +2804,7 @@ static int qcom_nand_host_init_and_register(struct qcom_nand_controller *nandc,
|
|||
mtd->dev.parent = dev;
|
||||
|
||||
chip->legacy.cmdfunc = qcom_nandc_command;
|
||||
chip->select_chip = qcom_nandc_select_chip;
|
||||
chip->legacy.select_chip = qcom_nandc_select_chip;
|
||||
chip->legacy.read_byte = qcom_nandc_read_byte;
|
||||
chip->legacy.read_buf = qcom_nandc_read_buf;
|
||||
chip->legacy.write_buf = qcom_nandc_write_buf;
|
||||
|
|
|
@ -866,7 +866,7 @@ static void s3c2410_nand_init_chip(struct s3c2410_nand_info *info,
|
|||
|
||||
chip->legacy.write_buf = s3c2410_nand_write_buf;
|
||||
chip->legacy.read_buf = s3c2410_nand_read_buf;
|
||||
chip->select_chip = s3c2410_nand_select_chip;
|
||||
chip->legacy.select_chip = s3c2410_nand_select_chip;
|
||||
chip->legacy.chip_delay = 50;
|
||||
nand_set_controller_data(chip, nmtd);
|
||||
chip->options = set->options;
|
||||
|
|
|
@ -1170,7 +1170,7 @@ static int flctl_probe(struct platform_device *pdev)
|
|||
nand->legacy.read_byte = flctl_read_byte;
|
||||
nand->legacy.write_buf = flctl_write_buf;
|
||||
nand->legacy.read_buf = flctl_read_buf;
|
||||
nand->select_chip = flctl_select_chip;
|
||||
nand->legacy.select_chip = flctl_select_chip;
|
||||
nand->legacy.cmdfunc = flctl_cmdfunc;
|
||||
nand->legacy.set_features = nand_get_set_features_notsupp;
|
||||
nand->legacy.get_features = nand_get_set_features_notsupp;
|
||||
|
|
|
@ -1922,7 +1922,7 @@ static int sunxi_nand_chip_init(struct device *dev, struct sunxi_nfc *nfc,
|
|||
*/
|
||||
nand->ecc.mode = NAND_ECC_HW;
|
||||
nand_set_flash_node(nand, np);
|
||||
nand->select_chip = sunxi_nfc_select_chip;
|
||||
nand->legacy.select_chip = sunxi_nfc_select_chip;
|
||||
nand->legacy.cmd_ctrl = sunxi_nfc_cmd_ctrl;
|
||||
nand->legacy.read_buf = sunxi_nfc_read_buf;
|
||||
nand->legacy.write_buf = sunxi_nfc_write_buf;
|
||||
|
|
|
@ -567,7 +567,7 @@ static int chip_init(struct device *dev, struct device_node *np)
|
|||
chip->legacy.read_byte = tango_read_byte;
|
||||
chip->legacy.write_buf = tango_write_buf;
|
||||
chip->legacy.read_buf = tango_read_buf;
|
||||
chip->select_chip = tango_select_chip;
|
||||
chip->legacy.select_chip = tango_select_chip;
|
||||
chip->legacy.cmd_ctrl = tango_cmd_ctrl;
|
||||
chip->legacy.dev_ready = tango_dev_ready;
|
||||
chip->setup_data_interface = tango_set_timings;
|
||||
|
|
|
@ -176,7 +176,7 @@ static int xway_nand_probe(struct platform_device *pdev)
|
|||
|
||||
data->chip.legacy.cmd_ctrl = xway_cmd_ctrl;
|
||||
data->chip.legacy.dev_ready = xway_dev_ready;
|
||||
data->chip.select_chip = xway_select_chip;
|
||||
data->chip.legacy.select_chip = xway_select_chip;
|
||||
data->chip.legacy.write_buf = xway_write_buf;
|
||||
data->chip.legacy.read_buf = xway_read_buf;
|
||||
data->chip.legacy.read_byte = xway_read_byte;
|
||||
|
|
|
@ -902,6 +902,7 @@ int nand_op_parser_exec_op(struct nand_chip *chip,
|
|||
* struct nand_legacy - NAND chip legacy fields/hooks
|
||||
* @IO_ADDR_R: address to read the 8 I/O lines of the flash device
|
||||
* @IO_ADDR_W: address to write the 8 I/O lines of the flash device
|
||||
* @select_chip: select/deselect a specific target/die
|
||||
* @read_byte: read one byte from the chip
|
||||
* @write_byte: write a single byte to the chip on the low 8 I/O lines
|
||||
* @write_buf: write data from the buffer to the chip
|
||||
|
@ -927,6 +928,7 @@ int nand_op_parser_exec_op(struct nand_chip *chip,
|
|||
struct nand_legacy {
|
||||
void __iomem *IO_ADDR_R;
|
||||
void __iomem *IO_ADDR_W;
|
||||
void (*select_chip)(struct nand_chip *chip, int cs);
|
||||
u8 (*read_byte)(struct nand_chip *chip);
|
||||
void (*write_byte)(struct nand_chip *chip, u8 byte);
|
||||
void (*write_buf)(struct nand_chip *chip, const u8 *buf, int len);
|
||||
|
@ -954,7 +956,6 @@ struct nand_legacy {
|
|||
* you're modifying an existing driver that is using those
|
||||
* fields/hooks, you should consider reworking the driver
|
||||
* avoid using them.
|
||||
* @select_chip: [REPLACEABLE] select chip nr
|
||||
* @exec_op: controller specific method to execute NAND operations.
|
||||
* This method replaces ->cmdfunc(),
|
||||
* ->legacy.{read,write}_{buf,byte,word}(),
|
||||
|
@ -1040,7 +1041,6 @@ struct nand_chip {
|
|||
|
||||
struct nand_legacy legacy;
|
||||
|
||||
void (*select_chip)(struct nand_chip *chip, int cs);
|
||||
int (*exec_op)(struct nand_chip *chip,
|
||||
const struct nand_operation *op,
|
||||
bool check_only);
|
||||
|
|
Loading…
Reference in New Issue