1 From 7158cb41bff61dc6e3aee5b243ba0d6fbafe35bc Mon Sep 17 00:00:00 2001
2 From: Dave Stevenson <dsteve@broadcom.com>
3 Date: Mon, 9 Dec 2013 16:40:24 +0000
4 Subject: [PATCH 135/196] V4L2: Add flicker avoidance controls
6 Add support for V4L2_CID_POWER_LINE_FREQUENCY to set flicker
9 Signed-off-by: Dave Stevenson <dsteve@broadcom.com>
11 drivers/media/platform/bcm2835/bcm2835-camera.h | 2 +-
12 drivers/media/platform/bcm2835/controls.c | 42 ++++++++++++++++++++++++
13 drivers/media/platform/bcm2835/mmal-parameters.h | 8 +++++
14 3 files changed, 51 insertions(+), 1 deletion(-)
16 diff --git a/drivers/media/platform/bcm2835/bcm2835-camera.h b/drivers/media/platform/bcm2835/bcm2835-camera.h
17 index 5640492..a53c3bd 100644
18 --- a/drivers/media/platform/bcm2835/bcm2835-camera.h
19 +++ b/drivers/media/platform/bcm2835/bcm2835-camera.h
24 -#define V4L2_CTRL_COUNT 19 /* number of v4l controls */
25 +#define V4L2_CTRL_COUNT 20 /* number of v4l controls */
28 MMAL_COMPONENT_CAMERA = 0,
29 diff --git a/drivers/media/platform/bcm2835/controls.c b/drivers/media/platform/bcm2835/controls.c
30 index 92863f7..7cc97c8 100644
31 --- a/drivers/media/platform/bcm2835/controls.c
32 +++ b/drivers/media/platform/bcm2835/controls.c
33 @@ -56,6 +56,13 @@ static const s64 iso_qmenu[] = {
34 0, 100, 200, 400, 800,
37 +static const s64 mains_freq_qmenu[] = {
38 + V4L2_CID_POWER_LINE_FREQUENCY_DISABLED,
39 + V4L2_CID_POWER_LINE_FREQUENCY_50HZ,
40 + V4L2_CID_POWER_LINE_FREQUENCY_60HZ,
41 + V4L2_CID_POWER_LINE_FREQUENCY_AUTO
44 /* Supported video encode modes */
45 static const s64 bitrate_mode_qmenu[] = {
46 (s64)V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
47 @@ -373,6 +380,35 @@ static int ctrl_set_metering_mode(struct bm2835_mmal_dev *dev,
48 &u32_value, sizeof(u32_value));
51 +static int ctrl_set_flicker_avoidance(struct bm2835_mmal_dev *dev,
52 + struct v4l2_ctrl *ctrl,
53 + const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl)
56 + struct vchiq_mmal_port *control;
58 + control = &dev->component[MMAL_COMPONENT_CAMERA]->control;
60 + switch (ctrl->val) {
61 + case V4L2_CID_POWER_LINE_FREQUENCY_DISABLED:
62 + u32_value = MMAL_PARAM_FLICKERAVOID_OFF;
64 + case V4L2_CID_POWER_LINE_FREQUENCY_50HZ:
65 + u32_value = MMAL_PARAM_FLICKERAVOID_50HZ;
67 + case V4L2_CID_POWER_LINE_FREQUENCY_60HZ:
68 + u32_value = MMAL_PARAM_FLICKERAVOID_60HZ;
70 + case V4L2_CID_POWER_LINE_FREQUENCY_AUTO:
71 + u32_value = MMAL_PARAM_FLICKERAVOID_AUTO;
75 + return vchiq_mmal_port_parameter_set(dev->instance, control,
77 + &u32_value, sizeof(u32_value));
80 static int ctrl_set_awb_mode(struct bm2835_mmal_dev *dev,
81 struct v4l2_ctrl *ctrl,
82 const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl)
83 @@ -706,6 +742,12 @@ static const struct bm2835_mmal_v4l2_ctrl v4l2_ctrls[V4L2_CTRL_COUNT] = {
85 MMAL_PARAMETER_JPEG_Q_FACTOR, &ctrl_set_image_encode_output
88 + V4L2_CID_POWER_LINE_FREQUENCY, MMAL_CONTROL_TYPE_STD_MENU,
89 + 0, ARRAY_SIZE(mains_freq_qmenu) - 1,
91 + MMAL_PARAMETER_FLICKER_AVOID, &ctrl_set_flicker_avoidance
95 int bm2835_mmal_set_all_camera_controls(struct bm2835_mmal_dev *dev)
96 diff --git a/drivers/media/platform/bcm2835/mmal-parameters.h b/drivers/media/platform/bcm2835/mmal-parameters.h
97 index d8aace5..b3d2c39 100644
98 --- a/drivers/media/platform/bcm2835/mmal-parameters.h
99 +++ b/drivers/media/platform/bcm2835/mmal-parameters.h
100 @@ -271,6 +271,14 @@ enum mmal_parameter_imagefx {
101 MMAL_PARAM_IMAGEFX_CARTOON,
104 +enum MMAL_PARAM_FLICKERAVOID_T {
105 + MMAL_PARAM_FLICKERAVOID_OFF,
106 + MMAL_PARAM_FLICKERAVOID_AUTO,
107 + MMAL_PARAM_FLICKERAVOID_50HZ,
108 + MMAL_PARAM_FLICKERAVOID_60HZ,
109 + MMAL_PARAM_FLICKERAVOID_MAX = 0x7FFFFFFF
112 /** Manner of video rate control */
113 enum mmal_parameter_rate_control_mode {
114 MMAL_VIDEO_RATECONTROL_DEFAULT,