aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hwmon/w83627ehf.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/hwmon/w83627ehf.c')
-rw-r--r--drivers/hwmon/w83627ehf.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c
index 250f6b059a54..956e7f830aa6 100644
--- a/drivers/hwmon/w83627ehf.c
+++ b/drivers/hwmon/w83627ehf.c
@@ -41,6 +41,8 @@
41#include <linux/slab.h> 41#include <linux/slab.h>
42#include <linux/i2c.h> 42#include <linux/i2c.h>
43#include <linux/i2c-sensor.h> 43#include <linux/i2c-sensor.h>
44#include <linux/hwmon.h>
45#include <linux/err.h>
44#include <asm/io.h> 46#include <asm/io.h>
45#include "lm75.h" 47#include "lm75.h"
46 48
@@ -177,6 +179,7 @@ temp1_to_reg(int temp)
177 179
178struct w83627ehf_data { 180struct w83627ehf_data {
179 struct i2c_client client; 181 struct i2c_client client;
182 struct class_device *class_dev;
180 struct semaphore lock; 183 struct semaphore lock;
181 184
182 struct semaphore update_lock; 185 struct semaphore update_lock;
@@ -723,6 +726,12 @@ static int w83627ehf_detect(struct i2c_adapter *adapter, int address, int kind)
723 data->has_fan |= (1 << 4); 726 data->has_fan |= (1 << 4);
724 727
725 /* Register sysfs hooks */ 728 /* Register sysfs hooks */
729 data->class_dev = hwmon_device_register(&client->dev);
730 if (IS_ERR(data->class_dev)) {
731 err = PTR_ERR(data->class_dev);
732 goto exit_detach;
733 }
734
726 device_create_file(&client->dev, &dev_attr_fan1_input); 735 device_create_file(&client->dev, &dev_attr_fan1_input);
727 device_create_file(&client->dev, &dev_attr_fan1_min); 736 device_create_file(&client->dev, &dev_attr_fan1_min);
728 device_create_file(&client->dev, &dev_attr_fan1_div); 737 device_create_file(&client->dev, &dev_attr_fan1_div);
@@ -756,6 +765,8 @@ static int w83627ehf_detect(struct i2c_adapter *adapter, int address, int kind)
756 765
757 return 0; 766 return 0;
758 767
768exit_detach:
769 i2c_detach_client(client);
759exit_free: 770exit_free:
760 kfree(data); 771 kfree(data);
761exit_release: 772exit_release:
@@ -773,15 +784,18 @@ static int w83627ehf_attach_adapter(struct i2c_adapter *adapter)
773 784
774static int w83627ehf_detach_client(struct i2c_client *client) 785static int w83627ehf_detach_client(struct i2c_client *client)
775{ 786{
787 struct w83627ehf_data *data = i2c_get_clientdata(client);
776 int err; 788 int err;
777 789
790 hwmon_device_unregister(data->class_dev);
791
778 if ((err = i2c_detach_client(client))) { 792 if ((err = i2c_detach_client(client))) {
779 dev_err(&client->dev, "Client deregistration failed, " 793 dev_err(&client->dev, "Client deregistration failed, "
780 "client not detached.\n"); 794 "client not detached.\n");
781 return err; 795 return err;
782 } 796 }
783 release_region(client->addr, REGION_LENGTH); 797 release_region(client->addr, REGION_LENGTH);
784 kfree(i2c_get_clientdata(client)); 798 kfree(data);
785 799
786 return 0; 800 return 0;
787} 801}