123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- From b0321721be50b80c03a51866a94fde4f94690e18 Mon Sep 17 00:00:00 2001
- From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <[email protected]>
- Date: Wed, 15 Jun 2022 21:42:59 +0200
- Subject: [PATCH] mtd: allow getting MTD device associated with a specific DT
- node
- MIME-Version: 1.0
- Content-Type: text/plain; charset=UTF-8
- Content-Transfer-Encoding: 8bit
- MTD subsystem API allows interacting with MTD devices (e.g. reading,
- writing, handling bad blocks). So far a random driver could get MTD
- device only by its name (get_mtd_device_nm()). This change allows
- getting them also by a DT node.
- This API is required for drivers handling DT defined MTD partitions in a
- specific way (e.g. U-Boot (sub)partition with environment variables).
- Signed-off-by: Rafał Miłecki <[email protected]>
- Acked-by: Miquel Raynal <[email protected]>
- Signed-off-by: Srinivas Kandagatla <[email protected]>
- ---
- drivers/mtd/mtdcore.c | 28 ++++++++++++++++++++++++++++
- include/linux/mtd/mtd.h | 1 +
- 2 files changed, 29 insertions(+)
- --- a/drivers/mtd/mtdcore.c
- +++ b/drivers/mtd/mtdcore.c
- @@ -1236,6 +1236,34 @@ int __get_mtd_device(struct mtd_info *mt
- EXPORT_SYMBOL_GPL(__get_mtd_device);
-
- /**
- + * of_get_mtd_device_by_node - obtain an MTD device associated with a given node
- + *
- + * @np: device tree node
- + */
- +struct mtd_info *of_get_mtd_device_by_node(struct device_node *np)
- +{
- + struct mtd_info *mtd = NULL;
- + struct mtd_info *tmp;
- + int err;
- +
- + mutex_lock(&mtd_table_mutex);
- +
- + err = -EPROBE_DEFER;
- + mtd_for_each_device(tmp) {
- + if (mtd_get_of_node(tmp) == np) {
- + mtd = tmp;
- + err = __get_mtd_device(mtd);
- + break;
- + }
- + }
- +
- + mutex_unlock(&mtd_table_mutex);
- +
- + return err ? ERR_PTR(err) : mtd;
- +}
- +EXPORT_SYMBOL_GPL(of_get_mtd_device_by_node);
- +
- +/**
- * get_mtd_device_nm - obtain a validated handle for an MTD device by
- * device name
- * @name: MTD device name to open
- --- a/include/linux/mtd/mtd.h
- +++ b/include/linux/mtd/mtd.h
- @@ -682,6 +682,7 @@ extern int mtd_device_unregister(struct
- extern struct mtd_info *get_mtd_device(struct mtd_info *mtd, int num);
- extern int __get_mtd_device(struct mtd_info *mtd);
- 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 void put_mtd_device(struct mtd_info *mtd);
-
|