summaryrefslogtreecommitdiffstats
path: root/drivers/base
diff options
context:
space:
mode:
authorJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>2012-09-20 03:22:17 +0800
committerSascha Hauer <s.hauer@pengutronix.de>2012-10-04 15:19:12 +0200
commit3c5327e660bc840deb82030062c91e469528dd94 (patch)
tree31f150802925bf3f292ac90cdcb4ae5eb3ddd97a /drivers/base
parentc0620a4b50c46d98c08229db4bec6b4e4a68b16b (diff)
downloadbarebox-3c5327e660bc840deb82030062c91e469528dd94.tar.gz
barebox-3c5327e660bc840deb82030062c91e469528dd94.tar.xz
switch all platform_bus device/driver registering to platform_driver/device_register
now register_driver and register_device are for bus only usage. Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Diffstat (limited to 'drivers/base')
-rw-r--r--drivers/base/driver.c26
-rw-r--r--drivers/base/platform.c26
-rw-r--r--drivers/base/resource.c2
3 files changed, 33 insertions, 21 deletions
diff --git a/drivers/base/driver.c b/drivers/base/driver.c
index 1def2f85e7..a81a9ba685 100644
--- a/drivers/base/driver.c
+++ b/drivers/base/driver.c
@@ -111,28 +111,17 @@ int register_device(struct device_d *new_device)
debug ("register_device: %s\n", dev_name(new_device));
- if (!new_device->bus)
- new_device->bus = &platform_bus;
-
- if (new_device->bus == &platform_bus && new_device->resource) {
- struct device_d *dev;
-
- bus_for_each_device(new_device->bus, dev) {
- if (!dev->resource)
- continue;
- if (dev->resource->start == new_device->resource->start) {
- return -EBUSY;
- }
- }
- }
-
list_add_tail(&new_device->list, &device_list);
- list_add_tail(&new_device->bus_list, &new_device->bus->device_list);
INIT_LIST_HEAD(&new_device->children);
INIT_LIST_HEAD(&new_device->cdevs);
INIT_LIST_HEAD(&new_device->parameters);
INIT_LIST_HEAD(&new_device->active);
+ if (!new_device->bus)
+ return 0;
+
+ list_add_tail(&new_device->bus_list, &new_device->bus->device_list);
+
bus_for_each_driver(new_device->bus, drv) {
if (!match(drv, new_device))
break;
@@ -213,10 +202,7 @@ int register_driver(struct driver_d *drv)
debug("register_driver: %s\n", drv->name);
- if (!drv->bus) {
-// pr_err("driver %s has no bus type associated. Needs fixup\n", drv->name);
- drv->bus = &platform_bus;
- }
+ BUG_ON(!drv->bus);
list_add_tail(&drv->list, &driver_list);
list_add_tail(&drv->bus_list, &drv->bus->driver_list);
diff --git a/drivers/base/platform.c b/drivers/base/platform.c
index d3021ab833..13b4620506 100644
--- a/drivers/base/platform.c
+++ b/drivers/base/platform.c
@@ -55,6 +55,32 @@ static void platform_remove(struct device_d *dev)
dev->driver->remove(dev);
}
+int platform_driver_register(struct driver_d *drv)
+{
+ drv->bus = &platform_bus;
+
+ return register_driver(drv);
+}
+
+int platform_device_register(struct device_d *new_device)
+{
+ new_device->bus = &platform_bus;
+
+ if (new_device->resource) {
+ struct device_d *dev;
+
+ bus_for_each_device(new_device->bus, dev) {
+ if (!dev->resource)
+ continue;
+ if (dev->resource->start == new_device->resource->start) {
+ return -EBUSY;
+ }
+ }
+ }
+
+ return register_device(new_device);
+}
+
struct bus_type platform_bus = {
.name = "platform",
.match = platform_match,
diff --git a/drivers/base/resource.c b/drivers/base/resource.c
index 2709a9183c..2985c78e39 100644
--- a/drivers/base/resource.c
+++ b/drivers/base/resource.c
@@ -59,7 +59,7 @@ struct device_d *add_generic_device_res(const char* devname, int id,
dev->resource = res;
dev->num_resources = nb;
- register_device(dev);
+ platform_device_register(dev);
return dev;
}