[media] ov772x: Add support for SBGGR10 format
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
4a7b76f072
commit
f223d5b718
1 changed files with 36 additions and 7 deletions
|
@ -275,6 +275,7 @@
|
||||||
#define SLCT_VGA 0x00 /* 0 : VGA */
|
#define SLCT_VGA 0x00 /* 0 : VGA */
|
||||||
#define SLCT_QVGA 0x40 /* 1 : QVGA */
|
#define SLCT_QVGA 0x40 /* 1 : QVGA */
|
||||||
#define ITU656_ON_OFF 0x20 /* ITU656 protocol ON/OFF selection */
|
#define ITU656_ON_OFF 0x20 /* ITU656 protocol ON/OFF selection */
|
||||||
|
#define SENSOR_RAW 0x10 /* Sensor RAW */
|
||||||
/* RGB output format control */
|
/* RGB output format control */
|
||||||
#define FMT_MASK 0x0c /* Mask of color format */
|
#define FMT_MASK 0x0c /* Mask of color format */
|
||||||
#define FMT_GBR422 0x00 /* 00 : GBR 4:2:2 */
|
#define FMT_GBR422 0x00 /* 00 : GBR 4:2:2 */
|
||||||
|
@ -338,6 +339,12 @@
|
||||||
#define CBAR_ON 0x20 /* ON */
|
#define CBAR_ON 0x20 /* ON */
|
||||||
#define CBAR_OFF 0x00 /* OFF */
|
#define CBAR_OFF 0x00 /* OFF */
|
||||||
|
|
||||||
|
/* DSP_CTRL4 */
|
||||||
|
#define DSP_OFMT_YUV 0x00
|
||||||
|
#define DSP_OFMT_RGB 0x00
|
||||||
|
#define DSP_OFMT_RAW8 0x02
|
||||||
|
#define DSP_OFMT_RAW10 0x03
|
||||||
|
|
||||||
/* HSTART */
|
/* HSTART */
|
||||||
#define HST_VGA 0x23
|
#define HST_VGA 0x23
|
||||||
#define HST_QVGA 0x3F
|
#define HST_QVGA 0x3F
|
||||||
|
@ -389,6 +396,7 @@ struct ov772x_color_format {
|
||||||
enum v4l2_mbus_pixelcode code;
|
enum v4l2_mbus_pixelcode code;
|
||||||
enum v4l2_colorspace colorspace;
|
enum v4l2_colorspace colorspace;
|
||||||
u8 dsp3;
|
u8 dsp3;
|
||||||
|
u8 dsp4;
|
||||||
u8 com3;
|
u8 com3;
|
||||||
u8 com7;
|
u8 com7;
|
||||||
};
|
};
|
||||||
|
@ -447,6 +455,7 @@ static const struct ov772x_color_format ov772x_cfmts[] = {
|
||||||
.code = V4L2_MBUS_FMT_YUYV8_2X8,
|
.code = V4L2_MBUS_FMT_YUYV8_2X8,
|
||||||
.colorspace = V4L2_COLORSPACE_JPEG,
|
.colorspace = V4L2_COLORSPACE_JPEG,
|
||||||
.dsp3 = 0x0,
|
.dsp3 = 0x0,
|
||||||
|
.dsp4 = DSP_OFMT_YUV,
|
||||||
.com3 = SWAP_YUV,
|
.com3 = SWAP_YUV,
|
||||||
.com7 = OFMT_YUV,
|
.com7 = OFMT_YUV,
|
||||||
},
|
},
|
||||||
|
@ -454,6 +463,7 @@ static const struct ov772x_color_format ov772x_cfmts[] = {
|
||||||
.code = V4L2_MBUS_FMT_YVYU8_2X8,
|
.code = V4L2_MBUS_FMT_YVYU8_2X8,
|
||||||
.colorspace = V4L2_COLORSPACE_JPEG,
|
.colorspace = V4L2_COLORSPACE_JPEG,
|
||||||
.dsp3 = UV_ON,
|
.dsp3 = UV_ON,
|
||||||
|
.dsp4 = DSP_OFMT_YUV,
|
||||||
.com3 = SWAP_YUV,
|
.com3 = SWAP_YUV,
|
||||||
.com7 = OFMT_YUV,
|
.com7 = OFMT_YUV,
|
||||||
},
|
},
|
||||||
|
@ -461,6 +471,7 @@ static const struct ov772x_color_format ov772x_cfmts[] = {
|
||||||
.code = V4L2_MBUS_FMT_UYVY8_2X8,
|
.code = V4L2_MBUS_FMT_UYVY8_2X8,
|
||||||
.colorspace = V4L2_COLORSPACE_JPEG,
|
.colorspace = V4L2_COLORSPACE_JPEG,
|
||||||
.dsp3 = 0x0,
|
.dsp3 = 0x0,
|
||||||
|
.dsp4 = DSP_OFMT_YUV,
|
||||||
.com3 = 0x0,
|
.com3 = 0x0,
|
||||||
.com7 = OFMT_YUV,
|
.com7 = OFMT_YUV,
|
||||||
},
|
},
|
||||||
|
@ -468,6 +479,7 @@ static const struct ov772x_color_format ov772x_cfmts[] = {
|
||||||
.code = V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE,
|
.code = V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE,
|
||||||
.colorspace = V4L2_COLORSPACE_SRGB,
|
.colorspace = V4L2_COLORSPACE_SRGB,
|
||||||
.dsp3 = 0x0,
|
.dsp3 = 0x0,
|
||||||
|
.dsp4 = DSP_OFMT_YUV,
|
||||||
.com3 = SWAP_RGB,
|
.com3 = SWAP_RGB,
|
||||||
.com7 = FMT_RGB555 | OFMT_RGB,
|
.com7 = FMT_RGB555 | OFMT_RGB,
|
||||||
},
|
},
|
||||||
|
@ -475,6 +487,7 @@ static const struct ov772x_color_format ov772x_cfmts[] = {
|
||||||
.code = V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE,
|
.code = V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE,
|
||||||
.colorspace = V4L2_COLORSPACE_SRGB,
|
.colorspace = V4L2_COLORSPACE_SRGB,
|
||||||
.dsp3 = 0x0,
|
.dsp3 = 0x0,
|
||||||
|
.dsp4 = DSP_OFMT_YUV,
|
||||||
.com3 = 0x0,
|
.com3 = 0x0,
|
||||||
.com7 = FMT_RGB555 | OFMT_RGB,
|
.com7 = FMT_RGB555 | OFMT_RGB,
|
||||||
},
|
},
|
||||||
|
@ -482,6 +495,7 @@ static const struct ov772x_color_format ov772x_cfmts[] = {
|
||||||
.code = V4L2_MBUS_FMT_RGB565_2X8_LE,
|
.code = V4L2_MBUS_FMT_RGB565_2X8_LE,
|
||||||
.colorspace = V4L2_COLORSPACE_SRGB,
|
.colorspace = V4L2_COLORSPACE_SRGB,
|
||||||
.dsp3 = 0x0,
|
.dsp3 = 0x0,
|
||||||
|
.dsp4 = DSP_OFMT_YUV,
|
||||||
.com3 = SWAP_RGB,
|
.com3 = SWAP_RGB,
|
||||||
.com7 = FMT_RGB565 | OFMT_RGB,
|
.com7 = FMT_RGB565 | OFMT_RGB,
|
||||||
},
|
},
|
||||||
|
@ -489,9 +503,22 @@ static const struct ov772x_color_format ov772x_cfmts[] = {
|
||||||
.code = V4L2_MBUS_FMT_RGB565_2X8_BE,
|
.code = V4L2_MBUS_FMT_RGB565_2X8_BE,
|
||||||
.colorspace = V4L2_COLORSPACE_SRGB,
|
.colorspace = V4L2_COLORSPACE_SRGB,
|
||||||
.dsp3 = 0x0,
|
.dsp3 = 0x0,
|
||||||
|
.dsp4 = DSP_OFMT_YUV,
|
||||||
.com3 = 0x0,
|
.com3 = 0x0,
|
||||||
.com7 = FMT_RGB565 | OFMT_RGB,
|
.com7 = FMT_RGB565 | OFMT_RGB,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
/* Setting DSP4 to DSP_OFMT_RAW8 still gives 10-bit output,
|
||||||
|
* regardless of the COM7 value. We can thus only support 10-bit
|
||||||
|
* Bayer until someone figures it out.
|
||||||
|
*/
|
||||||
|
.code = V4L2_MBUS_FMT_SBGGR10_1X10,
|
||||||
|
.colorspace = V4L2_COLORSPACE_SRGB,
|
||||||
|
.dsp3 = 0x0,
|
||||||
|
.dsp4 = DSP_OFMT_RAW10,
|
||||||
|
.com3 = 0x0,
|
||||||
|
.com7 = SENSOR_RAW | OFMT_BRAW,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -808,6 +835,13 @@ static int ov772x_set_params(struct ov772x_priv *priv,
|
||||||
goto ov772x_set_fmt_error;
|
goto ov772x_set_fmt_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* DSP_CTRL4: AEC reference point and DSP output format. */
|
||||||
|
if (cfmt->dsp4) {
|
||||||
|
ret = ov772x_write(client, DSP_CTRL4, cfmt->dsp4);
|
||||||
|
if (ret < 0)
|
||||||
|
goto ov772x_set_fmt_error;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* set COM3
|
* set COM3
|
||||||
*/
|
*/
|
||||||
|
@ -826,13 +860,8 @@ static int ov772x_set_params(struct ov772x_priv *priv,
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto ov772x_set_fmt_error;
|
goto ov772x_set_fmt_error;
|
||||||
|
|
||||||
/*
|
/* COM7: Sensor resolution and output format control. */
|
||||||
* set COM7
|
ret = ov772x_write(client, COM7, win->com7_bit | cfmt->com7);
|
||||||
*/
|
|
||||||
val = win->com7_bit | cfmt->com7;
|
|
||||||
ret = ov772x_mask_set(client,
|
|
||||||
COM7, SLCT_MASK | FMT_MASK | OFMT_MASK,
|
|
||||||
val);
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto ov772x_set_fmt_error;
|
goto ov772x_set_fmt_error;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue