linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: William Swanson <swansontec@gmail.com>
Cc: "linux-media@vger.kernel.org" <linux-media@vger.kernel.org>,
	William Swanson <william.swanson@fuel7.com>
Subject: Re: [PATCH] omap3isp: Add support for interlaced input data
Date: Tue, 25 Dec 2012 22:05:48 +0100	[thread overview]
Message-ID: <1447136.vJuIcl6Gth@avalon> (raw)
In-Reply-To: <1355796739-2580-1-git-send-email-william.swanson@fuel7.com>

Hi William,

Thanks for the patch.

On Monday 17 December 2012 18:12:19 William Swanson wrote:
> If the remote video sensor reports an interlaced video mode, the CCDC block
> should configure itself appropriately.

What will the CCDC do in that case ? Will it capture fields or frames to 
memory ? If frames, what's the field layout ? You will most likely need to 
modify ispvideo.c as well, to support interlacing in the V4L2 API, and 
possibly add interlaced formats support to the media bus API.

> ---
>  drivers/media/platform/omap3isp/ispccdc.c |   16 ++++++++++++++--
>  include/media/omap3isp.h                  |    3 +++
>  2 files changed, 17 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/media/platform/omap3isp/ispccdc.c
> b/drivers/media/platform/omap3isp/ispccdc.c index 60e60aa..5443ef4 100644
> --- a/drivers/media/platform/omap3isp/ispccdc.c
> +++ b/drivers/media/platform/omap3isp/ispccdc.c
> @@ -970,10 +970,11 @@ void omap3isp_ccdc_max_rate(struct isp_ccdc_device
> *ccdc, * @ccdc: Pointer to ISP CCDC device.
>   * @pdata: Parallel interface platform data (may be NULL)
>   * @data_size: Data size
> + * @interlaced: Use interlaced mode instead of progressive mode
>   */
>  static void ccdc_config_sync_if(struct isp_ccdc_device *ccdc,
>  				struct isp_parallel_platform_data *pdata,
> -				unsigned int data_size)
> +				unsigned int data_size, bool interlaced)
>  {
>  	struct isp_device *isp = to_isp_device(ccdc);
>  	const struct v4l2_mbus_framefmt *format;
> @@ -1004,9 +1005,15 @@ static void ccdc_config_sync_if(struct
> isp_ccdc_device *ccdc, break;
>  	}
> 
> +	if (interlaced)
> +		syn_mode |= ISPCCDC_SYN_MODE_FLDMODE;
> +
>  	if (pdata && pdata->data_pol)
>  		syn_mode |= ISPCCDC_SYN_MODE_DATAPOL;
> 
> +	if (pdata && pdata->fld_pol)
> +		syn_mode |= ISPCCDC_SYN_MODE_FLDPOL;
> +
>  	if (pdata && pdata->hs_pol)
>  		syn_mode |= ISPCCDC_SYN_MODE_HDPOL;
> 
> @@ -1111,6 +1118,7 @@ static void ccdc_configure(struct isp_ccdc_device
> *ccdc) const struct v4l2_rect *crop;
>  	const struct isp_format_info *fmt_info;
>  	struct v4l2_subdev_format fmt_src;
> +	bool src_interlaced = false;
>  	unsigned int depth_out;
>  	unsigned int depth_in = 0;
>  	struct media_pad *pad;
> @@ -1132,6 +1140,10 @@ static void ccdc_configure(struct isp_ccdc_device
> *ccdc) fmt_src.pad = pad->index;
>  	fmt_src.which = V4L2_SUBDEV_FORMAT_ACTIVE;
>  	if (!v4l2_subdev_call(sensor, pad, get_fmt, NULL, &fmt_src)) {
> +		if (fmt_src.format.field == V4L2_FIELD_INTERLACED ||
> +		    fmt_src.format.field == V4L2_FIELD_INTERLACED_TB ||
> +		    fmt_src.format.field == V4L2_FIELD_INTERLACED_BT)
> +			src_interlaced = true;
>  		fmt_info = omap3isp_video_format_info(fmt_src.format.code);
>  		depth_in = fmt_info->width;
>  	}
> @@ -1150,7 +1162,7 @@ static void ccdc_configure(struct isp_ccdc_device
> *ccdc)
> 
>  	omap3isp_configure_bridge(isp, ccdc->input, pdata, shift, bridge);
> 
> -	ccdc_config_sync_if(ccdc, pdata, depth_out);
> +	ccdc_config_sync_if(ccdc, pdata, depth_out, src_interlaced);
> 
>  	syn_mode = isp_reg_readl(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_SYN_MODE);
> 
> diff --git a/include/media/omap3isp.h b/include/media/omap3isp.h
> index 9584269..32d85c2 100644
> --- a/include/media/omap3isp.h
> +++ b/include/media/omap3isp.h
> @@ -57,6 +57,8 @@ enum {
>   *		ISP_LANE_SHIFT_6 - CAMEXT[13:6] -> CAM[7:0]
>   * @clk_pol: Pixel clock polarity
>   *		0 - Sample on rising edge, 1 - Sample on falling edge
> + * @fld_pol: Field identification signal polarity
> + *		0 - Active high, 1 - Active low
>   * @hs_pol: Horizontal synchronization polarity
>   *		0 - Active high, 1 - Active low
>   * @vs_pol: Vertical synchronization polarity
> @@ -67,6 +69,7 @@ enum {
>  struct isp_parallel_platform_data {
>  	unsigned int data_lane_shift:2;
>  	unsigned int clk_pol:1;
> +	unsigned int fld_pol:1;
>  	unsigned int hs_pol:1;
>  	unsigned int vs_pol:1;
>  	unsigned int data_pol:1;
-- 
Regards,

Laurent Pinchart


  reply	other threads:[~2012-12-25 21:04 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-18  2:12 [PATCH] omap3isp: Add support for interlaced input data William Swanson
2012-12-25 21:05 ` Laurent Pinchart [this message]
2012-12-27 20:27   ` Mauro Carvalho Chehab
2013-01-04 19:52     ` William Swanson
2013-01-07 12:20       ` Laurent Pinchart
2013-01-08 22:49         ` William Swanson
2013-01-09 22:35           ` Laurent Pinchart
2013-01-14 22:21             ` William Swanson
2013-01-14 22:23               ` William Swanson
2013-01-21 10:06               ` Laurent Pinchart
  -- strict thread matches above, loose matches on Subject: below --
2013-01-05  0:09 William Swanson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1447136.vJuIcl6Gth@avalon \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=linux-media@vger.kernel.org \
    --cc=swansontec@gmail.com \
    --cc=william.swanson@fuel7.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).