Skip to content

Commit

Permalink
mtd: rawnand: ingenic: Fix the RB gpio active-high property on qi, lb60
Browse files Browse the repository at this point in the history
The rb-gpios semantics was undocumented and qi,lb60 (along with the
ingenic driver) got it wrong. The active state encodes the NAND ready
state, which is high level. Since there's no signal inverter on this
board, it should be active-high. Let's fix that here for older DTs so
we can re-use the generic nand_gpio_waitrdy() helper, and be consistent
with what other drivers do.

Suggested-by: Paul Cercueil <paul@crapouillou.net>
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20200519232454.374081-3-boris.brezillon@collabora.com
  • Loading branch information
Boris Brezillon authored and Miquel Raynal committed May 31, 2020
1 parent 9fdd78f commit 2e26301
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion drivers/mtd/nand/raw/ingenic/ingenic_nand_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ static int ingenic_nand_dev_ready(struct nand_chip *chip)
{
struct ingenic_nand *nand = to_ingenic_nand(nand_to_mtd(chip));

return !gpiod_get_value_cansleep(nand->busy_gpio);
return gpiod_get_value_cansleep(nand->busy_gpio);
}

static void ingenic_nand_ecc_hwctl(struct nand_chip *chip, int mode)
Expand Down Expand Up @@ -343,6 +343,18 @@ static int ingenic_nand_init_chip(struct platform_device *pdev,
nand->chip.legacy.dev_ready = ingenic_nand_dev_ready;
}

/*
* The rb-gpios semantics was undocumented and qi,lb60 (along with
* the ingenic driver) got it wrong. The active state encodes the
* NAND ready state, which is high level. Since there's no signal
* inverter on this board, it should be active-high. Let's fix that
* here for older DTs so we can re-use the generic nand_gpio_waitrdy()
* helper, and be consistent with what other drivers do.
*/
if (of_machine_is_compatible("qi,lb60") &&
gpiod_is_active_low(nand->busy_gpio))
gpiod_toggle_active_low(nand->busy_gpio);

nand->wp_gpio = devm_gpiod_get_optional(dev, "wp", GPIOD_OUT_LOW);

if (IS_ERR(nand->wp_gpio)) {
Expand Down

0 comments on commit 2e26301

Please sign in to comment.