[PATCH] hwmon class driver registration with a device number
This patch adds a way to register a hwmon class driver with a device number rather than the default MK_DEV(0,0). This would help in creating required "dev" file under sysfs which in turn can be used in populating /dev tree during bootup (helpful to driver which want to show up a char interface along with sysfs). Signed-off-by: Himanshu Chauhan <hschauhan@nulltrace.org> --- drivers/hwmon/hwmon.c | 28 ++++++++++++++++++++++------ include/linux/hwmon.h | 1 + 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c index a61e781..36961c5 100644 --- a/drivers/hwmon/hwmon.c +++ b/drivers/hwmon/hwmon.c @@ -31,15 +31,17 @@ static DEFINE_IDR(hwmon_idr); static DEFINE_SPINLOCK(idr_lock); /** - * hwmon_device_register - register w/ hwmon - * @dev: the device to register + * hwmon_device_register_numbered - register hwmon class dev + * with specific device number. + * @dev: Device to register. + * @dev_id: device number to register. * - * hwmon_device_unregister() must be called when the device is no - * longer needed. + * hwmon_device_unregister() must be called when the device + * is no longer needed. * * Returns the pointer to the new device. */ -struct device *hwmon_device_register(struct device *dev) +struct device* hwmon_device_register_numbered(struct device *dev, dev_t dev_id) { struct device *hwdev; int id, err; @@ -58,7 +60,7 @@ again: return ERR_PTR(err); id = id & MAX_ID_MASK; - hwdev = device_create(hwmon_class, dev, MKDEV(0, 0), NULL, + hwdev = device_create(hwmon_class, dev, dev_id, NULL, HWMON_ID_FORMAT, id); if (IS_ERR(hwdev)) { @@ -71,6 +73,20 @@ again: } /** + * hwmon_device_register - register w/ hwmon + * @dev: the device to register + * + * hwmon_device_unregister() must be called when the device is no + * longer needed. + * + * Returns the pointer to the new device. + */ +struct device *hwmon_device_register(struct device *dev) +{ + return hwmon_device_register_numbered(dev, MK_DEV(0,0)); +} + +/** * hwmon_device_unregister - removes the previously registered class device * * @dev: the class device to destroy diff --git a/include/linux/hwmon.h b/include/linux/hwmon.h index 6b6ee70..d816cbe 100644 --- a/include/linux/hwmon.h +++ b/include/linux/hwmon.h @@ -16,6 +16,7 @@ #include <linux/device.h> +struct device *hwmon_device_register_numbered(struct device *dev, dev_t dev_id); struct device *hwmon_device_register(struct device *dev); void hwmon_device_unregister(struct device *dev); -- 1.7.4.1
On Wed, Oct 05, 2011 at 10:43:11PM +0530, Himanshu Chauhan wrote:
This patch adds a way to register a hwmon class driver with a device number rather than the default MK_DEV(0,0). This would help in creating required "dev" file under sysfs which in turn can be used in populating /dev tree during bootup (helpful to driver which want to show up a char interface along with sysfs).
How do you later remove a device created with this new interface? As it is, I think the existing calls will fail, right? greg k-h
On Thu, Oct 06, 2011 at 09:40:11AM +0530, Himanshu Chauhan wrote:
Hi Greg,
How do you later remove a device created with this new interface? As it is, I think the existing calls will fail, right?
If I have not missed out anything from hwmon_device_unregister(), it shouldn't fail. Why did you point that out?
If you create a device with a call to device_create() with a dev_t set, it is usually cleaned up with a call to device_destroy(), but you are right, a simple call to device_unregister() will still work properly. So nevermind, sorry for the noise. What you do need to determine is if this is a device node you really want to be creating in this manner, as it is a new user/kernel API, right? greg k-h
participants (2)
-
Greg KH -
Himanshu Chauhan