Commit 01788c53 authored by Lars-Peter Clausen's avatar Lars-Peter Clausen Committed by Greg Kroah-Hartman

staging:iio: Use dev_pm_ops

Use dev_pm_ops instead of legacy suspend/resume callbacks for IIO drivers.

Note that this patch introduces a few new #ifdef CONFIG_PM_SLEEP around the
suspend and resume callbacks to avoid warnings of unused functions if
CONFIG_PM_SLEEP is not defined.
Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
Acked-by: default avatarJonathan Cameron <jic23@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 4eeb3335
...@@ -125,30 +125,14 @@ static const struct i2c_device_id adt7316_i2c_id[] = { ...@@ -125,30 +125,14 @@ static const struct i2c_device_id adt7316_i2c_id[] = {
MODULE_DEVICE_TABLE(i2c, adt7316_i2c_id); MODULE_DEVICE_TABLE(i2c, adt7316_i2c_id);
#ifdef CONFIG_PM
static int adt7316_i2c_suspend(struct i2c_client *client, pm_message_t message)
{
return adt7316_disable(&client->dev);
}
static int adt7316_i2c_resume(struct i2c_client *client)
{
return adt7316_enable(&client->dev);
}
#else
# define adt7316_i2c_suspend NULL
# define adt7316_i2c_resume NULL
#endif
static struct i2c_driver adt7316_driver = { static struct i2c_driver adt7316_driver = {
.driver = { .driver = {
.name = "adt7316", .name = "adt7316",
.pm = ADT7316_PM_OPS,
.owner = THIS_MODULE, .owner = THIS_MODULE,
}, },
.probe = adt7316_i2c_probe, .probe = adt7316_i2c_probe,
.remove = __devexit_p(adt7316_i2c_remove), .remove = __devexit_p(adt7316_i2c_remove),
.suspend = adt7316_i2c_suspend,
.resume = adt7316_i2c_resume,
.id_table = adt7316_i2c_id, .id_table = adt7316_i2c_id,
}; };
module_i2c_driver(adt7316_driver); module_i2c_driver(adt7316_driver);
......
...@@ -133,30 +133,14 @@ static const struct spi_device_id adt7316_spi_id[] = { ...@@ -133,30 +133,14 @@ static const struct spi_device_id adt7316_spi_id[] = {
MODULE_DEVICE_TABLE(spi, adt7316_spi_id); MODULE_DEVICE_TABLE(spi, adt7316_spi_id);
#ifdef CONFIG_PM
static int adt7316_spi_suspend(struct spi_device *spi_dev, pm_message_t message)
{
return adt7316_disable(&spi_dev->dev);
}
static int adt7316_spi_resume(struct spi_device *spi_dev)
{
return adt7316_enable(&spi_dev->dev);
}
#else
# define adt7316_spi_suspend NULL
# define adt7316_spi_resume NULL
#endif
static struct spi_driver adt7316_driver = { static struct spi_driver adt7316_driver = {
.driver = { .driver = {
.name = "adt7316", .name = "adt7316",
.pm = ADT7316_PM_OPS,
.owner = THIS_MODULE, .owner = THIS_MODULE,
}, },
.probe = adt7316_spi_probe, .probe = adt7316_spi_probe,
.remove = __devexit_p(adt7316_spi_remove), .remove = __devexit_p(adt7316_spi_remove),
.suspend = adt7316_spi_suspend,
.resume = adt7316_spi_resume,
.id_table = adt7316_spi_id, .id_table = adt7316_spi_id,
}; };
module_spi_driver(adt7316_driver); module_spi_driver(adt7316_driver);
......
...@@ -2089,24 +2089,25 @@ static struct attribute_group adt7516_event_attribute_group = { ...@@ -2089,24 +2089,25 @@ static struct attribute_group adt7516_event_attribute_group = {
.name = "events", .name = "events",
}; };
#ifdef CONFIG_PM #ifdef CONFIG_PM_SLEEP
int adt7316_disable(struct device *dev) static int adt7316_disable(struct device *dev)
{ {
struct iio_dev *dev_info = dev_get_drvdata(dev); struct iio_dev *dev_info = dev_get_drvdata(dev);
struct adt7316_chip_info *chip = iio_priv(dev_info); struct adt7316_chip_info *chip = iio_priv(dev_info);
return _adt7316_store_enabled(chip, 0); return _adt7316_store_enabled(chip, 0);
} }
EXPORT_SYMBOL(adt7316_disable);
int adt7316_enable(struct device *dev) static int adt7316_enable(struct device *dev)
{ {
struct iio_dev *dev_info = dev_get_drvdata(dev); struct iio_dev *dev_info = dev_get_drvdata(dev);
struct adt7316_chip_info *chip = iio_priv(dev_info); struct adt7316_chip_info *chip = iio_priv(dev_info);
return _adt7316_store_enabled(chip, 1); return _adt7316_store_enabled(chip, 1);
} }
EXPORT_SYMBOL(adt7316_enable);
SIMPLE_DEV_PM_OPS(adt7316_pm_ops, adt7316_disable, adt7316_enable);
EXPORT_SYMBOL_GPL(adt7316_pm_ops);
#endif #endif
static const struct iio_info adt7316_info = { static const struct iio_info adt7316_info = {
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#define _ADT7316_H_ #define _ADT7316_H_
#include <linux/types.h> #include <linux/types.h>
#include <linux/pm.h>
#define ADT7316_REG_MAX_ADDR 0x3F #define ADT7316_REG_MAX_ADDR 0x3F
...@@ -23,9 +24,11 @@ struct adt7316_bus { ...@@ -23,9 +24,11 @@ struct adt7316_bus {
int (*multi_write) (void *client, u8 first_reg, u8 count, u8 *data); int (*multi_write) (void *client, u8 first_reg, u8 count, u8 *data);
}; };
#ifdef CONFIG_PM #ifdef CONFIG_PM_SLEEP
int adt7316_disable(struct device *dev); extern const struct dev_pm_ops adt7316_pm_ops;
int adt7316_enable(struct device *dev); #define ADT7316_PM_OPS (&adt7316_pm_ops)
#else
#define ADT7316_PM_OPS NULL
#endif #endif
int adt7316_probe(struct device *dev, struct adt7316_bus *bus, const char *name); int adt7316_probe(struct device *dev, struct adt7316_bus *bus, const char *name);
int adt7316_remove(struct device *dev); int adt7316_remove(struct device *dev);
......
...@@ -179,20 +179,27 @@ static struct attribute_group max518_attribute_group = { ...@@ -179,20 +179,27 @@ static struct attribute_group max518_attribute_group = {
.attrs = max518_attributes, .attrs = max518_attributes,
}; };
static int max517_suspend(struct i2c_client *client, pm_message_t mesg) #ifdef CONFIG_PM_SLEEP
static int max517_suspend(struct device *dev)
{ {
u8 outbuf = COMMAND_PD; u8 outbuf = COMMAND_PD;
return i2c_master_send(client, &outbuf, 1); return i2c_master_send(to_i2c_client(dev), &outbuf, 1);
} }
static int max517_resume(struct i2c_client *client) static int max517_resume(struct device *dev)
{ {
u8 outbuf = 0; u8 outbuf = 0;
return i2c_master_send(client, &outbuf, 1); return i2c_master_send(to_i2c_client(dev), &outbuf, 1);
} }
static SIMPLE_DEV_PM_OPS(max517_pm_ops, max517_suspend, max517_resume);
#define MAX517_PM_OPS (&max517_pm_ops)
#else
#define MAX517_PM_OPS NULL
#endif
static const struct iio_info max517_info = { static const struct iio_info max517_info = {
.attrs = &max517_attribute_group, .attrs = &max517_attribute_group,
.driver_module = THIS_MODULE, .driver_module = THIS_MODULE,
...@@ -273,11 +280,10 @@ MODULE_DEVICE_TABLE(i2c, max517_id); ...@@ -273,11 +280,10 @@ MODULE_DEVICE_TABLE(i2c, max517_id);
static struct i2c_driver max517_driver = { static struct i2c_driver max517_driver = {
.driver = { .driver = {
.name = MAX517_DRV_NAME, .name = MAX517_DRV_NAME,
.pm = MAX517_PM_OPS,
}, },
.probe = max517_probe, .probe = max517_probe,
.remove = max517_remove, .remove = max517_remove,
.suspend = max517_suspend,
.resume = max517_resume,
.id_table = max517_id, .id_table = max517_id,
}; };
module_i2c_driver(max517_driver); module_i2c_driver(max517_driver);
......
...@@ -118,7 +118,7 @@ struct tsl2563_chip { ...@@ -118,7 +118,7 @@ struct tsl2563_chip {
struct delayed_work poweroff_work; struct delayed_work poweroff_work;
/* Remember state for suspend and resume functions */ /* Remember state for suspend and resume functions */
pm_message_t state; bool suspended;
struct tsl2563_gainlevel_coeff const *gainlevel; struct tsl2563_gainlevel_coeff const *gainlevel;
...@@ -315,7 +315,7 @@ static int tsl2563_get_adc(struct tsl2563_chip *chip) ...@@ -315,7 +315,7 @@ static int tsl2563_get_adc(struct tsl2563_chip *chip)
int retry = 1; int retry = 1;
int ret = 0; int ret = 0;
if (chip->state.event != PM_EVENT_ON) if (chip->suspended)
goto out; goto out;
if (!chip->int_enabled) { if (!chip->int_enabled) {
...@@ -810,9 +810,10 @@ static int tsl2563_remove(struct i2c_client *client) ...@@ -810,9 +810,10 @@ static int tsl2563_remove(struct i2c_client *client)
return 0; return 0;
} }
static int tsl2563_suspend(struct i2c_client *client, pm_message_t state) #ifdef CONFIG_PM_SLEEP
static int tsl2563_suspend(struct device *dev)
{ {
struct tsl2563_chip *chip = i2c_get_clientdata(client); struct tsl2563_chip *chip = i2c_get_clientdata(to_i2c_client(dev));
int ret; int ret;
mutex_lock(&chip->lock); mutex_lock(&chip->lock);
...@@ -821,16 +822,16 @@ static int tsl2563_suspend(struct i2c_client *client, pm_message_t state) ...@@ -821,16 +822,16 @@ static int tsl2563_suspend(struct i2c_client *client, pm_message_t state)
if (ret) if (ret)
goto out; goto out;
chip->state = state; chip->suspended = true;
out: out:
mutex_unlock(&chip->lock); mutex_unlock(&chip->lock);
return ret; return ret;
} }
static int tsl2563_resume(struct i2c_client *client) static int tsl2563_resume(struct device *dev)
{ {
struct tsl2563_chip *chip = i2c_get_clientdata(client); struct tsl2563_chip *chip = i2c_get_clientdata(to_i2c_client(dev));
int ret; int ret;
mutex_lock(&chip->lock); mutex_lock(&chip->lock);
...@@ -843,13 +844,19 @@ static int tsl2563_resume(struct i2c_client *client) ...@@ -843,13 +844,19 @@ static int tsl2563_resume(struct i2c_client *client)
if (ret) if (ret)
goto out; goto out;
chip->state.event = PM_EVENT_ON; chip->suspended = false;
out: out:
mutex_unlock(&chip->lock); mutex_unlock(&chip->lock);
return ret; return ret;
} }
static SIMPLE_DEV_PM_OPS(tsl2563_pm_ops, tsl2563_suspend, tsl2563_resume);
#define TSL2563_PM_OPS (&tsl2563_pm_ops)
#else
#define TSL2563_PM_OPS NULL
#endif
static const struct i2c_device_id tsl2563_id[] = { static const struct i2c_device_id tsl2563_id[] = {
{ "tsl2560", 0 }, { "tsl2560", 0 },
{ "tsl2561", 1 }, { "tsl2561", 1 },
...@@ -862,9 +869,8 @@ MODULE_DEVICE_TABLE(i2c, tsl2563_id); ...@@ -862,9 +869,8 @@ MODULE_DEVICE_TABLE(i2c, tsl2563_id);
static struct i2c_driver tsl2563_i2c_driver = { static struct i2c_driver tsl2563_i2c_driver = {
.driver = { .driver = {
.name = "tsl2563", .name = "tsl2563",
.pm = TSL2563_PM_OPS,
}, },
.suspend = tsl2563_suspend,
.resume = tsl2563_resume,
.probe = tsl2563_probe, .probe = tsl2563_probe,
.remove = __devexit_p(tsl2563_remove), .remove = __devexit_p(tsl2563_remove),
.id_table = tsl2563_id, .id_table = tsl2563_id,
......
...@@ -884,9 +884,10 @@ static int __devinit taos_probe(struct i2c_client *clientp, ...@@ -884,9 +884,10 @@ static int __devinit taos_probe(struct i2c_client *clientp,
return ret; return ret;
} }
static int taos_suspend(struct i2c_client *client, pm_message_t state) #ifdef CONFIG_PM_SLEEP
static int taos_suspend(struct device *dev)
{ {
struct iio_dev *indio_dev = i2c_get_clientdata(client); struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
struct tsl2583_chip *chip = iio_priv(indio_dev); struct tsl2583_chip *chip = iio_priv(indio_dev);
int ret = 0; int ret = 0;
...@@ -901,9 +902,9 @@ static int taos_suspend(struct i2c_client *client, pm_message_t state) ...@@ -901,9 +902,9 @@ static int taos_suspend(struct i2c_client *client, pm_message_t state)
return ret; return ret;
} }
static int taos_resume(struct i2c_client *client) static int taos_resume(struct device *dev)
{ {
struct iio_dev *indio_dev = i2c_get_clientdata(client); struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
struct tsl2583_chip *chip = iio_priv(indio_dev); struct tsl2583_chip *chip = iio_priv(indio_dev);
int ret = 0; int ret = 0;
...@@ -916,6 +917,11 @@ static int taos_resume(struct i2c_client *client) ...@@ -916,6 +917,11 @@ static int taos_resume(struct i2c_client *client)
return ret; return ret;
} }
static SIMPLE_DEV_PM_OPS(taos_pm_ops, taos_suspend, taos_resume);
#define TAOS_PM_OPS (&taos_pm_ops)
#else
#define TAOS_PM_OPS NULL
#endif
static int __devexit taos_remove(struct i2c_client *client) static int __devexit taos_remove(struct i2c_client *client)
{ {
...@@ -937,10 +943,9 @@ MODULE_DEVICE_TABLE(i2c, taos_idtable); ...@@ -937,10 +943,9 @@ MODULE_DEVICE_TABLE(i2c, taos_idtable);
static struct i2c_driver taos_driver = { static struct i2c_driver taos_driver = {
.driver = { .driver = {
.name = "tsl2583", .name = "tsl2583",
.pm = TAOS_PM_OPS,
}, },
.id_table = taos_idtable, .id_table = taos_idtable,
.suspend = taos_suspend,
.resume = taos_resume,
.probe = taos_probe, .probe = taos_probe,
.remove = __devexit_p(taos_remove), .remove = __devexit_p(taos_remove),
}; };
......
...@@ -588,19 +588,26 @@ static int hmc5843_remove(struct i2c_client *client) ...@@ -588,19 +588,26 @@ static int hmc5843_remove(struct i2c_client *client)
return 0; return 0;
} }
static int hmc5843_suspend(struct i2c_client *client, pm_message_t mesg) #ifdef CONFIG_PM_SLEEP
static int hmc5843_suspend(struct device *dev)
{ {
hmc5843_configure(client, MODE_SLEEP); hmc5843_configure(to_i2c_client(dev), MODE_SLEEP);
return 0; return 0;
} }
static int hmc5843_resume(struct i2c_client *client) static int hmc5843_resume(struct device *dev)
{ {
struct hmc5843_data *data = i2c_get_clientdata(client); struct hmc5843_data *data = i2c_get_clientdata(to_i2c_client(dev));
hmc5843_configure(client, data->operating_mode); hmc5843_configure(to_i2c_client(dev), data->operating_mode);
return 0; return 0;
} }
static SIMPLE_DEV_PM_OPS(hmc5843_pm_ops, hmc5843_suspend, hmc5843_resume);
#define HMC5843_PM_OPS (&hmc5843_pm_ops)
#else
#define HMC5843_PM_OPS NULL
#endif
static const struct i2c_device_id hmc5843_id[] = { static const struct i2c_device_id hmc5843_id[] = {
{ "hmc5843", 0 }, { "hmc5843", 0 },
{ } { }
...@@ -610,14 +617,13 @@ MODULE_DEVICE_TABLE(i2c, hmc5843_id); ...@@ -610,14 +617,13 @@ MODULE_DEVICE_TABLE(i2c, hmc5843_id);
static struct i2c_driver hmc5843_driver = { static struct i2c_driver hmc5843_driver = {
.driver = { .driver = {
.name = "hmc5843", .name = "hmc5843",
.pm = HMC5843_PM_OPS,
}, },
.id_table = hmc5843_id, .id_table = hmc5843_id,
.probe = hmc5843_probe, .probe = hmc5843_probe,
.remove = hmc5843_remove, .remove = hmc5843_remove,
.detect = hmc5843_detect, .detect = hmc5843_detect,
.address_list = normal_i2c, .address_list = normal_i2c,
.suspend = hmc5843_suspend,
.resume = hmc5843_resume,
}; };
module_i2c_driver(hmc5843_driver); module_i2c_driver(hmc5843_driver);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment