dt-bindings: adv7180: Introduce adv,adv7182-force-bt656-4
PATCH 1/2 dt-bindings: adv7180: Introduce adv,adv7182-force-bt656-4
Captured NTSC video would be out of sync when using the adv7280 with the BT.656-4 protocol. Certain registers (0x04, 0x31, 0xE6) need to be configured properly to ensure BT.656-4 compatibility.
Introduce the 'adv,adv7182-force-bt656-4' property to allow the ADV7280 behavior to be consistent with the ADV7180, where BT.656-4 timing is used.
--- Documentation/devicetree/bindings/media/i2c/adv7180.yaml | 5 +++++ 1 file changed, 5 insertions(+)
Documentation/devicetree/bindings/media/i2c/adv7180.yaml +5 -0
@@ -35,6 +35,11 @@ properties: powerdown-gpios: maxItems: 1 + adv,adv7182-force-bt656-4: + description: + Indicates that ADV7182 should output a BT.656-4 compatible stream. + type: boolean + port: $ref: /schemas/graph.yaml#/properties/port
Signature · 1 line
2.25.1
PATCH 2/2 media: i2c: adv7180: fix adv7280 BT.656-4 compatibility
From: Matthew Michilot <[email protected]>
Captured video would be out of sync when using the adv7280 with the BT.656-4 protocol. Certain registers (0x04, 0x31, 0xE6) had to be configured properly to ensure BT.656-4 compatibility.
An error in the adv7280 reference manual suggested that EAV/SAV mode was enabled by default, however upon inspecting register 0x31, it was determined to be disabled by default.
---
Changes since v1:
- Only force BT656-4 when the DT property is present.
drivers/media/i2c/adv7180.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-)
drivers/media/i2c/adv7180.c +26 -4
@@ -94,6 +94,7 @@#define ADV7180_REG_SHAP_FILTER_CTL_1 0x0017#define ADV7180_REG_CTRL_2 0x001d#define ADV7180_REG_VSYNC_FIELD_CTL_1 0x0031 +#define ADV7180_VSYNC_FIELD_CTL_1_NEWAV 0x12#define ADV7180_REG_MANUAL_WIN_CTL_1 0x003d#define ADV7180_REG_MANUAL_WIN_CTL_2 0x003e#define ADV7180_REG_MANUAL_WIN_CTL_3 0x003f
@@ -216,6 +217,7 @@ struct adv7180_state {struct i2c_client *vpp_client;const struct adv7180_chip_info *chip_info;enum v4l2_field field; +bool force_bt656_4; };#define to_adv7180_sd (_ctrl) (&container_of(_ctrl->handler, \ struct adv7180_state, \
@@ -963,10 +965,26 @@ static int adv7182_init(struct adv7180_state *state)adv7180_write (state,ADV7180_REG_EXTENDED_OUTPUT_CONTROL ,0x57 );adv7180_write (state,ADV7180_REG_CTRL_2 ,0xc0 ); }else { -if (state->chip_info->flags &ADV7180_FLAG_V2 ) -adv7180_write (state, -ADV7180_REG_EXTENDED_OUTPUT_CONTROL , -0x17 ); +if (state->chip_info->flags &ADV7180_FLAG_V2 ) { +if (state->force_bt656_4) { +/* ITU-R BT.656-4 compatible */ +adv7180_write (state, +ADV7180_REG_EXTENDED_OUTPUT_CONTROL , +ADV7180_EXTENDED_OUTPUT_CONTROL_NTSCDIS ); +/* Manually set NEWAVMODE */ +adv7180_write (state, +ADV7180_REG_VSYNC_FIELD_CTL_1 , +ADV7180_VSYNC_FIELD_CTL_1_NEWAV ); +/* Manually set V bit end position in NTSC mode */ +adv7180_write (state, +ADV7180_REG_NTSC_V_BIT_END , +ADV7180_NTSC_V_BIT_END_MANUAL_NVEND ); + }else { +adv7180_write (state, +ADV7180_REG_EXTENDED_OUTPUT_CONTROL , +0x17 ); + } + }else adv7180_write(state, ADV7180_REG_EXTENDED_OUTPUT_CONTROL,
@@ -1314,6 +1332,7 @@ static int init_device(struct adv7180_state *state)static int adv7180_probe (struct i2c_client *client,const struct i2c_device_id *id) { +struct device_node *np = client->dev.of_node;struct adv7180_state *state;struct v4l2_subdev *sd;int ret;
@@ -1338,6 +1357,9 @@ static int adv7180_probe(struct i2c_client *client,return ret; } +if (of_property_read_bool (np,"adv,adv7182-force-bt656-4" )) + state->force_bt656_4 = true; +if (state->chip_info->flags &ADV7180_FLAG_MIPI_CSI2 ) { state->csi_client =i2c_new_dummy_device (client->adapter,ADV7180_DEFAULT_CSI_I2C_ADDR );
Signature · 1 line
2.25.1
Rob Herring
maintainerQuoted 7 lines · Fabio Estevam
Captured NTSC video would be out of sync when using the adv7280 with the BT.656-4 protocol. Certain registers (
0x04,0x31,0xE6) need to be configured properly to ensure BT.656-4 compatibility.Introduce the 'adv,adv7182-force-bt656-4' property to allow the ADV7280 behavior to be consistent with the ADV7180, where BT.656-4 timing is used.
I'm confused by the part numbers. 7182 or 7280? In any case, I'd just drop the part number from the property name.
Quoted 24 lines
Signed-off-by Fabio Estevam <[email protected]>--- Documentation/devicetree/bindings/media/i2c/adv7180.yaml | 5 +++++ 1 file changed, 5 insertions(+)Documentation/devicetree/bindings/media/i2c/adv7180.yaml +5
-0@@ -35,6 +35,11 @@ properties: powerdown-gpios: maxItems: 1 + adv,adv7182-force-bt656-4: + description: + Indicates that ADV7182 should output a BT.656-4 compatible stream. + type: boolean + port: $ref: /schemas/graph.yaml#/properties/portSignature · 1 line
2.25.1
Hi Rob,
Quoted 2 lines · Rob Herring
I'm confused by the part numbers. 7182 or 7280? In any case, I'd just drop the part number from the property name.
Yes, dropping the part number from the property name is less confusing.
Will do as suggested in v2.
Thanks