+++ /dev/null
-From f6c052afe6f802d87c74153b7a57c43b2e9faf07 Mon Sep 17 00:00:00 2001
-From: Christophe Kerello <christophe.kerello@foss.st.com>
-Date: Sun, 20 Feb 2022 15:14:31 +0000
-Subject: [PATCH] nvmem: core: Fix a conflict between MTD and NVMEM on wp-gpios
- property
-
-Wp-gpios property can be used on NVMEM nodes and the same property can
-be also used on MTD NAND nodes. In case of the wp-gpios property is
-defined at NAND level node, the GPIO management is done at NAND driver
-level. Write protect is disabled when the driver is probed or resumed
-and is enabled when the driver is released or suspended.
-
-When no partitions are defined in the NAND DT node, then the NAND DT node
-will be passed to NVMEM framework. If wp-gpios property is defined in
-this node, the GPIO resource is taken twice and the NAND controller
-driver fails to probe.
-
-It would be possible to set config->wp_gpio at MTD level before calling
-nvmem_register function but NVMEM framework will toggle this GPIO on
-each write when this GPIO should only be controlled at NAND level driver
-to ensure that the Write Protect has not been enabled.
-
-A way to fix this conflict is to add a new boolean flag in nvmem_config
-named ignore_wp. In case ignore_wp is set, the GPIO resource will
-be managed by the provider.
-
-Fixes: 2a127da461a9 ("nvmem: add support for the write-protect pin")
-Cc: stable@vger.kernel.org
-Signed-off-by: Christophe Kerello <christophe.kerello@foss.st.com>
-Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
-Link: https://lore.kernel.org/r/20220220151432.16605-2-srinivas.kandagatla@linaro.org
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- drivers/nvmem/core.c | 2 +-
- include/linux/nvmem-provider.h | 4 +++-
- 2 files changed, 4 insertions(+), 2 deletions(-)
-
---- a/drivers/nvmem/core.c
-+++ b/drivers/nvmem/core.c
-@@ -771,7 +771,7 @@ struct nvmem_device *nvmem_register(cons
-
- if (config->wp_gpio)
- nvmem->wp_gpio = config->wp_gpio;
-- else
-+ else if (!config->ignore_wp)
- nvmem->wp_gpio = gpiod_get_optional(config->dev, "wp",
- GPIOD_OUT_HIGH);
- if (IS_ERR(nvmem->wp_gpio)) {
---- a/include/linux/nvmem-provider.h
-+++ b/include/linux/nvmem-provider.h
-@@ -70,7 +70,8 @@ struct nvmem_keepout {
- * @word_size: Minimum read/write access granularity.
- * @stride: Minimum read/write access stride.
- * @priv: User context passed to read/write callbacks.
-- * @wp-gpio: Write protect pin
-+ * @wp-gpio: Write protect pin
-+ * @ignore_wp: Write Protect pin is managed by the provider.
- *
- * Note: A default "nvmem<id>" name will be assigned to the device if
- * no name is specified in its configuration. In such case "<id>" is
-@@ -92,6 +93,7 @@ struct nvmem_config {
- enum nvmem_type type;
- bool read_only;
- bool root_only;
-+ bool ignore_wp;
- struct device_node *of_node;
- bool no_of_node;
- nvmem_reg_read_t reg_read;