From 83793e9062a9ec7b516434671af6fc46325a61b8 Mon Sep 17 00:00:00 2001 From: Nick Hollinghurst Date: Mon, 29 Jun 2026 14:15:05 +0100 Subject: [PATCH 1/2] media: i2c: imx477: Enable HSYNC output on GPO when trigger_mode=1 This is for test purposes only (it is not needed for camera sync). Signed-off-by: Nick Hollinghurst --- drivers/media/i2c/imx477.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/drivers/media/i2c/imx477.c b/drivers/media/i2c/imx477.c index 04a77d41f08373..24c9c12b79efe2 100644 --- a/drivers/media/i2c/imx477.c +++ b/drivers/media/i2c/imx477.c @@ -146,6 +146,13 @@ MODULE_PARM_DESC(fstrobe_delay, "Set fstrobe delay from end all lines starting t #define IMX477_REG_XVS_IO_CTRL CCI_REG8(0x3040) #define IMX477_REG_EXTOUT_EN CCI_REG8(0x4b81) +/* Horizontal sync output */ +#define IMX477_REG_OUTIF2 CCI_REG8(0x428a) +#define IMX477_REG_CKTESTSEL CCI_REG8(0x42b0) +#define IMX477_REG_MNTTEST3_SEL_H CCI_REG8(0x4bdc) +#define IMX477_REG_MNTTEST3_SEL_L CCI_REG8(0x4bdd) +#define IMX477_REG_TESTMNT2 CCI_REG8(0x42aa) + #define IMX477_REG_ADBIT_MODE CCI_REG8(0x3f0d) /* Temperature sensor */ #define IMX477_REG_TEMP_SEN_CTL CCI_REG8(0x0138) @@ -1655,6 +1662,18 @@ static int imx477_start_streaming(struct imx477 *imx477) &ret); cci_write(imx477->regmap, IMX477_REG_MC_MODE, (tm > 0) ? 1 : 0, &ret); + /* in trigger mode 1 we also enable hsync output, for test use only */ + if (tm == 1) { + cci_write(imx477->regmap, IMX477_REG_OUTIF2, 0, &ret); + cci_write(imx477->regmap, IMX477_REG_MNTTEST3_SEL_H, 0, + &ret); + cci_write(imx477->regmap, IMX477_REG_MNTTEST3_SEL_L, 0x15, + &ret); + cci_write(imx477->regmap, IMX477_REG_TESTMNT2, 0xfd, &ret); + } + cci_write(imx477->regmap, IMX477_REG_CKTESTSEL, (tm == 1) ? 0 : 7, + &ret); + /* set stream on register */ cci_write(imx477->regmap, IMX477_REG_MODE_SELECT, IMX477_MODE_STREAMING, &ret); From 9ba2e7165d3337dd2f8c6758cbdf111ef867cf25 Mon Sep 17 00:00:00 2001 From: Nick Hollinghurst Date: Tue, 30 Jun 2026 12:10:26 +0100 Subject: [PATCH 2/2] media: i2c: imx477: Enable HSYNC output on GPO unconditionally Test version. Possibly this should be gated by a module parameter? To squash, rework or drop. --- drivers/media/i2c/imx477.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/drivers/media/i2c/imx477.c b/drivers/media/i2c/imx477.c index 24c9c12b79efe2..4016f98ef71957 100644 --- a/drivers/media/i2c/imx477.c +++ b/drivers/media/i2c/imx477.c @@ -545,6 +545,10 @@ static const struct cci_reg_sequence mode_common_regs[] = { {CCI_REG8(0x3e20), 0x01}, {CCI_REG8(0x3e37), 0x00}, {CCI_REG8(0x3f50), 0x00}, + {CCI_REG8(IMX477_REG_OUTIF2), 0x00}, + {CCI_REG8(IMX477_REG_MNTTEST3_SEL_H), 0x00}, + {CCI_REG8(IMX477_REG_MNTTEST3_SEL_L), 0x15}, + {CCI_REG8(IMX477_REG_TESTMNT2), 0xfd}, }; /* 12 mpix 10fps */ @@ -1662,17 +1666,8 @@ static int imx477_start_streaming(struct imx477 *imx477) &ret); cci_write(imx477->regmap, IMX477_REG_MC_MODE, (tm > 0) ? 1 : 0, &ret); - /* in trigger mode 1 we also enable hsync output, for test use only */ - if (tm == 1) { - cci_write(imx477->regmap, IMX477_REG_OUTIF2, 0, &ret); - cci_write(imx477->regmap, IMX477_REG_MNTTEST3_SEL_H, 0, - &ret); - cci_write(imx477->regmap, IMX477_REG_MNTTEST3_SEL_L, 0x15, - &ret); - cci_write(imx477->regmap, IMX477_REG_TESTMNT2, 0xfd, &ret); - } - cci_write(imx477->regmap, IMX477_REG_CKTESTSEL, (tm == 1) ? 0 : 7, - &ret); + /* unconditionally enable hsync output, for test use only */ + cci_write(imx477->regmap, IMX477_REG_CKTESTSEL, 0, &ret); /* set stream on register */ cci_write(imx477->regmap, IMX477_REG_MODE_SELECT,