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