hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
kernel/drivers/media/i2c/imx307.c
....@@ -1187,14 +1187,12 @@
11871187 struct imx307 *imx307 = to_imx307(sd);
11881188 const struct imx307_mode *mode = imx307->cur_mode;
11891189
1190
- mutex_lock(&imx307->mutex);
11911190 fi->interval = mode->max_fps;
1192
- mutex_unlock(&imx307->mutex);
11931191
11941192 return 0;
11951193 }
11961194
1197
-static int imx307_g_mbus_config(struct v4l2_subdev *sd,
1195
+static int imx307_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad_id,
11981196 struct v4l2_mbus_config *config)
11991197 {
12001198 struct imx307 *imx307 = to_imx307(sd);
....@@ -1203,10 +1201,7 @@
12031201 val = 1 << (imx307->cur_mode->lanes - 1) |
12041202 V4L2_MBUS_CSI2_CHANNEL_0 |
12051203 V4L2_MBUS_CSI2_CONTINUOUS_CLOCK;
1206
- if (imx307->bus_cfg.bus_type == 3)
1207
- config->type = V4L2_MBUS_CCP2;
1208
- else
1209
- config->type = V4L2_MBUS_CSI2;
1204
+ config->type = imx307->bus_cfg.bus_type;
12101205 config->flags = val;
12111206
12121207 return 0;
....@@ -1259,7 +1254,7 @@
12591254 }
12601255
12611256 //long exposure and short exposure
1262
- if (imx307->cur_mode->lanes == 2 && imx307->bus_cfg.bus_type == 3)
1257
+ if (imx307->cur_mode->lanes == 2 && imx307->bus_cfg.bus_type == V4L2_MBUS_CCP2)
12631258 rhs1 = RHS1;
12641259 else
12651260 rhs1 = 0xe1;
....@@ -1467,7 +1462,7 @@
14671462 break;
14681463 case RKMODULE_GET_LVDS_CFG:
14691464 lvds_cfg = (struct rkmodule_lvds_cfg *)arg;
1470
- if (imx307->bus_cfg.bus_type == 3)
1465
+ if (imx307->bus_cfg.bus_type == V4L2_MBUS_CCP2)
14711466 memcpy(lvds_cfg, &imx307->cur_mode->lvds_cfg,
14721467 sizeof(struct rkmodule_lvds_cfg));
14731468 else
....@@ -1882,7 +1877,7 @@
18821877 if (sel->target == V4L2_SEL_TGT_CROP_BOUNDS) {
18831878 sel->r.left = CROP_START(imx307->cur_mode->width, DST_WIDTH);
18841879 sel->r.width = DST_WIDTH;
1885
- if (imx307->bus_cfg.bus_type == 3) {
1880
+ if (imx307->bus_cfg.bus_type == V4L2_MBUS_CCP2) {
18861881 if (imx307->cur_mode->hdr_mode == NO_HDR)
18871882 sel->r.top = 21;
18881883 else
....@@ -1918,7 +1913,6 @@
19181913 static const struct v4l2_subdev_video_ops imx307_video_ops = {
19191914 .s_stream = imx307_s_stream,
19201915 .g_frame_interval = imx307_g_frame_interval,
1921
- .g_mbus_config = imx307_g_mbus_config,
19221916 };
19231917
19241918 static const struct v4l2_subdev_pad_ops imx307_pad_ops = {
....@@ -1928,6 +1922,7 @@
19281922 .get_fmt = imx307_get_fmt,
19291923 .set_fmt = imx307_set_fmt,
19301924 .get_selection = imx307_get_selection,
1925
+ .get_mbus_config = imx307_g_mbus_config,
19311926 };
19321927
19331928 static const struct v4l2_subdev_ops imx307_subdev_ops = {
....@@ -1964,29 +1959,33 @@
19641959
19651960 switch (ctrl->id) {
19661961 case V4L2_CID_EXPOSURE:
1967
- shs1 = imx307->cur_vts - (ctrl->val + 1);
1968
- ret = imx307_write_reg(imx307->client,
1969
- IMX307_REG_SHS1_H,
1970
- IMX307_REG_VALUE_08BIT,
1971
- IMX307_FETCH_HIGH_BYTE_EXP(shs1));
1972
- ret |= imx307_write_reg(imx307->client,
1973
- IMX307_REG_SHS1_M,
1974
- IMX307_REG_VALUE_08BIT,
1975
- IMX307_FETCH_MID_BYTE_EXP(shs1));
1976
- ret |= imx307_write_reg(imx307->client,
1977
- IMX307_REG_SHS1_L,
1978
- IMX307_REG_VALUE_08BIT,
1979
- IMX307_FETCH_LOW_BYTE_EXP(shs1));
1980
- dev_dbg(&client->dev, "set exposure 0x%x, cur_vts 0x%x,shs1 0x%x\n",
1981
- ctrl->val, imx307->cur_vts, shs1);
1962
+ if (imx307->cur_mode->hdr_mode == NO_HDR) {
1963
+ shs1 = imx307->cur_vts - (ctrl->val + 1);
1964
+ ret = imx307_write_reg(imx307->client,
1965
+ IMX307_REG_SHS1_H,
1966
+ IMX307_REG_VALUE_08BIT,
1967
+ IMX307_FETCH_HIGH_BYTE_EXP(shs1));
1968
+ ret |= imx307_write_reg(imx307->client,
1969
+ IMX307_REG_SHS1_M,
1970
+ IMX307_REG_VALUE_08BIT,
1971
+ IMX307_FETCH_MID_BYTE_EXP(shs1));
1972
+ ret |= imx307_write_reg(imx307->client,
1973
+ IMX307_REG_SHS1_L,
1974
+ IMX307_REG_VALUE_08BIT,
1975
+ IMX307_FETCH_LOW_BYTE_EXP(shs1));
1976
+ dev_dbg(&client->dev, "set exposure 0x%x, cur_vts 0x%x,shs1 0x%x\n",
1977
+ ctrl->val, imx307->cur_vts, shs1);
1978
+ }
19821979 break;
19831980 case V4L2_CID_ANALOGUE_GAIN:
1984
- ret = imx307_write_reg(imx307->client,
1985
- IMX307_REG_LF_GAIN,
1986
- IMX307_REG_VALUE_08BIT,
1987
- ctrl->val);
1988
- dev_dbg(&client->dev, "set analog gain 0x%x\n",
1989
- ctrl->val);
1981
+ if (imx307->cur_mode->hdr_mode == NO_HDR) {
1982
+ ret = imx307_write_reg(imx307->client,
1983
+ IMX307_REG_LF_GAIN,
1984
+ IMX307_REG_VALUE_08BIT,
1985
+ ctrl->val);
1986
+ dev_dbg(&client->dev, "set analog gain 0x%x\n",
1987
+ ctrl->val);
1988
+ }
19901989 break;
19911990 case V4L2_CID_VBLANK:
19921991 vts = ctrl->val + imx307->cur_mode->height;
....@@ -2214,7 +2213,7 @@
22142213 &imx307->bus_cfg);
22152214 if (ret)
22162215 dev_warn(dev, "could not get bus config!\n");
2217
- if (imx307->bus_cfg.bus_type == 3) {
2216
+ if (imx307->bus_cfg.bus_type == V4L2_MBUS_CCP2) {
22182217 if (imx307->bus_cfg.bus.mipi_csi1.data_lane == 2) {
22192218 imx307->support_modes = lvds_2lane_supported_modes;
22202219 imx307->support_modes_num = ARRAY_SIZE(lvds_2lane_supported_modes);