diff options
Diffstat (limited to 'drivers/sensor/sensors_core.c')
-rw-r--r-- | drivers/sensor/sensors_core.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/drivers/sensor/sensors_core.c b/drivers/sensor/sensors_core.c index a4144926252..e003652ea8a 100644 --- a/drivers/sensor/sensors_core.c +++ b/drivers/sensor/sensors_core.c @@ -26,6 +26,20 @@ struct class *sensors_class; * sensors_classdev_register - create new sensor device in sensors_class. * @dev: The device to register. */ + +static void set_sensor_attr(struct device *dev, + struct device_attribute *attributes[]) +{ + int i; + + for (i = 0; attributes[i] != NULL; i++) { + if ((device_create_file(dev, attributes[i])) < 0) { + printk(KERN_ERR"[SENSOR CORE] create_file attributes %d\n", + i); + } + } +} + struct device *sensors_classdev_register(char *sensors_name) { struct device *dev; @@ -51,6 +65,37 @@ void sensors_classdev_unregister(struct device *dev) } EXPORT_SYMBOL_GPL(sensors_classdev_unregister); +int sensors_register(struct device *dev, void *drvdata, + struct device_attribute *attributes[], char *name) +{ + int ret = 0; + if (!sensors_class) { + sensors_class = class_create(THIS_MODULE, "sensors"); + if (IS_ERR(sensors_class)) + return PTR_ERR(sensors_class); + } + + dev = device_create(sensors_class, NULL, 0, drvdata, "%s", name); + + if (IS_ERR(dev)) { + ret = PTR_ERR(dev); + printk(KERN_ERR "[SENSORS CORE] device_create failed! [%d]\n", + ret); + return ret; + } + + set_sensor_attr(dev, attributes); + + return 0; +} +EXPORT_SYMBOL_GPL(sensors_register); + +void sensors_unregister(struct device *dev) +{ + device_unregister(dev); +} +EXPORT_SYMBOL_GPL(sensors_unregister); + static int __init sensors_class_init(void) { sensors_class = class_create(THIS_MODULE, "sensors"); |