forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/media/i2c/imx464.c
....@@ -10,7 +10,6 @@
1010 * V0.0X01.0X03 support enum sensor fmt
1111 */
1212
13
-//#define DEBUG
1413 #include <linux/clk.h>
1514 #include <linux/device.h>
1615 #include <linux/delay.h>
....@@ -165,14 +164,6 @@
165164 struct regval {
166165 u16 addr;
167166 u8 val;
168
-};
169
-
170
-enum IMX464_max_pad {
171
- PAD0, /* link to isp */
172
- PAD1, /* link to csi wr0 | hdr x2:L x3:M */
173
- PAD2, /* link to csi wr1 | hdr x3:L */
174
- PAD3, /* link to csi wr2 | hdr x2:M x3:S */
175
- PAD_MAX,
176167 };
177168
178169 struct IMX464_mode {
....@@ -1695,14 +1686,12 @@
16951686 struct IMX464 *IMX464 = to_IMX464(sd);
16961687 const struct IMX464_mode *mode = IMX464->cur_mode;
16971688
1698
- mutex_lock(&IMX464->mutex);
16991689 fi->interval = mode->max_fps;
1700
- mutex_unlock(&IMX464->mutex);
17011690
17021691 return 0;
17031692 }
17041693
1705
-static int IMX464_g_mbus_config(struct v4l2_subdev *sd,
1694
+static int IMX464_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad_id,
17061695 struct v4l2_mbus_config *config)
17071696 {
17081697 struct IMX464 *IMX464 = to_IMX464(sd);
....@@ -1727,7 +1716,7 @@
17271716 V4L2_MBUS_CSI2_CHANNEL_1 |
17281717 V4L2_MBUS_CSI2_CHANNEL_2;
17291718
1730
- config->type = V4L2_MBUS_CSI2;
1719
+ config->type = V4L2_MBUS_CSI2_DPHY;
17311720 config->flags = val;
17321721
17331722 return 0;
....@@ -1865,7 +1854,7 @@
18651854 __LINE__, rhs1, s_exp_time, rhs1_old,
18661855 (rhs1_old + 2 * BRL - fsc + 2));
18671856
1868
- rhs1 = (rhs1 >> 2) * 4 + 1;
1857
+ rhs1 = ((rhs1 + 3) >> 2) * 4 + 1;
18691858 rhs1_old = rhs1;
18701859
18711860 if (rhs1 - s_exp_time <= SHR1_MIN) {
....@@ -2287,7 +2276,7 @@
22872276
22882277 static int IMX464_get_channel_info(struct IMX464 *IMX464, struct rkmodule_channel_info *ch_info)
22892278 {
2290
- if (ch_info->index >= PAD_MAX)
2279
+ if (ch_info->index < PAD0 || ch_info->index >= PAD_MAX)
22912280 return -EINVAL;
22922281 ch_info->vc = IMX464->cur_mode->vc[ch_info->index];
22932282 ch_info->width = IMX464->cur_mode->width;
....@@ -2346,8 +2335,7 @@
23462335 IMX464_VTS_MAX - IMX464->cur_mode->height,
23472336 1, h);
23482337 IMX464->cur_vts = IMX464->cur_mode->vts_def;
2349
- pixel_rate = (u32)link_freq_menu_items[IMX464->cur_mode->mipi_freq_idx] /
2350
- IMX464->cur_mode->bpp * 2 *
2338
+ pixel_rate = (u32)link_freq_menu_items[IMX464->cur_mode->mipi_freq_idx] / IMX464->cur_mode->bpp * 2 *
23512339 IMX464->bus_cfg.bus.mipi_csi2.num_data_lanes;
23522340 __v4l2_ctrl_s_ctrl_int64(IMX464->pixel_rate,
23532341 pixel_rate);
....@@ -2875,7 +2863,6 @@
28752863 static const struct v4l2_subdev_video_ops IMX464_video_ops = {
28762864 .s_stream = IMX464_s_stream,
28772865 .g_frame_interval = IMX464_g_frame_interval,
2878
- .g_mbus_config = IMX464_g_mbus_config,
28792866 };
28802867
28812868 static const struct v4l2_subdev_pad_ops IMX464_pad_ops = {
....@@ -2885,6 +2872,7 @@
28852872 .get_fmt = IMX464_get_fmt,
28862873 .set_fmt = IMX464_set_fmt,
28872874 .get_selection = IMX464_get_selection,
2875
+ .get_mbus_config = IMX464_g_mbus_config,
28882876 };
28892877
28902878 static const struct v4l2_subdev_ops IMX464_subdev_ops = {
....@@ -2935,7 +2923,7 @@
29352923 ret |= imx464_write_reg(IMX464->client, IMX464_LF_EXPO_REG_H,
29362924 IMX464_REG_VALUE_08BIT,
29372925 IMX464_FETCH_EXP_H(shr0));
2938
- dev_dbg(&client->dev, "set exposure 0x%x\n",
2926
+ dev_err(&client->dev, "set exposure 0x%x\n",
29392927 ctrl->val);
29402928 }
29412929 break;
....@@ -2947,7 +2935,7 @@
29472935 ret |= imx464_write_reg(IMX464->client, IMX464_LF_GAIN_REG_L,
29482936 IMX464_REG_VALUE_08BIT,
29492937 IMX464_FETCH_GAIN_L(ctrl->val));
2950
- dev_dbg(&client->dev, "set analog gain 0x%x\n",
2938
+ dev_err(&client->dev, "set analog gain 0x%x\n",
29512939 ctrl->val);
29522940 }
29532941 break;
....@@ -2975,7 +2963,8 @@
29752963 IMX464_REG_VALUE_08BIT,
29762964 IMX464_FETCH_VTS_H(vts));
29772965
2978
- dev_dbg(&client->dev, "set vts 0x%x\n", vts);
2966
+ dev_err(&client->dev, "set vts 0x%x\n",
2967
+ vts);
29792968 break;
29802969 case V4L2_CID_HFLIP:
29812970 ret = imx464_write_reg(client,
....@@ -3366,7 +3355,6 @@
33663355
33673356 #if IS_ENABLED(CONFIG_OF)
33683357 static const struct of_device_id IMX464_of_match[] = {
3369
- { .compatible = "sony,IMX464" },
33703358 { .compatible = "sony,imx464" },
33713359 {},
33723360 };
....@@ -3374,7 +3362,6 @@
33743362 #endif
33753363
33763364 static const struct i2c_device_id IMX464_match_id[] = {
3377
- { "sony,IMX464", 0 },
33783365 { "sony,imx464", 0 },
33793366 { },
33803367 };