Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3730591pxb; Mon, 24 Jan 2022 16:33:57 -0800 (PST) X-Google-Smtp-Source: ABdhPJz4D9Zc/w6DtfCnjlw2W1sDSstxSXki1GoLYfngfI7wznM4uLj6H9I019nUP07z7bkdey5V X-Received: by 2002:a17:902:8695:b0:14a:f006:db03 with SMTP id g21-20020a170902869500b0014af006db03mr16146017plo.173.1643070837106; Mon, 24 Jan 2022 16:33:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643070837; cv=none; d=google.com; s=arc-20160816; b=mUh6BkLH70ohE81i3bFrKO8NiTCjPYrkCOVQplVlkbSIfYqeHkUryRxwFyHwI/z2V8 n1LnvInRakw4pUhW/wRtaCFAd6Bqjj0S7mapDoMPMdAOC2mXW3ssIsZ6u/FDMAVJQmQI jNSEJEHC1NrpJkYEH2QxTlDnR90a6AcnYBbRO1Jte43PN5pND91WvVKCRm7m3U6mmcIc bG8RBVUm19nzCMLL9M32at5RQiRV181RaK7TBcCfl3m7Lo70vpZaFIGwepIpwoDNX1aP q1mmMp9oLDx+k9QtRumZoPiLWPIZZTpI6pxAF9PFTGrldW4/1gcSO6sY39m9V1dw+lwf xsDg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=H8tAR+N4y+4zu6uCxDmhvobh2mpTh5W5if197Tc6JgU=; b=YPmc+jOYdwlkr3GO9rg91BIDWM8raioCnZ772LnhWfzHPPFb6RyfdOZb3GvFwtwzPm uXMoyuAQBHcMDkD7hiYN+2tScHxfTxbZGdEWh7UjjX9mqexkair0FQnSjnU8e/bRpdbe WV1EnfqQLyH7ZxzhRRn5RXNs1sSlQlAYOpAdFF2v8PTbxKh/+y8K6jQrPx0Tk+x0aoiw 7vHGVj1vsjNe4fA4aW0+5a70eiUuI6yRu+GhJI9G1tmjakKlE4hQZ6+DfS7Picx4/jSY E18LhgMaQv+mc0/ki3mWmbfdx8jYdpN6+xEjuRHrkSWHxOmktZRq20fvkrpdt21Ghf2C n5mg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=DTANE3LJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b7si14250329pgl.702.2022.01.24.16.33.44; Mon, 24 Jan 2022 16:33:57 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=DTANE3LJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S3410940AbiAYAbQ (ORCPT + 99 others); Mon, 24 Jan 2022 19:31:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59506 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1450656AbiAXVyz (ORCPT ); Mon, 24 Jan 2022 16:54:55 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C1ADCC0C090E; Mon, 24 Jan 2022 12:34:59 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 66E12B80FA1; Mon, 24 Jan 2022 20:34:59 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 91486C340E5; Mon, 24 Jan 2022 20:34:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1643056498; bh=7KCUkHtCZDPiU8Wu1iyvT6sSWdzlValgHc36KTlvECM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DTANE3LJVm878ZdnsQz2Ut4SY28U7L+5WHU7rjzzsScMdJPMJH+DN5ffeDaNiiOgg ELnSAEd7MuFvZ01KMwz6wCB1elaDEi9+CQSGcm6eSC0iKNYKHZMegDlQ4VDq7MTzej 1z9p6gKf64dHga1t8CxuA7RhkUhaOR46XCyOPJRc= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Mauro Carvalho Chehab , Sasha Levin Subject: [PATCH 5.15 472/846] media: atomisp: fix try_fmt logic Date: Mon, 24 Jan 2022 19:39:49 +0100 Message-Id: <20220124184117.289396210@linuxfoundation.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220124184100.867127425@linuxfoundation.org> References: <20220124184100.867127425@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Mauro Carvalho Chehab [ Upstream commit c9e9094c4e42124af909b2f5f6ded0498e0854ac ] The internal try_fmt logic is not meant to provide everything that the V4L2 API should provide. Also, it doesn't decrement the pads that are used only internally by the driver, but aren't part of the device's output. Fix it. Signed-off-by: Mauro Carvalho Chehab Signed-off-by: Sasha Levin --- .../staging/media/atomisp/pci/atomisp_ioctl.c | 72 ++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) diff --git a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c index 29826f8e4143d..54624f8814e04 100644 --- a/drivers/staging/media/atomisp/pci/atomisp_ioctl.c +++ b/drivers/staging/media/atomisp/pci/atomisp_ioctl.c @@ -863,6 +863,72 @@ static int atomisp_g_fmt_file(struct file *file, void *fh, return 0; } +static int atomisp_adjust_fmt(struct v4l2_format *f) +{ + const struct atomisp_format_bridge *format_bridge; + u32 padded_width; + + format_bridge = atomisp_get_format_bridge(f->fmt.pix.pixelformat); + + padded_width = f->fmt.pix.width + pad_w; + + if (format_bridge->planar) { + f->fmt.pix.bytesperline = padded_width; + f->fmt.pix.sizeimage = PAGE_ALIGN(f->fmt.pix.height * + DIV_ROUND_UP(format_bridge->depth * + padded_width, 8)); + } else { + f->fmt.pix.bytesperline = DIV_ROUND_UP(format_bridge->depth * + padded_width, 8); + f->fmt.pix.sizeimage = PAGE_ALIGN(f->fmt.pix.height * f->fmt.pix.bytesperline); + } + + if (f->fmt.pix.field == V4L2_FIELD_ANY) + f->fmt.pix.field = V4L2_FIELD_NONE; + + format_bridge = atomisp_get_format_bridge(f->fmt.pix.pixelformat); + if (!format_bridge) + return -EINVAL; + + /* Currently, raw formats are broken!!! */ + if (format_bridge->sh_fmt == IA_CSS_FRAME_FORMAT_RAW) { + f->fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420; + + format_bridge = atomisp_get_format_bridge(f->fmt.pix.pixelformat); + if (!format_bridge) + return -EINVAL; + } + + padded_width = f->fmt.pix.width + pad_w; + + if (format_bridge->planar) { + f->fmt.pix.bytesperline = padded_width; + f->fmt.pix.sizeimage = PAGE_ALIGN(f->fmt.pix.height * + DIV_ROUND_UP(format_bridge->depth * + padded_width, 8)); + } else { + f->fmt.pix.bytesperline = DIV_ROUND_UP(format_bridge->depth * + padded_width, 8); + f->fmt.pix.sizeimage = PAGE_ALIGN(f->fmt.pix.height * f->fmt.pix.bytesperline); + } + + if (f->fmt.pix.field == V4L2_FIELD_ANY) + f->fmt.pix.field = V4L2_FIELD_NONE; + + /* + * FIXME: do we need to setup this differently, depending on the + * sensor or the pipeline? + */ + f->fmt.pix.colorspace = V4L2_COLORSPACE_REC709; + f->fmt.pix.ycbcr_enc = V4L2_YCBCR_ENC_709; + f->fmt.pix.xfer_func = V4L2_XFER_FUNC_709; + + f->fmt.pix.width -= pad_w; + f->fmt.pix.height -= pad_h; + + return 0; +} + /* This function looks up the closest available resolution. */ static int atomisp_try_fmt_cap(struct file *file, void *fh, struct v4l2_format *f) @@ -874,7 +940,11 @@ static int atomisp_try_fmt_cap(struct file *file, void *fh, rt_mutex_lock(&isp->mutex); ret = atomisp_try_fmt(vdev, &f->fmt.pix, NULL); rt_mutex_unlock(&isp->mutex); - return ret; + + if (ret) + return ret; + + return atomisp_adjust_fmt(f); } static int atomisp_s_fmt_cap(struct file *file, void *fh, -- 2.34.1