Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Jonathan Cameron <jic23@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Lars-Peter Clausen and committed by
Greg Kroah-Hartman
01788c53 4eeb3335

+66 -71
+1 -17
drivers/staging/iio/addac/adt7316-i2c.c
··· 125 125 126 126 MODULE_DEVICE_TABLE(i2c, adt7316_i2c_id); 127 127 128 - #ifdef CONFIG_PM 129 - static int adt7316_i2c_suspend(struct i2c_client *client, pm_message_t message) 130 - { 131 - return adt7316_disable(&client->dev); 132 - } 133 - 134 - static int adt7316_i2c_resume(struct i2c_client *client) 135 - { 136 - return adt7316_enable(&client->dev); 137 - } 138 - #else 139 - # define adt7316_i2c_suspend NULL 140 - # define adt7316_i2c_resume NULL 141 - #endif 142 - 143 128 static struct i2c_driver adt7316_driver = { 144 129 .driver = { 145 130 .name = "adt7316", 131 + .pm = ADT7316_PM_OPS, 146 132 .owner = THIS_MODULE, 147 133 }, 148 134 .probe = adt7316_i2c_probe, 149 135 .remove = __devexit_p(adt7316_i2c_remove), 150 - .suspend = adt7316_i2c_suspend, 151 - .resume = adt7316_i2c_resume, 152 136 .id_table = adt7316_i2c_id, 153 137 }; 154 138 module_i2c_driver(adt7316_driver);
+1 -17
drivers/staging/iio/addac/adt7316-spi.c
··· 133 133 134 134 MODULE_DEVICE_TABLE(spi, adt7316_spi_id); 135 135 136 - #ifdef CONFIG_PM 137 - static int adt7316_spi_suspend(struct spi_device *spi_dev, pm_message_t message) 138 - { 139 - return adt7316_disable(&spi_dev->dev); 140 - } 141 - 142 - static int adt7316_spi_resume(struct spi_device *spi_dev) 143 - { 144 - return adt7316_enable(&spi_dev->dev); 145 - } 146 - #else 147 - # define adt7316_spi_suspend NULL 148 - # define adt7316_spi_resume NULL 149 - #endif 150 - 151 136 static struct spi_driver adt7316_driver = { 152 137 .driver = { 153 138 .name = "adt7316", 139 + .pm = ADT7316_PM_OPS, 154 140 .owner = THIS_MODULE, 155 141 }, 156 142 .probe = adt7316_spi_probe, 157 143 .remove = __devexit_p(adt7316_spi_remove), 158 - .suspend = adt7316_spi_suspend, 159 - .resume = adt7316_spi_resume, 160 144 .id_table = adt7316_spi_id, 161 145 }; 162 146 module_spi_driver(adt7316_driver);
+6 -5
drivers/staging/iio/addac/adt7316.c
··· 2089 2089 .name = "events", 2090 2090 }; 2091 2091 2092 - #ifdef CONFIG_PM 2093 - int adt7316_disable(struct device *dev) 2092 + #ifdef CONFIG_PM_SLEEP 2093 + static int adt7316_disable(struct device *dev) 2094 2094 { 2095 2095 struct iio_dev *dev_info = dev_get_drvdata(dev); 2096 2096 struct adt7316_chip_info *chip = iio_priv(dev_info); 2097 2097 2098 2098 return _adt7316_store_enabled(chip, 0); 2099 2099 } 2100 - EXPORT_SYMBOL(adt7316_disable); 2101 2100 2102 - int adt7316_enable(struct device *dev) 2101 + static int adt7316_enable(struct device *dev) 2103 2102 { 2104 2103 struct iio_dev *dev_info = dev_get_drvdata(dev); 2105 2104 struct adt7316_chip_info *chip = iio_priv(dev_info); 2106 2105 2107 2106 return _adt7316_store_enabled(chip, 1); 2108 2107 } 2109 - EXPORT_SYMBOL(adt7316_enable); 2108 + 2109 + SIMPLE_DEV_PM_OPS(adt7316_pm_ops, adt7316_disable, adt7316_enable); 2110 + EXPORT_SYMBOL_GPL(adt7316_pm_ops); 2110 2111 #endif 2111 2112 2112 2113 static const struct iio_info adt7316_info = {
+6 -3
drivers/staging/iio/addac/adt7316.h
··· 10 10 #define _ADT7316_H_ 11 11 12 12 #include <linux/types.h> 13 + #include <linux/pm.h> 13 14 14 15 #define ADT7316_REG_MAX_ADDR 0x3F 15 16 ··· 24 23 int (*multi_write) (void *client, u8 first_reg, u8 count, u8 *data); 25 24 }; 26 25 27 - #ifdef CONFIG_PM 28 - int adt7316_disable(struct device *dev); 29 - int adt7316_enable(struct device *dev); 26 + #ifdef CONFIG_PM_SLEEP 27 + extern const struct dev_pm_ops adt7316_pm_ops; 28 + #define ADT7316_PM_OPS (&adt7316_pm_ops) 29 + #else 30 + #define ADT7316_PM_OPS NULL 30 31 #endif 31 32 int adt7316_probe(struct device *dev, struct adt7316_bus *bus, const char *name); 32 33 int adt7316_remove(struct device *dev);
+12 -6
drivers/staging/iio/dac/max517.c
··· 179 179 .attrs = max518_attributes, 180 180 }; 181 181 182 - static int max517_suspend(struct i2c_client *client, pm_message_t mesg) 182 + #ifdef CONFIG_PM_SLEEP 183 + static int max517_suspend(struct device *dev) 183 184 { 184 185 u8 outbuf = COMMAND_PD; 185 186 186 - return i2c_master_send(client, &outbuf, 1); 187 + return i2c_master_send(to_i2c_client(dev), &outbuf, 1); 187 188 } 188 189 189 - static int max517_resume(struct i2c_client *client) 190 + static int max517_resume(struct device *dev) 190 191 { 191 192 u8 outbuf = 0; 192 193 193 - return i2c_master_send(client, &outbuf, 1); 194 + return i2c_master_send(to_i2c_client(dev), &outbuf, 1); 194 195 } 196 + 197 + static SIMPLE_DEV_PM_OPS(max517_pm_ops, max517_suspend, max517_resume); 198 + #define MAX517_PM_OPS (&max517_pm_ops) 199 + #else 200 + #define MAX517_PM_OPS NULL 201 + #endif 195 202 196 203 static const struct iio_info max517_info = { 197 204 .attrs = &max517_attribute_group, ··· 280 273 static struct i2c_driver max517_driver = { 281 274 .driver = { 282 275 .name = MAX517_DRV_NAME, 276 + .pm = MAX517_PM_OPS, 283 277 }, 284 278 .probe = max517_probe, 285 279 .remove = max517_remove, 286 - .suspend = max517_suspend, 287 - .resume = max517_resume, 288 280 .id_table = max517_id, 289 281 }; 290 282 module_i2c_driver(max517_driver);
+16 -10
drivers/staging/iio/light/tsl2563.c
··· 118 118 struct delayed_work poweroff_work; 119 119 120 120 /* Remember state for suspend and resume functions */ 121 - pm_message_t state; 121 + bool suspended; 122 122 123 123 struct tsl2563_gainlevel_coeff const *gainlevel; 124 124 ··· 315 315 int retry = 1; 316 316 int ret = 0; 317 317 318 - if (chip->state.event != PM_EVENT_ON) 318 + if (chip->suspended) 319 319 goto out; 320 320 321 321 if (!chip->int_enabled) { ··· 810 810 return 0; 811 811 } 812 812 813 - static int tsl2563_suspend(struct i2c_client *client, pm_message_t state) 813 + #ifdef CONFIG_PM_SLEEP 814 + static int tsl2563_suspend(struct device *dev) 814 815 { 815 - struct tsl2563_chip *chip = i2c_get_clientdata(client); 816 + struct tsl2563_chip *chip = i2c_get_clientdata(to_i2c_client(dev)); 816 817 int ret; 817 818 818 819 mutex_lock(&chip->lock); ··· 822 821 if (ret) 823 822 goto out; 824 823 825 - chip->state = state; 824 + chip->suspended = true; 826 825 827 826 out: 828 827 mutex_unlock(&chip->lock); 829 828 return ret; 830 829 } 831 830 832 - static int tsl2563_resume(struct i2c_client *client) 831 + static int tsl2563_resume(struct device *dev) 833 832 { 834 - struct tsl2563_chip *chip = i2c_get_clientdata(client); 833 + struct tsl2563_chip *chip = i2c_get_clientdata(to_i2c_client(dev)); 835 834 int ret; 836 835 837 836 mutex_lock(&chip->lock); ··· 844 843 if (ret) 845 844 goto out; 846 845 847 - chip->state.event = PM_EVENT_ON; 846 + chip->suspended = false; 848 847 849 848 out: 850 849 mutex_unlock(&chip->lock); 851 850 return ret; 852 851 } 852 + 853 + static SIMPLE_DEV_PM_OPS(tsl2563_pm_ops, tsl2563_suspend, tsl2563_resume); 854 + #define TSL2563_PM_OPS (&tsl2563_pm_ops) 855 + #else 856 + #define TSL2563_PM_OPS NULL 857 + #endif 853 858 854 859 static const struct i2c_device_id tsl2563_id[] = { 855 860 { "tsl2560", 0 }, ··· 869 862 static struct i2c_driver tsl2563_i2c_driver = { 870 863 .driver = { 871 864 .name = "tsl2563", 865 + .pm = TSL2563_PM_OPS, 872 866 }, 873 - .suspend = tsl2563_suspend, 874 - .resume = tsl2563_resume, 875 867 .probe = tsl2563_probe, 876 868 .remove = __devexit_p(tsl2563_remove), 877 869 .id_table = tsl2563_id,
+11 -6
drivers/staging/iio/light/tsl2583.c
··· 884 884 return ret; 885 885 } 886 886 887 - static int taos_suspend(struct i2c_client *client, pm_message_t state) 887 + #ifdef CONFIG_PM_SLEEP 888 + static int taos_suspend(struct device *dev) 888 889 { 889 - struct iio_dev *indio_dev = i2c_get_clientdata(client); 890 + struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); 890 891 struct tsl2583_chip *chip = iio_priv(indio_dev); 891 892 int ret = 0; 892 893 ··· 902 901 return ret; 903 902 } 904 903 905 - static int taos_resume(struct i2c_client *client) 904 + static int taos_resume(struct device *dev) 906 905 { 907 - struct iio_dev *indio_dev = i2c_get_clientdata(client); 906 + struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); 908 907 struct tsl2583_chip *chip = iio_priv(indio_dev); 909 908 int ret = 0; 910 909 ··· 917 916 return ret; 918 917 } 919 918 919 + static SIMPLE_DEV_PM_OPS(taos_pm_ops, taos_suspend, taos_resume); 920 + #define TAOS_PM_OPS (&taos_pm_ops) 921 + #else 922 + #define TAOS_PM_OPS NULL 923 + #endif 920 924 921 925 static int __devexit taos_remove(struct i2c_client *client) 922 926 { ··· 943 937 static struct i2c_driver taos_driver = { 944 938 .driver = { 945 939 .name = "tsl2583", 940 + .pm = TAOS_PM_OPS, 946 941 }, 947 942 .id_table = taos_idtable, 948 - .suspend = taos_suspend, 949 - .resume = taos_resume, 950 943 .probe = taos_probe, 951 944 .remove = __devexit_p(taos_remove), 952 945 };
+13 -7
drivers/staging/iio/magnetometer/hmc5843.c
··· 588 588 return 0; 589 589 } 590 590 591 - static int hmc5843_suspend(struct i2c_client *client, pm_message_t mesg) 591 + #ifdef CONFIG_PM_SLEEP 592 + static int hmc5843_suspend(struct device *dev) 592 593 { 593 - hmc5843_configure(client, MODE_SLEEP); 594 + hmc5843_configure(to_i2c_client(dev), MODE_SLEEP); 594 595 return 0; 595 596 } 596 597 597 - static int hmc5843_resume(struct i2c_client *client) 598 + static int hmc5843_resume(struct device *dev) 598 599 { 599 - struct hmc5843_data *data = i2c_get_clientdata(client); 600 - hmc5843_configure(client, data->operating_mode); 600 + struct hmc5843_data *data = i2c_get_clientdata(to_i2c_client(dev)); 601 + hmc5843_configure(to_i2c_client(dev), data->operating_mode); 601 602 return 0; 602 603 } 604 + 605 + static SIMPLE_DEV_PM_OPS(hmc5843_pm_ops, hmc5843_suspend, hmc5843_resume); 606 + #define HMC5843_PM_OPS (&hmc5843_pm_ops) 607 + #else 608 + #define HMC5843_PM_OPS NULL 609 + #endif 603 610 604 611 static const struct i2c_device_id hmc5843_id[] = { 605 612 { "hmc5843", 0 }, ··· 617 610 static struct i2c_driver hmc5843_driver = { 618 611 .driver = { 619 612 .name = "hmc5843", 613 + .pm = HMC5843_PM_OPS, 620 614 }, 621 615 .id_table = hmc5843_id, 622 616 .probe = hmc5843_probe, 623 617 .remove = hmc5843_remove, 624 618 .detect = hmc5843_detect, 625 619 .address_list = normal_i2c, 626 - .suspend = hmc5843_suspend, 627 - .resume = hmc5843_resume, 628 620 }; 629 621 module_i2c_driver(hmc5843_driver); 630 622