]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
device property: Add fwnode_iomap()
authorAnand Ashok Dumbre <anand.ashok.dumbre@xilinx.com>
Fri, 3 Dec 2021 21:23:54 +0000 (21:23 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 17 Oct 2024 13:11:43 +0000 (15:11 +0200)
[ Upstream commit eca6e2d4a4a4b824f055eeaaa24f1c2327fb91a2 ]

This patch introduces a new helper routine - fwnode_iomap(), which
allows to map the memory mapped IO for a given device node.

This implementation does not cover the ACPI case and may be expanded
in the future. The main purpose here is to be able to develop resource
provider agnostic drivers.

Suggested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Anand Ashok Dumbre <anand.ashok.dumbre@xilinx.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Link: https://lore.kernel.org/r/20211203212358.31444-2-anand.ashok.dumbre@xilinx.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Stable-dep-of: 8d3cefaf6592 ("i2c: core: Lock address during client device instantiation")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/base/property.c
include/linux/property.h

index 21f4184db42fc2eb1f71d42ba493dbf225aa0a33..87bb97e12749e673df497f387e3bbc24428f6b6f 100644 (file)
@@ -1050,6 +1050,22 @@ int fwnode_irq_get(const struct fwnode_handle *fwnode, unsigned int index)
 }
 EXPORT_SYMBOL(fwnode_irq_get);
 
+/**
+ * fwnode_iomap - Maps the memory mapped IO for a given fwnode
+ * @fwnode:    Pointer to the firmware node
+ * @index:     Index of the IO range
+ *
+ * Returns a pointer to the mapped memory.
+ */
+void __iomem *fwnode_iomap(struct fwnode_handle *fwnode, int index)
+{
+       if (IS_ENABLED(CONFIG_OF_ADDRESS) && is_of_node(fwnode))
+               return of_iomap(to_of_node(fwnode), index);
+
+       return NULL;
+}
+EXPORT_SYMBOL(fwnode_iomap);
+
 /**
  * fwnode_graph_get_next_endpoint - Get next endpoint firmware node
  * @fwnode: Pointer to the parent firmware node
index fe2092e39aedbd34e5fcb804ca41e9279f771cf7..032262e3d9991abc28f4adfc6dc3e0ad5cfcbc6c 100644 (file)
@@ -126,6 +126,8 @@ void fwnode_handle_put(struct fwnode_handle *fwnode);
 
 int fwnode_irq_get(const struct fwnode_handle *fwnode, unsigned int index);
 
+void __iomem *fwnode_iomap(struct fwnode_handle *fwnode, int index);
+
 unsigned int device_get_child_node_count(struct device *dev);
 
 static inline bool device_property_read_bool(struct device *dev,