hwmon: (lm75) Add suspend/resume feature
authorShubhrajyoti Datta <shubhrajyoti@ti.com>
Sat, 14 Aug 2010 19:08:50 +0000 (21:08 +0200)
committerJean Delvare <khali@linux-fr.org>
Sat, 14 Aug 2010 19:08:50 +0000 (21:08 +0200)
There is a shutdown feature at suspend it can be enabled to
reduce current consumption and resume it can be switched off.

Signed-off-by: Shubhrajyoti Datta <shubhrajyoti@ti.com>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
drivers/hwmon/lm75.c
drivers/hwmon/lm75.h

index 393f354f92a4c012c46ee96a8062f7b604697cdf..ab5b87a8167711303bc2aa8a3f107f7b86af798a 100644 (file)
@@ -280,10 +280,49 @@ static int lm75_detect(struct i2c_client *new_client,
        return 0;
 }
 
+#ifdef CONFIG_PM
+static int lm75_suspend(struct device *dev)
+{
+       int status;
+       struct i2c_client *client = to_i2c_client(dev);
+       status = lm75_read_value(client, LM75_REG_CONF);
+       if (status < 0) {
+               dev_dbg(&client->dev, "Can't read config? %d\n", status);
+               return status;
+       }
+       status = status | LM75_SHUTDOWN;
+       lm75_write_value(client, LM75_REG_CONF, status);
+       return 0;
+}
+
+static int lm75_resume(struct device *dev)
+{
+       int status;
+       struct i2c_client *client = to_i2c_client(dev);
+       status = lm75_read_value(client, LM75_REG_CONF);
+       if (status < 0) {
+               dev_dbg(&client->dev, "Can't read config? %d\n", status);
+               return status;
+       }
+       status = status & ~LM75_SHUTDOWN;
+       lm75_write_value(client, LM75_REG_CONF, status);
+       return 0;
+}
+
+static const struct dev_pm_ops lm75_dev_pm_ops = {
+       .suspend        = lm75_suspend,
+       .resume         = lm75_resume,
+};
+#define LM75_DEV_PM_OPS (&lm75_dev_pm_ops)
+#else
+#define LM75_DEV_PM_OPS NULL
+#endif /* CONFIG_PM */
+
 static struct i2c_driver lm75_driver = {
        .class          = I2C_CLASS_HWMON,
        .driver = {
                .name   = "lm75",
+               .pm     = LM75_DEV_PM_OPS,
        },
        .probe          = lm75_probe,
        .remove         = lm75_remove,
index 7c93454bb4e3eb4d01e482b2475335aa03aafc7e..e547a3eb4de31ae03d12b3c17f6320d05df2504a 100644 (file)
@@ -30,6 +30,7 @@
 /* straight from the datasheet */
 #define LM75_TEMP_MIN (-55000)
 #define LM75_TEMP_MAX 125000
+#define LM75_SHUTDOWN 0x01
 
 /* TEMP: 0.001C/bit (-55C to +125C)
    REG: (0.5C/bit, two's complement) << 7 */