[PATCH] staging:iio: Use dev_pm_ops

Lars-Peter Clausen lars at metafoo.de
Wed Feb 22 10:01:13 UTC 2012


Hi Shubhrajyoti,

On 02/22/2012 07:24 AM, Shubhrajyoti Datta wrote:
>> diff --git a/drivers/staging/iio/addac/adt7316-i2c.c b/drivers/staging/iio/addac/adt7316-i2c.c
>> index 2c03a39..9e128dd 100644
>> --- a/drivers/staging/iio/addac/adt7316-i2c.c
>> +++ b/drivers/staging/iio/addac/adt7316-i2c.c
>> @@ -125,30 +125,14 @@ static const struct i2c_device_id 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 = {
>>        .driver = {
>>                .name = "adt7316",
>> +               .pm = ADT7316_PM_OPS,
> Could  we use simple dev pm ops here?

We do, ADT7316_PM_OPS is defined as a pointer to adt7316_pm_ops, which is
defined with SIMPLE_DEV_PM_OPS. It is just in another module, because
adt7316_i2c and adt7316_par share the same set of suspend/resume functions.

>>                .owner  = THIS_MODULE,
>>        },
>>        .probe = adt7316_i2c_probe,
>>        .remove = __devexit_p(adt7316_i2c_remove),
>> -       .suspend = adt7316_i2c_suspend,
>> -       .resume = adt7316_i2c_resume,
>>        .id_table = adt7316_i2c_id,
>>  };
>>  module_i2c_driver(adt7316_driver);
>> diff --git a/drivers/staging/iio/addac/adt7316-spi.c b/drivers/staging/iio/addac/adt7316-spi.c
>> index 1ea3cd0..985f7d8 100644
>> --- a/drivers/staging/iio/addac/adt7316-spi.c
>> +++ b/drivers/staging/iio/addac/adt7316-spi.c
>> @@ -133,30 +133,14 @@ static const struct spi_device_id 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 = {
>>        .driver = {
>>                .name = "adt7316",
>> +               .pm = ADT7316_PM_OPS,
> 
> Could  we use simple dev pm ops here?
> 
>>                .owner = THIS_MODULE,
>>        },
>>        .probe = adt7316_spi_probe,
>>        .remove = __devexit_p(adt7316_spi_remove),
>> -       .suspend = adt7316_spi_suspend,
>> -       .resume = adt7316_spi_resume,
>>        .id_table = adt7316_spi_id,
>>  };
>>  module_spi_driver(adt7316_driver);
>> diff --git a/drivers/staging/iio/addac/adt7316.c b/drivers/staging/iio/addac/adt7316.c
>> index 13c3929..fd6a454 100644
>> --- a/drivers/staging/iio/addac/adt7316.c
>> +++ b/drivers/staging/iio/addac/adt7316.c
>> @@ -2089,24 +2089,25 @@ static struct attribute_group adt7516_event_attribute_group = {
>>        .name = "events",
>>  };
>>
>> -#ifdef CONFIG_PM
>> -int adt7316_disable(struct device *dev)
>> +#ifdef CONFIG_PM_SLEEP
>> +static int adt7316_disable(struct device *dev)
>>  {
>>        struct iio_dev *dev_info = dev_get_drvdata(dev);
>>        struct adt7316_chip_info *chip = iio_priv(dev_info);
>>
>>        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 adt7316_chip_info *chip = iio_priv(dev_info);
>>
>>        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
>>
>>  static const struct iio_info adt7316_info = {
>> diff --git a/drivers/staging/iio/addac/adt7316.h b/drivers/staging/iio/addac/adt7316.h
>> index d34bd67..4d3efff 100644
>> --- a/drivers/staging/iio/addac/adt7316.h
>> +++ b/drivers/staging/iio/addac/adt7316.h
>> @@ -10,6 +10,7 @@
>>  #define _ADT7316_H_
>>
>>  #include <linux/types.h>
>> +#include <linux/pm.h>
>>
>>  #define ADT7316_REG_MAX_ADDR           0x3F
>>
>> @@ -23,9 +24,11 @@ struct adt7316_bus {
>>        int (*multi_write) (void *client, u8 first_reg, u8 count, u8 *data);
>>  };
>>
>> -#ifdef CONFIG_PM
>> -int adt7316_disable(struct device *dev);
>> -int adt7316_enable(struct device *dev);
>> +#ifdef CONFIG_PM_SLEEP
>> +extern const struct dev_pm_ops adt7316_pm_ops;
>> +#define ADT7316_PM_OPS (&adt7316_pm_ops)
>> +#else
>> +#define ADT7316_PM_OPS NULL
>>  #endif
>>  int adt7316_probe(struct device *dev, struct adt7316_bus *bus, const char *name);
>>  int adt7316_remove(struct device *dev);



More information about the devel mailing list