|
@@ -1,68 +0,0 @@
|
|
|
-From f6c052afe6f802d87c74153b7a57c43b2e9faf07 Mon Sep 17 00:00:00 2001
|
|
|
-From: Christophe Kerello <[email protected]>
|
|
|
-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: [email protected]
|
|
|
-Signed-off-by: Christophe Kerello <[email protected]>
|
|
|
-Signed-off-by: Srinivas Kandagatla <[email protected]>
|
|
|
-Link: https://lore.kernel.org/r/[email protected]
|
|
|
-Signed-off-by: Greg Kroah-Hartman <[email protected]>
|
|
|
----
|
|
|
- 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;
|