media: i2c: sensors: fix pm_runtime_put issue in HDR mode

Change-Id: I11189e30eeb5ac2b7073888329e819a9a7f6b074
Signed-off-by: Jianwei Fan <jianwei.fan@rock-chips.com>
This commit is contained in:
Jianwei Fan
2022-11-16 07:33:30 +00:00
parent 62d3af47b8
commit 933af6b20c
10 changed files with 31 additions and 21 deletions

View File

@@ -1734,7 +1734,7 @@ static int imx335_set_ctrl(struct v4l2_ctrl *ctrl)
switch (ctrl->id) {
case V4L2_CID_EXPOSURE:
if (imx335->cur_mode->hdr_mode != NO_HDR)
return ret;
goto ctrl_end;
shr0 = imx335->cur_vts - ctrl->val;
ret = imx335_write_reg(imx335->client, IMX335_LF_EXPO_REG_L,
IMX335_REG_VALUE_08BIT,
@@ -1750,7 +1750,7 @@ static int imx335_set_ctrl(struct v4l2_ctrl *ctrl)
break;
case V4L2_CID_ANALOGUE_GAIN:
if (imx335->cur_mode->hdr_mode != NO_HDR)
return ret;
goto ctrl_end;
ret = imx335_write_reg(imx335->client, IMX335_LF_GAIN_REG_H,
IMX335_REG_VALUE_08BIT,
IMX335_FETCH_GAIN_H(ctrl->val));
@@ -1830,6 +1830,7 @@ static int imx335_set_ctrl(struct v4l2_ctrl *ctrl)
break;
}
ctrl_end:
pm_runtime_put(&client->dev);
return ret;

View File

@@ -2303,7 +2303,7 @@ static int imx415_set_ctrl(struct v4l2_ctrl *ctrl)
switch (ctrl->id) {
case V4L2_CID_EXPOSURE:
if (imx415->cur_mode->hdr_mode != NO_HDR)
return ret;
goto ctrl_end;
shr0 = imx415->cur_vts - ctrl->val;
ret = imx415_write_reg(imx415->client, IMX415_LF_EXPO_REG_L,
IMX415_REG_VALUE_08BIT,
@@ -2319,7 +2319,7 @@ static int imx415_set_ctrl(struct v4l2_ctrl *ctrl)
break;
case V4L2_CID_ANALOGUE_GAIN:
if (imx415->cur_mode->hdr_mode != NO_HDR)
return ret;
goto ctrl_end;
ret = imx415_write_reg(imx415->client, IMX415_LF_GAIN_REG_H,
IMX415_REG_VALUE_08BIT,
IMX415_FETCH_GAIN_H(ctrl->val));
@@ -2388,6 +2388,7 @@ static int imx415_set_ctrl(struct v4l2_ctrl *ctrl)
break;
}
ctrl_end:
pm_runtime_put(&client->dev);
return ret;

View File

@@ -2048,7 +2048,7 @@ static int imx577_set_ctrl(struct v4l2_ctrl *ctrl)
case V4L2_CID_EXPOSURE:
/* 4 least significant bits of expsoure are fractional part */
if (imx577->cur_mode->hdr_mode != NO_HDR)
return ret;
goto ctrl_end;
ret = imx577_write_reg(imx577->client,
IMX577_REG_EXPOSURE_H,
IMX577_REG_VALUE_08BIT,
@@ -2067,7 +2067,7 @@ static int imx577_set_ctrl(struct v4l2_ctrl *ctrl)
* gain_reg = 1024 - 1024 * 16 / (gain_ana * 16)
*/
if (imx577->cur_mode->hdr_mode != NO_HDR)
return ret;
goto ctrl_end;
if (ctrl->val > 0x1600)
ctrl->val = 0x1600;
if (ctrl->val < 0x10)
@@ -2138,6 +2138,7 @@ static int imx577_set_ctrl(struct v4l2_ctrl *ctrl)
break;
}
ctrl_end:
pm_runtime_put(&client->dev);
return ret;

View File

@@ -674,7 +674,7 @@ static const struct os05a20_mode supported_modes[] = {
.vc[PAD0] = V4L2_MBUS_CSI2_CHANNEL_1,
.vc[PAD1] = V4L2_MBUS_CSI2_CHANNEL_0,//L->csi wr0
.vc[PAD2] = V4L2_MBUS_CSI2_CHANNEL_1,
.vc[PAD3] = V4L2_MBUS_CSI2_CHANNEL_1,//M->csi wr2 //좃濾미땍똬煉
.vc[PAD3] = V4L2_MBUS_CSI2_CHANNEL_1,//M->csi wr2
},
};
@@ -1565,7 +1565,7 @@ static int os05a20_set_ctrl(struct v4l2_ctrl *ctrl)
switch (ctrl->id) {
case V4L2_CID_EXPOSURE:
if (os05a20->cur_mode->hdr_mode != NO_HDR)
return 0;
goto ctrl_end;
ret = os05a20_write_reg(os05a20->client,
OS05A20_REG_EXP_LONG_H,
OS05A20_REG_VALUE_16BIT,
@@ -1575,7 +1575,7 @@ static int os05a20_set_ctrl(struct v4l2_ctrl *ctrl)
break;
case V4L2_CID_ANALOGUE_GAIN:
if (os05a20->cur_mode->hdr_mode != NO_HDR)
return 0;
goto ctrl_end;
if (ctrl->val > 1984) {// >15.5x
dgain = ctrl->val * 10 / 155;
again = 1984;
@@ -1634,6 +1634,7 @@ static int os05a20_set_ctrl(struct v4l2_ctrl *ctrl)
break;
}
ctrl_end:
pm_runtime_put(&client->dev);
return ret;

View File

@@ -2761,7 +2761,7 @@ static int ov12d2q_set_ctrl(struct v4l2_ctrl *ctrl)
switch (ctrl->id) {
case V4L2_CID_EXPOSURE:
if (ov12d2q->cur_mode->hdr_mode != NO_HDR)
return 0;
goto ctrl_end;
ret = ov12d2q_write_reg(ov12d2q->client,
OV12D2Q_REG_EXP_L_H,
OV12D2Q_REG_VALUE_16BIT,
@@ -2771,7 +2771,7 @@ static int ov12d2q_set_ctrl(struct v4l2_ctrl *ctrl)
break;
case V4L2_CID_ANALOGUE_GAIN:
if (ov12d2q->cur_mode->hdr_mode != NO_HDR)
return 0;
goto ctrl_end;
if (ctrl->val > 1984) {// >15.5x
dgain = ctrl->val * 10 / 155;
again = 1984;
@@ -2888,6 +2888,7 @@ static int ov12d2q_set_ctrl(struct v4l2_ctrl *ctrl)
break;
}
ctrl_end:
pm_runtime_put(&client->dev);
return ret;

View File

@@ -4865,7 +4865,7 @@ static int ov2775_set_ctrl(struct v4l2_ctrl *ctrl)
switch (ctrl->id) {
case V4L2_CID_EXPOSURE:
if (ov2775->cur_mode->hdr_mode != NO_HDR)
return 0;
goto ctrl_end;
ret = ov2775_write_reg(ov2775->client,
OV2775_REG_EXPOSURE_H,
OV2775_REG_VALUE_08BIT,
@@ -4880,7 +4880,7 @@ static int ov2775_set_ctrl(struct v4l2_ctrl *ctrl)
break;
case V4L2_CID_ANALOGUE_GAIN:
if (ov2775->cur_mode->hdr_mode != NO_HDR)
return 0;
goto ctrl_end;
ov2775_get_linear_reg(ctrl->val, &gain_a, &gain_d);
ret = ov2775_write_reg(ov2775->client,
OV2775_REG_GAIN,
@@ -4937,6 +4937,7 @@ static int ov2775_set_ctrl(struct v4l2_ctrl *ctrl)
break;
}
ctrl_end:
pm_runtime_put(&client->dev);
return ret;

View File

@@ -1192,7 +1192,7 @@ static int sc2232_set_ctrl(struct v4l2_ctrl *ctrl)
switch (ctrl->id) {
case V4L2_CID_EXPOSURE:
if (sc2232->cur_mode->hdr_mode != NO_HDR)
return ret;
goto ctrl_end;
val = ctrl->val << 1;
ret = sc2232_write_reg(sc2232->client,
SC2232_REG_EXP_LONG_L,
@@ -1210,7 +1210,7 @@ static int sc2232_set_ctrl(struct v4l2_ctrl *ctrl)
break;
case V4L2_CID_ANALOGUE_GAIN:
if (sc2232->cur_mode->hdr_mode != NO_HDR)
return ret;
goto ctrl_end;
ret = sc2232_set_gain(sc2232, ctrl->val);
break;
case V4L2_CID_VBLANK:
@@ -1256,6 +1256,7 @@ static int sc2232_set_ctrl(struct v4l2_ctrl *ctrl)
break;
}
ctrl_end:
pm_runtime_put(&client->dev);
return ret;
}

View File

@@ -2357,7 +2357,7 @@ static int sc4210_set_ctrl(struct v4l2_ctrl *ctrl)
switch (ctrl->id) {
case V4L2_CID_EXPOSURE:
if (sc4210->cur_mode->hdr_mode != NO_HDR)
return ret;
goto ctrl_end;
val = ctrl->val << 1;
ret = sc4210_write_reg(sc4210->client,
SC4210_REG_EXPOSURE_H,
@@ -2376,7 +2376,7 @@ static int sc4210_set_ctrl(struct v4l2_ctrl *ctrl)
break;
case V4L2_CID_ANALOGUE_GAIN:
if (sc4210->cur_mode->hdr_mode != NO_HDR)
return ret;
goto ctrl_end;
sc4210_get_gain_reg(ctrl->val, &again, &again_fine, &dgain, &dgain_fine);
ret = sc4210_write_reg(sc4210->client,
@@ -2448,6 +2448,7 @@ static int sc4210_set_ctrl(struct v4l2_ctrl *ctrl)
break;
}
ctrl_end:
pm_runtime_put(&client->dev);
return ret;

View File

@@ -1433,7 +1433,7 @@ static int sc500ai_set_ctrl(struct v4l2_ctrl *ctrl)
switch (ctrl->id) {
case V4L2_CID_EXPOSURE:
if (sc500ai->cur_mode->hdr_mode != NO_HDR)
return ret;
goto ctrl_end;
val = ctrl->val << 1;
ret = sc500ai_write_reg(sc500ai->client,
SC500AI_REG_EXPOSURE_H,
@@ -1452,7 +1452,7 @@ static int sc500ai_set_ctrl(struct v4l2_ctrl *ctrl)
break;
case V4L2_CID_ANALOGUE_GAIN:
if (sc500ai->cur_mode->hdr_mode != NO_HDR)
return ret;
goto ctrl_end;
sc500ai_get_gain_reg(ctrl->val, &again, &again_fine, &dgain, &dgain_fine);
ret = sc500ai_write_reg(sc500ai->client,
@@ -1557,6 +1557,7 @@ static int sc500ai_set_ctrl(struct v4l2_ctrl *ctrl)
break;
}
ctrl_end:
pm_runtime_put(&client->dev);
return ret;

View File

@@ -1668,7 +1668,7 @@ static int sc530ai_set_ctrl(struct v4l2_ctrl *ctrl)
switch (ctrl->id) {
case V4L2_CID_EXPOSURE:
if (sc530ai->cur_mode->hdr_mode != NO_HDR)
return ret;
goto ctrl_end;
val = ctrl->val << 1;
ret = sc530ai_write_reg(sc530ai->client,
SC530AI_REG_EXPOSURE_H,
@@ -1687,7 +1687,7 @@ static int sc530ai_set_ctrl(struct v4l2_ctrl *ctrl)
break;
case V4L2_CID_ANALOGUE_GAIN:
if (sc530ai->cur_mode->hdr_mode != NO_HDR)
return ret;
goto ctrl_end;
sc530ai_get_gain_reg(ctrl->val, &again, &dgain, &dgain_fine);
ret = sc530ai_write_reg(sc530ai->client,
@@ -1756,6 +1756,7 @@ static int sc530ai_set_ctrl(struct v4l2_ctrl *ctrl)
break;
}
ctrl_end:
pm_runtime_put(&client->dev);
return ret;