From patchwork Fri Aug 14 20:54:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrey Konovalov X-Patchwork-Id: 250651 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.3 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNWANTED_LANGUAGE_BODY, URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id DFC7EC433E3 for ; Fri, 14 Aug 2020 20:54:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B4E292074D for ; Fri, 14 Aug 2020 20:54:48 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="LVkyRz4R" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726229AbgHNUys (ORCPT ); Fri, 14 Aug 2020 16:54:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41044 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726754AbgHNUyr (ORCPT ); Fri, 14 Aug 2020 16:54:47 -0400 Received: from mail-lf1-x144.google.com (mail-lf1-x144.google.com [IPv6:2a00:1450:4864:20::144]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3D4A2C061386 for ; Fri, 14 Aug 2020 13:54:47 -0700 (PDT) Received: by mail-lf1-x144.google.com with SMTP id s9so5486453lfs.4 for ; Fri, 14 Aug 2020 13:54:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=gh4jDH3BMdXd5cGD6HfDwKGJPSCytu5DEXM3Fm8l8r8=; b=LVkyRz4RQCq4E0AAaFh5AMPVNjK8SXRMgREL1S+mWhLy2y0HEANpxwfGQrpXEnLeZT kgVyT1iDIEFv42yugzMO7Z5kbo360HP2Uqp/+75KQ0ykOm+v5+vtjZetsfLaOEY8OsNL tBA+IGOXYv4zUcljx9rvfDDkesLyl0V9pylEyCsslVe0kOfpsB3950McUSNCaWAjgE3Q V0Uhfv0q627W/zqGjERrt/gOtoMZ/6ILfUHN1XrdndoXf3Mf3IcwBgQQaM07y/cvn33k IVVKLhPepc0WTxBiEtSCJJjuIAoWjVTOXt5RDgLpnhlkXVJ222ij1T10l+VLAKEmeEB0 aoKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=gh4jDH3BMdXd5cGD6HfDwKGJPSCytu5DEXM3Fm8l8r8=; b=o5+tNrKyMLV39GGl3OA01VUQHh1ZFSBoZA8DQx9bT9gcnlRcAV9Xt7OmLc2rvbpjzj 8NyRoCh5vbp6gqw3ooveBJ/h10CQUewLwJcmumCJz+SuJnuMQWbCuG7Q0Vtr6Nu/AzNR 3O831D1upDViHMiW3J1KtjbIw22Lf1uMwlfAmz/nwfdOunAgUGmtsmaiVbLOhwvQudDe K+r2S1eMFYIpo+712P6dagQ334AWcGJ9HLMlVZpvtZXmO+1o29G41fzYdfHRjGe6FNmK o3Nd5HCAykZTVW2BcVVUUnmMl54v0wzyK+WDxrK1KBfjc16ZS6Zsu9tVYZ1kFv6ogLuX dz1A== X-Gm-Message-State: AOAM530zSiSbT0k7l9g6pNIuVst7LXPJpPKh8E+qjZ1oyQ012TifO+dg uawHe+Wo2QrEDR8bFUlcn9fdSQ== X-Google-Smtp-Source: ABdhPJy/bsTW4rk6yhCLLdCmASmG8Ag5bgLjn2l/h51v4zcnAv5/69cvz+iuSD7jwfEMQ9fTOLdXkA== X-Received: by 2002:a05:6512:3138:: with SMTP id p24mr2061128lfd.143.1597438485456; Fri, 14 Aug 2020 13:54:45 -0700 (PDT) Received: from localhost.localdomain (37-144-159-139.broadband.corbina.ru. [37.144.159.139]) by smtp.googlemail.com with ESMTPSA id j26sm1963601lja.111.2020.08.14.13.54.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Aug 2020 13:54:44 -0700 (PDT) From: Andrey Konovalov To: mchehab@kernel.org, robert.foss@linaro.org Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, peter.griffin@linaro.org, Andrey Konovalov Subject: [PATCH 2/3] media: camss: add support for vidioc_enum_framesizes ioctl Date: Fri, 14 Aug 2020 23:54:02 +0300 Message-Id: <20200814205403.27639-3-andrey.konovalov@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200814205403.27639-1-andrey.konovalov@linaro.org> References: <20200814205403.27639-1-andrey.konovalov@linaro.org> Sender: linux-arm-msm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org VIDIOC_ENUM_FRAMESIZES support in the video capture driver is required by libcamera. Without this change libcamera errors out with: "ERROR V4L2 v4l2_videodevice.cpp:1059 /dev/video0[cap]: Unable to enumerate frame sizes: Inappropriate ioctl for device" Signed-off-by: Andrey Konovalov --- .../media/platform/qcom/camss/camss-video.c | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/drivers/media/platform/qcom/camss/camss-video.c b/drivers/media/platform/qcom/camss/camss-video.c index 90c7dd29b573..e6255f0e6174 100644 --- a/drivers/media/platform/qcom/camss/camss-video.c +++ b/drivers/media/platform/qcom/camss/camss-video.c @@ -18,6 +18,12 @@ #include "camss-video.h" #include "camss.h" +#define CAMSS_FRAME_MIN_WIDTH 1 +#define CAMSS_FRAME_MAX_WIDTH 8191 +#define CAMSS_FRAME_MIN_HEIGHT 1 +#define CAMSS_FRAME_MAX_HEIGHT_RDI 8191 +#define CAMSS_FRAME_MAX_HEIGHT_PIX 4096 + struct fract { u8 numerator; u8 denominator; @@ -605,6 +611,36 @@ static int video_enum_fmt(struct file *file, void *fh, struct v4l2_fmtdesc *f) return 0; } +static int video_enum_framesizes(struct file *file, void *fh, + struct v4l2_frmsizeenum *fsize) +{ + struct camss_video *video = video_drvdata(file); + int i; + + if (fsize->index) + return -EINVAL; + + /* Only accept pixel format present in the formats[] table */ + for (i = 0; i < video->nformats; i++) { + if (video->formats[i].pixelformat == fsize->pixel_format) + break; + } + + if (i == video->nformats) + return -EINVAL; + + fsize->type = V4L2_FRMSIZE_TYPE_CONTINUOUS; + fsize->stepwise.min_width = CAMSS_FRAME_MIN_WIDTH; + fsize->stepwise.max_width = CAMSS_FRAME_MAX_WIDTH; + fsize->stepwise.min_height = CAMSS_FRAME_MIN_HEIGHT; + fsize->stepwise.max_height = (video->line_based) ? + CAMSS_FRAME_MAX_HEIGHT_PIX : CAMSS_FRAME_MAX_HEIGHT_RDI; + fsize->stepwise.step_width = 1; + fsize->stepwise.step_height = 1; + + return 0; +} + static int video_g_fmt(struct file *file, void *fh, struct v4l2_format *f) { struct camss_video *video = video_drvdata(file); @@ -745,6 +781,7 @@ static int video_s_input(struct file *file, void *fh, unsigned int input) static const struct v4l2_ioctl_ops msm_vid_ioctl_ops = { .vidioc_querycap = video_querycap, .vidioc_enum_fmt_vid_cap = video_enum_fmt, + .vidioc_enum_framesizes = video_enum_framesizes, .vidioc_g_fmt_vid_cap_mplane = video_g_fmt, .vidioc_s_fmt_vid_cap_mplane = video_s_fmt, .vidioc_try_fmt_vid_cap_mplane = video_try_fmt,