hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/drivers/media/i2c/imx327.c
....@@ -865,14 +865,12 @@
865865 struct imx327 *imx327 = to_imx327(sd);
866866 const struct imx327_mode *mode = imx327->cur_mode;
867867
868
- mutex_lock(&imx327->mutex);
869868 fi->interval = mode->max_fps;
870
- mutex_unlock(&imx327->mutex);
871869
872870 return 0;
873871 }
874872
875
-static int imx327_g_mbus_config(struct v4l2_subdev *sd,
873
+static int imx327_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad_id,
876874 struct v4l2_mbus_config *config)
877875 {
878876 struct imx327 *imx327 = to_imx327(sd);
....@@ -881,10 +879,7 @@
881879 val = 1 << (IMX327_4LANES - 1) |
882880 V4L2_MBUS_CSI2_CHANNEL_0 |
883881 V4L2_MBUS_CSI2_CONTINUOUS_CLOCK;
884
- if (imx327->bus_cfg.bus_type == 3)
885
- config->type = V4L2_MBUS_CCP2;
886
- else
887
- config->type = V4L2_MBUS_CSI2;
882
+ config->type = imx327->bus_cfg.bus_type;
888883 config->flags = val;
889884
890885 return 0;
....@@ -1145,7 +1140,7 @@
11451140 break;
11461141 case RKMODULE_GET_LVDS_CFG:
11471142 lvds_cfg = (struct rkmodule_lvds_cfg *)arg;
1148
- if (imx327->bus_cfg.bus_type == 3)
1143
+ if (imx327->bus_cfg.bus_type == V4L2_MBUS_CCP2)
11491144 memcpy(lvds_cfg, &imx327->cur_mode->lvds_cfg,
11501145 sizeof(struct rkmodule_lvds_cfg));
11511146 else
....@@ -1558,7 +1553,7 @@
15581553 if (sel->target == V4L2_SEL_TGT_CROP_BOUNDS) {
15591554 sel->r.left = CROP_START(imx327->cur_mode->width, DST_WIDTH);
15601555 sel->r.width = DST_WIDTH;
1561
- if (imx327->bus_cfg.bus_type == 3) {
1556
+ if (imx327->bus_cfg.bus_type == V4L2_MBUS_CCP2) {
15621557 if (imx327->cur_mode->hdr_mode == NO_HDR)
15631558 sel->r.top = 21;
15641559 else
....@@ -1594,7 +1589,6 @@
15941589 static const struct v4l2_subdev_video_ops imx327_video_ops = {
15951590 .s_stream = imx327_s_stream,
15961591 .g_frame_interval = imx327_g_frame_interval,
1597
- .g_mbus_config = imx327_g_mbus_config,
15981592 };
15991593
16001594 static const struct v4l2_subdev_pad_ops imx327_pad_ops = {
....@@ -1604,6 +1598,7 @@
16041598 .get_fmt = imx327_get_fmt,
16051599 .set_fmt = imx327_set_fmt,
16061600 .get_selection = imx327_get_selection,
1601
+ .get_mbus_config = imx327_g_mbus_config,
16071602 };
16081603
16091604 static const struct v4l2_subdev_ops imx327_subdev_ops = {
....@@ -1640,29 +1635,33 @@
16401635
16411636 switch (ctrl->id) {
16421637 case V4L2_CID_EXPOSURE:
1643
- shs1 = imx327->cur_vts - ctrl->val - 1;
1644
- ret = imx327_write_reg(imx327->client,
1645
- IMX327_REG_SHS1_H,
1646
- IMX327_REG_VALUE_08BIT,
1647
- IMX327_FETCH_HIGH_BYTE_EXP(shs1));
1648
- ret |= imx327_write_reg(imx327->client,
1649
- IMX327_REG_SHS1_M,
1650
- IMX327_REG_VALUE_08BIT,
1651
- IMX327_FETCH_MID_BYTE_EXP(shs1));
1652
- ret |= imx327_write_reg(imx327->client,
1653
- IMX327_REG_SHS1_L,
1654
- IMX327_REG_VALUE_08BIT,
1655
- IMX327_FETCH_LOW_BYTE_EXP(shs1));
1656
- dev_dbg(&client->dev, "set exposure 0x%x, cur_vts 0x%x,shs1 0x%x\n",
1657
- ctrl->val, imx327->cur_vts, shs1);
1638
+ if (imx327->cur_mode->hdr_mode == NO_HDR) {
1639
+ shs1 = imx327->cur_vts - ctrl->val - 1;
1640
+ ret = imx327_write_reg(imx327->client,
1641
+ IMX327_REG_SHS1_H,
1642
+ IMX327_REG_VALUE_08BIT,
1643
+ IMX327_FETCH_HIGH_BYTE_EXP(shs1));
1644
+ ret |= imx327_write_reg(imx327->client,
1645
+ IMX327_REG_SHS1_M,
1646
+ IMX327_REG_VALUE_08BIT,
1647
+ IMX327_FETCH_MID_BYTE_EXP(shs1));
1648
+ ret |= imx327_write_reg(imx327->client,
1649
+ IMX327_REG_SHS1_L,
1650
+ IMX327_REG_VALUE_08BIT,
1651
+ IMX327_FETCH_LOW_BYTE_EXP(shs1));
1652
+ dev_dbg(&client->dev, "set exposure 0x%x, cur_vts 0x%x,shs1 0x%x\n",
1653
+ ctrl->val, imx327->cur_vts, shs1);
1654
+ }
16581655 break;
16591656 case V4L2_CID_ANALOGUE_GAIN:
1660
- ret = imx327_write_reg(imx327->client,
1661
- IMX327_REG_LF_GAIN,
1662
- IMX327_REG_VALUE_08BIT,
1663
- ctrl->val);
1664
- dev_dbg(&client->dev, "set analog gain 0x%x\n",
1665
- ctrl->val);
1657
+ if (imx327->cur_mode->hdr_mode == NO_HDR) {
1658
+ ret = imx327_write_reg(imx327->client,
1659
+ IMX327_REG_LF_GAIN,
1660
+ IMX327_REG_VALUE_08BIT,
1661
+ ctrl->val);
1662
+ dev_dbg(&client->dev, "set analog gain 0x%x\n",
1663
+ ctrl->val);
1664
+ }
16661665 break;
16671666 case V4L2_CID_VBLANK:
16681667 vts = ctrl->val + imx327->cur_mode->height;
....@@ -1893,7 +1892,7 @@
18931892
18941893 ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(endpoint),
18951894 &imx327->bus_cfg);
1896
- if (imx327->bus_cfg.bus_type == 3) {
1895
+ if (imx327->bus_cfg.bus_type == V4L2_MBUS_CCP2) {
18971896 imx327->support_modes = lvds_supported_modes;
18981897 imx327->support_modes_num = ARRAY_SIZE(lvds_supported_modes);
18991898 } else {