Commit 37f7e57e authored by Hans de Goede's avatar Hans de Goede Committed by Mauro Carvalho Chehab

media: ov2680: Drop is_enabled flag

With runtime-pm it is guaranteed that ov2680_power_on() and
ov2680_power_off() will always be called in a balanced way;
and the is_enabled check in ov2680_s_ctrl() can be replaced
by checking the runtime-suspend state.

So there is no more need for the is_enabled flag, remove it.

While at it also make sure that flip control changes while
suspended still lead to the bayer-order getting updated so
that get_fmt returns the correct bayer-order.
Acked-by: default avatarRui Miguel Silva <rmfrfs@gmail.com>
Reviewed-by: default avatarDaniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent e9305a23
...@@ -100,7 +100,6 @@ struct ov2680_dev { ...@@ -100,7 +100,6 @@ struct ov2680_dev {
struct gpio_desc *pwdn_gpio; struct gpio_desc *pwdn_gpio;
struct mutex lock; /* protect members */ struct mutex lock; /* protect members */
bool is_enabled;
bool is_streaming; bool is_streaming;
struct ov2680_ctrls ctrls; struct ov2680_ctrls ctrls;
...@@ -312,14 +311,9 @@ static int ov2680_stream_disable(struct ov2680_dev *sensor) ...@@ -312,14 +311,9 @@ static int ov2680_stream_disable(struct ov2680_dev *sensor)
static int ov2680_power_off(struct ov2680_dev *sensor) static int ov2680_power_off(struct ov2680_dev *sensor)
{ {
if (!sensor->is_enabled)
return 0;
clk_disable_unprepare(sensor->xvclk); clk_disable_unprepare(sensor->xvclk);
ov2680_power_down(sensor); ov2680_power_down(sensor);
regulator_bulk_disable(OV2680_NUM_SUPPLIES, sensor->supplies); regulator_bulk_disable(OV2680_NUM_SUPPLIES, sensor->supplies);
sensor->is_enabled = false;
return 0; return 0;
} }
...@@ -327,9 +321,6 @@ static int ov2680_power_on(struct ov2680_dev *sensor) ...@@ -327,9 +321,6 @@ static int ov2680_power_on(struct ov2680_dev *sensor)
{ {
int ret; int ret;
if (sensor->is_enabled)
return 0;
ret = regulator_bulk_enable(OV2680_NUM_SUPPLIES, sensor->supplies); ret = regulator_bulk_enable(OV2680_NUM_SUPPLIES, sensor->supplies);
if (ret < 0) { if (ret < 0) {
dev_err(sensor->dev, "failed to enable regulators: %d\n", ret); dev_err(sensor->dev, "failed to enable regulators: %d\n", ret);
...@@ -353,8 +344,6 @@ static int ov2680_power_on(struct ov2680_dev *sensor) ...@@ -353,8 +344,6 @@ static int ov2680_power_on(struct ov2680_dev *sensor)
if (ret < 0) if (ret < 0)
goto err_disable_regulators; goto err_disable_regulators;
sensor->is_enabled = true;
return 0; return 0;
err_disable_regulators: err_disable_regulators:
...@@ -541,26 +530,37 @@ static int ov2680_s_ctrl(struct v4l2_ctrl *ctrl) ...@@ -541,26 +530,37 @@ static int ov2680_s_ctrl(struct v4l2_ctrl *ctrl)
{ {
struct v4l2_subdev *sd = ctrl_to_sd(ctrl); struct v4l2_subdev *sd = ctrl_to_sd(ctrl);
struct ov2680_dev *sensor = to_ov2680_dev(sd); struct ov2680_dev *sensor = to_ov2680_dev(sd);
int ret;
if (!sensor->is_enabled) /* Only apply changes to the controls if the device is powered up */
if (!pm_runtime_get_if_in_use(sensor->sd.dev)) {
ov2680_set_bayer_order(sensor, &sensor->fmt);
return 0; return 0;
}
switch (ctrl->id) { switch (ctrl->id) {
case V4L2_CID_GAIN: case V4L2_CID_GAIN:
return ov2680_gain_set(sensor, ctrl->val); ret = ov2680_gain_set(sensor, ctrl->val);
break;
case V4L2_CID_EXPOSURE: case V4L2_CID_EXPOSURE:
return ov2680_exposure_set(sensor, ctrl->val); ret = ov2680_exposure_set(sensor, ctrl->val);
break;
case V4L2_CID_VFLIP: case V4L2_CID_VFLIP:
return ov2680_set_vflip(sensor, ctrl->val); ret = ov2680_set_vflip(sensor, ctrl->val);
break;
case V4L2_CID_HFLIP: case V4L2_CID_HFLIP:
return ov2680_set_hflip(sensor, ctrl->val); ret = ov2680_set_hflip(sensor, ctrl->val);
break;
case V4L2_CID_TEST_PATTERN: case V4L2_CID_TEST_PATTERN:
return ov2680_test_pattern_set(sensor, ctrl->val); ret = ov2680_test_pattern_set(sensor, ctrl->val);
break;
default: default:
ret = -EINVAL;
break; break;
} }
return -EINVAL; pm_runtime_put(sensor->sd.dev);
return ret;
} }
static const struct v4l2_ctrl_ops ov2680_ctrl_ops = { static const struct v4l2_ctrl_ops ov2680_ctrl_ops = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment