* [PATCH v2 0/4] PM fixes for kxcjk-1013
@ 2014-12-10 16:23 Irina Tirdea
2014-12-10 16:23 ` [PATCH v2 1/4] iio: accel: kxcjk-1013: always power on device in resume Irina Tirdea
` (4 more replies)
0 siblings, 5 replies; 8+ messages in thread
From: Irina Tirdea @ 2014-12-10 16:23 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: linux-kernel, Srinivas Pandruvada, Daniel Baluta, Peter Meerwald,
Irina Tirdea
This is a small set of power manangement fixes for kxcjk-1013 accel driver,
mostly related to error handling.
Jonathan, you mentioned that you applied the first 2 patches from this series
to the togreg branch, but I cannot find them there or on the testing branch.
I have included them in v2, but they are identical to those in the first version.
Changes since v1:
- always set power state to off in case of i2c error (patch 3)
- patches 3 and 4 reviewed by Srinivas
Irina Tirdea (4):
iio: accel: kxcjk-1013: always power on device in resume
iio: accel: kxcjk-1013: only set power state if CONFIG_PM is defined
iio: accel: kxcjk-1013: error handling when set mode fails
iio: accel: kxcjk-1013: power off device if probe fails
drivers/iio/accel/kxcjk-1013.c | 38 +++++++++++++++++++++++++++-----------
1 file changed, 27 insertions(+), 11 deletions(-)
--
1.7.9.5
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 1/4] iio: accel: kxcjk-1013: always power on device in resume
2014-12-10 16:23 [PATCH v2 0/4] PM fixes for kxcjk-1013 Irina Tirdea
@ 2014-12-10 16:23 ` Irina Tirdea
2014-12-10 16:23 ` [PATCH v2 2/4] iio: accel: kxcjk-1013: only set power state if CONFIG_PM is defined Irina Tirdea
` (3 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Irina Tirdea @ 2014-12-10 16:23 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: linux-kernel, Srinivas Pandruvada, Daniel Baluta, Peter Meerwald,
Irina Tirdea
When the system resumes, it will first call system resume and
then runtime suspend (if CONFIG_RUNTIME_PM is enabled).
There is no need to conditionally power on the device in
system resume, so always power it on and leave runtime
suspend to power it off if needed.
Suggested-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Irina Tirdea <irina.tirdea@intel.com>
Reviewed-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
---
drivers/iio/accel/kxcjk-1013.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013.c
index 1720e9a..aed3777 100644
--- a/drivers/iio/accel/kxcjk-1013.c
+++ b/drivers/iio/accel/kxcjk-1013.c
@@ -1354,10 +1354,7 @@ static int kxcjk1013_resume(struct device *dev)
int ret = 0;
mutex_lock(&data->mutex);
- /* Check, if the suspend occured while active */
- if (data->dready_trigger_on || data->motion_trigger_on ||
- data->ev_enable_state)
- ret = kxcjk1013_set_mode(data, OPERATION);
+ ret = kxcjk1013_set_mode(data, OPERATION);
mutex_unlock(&data->mutex);
return ret;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 2/4] iio: accel: kxcjk-1013: only set power state if CONFIG_PM is defined
2014-12-10 16:23 [PATCH v2 0/4] PM fixes for kxcjk-1013 Irina Tirdea
2014-12-10 16:23 ` [PATCH v2 1/4] iio: accel: kxcjk-1013: always power on device in resume Irina Tirdea
@ 2014-12-10 16:23 ` Irina Tirdea
2014-12-10 16:23 ` [PATCH v2 3/4] iio: accel: kxcjk-1013: error handling when set mode fails Irina Tirdea
` (2 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Irina Tirdea @ 2014-12-10 16:23 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: linux-kernel, Srinivas Pandruvada, Daniel Baluta, Peter Meerwald,
Irina Tirdea
When CONFIG_PM is not defined and the driver tries to power off the device,
kxcjk1013_set_power_state will call pm_runtime_put_autosuspend, which is
not implemented (wil return -ENOSYS).
Only call pm_runtime calls to change power state when CONFIG_PM is defined.
Signed-off-by: Irina Tirdea <irina.tirdea@intel.com>
Reviewed-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
---
drivers/iio/accel/kxcjk-1013.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013.c
index aed3777..7b0a9da 100644
--- a/drivers/iio/accel/kxcjk-1013.c
+++ b/drivers/iio/accel/kxcjk-1013.c
@@ -376,6 +376,7 @@ static int kxcjk1013_get_startup_times(struct kxcjk1013_data *data)
static int kxcjk1013_set_power_state(struct kxcjk1013_data *data, bool on)
{
+#ifdef CONFIG_PM
int ret;
if (on)
@@ -389,6 +390,7 @@ static int kxcjk1013_set_power_state(struct kxcjk1013_data *data, bool on)
"Failed: kxcjk1013_set_power_state for %d\n", on);
return ret;
}
+#endif
return 0;
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 3/4] iio: accel: kxcjk-1013: error handling when set mode fails
2014-12-10 16:23 [PATCH v2 0/4] PM fixes for kxcjk-1013 Irina Tirdea
2014-12-10 16:23 ` [PATCH v2 1/4] iio: accel: kxcjk-1013: always power on device in resume Irina Tirdea
2014-12-10 16:23 ` [PATCH v2 2/4] iio: accel: kxcjk-1013: only set power state if CONFIG_PM is defined Irina Tirdea
@ 2014-12-10 16:23 ` Irina Tirdea
2014-12-12 11:22 ` Jonathan Cameron
2014-12-10 16:23 ` [PATCH v2 4/4] iio: accel: kxcjk-1013: power off device if probe fails Irina Tirdea
2014-12-12 11:21 ` [PATCH v2 0/4] PM fixes for kxcjk-1013 Jonathan Cameron
4 siblings, 1 reply; 8+ messages in thread
From: Irina Tirdea @ 2014-12-10 16:23 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: linux-kernel, Srinivas Pandruvada, Daniel Baluta, Peter Meerwald,
Irina Tirdea
If there is an error in set mode at runtime resume, reset the state of
the runtime usage count.
If there is an error in set mode at runtime suspend, make sure the framework
retries to suspend the device.
Signed-off-by: Irina Tirdea <irina.tirdea@intel.com>
Reviewed-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
---
drivers/iio/accel/kxcjk-1013.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013.c
index 7b0a9da..0dc6ccf 100644
--- a/drivers/iio/accel/kxcjk-1013.c
+++ b/drivers/iio/accel/kxcjk-1013.c
@@ -388,6 +388,8 @@ static int kxcjk1013_set_power_state(struct kxcjk1013_data *data, bool on)
if (ret < 0) {
dev_err(&data->client->dev,
"Failed: kxcjk1013_set_power_state for %d\n", on);
+ if (on)
+ pm_runtime_put_noidle(&data->client->dev);
return ret;
}
#endif
@@ -859,6 +861,8 @@ static int kxcjk1013_write_event_config(struct iio_dev *indio_dev,
ret = kxcjk1013_setup_any_motion_interrupt(data, state);
if (ret < 0) {
+ kxcjk1013_set_power_state(data, false);
+ data->ev_enable_state = 0;
mutex_unlock(&data->mutex);
return ret;
}
@@ -1009,6 +1013,7 @@ static int kxcjk1013_data_rdy_trigger_set_state(struct iio_trigger *trig,
else
ret = kxcjk1013_setup_new_data_interrupt(data, state);
if (ret < 0) {
+ kxcjk1013_set_power_state(data, false);
mutex_unlock(&data->mutex);
return ret;
}
@@ -1368,8 +1373,14 @@ static int kxcjk1013_runtime_suspend(struct device *dev)
{
struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
struct kxcjk1013_data *data = iio_priv(indio_dev);
+ int ret;
- return kxcjk1013_set_mode(data, STANDBY);
+ ret = kxcjk1013_set_mode(data, STANDBY);
+ if (ret < 0) {
+ dev_err(&data->client->dev, "powering off device failed\n");
+ return -EAGAIN;
+ }
+ return 0;
}
static int kxcjk1013_runtime_resume(struct device *dev)
--
1.7.9.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 4/4] iio: accel: kxcjk-1013: power off device if probe fails
2014-12-10 16:23 [PATCH v2 0/4] PM fixes for kxcjk-1013 Irina Tirdea
` (2 preceding siblings ...)
2014-12-10 16:23 ` [PATCH v2 3/4] iio: accel: kxcjk-1013: error handling when set mode fails Irina Tirdea
@ 2014-12-10 16:23 ` Irina Tirdea
2014-12-12 11:22 ` Jonathan Cameron
2014-12-12 11:21 ` [PATCH v2 0/4] PM fixes for kxcjk-1013 Jonathan Cameron
4 siblings, 1 reply; 8+ messages in thread
From: Irina Tirdea @ 2014-12-10 16:23 UTC (permalink / raw)
To: Jonathan Cameron, linux-iio
Cc: linux-kernel, Srinivas Pandruvada, Daniel Baluta, Peter Meerwald,
Irina Tirdea
When the device is initialized in probe, it is also powered on.
If there is an error after the initialization, the device will
remain powered on.
Power off the device in case probe fails after device initialization.
Signed-off-by: Irina Tirdea <irina.tirdea@intel.com>
Suggested-by: Daniel Baluta <daniel.baluta@intel.com>
Reviewed-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
---
drivers/iio/accel/kxcjk-1013.c | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013.c
index 0dc6ccf..a5e7d30 100644
--- a/drivers/iio/accel/kxcjk-1013.c
+++ b/drivers/iio/accel/kxcjk-1013.c
@@ -1240,21 +1240,25 @@ static int kxcjk1013_probe(struct i2c_client *client,
KXCJK1013_IRQ_NAME,
indio_dev);
if (ret)
- return ret;
+ goto err_poweroff;
data->dready_trig = devm_iio_trigger_alloc(&client->dev,
"%s-dev%d",
indio_dev->name,
indio_dev->id);
- if (!data->dready_trig)
- return -ENOMEM;
+ if (!data->dready_trig) {
+ ret = -ENOMEM;
+ goto err_poweroff;
+ }
data->motion_trig = devm_iio_trigger_alloc(&client->dev,
"%s-any-motion-dev%d",
indio_dev->name,
indio_dev->id);
- if (!data->motion_trig)
- return -ENOMEM;
+ if (!data->motion_trig) {
+ ret = -ENOMEM;
+ goto err_poweroff;
+ }
data->dready_trig->dev.parent = &client->dev;
data->dready_trig->ops = &kxcjk1013_trigger_ops;
@@ -1263,7 +1267,7 @@ static int kxcjk1013_probe(struct i2c_client *client,
iio_trigger_get(indio_dev->trig);
ret = iio_trigger_register(data->dready_trig);
if (ret)
- return ret;
+ goto err_poweroff;
data->motion_trig->dev.parent = &client->dev;
data->motion_trig->ops = &kxcjk1013_trigger_ops;
@@ -1312,6 +1316,8 @@ err_trigger_unregister:
iio_trigger_unregister(data->dready_trig);
if (data->motion_trig)
iio_trigger_unregister(data->motion_trig);
+err_poweroff:
+ kxcjk1013_set_mode(data, STANDBY);
return ret;
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 0/4] PM fixes for kxcjk-1013
2014-12-10 16:23 [PATCH v2 0/4] PM fixes for kxcjk-1013 Irina Tirdea
` (3 preceding siblings ...)
2014-12-10 16:23 ` [PATCH v2 4/4] iio: accel: kxcjk-1013: power off device if probe fails Irina Tirdea
@ 2014-12-12 11:21 ` Jonathan Cameron
4 siblings, 0 replies; 8+ messages in thread
From: Jonathan Cameron @ 2014-12-12 11:21 UTC (permalink / raw)
To: Irina Tirdea, linux-iio
Cc: linux-kernel, Srinivas Pandruvada, Daniel Baluta, Peter Meerwald
On 10/12/14 16:23, Irina Tirdea wrote:
> This is a small set of power manangement fixes for kxcjk-1013 accel driver,
> mostly related to error handling.
>
> Jonathan, you mentioned that you applied the first 2 patches from this series
> to the togreg branch, but I cannot find them there or on the testing branch.
> I have included them in v2, but they are identical to those in the first version.
Ah. I wrote those emails on a plane an remembered to send the mails later, but
not to push out the tree. Will do that after today's catch up session.
>
> Changes since v1:
> - always set power state to off in case of i2c error (patch 3)
> - patches 3 and 4 reviewed by Srinivas
>
> Irina Tirdea (4):
> iio: accel: kxcjk-1013: always power on device in resume
> iio: accel: kxcjk-1013: only set power state if CONFIG_PM is defined
> iio: accel: kxcjk-1013: error handling when set mode fails
> iio: accel: kxcjk-1013: power off device if probe fails
>
> drivers/iio/accel/kxcjk-1013.c | 38 +++++++++++++++++++++++++++-----------
> 1 file changed, 27 insertions(+), 11 deletions(-)
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 3/4] iio: accel: kxcjk-1013: error handling when set mode fails
2014-12-10 16:23 ` [PATCH v2 3/4] iio: accel: kxcjk-1013: error handling when set mode fails Irina Tirdea
@ 2014-12-12 11:22 ` Jonathan Cameron
0 siblings, 0 replies; 8+ messages in thread
From: Jonathan Cameron @ 2014-12-12 11:22 UTC (permalink / raw)
To: Irina Tirdea, linux-iio
Cc: linux-kernel, Srinivas Pandruvada, Daniel Baluta, Peter Meerwald
On 10/12/14 16:23, Irina Tirdea wrote:
> If there is an error in set mode at runtime resume, reset the state of
> the runtime usage count.
>
> If there is an error in set mode at runtime suspend, make sure the framework
> retries to suspend the device.
>
> Signed-off-by: Irina Tirdea <irina.tirdea@intel.com>
> Reviewed-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Applied to the togreg branch of iio.git - to be pushed out as testing later
today.
Thanks,
Jonathan
> ---
> drivers/iio/accel/kxcjk-1013.c | 13 ++++++++++++-
> 1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013.c
> index 7b0a9da..0dc6ccf 100644
> --- a/drivers/iio/accel/kxcjk-1013.c
> +++ b/drivers/iio/accel/kxcjk-1013.c
> @@ -388,6 +388,8 @@ static int kxcjk1013_set_power_state(struct kxcjk1013_data *data, bool on)
> if (ret < 0) {
> dev_err(&data->client->dev,
> "Failed: kxcjk1013_set_power_state for %d\n", on);
> + if (on)
> + pm_runtime_put_noidle(&data->client->dev);
> return ret;
> }
> #endif
> @@ -859,6 +861,8 @@ static int kxcjk1013_write_event_config(struct iio_dev *indio_dev,
>
> ret = kxcjk1013_setup_any_motion_interrupt(data, state);
> if (ret < 0) {
> + kxcjk1013_set_power_state(data, false);
> + data->ev_enable_state = 0;
> mutex_unlock(&data->mutex);
> return ret;
> }
> @@ -1009,6 +1013,7 @@ static int kxcjk1013_data_rdy_trigger_set_state(struct iio_trigger *trig,
> else
> ret = kxcjk1013_setup_new_data_interrupt(data, state);
> if (ret < 0) {
> + kxcjk1013_set_power_state(data, false);
> mutex_unlock(&data->mutex);
> return ret;
> }
> @@ -1368,8 +1373,14 @@ static int kxcjk1013_runtime_suspend(struct device *dev)
> {
> struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
> struct kxcjk1013_data *data = iio_priv(indio_dev);
> + int ret;
>
> - return kxcjk1013_set_mode(data, STANDBY);
> + ret = kxcjk1013_set_mode(data, STANDBY);
> + if (ret < 0) {
> + dev_err(&data->client->dev, "powering off device failed\n");
> + return -EAGAIN;
> + }
> + return 0;
> }
>
> static int kxcjk1013_runtime_resume(struct device *dev)
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 4/4] iio: accel: kxcjk-1013: power off device if probe fails
2014-12-10 16:23 ` [PATCH v2 4/4] iio: accel: kxcjk-1013: power off device if probe fails Irina Tirdea
@ 2014-12-12 11:22 ` Jonathan Cameron
0 siblings, 0 replies; 8+ messages in thread
From: Jonathan Cameron @ 2014-12-12 11:22 UTC (permalink / raw)
To: Irina Tirdea, linux-iio
Cc: linux-kernel, Srinivas Pandruvada, Daniel Baluta, Peter Meerwald
On 10/12/14 16:23, Irina Tirdea wrote:
> When the device is initialized in probe, it is also powered on.
> If there is an error after the initialization, the device will
> remain powered on.
>
> Power off the device in case probe fails after device initialization.
>
> Signed-off-by: Irina Tirdea <irina.tirdea@intel.com>
> Suggested-by: Daniel Baluta <daniel.baluta@intel.com>
> Reviewed-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Applied to the togreg branch of iio.git - initially pushed out as
testing sometime later today.
Thanks,
Jonathan
> ---
> drivers/iio/accel/kxcjk-1013.c | 18 ++++++++++++------
> 1 file changed, 12 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013.c
> index 0dc6ccf..a5e7d30 100644
> --- a/drivers/iio/accel/kxcjk-1013.c
> +++ b/drivers/iio/accel/kxcjk-1013.c
> @@ -1240,21 +1240,25 @@ static int kxcjk1013_probe(struct i2c_client *client,
> KXCJK1013_IRQ_NAME,
> indio_dev);
> if (ret)
> - return ret;
> + goto err_poweroff;
>
> data->dready_trig = devm_iio_trigger_alloc(&client->dev,
> "%s-dev%d",
> indio_dev->name,
> indio_dev->id);
> - if (!data->dready_trig)
> - return -ENOMEM;
> + if (!data->dready_trig) {
> + ret = -ENOMEM;
> + goto err_poweroff;
> + }
>
> data->motion_trig = devm_iio_trigger_alloc(&client->dev,
> "%s-any-motion-dev%d",
> indio_dev->name,
> indio_dev->id);
> - if (!data->motion_trig)
> - return -ENOMEM;
> + if (!data->motion_trig) {
> + ret = -ENOMEM;
> + goto err_poweroff;
> + }
>
> data->dready_trig->dev.parent = &client->dev;
> data->dready_trig->ops = &kxcjk1013_trigger_ops;
> @@ -1263,7 +1267,7 @@ static int kxcjk1013_probe(struct i2c_client *client,
> iio_trigger_get(indio_dev->trig);
> ret = iio_trigger_register(data->dready_trig);
> if (ret)
> - return ret;
> + goto err_poweroff;
>
> data->motion_trig->dev.parent = &client->dev;
> data->motion_trig->ops = &kxcjk1013_trigger_ops;
> @@ -1312,6 +1316,8 @@ err_trigger_unregister:
> iio_trigger_unregister(data->dready_trig);
> if (data->motion_trig)
> iio_trigger_unregister(data->motion_trig);
> +err_poweroff:
> + kxcjk1013_set_mode(data, STANDBY);
>
> return ret;
> }
>
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2014-12-12 11:22 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-12-10 16:23 [PATCH v2 0/4] PM fixes for kxcjk-1013 Irina Tirdea
2014-12-10 16:23 ` [PATCH v2 1/4] iio: accel: kxcjk-1013: always power on device in resume Irina Tirdea
2014-12-10 16:23 ` [PATCH v2 2/4] iio: accel: kxcjk-1013: only set power state if CONFIG_PM is defined Irina Tirdea
2014-12-10 16:23 ` [PATCH v2 3/4] iio: accel: kxcjk-1013: error handling when set mode fails Irina Tirdea
2014-12-12 11:22 ` Jonathan Cameron
2014-12-10 16:23 ` [PATCH v2 4/4] iio: accel: kxcjk-1013: power off device if probe fails Irina Tirdea
2014-12-12 11:22 ` Jonathan Cameron
2014-12-12 11:21 ` [PATCH v2 0/4] PM fixes for kxcjk-1013 Jonathan Cameron
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).