From patchwork Tue Mar 14 19:02:50 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Niklas_S=C3=B6derlund?= X-Patchwork-Id: 9624307 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id ED20960492 for ; Tue, 14 Mar 2017 19:07:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E140826E4F for ; Tue, 14 Mar 2017 19:07:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D64A527D45; Tue, 14 Mar 2017 19:07:23 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7CF2726E4F for ; Tue, 14 Mar 2017 19:07:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752477AbdCNTHV (ORCPT ); Tue, 14 Mar 2017 15:07:21 -0400 Received: from smtp-4.sys.kth.se ([130.237.48.193]:37423 "EHLO smtp-4.sys.kth.se" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750943AbdCNTGi (ORCPT ); Tue, 14 Mar 2017 15:06:38 -0400 Received: from smtp-4.sys.kth.se (localhost.localdomain [127.0.0.1]) by smtp-4.sys.kth.se (Postfix) with ESMTP id 79D8233EA; Tue, 14 Mar 2017 20:06:35 +0100 (CET) X-Virus-Scanned: by amavisd-new at kth.se Received: from smtp-4.sys.kth.se ([127.0.0.1]) by smtp-4.sys.kth.se (smtp-4.sys.kth.se [127.0.0.1]) (amavisd-new, port 10024) with LMTP id L78wyAiPhmBx; Tue, 14 Mar 2017 20:06:34 +0100 (CET) X-KTH-Auth: niso [89.233.230.99] X-KTH-mail-from: niklas.soderlund+renesas@ragnatech.se Received: from bismarck.berto.se (unknown [89.233.230.99]) by smtp-4.sys.kth.se (Postfix) with ESMTPSA id 647DC3287; Tue, 14 Mar 2017 20:06:34 +0100 (CET) From: =?UTF-8?q?Niklas=20S=C3=B6derlund?= To: Laurent Pinchart , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org, tomoharu.fukawa.eb@renesas.com, Sakari Ailus , Geert Uytterhoeven , =?UTF-8?q?Niklas=20S=C3=B6derlund?= Subject: [PATCH v3 09/27] rcar-vin: all Gen2 boards can scale simplify logic Date: Tue, 14 Mar 2017 20:02:50 +0100 Message-Id: <20170314190308.25790-10-niklas.soderlund+renesas@ragnatech.se> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20170314190308.25790-1-niklas.soderlund+renesas@ragnatech.se> References: <20170314190308.25790-1-niklas.soderlund+renesas@ragnatech.se> MIME-Version: 1.0 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The logic to preserve the requested format width and height are too complex and come from a premature optimization for Gen3. All Gen2 SoC can scale and the Gen3 implementation will not use these functions at all so simply preserve the width and hight when interacting with the subdevice much like the field is preserved simplifies the logic quiet a bit. Signed-off-by: Niklas Söderlund --- drivers/media/platform/rcar-vin/rcar-dma.c | 8 -------- drivers/media/platform/rcar-vin/rcar-v4l2.c | 22 ++++++++++------------ drivers/media/platform/rcar-vin/rcar-vin.h | 2 -- 3 files changed, 10 insertions(+), 22 deletions(-) diff --git a/drivers/media/platform/rcar-vin/rcar-dma.c b/drivers/media/platform/rcar-vin/rcar-dma.c index eff5d8f719e4ab26..286aafab533cda9d 100644 --- a/drivers/media/platform/rcar-vin/rcar-dma.c +++ b/drivers/media/platform/rcar-vin/rcar-dma.c @@ -585,14 +585,6 @@ void rvin_crop_scale_comp(struct rvin_dev *vin) 0, 0); } -void rvin_scale_try(struct rvin_dev *vin, struct v4l2_pix_format *pix, - u32 width, u32 height) -{ - /* All VIN channels on Gen2 have scalers */ - pix->width = width; - pix->height = height; -} - /* ----------------------------------------------------------------------------- * Hardware setup */ diff --git a/drivers/media/platform/rcar-vin/rcar-v4l2.c b/drivers/media/platform/rcar-vin/rcar-v4l2.c index 709ee828f2ac2173..40bb3d7e73131d3b 100644 --- a/drivers/media/platform/rcar-vin/rcar-v4l2.c +++ b/drivers/media/platform/rcar-vin/rcar-v4l2.c @@ -166,6 +166,7 @@ static int __rvin_try_format_source(struct rvin_dev *vin, .which = which, }; enum v4l2_field field; + u32 width, height; int ret; sd = vin_to_source(vin); @@ -178,7 +179,10 @@ static int __rvin_try_format_source(struct rvin_dev *vin, format.pad = vin->digital.source_pad; + /* Allow the video device to override field and to scale */ field = pix->field; + width = pix->width; + height = pix->height; ret = v4l2_subdev_call(sd, pad, set_fmt, pad_cfg, &format); if (ret < 0 && ret != -ENOIOCTLCMD) @@ -191,6 +195,9 @@ static int __rvin_try_format_source(struct rvin_dev *vin, source->width = pix->width; source->height = pix->height; + pix->width = width; + pix->height = height; + vin_dbg(vin, "Source resolution: %ux%u\n", source->width, source->height); @@ -205,13 +212,9 @@ static int __rvin_try_format(struct rvin_dev *vin, struct rvin_source_fmt *source) { const struct rvin_video_format *info; - u32 rwidth, rheight, walign; + u32 walign; int ret; - /* Requested */ - rwidth = pix->width; - rheight = pix->height; - /* Keep current field if no specific one is asked for */ if (pix->field == V4L2_FIELD_ANY) pix->field = vin->format.field; @@ -254,10 +257,6 @@ static int __rvin_try_format(struct rvin_dev *vin, break; } - /* If source can't match format try if VIN can scale */ - if (source->width != rwidth || source->height != rheight) - rvin_scale_try(vin, pix, rwidth, rheight); - /* HW limit width to a multiple of 32 (2^5) for NV16 else 2 (2^1) */ walign = vin->format.pixelformat == V4L2_PIX_FMT_NV16 ? 5 : 1; @@ -276,9 +275,8 @@ static int __rvin_try_format(struct rvin_dev *vin, return -EINVAL; } - vin_dbg(vin, "Requested %ux%u Got %ux%u bpl: %d size: %d\n", - rwidth, rheight, pix->width, pix->height, - pix->bytesperline, pix->sizeimage); + vin_dbg(vin, "Format %ux%u bpl: %d size: %d\n", + pix->width, pix->height, pix->bytesperline, pix->sizeimage); return 0; } diff --git a/drivers/media/platform/rcar-vin/rcar-vin.h b/drivers/media/platform/rcar-vin/rcar-vin.h index 32d9d130dd6e2e44..6bf2e4ff8f6076c7 100644 --- a/drivers/media/platform/rcar-vin/rcar-vin.h +++ b/drivers/media/platform/rcar-vin/rcar-vin.h @@ -176,8 +176,6 @@ void rvin_v4l2_remove(struct rvin_dev *vin); const struct rvin_video_format *rvin_format_from_pixel(u32 pixelformat); /* Cropping, composing and scaling */ -void rvin_scale_try(struct rvin_dev *vin, struct v4l2_pix_format *pix, - u32 width, u32 height); void rvin_crop_scale_comp(struct rvin_dev *vin); #endif