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/imx464.c | 33 ++++++++++----------------------- 1 files changed, 10 insertions(+), 23 deletions(-) diff --git a/kernel/drivers/media/i2c/imx464.c b/kernel/drivers/media/i2c/imx464.c index 8d6c04b..142550a 100644 --- a/kernel/drivers/media/i2c/imx464.c +++ b/kernel/drivers/media/i2c/imx464.c @@ -10,7 +10,6 @@ * V0.0X01.0X03 support enum sensor fmt */ -//#define DEBUG #include <linux/clk.h> #include <linux/device.h> #include <linux/delay.h> @@ -165,14 +164,6 @@ struct regval { u16 addr; u8 val; -}; - -enum IMX464_max_pad { - PAD0, /* link to isp */ - PAD1, /* link to csi wr0 | hdr x2:L x3:M */ - PAD2, /* link to csi wr1 | hdr x3:L */ - PAD3, /* link to csi wr2 | hdr x2:M x3:S */ - PAD_MAX, }; struct IMX464_mode { @@ -1695,14 +1686,12 @@ struct IMX464 *IMX464 = to_IMX464(sd); const struct IMX464_mode *mode = IMX464->cur_mode; - mutex_lock(&IMX464->mutex); fi->interval = mode->max_fps; - mutex_unlock(&IMX464->mutex); return 0; } -static int IMX464_g_mbus_config(struct v4l2_subdev *sd, +static int IMX464_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad_id, struct v4l2_mbus_config *config) { struct IMX464 *IMX464 = to_IMX464(sd); @@ -1727,7 +1716,7 @@ V4L2_MBUS_CSI2_CHANNEL_1 | V4L2_MBUS_CSI2_CHANNEL_2; - config->type = V4L2_MBUS_CSI2; + config->type = V4L2_MBUS_CSI2_DPHY; config->flags = val; return 0; @@ -1865,7 +1854,7 @@ __LINE__, rhs1, s_exp_time, rhs1_old, (rhs1_old + 2 * BRL - fsc + 2)); - rhs1 = (rhs1 >> 2) * 4 + 1; + rhs1 = ((rhs1 + 3) >> 2) * 4 + 1; rhs1_old = rhs1; if (rhs1 - s_exp_time <= SHR1_MIN) { @@ -2287,7 +2276,7 @@ static int IMX464_get_channel_info(struct IMX464 *IMX464, struct rkmodule_channel_info *ch_info) { - if (ch_info->index >= PAD_MAX) + if (ch_info->index < PAD0 || ch_info->index >= PAD_MAX) return -EINVAL; ch_info->vc = IMX464->cur_mode->vc[ch_info->index]; ch_info->width = IMX464->cur_mode->width; @@ -2346,8 +2335,7 @@ IMX464_VTS_MAX - IMX464->cur_mode->height, 1, h); IMX464->cur_vts = IMX464->cur_mode->vts_def; - pixel_rate = (u32)link_freq_menu_items[IMX464->cur_mode->mipi_freq_idx] / - IMX464->cur_mode->bpp * 2 * + pixel_rate = (u32)link_freq_menu_items[IMX464->cur_mode->mipi_freq_idx] / IMX464->cur_mode->bpp * 2 * IMX464->bus_cfg.bus.mipi_csi2.num_data_lanes; __v4l2_ctrl_s_ctrl_int64(IMX464->pixel_rate, pixel_rate); @@ -2875,7 +2863,6 @@ static const struct v4l2_subdev_video_ops IMX464_video_ops = { .s_stream = IMX464_s_stream, .g_frame_interval = IMX464_g_frame_interval, - .g_mbus_config = IMX464_g_mbus_config, }; static const struct v4l2_subdev_pad_ops IMX464_pad_ops = { @@ -2885,6 +2872,7 @@ .get_fmt = IMX464_get_fmt, .set_fmt = IMX464_set_fmt, .get_selection = IMX464_get_selection, + .get_mbus_config = IMX464_g_mbus_config, }; static const struct v4l2_subdev_ops IMX464_subdev_ops = { @@ -2935,7 +2923,7 @@ ret |= imx464_write_reg(IMX464->client, IMX464_LF_EXPO_REG_H, IMX464_REG_VALUE_08BIT, IMX464_FETCH_EXP_H(shr0)); - dev_dbg(&client->dev, "set exposure 0x%x\n", + dev_err(&client->dev, "set exposure 0x%x\n", ctrl->val); } break; @@ -2947,7 +2935,7 @@ ret |= imx464_write_reg(IMX464->client, IMX464_LF_GAIN_REG_L, IMX464_REG_VALUE_08BIT, IMX464_FETCH_GAIN_L(ctrl->val)); - dev_dbg(&client->dev, "set analog gain 0x%x\n", + dev_err(&client->dev, "set analog gain 0x%x\n", ctrl->val); } break; @@ -2975,7 +2963,8 @@ IMX464_REG_VALUE_08BIT, IMX464_FETCH_VTS_H(vts)); - dev_dbg(&client->dev, "set vts 0x%x\n", vts); + dev_err(&client->dev, "set vts 0x%x\n", + vts); break; case V4L2_CID_HFLIP: ret = imx464_write_reg(client, @@ -3366,7 +3355,6 @@ #if IS_ENABLED(CONFIG_OF) static const struct of_device_id IMX464_of_match[] = { - { .compatible = "sony,IMX464" }, { .compatible = "sony,imx464" }, {}, }; @@ -3374,7 +3362,6 @@ #endif static const struct i2c_device_id IMX464_match_id[] = { - { "sony,IMX464", 0 }, { "sony,imx464", 0 }, { }, }; -- Gitblit v1.6.2