]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: adv7180: Disable test-pattern control on adv7180
authorNiklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Fri, 21 Feb 2025 23:09:07 +0000 (00:09 +0100)
committerHans Verkuil <hverkuil@xs4all.nl>
Tue, 25 Feb 2025 08:14:05 +0000 (09:14 +0100)
The register that enables selecting a test-pattern to be outputted in
free-run mode (FREE_RUN_PAT_SEL[2:0]) is only available on adv7280 based
devices, not the adv7180 based ones.

Add a flag to mark devices that are capable of generating test-patterns,
and those that are not. And only register the control on supported
devices.

Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
drivers/media/i2c/adv7180.c

index ff7dfa0278a7a0fa5aaad0007f78fe6d51bf878d..6e50b14f888f1d9cbcf1b8fec9135cc04278cf68 100644 (file)
@@ -195,6 +195,7 @@ struct adv7180_state;
 #define ADV7180_FLAG_V2                        BIT(1)
 #define ADV7180_FLAG_MIPI_CSI2         BIT(2)
 #define ADV7180_FLAG_I2P               BIT(3)
+#define ADV7180_FLAG_TEST_PATTERN      BIT(4)
 
 struct adv7180_chip_info {
        unsigned int flags;
@@ -682,11 +683,15 @@ static int adv7180_init_controls(struct adv7180_state *state)
                          ADV7180_HUE_MAX, 1, ADV7180_HUE_DEF);
        v4l2_ctrl_new_custom(&state->ctrl_hdl, &adv7180_ctrl_fast_switch, NULL);
 
-       v4l2_ctrl_new_std_menu_items(&state->ctrl_hdl, &adv7180_ctrl_ops,
-                                     V4L2_CID_TEST_PATTERN,
-                                     ARRAY_SIZE(test_pattern_menu) - 1,
-                                     0, ARRAY_SIZE(test_pattern_menu) - 1,
-                                     test_pattern_menu);
+       if (state->chip_info->flags & ADV7180_FLAG_TEST_PATTERN) {
+               v4l2_ctrl_new_std_menu_items(&state->ctrl_hdl,
+                                            &adv7180_ctrl_ops,
+                                            V4L2_CID_TEST_PATTERN,
+                                            ARRAY_SIZE(test_pattern_menu) - 1,
+                                            0,
+                                            ARRAY_SIZE(test_pattern_menu) - 1,
+                                            test_pattern_menu);
+       }
 
        state->sd.ctrl_handler = &state->ctrl_hdl;
        if (state->ctrl_hdl.error) {
@@ -1221,7 +1226,7 @@ static const struct adv7180_chip_info adv7182_info = {
 };
 
 static const struct adv7180_chip_info adv7280_info = {
-       .flags = ADV7180_FLAG_V2 | ADV7180_FLAG_I2P,
+       .flags = ADV7180_FLAG_V2 | ADV7180_FLAG_I2P | ADV7180_FLAG_TEST_PATTERN,
        .valid_input_mask = BIT(ADV7182_INPUT_CVBS_AIN1) |
                BIT(ADV7182_INPUT_CVBS_AIN2) |
                BIT(ADV7182_INPUT_CVBS_AIN3) |
@@ -1235,7 +1240,8 @@ static const struct adv7180_chip_info adv7280_info = {
 };
 
 static const struct adv7180_chip_info adv7280_m_info = {
-       .flags = ADV7180_FLAG_V2 | ADV7180_FLAG_MIPI_CSI2 | ADV7180_FLAG_I2P,
+       .flags = ADV7180_FLAG_V2 | ADV7180_FLAG_MIPI_CSI2 | ADV7180_FLAG_I2P |
+               ADV7180_FLAG_TEST_PATTERN,
        .valid_input_mask = BIT(ADV7182_INPUT_CVBS_AIN1) |
                BIT(ADV7182_INPUT_CVBS_AIN2) |
                BIT(ADV7182_INPUT_CVBS_AIN3) |
@@ -1256,7 +1262,8 @@ static const struct adv7180_chip_info adv7280_m_info = {
 };
 
 static const struct adv7180_chip_info adv7281_info = {
-       .flags = ADV7180_FLAG_V2 | ADV7180_FLAG_MIPI_CSI2,
+       .flags = ADV7180_FLAG_V2 | ADV7180_FLAG_MIPI_CSI2 |
+               ADV7180_FLAG_TEST_PATTERN,
        .valid_input_mask = BIT(ADV7182_INPUT_CVBS_AIN1) |
                BIT(ADV7182_INPUT_CVBS_AIN2) |
                BIT(ADV7182_INPUT_CVBS_AIN7) |
@@ -1271,7 +1278,8 @@ static const struct adv7180_chip_info adv7281_info = {
 };
 
 static const struct adv7180_chip_info adv7281_m_info = {
-       .flags = ADV7180_FLAG_V2 | ADV7180_FLAG_MIPI_CSI2,
+       .flags = ADV7180_FLAG_V2 | ADV7180_FLAG_MIPI_CSI2 |
+               ADV7180_FLAG_TEST_PATTERN,
        .valid_input_mask = BIT(ADV7182_INPUT_CVBS_AIN1) |
                BIT(ADV7182_INPUT_CVBS_AIN2) |
                BIT(ADV7182_INPUT_CVBS_AIN3) |
@@ -1291,7 +1299,8 @@ static const struct adv7180_chip_info adv7281_m_info = {
 };
 
 static const struct adv7180_chip_info adv7281_ma_info = {
-       .flags = ADV7180_FLAG_V2 | ADV7180_FLAG_MIPI_CSI2,
+       .flags = ADV7180_FLAG_V2 | ADV7180_FLAG_MIPI_CSI2 |
+               ADV7180_FLAG_TEST_PATTERN,
        .valid_input_mask = BIT(ADV7182_INPUT_CVBS_AIN1) |
                BIT(ADV7182_INPUT_CVBS_AIN2) |
                BIT(ADV7182_INPUT_CVBS_AIN3) |
@@ -1316,7 +1325,7 @@ static const struct adv7180_chip_info adv7281_ma_info = {
 };
 
 static const struct adv7180_chip_info adv7282_info = {
-       .flags = ADV7180_FLAG_V2 | ADV7180_FLAG_I2P,
+       .flags = ADV7180_FLAG_V2 | ADV7180_FLAG_I2P | ADV7180_FLAG_TEST_PATTERN,
        .valid_input_mask = BIT(ADV7182_INPUT_CVBS_AIN1) |
                BIT(ADV7182_INPUT_CVBS_AIN2) |
                BIT(ADV7182_INPUT_CVBS_AIN7) |
@@ -1331,7 +1340,8 @@ static const struct adv7180_chip_info adv7282_info = {
 };
 
 static const struct adv7180_chip_info adv7282_m_info = {
-       .flags = ADV7180_FLAG_V2 | ADV7180_FLAG_MIPI_CSI2 | ADV7180_FLAG_I2P,
+       .flags = ADV7180_FLAG_V2 | ADV7180_FLAG_MIPI_CSI2 | ADV7180_FLAG_I2P |
+               ADV7180_FLAG_TEST_PATTERN,
        .valid_input_mask = BIT(ADV7182_INPUT_CVBS_AIN1) |
                BIT(ADV7182_INPUT_CVBS_AIN2) |
                BIT(ADV7182_INPUT_CVBS_AIN3) |