|
@@ -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,
|