Re: [PATCH 4/9] OF: import bus/device related functions from Linux OF API

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 06/25/13 11:20, Sebastian Hesselbarth wrote:
This imports some bus and device related functions from Linux OF API
with some modifcations for Barebox.

Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@xxxxxxxxx>
---
Cc: barebox@xxxxxxxxxxxxxxxxxxx
---
  drivers/of/Makefile   |    2 +-
  drivers/of/platform.c |  294 +++++++++++++++++++++++++++++++++++++++++++++++++
  include/of.h          |   18 +++
  3 files changed, 313 insertions(+), 1 deletions(-)
  create mode 100644 drivers/of/platform.c
[...]
diff --git a/drivers/of/platform.c b/drivers/of/platform.c
new file mode 100644
index 0000000..450d770
--- /dev/null
+++ b/drivers/of/platform.c
@@ -0,0 +1,294 @@
+/*
+ * platform.c - bus/device related devicetree functions
+ *
+ * Copyright (c) 2012 Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>, Pengutronix
+ *
+ * based on Linux devicetree support
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
[...]
+/**
+ * of_platform_device_create - Alloc, initialize and register an of_device
+ * @np: pointer to node to create device for
+ * @parent: device model parent device.
+ *
+ * Returns pointer to created platform device, or NULL if a device was not
+ * registered. Unavailable devices will not get registered.
+ */
+static struct device_d *of_platform_device_create(struct device_node *np,
+						struct device_d *parent)
+{
+	struct device_d *dev;
+	struct resource *res, temp_res;
+	int i, ret, num_reg = 0;
+
+	if (!of_device_is_available(np))
+		return NULL;
+
+	dev = xzalloc(sizeof(*dev));
+
+	/* setup generic device info */
+	dev->id = DEVICE_ID_SINGLE;
+	dev->device_node = np;
+	dev->parent = parent;
+	of_device_make_bus_id(dev);
+
+	/* count the io resources */
+	if (of_can_translate_address(np))
+		while (of_address_to_resource(np, num_reg, &temp_res) == 0)
+			num_reg++;
+
+	/* Populate the resource table */
+	if (num_reg) {
+		res = xzalloc(sizeof(*res) * num_reg);
+
+		dev->num_resources = num_reg;
+		dev->resource = res;
+		for (i = 0; i < num_reg; i++, res++) {
+			ret = of_address_to_resource(np, i, res);
+			if (ret)
+				goto err_free;
+		}
+	}
+
+	debug("register device 0x%08x\n", (num_reg) ? dev->resource[0].start : (-1));
+
+	ret = platform_device_register(dev);
+	if (ret)
+		goto err_free;
+
+	return dev;
+
+err_free:
+	free(dev);
+	return NULL;
+}

of_platform_device_create is missing a check for already existing
devices. I have added a check that tries to match all mem resources
of the node with existing devices.

[...]
+/**
+ * of_platform_populate() - Populate platform_devices from device tree data
+ * @root: parent of the first level to probe or NULL for the root of the tree
+ * @matches: match table, NULL to use the default
+ * @lookup: auxdata table for matching id and platform_data with device nodes

Removed the line above, as lookup auxdata is not used on barebox.

Sebastian

_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox




[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux