aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon/atxp1.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/hwmon/atxp1.c')
-rw-r--r--drivers/hwmon/atxp1.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/drivers/hwmon/atxp1.c b/drivers/hwmon/atxp1.c
index ba843f8c4cef..0ccdd0750c44 100644
--- a/drivers/hwmon/atxp1.c
+++ b/drivers/hwmon/atxp1.c
@@ -27,6 +27,7 @@
27#include <linux/hwmon-vid.h> 27#include <linux/hwmon-vid.h>
28#include <linux/err.h> 28#include <linux/err.h>
29#include <linux/mutex.h> 29#include <linux/mutex.h>
30#include <linux/sysfs.h>
30 31
31MODULE_LICENSE("GPL"); 32MODULE_LICENSE("GPL");
32MODULE_DESCRIPTION("System voltages control via Attansic ATXP1"); 33MODULE_DESCRIPTION("System voltages control via Attansic ATXP1");
@@ -250,6 +251,17 @@ static ssize_t atxp1_storegpio2(struct device *dev, struct device_attribute *att
250*/ 251*/
251static DEVICE_ATTR(gpio2, S_IRUGO | S_IWUSR, atxp1_showgpio2, atxp1_storegpio2); 252static DEVICE_ATTR(gpio2, S_IRUGO | S_IWUSR, atxp1_showgpio2, atxp1_storegpio2);
252 253
254static struct attribute *atxp1_attributes[] = {
255 &dev_attr_gpio1.attr,
256 &dev_attr_gpio2.attr,
257 &dev_attr_cpu0_vid.attr,
258 NULL
259};
260
261static const struct attribute_group atxp1_group = {
262 .attrs = atxp1_attributes,
263};
264
253 265
254static int atxp1_attach_adapter(struct i2c_adapter *adapter) 266static int atxp1_attach_adapter(struct i2c_adapter *adapter)
255{ 267{
@@ -319,21 +331,23 @@ static int atxp1_detect(struct i2c_adapter *adapter, int address, int kind)
319 goto exit_free; 331 goto exit_free;
320 } 332 }
321 333
334 /* Register sysfs hooks */
335 if ((err = sysfs_create_group(&new_client->dev.kobj, &atxp1_group)))
336 goto exit_detach;
337
322 data->class_dev = hwmon_device_register(&new_client->dev); 338 data->class_dev = hwmon_device_register(&new_client->dev);
323 if (IS_ERR(data->class_dev)) { 339 if (IS_ERR(data->class_dev)) {
324 err = PTR_ERR(data->class_dev); 340 err = PTR_ERR(data->class_dev);
325 goto exit_detach; 341 goto exit_remove_files;
326 } 342 }
327 343
328 device_create_file(&new_client->dev, &dev_attr_gpio1);
329 device_create_file(&new_client->dev, &dev_attr_gpio2);
330 device_create_file(&new_client->dev, &dev_attr_cpu0_vid);
331
332 dev_info(&new_client->dev, "Using VRM: %d.%d\n", 344 dev_info(&new_client->dev, "Using VRM: %d.%d\n",
333 data->vrm / 10, data->vrm % 10); 345 data->vrm / 10, data->vrm % 10);
334 346
335 return 0; 347 return 0;
336 348
349exit_remove_files:
350 sysfs_remove_group(&new_client->dev.kobj, &atxp1_group);
337exit_detach: 351exit_detach:
338 i2c_detach_client(new_client); 352 i2c_detach_client(new_client);
339exit_free: 353exit_free:
@@ -348,6 +362,7 @@ static int atxp1_detach_client(struct i2c_client * client)
348 int err; 362 int err;
349 363
350 hwmon_device_unregister(data->class_dev); 364 hwmon_device_unregister(data->class_dev);
365 sysfs_remove_group(&client->dev.kobj, &atxp1_group);
351 366
352 err = i2c_detach_client(client); 367 err = i2c_detach_client(client);
353 368