diff options
Diffstat (limited to 'drivers/base/platform.c')
-rw-r--r-- | drivers/base/platform.c | 26 |
1 files changed, 26 insertions, 0 deletions
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, |