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: Rui Miguel Silva <rmfrfs@gmail.com> Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
parent
e9305a2390
commit
37f7e57e08
@ -100,7 +100,6 @@ struct ov2680_dev {
|
||||
struct gpio_desc *pwdn_gpio;
|
||||
struct mutex lock; /* protect members */
|
||||
|
||||
bool is_enabled;
|
||||
bool is_streaming;
|
||||
|
||||
struct ov2680_ctrls ctrls;
|
||||
@ -312,14 +311,9 @@ static int ov2680_stream_disable(struct ov2680_dev *sensor)
|
||||
|
||||
static int ov2680_power_off(struct ov2680_dev *sensor)
|
||||
{
|
||||
if (!sensor->is_enabled)
|
||||
return 0;
|
||||
|
||||
clk_disable_unprepare(sensor->xvclk);
|
||||
ov2680_power_down(sensor);
|
||||
regulator_bulk_disable(OV2680_NUM_SUPPLIES, sensor->supplies);
|
||||
sensor->is_enabled = false;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -327,9 +321,6 @@ static int ov2680_power_on(struct ov2680_dev *sensor)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (sensor->is_enabled)
|
||||
return 0;
|
||||
|
||||
ret = regulator_bulk_enable(OV2680_NUM_SUPPLIES, sensor->supplies);
|
||||
if (ret < 0) {
|
||||
dev_err(sensor->dev, "failed to enable regulators: %d\n", ret);
|
||||
@ -353,8 +344,6 @@ static int ov2680_power_on(struct ov2680_dev *sensor)
|
||||
if (ret < 0)
|
||||
goto err_disable_regulators;
|
||||
|
||||
sensor->is_enabled = true;
|
||||
|
||||
return 0;
|
||||
|
||||
err_disable_regulators:
|
||||
@ -541,26 +530,37 @@ static int ov2680_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
{
|
||||
struct v4l2_subdev *sd = ctrl_to_sd(ctrl);
|
||||
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;
|
||||
}
|
||||
|
||||
switch (ctrl->id) {
|
||||
case V4L2_CID_GAIN:
|
||||
return ov2680_gain_set(sensor, ctrl->val);
|
||||
ret = ov2680_gain_set(sensor, ctrl->val);
|
||||
break;
|
||||
case V4L2_CID_EXPOSURE:
|
||||
return ov2680_exposure_set(sensor, ctrl->val);
|
||||
ret = ov2680_exposure_set(sensor, ctrl->val);
|
||||
break;
|
||||
case V4L2_CID_VFLIP:
|
||||
return ov2680_set_vflip(sensor, ctrl->val);
|
||||
ret = ov2680_set_vflip(sensor, ctrl->val);
|
||||
break;
|
||||
case V4L2_CID_HFLIP:
|
||||
return ov2680_set_hflip(sensor, ctrl->val);
|
||||
ret = ov2680_set_hflip(sensor, ctrl->val);
|
||||
break;
|
||||
case V4L2_CID_TEST_PATTERN:
|
||||
return ov2680_test_pattern_set(sensor, ctrl->val);
|
||||
ret = ov2680_test_pattern_set(sensor, ctrl->val);
|
||||
break;
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
pm_runtime_put(sensor->sd.dev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct v4l2_ctrl_ops ov2680_ctrl_ops = {
|
||||
|
Loading…
x
Reference in New Issue
Block a user