Commit 7a3b8d4b authored by Jacopo Mondi's avatar Jacopo Mondi Committed by Mauro Carvalho Chehab

media: ov5640: Add LINK_FREQ control

Add the V4L2_CID_LINK_FREQ control to the ov5640 driver.
Make the control read-only for the moment.
Signed-off-by: default avatarJacopo Mondi <jacopo@jmondi.org>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent 2d7671f6
...@@ -141,6 +141,24 @@ static const u32 ov5640_pixel_rates[] = { ...@@ -141,6 +141,24 @@ static const u32 ov5640_pixel_rates[] = {
[OV5640_PIXEL_RATE_48M] = 48000000, [OV5640_PIXEL_RATE_48M] = 48000000,
}; };
/*
* MIPI CSI-2 link frequencies.
*
* Derived from the above defined pixel rate for bpp = (8, 16, 24) and
* data_lanes = (1, 2)
*
* link_freq = (pixel_rate * bpp) / (2 * data_lanes)
*/
static const s64 ov5640_csi2_link_freqs[] = {
992000000, 888000000, 768000000, 744000000, 672000000, 672000000,
592000000, 592000000, 576000000, 576000000, 496000000, 496000000,
384000000, 384000000, 384000000, 336000000, 296000000, 288000000,
248000000, 192000000, 192000000, 192000000, 96000000,
};
/* Link freq for default mode: UYVY 16 bpp, 2 data lanes. */
#define OV5640_DEFAULT_LINK_FREQ 13
enum ov5640_format_mux { enum ov5640_format_mux {
OV5640_FMT_MUX_YUV422 = 0, OV5640_FMT_MUX_YUV422 = 0,
OV5640_FMT_MUX_RGB, OV5640_FMT_MUX_RGB,
...@@ -258,6 +276,7 @@ struct ov5640_mode_info { ...@@ -258,6 +276,7 @@ struct ov5640_mode_info {
struct ov5640_ctrls { struct ov5640_ctrls {
struct v4l2_ctrl_handler handler; struct v4l2_ctrl_handler handler;
struct v4l2_ctrl *pixel_rate; struct v4l2_ctrl *pixel_rate;
struct v4l2_ctrl *link_freq;
struct { struct {
struct v4l2_ctrl *auto_exp; struct v4l2_ctrl *auto_exp;
struct v4l2_ctrl *exposure; struct v4l2_ctrl *exposure;
...@@ -2855,6 +2874,12 @@ static int ov5640_init_controls(struct ov5640_dev *sensor) ...@@ -2855,6 +2874,12 @@ static int ov5640_init_controls(struct ov5640_dev *sensor)
ov5640_pixel_rates[0], 1, ov5640_pixel_rates[0], 1,
ov5640_pixel_rates[mode->pixel_rate]); ov5640_pixel_rates[mode->pixel_rate]);
ctrls->link_freq = v4l2_ctrl_new_int_menu(hdl, ops,
V4L2_CID_LINK_FREQ,
ARRAY_SIZE(ov5640_csi2_link_freqs) - 1,
OV5640_DEFAULT_LINK_FREQ,
ov5640_csi2_link_freqs);
/* Auto/manual white balance */ /* Auto/manual white balance */
ctrls->auto_wb = v4l2_ctrl_new_std(hdl, ops, ctrls->auto_wb = v4l2_ctrl_new_std(hdl, ops,
V4L2_CID_AUTO_WHITE_BALANCE, V4L2_CID_AUTO_WHITE_BALANCE,
...@@ -2903,6 +2928,7 @@ static int ov5640_init_controls(struct ov5640_dev *sensor) ...@@ -2903,6 +2928,7 @@ static int ov5640_init_controls(struct ov5640_dev *sensor)
} }
ctrls->pixel_rate->flags |= V4L2_CTRL_FLAG_READ_ONLY; ctrls->pixel_rate->flags |= V4L2_CTRL_FLAG_READ_ONLY;
ctrls->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
ctrls->gain->flags |= V4L2_CTRL_FLAG_VOLATILE; ctrls->gain->flags |= V4L2_CTRL_FLAG_VOLATILE;
ctrls->exposure->flags |= V4L2_CTRL_FLAG_VOLATILE; ctrls->exposure->flags |= V4L2_CTRL_FLAG_VOLATILE;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment