Skip to content

Commit 5578c9f

Browse files
drivers: video: mt9m114: Add vertical and horizontal flip control
Add set_ctrl function API for vertical and horizontal flip control modifying the camera read mode Signed-off-by: Jeronimo Agullo <jeronimoagullo97@gmail.com>
1 parent 7f5b437 commit 5578c9f

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

drivers/video/mt9m114.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <zephyr/logging/log.h>
1313
#include <zephyr/sys/byteorder.h>
1414
#include <zephyr/drivers/video.h>
15+
#include <zephyr/drivers/video-controls.h>
1516
#include <zephyr/drivers/i2c.h>
1617

1718
LOG_MODULE_REGISTER(video_mt9m114, CONFIG_VIDEO_LOG_LEVEL);
@@ -31,6 +32,7 @@ LOG_MODULE_REGISTER(video_mt9m114, CONFIG_VIDEO_LOG_LEVEL);
3132
#define MT9M114_CAM_SENSOR_CFG_Y_ADDR_END 0xC804
3233
#define MT9M114_CAM_SENSOR_CFG_X_ADDR_END 0xC806
3334
#define MT9M114_CAM_SENSOR_CFG_CPIPE_LAST_ROW 0xC818
35+
#define MT9M114_CAM_SENSOR_CTRL_READ_MODE 0xC834
3436
#define MT9M114_CAM_CROP_WINDOW_WIDTH 0xC858
3537
#define MT9M114_CAM_CROP_WINDOW_HEIGHT 0xC85A
3638
#define MT9M114_CAM_OUTPUT_WIDTH 0xC868
@@ -53,6 +55,10 @@ LOG_MODULE_REGISTER(video_mt9m114, CONFIG_VIDEO_LOG_LEVEL);
5355
#define MT9M114_CAM_OUTPUT_FORMAT_FORMAT_YUV (0 << 8)
5456
#define MT9M114_CAM_OUTPUT_FORMAT_FORMAT_RGB (1 << 8)
5557

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+
5662
struct mt9m114_config {
5763
struct i2c_dt_spec i2c;
5864
};
@@ -462,12 +468,40 @@ static int mt9m114_get_caps(const struct device *dev, enum video_endpoint_id ep,
462468
return 0;
463469
}
464470

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+
465498
static DEVICE_API(video, mt9m114_driver_api) = {
466499
.set_format = mt9m114_set_fmt,
467500
.get_format = mt9m114_get_fmt,
468501
.get_caps = mt9m114_get_caps,
469502
.stream_start = mt9m114_stream_start,
470503
.stream_stop = mt9m114_stream_stop,
504+
.set_ctrl = mt9m114_set_ctrl,
471505
};
472506

473507
static int mt9m114_init(const struct device *dev)

0 commit comments

Comments
 (0)