From 2f7c68cb55ecb7331f2381deb497c27155f32faf Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Wed, 03 Jan 2024 09:43:39 +0000
Subject: [PATCH] update kernel to 5.10.198
---
kernel/drivers/media/i2c/imx307.c | 65 ++++++++++++++++----------------
1 files changed, 32 insertions(+), 33 deletions(-)
diff --git a/kernel/drivers/media/i2c/imx307.c b/kernel/drivers/media/i2c/imx307.c
index ab07208..c0af3ad 100644
--- a/kernel/drivers/media/i2c/imx307.c
+++ b/kernel/drivers/media/i2c/imx307.c
@@ -1187,14 +1187,12 @@
struct imx307 *imx307 = to_imx307(sd);
const struct imx307_mode *mode = imx307->cur_mode;
- mutex_lock(&imx307->mutex);
fi->interval = mode->max_fps;
- mutex_unlock(&imx307->mutex);
return 0;
}
-static int imx307_g_mbus_config(struct v4l2_subdev *sd,
+static int imx307_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad_id,
struct v4l2_mbus_config *config)
{
struct imx307 *imx307 = to_imx307(sd);
@@ -1203,10 +1201,7 @@
val = 1 << (imx307->cur_mode->lanes - 1) |
V4L2_MBUS_CSI2_CHANNEL_0 |
V4L2_MBUS_CSI2_CONTINUOUS_CLOCK;
- if (imx307->bus_cfg.bus_type == 3)
- config->type = V4L2_MBUS_CCP2;
- else
- config->type = V4L2_MBUS_CSI2;
+ config->type = imx307->bus_cfg.bus_type;
config->flags = val;
return 0;
@@ -1259,7 +1254,7 @@
}
//long exposure and short exposure
- if (imx307->cur_mode->lanes == 2 && imx307->bus_cfg.bus_type == 3)
+ if (imx307->cur_mode->lanes == 2 && imx307->bus_cfg.bus_type == V4L2_MBUS_CCP2)
rhs1 = RHS1;
else
rhs1 = 0xe1;
@@ -1467,7 +1462,7 @@
break;
case RKMODULE_GET_LVDS_CFG:
lvds_cfg = (struct rkmodule_lvds_cfg *)arg;
- if (imx307->bus_cfg.bus_type == 3)
+ if (imx307->bus_cfg.bus_type == V4L2_MBUS_CCP2)
memcpy(lvds_cfg, &imx307->cur_mode->lvds_cfg,
sizeof(struct rkmodule_lvds_cfg));
else
@@ -1882,7 +1877,7 @@
if (sel->target == V4L2_SEL_TGT_CROP_BOUNDS) {
sel->r.left = CROP_START(imx307->cur_mode->width, DST_WIDTH);
sel->r.width = DST_WIDTH;
- if (imx307->bus_cfg.bus_type == 3) {
+ if (imx307->bus_cfg.bus_type == V4L2_MBUS_CCP2) {
if (imx307->cur_mode->hdr_mode == NO_HDR)
sel->r.top = 21;
else
@@ -1918,7 +1913,6 @@
static const struct v4l2_subdev_video_ops imx307_video_ops = {
.s_stream = imx307_s_stream,
.g_frame_interval = imx307_g_frame_interval,
- .g_mbus_config = imx307_g_mbus_config,
};
static const struct v4l2_subdev_pad_ops imx307_pad_ops = {
@@ -1928,6 +1922,7 @@
.get_fmt = imx307_get_fmt,
.set_fmt = imx307_set_fmt,
.get_selection = imx307_get_selection,
+ .get_mbus_config = imx307_g_mbus_config,
};
static const struct v4l2_subdev_ops imx307_subdev_ops = {
@@ -1964,29 +1959,33 @@
switch (ctrl->id) {
case V4L2_CID_EXPOSURE:
- shs1 = imx307->cur_vts - (ctrl->val + 1);
- ret = imx307_write_reg(imx307->client,
- IMX307_REG_SHS1_H,
- IMX307_REG_VALUE_08BIT,
- IMX307_FETCH_HIGH_BYTE_EXP(shs1));
- ret |= imx307_write_reg(imx307->client,
- IMX307_REG_SHS1_M,
- IMX307_REG_VALUE_08BIT,
- IMX307_FETCH_MID_BYTE_EXP(shs1));
- ret |= imx307_write_reg(imx307->client,
- IMX307_REG_SHS1_L,
- IMX307_REG_VALUE_08BIT,
- IMX307_FETCH_LOW_BYTE_EXP(shs1));
- dev_dbg(&client->dev, "set exposure 0x%x, cur_vts 0x%x,shs1 0x%x\n",
- ctrl->val, imx307->cur_vts, shs1);
+ if (imx307->cur_mode->hdr_mode == NO_HDR) {
+ shs1 = imx307->cur_vts - (ctrl->val + 1);
+ ret = imx307_write_reg(imx307->client,
+ IMX307_REG_SHS1_H,
+ IMX307_REG_VALUE_08BIT,
+ IMX307_FETCH_HIGH_BYTE_EXP(shs1));
+ ret |= imx307_write_reg(imx307->client,
+ IMX307_REG_SHS1_M,
+ IMX307_REG_VALUE_08BIT,
+ IMX307_FETCH_MID_BYTE_EXP(shs1));
+ ret |= imx307_write_reg(imx307->client,
+ IMX307_REG_SHS1_L,
+ IMX307_REG_VALUE_08BIT,
+ IMX307_FETCH_LOW_BYTE_EXP(shs1));
+ dev_dbg(&client->dev, "set exposure 0x%x, cur_vts 0x%x,shs1 0x%x\n",
+ ctrl->val, imx307->cur_vts, shs1);
+ }
break;
case V4L2_CID_ANALOGUE_GAIN:
- ret = imx307_write_reg(imx307->client,
- IMX307_REG_LF_GAIN,
- IMX307_REG_VALUE_08BIT,
- ctrl->val);
- dev_dbg(&client->dev, "set analog gain 0x%x\n",
- ctrl->val);
+ if (imx307->cur_mode->hdr_mode == NO_HDR) {
+ ret = imx307_write_reg(imx307->client,
+ IMX307_REG_LF_GAIN,
+ IMX307_REG_VALUE_08BIT,
+ ctrl->val);
+ dev_dbg(&client->dev, "set analog gain 0x%x\n",
+ ctrl->val);
+ }
break;
case V4L2_CID_VBLANK:
vts = ctrl->val + imx307->cur_mode->height;
@@ -2214,7 +2213,7 @@
&imx307->bus_cfg);
if (ret)
dev_warn(dev, "could not get bus config!\n");
- if (imx307->bus_cfg.bus_type == 3) {
+ if (imx307->bus_cfg.bus_type == V4L2_MBUS_CCP2) {
if (imx307->bus_cfg.bus.mipi_csi1.data_lane == 2) {
imx307->support_modes = lvds_2lane_supported_modes;
imx307->support_modes_num = ARRAY_SIZE(lvds_2lane_supported_modes);
--
Gitblit v1.6.2