From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from saturn.retrosnub.co.uk ([178.18.118.26]:47082 "EHLO saturn.retrosnub.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759142AbdENPx1 (ORCPT ); Sun, 14 May 2017 11:53:27 -0400 Subject: Re: [PATCH v2] iio: humidity: hts221: add power management support To: Lorenzo Bianconi Cc: linux-iio@vger.kernel.org, masneyb@onstation.org, lorenzo.bianconi@st.com References: <20170514154544.9603-1-lorenzo.bianconi@st.com> From: Jonathan Cameron Message-ID: <599e1e88-73f6-5d82-86be-f7cfa0079721@kernel.org> Date: Sun, 14 May 2017 16:53:25 +0100 MIME-Version: 1.0 In-Reply-To: <20170514154544.9603-1-lorenzo.bianconi@st.com> Content-Type: text/plain; charset=utf-8; format=flowed Sender: linux-iio-owner@vger.kernel.org List-Id: linux-iio@vger.kernel.org On 14/05/17 16:45, Lorenzo Bianconi wrote: > Add system sleep power management support to hts221 driver > > Signed-off-by: Lorenzo Bianconi Given the chance is so minor, I can't see any reason not to pick this up immediately. Applied to the togreg branch of iio.git and pushed out as testing for the autobuilders to play with it. Thanks, Jonathan > --- > Changes since v1: > - substitute ifdef CONFIG_PM with __maybe_unused macro > --- > drivers/iio/humidity/hts221.h | 3 +++ > drivers/iio/humidity/hts221_core.c | 54 +++++++++++++++++++++++++++++++++++--- > drivers/iio/humidity/hts221_i2c.c | 1 + > drivers/iio/humidity/hts221_spi.c | 1 + > 4 files changed, 55 insertions(+), 4 deletions(-) > > diff --git a/drivers/iio/humidity/hts221.h b/drivers/iio/humidity/hts221.h > index c7154665512e..94510266e0a5 100644 > --- a/drivers/iio/humidity/hts221.h > +++ b/drivers/iio/humidity/hts221.h > @@ -57,12 +57,15 @@ struct hts221_hw { > > struct hts221_sensor sensors[HTS221_SENSOR_MAX]; > > + bool enabled; > u8 odr; > > const struct hts221_transfer_function *tf; > struct hts221_transfer_buffer tb; > }; > > +extern const struct dev_pm_ops hts221_pm_ops; > + > int hts221_config_drdy(struct hts221_hw *hw, bool enable); > int hts221_probe(struct iio_dev *iio_dev); > int hts221_power_on(struct hts221_hw *hw); > diff --git a/drivers/iio/humidity/hts221_core.c b/drivers/iio/humidity/hts221_core.c > index 3f3ef4a1a474..a56da3999e00 100644 > --- a/drivers/iio/humidity/hts221_core.c > +++ b/drivers/iio/humidity/hts221_core.c > @@ -13,6 +13,7 @@ > #include > #include > #include > +#include > #include > > #include "hts221.h" > @@ -307,15 +308,30 @@ hts221_sysfs_temp_oversampling_avail(struct device *dev, > > int hts221_power_on(struct hts221_hw *hw) > { > - return hts221_update_odr(hw, hw->odr); > + int err; > + > + err = hts221_update_odr(hw, hw->odr); > + if (err < 0) > + return err; > + > + hw->enabled = true; > + > + return 0; > } > > int hts221_power_off(struct hts221_hw *hw) > { > - u8 data[] = {0x00, 0x00}; > + __le16 data = 0; > + int err; > > - return hw->tf->write(hw->dev, HTS221_REG_CNTRL1_ADDR, sizeof(data), > - data); > + err = hw->tf->write(hw->dev, HTS221_REG_CNTRL1_ADDR, sizeof(data), > + (u8 *)&data); > + if (err < 0) > + return err; > + > + hw->enabled = false; > + > + return 0; > } > > static int hts221_parse_temp_caldata(struct hts221_hw *hw) > @@ -682,6 +698,36 @@ int hts221_probe(struct iio_dev *iio_dev) > } > EXPORT_SYMBOL(hts221_probe); > > +static int __maybe_unused hts221_suspend(struct device *dev) > +{ > + struct iio_dev *iio_dev = dev_get_drvdata(dev); > + struct hts221_hw *hw = iio_priv(iio_dev); > + __le16 data = 0; > + int err; > + > + err = hw->tf->write(hw->dev, HTS221_REG_CNTRL1_ADDR, sizeof(data), > + (u8 *)&data); > + > + return err < 0 ? err : 0; > +} > + > +static int __maybe_unused hts221_resume(struct device *dev) > +{ > + struct iio_dev *iio_dev = dev_get_drvdata(dev); > + struct hts221_hw *hw = iio_priv(iio_dev); > + int err = 0; > + > + if (hw->enabled) > + err = hts221_update_odr(hw, hw->odr); > + > + return err; > +} > + > +const struct dev_pm_ops hts221_pm_ops = { > + SET_SYSTEM_SLEEP_PM_OPS(hts221_suspend, hts221_resume) > +}; > +EXPORT_SYMBOL(hts221_pm_ops); > + > MODULE_AUTHOR("Lorenzo Bianconi "); > MODULE_DESCRIPTION("STMicroelectronics hts221 sensor driver"); > MODULE_LICENSE("GPL v2"); > diff --git a/drivers/iio/humidity/hts221_i2c.c b/drivers/iio/humidity/hts221_i2c.c > index 8333c0296c0e..f38e4b7e0160 100644 > --- a/drivers/iio/humidity/hts221_i2c.c > +++ b/drivers/iio/humidity/hts221_i2c.c > @@ -105,6 +105,7 @@ MODULE_DEVICE_TABLE(i2c, hts221_i2c_id_table); > static struct i2c_driver hts221_driver = { > .driver = { > .name = "hts221_i2c", > + .pm = &hts221_pm_ops, > .of_match_table = of_match_ptr(hts221_i2c_of_match), > .acpi_match_table = ACPI_PTR(hts221_acpi_match), > }, > diff --git a/drivers/iio/humidity/hts221_spi.c b/drivers/iio/humidity/hts221_spi.c > index 70df5e7150c1..57cbc256771b 100644 > --- a/drivers/iio/humidity/hts221_spi.c > +++ b/drivers/iio/humidity/hts221_spi.c > @@ -113,6 +113,7 @@ MODULE_DEVICE_TABLE(spi, hts221_spi_id_table); > static struct spi_driver hts221_driver = { > .driver = { > .name = "hts221_spi", > + .pm = &hts221_pm_ops, > .of_match_table = of_match_ptr(hts221_spi_of_match), > }, > .probe = hts221_spi_probe, >