mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Lad, Prabhakar" <prabhakar.csengg@gmail.com>
To: LMML <linux-media@vger.kernel.org>,
	Hans Verkuil <hans.verkuil@cisco.com>
Cc: DLOS <davinci-linux-open-source@linux.davincidsp.com>,
	LKML <linux-kernel@vger.kernel.org>,
	"Lad, Prabhakar" <prabhakar.csengg@gmail.com>
Subject: [PATCH v5 25/49] media: davinci: vpif_display: fix v4l-complinace issues
Date: Fri, 16 May 2014 19:03:30 +0530	[thread overview]
Message-ID: <1400247235-31434-27-git-send-email-prabhakar.csengg@gmail.com> (raw)
In-Reply-To: <1400247235-31434-1-git-send-email-prabhakar.csengg@gmail.com>

From: "Lad, Prabhakar" <prabhakar.csengg@gmail.com>

this patch does following,
1: sets initial default format during probe.
2: removes spurious messages.
3: optimize vpif_s/try_fmt_vid_out code.

Signed-off-by: Lad, Prabhakar <prabhakar.csengg@gmail.com>
---
 drivers/media/platform/davinci/vpif_display.c |  138 +++++++++----------------
 1 file changed, 51 insertions(+), 87 deletions(-)

diff --git a/drivers/media/platform/davinci/vpif_display.c b/drivers/media/platform/davinci/vpif_display.c
index f581e7a..cda0851 100644
--- a/drivers/media/platform/davinci/vpif_display.c
+++ b/drivers/media/platform/davinci/vpif_display.c
@@ -466,6 +466,7 @@ static int vpif_update_resolution(struct channel_obj *ch)
 			return -EINVAL;
 	}
 
+	common->fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV422P;
 	common->fmt.fmt.pix.width = std_info->width;
 	common->fmt.fmt.pix.height = std_info->height;
 	vpif_dbg(1, debug, "Pixel details: Width = %d,Height = %d\n",
@@ -474,6 +475,17 @@ static int vpif_update_resolution(struct channel_obj *ch)
 	/* Set height and width paramateres */
 	common->height = std_info->height;
 	common->width = std_info->width;
+	common->fmt.fmt.pix.sizeimage = common->height * common->width * 2;
+
+	if (vid_ch->stdid)
+		common->fmt.fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M;
+	else
+		common->fmt.fmt.pix.colorspace = V4L2_COLORSPACE_REC709;
+
+	if (ch->vpifparams.std_info.frm_fmt)
+		common->fmt.fmt.pix.field = V4L2_FIELD_NONE;
+	else
+		common->fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
 
 	return 0;
 }
@@ -544,63 +556,6 @@ static void vpif_calculate_offsets(struct channel_obj *ch)
 	ch->vpifparams.video_params.stdid = ch->vpifparams.std_info.stdid;
 }
 
-static void vpif_config_format(struct channel_obj *ch)
-{
-	struct common_obj *common = &ch->common[VPIF_VIDEO_INDEX];
-
-	common->fmt.fmt.pix.field = V4L2_FIELD_ANY;
-	common->fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV422P;
-	common->fmt.type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
-}
-
-static int vpif_check_format(struct channel_obj *ch,
-			     struct v4l2_pix_format *pixfmt)
-{
-	struct common_obj *common = &ch->common[VPIF_VIDEO_INDEX];
-	enum v4l2_field field = pixfmt->field;
-	u32 sizeimage, hpitch, vpitch;
-
-	if (pixfmt->pixelformat != V4L2_PIX_FMT_YUV422P)
-		goto invalid_fmt_exit;
-
-	if (!(VPIF_VALID_FIELD(field)))
-		goto invalid_fmt_exit;
-
-	if (pixfmt->bytesperline <= 0)
-		goto invalid_pitch_exit;
-
-	sizeimage = pixfmt->sizeimage;
-
-	if (vpif_update_resolution(ch))
-		return -EINVAL;
-
-	hpitch = pixfmt->bytesperline;
-	vpitch = sizeimage / (hpitch * 2);
-
-	/* Check for valid value of pitch */
-	if ((hpitch < ch->vpifparams.std_info.width) ||
-	    (vpitch < ch->vpifparams.std_info.height))
-		goto invalid_pitch_exit;
-
-	/* Check for 8 byte alignment */
-	if (!ISALIGNED(hpitch)) {
-		vpif_err("invalid pitch alignment\n");
-		return -EINVAL;
-	}
-	pixfmt->width = common->fmt.fmt.pix.width;
-	pixfmt->height = common->fmt.fmt.pix.height;
-
-	return 0;
-
-invalid_fmt_exit:
-	vpif_err("invalid field format\n");
-	return -EINVAL;
-
-invalid_pitch_exit:
-	vpif_err("invalid pitch\n");
-	return -EINVAL;
-}
-
 static void vpif_config_addr(struct channel_obj *ch, int muxmode)
 {
 	struct common_obj *common = &ch->common[VPIF_VIDEO_INDEX];
@@ -640,16 +595,14 @@ static int vpif_querycap(struct file *file, void  *priv,
 static int vpif_enum_fmt_vid_out(struct file *file, void  *priv,
 					struct v4l2_fmtdesc *fmt)
 {
-	if (fmt->index != 0) {
-		vpif_err("Invalid format index\n");
+	if (fmt->index != 0)
 		return -EINVAL;
-	}
 
 	/* Fill in the information about format */
 	fmt->type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
 	strcpy(fmt->description, "YCbCr4:2:2 YC Planar");
 	fmt->pixelformat = V4L2_PIX_FMT_YUV422P;
-
+	fmt->flags = 0;
 	return 0;
 }
 
@@ -670,47 +623,57 @@ static int vpif_g_fmt_vid_out(struct file *file, void *priv,
 	return 0;
 }
 
-static int vpif_s_fmt_vid_out(struct file *file, void *priv,
+static int vpif_try_fmt_vid_out(struct file *file, void *priv,
 				struct v4l2_format *fmt)
 {
 	struct video_device *vdev = video_devdata(file);
 	struct channel_obj *ch = video_get_drvdata(vdev);
 	struct common_obj *common = &ch->common[VPIF_VIDEO_INDEX];
-	struct v4l2_pix_format *pixfmt;
-	int ret = 0;
+	struct v4l2_pix_format *pixfmt = &fmt->fmt.pix;
 
-	if (vb2_is_busy(&common->buffer_queue))
-		return -EBUSY;
+	/*
+	 * to supress v4l-compliance warnings silently correct
+	 * the pixelformat
+	 */
+	if (pixfmt->pixelformat != V4L2_PIX_FMT_YUV422P)
+		pixfmt->pixelformat = common->fmt.fmt.pix.pixelformat;
 
-	pixfmt = &fmt->fmt.pix;
-	/* Check for valid field format */
-	ret = vpif_check_format(ch, pixfmt);
-	if (ret)
-		return ret;
+	if (vpif_update_resolution(ch))
+		return -EINVAL;
+
+	pixfmt->colorspace = common->fmt.fmt.pix.colorspace;
+	pixfmt->field = common->fmt.fmt.pix.field;
+	pixfmt->bytesperline = common->fmt.fmt.pix.width;
+	pixfmt->width = common->fmt.fmt.pix.width;
+	pixfmt->height = common->fmt.fmt.pix.height;
+	pixfmt->sizeimage = pixfmt->bytesperline * pixfmt->height * 2;
+	pixfmt->priv = 0;
 
-	/* store the pix format in the channel object */
-	common->fmt.fmt.pix = *pixfmt;
-	/* store the format in the channel object */
-	common->fmt = *fmt;
 	return 0;
 }
 
-static int vpif_try_fmt_vid_out(struct file *file, void *priv,
+static int vpif_s_fmt_vid_out(struct file *file, void *priv,
 				struct v4l2_format *fmt)
 {
 	struct video_device *vdev = video_devdata(file);
 	struct channel_obj *ch = video_get_drvdata(vdev);
 	struct common_obj *common = &ch->common[VPIF_VIDEO_INDEX];
 	struct v4l2_pix_format *pixfmt = &fmt->fmt.pix;
-	int ret = 0;
+	int ret;
 
-	ret = vpif_check_format(ch, pixfmt);
-	if (ret) {
-		*pixfmt = common->fmt.fmt.pix;
-		pixfmt->sizeimage = pixfmt->width * pixfmt->height * 2;
-	}
+	if (vb2_is_busy(&common->buffer_queue))
+		return -EBUSY;
 
-	return ret;
+	ret = vpif_try_fmt_vid_out(file, priv, fmt);
+	if (ret)
+		return ret;
+
+	/* store the pix format in the channel object */
+	common->fmt.fmt.pix = *pixfmt;
+
+	/* store the format in the channel object */
+	common->fmt = *fmt;
+	return 0;
 }
 
 static int vpif_s_std(struct file *file, void *priv, v4l2_std_id std_id)
@@ -738,7 +701,6 @@ static int vpif_s_std(struct file *file, void *priv, v4l2_std_id std_id)
 	if (!(std_id & VPIF_V4L2_STD))
 		return -EINVAL;
 
-
 	/* Call encoder subdevice function to set the standard */
 	ch->video.stdid = std_id;
 	memset(&ch->video.dv_timings, 0, sizeof(ch->video.dv_timings));
@@ -747,8 +709,6 @@ static int vpif_s_std(struct file *file, void *priv, v4l2_std_id std_id)
 		return -EINVAL;
 
 	common->fmt.fmt.pix.bytesperline = common->fmt.fmt.pix.width;
-	/* Configure the default format information */
-	vpif_config_format(ch);
 
 	ret = v4l2_device_call_until_err(&vpif_obj.v4l2_dev, 1, video,
 						s_std_output, std_id);
@@ -1215,6 +1175,11 @@ static int vpif_probe_complete(void)
 		if (err)
 			goto probe_out;
 
+		/* set initial format */
+		ch->video.stdid = V4L2_STD_525_60;
+		memset(&ch->video.dv_timings, 0, sizeof(ch->video.dv_timings));
+		vpif_update_resolution(ch);
+
 		/* Initialize vb2 queue */
 		q = &common->buffer_queue;
 		q->type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
@@ -1226,7 +1191,6 @@ static int vpif_probe_complete(void)
 		q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
 		q->min_buffers_needed = 1;
 		q->lock = &common->lock;
-
 		err = vb2_queue_init(q);
 		if (err) {
 			vpif_err("vpif_display: vb2_queue_init() failed\n");
-- 
1.7.9.5


  parent reply	other threads:[~2014-05-16 13:41 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-16 13:33 [PATCH v5 00/49] DaVinci: vpif: upgrade with v4l helpers and v4l compliance fixes Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 01/49] media: davinci: vpif_display: initalize vb2 queue and DMA context during probe Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 01/49] media: davinci: vpif_display: initialize " Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 02/49] media: davinci: vpif_display: drop buf_init() callback Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 03/49] media: davinci: vpif_display: use vb2_ops_wait_prepare/finish helper functions Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 04/49] media: davinci: vpif_display: release buffers in case start_streaming() call back fails Lad, Prabhakar
2014-05-23  8:35   ` Hans Verkuil
2014-05-24  4:02     ` Prabhakar Lad
2014-05-16 13:33 ` [PATCH v5 05/49] media: davinci: vpif_display: drop buf_cleanup() callback Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 06/49] media: davinci: vpif_display: improve vpif_buffer_prepare() callback Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 07/49] media: davinci: vpif_display: improve vpif_buffer_queue_setup() function Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 08/49] media: davinci: vpif_display: improve start/stop_streaming callbacks Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 09/49] media: davinci: vpif_display: use vb2_fop_mmap/poll Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 10/49] media: davinci: vpif_display: use v4l2_fh_open and vb2_fop_release Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 11/49] media: davinci: vpif_display: use vb2_ioctl_* helpers Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 12/49] media: davinci: vpif_display: drop unused member fbuffers Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 13/49] media: davinci: vpif_display: drop reserving memory for device Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 14/49] media: davinci: vpif_display: drop unnecessary field memory Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 15/49] media: davinci: vpif_display: drop numbuffers field from common_obj Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 16/49] media: davinic: vpif_display: drop started member from struct common_obj Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 17/49] media: davinci: vpif_display: initialize the video device in single place Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 18/49] media: davinci: vpif_display: drop unneeded module params Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 19/49] media: davinci: vpif_display: drop cropcap Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 20/49] media: davinci: vpif_display: group v4l2_ioctl_ops Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 21/49] media: davinci: vpif_display: use SIMPLE_DEV_PM_OPS Lad, Prabhakar
2014-05-23  8:48   ` Hans Verkuil
2014-05-16 13:33 ` [PATCH v5 22/49] media: davinci: vpif_display: return -ENODATA for *dv_timings calls Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 23/49] media: davinci: vpif_display: return -ENODATA for *std calls Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 24/49] media: davinci; vpif_display: fix checkpatch error Lad, Prabhakar
2014-05-16 13:33 ` Lad, Prabhakar [this message]
2014-05-16 13:33 ` [PATCH v5 26/49] media: davinci: vpif_capture: initalize vb2 queue and DMA context during probe Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 27/49] media: davinci: vpif_capture: drop buf_init() callback Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 28/49] media: davinci: vpif_capture: use vb2_ops_wait_prepare/finish helper functions Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 28/49] media: davinci: vpif_display: " Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 29/49] media: davinci: vpif_capture: release buffers in case start_streaming() call back fails Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 30/49] media: davinci: vpif_capture: drop buf_cleanup() callback Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 31/49] media: davinci: vpif_capture: improve vpif_buffer_prepare() callback Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 32/49] media: davinci: vpif_capture: improve vpif_buffer_queue_setup() function Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 33/49] media: davinci: vpif_capture: improve start/stop_streaming callbacks Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 34/49] media: davinci: vpif_capture: use vb2_fop_mmap/poll Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 35/49] media: davinci: vpif_capture: use v4l2_fh_open and vb2_fop_release Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 36/49] media: davinci: vpif_capture: use vb2_ioctl_* helpers Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 37/49] media: davinci: vpif_capture: drop reserving memory for device Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 38/49] media: davinci: vpif_capture: drop unnecessary field memory Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 39/49] media: davinic: vpif_capture: drop started member from struct common_obj Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 40/49] media: davinci: vpif_capture: initialize the video device in single place Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 41/49] media: davinci: vpif_capture: drop unneeded module params Lad, Prabhakar
2014-05-23 22:38   ` Mauro Carvalho Chehab
2014-05-24  4:27     ` Prabhakar Lad
2014-05-16 13:33 ` [PATCH v5 42/49] media: davinci: vpif_capture: drop cropcap Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 43/49] media: davinci: vpif_capture: group v4l2_ioctl_ops Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 44/49] media: davinci: vpif_capture: use SIMPLE_DEV_PM_OPS Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 45/49] media: davinci: vpif_capture: return -ENODATA for *dv_timings calls Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 46/49] media: davinci: vpif_capture: return -ENODATA for *std calls Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 47/49] media: davinci: vpif_capture: drop check __KERNEL__ Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 48/49] media: davinci: vpif_capture: fix v4l-complinace issues Lad, Prabhakar
2014-05-16 13:33 ` [PATCH v5 49/49] media: davinci: vpif: add Copyright message Lad, Prabhakar
2014-05-23  8:30 ` [PATCH v5 00/49] DaVinci: vpif: upgrade with v4l helpers and v4l compliance fixes Hans Verkuil
2014-05-24  4:09   ` Prabhakar Lad
2014-05-23  9:05 ` Hans Verkuil

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=1400247235-31434-27-git-send-email-prabhakar.csengg@gmail.com \
    --to=prabhakar.csengg@gmail.com \
    --cc=davinci-linux-open-source@linux.davincidsp.com \
    --cc=hans.verkuil@cisco.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    /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

all inboxes | Powered by JetHome®