brcm2708: switch to 3.14
[15.05/openwrt.git] / target / linux / brcm2708 / patches-3.10 / 0135-V4L2-Add-flicker-avoidance-controls.patch
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
5
6 Add support for V4L2_CID_POWER_LINE_FREQUENCY to set flicker
7 avoidance frequencies.
8
9 Signed-off-by: Dave Stevenson <dsteve@broadcom.com>
10 ---
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(-)
15
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
20 @@ -15,7 +15,7 @@
21   * core driver device
22   */
23  
24 -#define V4L2_CTRL_COUNT 19 /* number of v4l controls */
25 +#define V4L2_CTRL_COUNT 20 /* number of v4l controls */
26  
27  enum {
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,
35  };
36  
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
42 +};
43 +
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));
49  }
50  
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)
54 +{
55 +       u32 u32_value;
56 +       struct vchiq_mmal_port *control;
57 +
58 +       control = &dev->component[MMAL_COMPONENT_CAMERA]->control;
59 +
60 +       switch (ctrl->val) {
61 +       case V4L2_CID_POWER_LINE_FREQUENCY_DISABLED:
62 +               u32_value = MMAL_PARAM_FLICKERAVOID_OFF;
63 +               break;
64 +       case V4L2_CID_POWER_LINE_FREQUENCY_50HZ:
65 +               u32_value = MMAL_PARAM_FLICKERAVOID_50HZ;
66 +               break;
67 +       case V4L2_CID_POWER_LINE_FREQUENCY_60HZ:
68 +               u32_value = MMAL_PARAM_FLICKERAVOID_60HZ;
69 +               break;
70 +       case V4L2_CID_POWER_LINE_FREQUENCY_AUTO:
71 +               u32_value = MMAL_PARAM_FLICKERAVOID_AUTO;
72 +               break;
73 +       }
74 +
75 +       return vchiq_mmal_port_parameter_set(dev->instance, control,
76 +                                            mmal_ctrl->mmal_id,
77 +                                            &u32_value, sizeof(u32_value));
78 +}
79 +
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] = {
84                 30, 1, NULL,
85                 MMAL_PARAMETER_JPEG_Q_FACTOR, &ctrl_set_image_encode_output
86         },
87 +       {
88 +               V4L2_CID_POWER_LINE_FREQUENCY, MMAL_CONTROL_TYPE_STD_MENU,
89 +               0, ARRAY_SIZE(mains_freq_qmenu) - 1,
90 +               1, 1, NULL,
91 +               MMAL_PARAMETER_FLICKER_AVOID, &ctrl_set_flicker_avoidance
92 +       },
93  };
94  
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,
102  };
103  
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
110 +};
111 +
112  /** Manner of video rate control */
113  enum mmal_parameter_rate_control_mode {
114         MMAL_VIDEO_RATECONTROL_DEFAULT,
115 -- 
116 1.9.1
117