From d2b14cba47bae6bee65e01e91be5ce91f57a22c4 Mon Sep 17 00:00:00 2001 From: Jon Lin Date: Tue, 20 Feb 2024 20:59:04 +0800 Subject: [PATCH] spi: rockchip-sfc: Support rst_gpio to reset octal flash Change-Id: I06f8c18c8f948886c832d240bf79653248ec499c Signed-off-by: Jon Lin --- drivers/spi/spi-rockchip-sfc.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/spi/spi-rockchip-sfc.c b/drivers/spi/spi-rockchip-sfc.c index f1786c4613d8..14531a4642c8 100644 --- a/drivers/spi/spi-rockchip-sfc.c +++ b/drivers/spi/spi-rockchip-sfc.c @@ -207,6 +207,7 @@ struct rockchip_sfc { u32 max_iosize; u32 dll_cells[SFC_MAX_CHIPSELECT_NUM]; u16 version; + struct gpio_desc *rst_gpio; }; static int rockchip_sfc_reset(struct rockchip_sfc *sfc) @@ -914,6 +915,19 @@ static int rockchip_sfc_probe(struct platform_device *pdev) sfc->dma_buffer = virt_to_phys(sfc->buffer); } + sfc->rst_gpio = devm_gpiod_get_optional(&pdev->dev, "reset", GPIOD_OUT_LOW); + if (IS_ERR(sfc->rst_gpio)) { + dev_err(&pdev->dev, "invalid reset-gpios property in node\n"); + ret = PTR_ERR(sfc->rst_gpio); + goto err_dma; + } else if (sfc->rst_gpio) { + dev_info(&pdev->dev, "reset OCTA Flash at first\n"); + gpiod_set_value_cansleep(sfc->rst_gpio, 1); + mdelay(1); + gpiod_set_value_cansleep(sfc->rst_gpio, 0); + mdelay(1); + } + ret = spi_register_master(master); if (ret) goto err_register;