linux/drivers/iio/common
Hans de Goede 6f92253024 iio: hid-sensor-trigger: Fix sometimes not powering up the sensor after resume
hid_sensor_set_power_work() powers the sensors back up after a resume
based on the user_requested_state atomic_t.

But hid_sensor_power_state() treats this as a boolean flag, leading to
the following problematic scenario:

1) Some app starts using the iio-sensor in buffered / triggered mode,
   hid_sensor_data_rdy_trigger_set_state(true) gets called, setting
   user_requested_state to 1.
2) Something directly accesses a _raw value through sysfs, leading
   to a call to hid_sensor_power_state(true) followed by
   hid_sensor_power_state(false) call, this sets user_requested_state
   to 1 followed by setting it to 0.
3) Suspend/resume the machine, hid_sensor_set_power_work() now does
   NOT power the sensor back up because user_requested_state (wrongly)
   is 0. Which stops the app using the sensor in buffered mode from
   receiving any new values.

This commit changes user_requested_state to a counter tracking how many
times hid_sensor_power_state(true) was called instead, fixing this.

Cc: Bastien Nocera <hadess@hadess.net>
Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
2018-04-21 15:52:35 +01:00
..
cros_ec_sensors iio: cros_ec: Remove unused variables 2017-12-02 10:39:44 +00:00
hid-sensors iio: hid-sensor-trigger: Fix sometimes not powering up the sensor after resume 2018-04-21 15:52:35 +01:00
ms_sensors iio: common: ms_sensors: Remove unnecessary cast on void pointer 2017-04-02 09:47:57 +01:00
ssp_sensors iio: common: ssp_sensors: account for const type of of_device_id.data 2018-01-08 16:03:43 +01:00
st_sensors Staging/IIO patches for 4.15-rc1 2017-11-13 20:53:28 -08:00
Kconfig iio: cros_ec_sensors_core: Add common functions for the ChromeOS EC Sensor Hub. 2016-10-25 18:20:05 +01:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00