Signed-off-by: Kuninori Morimoto <morimoto.kuninori@xxxxxxxxxxx> --- v3 -> v4 o comment fix o change edge ctrl setting order o considered edge auto control mode and manual control mode o add DSP auto register comment drivers/media/video/ov772x.c | 52 ++++++++++++++++++++++++++++++++++++++--- include/media/ov772x.h | 25 ++++++++++++++++++++ 2 files changed, 73 insertions(+), 4 deletions(-) diff --git a/drivers/media/video/ov772x.c b/drivers/media/video/ov772x.c index 34c9819..182daa5 100644 --- a/drivers/media/video/ov772x.c +++ b/drivers/media/video/ov772x.c @@ -169,11 +169,11 @@ #define GAM15 0x8C /* Gamma Curve 15th segment input end point */ #define SLOP 0x8D /* Gamma curve highest segment slope */ #define DNSTH 0x8E /* De-noise threshold */ -#define EDGE0 0x8F /* Edge enhancement control 0 */ -#define EDGE1 0x90 /* Edge enhancement control 1 */ +#define EDGE0 0x8F /* Edge strength control when manual mode */ +#define EDGE1 0x90 /* Edge threshold control when manual mode */ #define DNSOFF 0x91 /* Auto De-noise threshold control */ -#define EDGE2 0x92 /* Edge enhancement strength low point control */ -#define EDGE3 0x93 /* Edge enhancement strength high point control */ +#define EDGE2 0x92 /* Edge strength upper limit when Auto mode */ +#define EDGE3 0x93 /* Edge strength lower limit when Auto mode */ #define MTX1 0x94 /* Matrix coefficient 1 */ #define MTX2 0x95 /* Matrix coefficient 2 */ #define MTX3 0x96 /* Matrix coefficient 3 */ @@ -358,6 +358,14 @@ #define VOSZ_VGA 0xF0 #define VOSZ_QVGA 0x78 +/* DSPAUTO (DSP Auto Function ON/OFF Control) */ +#define AWB_ACTRL 0x80 /* AWB auto threshold control */ +#define DENOISE_ACTRL 0x40 /* De-noise auto threshold control */ +#define EDGE_ACTRL 0x20 /* Edge enhancement auto strength control */ +#define UV_ACTRL 0x10 /* UV adjust auto slope control */ +#define SCAL0_ACTRL 0x08 /* Auto scaling factor control */ +#define SCAL1_2_ACTRL 0x04 /* Auto scaling factor control */ + /* * ID */ @@ -816,6 +824,42 @@ static int ov772x_set_params(struct ov772x_priv *priv, u32 width, u32 height, ov772x_reset(priv->client); /* + * set Edge Ctrl + */ + if (priv->info->flags & OV772X_FLAG_MAN_EDGE) { + /* + * Edge auto strength is set by default. + * Remove this bit when manual strength. + */ + ret = ov772x_mask_set(priv->client, DSPAUTO, + EDGE_ACTRL, 0x00); + if (ret < 0) + goto ov772x_set_fmt_error; + + ret = ov772x_mask_set(priv->client, EDGE1, 0x0F, + priv->info->edgectrl.reg_b); + if (ret < 0) + goto ov772x_set_fmt_error; + + ret = ov772x_mask_set(priv->client, EDGE0, 0x1F, + priv->info->edgectrl.reg_a); + if (ret < 0) + goto ov772x_set_fmt_error; + + } else if (priv->info->edgectrl.reg_a > priv->info->edgectrl.reg_b) { + + ret = ov772x_mask_set(priv->client, EDGE2, 0xFF, + priv->info->edgectrl.reg_a); + if (ret < 0) + goto ov772x_set_fmt_error; + + ret = ov772x_mask_set(priv->client, EDGE3, 0xFF, + priv->info->edgectrl.reg_b); + if (ret < 0) + goto ov772x_set_fmt_error; + } + + /* * set size format */ ret = ov772x_write_array(priv->client, priv->win->regs); diff --git a/include/media/ov772x.h b/include/media/ov772x.h index 57db48d..75d1f15 100644 --- a/include/media/ov772x.h +++ b/include/media/ov772x.h @@ -16,11 +16,36 @@ /* for flags */ #define OV772X_FLAG_VFLIP 0x00000001 /* Vertical flip image */ #define OV772X_FLAG_HFLIP 0x00000002 /* Horizontal flip image */ +#define OV772X_FLAG_MAN_EDGE 0x00000004 /* Manual edge control (default Auto) */ +/* + * for Edge ctrl + * + * if OV772X_FLAG_MAN_EDGE + * reg_a : strength + * reg_b : threshold + * else (Auto Edge Control) + * reg_a : strength upper limit + * reg_b : strength lower limit + */ +struct ov772x_edge_ctrl { + unsigned char reg_a; + unsigned char reg_b; +}; + +#define OV772X_EDGECTRL(a, b) \ + {.reg_a = (a), \ + .reg_b = (b), \ + } + +/* + * ov772x camera info + */ struct ov772x_camera_info { unsigned long buswidth; unsigned long flags; struct soc_camera_link link; + struct ov772x_edge_ctrl edgectrl; }; #endif /* __OV772X_H__ */ -- 1.5.6.3 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html