mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2024-06-16 12:14:01 +02:00
![Christian Marangi](/assets/img/avatar_default.png)
Backport upstream solution that permits to declare nvmem cells with
dynamic partition defined by special parser.
This provide an OF node for NVMEM and connect it to the defined dynamic
partition.
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
(cherry picked from commit 1a9ee36734
)
76 lines
2.1 KiB
Diff
76 lines
2.1 KiB
Diff
From 1bd1b740f208d1cf4071932cc51860d37266c402 Mon Sep 17 00:00:00 2001
|
|
From: Bernhard Frauendienst <kernel@nospam.obeliks.de>
|
|
Date: Sat, 1 Sep 2018 00:30:11 +0200
|
|
Subject: [PATCH 495/497] mtd: core: add get_mtd_device_by_node
|
|
|
|
Add function to retrieve a mtd device by its OF node. Since drivers can
|
|
assign arbitrary names to mtd devices in the absence of a label
|
|
property, there is no other reliable way to retrieve a mtd device for a
|
|
given OF node.
|
|
|
|
Signed-off-by: Bernhard Frauendienst <kernel@nospam.obeliks.de>
|
|
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
|
---
|
|
drivers/mtd/mtdcore.c | 38 ++++++++++++++++++++++++++++++++++++++
|
|
include/linux/mtd/mtd.h | 2 ++
|
|
2 files changed, 40 insertions(+)
|
|
|
|
--- a/drivers/mtd/mtdcore.c
|
|
+++ b/drivers/mtd/mtdcore.c
|
|
@@ -1142,6 +1142,44 @@ out_unlock:
|
|
}
|
|
EXPORT_SYMBOL_GPL(get_mtd_device_nm);
|
|
|
|
+/**
|
|
+ * get_mtd_device_by_node - obtain a validated handle for an MTD device
|
|
+ * by of_node
|
|
+ * @of_node: OF node of MTD device to open
|
|
+ *
|
|
+ * This function returns MTD device description structure in case of
|
|
+ * success and an error code in case of failure.
|
|
+ */
|
|
+struct mtd_info *get_mtd_device_by_node(const struct device_node *of_node)
|
|
+{
|
|
+ int err = -ENODEV;
|
|
+ struct mtd_info *mtd = NULL, *other;
|
|
+
|
|
+ mutex_lock(&mtd_table_mutex);
|
|
+
|
|
+ mtd_for_each_device(other) {
|
|
+ if (of_node == other->dev.of_node) {
|
|
+ mtd = other;
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (!mtd)
|
|
+ goto out_unlock;
|
|
+
|
|
+ err = __get_mtd_device(mtd);
|
|
+ if (err)
|
|
+ goto out_unlock;
|
|
+
|
|
+ mutex_unlock(&mtd_table_mutex);
|
|
+ return mtd;
|
|
+
|
|
+out_unlock:
|
|
+ mutex_unlock(&mtd_table_mutex);
|
|
+ return ERR_PTR(err);
|
|
+}
|
|
+EXPORT_SYMBOL_GPL(get_mtd_device_by_node);
|
|
+
|
|
void put_mtd_device(struct mtd_info *mtd)
|
|
{
|
|
mutex_lock(&mtd_table_mutex);
|
|
--- a/include/linux/mtd/mtd.h
|
|
+++ b/include/linux/mtd/mtd.h
|
|
@@ -587,6 +587,8 @@ extern int __get_mtd_device(struct mtd_i
|
|
extern void __put_mtd_device(struct mtd_info *mtd);
|
|
extern struct mtd_info *of_get_mtd_device_by_node(struct device_node *np);
|
|
extern struct mtd_info *get_mtd_device_nm(const char *name);
|
|
+extern struct mtd_info *get_mtd_device_by_node(
|
|
+ const struct device_node *of_node);
|
|
extern void put_mtd_device(struct mtd_info *mtd);
|
|
|
|
|