dt-bindings: adv7180: Introduce 'adv,force-bt656-4' property
PATCH v2 1/2 dt-bindings: adv7180: Introduce 'adv,force-bt656-4' property
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,force-bt656-4' property to allow the ADV7280 behavior to be consistent with the ADV7180, where BT.656-4 timing is used by default.
---
Changes since v1:
- Remove the part number from the property name (Rob)
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,force-bt656-4: + description: + Indicates that the output is a BT.656-4 compatible stream. + type: boolean + port: $ref: /schemas/graph.yaml#/properties/port
Signature · 1 line
2.25.1
PATCH v2 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:
- Remove the part number from the property name (Rob)
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,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
Re: [PATCH v2 2/2] media: i2c: adv7180: fix adv7280 BT.656-4 compatibility
Quoted 92 lines · Fabio Estevam
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.Signed-off-by Matthew Michilot <[email protected]>Reviewed-by Tim Harvey <[email protected]>[fabio: Introduce "adv,force-bt656-4" to not affect the existing users]Signed-off-by Fabio Estevam <[email protected]>---
Changes since v1:
- Remove the part number from the property name (Rob)drivers/media/i2c/adv7180.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-)drivers/media/i2c/adv7180.c +26
-5@@ -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,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 ); --
Quoted 1 line
2.25.1
Fabio,
Thanks for the submission. This does resolve NTSC capture on a GW5410-G with an adv7280.
Best regards,
Tim
Re: [PATCH v2 2/2] media: i2c: adv7180: fix adv7280 BT.656-4 compatibility
Hi Hans,
Quoted 7 lines · Tim Harvey
Fabio,
Thanks for the submission. This does resolve NTSC capture on a GW5410-G with an adv7280.
Reviewed-by Tim Harvey <[email protected]>Tested-by Tim Harvey <[email protected]>
Do you think this series could be applied?
Thanks,
Fabio Estevam
Re: [PATCH v2 2/2] media: i2c: adv7180: fix adv7280 BT.656-4 compatibility
Quoted 7 lines · Fabio Estevam
Hi Hans,
Quoted 2 lines · Tim Harvey
Fabio,
Quoted 7 lines
Quoted 5 lines
Thanks for the submission. This does resolve NTSC capture on a GW5410-G with an adv7280.
Reviewed-by Tim Harvey <[email protected]>Tested-by Tim Harvey <[email protected]>Do you think this series could be applied?
A gentle ping.
Thanks
Quoted 8 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,force-bt656-4' property to allow the ADV7280 behavior to be consistent with the ADV7180, where BT.656-4 timing is used by default.
Quoted 8 lines
Signed-off-by Fabio Estevam <[email protected]>---
Changes since v1:
- Remove the part number from the property name (Rob)Documentation/devicetree/bindings/media/i2c/adv7180.yaml | 5 +++++ 1 file changed, 5 insertions(+)