diff options
author | Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | 2012-09-20 03:22:17 +0800 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2012-10-04 15:19:12 +0200 |
commit | 3c5327e660bc840deb82030062c91e469528dd94 (patch) | |
tree | 31f150802925bf3f292ac90cdcb4ae5eb3ddd97a /drivers/base | |
parent | c0620a4b50c46d98c08229db4bec6b4e4a68b16b (diff) | |
download | barebox-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.c | 26 | ||||
-rw-r--r-- | drivers/base/platform.c | 26 | ||||
-rw-r--r-- | drivers/base/resource.c | 2 |
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; } |