@@ -43,6 +43,27 @@ struct device_node *of_pci_find_child_device(struct device_node *parent,
EXPORT_SYMBOL_GPL(of_pci_find_child_device);
/**
+ * of_pci_get_bus() - Get bus number for a device node
+ * @np: device node
+ *
+ * Parses a standard 5-cell PCI resource and returns the 8-bit bus number of
+ * the device's parent PCI bus. On error a negative error code is returned.
+ */
+int of_pci_get_bus(struct device_node *np)
+{
+ unsigned int size;
+ const __be32 *reg;
+
+ reg = of_get_property(np, "reg", &size);
+
+ if (!reg || size < 5 * sizeof(__be32))
+ return -EINVAL;
+
+ return (be32_to_cpup(reg) >> 16) & 0xff;
+}
+EXPORT_SYMBOL_GPL(of_pci_get_bus);
+
+/**
* of_pci_get_devfn() - Get device and function numbers for a device node
* @np: device node
*
@@ -10,6 +10,7 @@ int of_irq_map_pci(const struct pci_dev *pdev, struct of_irq *out_irq);
struct device_node;
struct device_node *of_pci_find_child_device(struct device_node *parent,
unsigned int devfn);
+int of_pci_get_bus(struct device_node *np);
int of_pci_get_devfn(struct device_node *np);
#endif
This function can be used to parse the number of a device's parent PCI bus from a standard 5-cell PCI resource. Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de> --- drivers/of/of_pci.c | 21 +++++++++++++++++++++ include/linux/of_pci.h | 1 + 2 files changed, 22 insertions(+)