@@ -20,6 +20,7 @@ LOG_MODULE_REGISTER(video_gc2145, CONFIG_VIDEO_LOG_LEVEL);
2020#define GC2145_AMODE1_WINDOW_MASK 0xFC
2121#define GC2145_REG_AMODE1_DEF 0x14
2222#define GC2145_REG_OUTPUT_FMT 0x84
23+ #define GC2145_REG_OUTPUT_FMT_MASK 0x1F
2324#define GC2145_REG_OUTPUT_FMT_RGB565 0x06
2425#define GC2145_REG_OUTPUT_FMT_YCBYCR 0x02
2526#define GC2145_REG_SYNC_MODE 0x86
@@ -80,8 +81,8 @@ static const struct gc2145_reg default_regs[] = {
8081 {0x9a , 0x0E }, /* Subsample mode */
8182
8283 {0x12 , 0x2e },
83- {GC2145_REG_OUTPUT_FMT , 0x14 }, /* Analog Mode 1 (vflip/mirror[1:0]) */
84- {0x18 , 0x22 }, /* Analog Mode 2 */
84+ {0x17 , 0x14 }, /* Analog Mode 1 (vflip/mirror[1:0]) */
85+ {0x18 , 0x22 }, /* Analog Mode 2 */
8586 {0x19 , 0x0e },
8687 {0x1a , 0x01 },
8788 {0x1b , 0x4b },
@@ -891,6 +892,7 @@ static int gc2145_set_window(const struct device *dev, uint16_t reg, uint16_t x,
891892static int gc2145_set_output_format (const struct device * dev , int output_format )
892893{
893894 int ret ;
895+ uint8_t old_value ;
894896 const struct gc2145_config * cfg = dev -> config ;
895897
896898 ret = gc2145_write_reg (& cfg -> i2c , GC2145_REG_RESET , GC2145_SET_P0_REGS );
@@ -908,7 +910,13 @@ static int gc2145_set_output_format(const struct device *dev, int output_format)
908910 return - ENOTSUP ;
909911 }
910912
911- ret = gc2145_write_reg (& cfg -> i2c , GC2145_REG_OUTPUT_FMT , output_format );
913+ ret = gc2145_read_reg (& cfg -> i2c , GC2145_REG_OUTPUT_FMT , & old_value );
914+ if (ret < 0 ) {
915+ return ret ;
916+ }
917+
918+ ret = gc2145_write_reg (& cfg -> i2c , GC2145_REG_OUTPUT_FMT ,
919+ (old_value & ~GC2145_REG_OUTPUT_FMT_MASK ) | output_format );
912920 if (ret < 0 ) {
913921 return ret ;
914922 }
0 commit comments