All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Heidelberg <david@ixit.cz>
To: "Dmitry Osipenko" <digetx@gmail.com>,
	"Michał Mirosław" <mirq-linux@rere.qmqm.pl>,
	"Daniel Baluta" <daniel.baluta@nxp.com>,
	"Jonathan Cameron" <jic23@kernel.org>,
	"Hartmut Knaack" <knaack.h@gmx.de>,
	"Lars-Peter Clausen" <lars@metafoo.de>,
	"Peter Meerwald-Stadler" <pmeerw@pmeerw.net>,
	"Rob Herring" <robh+dt@kernel.org>,
	"Mark Rutland" <mark.rutland@arm.com>
Cc: David Heidelberg <david@ixit.cz>, linux-iio@vger.kernel.org
Subject: [PATCH v4 5/7] iio: light: al3320a implement suspend support
Date: Tue,  4 Feb 2020 10:30:36 +0100	[thread overview]
Message-ID: <20200204093031.616409-6-david@ixit.cz> (raw)
In-Reply-To: <20200204093031.616409-1-david@ixit.cz>

AL3320a is fairly simple chip, so for suspend is enough to disable and
later enable it again.

Signed-off-by: David Heidelberg <david@ixit.cz>
---
 drivers/iio/light/al3320a.c | 30 +++++++++++++++++++++++++-----
 1 file changed, 25 insertions(+), 5 deletions(-)

diff --git a/drivers/iio/light/al3320a.c b/drivers/iio/light/al3320a.c
index 89b935b4fe9e..affa4c6c199a 100644
--- a/drivers/iio/light/al3320a.c
+++ b/drivers/iio/light/al3320a.c
@@ -7,6 +7,9 @@
  * IIO driver for AL3320A (7-bit I2C slave address 0x1C).
  *
  * TODO: interrupt support, thresholds
+ * When the driver will get support for interrupt handling, then interrupt
+ * will need to be disabled before turning sensor OFF in order to avoid
+ * potential races with the interrupt handling.
  */
 
 #include <linux/bitfield.h>
@@ -78,13 +81,18 @@ static const struct attribute_group al3320a_attribute_group = {
 	.attrs = al3320a_attributes,
 };
 
+static int al3320a_set_pwr(struct i2c_client *client, bool pwr)
+{
+	u8 val = pwr ? AL3320A_CONFIG_ENABLE : AL3320A_CONFIG_DISABLE;
+	return i2c_smbus_write_byte_data(data->client, AL3320A_REG_CONFIG, val);
+}
+
 static int al3320a_init(struct al3320a_data *data)
 {
 	int ret;
 
-	/* power on */
-	ret = i2c_smbus_write_byte_data(data->client, AL3320A_REG_CONFIG,
-					AL3320A_CONFIG_ENABLE);
+	ret = al3320a_set_pwr(data->client, true);
+
 	if (ret < 0)
 		return ret;
 
@@ -203,10 +211,21 @@ static int al3320a_probe(struct i2c_client *client,
 
 static int al3320a_remove(struct i2c_client *client)
 {
-	return i2c_smbus_write_byte_data(client, AL3320A_REG_CONFIG,
-					 AL3320A_CONFIG_DISABLE);
+	return al3320a_set_pwr(client, false);
 }
 
+static int __maybe_unused al3320a_suspend(struct device *dev)
+{
+	return al3320a_set_pwr(to_i2c_client(dev), false);
+}
+
+static int __maybe_unused al3320a_resume(struct device *dev)
+{
+	return al3320a_set_pwr(to_i2c_client(dev), true);
+}
+
+SIMPLE_DEV_PM_OPS(al3320a_pm_ops, al3320a_suspend, al3320a_resume);
+
 static const struct i2c_device_id al3320a_id[] = {
 	{"al3320a", 0},
 	{}
@@ -216,6 +235,7 @@ MODULE_DEVICE_TABLE(i2c, al3320a_id);
 static struct i2c_driver al3320a_driver = {
 	.driver = {
 		.name = AL3320A_DRV_NAME,
+		.pm = &al3320a_pm_ops,
 	},
 	.probe		= al3320a_probe,
 	.remove		= al3320a_remove,
-- 
2.25.0


  parent reply	other threads:[~2020-02-04  9:34 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-02-04  9:30 [PATCH v4 0/7] AL3010 introduction David Heidelberg
2020-02-04  9:30 ` [PATCH v4 1/7] dt-bindings: iio: light: add support for Dyna-Image AL3320A David Heidelberg
2020-02-06 19:07   ` Rob Herring
2020-02-06 21:16     ` David Heidelberg
2020-02-06 21:27       ` Rob Herring
2020-02-06 21:44         ` David Heidelberg
2020-02-04  9:30 ` [PATCH v4 2/7] dt-bindings: iio: light: add support for Dyna-Image AL3010 David Heidelberg
2020-02-04  9:52   ` Michał Mirosław
2020-02-04 15:10     ` Dmitry Osipenko
2020-02-04  9:30 ` [PATCH v4 3/7] iio: light: al3320a slightly improve code formatting David Heidelberg
2020-02-06 11:42   ` Jonathan Cameron
2020-02-06 14:50   ` Dmitry Osipenko
2020-02-06 14:51     ` Dmitry Osipenko
2020-02-04  9:30 ` [PATCH v4 4/7] iio: light: add Dyna-Image AL3010 driver David Heidelberg
2020-02-04 15:17   ` Dmitry Osipenko
2020-02-06 11:48   ` Jonathan Cameron
2020-02-06 14:55     ` Dmitry Osipenko
2020-02-04  9:30 ` David Heidelberg [this message]
2020-02-04  9:30 ` [PATCH v4 6/7] iio: light: al3320a implement devm_add_action_or_reset David Heidelberg
2020-02-04  9:30 ` [PATCH v4 7/7] iio: light: al3320a allow module autoload and polish David Heidelberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200204093031.616409-6-david@ixit.cz \
    --to=david@ixit.cz \
    --cc=daniel.baluta@nxp.com \
    --cc=digetx@gmail.com \
    --cc=jic23@kernel.org \
    --cc=knaack.h@gmx.de \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mirq-linux@rere.qmqm.pl \
    --cc=pmeerw@pmeerw.net \
    --cc=robh+dt@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.