]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/hwmon/w83l785ts.c
HWRNG: add possibility to remove hwrng devices during suspend/resume
[linux-2.6-omap-h63xx.git] / drivers / hwmon / w83l785ts.c
index 3f2bac125fb19b8a346c19fde04d6ceded5704e9..b5db354e2f198952a095d4ccf8e7632f9d591dc6 100644 (file)
@@ -107,7 +107,7 @@ static struct i2c_driver w83l785ts_driver = {
 
 struct w83l785ts_data {
        struct i2c_client client;
-       struct class_device *class_dev;
+       struct device *hwmon_dev;
        struct mutex update_lock;
        char valid; /* zero until following fields are valid */
        unsigned long last_updated; /* in jiffies */
@@ -236,21 +236,30 @@ static int w83l785ts_detect(struct i2c_adapter *adapter, int address, int kind)
         * Nothing yet, assume it is already started.
         */
 
+       err = device_create_file(&new_client->dev,
+                                &sensor_dev_attr_temp1_input.dev_attr);
+       if (err)
+               goto exit_remove;
+
+       err = device_create_file(&new_client->dev,
+                                &sensor_dev_attr_temp1_max.dev_attr);
+       if (err)
+               goto exit_remove;
+
        /* Register sysfs hooks */
-       data->class_dev = hwmon_device_register(&new_client->dev);
-       if (IS_ERR(data->class_dev)) {
-               err = PTR_ERR(data->class_dev);
-               goto exit_detach;
+       data->hwmon_dev = hwmon_device_register(&new_client->dev);
+       if (IS_ERR(data->hwmon_dev)) {
+               err = PTR_ERR(data->hwmon_dev);
+               goto exit_remove;
        }
 
-       device_create_file(&new_client->dev,
-                          &sensor_dev_attr_temp1_input.dev_attr);
-       device_create_file(&new_client->dev,
-                          &sensor_dev_attr_temp1_max.dev_attr);
-
        return 0;
 
-exit_detach:
+exit_remove:
+       device_remove_file(&new_client->dev,
+                          &sensor_dev_attr_temp1_input.dev_attr);
+       device_remove_file(&new_client->dev,
+                          &sensor_dev_attr_temp1_max.dev_attr);
        i2c_detach_client(new_client);
 exit_free:
        kfree(data);
@@ -263,8 +272,11 @@ static int w83l785ts_detach_client(struct i2c_client *client)
        struct w83l785ts_data *data = i2c_get_clientdata(client);
        int err;
 
-       hwmon_device_unregister(data->class_dev);
-
+       hwmon_device_unregister(data->hwmon_dev);
+       device_remove_file(&client->dev,
+                          &sensor_dev_attr_temp1_input.dev_attr);
+       device_remove_file(&client->dev,
+                          &sensor_dev_attr_temp1_max.dev_attr);
        if ((err = i2c_detach_client(client)))
                return err;