12
12
#include <zephyr/logging/log.h>
13
13
#include <zephyr/sys/byteorder.h>
14
14
#include <zephyr/drivers/video.h>
15
+ #include <zephyr/drivers/video-controls.h>
15
16
#include <zephyr/drivers/i2c.h>
16
17
17
18
LOG_MODULE_REGISTER (video_mt9m114 , CONFIG_VIDEO_LOG_LEVEL );
@@ -31,6 +32,7 @@ LOG_MODULE_REGISTER(video_mt9m114, CONFIG_VIDEO_LOG_LEVEL);
31
32
#define MT9M114_CAM_SENSOR_CFG_Y_ADDR_END 0xC804
32
33
#define MT9M114_CAM_SENSOR_CFG_X_ADDR_END 0xC806
33
34
#define MT9M114_CAM_SENSOR_CFG_CPIPE_LAST_ROW 0xC818
35
+ #define MT9M114_CAM_SENSOR_CTRL_READ_MODE 0xC834
34
36
#define MT9M114_CAM_CROP_WINDOW_WIDTH 0xC858
35
37
#define MT9M114_CAM_CROP_WINDOW_HEIGHT 0xC85A
36
38
#define MT9M114_CAM_OUTPUT_WIDTH 0xC868
@@ -53,6 +55,10 @@ LOG_MODULE_REGISTER(video_mt9m114, CONFIG_VIDEO_LOG_LEVEL);
53
55
#define MT9M114_CAM_OUTPUT_FORMAT_FORMAT_YUV (0 << 8)
54
56
#define MT9M114_CAM_OUTPUT_FORMAT_FORMAT_RGB (1 << 8)
55
57
58
+ /* Camera control masks */
59
+ #define MT9M114_CAM_SENSOR_CTRL_HORZ_FLIP_EN BIT(0)
60
+ #define MT9M114_CAM_SENSOR_CTRL_VERT_FLIP_EN BIT(1)
61
+
56
62
struct mt9m114_config {
57
63
struct i2c_dt_spec i2c ;
58
64
};
@@ -462,12 +468,40 @@ static int mt9m114_get_caps(const struct device *dev, enum video_endpoint_id ep,
462
468
return 0 ;
463
469
}
464
470
471
+ static int mt9m114_set_ctrl (const struct device * dev , unsigned int cid , void * value )
472
+ {
473
+ int ret = 0 ;
474
+
475
+ switch (cid ) {
476
+ case VIDEO_CID_HFLIP :
477
+ ret = mt9m114_modify_reg (dev , MT9M114_CAM_SENSOR_CTRL_READ_MODE , 2 ,
478
+ MT9M114_CAM_SENSOR_CTRL_HORZ_FLIP_EN ,
479
+ (int )value ? MT9M114_CAM_SENSOR_CTRL_HORZ_FLIP_EN : 0 );
480
+ break ;
481
+ case VIDEO_CID_VFLIP :
482
+ ret = mt9m114_modify_reg (dev , MT9M114_CAM_SENSOR_CTRL_READ_MODE , 2 ,
483
+ MT9M114_CAM_SENSOR_CTRL_VERT_FLIP_EN ,
484
+ (int )value ? MT9M114_CAM_SENSOR_CTRL_VERT_FLIP_EN : 0 );
485
+ break ;
486
+ default :
487
+ return - ENOTSUP ;
488
+ }
489
+
490
+ if (ret < 0 ) {
491
+ return ret ;
492
+ }
493
+
494
+ /* Apply Config */
495
+ return mt9m114_set_state (dev , MT9M114_SYS_STATE_ENTER_CONFIG_CHANGE );
496
+ }
497
+
465
498
static DEVICE_API (video , mt9m114_driver_api ) = {
466
499
.set_format = mt9m114_set_fmt ,
467
500
.get_format = mt9m114_get_fmt ,
468
501
.get_caps = mt9m114_get_caps ,
469
502
.stream_start = mt9m114_stream_start ,
470
503
.stream_stop = mt9m114_stream_stop ,
504
+ .set_ctrl = mt9m114_set_ctrl ,
471
505
};
472
506
473
507
static int mt9m114_init (const struct device * dev )
0 commit comments