All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] staging:iio: Use dev_pm_ops
@ 2012-02-10 18:17 Lars-Peter Clausen
  2012-02-10 18:17 ` [PATCH 2/2] staging:iio: Convert remaining drivers to module_spi_driver Lars-Peter Clausen
  2012-02-10 22:05 ` [PATCH 1/2] staging:iio: Use dev_pm_ops Jonathan Cameron
  0 siblings, 2 replies; 4+ messages in thread
From: Lars-Peter Clausen @ 2012-02-10 18:17 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, Lars-Peter Clausen

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: Lars-Peter Clausen <lars@metafoo.de>

---
Mostly only compile tested (With CONFIG_PM_SLEEP and without CONFIG_PM_SLEEP
though).

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/adc/ad7606_par.c       |    4 ++--
 drivers/staging/iio/adc/ad7606_spi.c       |    2 +-
 drivers/staging/iio/addac/adt7316-i2c.c    |   18 +-----------------
 drivers/staging/iio/addac/adt7316-spi.c    |   18 +-----------------
 drivers/staging/iio/addac/adt7316.c        |   11 ++++++-----
 drivers/staging/iio/addac/adt7316.h        |    9 ++++++---
 drivers/staging/iio/dac/max517.c           |   18 ++++++++++++------
 drivers/staging/iio/light/tsl2563.c        |   26 ++++++++++++++++----------
 drivers/staging/iio/light/tsl2583.c        |   17 +++++++++++------
 drivers/staging/iio/magnetometer/hmc5843.c |   20 +++++++++++++-------
 10 files changed, 69 insertions(+), 74 deletions(-)

diff --git a/drivers/staging/iio/adc/ad7606_par.c b/drivers/staging/iio/adc/ad7606_par.c
index cff9756..3cc841c 100644
--- a/drivers/staging/iio/adc/ad7606_par.c
+++ b/drivers/staging/iio/adc/ad7606_par.c
@@ -117,7 +117,7 @@ static int __devexit ad7606_par_remove(struct platform_device *pdev)
 	return 0;
 }
 
-#ifdef CONFIG_PM
+#ifdef CONFIG_PM_SLEEP
 static int ad7606_par_suspend(struct device *dev)
 {
 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
@@ -144,7 +144,7 @@ static const struct dev_pm_ops ad7606_pm_ops = {
 
 #else
 #define AD7606_PAR_PM_OPS NULL
-#endif  /* CONFIG_PM */
+#endif  /* CONFIG_PM_SLEEP */
 
 static struct platform_device_id ad7606_driver_ids[] = {
 	{
diff --git a/drivers/staging/iio/adc/ad7606_spi.c b/drivers/staging/iio/adc/ad7606_spi.c
index 237f1c4..5be74c3 100644
--- a/drivers/staging/iio/adc/ad7606_spi.c
+++ b/drivers/staging/iio/adc/ad7606_spi.c
@@ -62,7 +62,7 @@ static int __devexit ad7606_spi_remove(struct spi_device *spi)
 	return ad7606_remove(indio_dev, spi->irq);
 }
 
-#ifdef CONFIG_PM
+#ifdef CONFIG_PM_SLEEP
 static int ad7606_spi_suspend(struct device *dev)
 {
 	struct iio_dev *indio_dev = dev_get_drvdata(dev);
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,
 		.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,
 		.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);
diff --git a/drivers/staging/iio/dac/max517.c b/drivers/staging/iio/dac/max517.c
index a4df6d7..41483c7 100644
--- a/drivers/staging/iio/dac/max517.c
+++ b/drivers/staging/iio/dac/max517.c
@@ -179,20 +179,27 @@ static struct attribute_group max518_attribute_group = {
 	.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;
 
-	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;
 
-	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 = {
 	.attrs = &max517_attribute_group,
 	.driver_module = THIS_MODULE,
@@ -273,11 +280,10 @@ MODULE_DEVICE_TABLE(i2c, max517_id);
 static struct i2c_driver max517_driver = {
 	.driver = {
 		.name	= MAX517_DRV_NAME,
+		.pm		= MAX517_PM_OPS,
 	},
 	.probe		= max517_probe,
 	.remove		= max517_remove,
-	.suspend	= max517_suspend,
-	.resume		= max517_resume,
 	.id_table	= max517_id,
 };
 module_i2c_driver(max517_driver);
diff --git a/drivers/staging/iio/light/tsl2563.c b/drivers/staging/iio/light/tsl2563.c
index ffca85e..aca1e03 100644
--- a/drivers/staging/iio/light/tsl2563.c
+++ b/drivers/staging/iio/light/tsl2563.c
@@ -118,7 +118,7 @@ struct tsl2563_chip {
 	struct delayed_work	poweroff_work;
 
 	/* Remember state for suspend and resume functions */
-	pm_message_t		state;
+	bool suspended;
 
 	struct tsl2563_gainlevel_coeff const *gainlevel;
 
@@ -315,7 +315,7 @@ static int tsl2563_get_adc(struct tsl2563_chip *chip)
 	int retry = 1;
 	int ret = 0;
 
-	if (chip->state.event != PM_EVENT_ON)
+	if (chip->suspended)
 		goto out;
 
 	if (!chip->int_enabled) {
@@ -810,9 +810,10 @@ static int tsl2563_remove(struct i2c_client *client)
 	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;
 
 	mutex_lock(&chip->lock);
@@ -821,16 +822,16 @@ static int tsl2563_suspend(struct i2c_client *client, pm_message_t state)
 	if (ret)
 		goto out;
 
-	chip->state = state;
+	chip->suspended = true;
 
 out:
 	mutex_unlock(&chip->lock);
 	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;
 
 	mutex_lock(&chip->lock);
@@ -843,13 +844,19 @@ static int tsl2563_resume(struct i2c_client *client)
 	if (ret)
 		goto out;
 
-	chip->state.event = PM_EVENT_ON;
+	chip->suspended = false;
 
 out:
 	mutex_unlock(&chip->lock);
 	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[] = {
 	{ "tsl2560", 0 },
 	{ "tsl2561", 1 },
@@ -862,9 +869,8 @@ MODULE_DEVICE_TABLE(i2c, tsl2563_id);
 static struct i2c_driver tsl2563_i2c_driver = {
 	.driver = {
 		.name	 = "tsl2563",
+		.pm	= TSL2563_PM_OPS,
 	},
-	.suspend	= tsl2563_suspend,
-	.resume		= tsl2563_resume,
 	.probe		= tsl2563_probe,
 	.remove		= __devexit_p(tsl2563_remove),
 	.id_table	= tsl2563_id,
diff --git a/drivers/staging/iio/light/tsl2583.c b/drivers/staging/iio/light/tsl2583.c
index 5b6455a..9fe9a67 100644
--- a/drivers/staging/iio/light/tsl2583.c
+++ b/drivers/staging/iio/light/tsl2583.c
@@ -884,9 +884,10 @@ fail2:
 	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);
 	int ret = 0;
 
@@ -901,9 +902,9 @@ static int taos_suspend(struct i2c_client *client, pm_message_t state)
 	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);
 	int ret = 0;
 
@@ -916,6 +917,11 @@ static int taos_resume(struct i2c_client *client)
 	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)
 {
@@ -937,10 +943,9 @@ MODULE_DEVICE_TABLE(i2c, taos_idtable);
 static struct i2c_driver taos_driver = {
 	.driver = {
 		.name = "tsl2583",
+		.pm = TAOS_PM_OPS,
 	},
 	.id_table = taos_idtable,
-	.suspend	= taos_suspend,
-	.resume		= taos_resume,
 	.probe = taos_probe,
 	.remove = __devexit_p(taos_remove),
 };
diff --git a/drivers/staging/iio/magnetometer/hmc5843.c b/drivers/staging/iio/magnetometer/hmc5843.c
index f2e85a9..d24992c 100644
--- a/drivers/staging/iio/magnetometer/hmc5843.c
+++ b/drivers/staging/iio/magnetometer/hmc5843.c
@@ -588,19 +588,26 @@ static int hmc5843_remove(struct i2c_client *client)
 	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;
 }
 
-static int hmc5843_resume(struct i2c_client *client)
+static int hmc5843_resume(struct device *dev)
 {
-	struct hmc5843_data *data = i2c_get_clientdata(client);
-	hmc5843_configure(client, data->operating_mode);
+	struct hmc5843_data *data = i2c_get_clientdata(to_i2c_client(dev));
+	hmc5843_configure(to_i2c_client(dev), data->operating_mode);
 	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[] = {
 	{ "hmc5843", 0 },
 	{ }
@@ -610,14 +617,13 @@ MODULE_DEVICE_TABLE(i2c, hmc5843_id);
 static struct i2c_driver hmc5843_driver = {
 	.driver = {
 		.name	= "hmc5843",
+		.pm	= HMC5843_PM_OPS,
 	},
 	.id_table	= hmc5843_id,
 	.probe		= hmc5843_probe,
 	.remove		= hmc5843_remove,
 	.detect		= hmc5843_detect,
 	.address_list	= normal_i2c,
-	.suspend	= hmc5843_suspend,
-	.resume		= hmc5843_resume,
 };
 module_i2c_driver(hmc5843_driver);
 
-- 
1.7.9


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] staging:iio: Convert remaining drivers to module_spi_driver
  2012-02-10 18:17 [PATCH 1/2] staging:iio: Use dev_pm_ops Lars-Peter Clausen
@ 2012-02-10 18:17 ` Lars-Peter Clausen
  2012-02-10 21:48   ` Jonathan Cameron
  2012-02-10 22:05 ` [PATCH 1/2] staging:iio: Use dev_pm_ops Jonathan Cameron
  1 sibling, 1 reply; 4+ messages in thread
From: Lars-Peter Clausen @ 2012-02-10 18:17 UTC (permalink / raw)
  To: Jonathan Cameron; +Cc: linux-iio, Lars-Peter Clausen

Convert the IIO drivers which have not been converted yet to module_spi_driver.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
---
 drivers/staging/iio/dac/ad5421.c |   13 +------------
 drivers/staging/iio/dac/ad5764.c |   13 +------------
 2 files changed, 2 insertions(+), 24 deletions(-)

diff --git a/drivers/staging/iio/dac/ad5421.c b/drivers/staging/iio/dac/ad5421.c
index 71ee868..0b040b2 100644
--- a/drivers/staging/iio/dac/ad5421.c
+++ b/drivers/staging/iio/dac/ad5421.c
@@ -536,18 +536,7 @@ static struct spi_driver ad5421_driver = {
 	.probe = ad5421_probe,
 	.remove = __devexit_p(ad5421_remove),
 };
-
-static __init int ad5421_init(void)
-{
-	return spi_register_driver(&ad5421_driver);
-}
-module_init(ad5421_init);
-
-static __exit void ad5421_exit(void)
-{
-	spi_unregister_driver(&ad5421_driver);
-}
-module_exit(ad5421_exit);
+module_spi_driver(ad5421_driver);
 
 MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
 MODULE_DESCRIPTION("Analog Devices AD5421 DAC");
diff --git a/drivers/staging/iio/dac/ad5764.c b/drivers/staging/iio/dac/ad5764.c
index ff91480..f73a730 100644
--- a/drivers/staging/iio/dac/ad5764.c
+++ b/drivers/staging/iio/dac/ad5764.c
@@ -375,18 +375,7 @@ static struct spi_driver ad5764_driver = {
 	.remove = __devexit_p(ad5764_remove),
 	.id_table = ad5764_ids,
 };
-
-static int __init ad5764_spi_init(void)
-{
-	return spi_register_driver(&ad5764_driver);
-}
-module_init(ad5764_spi_init);
-
-static void __exit ad5764_spi_exit(void)
-{
-	spi_unregister_driver(&ad5764_driver);
-}
-module_exit(ad5764_spi_exit);
+module_spi_driver(ad5764_driver);
 
 MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
 MODULE_DESCRIPTION("Analog Devices AD5744/AD5744R/AD5764/AD5764R DAC");
-- 
1.7.9


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2] staging:iio: Convert remaining drivers to module_spi_driver
  2012-02-10 18:17 ` [PATCH 2/2] staging:iio: Convert remaining drivers to module_spi_driver Lars-Peter Clausen
@ 2012-02-10 21:48   ` Jonathan Cameron
  0 siblings, 0 replies; 4+ messages in thread
From: Jonathan Cameron @ 2012-02-10 21:48 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: linux-iio

On 02/10/2012 06:17 PM, Lars-Peter Clausen wrote:
> Convert the IIO drivers which have not been converted yet to module_spi_driver.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Jonathan Cameron <jic23@kernel.org>
> ---
>  drivers/staging/iio/dac/ad5421.c |   13 +------------
>  drivers/staging/iio/dac/ad5764.c |   13 +------------
>  2 files changed, 2 insertions(+), 24 deletions(-)
> 
> diff --git a/drivers/staging/iio/dac/ad5421.c b/drivers/staging/iio/dac/ad5421.c
> index 71ee868..0b040b2 100644
> --- a/drivers/staging/iio/dac/ad5421.c
> +++ b/drivers/staging/iio/dac/ad5421.c
> @@ -536,18 +536,7 @@ static struct spi_driver ad5421_driver = {
>  	.probe = ad5421_probe,
>  	.remove = __devexit_p(ad5421_remove),
>  };
> -
> -static __init int ad5421_init(void)
> -{
> -	return spi_register_driver(&ad5421_driver);
> -}
> -module_init(ad5421_init);
> -
> -static __exit void ad5421_exit(void)
> -{
> -	spi_unregister_driver(&ad5421_driver);
> -}
> -module_exit(ad5421_exit);
> +module_spi_driver(ad5421_driver);
>  
>  MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
>  MODULE_DESCRIPTION("Analog Devices AD5421 DAC");
> diff --git a/drivers/staging/iio/dac/ad5764.c b/drivers/staging/iio/dac/ad5764.c
> index ff91480..f73a730 100644
> --- a/drivers/staging/iio/dac/ad5764.c
> +++ b/drivers/staging/iio/dac/ad5764.c
> @@ -375,18 +375,7 @@ static struct spi_driver ad5764_driver = {
>  	.remove = __devexit_p(ad5764_remove),
>  	.id_table = ad5764_ids,
>  };
> -
> -static int __init ad5764_spi_init(void)
> -{
> -	return spi_register_driver(&ad5764_driver);
> -}
> -module_init(ad5764_spi_init);
> -
> -static void __exit ad5764_spi_exit(void)
> -{
> -	spi_unregister_driver(&ad5764_driver);
> -}
> -module_exit(ad5764_spi_exit);
> +module_spi_driver(ad5764_driver);
>  
>  MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
>  MODULE_DESCRIPTION("Analog Devices AD5744/AD5744R/AD5764/AD5764R DAC");


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/2] staging:iio: Use dev_pm_ops
  2012-02-10 18:17 [PATCH 1/2] staging:iio: Use dev_pm_ops Lars-Peter Clausen
  2012-02-10 18:17 ` [PATCH 2/2] staging:iio: Convert remaining drivers to module_spi_driver Lars-Peter Clausen
@ 2012-02-10 22:05 ` Jonathan Cameron
  1 sibling, 0 replies; 4+ messages in thread
From: Jonathan Cameron @ 2012-02-10 22:05 UTC (permalink / raw)
  To: Lars-Peter Clausen; +Cc: linux-iio

On 02/10/2012 06:17 PM, Lars-Peter Clausen wrote:
> 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.
Never having spent the time to get my devboard to actually suspend I
can't test any of these, but superficially they look fine.

I would have prefered the ones that just change the CONFIG_PM ->
CONFIG_PM_SLEEP checks as a separate patch, but that doesn't really matter.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Jonathan Cameron <jic23@kernel.org>
> 
> ---
> Mostly only compile tested (With CONFIG_PM_SLEEP and without CONFIG_PM_SLEEP
> though).
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
> ---
>  drivers/staging/iio/adc/ad7606_par.c       |    4 ++--
>  drivers/staging/iio/adc/ad7606_spi.c       |    2 +-
>  drivers/staging/iio/addac/adt7316-i2c.c    |   18 +-----------------
>  drivers/staging/iio/addac/adt7316-spi.c    |   18 +-----------------
>  drivers/staging/iio/addac/adt7316.c        |   11 ++++++-----
>  drivers/staging/iio/addac/adt7316.h        |    9 ++++++---
>  drivers/staging/iio/dac/max517.c           |   18 ++++++++++++------
>  drivers/staging/iio/light/tsl2563.c        |   26 ++++++++++++++++----------
>  drivers/staging/iio/light/tsl2583.c        |   17 +++++++++++------
>  drivers/staging/iio/magnetometer/hmc5843.c |   20 +++++++++++++-------
>  10 files changed, 69 insertions(+), 74 deletions(-)
> 
> diff --git a/drivers/staging/iio/adc/ad7606_par.c b/drivers/staging/iio/adc/ad7606_par.c
> index cff9756..3cc841c 100644
> --- a/drivers/staging/iio/adc/ad7606_par.c
> +++ b/drivers/staging/iio/adc/ad7606_par.c
> @@ -117,7 +117,7 @@ static int __devexit ad7606_par_remove(struct platform_device *pdev)
>  	return 0;
>  }
>  
> -#ifdef CONFIG_PM
> +#ifdef CONFIG_PM_SLEEP
>  static int ad7606_par_suspend(struct device *dev)
>  {
>  	struct iio_dev *indio_dev = dev_get_drvdata(dev);
> @@ -144,7 +144,7 @@ static const struct dev_pm_ops ad7606_pm_ops = {
>  
>  #else
>  #define AD7606_PAR_PM_OPS NULL
> -#endif  /* CONFIG_PM */
> +#endif  /* CONFIG_PM_SLEEP */
>  
>  static struct platform_device_id ad7606_driver_ids[] = {
>  	{
> diff --git a/drivers/staging/iio/adc/ad7606_spi.c b/drivers/staging/iio/adc/ad7606_spi.c
> index 237f1c4..5be74c3 100644
> --- a/drivers/staging/iio/adc/ad7606_spi.c
> +++ b/drivers/staging/iio/adc/ad7606_spi.c
> @@ -62,7 +62,7 @@ static int __devexit ad7606_spi_remove(struct spi_device *spi)
>  	return ad7606_remove(indio_dev, spi->irq);
>  }
>  
> -#ifdef CONFIG_PM
> +#ifdef CONFIG_PM_SLEEP
>  static int ad7606_spi_suspend(struct device *dev)
>  {
>  	struct iio_dev *indio_dev = dev_get_drvdata(dev);
> 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,
>  		.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,
>  		.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);
> diff --git a/drivers/staging/iio/dac/max517.c b/drivers/staging/iio/dac/max517.c
> index a4df6d7..41483c7 100644
> --- a/drivers/staging/iio/dac/max517.c
> +++ b/drivers/staging/iio/dac/max517.c
> @@ -179,20 +179,27 @@ static struct attribute_group max518_attribute_group = {
>  	.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;
>  
> -	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;
>  
> -	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 = {
>  	.attrs = &max517_attribute_group,
>  	.driver_module = THIS_MODULE,
> @@ -273,11 +280,10 @@ MODULE_DEVICE_TABLE(i2c, max517_id);
>  static struct i2c_driver max517_driver = {
>  	.driver = {
>  		.name	= MAX517_DRV_NAME,
> +		.pm		= MAX517_PM_OPS,
>  	},
>  	.probe		= max517_probe,
>  	.remove		= max517_remove,
> -	.suspend	= max517_suspend,
> -	.resume		= max517_resume,
>  	.id_table	= max517_id,
>  };
>  module_i2c_driver(max517_driver);
> diff --git a/drivers/staging/iio/light/tsl2563.c b/drivers/staging/iio/light/tsl2563.c
> index ffca85e..aca1e03 100644
> --- a/drivers/staging/iio/light/tsl2563.c
> +++ b/drivers/staging/iio/light/tsl2563.c
> @@ -118,7 +118,7 @@ struct tsl2563_chip {
>  	struct delayed_work	poweroff_work;
>  
>  	/* Remember state for suspend and resume functions */
> -	pm_message_t		state;
> +	bool suspended;
>  
>  	struct tsl2563_gainlevel_coeff const *gainlevel;
>  
> @@ -315,7 +315,7 @@ static int tsl2563_get_adc(struct tsl2563_chip *chip)
>  	int retry = 1;
>  	int ret = 0;
>  
> -	if (chip->state.event != PM_EVENT_ON)
> +	if (chip->suspended)
>  		goto out;
>  
>  	if (!chip->int_enabled) {
> @@ -810,9 +810,10 @@ static int tsl2563_remove(struct i2c_client *client)
>  	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;
>  
>  	mutex_lock(&chip->lock);
> @@ -821,16 +822,16 @@ static int tsl2563_suspend(struct i2c_client *client, pm_message_t state)
>  	if (ret)
>  		goto out;
>  
> -	chip->state = state;
> +	chip->suspended = true;
>  
>  out:
>  	mutex_unlock(&chip->lock);
>  	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;
>  
>  	mutex_lock(&chip->lock);
> @@ -843,13 +844,19 @@ static int tsl2563_resume(struct i2c_client *client)
>  	if (ret)
>  		goto out;
>  
> -	chip->state.event = PM_EVENT_ON;
> +	chip->suspended = false;
>  
>  out:
>  	mutex_unlock(&chip->lock);
>  	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[] = {
>  	{ "tsl2560", 0 },
>  	{ "tsl2561", 1 },
> @@ -862,9 +869,8 @@ MODULE_DEVICE_TABLE(i2c, tsl2563_id);
>  static struct i2c_driver tsl2563_i2c_driver = {
>  	.driver = {
>  		.name	 = "tsl2563",
> +		.pm	= TSL2563_PM_OPS,
>  	},
> -	.suspend	= tsl2563_suspend,
> -	.resume		= tsl2563_resume,
>  	.probe		= tsl2563_probe,
>  	.remove		= __devexit_p(tsl2563_remove),
>  	.id_table	= tsl2563_id,
> diff --git a/drivers/staging/iio/light/tsl2583.c b/drivers/staging/iio/light/tsl2583.c
> index 5b6455a..9fe9a67 100644
> --- a/drivers/staging/iio/light/tsl2583.c
> +++ b/drivers/staging/iio/light/tsl2583.c
> @@ -884,9 +884,10 @@ fail2:
>  	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);
>  	int ret = 0;
>  
> @@ -901,9 +902,9 @@ static int taos_suspend(struct i2c_client *client, pm_message_t state)
>  	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);
>  	int ret = 0;
>  
> @@ -916,6 +917,11 @@ static int taos_resume(struct i2c_client *client)
>  	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)
>  {
> @@ -937,10 +943,9 @@ MODULE_DEVICE_TABLE(i2c, taos_idtable);
>  static struct i2c_driver taos_driver = {
>  	.driver = {
>  		.name = "tsl2583",
> +		.pm = TAOS_PM_OPS,
>  	},
>  	.id_table = taos_idtable,
> -	.suspend	= taos_suspend,
> -	.resume		= taos_resume,
>  	.probe = taos_probe,
>  	.remove = __devexit_p(taos_remove),
>  };
> diff --git a/drivers/staging/iio/magnetometer/hmc5843.c b/drivers/staging/iio/magnetometer/hmc5843.c
> index f2e85a9..d24992c 100644
> --- a/drivers/staging/iio/magnetometer/hmc5843.c
> +++ b/drivers/staging/iio/magnetometer/hmc5843.c
> @@ -588,19 +588,26 @@ static int hmc5843_remove(struct i2c_client *client)
>  	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;
>  }
>  
> -static int hmc5843_resume(struct i2c_client *client)
> +static int hmc5843_resume(struct device *dev)
>  {
> -	struct hmc5843_data *data = i2c_get_clientdata(client);
> -	hmc5843_configure(client, data->operating_mode);
> +	struct hmc5843_data *data = i2c_get_clientdata(to_i2c_client(dev));
> +	hmc5843_configure(to_i2c_client(dev), data->operating_mode);
>  	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[] = {
>  	{ "hmc5843", 0 },
>  	{ }
> @@ -610,14 +617,13 @@ MODULE_DEVICE_TABLE(i2c, hmc5843_id);
>  static struct i2c_driver hmc5843_driver = {
>  	.driver = {
>  		.name	= "hmc5843",
> +		.pm	= HMC5843_PM_OPS,
>  	},
>  	.id_table	= hmc5843_id,
>  	.probe		= hmc5843_probe,
>  	.remove		= hmc5843_remove,
>  	.detect		= hmc5843_detect,
>  	.address_list	= normal_i2c,
> -	.suspend	= hmc5843_suspend,
> -	.resume		= hmc5843_resume,
>  };
>  module_i2c_driver(hmc5843_driver);
>  


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2012-02-10 22:04 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-02-10 18:17 [PATCH 1/2] staging:iio: Use dev_pm_ops Lars-Peter Clausen
2012-02-10 18:17 ` [PATCH 2/2] staging:iio: Convert remaining drivers to module_spi_driver Lars-Peter Clausen
2012-02-10 21:48   ` Jonathan Cameron
2012-02-10 22:05 ` [PATCH 1/2] staging:iio: Use dev_pm_ops Jonathan Cameron

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.