diff options
author | Russell King <rmk@arm.linux.org.uk> | 2006-01-05 09:29:51 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-01-13 14:26:04 -0500 |
commit | 594c8281f90560faf9632d91bb9d402cbe560e63 (patch) | |
tree | abeb32df086cfd204accad33b11040381c31689d /drivers/base/dd.c | |
parent | bd37e5a951ad2123d3f51f59c407b5242946b6ba (diff) |
[PATCH] Add bus_type probe, remove, shutdown methods.
Add bus_type probe, remove and shutdown methods to replace the
corresponding methods in struct device_driver. This matches
the way we handle the suspend/resume methods.
Since the bus methods override the device_driver methods, warn
if a device driver is registered whose methods will not be
called.
The long-term idea is to remove the device_driver methods entirely.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/base/dd.c')
-rw-r--r-- | drivers/base/dd.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/base/dd.c b/drivers/base/dd.c index 2b905016664d..730a9ce0a14a 100644 --- a/drivers/base/dd.c +++ b/drivers/base/dd.c | |||
@@ -78,7 +78,13 @@ int driver_probe_device(struct device_driver * drv, struct device * dev) | |||
78 | pr_debug("%s: Matched Device %s with Driver %s\n", | 78 | pr_debug("%s: Matched Device %s with Driver %s\n", |
79 | drv->bus->name, dev->bus_id, drv->name); | 79 | drv->bus->name, dev->bus_id, drv->name); |
80 | dev->driver = drv; | 80 | dev->driver = drv; |
81 | if (drv->probe) { | 81 | if (dev->bus->probe) { |
82 | ret = dev->bus->probe(dev); | ||
83 | if (ret) { | ||
84 | dev->driver = NULL; | ||
85 | goto ProbeFailed; | ||
86 | } | ||
87 | } else if (drv->probe) { | ||
82 | ret = drv->probe(dev); | 88 | ret = drv->probe(dev); |
83 | if (ret) { | 89 | if (ret) { |
84 | dev->driver = NULL; | 90 | dev->driver = NULL; |
@@ -203,7 +209,9 @@ static void __device_release_driver(struct device * dev) | |||
203 | sysfs_remove_link(&dev->kobj, "driver"); | 209 | sysfs_remove_link(&dev->kobj, "driver"); |
204 | klist_remove(&dev->knode_driver); | 210 | klist_remove(&dev->knode_driver); |
205 | 211 | ||
206 | if (drv->remove) | 212 | if (dev->bus->remove) |
213 | dev->bus->remove(dev); | ||
214 | else if (drv->remove) | ||
207 | drv->remove(dev); | 215 | drv->remove(dev); |
208 | dev->driver = NULL; | 216 | dev->driver = NULL; |
209 | put_driver(drv); | 217 | put_driver(drv); |