The sensor may be powered by either one of its sub-devices being accessed
from the user space (an open file handle) or by its s_power() op being
called with non-zero on argument. The driver counts the users and if any
reason to keep the device powered exists it will be powered.

However, a faulty condition was used in recognising the need to power off
the sensor, leading it to be powered off every time any of its uses went
away.

Signed-off-by: Sakari Ailus <sakari.ai...@linux.intel.com>
---
 drivers/media/i2c/smiapp/smiapp-core.c | 11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/drivers/media/i2c/smiapp/smiapp-core.c 
b/drivers/media/i2c/smiapp/smiapp-core.c
index 94ae3a3..a9c6f9b 100644
--- a/drivers/media/i2c/smiapp/smiapp-core.c
+++ b/drivers/media/i2c/smiapp/smiapp-core.c
@@ -1400,19 +1400,12 @@ static int smiapp_set_power(struct v4l2_subdev *subdev, 
int on)
 
        mutex_lock(&sensor->power_mutex);
 
-       /*
-        * If the power count is modified from 0 to != 0 or from != 0
-        * to 0, update the power state.
-        */
-       if (!sensor->power_count == !on)
-               goto out;
-
-       if (on) {
+       if (on && !sensor->power_count) {
                /* Power on and perform initialisation. */
                ret = smiapp_power_on(sensor);
                if (ret < 0)
                        goto out;
-       } else {
+       } else if (!on && sensor->power_count == 1) {
                smiapp_power_off(sensor);
        }
 
-- 
1.8.3.2

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to