Commit f1d46942 authored by Boris Brezillon's avatar Boris Brezillon Committed by Miquel Raynal
Browse files

mtd: rawnand: Pass a nand_chip object to chip->waitfunc()



Let's make the raw NAND API consistent by patching all helpers and
hooks to take a nand_chip object instead of an mtd_info one or
remove the mtd_info object when both are passed.

Let's tackle the chip->waitfunc() hook.

Signed-off-by: default avatarBoris Brezillon <boris.brezillon@bootlin.com>
Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
parent 5295cf2e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -945,7 +945,7 @@ static int atmel_hsmc_nand_pmecc_write_pg(struct nand_chip *chip,
		dev_err(nc->base.dev, "Failed to program NAND page (err = %d)\n",
			ret);

	status = chip->waitfunc(mtd, chip);
	status = chip->waitfunc(chip);
	if (status & NAND_STATUS_FAIL)
		return -EIO;

+5 −7
Original line number Diff line number Diff line
@@ -1237,9 +1237,8 @@ static void brcmnand_cmd_ctrl(struct nand_chip *chip, int dat,
	/* intentionally left blank */
}

static int brcmnand_waitfunc(struct mtd_info *mtd, struct nand_chip *this)
static int brcmnand_waitfunc(struct nand_chip *chip)
{
	struct nand_chip *chip = mtd_to_nand(mtd);
	struct brcmnand_host *host = nand_get_controller_data(chip);
	struct brcmnand_controller *ctrl = host->ctrl;
	unsigned long timeo = msecs_to_jiffies(100);
@@ -1274,7 +1273,6 @@ static int brcmnand_low_level_op(struct brcmnand_host *host,
				 enum brcmnand_llop_type type, u32 data,
				 bool last_op)
{
	struct mtd_info *mtd = nand_to_mtd(&host->chip);
	struct nand_chip *chip = &host->chip;
	struct brcmnand_controller *ctrl = host->ctrl;
	u32 tmp;
@@ -1307,7 +1305,7 @@ static int brcmnand_low_level_op(struct brcmnand_host *host,
	(void)brcmnand_read_reg(ctrl, BRCMNAND_LL_OP);

	brcmnand_send_cmd(host, CMD_LOW_LEVEL_OP);
	return brcmnand_waitfunc(mtd, chip);
	return brcmnand_waitfunc(chip);
}

static void brcmnand_cmdfunc(struct nand_chip *chip, unsigned command,
@@ -1383,7 +1381,7 @@ static void brcmnand_cmdfunc(struct nand_chip *chip, unsigned command,
	(void)brcmnand_read_reg(ctrl, BRCMNAND_CMD_ADDRESS);

	brcmnand_send_cmd(host, native_cmd);
	brcmnand_waitfunc(mtd, chip);
	brcmnand_waitfunc(chip);

	if (native_cmd == CMD_PARAMETER_READ ||
			native_cmd == CMD_PARAMETER_CHANGE_COL) {
@@ -1615,7 +1613,7 @@ static int brcmnand_read_by_pio(struct mtd_info *mtd, struct nand_chip *chip,
		(void)brcmnand_read_reg(ctrl, BRCMNAND_CMD_ADDRESS);
		/* SPARE_AREA_READ does not use ECC, so just use PAGE_READ */
		brcmnand_send_cmd(host, CMD_PAGE_READ);
		brcmnand_waitfunc(mtd, chip);
		brcmnand_waitfunc(chip);

		if (likely(buf)) {
			brcmnand_soc_data_bus_prepare(ctrl->soc, false);
@@ -1893,7 +1891,7 @@ static int brcmnand_write(struct mtd_info *mtd, struct nand_chip *chip,

		/* we cannot use SPARE_AREA_PROGRAM when PARTIAL_PAGE_EN=0 */
		brcmnand_send_cmd(host, CMD_PROGRAM_PAGE);
		status = brcmnand_waitfunc(mtd, chip);
		status = brcmnand_waitfunc(chip);

		if (status & NAND_STATUS_FAIL) {
			dev_info(ctrl->dev, "program failed at %llx\n",
+2 −2
Original line number Diff line number Diff line
@@ -904,9 +904,9 @@ static void denali_select_chip(struct nand_chip *chip, int cs)
	denali->active_bank = cs;
}

static int denali_waitfunc(struct mtd_info *mtd, struct nand_chip *chip)
static int denali_waitfunc(struct nand_chip *chip)
{
	struct denali_nand_info *denali = mtd_to_denali(mtd);
	struct denali_nand_info *denali = mtd_to_denali(nand_to_mtd(chip));
	uint32_t irq_status;

	/* R/B# pin transitioned from low to high? */
+1 −1
Original line number Diff line number Diff line
@@ -433,7 +433,7 @@ static void __init doc2000_count_chips(struct mtd_info *mtd)
	pr_debug("Detected %d chips per floor.\n", i);
}

static int doc200x_wait(struct mtd_info *mtd, struct nand_chip *this)
static int doc200x_wait(struct nand_chip *this)
{
	struct doc_priv *doc = nand_get_controller_data(this);

+2 −2
Original line number Diff line number Diff line
@@ -315,7 +315,7 @@ static int poll_status(struct docg4_priv *doc)
}


static int docg4_wait(struct mtd_info *mtd, struct nand_chip *nand)
static int docg4_wait(struct nand_chip *nand)
{

	struct docg4_priv *doc = nand_get_controller_data(nand);
@@ -938,7 +938,7 @@ static int docg4_erase_block(struct mtd_info *mtd, int page)
	poll_status(doc);
	write_nop(docptr);

	status = nand->waitfunc(mtd, nand);
	status = nand->waitfunc(nand);
	if (status < 0)
		return status;

Loading