On 9/8/22 09:44, Sai Krishna Potthuri wrote: > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe > > Add support for spi-nor flash reset via GPIO controller by reading the > reset-gpio property. If there is a valid GPIO specifier then reset will > be performed by asserting and deasserting the GPIO using gpiod APIs > otherwise it will not perform any operation. > > Signed-off-by: Sai Krishna Potthuri <sai.krishna.potthuri@xxxxxxx> > Reviewed-by: Michael Walle <michael@xxxxxxxx> > --- > drivers/mtd/spi-nor/core.c | 25 +++++++++++++++++++++++++ > 1 file changed, 25 insertions(+) > > diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c > index f2c64006f8d7..a78ab9bae2be 100644 > --- a/drivers/mtd/spi-nor/core.c > +++ b/drivers/mtd/spi-nor/core.c > @@ -2933,6 +2933,27 @@ static void spi_nor_set_mtd_info(struct spi_nor *nor) > mtd->_put_device = spi_nor_put_device; > } > > +static int spi_nor_hw_reset(struct spi_nor *nor) > +{ > + struct gpio_desc *reset; > + > + reset = devm_gpiod_get_optional(nor->dev, "reset", GPIOD_OUT_LOW); > + if (IS_ERR_OR_NULL(reset)) > + return PTR_ERR_OR_ZERO(reset); > + > + /* > + * Experimental delay values by looking at different flash device > + * vendors datasheets. > + */ > + usleep_range(1, 5); > + gpiod_set_value_cansleep(reset, 1); > + usleep_range(100, 150); > + gpiod_set_value_cansleep(reset, 0); > + usleep_range(1000, 1200); > + > + return 0; > +} > + > int spi_nor_scan(struct spi_nor *nor, const char *name, > const struct spi_nor_hwcaps *hwcaps) > { > @@ -2965,6 +2986,10 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, > if (!nor->bouncebuf) > return -ENOMEM; > > + ret = spi_nor_hw_reset(nor); Should we condition the calling of this method by the absence of the "broken-flash-reset" dt prop? > + if (ret) > + return ret; > + > info = spi_nor_get_flash_info(nor, name); > if (IS_ERR(info)) > return PTR_ERR(info); > -- > 2.17.1 > -- Cheers, ta