@@ -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 },
@@ -889,6 +890,7 @@ static int gc2145_set_window(const struct device *dev, uint16_t reg, uint16_t x,
889890static int gc2145_set_output_format (const struct device * dev , int output_format )
890891{
891892 int ret ;
893+ uint8_t old_value ;
892894 const struct gc2145_config * cfg = dev -> config ;
893895
894896 ret = gc2145_write_reg (& cfg -> i2c , GC2145_REG_RESET , GC2145_SET_P0_REGS );
@@ -906,7 +908,13 @@ static int gc2145_set_output_format(const struct device *dev, int output_format)
906908 return - ENOTSUP ;
907909 }
908910
909- ret = gc2145_write_reg (& cfg -> i2c , GC2145_REG_OUTPUT_FMT , output_format );
911+ ret = gc2145_read_reg (& cfg -> i2c , GC2145_REG_OUTPUT_FMT , & old_value );
912+ if (ret < 0 ) {
913+ return ret ;
914+ }
915+
916+ ret = gc2145_write_reg (& cfg -> i2c , GC2145_REG_OUTPUT_FMT ,
917+ (old_value & ~GC2145_REG_OUTPUT_FMT_MASK ) | output_format );
910918 if (ret < 0 ) {
911919 return ret ;
912920 }
0 commit comments