ImmortalWrt/target/linux/bcm27xx/patches-5.15/950-0727-media-i2c-ov7251-V4L2_CID_PIXEL_RATE-is-fixed.patch
Álvaro Fernández Rojas 20ea6adbf1 bcm27xx: add support for linux v5.15
Build system: x86_64
Build-tested: bcm2708, bcm2709, bcm2710, bcm2711
Run-tested: bcm2708/RPiB+, bcm2709/RPi3B, bcm2710/RPi3B, bcm2711/RPi4B

Signed-off-by: Marty Jones <mj8263788@gmail.com>
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
2022-05-17 15:11:22 +02:00

105 lines
3.4 KiB
Diff

From 1fbe6c846412c7c114f599fef881366f1e81ef9c Mon Sep 17 00:00:00 2001
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
Date: Sat, 12 Feb 2022 09:47:38 +0000
Subject: [PATCH] media: i2c: ov7251: V4L2_CID_PIXEL_RATE is fixed
The pixel rate doesn't actually change based on the mode, and
can not be set by userspace.
Fix the control. The control is already read only as set by the core.
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
---
drivers/media/i2c/ov7251.c | 24 +++++-------------------
1 file changed, 5 insertions(+), 19 deletions(-)
--- a/drivers/media/i2c/ov7251.c
+++ b/drivers/media/i2c/ov7251.c
@@ -54,6 +54,8 @@
#define OV7251_PLL2_SYS_DIV_REG 0x309a
#define OV7251_PLL2_ADC_DIV_REG 0x309b
+#define OV7251_PIXEL_CLOCK 48000000
+
struct reg_value {
u16 reg;
u8 val;
@@ -64,7 +66,6 @@ struct ov7251_mode_info {
u32 height;
const struct reg_value *data;
u32 data_size;
- u32 pixel_clock;
u32 link_freq;
u16 exposure_max;
u16 exposure_def;
@@ -112,7 +113,6 @@ struct ov7251 {
const struct ov7251_mode_info *current_mode;
struct v4l2_ctrl_handler ctrls;
- struct v4l2_ctrl *pixel_clock;
struct v4l2_ctrl *link_freq;
struct v4l2_ctrl *exposure;
struct v4l2_ctrl *gain;
@@ -591,7 +591,6 @@ static const struct ov7251_mode_info ov7
.height = 480,
.data = ov7251_setting_vga_30fps,
.data_size = ARRAY_SIZE(ov7251_setting_vga_30fps),
- .pixel_clock = 48000000,
.link_freq = 0, /* an index in link_freq[] */
.exposure_max = 1704,
.exposure_def = 504,
@@ -605,7 +604,6 @@ static const struct ov7251_mode_info ov7
.height = 480,
.data = ov7251_setting_vga_60fps,
.data_size = ARRAY_SIZE(ov7251_setting_vga_60fps),
- .pixel_clock = 48000000,
.link_freq = 0, /* an index in link_freq[] */
.exposure_max = 840,
.exposure_def = 504,
@@ -619,7 +617,6 @@ static const struct ov7251_mode_info ov7
.height = 480,
.data = ov7251_setting_vga_90fps,
.data_size = ARRAY_SIZE(ov7251_setting_vga_90fps),
- .pixel_clock = 48000000,
.link_freq = 0, /* an index in link_freq[] */
.exposure_max = 552,
.exposure_def = 504,
@@ -1155,11 +1152,6 @@ static int ov7251_set_format(struct v4l2
__crop->height = new_mode->height;
if (format->which == V4L2_SUBDEV_FORMAT_ACTIVE) {
- ret = __v4l2_ctrl_s_ctrl_int64(ov7251->pixel_clock,
- new_mode->pixel_clock);
- if (ret < 0)
- goto exit;
-
ret = __v4l2_ctrl_s_ctrl(ov7251->link_freq,
new_mode->link_freq);
if (ret < 0)
@@ -1319,11 +1311,6 @@ static int ov7251_set_frame_interval(str
new_mode = ov7251_find_mode_by_ival(ov7251, &fi->interval);
if (new_mode != ov7251->current_mode) {
- ret = __v4l2_ctrl_s_ctrl_int64(ov7251->pixel_clock,
- new_mode->pixel_clock);
- if (ret < 0)
- goto exit;
-
ret = __v4l2_ctrl_s_ctrl(ov7251->link_freq,
new_mode->link_freq);
if (ret < 0)
@@ -1571,10 +1558,9 @@ static int ov7251_probe(struct i2c_clien
V4L2_CID_TEST_PATTERN,
ARRAY_SIZE(ov7251_test_pattern_menu) - 1,
0, 0, ov7251_test_pattern_menu);
- ov7251->pixel_clock = v4l2_ctrl_new_std(&ov7251->ctrls,
- &ov7251_ctrl_ops,
- V4L2_CID_PIXEL_RATE,
- 1, INT_MAX, 1, 1);
+ v4l2_ctrl_new_std(&ov7251->ctrls, &ov7251_ctrl_ops,
+ V4L2_CID_PIXEL_RATE, OV7251_PIXEL_CLOCK,
+ OV7251_PIXEL_CLOCK, 1, OV7251_PIXEL_CLOCK);
ov7251->link_freq = v4l2_ctrl_new_int_menu(&ov7251->ctrls,
&ov7251_ctrl_ops,
V4L2_CID_LINK_FREQ,