From 9370bb92b2d16684ee45cf24e879c93c509162da Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Thu, 19 Dec 2024 01:47:39 +0000
Subject: [PATCH] add wifi6 8852be driver

---
 kernel/drivers/media/i2c/os05a20.c |   23 +++++++----------------
 1 files changed, 7 insertions(+), 16 deletions(-)

diff --git a/kernel/drivers/media/i2c/os05a20.c b/kernel/drivers/media/i2c/os05a20.c
index b8addf7..f399814 100644
--- a/kernel/drivers/media/i2c/os05a20.c
+++ b/kernel/drivers/media/i2c/os05a20.c
@@ -106,14 +106,6 @@
 #define MIRROR_BIT_MASK			BIT(2)
 #define FLIP_BIT_MASK			BIT(2)
 
-enum os05a20_max_pad {
-	PAD0,
-	PAD1,
-	PAD2,
-	PAD3,
-	PAD_MAX,
-};
-
 struct regval {
 	u16 addr;
 	u8 val;
@@ -682,7 +674,7 @@
 		.vc[PAD0] = V4L2_MBUS_CSI2_CHANNEL_1,
 		.vc[PAD1] = V4L2_MBUS_CSI2_CHANNEL_0,//L->csi wr0
 		.vc[PAD2] = V4L2_MBUS_CSI2_CHANNEL_1,
-		.vc[PAD3] = V4L2_MBUS_CSI2_CHANNEL_1,//M->csi wr2 //����̶���֡
+		.vc[PAD3] = V4L2_MBUS_CSI2_CHANNEL_1,//M->csi wr2
 	},
 };
 
@@ -928,14 +920,12 @@
 	struct os05a20 *os05a20 = to_os05a20(sd);
 	const struct os05a20_mode *mode = os05a20->cur_mode;
 
-	mutex_lock(&os05a20->mutex);
 	fi->interval = mode->max_fps;
-	mutex_unlock(&os05a20->mutex);
 
 	return 0;
 }
 
-static int os05a20_g_mbus_config(struct v4l2_subdev *sd,
+static int os05a20_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad_id,
 				struct v4l2_mbus_config *config)
 {
 	struct os05a20 *os05a20 = to_os05a20(sd);
@@ -952,7 +942,7 @@
 		V4L2_MBUS_CSI2_CONTINUOUS_CLOCK |
 		V4L2_MBUS_CSI2_CHANNEL_1;
 
-	config->type = V4L2_MBUS_CSI2;
+	config->type = V4L2_MBUS_CSI2_DPHY;
 	config->flags = val;
 
 	return 0;
@@ -1526,7 +1516,6 @@
 static const struct v4l2_subdev_video_ops os05a20_video_ops = {
 	.s_stream = os05a20_s_stream,
 	.g_frame_interval = os05a20_g_frame_interval,
-	.g_mbus_config = os05a20_g_mbus_config,
 };
 
 static const struct v4l2_subdev_pad_ops os05a20_pad_ops = {
@@ -1535,6 +1524,7 @@
 	.enum_frame_interval = os05a20_enum_frame_interval,
 	.get_fmt = os05a20_get_fmt,
 	.set_fmt = os05a20_set_fmt,
+	.get_mbus_config = os05a20_g_mbus_config,
 };
 
 static const struct v4l2_subdev_ops os05a20_subdev_ops = {
@@ -1573,7 +1563,7 @@
 	switch (ctrl->id) {
 	case V4L2_CID_EXPOSURE:
 		if (os05a20->cur_mode->hdr_mode != NO_HDR)
-			return 0;
+			goto ctrl_end;
 		ret = os05a20_write_reg(os05a20->client,
 					OS05A20_REG_EXP_LONG_H,
 					OS05A20_REG_VALUE_16BIT,
@@ -1583,7 +1573,7 @@
 		break;
 	case V4L2_CID_ANALOGUE_GAIN:
 		if (os05a20->cur_mode->hdr_mode != NO_HDR)
-			return 0;
+			goto ctrl_end;
 		if (ctrl->val > 1984) {// >15.5x
 			dgain = ctrl->val * 10 / 155;
 			again = 1984;
@@ -1642,6 +1632,7 @@
 		break;
 	}
 
+ctrl_end:
 	pm_runtime_put(&client->dev);
 
 	return ret;

--
Gitblit v1.6.2