From patchwork Mon Mar 30 11:46:25 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 15113 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n2UBq3YH025281 for ; Mon, 30 Mar 2009 11:52:03 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753397AbZC3Lvz (ORCPT ); Mon, 30 Mar 2009 07:51:55 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752675AbZC3Lvx (ORCPT ); Mon, 30 Mar 2009 07:51:53 -0400 Received: from mail.renesas.com ([202.234.163.13]:63159 "EHLO mail04.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751157AbZC3Lvv (ORCPT ); Mon, 30 Mar 2009 07:51:51 -0400 X-AuditID: ac140387-0000000b000005fd-d8-49d0b2516409 Received: from guardian01.idc.renesas.com ([172.20.8.200]) by mail04.idc.renesas.com (sendmail) with ESMTP id n2UBpjJx014749; Mon, 30 Mar 2009 20:51:45 +0900 (JST) Received: (from root@localhost) by guardian01.idc.renesas.com with id n2UBpkH0022438; Mon, 30 Mar 2009 20:51:46 +0900 (JST) Received: from mta01.idc.renesas.com (localhost [127.0.0.1]) by mta01.idc.renesas.com with ESMTP id n2UBpjp7025291; Mon, 30 Mar 2009 20:51:45 +0900 (JST) Received: from PG10870.renesas.com ([172.30.8.159]) by ims05.idc.renesas.com (Sendmail) with ESMTPA id <0KHB006I0IA9OG@ims05.idc.renesas.com>; Mon, 30 Mar 2009 20:51:45 +0900 (JST) Date: Mon, 30 Mar 2009 20:46:25 +0900 From: Kuninori Morimoto Subject: [PATCH v4] ov772x: add edge contrl support To: Guennadi Liakhovetski Cc: Linux Media Message-id: MIME-version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-type: text/plain; charset=US-ASCII User-Agent: SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (=?ISO-8859-4?Q?Goj=F2?=) APEL/10.7 Emacs/22.1 (i386-mingw-nt5.1.2600) MULE/5.0 (SAKAKI) Meadow/3.00-dev (KIKU) X-Brightmail-Tracker: AAAAAA== Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Signed-off-by: Kuninori Morimoto --- 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__ */