From: Jonathan Cameron <jic23@kernel.org>
To: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Cc: linux-iio@vger.kernel.org
Subject: Re: [PATCH 09/16] iio: hid-sensors: Add API to power on/off
Date: Sat, 03 May 2014 20:38:32 +0100 [thread overview]
Message-ID: <536545B8.9090101@kernel.org> (raw)
In-Reply-To: <1397863356-2470-9-git-send-email-srinivas.pandruvada@linux.intel.com>
On 19/04/14 00:22, Srinivas Pandruvada wrote:
> Added an API to allow client drivers to turn ON and OFF sensors for
> quick read. Added data_read as counting varaible instead of boolean,
> so that sensor is powered off only when last user released it.
>
> Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Applied to the togreg branch of iio.git
Thanks,
> ---
> drivers/iio/accel/hid-sensor-accel-3d.c | 7 +++----
> drivers/iio/common/hid-sensors/hid-sensor-trigger.c | 17 +++++++++++++----
> drivers/iio/common/hid-sensors/hid-sensor-trigger.h | 1 +
> drivers/iio/gyro/hid-sensor-gyro-3d.c | 7 +++----
> drivers/iio/light/hid-sensor-als.c | 7 +++----
> drivers/iio/light/hid-sensor-prox.c | 7 +++----
> drivers/iio/magnetometer/hid-sensor-magn-3d.c | 7 +++----
> drivers/iio/orientation/hid-sensor-incl-3d.c | 7 +++----
> drivers/iio/orientation/hid-sensor-rotation.c | 8 +++-----
> drivers/iio/pressure/hid-sensor-press.c | 7 +++----
> include/linux/hid-sensor-hub.h | 2 +-
> 11 files changed, 39 insertions(+), 38 deletions(-)
>
> diff --git a/drivers/iio/accel/hid-sensor-accel-3d.c b/drivers/iio/accel/hid-sensor-accel-3d.c
> index ca50a91..cf61c87 100644
> --- a/drivers/iio/accel/hid-sensor-accel-3d.c
> +++ b/drivers/iio/accel/hid-sensor-accel-3d.c
> @@ -201,9 +201,8 @@ static int accel_3d_proc_event(struct hid_sensor_hub_device *hsdev,
> struct iio_dev *indio_dev = platform_get_drvdata(priv);
> struct accel_3d_state *accel_state = iio_priv(indio_dev);
>
> - dev_dbg(&indio_dev->dev, "accel_3d_proc_event [%d]\n",
> - accel_state->common_attributes.data_ready);
> - if (accel_state->common_attributes.data_ready)
> + dev_dbg(&indio_dev->dev, "accel_3d_proc_event\n");
> + if (atomic_read(&accel_state->common_attributes.data_ready))
> hid_sensor_push_data(indio_dev,
> accel_state->accel_val,
> sizeof(accel_state->accel_val));
> @@ -342,7 +341,7 @@ static int hid_accel_3d_probe(struct platform_device *pdev)
> dev_err(&pdev->dev, "failed to initialize trigger buffer\n");
> goto error_free_dev_mem;
> }
> - accel_state->common_attributes.data_ready = false;
> + atomic_set(&accel_state->common_attributes.data_ready, 0);
> ret = hid_sensor_setup_trigger(indio_dev, name,
> &accel_state->common_attributes);
> if (ret < 0) {
> diff --git a/drivers/iio/common/hid-sensors/hid-sensor-trigger.c b/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
> index dbefbda..73282ce 100644
> --- a/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
> +++ b/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
> @@ -28,16 +28,17 @@
> #include <linux/iio/sysfs.h>
> #include "hid-sensor-trigger.h"
>
> -static int hid_sensor_data_rdy_trigger_set_state(struct iio_trigger *trig,
> - bool state)
> +int hid_sensor_power_state(struct hid_sensor_common *st, bool state)
> {
> - struct hid_sensor_common *st = iio_trigger_get_drvdata(trig);
> int state_val;
> int report_val;
>
> if (state) {
> if (sensor_hub_device_open(st->hsdev))
> return -EIO;
> +
> + atomic_inc(&st->data_ready);
> +
> state_val = hid_sensor_get_usage_index(st->hsdev,
> st->power_state.report_id,
> st->power_state.index,
> @@ -47,6 +48,8 @@ static int hid_sensor_data_rdy_trigger_set_state(struct iio_trigger *trig,
> st->report_state.index,
> HID_USAGE_SENSOR_PROP_REPORTING_STATE_ALL_EVENTS_ENUM);
> } else {
> + if (!atomic_dec_and_test(&st->data_ready))
> + return 0;
> sensor_hub_device_close(st->hsdev);
> state_val = hid_sensor_get_usage_index(st->hsdev,
> st->power_state.report_id,
> @@ -57,7 +60,6 @@ static int hid_sensor_data_rdy_trigger_set_state(struct iio_trigger *trig,
> st->report_state.index,
> HID_USAGE_SENSOR_PROP_REPORTING_STATE_NO_EVENTS_ENUM);
> }
> - st->data_ready = state;
>
> if (state_val >= 0) {
> state_val += st->power_state.logical_minimum;
> @@ -75,6 +77,13 @@ static int hid_sensor_data_rdy_trigger_set_state(struct iio_trigger *trig,
>
> return 0;
> }
> +EXPORT_SYMBOL(hid_sensor_power_state);
> +
> +static int hid_sensor_data_rdy_trigger_set_state(struct iio_trigger *trig,
> + bool state)
> +{
> + return hid_sensor_power_state(iio_trigger_get_drvdata(trig), state);
> +}
>
> void hid_sensor_remove_trigger(struct hid_sensor_common *attrb)
> {
> diff --git a/drivers/iio/common/hid-sensors/hid-sensor-trigger.h b/drivers/iio/common/hid-sensors/hid-sensor-trigger.h
> index ca02f78..0f8e78c 100644
> --- a/drivers/iio/common/hid-sensors/hid-sensor-trigger.h
> +++ b/drivers/iio/common/hid-sensors/hid-sensor-trigger.h
> @@ -22,5 +22,6 @@
> int hid_sensor_setup_trigger(struct iio_dev *indio_dev, const char *name,
> struct hid_sensor_common *attrb);
> void hid_sensor_remove_trigger(struct hid_sensor_common *attrb);
> +int hid_sensor_power_state(struct hid_sensor_common *st, bool state);
>
> #endif
> diff --git a/drivers/iio/gyro/hid-sensor-gyro-3d.c b/drivers/iio/gyro/hid-sensor-gyro-3d.c
> index 53ac060..392c30b 100644
> --- a/drivers/iio/gyro/hid-sensor-gyro-3d.c
> +++ b/drivers/iio/gyro/hid-sensor-gyro-3d.c
> @@ -201,9 +201,8 @@ static int gyro_3d_proc_event(struct hid_sensor_hub_device *hsdev,
> struct iio_dev *indio_dev = platform_get_drvdata(priv);
> struct gyro_3d_state *gyro_state = iio_priv(indio_dev);
>
> - dev_dbg(&indio_dev->dev, "gyro_3d_proc_event [%d]\n",
> - gyro_state->common_attributes.data_ready);
> - if (gyro_state->common_attributes.data_ready)
> + dev_dbg(&indio_dev->dev, "gyro_3d_proc_event\n");
> + if (atomic_read(&gyro_state->common_attributes.data_ready))
> hid_sensor_push_data(indio_dev,
> gyro_state->gyro_val,
> sizeof(gyro_state->gyro_val));
> @@ -339,7 +338,7 @@ static int hid_gyro_3d_probe(struct platform_device *pdev)
> dev_err(&pdev->dev, "failed to initialize trigger buffer\n");
> goto error_free_dev_mem;
> }
> - gyro_state->common_attributes.data_ready = false;
> + atomic_set(&gyro_state->common_attributes.data_ready, 0);
> ret = hid_sensor_setup_trigger(indio_dev, name,
> &gyro_state->common_attributes);
> if (ret < 0) {
> diff --git a/drivers/iio/light/hid-sensor-als.c b/drivers/iio/light/hid-sensor-als.c
> index 39b50be..e124b39 100644
> --- a/drivers/iio/light/hid-sensor-als.c
> +++ b/drivers/iio/light/hid-sensor-als.c
> @@ -180,9 +180,8 @@ static int als_proc_event(struct hid_sensor_hub_device *hsdev,
> struct iio_dev *indio_dev = platform_get_drvdata(priv);
> struct als_state *als_state = iio_priv(indio_dev);
>
> - dev_dbg(&indio_dev->dev, "als_proc_event [%d]\n",
> - als_state->common_attributes.data_ready);
> - if (als_state->common_attributes.data_ready)
> + dev_dbg(&indio_dev->dev, "als_proc_event\n");
> + if (atomic_read(&als_state->common_attributes.data_ready))
> hid_sensor_push_data(indio_dev,
> &als_state->illum,
> sizeof(als_state->illum));
> @@ -305,7 +304,7 @@ static int hid_als_probe(struct platform_device *pdev)
> dev_err(&pdev->dev, "failed to initialize trigger buffer\n");
> goto error_free_dev_mem;
> }
> - als_state->common_attributes.data_ready = false;
> + atomic_set(&als_state->common_attributes.data_ready, 0);
> ret = hid_sensor_setup_trigger(indio_dev, name,
> &als_state->common_attributes);
> if (ret < 0) {
> diff --git a/drivers/iio/light/hid-sensor-prox.c b/drivers/iio/light/hid-sensor-prox.c
> index 1894ab1..07e98ec8 100644
> --- a/drivers/iio/light/hid-sensor-prox.c
> +++ b/drivers/iio/light/hid-sensor-prox.c
> @@ -176,9 +176,8 @@ static int prox_proc_event(struct hid_sensor_hub_device *hsdev,
> struct iio_dev *indio_dev = platform_get_drvdata(priv);
> struct prox_state *prox_state = iio_priv(indio_dev);
>
> - dev_dbg(&indio_dev->dev, "prox_proc_event [%d]\n",
> - prox_state->common_attributes.data_ready);
> - if (prox_state->common_attributes.data_ready)
> + dev_dbg(&indio_dev->dev, "prox_proc_event\n");
> + if (atomic_read(&prox_state->common_attributes.data_ready))
> hid_sensor_push_data(indio_dev,
> &prox_state->human_presence,
> sizeof(prox_state->human_presence));
> @@ -297,7 +296,7 @@ static int hid_prox_probe(struct platform_device *pdev)
> dev_err(&pdev->dev, "failed to initialize trigger buffer\n");
> goto error_free_dev_mem;
> }
> - prox_state->common_attributes.data_ready = false;
> + atomic_set(&prox_state->common_attributes.data_ready, 0);
> ret = hid_sensor_setup_trigger(indio_dev, name,
> &prox_state->common_attributes);
> if (ret) {
> diff --git a/drivers/iio/magnetometer/hid-sensor-magn-3d.c b/drivers/iio/magnetometer/hid-sensor-magn-3d.c
> index 131ced0..54eea6a 100644
> --- a/drivers/iio/magnetometer/hid-sensor-magn-3d.c
> +++ b/drivers/iio/magnetometer/hid-sensor-magn-3d.c
> @@ -202,9 +202,8 @@ static int magn_3d_proc_event(struct hid_sensor_hub_device *hsdev,
> struct iio_dev *indio_dev = platform_get_drvdata(priv);
> struct magn_3d_state *magn_state = iio_priv(indio_dev);
>
> - dev_dbg(&indio_dev->dev, "magn_3d_proc_event [%d]\n",
> - magn_state->common_attributes.data_ready);
> - if (magn_state->common_attributes.data_ready)
> + dev_dbg(&indio_dev->dev, "magn_3d_proc_event\n");
> + if (atomic_read(&magn_state->common_attributes.data_ready))
> hid_sensor_push_data(indio_dev,
> magn_state->magn_val,
> sizeof(magn_state->magn_val));
> @@ -343,7 +342,7 @@ static int hid_magn_3d_probe(struct platform_device *pdev)
> dev_err(&pdev->dev, "failed to initialize trigger buffer\n");
> goto error_free_dev_mem;
> }
> - magn_state->common_attributes.data_ready = false;
> + atomic_set(&magn_state->common_attributes.data_ready, 0);
> ret = hid_sensor_setup_trigger(indio_dev, name,
> &magn_state->common_attributes);
> if (ret < 0) {
> diff --git a/drivers/iio/orientation/hid-sensor-incl-3d.c b/drivers/iio/orientation/hid-sensor-incl-3d.c
> index f0c465c..bf11678 100644
> --- a/drivers/iio/orientation/hid-sensor-incl-3d.c
> +++ b/drivers/iio/orientation/hid-sensor-incl-3d.c
> @@ -200,9 +200,8 @@ static int incl_3d_proc_event(struct hid_sensor_hub_device *hsdev,
> struct iio_dev *indio_dev = platform_get_drvdata(priv);
> struct incl_3d_state *incl_state = iio_priv(indio_dev);
>
> - dev_dbg(&indio_dev->dev, "incl_3d_proc_event [%d]\n",
> - incl_state->common_attributes.data_ready);
> - if (incl_state->common_attributes.data_ready)
> + dev_dbg(&indio_dev->dev, "incl_3d_proc_event\n");
> + if (atomic_read(&incl_state->common_attributes.data_ready))
> hid_sensor_push_data(indio_dev,
> (u8 *)incl_state->incl_val,
> sizeof(incl_state->incl_val));
> @@ -358,7 +357,7 @@ static int hid_incl_3d_probe(struct platform_device *pdev)
> dev_err(&pdev->dev, "failed to initialize trigger buffer\n");
> goto error_free_dev_mem;
> }
> - incl_state->common_attributes.data_ready = false;
> + atomic_set(&incl_state->common_attributes.data_ready, 0);
> ret = hid_sensor_setup_trigger(indio_dev, name,
> &incl_state->common_attributes);
> if (ret) {
> diff --git a/drivers/iio/orientation/hid-sensor-rotation.c b/drivers/iio/orientation/hid-sensor-rotation.c
> index 51387bb..dccf848 100644
> --- a/drivers/iio/orientation/hid-sensor-rotation.c
> +++ b/drivers/iio/orientation/hid-sensor-rotation.c
> @@ -145,10 +145,8 @@ static int dev_rot_proc_event(struct hid_sensor_hub_device *hsdev,
> struct iio_dev *indio_dev = platform_get_drvdata(priv);
> struct dev_rot_state *rot_state = iio_priv(indio_dev);
>
> - dev_dbg(&indio_dev->dev, "dev_rot_proc_event [%d]\n",
> - rot_state->common_attributes.data_ready);
> -
> - if (rot_state->common_attributes.data_ready)
> + dev_dbg(&indio_dev->dev, "dev_rot_proc_event\n");
> + if (atomic_read(&rot_state->common_attributes.data_ready))
> hid_sensor_push_data(indio_dev,
> (u8 *)rot_state->sampled_vals,
> sizeof(rot_state->sampled_vals));
> @@ -272,7 +270,7 @@ static int hid_dev_rot_probe(struct platform_device *pdev)
> dev_err(&pdev->dev, "failed to initialize trigger buffer\n");
> return ret;
> }
> - rot_state->common_attributes.data_ready = false;
> + atomic_set(&rot_state->common_attributes.data_ready, 0);
> ret = hid_sensor_setup_trigger(indio_dev, name,
> &rot_state->common_attributes);
> if (ret) {
> diff --git a/drivers/iio/pressure/hid-sensor-press.c b/drivers/iio/pressure/hid-sensor-press.c
> index ff69da4..39df50c 100644
> --- a/drivers/iio/pressure/hid-sensor-press.c
> +++ b/drivers/iio/pressure/hid-sensor-press.c
> @@ -180,9 +180,8 @@ static int press_proc_event(struct hid_sensor_hub_device *hsdev,
> struct iio_dev *indio_dev = platform_get_drvdata(priv);
> struct press_state *press_state = iio_priv(indio_dev);
>
> - dev_dbg(&indio_dev->dev, "press_proc_event [%d]\n",
> - press_state->common_attributes.data_ready);
> - if (press_state->common_attributes.data_ready)
> + dev_dbg(&indio_dev->dev, "press_proc_event\n");
> + if (atomic_read(&press_state->common_attributes.data_ready))
> hid_sensor_push_data(indio_dev,
> &press_state->press_data,
> sizeof(press_state->press_data));
> @@ -307,7 +306,7 @@ static int hid_press_probe(struct platform_device *pdev)
> dev_err(&pdev->dev, "failed to initialize trigger buffer\n");
> goto error_free_dev_mem;
> }
> - press_state->common_attributes.data_ready = false;
> + atomic_set(&press_state->common_attributes.data_ready, 0);
> ret = hid_sensor_setup_trigger(indio_dev, name,
> &press_state->common_attributes);
> if (ret) {
> diff --git a/include/linux/hid-sensor-hub.h b/include/linux/hid-sensor-hub.h
> index 88d8d63..51f7cca 100644
> --- a/include/linux/hid-sensor-hub.h
> +++ b/include/linux/hid-sensor-hub.h
> @@ -189,7 +189,7 @@ struct hid_sensor_common {
> struct hid_sensor_hub_device *hsdev;
> struct platform_device *pdev;
> unsigned usage_id;
> - bool data_ready;
> + atomic_t data_ready;
> struct iio_trigger *trigger;
> struct hid_sensor_hub_attribute_info poll;
> struct hid_sensor_hub_attribute_info report_state;
>
next prev parent reply other threads:[~2014-05-03 19:36 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-18 23:22 [PATCH 01/16] iio: hid-sensors: Convert units and exponent Srinivas Pandruvada
2014-04-18 23:22 ` [PATCH 02/16] iio: hid-sensors: Add api to get poll value Srinivas Pandruvada
2014-05-03 19:34 ` Jonathan Cameron
2014-04-18 23:22 ` [PATCH 03/16] iio: hid-sensors: Accelerometer 3D: adjust scale and offset Srinivas Pandruvada
2014-05-03 19:35 ` Jonathan Cameron
2014-04-18 23:22 ` [PATCH 04/16] iio: hid-sensors: Gyro 3D : " Srinivas Pandruvada
2014-05-03 19:35 ` Jonathan Cameron
2014-04-18 23:22 ` [PATCH 05/16] iio: hid-sensors: ALS: " Srinivas Pandruvada
2014-05-03 19:36 ` Jonathan Cameron
2014-04-18 23:22 ` [PATCH 06/16] iio: hid-sensors: Compass 3D: " Srinivas Pandruvada
2014-05-03 19:36 ` Jonathan Cameron
2014-04-18 23:22 ` [PATCH 07/16] iio: hid-sensors: Inclinometer " Srinivas Pandruvada
2014-05-03 19:37 ` Jonathan Cameron
2014-04-18 23:22 ` [PATCH 08/16] iio: hid-sensors: Pressure: " Srinivas Pandruvada
2014-05-03 19:37 ` Jonathan Cameron
2014-04-18 23:22 ` [PATCH 09/16] iio: hid-sensors: Add API to power on/off Srinivas Pandruvada
2014-05-03 19:38 ` Jonathan Cameron [this message]
2014-04-18 23:22 ` [PATCH 10/16] iio: hid-sensors: Accelerometer 3D: Raw read support Srinivas Pandruvada
2014-05-03 19:38 ` Jonathan Cameron
2014-04-18 23:22 ` [PATCH 11/16] iio: hid-sensors: Gyro " Srinivas Pandruvada
2014-05-03 19:39 ` Jonathan Cameron
2014-04-18 23:22 ` [PATCH 12/16] iio: hid-sensors: ALS: " Srinivas Pandruvada
2014-05-03 19:39 ` Jonathan Cameron
2014-04-18 23:22 ` [PATCH 13/16] iio: hid-sensors: Proximity: " Srinivas Pandruvada
2014-05-03 19:40 ` Jonathan Cameron
2014-04-18 23:22 ` [PATCH 14/16] iio: hid-sensors: Compass 3D: " Srinivas Pandruvada
2014-05-03 19:41 ` Jonathan Cameron
2014-04-18 23:22 ` [PATCH 15/16] iio: hid-sensors: Inclinometer " Srinivas Pandruvada
2014-05-03 19:41 ` Jonathan Cameron
2014-04-18 23:22 ` [PATCH 16/16] iio: hid-sensors: Pressure: " Srinivas Pandruvada
2014-04-23 21:03 ` Jonathan Cameron
2014-05-03 19:45 ` Jonathan Cameron
2014-04-23 20:57 ` [PATCH 01/16] iio: hid-sensors: Convert units and exponent Jonathan Cameron
2014-04-23 21:17 ` Srinivas Pandruvada
2014-04-25 18:34 ` Jonathan Cameron
2014-04-25 18:30 ` Jonathan Cameron
2014-04-26 19:34 ` Srinivas Pandruvada
2014-05-03 19:24 ` Jonathan Cameron
2014-05-03 19:32 ` Jonathan Cameron
2014-05-04 14:49 ` Srinivas Pandruvada
[not found] ` <4102328d-88e0-441f-87c9-0b57cbc33ca5@email.android.com>
2014-05-05 1:00 ` Srinivas Pandruvada
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=536545B8.9090101@kernel.org \
--to=jic23@kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=srinivas.pandruvada@linux.intel.com \
/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 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).