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/imx327.c |   63 +++++++++++++++----------------
 1 files changed, 31 insertions(+), 32 deletions(-)

diff --git a/kernel/drivers/media/i2c/imx327.c b/kernel/drivers/media/i2c/imx327.c
index e1ac7d1..41875c6 100644
--- a/kernel/drivers/media/i2c/imx327.c
+++ b/kernel/drivers/media/i2c/imx327.c
@@ -865,14 +865,12 @@
 	struct imx327 *imx327 = to_imx327(sd);
 	const struct imx327_mode *mode = imx327->cur_mode;
 
-	mutex_lock(&imx327->mutex);
 	fi->interval = mode->max_fps;
-	mutex_unlock(&imx327->mutex);
 
 	return 0;
 }
 
-static int imx327_g_mbus_config(struct v4l2_subdev *sd,
+static int imx327_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad_id,
 				struct v4l2_mbus_config *config)
 {
 	struct imx327 *imx327 = to_imx327(sd);
@@ -881,10 +879,7 @@
 	val = 1 << (IMX327_4LANES - 1) |
 			V4L2_MBUS_CSI2_CHANNEL_0 |
 			V4L2_MBUS_CSI2_CONTINUOUS_CLOCK;
-	if (imx327->bus_cfg.bus_type == 3)
-		config->type = V4L2_MBUS_CCP2;
-	else
-		config->type = V4L2_MBUS_CSI2;
+	config->type = imx327->bus_cfg.bus_type;
 	config->flags = val;
 
 	return 0;
@@ -1145,7 +1140,7 @@
 		break;
 	case RKMODULE_GET_LVDS_CFG:
 		lvds_cfg = (struct rkmodule_lvds_cfg *)arg;
-		if (imx327->bus_cfg.bus_type == 3)
+		if (imx327->bus_cfg.bus_type == V4L2_MBUS_CCP2)
 			memcpy(lvds_cfg, &imx327->cur_mode->lvds_cfg,
 				sizeof(struct rkmodule_lvds_cfg));
 		else
@@ -1558,7 +1553,7 @@
 	if (sel->target == V4L2_SEL_TGT_CROP_BOUNDS) {
 		sel->r.left = CROP_START(imx327->cur_mode->width, DST_WIDTH);
 		sel->r.width = DST_WIDTH;
-		if (imx327->bus_cfg.bus_type == 3) {
+		if (imx327->bus_cfg.bus_type == V4L2_MBUS_CCP2) {
 			if (imx327->cur_mode->hdr_mode == NO_HDR)
 				sel->r.top = 21;
 			else
@@ -1594,7 +1589,6 @@
 static const struct v4l2_subdev_video_ops imx327_video_ops = {
 	.s_stream = imx327_s_stream,
 	.g_frame_interval = imx327_g_frame_interval,
-	.g_mbus_config = imx327_g_mbus_config,
 };
 
 static const struct v4l2_subdev_pad_ops imx327_pad_ops = {
@@ -1604,6 +1598,7 @@
 	.get_fmt = imx327_get_fmt,
 	.set_fmt = imx327_set_fmt,
 	.get_selection = imx327_get_selection,
+	.get_mbus_config = imx327_g_mbus_config,
 };
 
 static const struct v4l2_subdev_ops imx327_subdev_ops = {
@@ -1640,29 +1635,33 @@
 
 	switch (ctrl->id) {
 	case V4L2_CID_EXPOSURE:
-		shs1 = imx327->cur_vts - ctrl->val - 1;
-		ret = imx327_write_reg(imx327->client,
-			IMX327_REG_SHS1_H,
-			IMX327_REG_VALUE_08BIT,
-			IMX327_FETCH_HIGH_BYTE_EXP(shs1));
-		ret |= imx327_write_reg(imx327->client,
-			IMX327_REG_SHS1_M,
-			IMX327_REG_VALUE_08BIT,
-			IMX327_FETCH_MID_BYTE_EXP(shs1));
-		ret |= imx327_write_reg(imx327->client,
-			IMX327_REG_SHS1_L,
-			IMX327_REG_VALUE_08BIT,
-			IMX327_FETCH_LOW_BYTE_EXP(shs1));
-		dev_dbg(&client->dev, "set exposure 0x%x, cur_vts 0x%x,shs1 0x%x\n",
-			ctrl->val, imx327->cur_vts, shs1);
+		if (imx327->cur_mode->hdr_mode == NO_HDR) {
+			shs1 = imx327->cur_vts - ctrl->val - 1;
+			ret = imx327_write_reg(imx327->client,
+				IMX327_REG_SHS1_H,
+				IMX327_REG_VALUE_08BIT,
+				IMX327_FETCH_HIGH_BYTE_EXP(shs1));
+			ret |= imx327_write_reg(imx327->client,
+				IMX327_REG_SHS1_M,
+				IMX327_REG_VALUE_08BIT,
+				IMX327_FETCH_MID_BYTE_EXP(shs1));
+			ret |= imx327_write_reg(imx327->client,
+				IMX327_REG_SHS1_L,
+				IMX327_REG_VALUE_08BIT,
+				IMX327_FETCH_LOW_BYTE_EXP(shs1));
+			dev_dbg(&client->dev, "set exposure 0x%x, cur_vts 0x%x,shs1 0x%x\n",
+				ctrl->val, imx327->cur_vts, shs1);
+		}
 		break;
 	case V4L2_CID_ANALOGUE_GAIN:
-		ret = imx327_write_reg(imx327->client,
-			IMX327_REG_LF_GAIN,
-			IMX327_REG_VALUE_08BIT,
-			ctrl->val);
-		dev_dbg(&client->dev, "set analog gain 0x%x\n",
-			ctrl->val);
+		if (imx327->cur_mode->hdr_mode == NO_HDR) {
+			ret = imx327_write_reg(imx327->client,
+				IMX327_REG_LF_GAIN,
+				IMX327_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 + imx327->cur_mode->height;
@@ -1893,7 +1892,7 @@
 
 	ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(endpoint),
 		&imx327->bus_cfg);
-	if (imx327->bus_cfg.bus_type == 3) {
+	if (imx327->bus_cfg.bus_type == V4L2_MBUS_CCP2) {
 		imx327->support_modes = lvds_supported_modes;
 		imx327->support_modes_num = ARRAY_SIZE(lvds_supported_modes);
 	} else {

--
Gitblit v1.6.2