From a7ac2ee9e515ccf0a91ed6f1dd57915c5bc1b4c6 Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Sun, 1 Dec 2024 17:49:38 +0100 Subject: [PATCH] sensors/pag7936: Add support for MIPI mode. Signed-off-by: iabdalkader --- src/omv/sensors/pag7936.c | 117 ++++++++++++++++++++++++++------------ 1 file changed, 81 insertions(+), 36 deletions(-) diff --git a/src/omv/sensors/pag7936.c b/src/omv/sensors/pag7936.c index 6af637200..7b705eec3 100644 --- a/src/omv/sensors/pag7936.c +++ b/src/omv/sensors/pag7936.c @@ -113,6 +113,47 @@ #endif static const uint16_t default_regs[][2] = { + #if OMV_PAG7936_MIPI_CSI2 + { 0x004C, 0x8D }, + { 0x004D, 0x20 }, + { 0x004E, 0x00 }, + { 0x004F, 0x00 }, + { 0x110A, 0x00 }, + { 0x0905, 0x60 }, + { 0x0978, 0x01 }, + { 0x0979, 0x66 }, + { 0x097C, 0x30 }, + { 0x097D, 0x02 }, + { 0x0985, 0x06 }, + { 0x0989, 0x10 }, + { 0x098B, 0x91 }, + { 0x098E, 0x06 }, + { 0x0850, 0x00 }, + { 0x094A, 0x43 }, + { 0x09A0, 0x08 }, + { 0x0032, 0x00 }, + { 0x0033, 0x00 }, + { 0x0764, 0x00 }, + { 0x0304, 0x30 }, + { 0x0305, 0x03 }, + { 0x0307, 0x10 }, + { 0x0308, 0x05 }, + { 0x0306, 0x04 }, + { 0x0311, 0x00 }, + { 0x030F, 0x01 }, + { 0x0168, 0x6D }, + { 0x0730, 0x78 }, + { 0x0724, 0x20 }, + { 0x0188, 0x14 }, + { 0x02A5, 0xEF }, + { 0x0186, 0x40 }, + { 0x0A1A, 0x20 }, + { 0x0A32, 0x2A }, + { 0x0A33, 0x2A }, + { 0x0A34, 0x0D }, + { 0x0A35, 0x0D }, + { 0x000B, 0x01 }, + #else { 0x010C, 0x23 }, { 0x010D, 0x05 }, { 0x007B, 0x8C }, @@ -121,9 +162,9 @@ static const uint16_t default_regs[][2] = { { 0x007E, 0x8C }, { 0x007F, 0x8C }, { 0x0EAF, 0x31 }, // Interface polarity (Not default) - { 0x004C, 0x1A }, - { 0x004D, 0x41 }, - { 0x004E, 0x00 }, + { 0x004C, 0x1A }, // frame time + { 0x004D, 0x41 }, // ftime + { 0x004E, 0x00 }, // ftime { 0x004F, 0x00 }, { 0x110A, 0x00 }, { 0x0905, 0x60 }, @@ -136,38 +177,7 @@ static const uint16_t default_regs[][2] = { { 0x0985, 0x10 }, { 0x098B, 0x90 }, { 0x098E, 0x06 }, - { 0x0810, 0x01 }, - { 0x0814, 0xB3 }, //R_center_rx[10:0]=691 - { 0x0815, 0x02 }, //R_center_rx[10:0]=691 - { 0x0816, 0xBB }, //R_center_ry[9:0]=443 - { 0x0817, 0x01 }, //R_center_ry[9:0]=443 - { 0x0818, 0xA9 }, //R_center_gx[10:0]=681 - { 0x0819, 0x02 }, //R_center_gx[10:0]=681 - { 0x081A, 0xBB }, //R_center_gy[9:0]=443 - { 0x081B, 0x01 }, //R_center_gy[9:0]=443 - { 0x081C, 0xB0 }, //R_center_bx[10:0]=688 - { 0x081D, 0x02 }, //R_center_bx[10:0]=688 - { 0x081E, 0xBD }, //R_center_by[9:0]=445 - { 0x081F, 0x01 }, //R_center_by[9:0]=445 - { 0x0820, 0x61 }, //R_LSC_RS[7:0]=97 - { 0x0821, 0x5B }, //R_LSC_GS[7:0]=91 - { 0x0822, 0x5F }, //R_LSC_BS[7:0]=95 - { 0x0823, 0x41 }, //R_LSC_RQ[7:0]=65 - { 0x0824, 0x50 }, //R_LSC_GQ[7:0]=80 - { 0x0825, 0x7F }, //R_LSC_BQ[7:0]=127 - { 0x0826, 0x07 }, //R_LSC_SftRS[3:0]=7 - { 0x0827, 0x07 }, //R_LSC_SftGS[3:0]=7 - { 0x0828, 0x07 }, //R_LSC_SftBS[3:0]=7 - { 0x0829, 0x09 }, //R_LSC_SftRQ[3:0]=9 - { 0x082A, 0x09 }, //R_LSC_SftGQ[3:0]=9 - { 0x082B, 0x09 }, //R_LSC_SftBQ[3:0]=9 - { 0x082E, 0xD8 }, //R_LSC_LMaxR2R[15:0]=39640 - { 0x082F, 0x9A }, //R_LSC_LMaxR2R[15:0]=39640 - { 0x0830, 0xD8 }, //R_LSC_LMaxR2G[15:0]=39640 - { 0x0831, 0x9A }, //R_LSC_LMaxR2G[15:0]=39640 - { 0x0832, 0xD8 }, //R_LSC_LMaxR2B[15:0]=39640 - { 0x0833, 0x9A }, //R_LSC_LMaxR2B[15:0]=39640 - { 0x0850, 0x00 }, + { 0x0850, 0x00 }, // TODO BPC { 0x094A, 0x43 }, { 0x09A0, 0x08 }, { 0x0724, 0x10 }, @@ -210,6 +220,41 @@ static const uint16_t default_regs[][2] = { { 0x0A33, 0x2A }, { 0x0A34, 0x0D }, { 0x0A35, 0x0D }, + { 0x000B, 0x02 }, + #endif + { 0x0810, 0x01 }, + { 0x0814, 0xB3 }, //R_center_rx[10:0]=691 + { 0x0815, 0x02 }, //R_center_rx[10:0]=691 + { 0x0816, 0xBB }, //R_center_ry[9:0]=443 + { 0x0817, 0x01 }, //R_center_ry[9:0]=443 + { 0x0818, 0xA9 }, //R_center_gx[10:0]=681 + { 0x0819, 0x02 }, //R_center_gx[10:0]=681 + { 0x081A, 0xBB }, //R_center_gy[9:0]=443 + { 0x081B, 0x01 }, //R_center_gy[9:0]=443 + { 0x081C, 0xB0 }, //R_center_bx[10:0]=688 + { 0x081D, 0x02 }, //R_center_bx[10:0]=688 + { 0x081E, 0xBD }, //R_center_by[9:0]=445 + { 0x081F, 0x01 }, //R_center_by[9:0]=445 + { 0x0820, 0x61 }, //R_LSC_RS[7:0]=97 + { 0x0821, 0x5B }, //R_LSC_GS[7:0]=91 + { 0x0822, 0x5F }, //R_LSC_BS[7:0]=95 + { 0x0823, 0x41 }, //R_LSC_RQ[7:0]=65 + { 0x0824, 0x50 }, //R_LSC_GQ[7:0]=80 + { 0x0825, 0x7F }, //R_LSC_BQ[7:0]=127 + { 0x0826, 0x07 }, //R_LSC_SftRS[3:0]=7 + { 0x0827, 0x07 }, //R_LSC_SftGS[3:0]=7 + { 0x0828, 0x07 }, //R_LSC_SftBS[3:0]=7 + { 0x0829, 0x09 }, //R_LSC_SftRQ[3:0]=9 + { 0x082A, 0x09 }, //R_LSC_SftGQ[3:0]=9 + { 0x082B, 0x09 }, //R_LSC_SftBQ[3:0]=9 + { 0x082E, 0xD8 }, //R_LSC_LMaxR2R[15:0]=39640 + { 0x082F, 0x9A }, //R_LSC_LMaxR2R[15:0]=39640 + { 0x0830, 0xD8 }, //R_LSC_LMaxR2G[15:0]=39640 + { 0x0831, 0x9A }, //R_LSC_LMaxR2G[15:0]=39640 + { 0x0832, 0xD8 }, //R_LSC_LMaxR2B[15:0]=39640 + { 0x0833, 0x9A }, //R_LSC_LMaxR2B[15:0]=39640 + + // WOI { 0x0E10, 0x01 }, { 0x0E11, 0x00 }, { 0x0E12, 0x05 }, @@ -219,8 +264,8 @@ static const uint16_t default_regs[][2] = { { 0x0E16, 0x00 }, { 0x0E17, 0x10 }, { 0x0E18, 0x00 }, + { 0x00EB, 0x80 }, - { 0x000B, 0x02 }, { 0x0030, 0x01 }, { 0x0008, 0x83 }, { 0x0000, 0x00 },