driver core: add driver_find to find a driver by name
Hi,
Here is a patch that adds driver_find() that allows to search for a driver on a bus by it's name. The function is similar to device_find already present in the tree. I need it for my serio sysfs patches where user can re-bind serio port to an alternate driver by echoing driver's name to serio port's driver attribute.
Signature · 62 lines
Dmitry =================================================================== [email protected], 2004-06-27 20:49:01-05:00, [email protected] Driver core: add driver_find helper to find a driver by its name Signed-off-by: Dmitry Torokhov <[email protected]> drivers/base/driver.c | 16 ++++++++++++++++ include/linux/device.h | 1 + 2 files changed, 17 insertions(+) =================================================================== diff -Nru a/drivers/base/driver.c b/drivers/base/driver.c --- a/drivers/base/driver.c 2004-06-27 21:24:06 -05:00 +++ b/drivers/base/driver.c 2004-06-27 21:24:06 -05:00 @@ -111,10 +111,26 @@ up(&drv->unload_sem); } +/** + * driver_find - find driver on a given bus by its name. + * @name: name of the driver. + * @bus: bus to seatch for the driver + */ + +struct device_driver *driver_find(const char *name, struct bus_type *bus) +{ + struct kobject *k = kset_find_obj(&bus->drivers, name); + if (k) + return to_drv(k); + return NULL; +} + + EXPORT_SYMBOL(driver_register); EXPORT_SYMBOL(driver_unregister); EXPORT_SYMBOL(get_driver); EXPORT_SYMBOL(put_driver); +EXPORT_SYMBOL(driver_find); EXPORT_SYMBOL(driver_create_file); EXPORT_SYMBOL(driver_remove_file); diff -Nru a/include/linux/device.h b/include/linux/device.h --- a/include/linux/device.h 2004-06-27 21:24:06 -05:00 +++ b/include/linux/device.h 2004-06-27 21:24:06 -05:00 @@ -120,6 +120,7 @@ extern struct device_driver * get_driver(struct device_driver * drv); extern void put_driver(struct device_driver * drv); +extern struct device_driver *driver_find(const char *name, struct bus_type *bus); /* driverfs interface for exporting driver attributes */
Quoted 7 lines · Dmitry Torokhov
Hi,
Here is a patch that adds
driver_find()that allows to search for a driver on a bus by it's name. The function is similar todevice_findalready present in the tree. I need it for my serio sysfs patches where user can re-bind serio port to an alternate driver by echoing driver's name to serio port's driver attribute.
It looks like it's missing some refcounting, no?
Greg KH
AppliedQuoted 7 lines · Dmitry Torokhov
Hi,
Here is a patch that adds
driver_find()that allows to search for a driver on a bus by it's name. The function is similar todevice_findalready present in the tree. I need it for my serio sysfs patches where user can re-bind serio port to an alternate driver by echoing driver's name to serio port's driver attribute.
Applied, thanks.
greg k-h
Quoted 10 lines · Greg KH
Quoted 7 lines · Dmitry Torokhov
Hi,
Here is a patch that adds
driver_find()that allows to search for a driver on a bus by it's name. The function is similar todevice_findalready present in the tree. I need it for my serio sysfs patches where user can re-bind serio port to an alternate driver by echoing driver's name to serio port's driver attribute.Applied, thanks.
Dmitry,
I remember you fixed kset_find_obj() to get a reference count on the kobject.
driver_find()/device_find() use that, maybe it would be nice to add a comment on top of those saying the caller is responsible for putting the refcount on the kobject?
Last time I looked at your patches there was no such comment on driver_find/device_find, only kset_find_obj().
Just nitpicking.
Quoted 16 lines · Marcelo Tosatti
Quoted 10 lines · Greg KH
Quoted 7 lines · Dmitry Torokhov
Hi,
Here is a patch that adds
driver_find()that allows to search for a driver on a bus by it's name. The function is similar todevice_findalready present in the tree. I need it for my serio sysfs patches where user can re-bind serio port to an alternate driver by echoing driver's name to serio port's driver attribute.Applied, thanks.
Dmitry,
I remember you fixed
kset_find_obj()to get a reference count on the kobject.
Quoted 9 lines
driver_find()/device_find() use that, maybe it would be nice to add a comment on top of those saying the caller is responsible for putting the refcount on the kobject?
Last time I looked at your patches there was no such comment on driver_find/device_find, only
kset_find_obj().Just nitpicking.
Hi Marcelo,
I tried to document driver_find, device_find and find_bus, please check out the version that Greg has committed. If comments still somewhat unclear I will try redoing them.
Signature · 1 line
Dmitry