From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 8DE60C87FDA for ; Fri, 8 Aug 2025 20:19:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=coT3BGHSQu+dh4WA9sC7YVNO0uLFckVLlkqLvRckP9w=; b=g1N3aGkI/3loeD 5uW19IJrtOZn6SO06YGcmqh/IkPkM4CqD8H7/3klf2HOolpMIot0e050PNqQpOb33tMW0RJSNmUIr 70O38vRiMxpNh9b+Z77EUF3utppdCAh2xnjeXHGWrO+DVMl8zVzdMB2mWJzLBR17oJn1fvhXwPM4S 87koljX652KKAJk1UYT/e+SeovmZcOUWm4L0l7AysBlb3DqIR2J2Rp74vAkyxY4QbBAYPqtpQMqgJ zbc4ik1s6cnlNThEsdEcJ354JT3gVY4ILL+OVxr+p+qx0ekdURQp4dct29SHo8bfYYUWEJayzTjbh ZRflrYAcRYezqEyp9xxQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1ukTYj-00000003bxn-1r9z; Fri, 08 Aug 2025 20:19:25 +0000 Received: from bali.collaboradmins.com ([148.251.105.195]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1ukTJk-00000003a6s-1VNN; Fri, 08 Aug 2025 20:03:57 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1754683435; bh=UZOwAHNTJe+4Lf5Fv80dzrhgTqLUx5Y3CWAEL+Z3Gnk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Zq3cE/tbh45sP9Ayvz0gMjYR3FpP3YJRfN4Br/hFdkUJffvJC9P3SYokD0dCk6G60 xHnV/BrDo8R1nWzWvrBH2bLdeqNJXJcO7d4HgWU6KLk5VmyAQcqDe933RDrN6AOZUA /mI1YgeX9l+kDwlSxXfT4VWL618s68AeDugOJ9qwrdIZAxvrXmbM8uFRPNdEmcbQ8Y VREUGkb4rWDGz30UvC7sNLbBU4QIfru1gMivRcg3bd/CYEgMcIZfJkVJkj3mvEOvXq 6S27BO+ITkgjADWcGWLFATy0gAmJh23BspPErbndgDFECK4vt6pMu/FVaTsGPWdcIL /Sd0nn/GCwX0w== Received: from earth.mtl.collabora.ca (mtl.collabora.ca [66.171.169.34]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: detlev) by bali.collaboradmins.com (Postfix) with ESMTPSA id E9B4817E1298; Fri, 8 Aug 2025 22:03:53 +0200 (CEST) From: Detlev Casanova To: linux-kernel@vger.kernel.org Cc: Detlev Casanova , Mauro Carvalho Chehab , Heiko Stuebner , linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, kernel@collabora.com Subject: [PATCH v2 05/12] media: rkvdec: Add per variant configuration Date: Fri, 8 Aug 2025 16:03:27 -0400 Message-ID: <20250808200340.156393-6-detlev.casanova@collabora.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250808200340.156393-1-detlev.casanova@collabora.com> References: <20250808200340.156393-1-detlev.casanova@collabora.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250808_130356_556747_C88E9CE5 X-CRM114-Status: GOOD ( 19.63 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org This is to prepare for adding different variants of the decoder and support specific formats and ops. Signed-off-by: Detlev Casanova --- .../media/platform/rockchip/rkvdec/rkvdec.c | 50 ++++++++++++------- .../media/platform/rockchip/rkvdec/rkvdec.h | 6 +++ 2 files changed, 39 insertions(+), 17 deletions(-) diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec.c b/drivers/media/platform/rockchip/rkvdec/rkvdec.c index a71837103b71d..28585522523c7 100644 --- a/drivers/media/platform/rockchip/rkvdec/rkvdec.c +++ b/drivers/media/platform/rockchip/rkvdec/rkvdec.c @@ -286,13 +286,14 @@ static const struct rkvdec_coded_fmt_desc rkvdec_coded_fmts[] = { }; static const struct rkvdec_coded_fmt_desc * -rkvdec_find_coded_fmt_desc(u32 fourcc) +rkvdec_find_coded_fmt_desc(struct rkvdec_ctx *ctx, u32 fourcc) { + struct rkvdec_config *cfg = ctx->dev->config; unsigned int i; - for (i = 0; i < ARRAY_SIZE(rkvdec_coded_fmts); i++) { - if (rkvdec_coded_fmts[i].fourcc == fourcc) - return &rkvdec_coded_fmts[i]; + for (i = 0; i < cfg->coded_fmts_num; i++) { + if (cfg->coded_fmts[i].fourcc == fourcc) + return &cfg->coded_fmts[i]; } return NULL; @@ -300,9 +301,10 @@ rkvdec_find_coded_fmt_desc(u32 fourcc) static void rkvdec_reset_coded_fmt(struct rkvdec_ctx *ctx) { + struct rkvdec_config *cfg = ctx->dev->config; struct v4l2_format *f = &ctx->coded_fmt; - ctx->coded_fmt_desc = &rkvdec_coded_fmts[0]; + ctx->coded_fmt_desc = &cfg->coded_fmts[0]; rkvdec_reset_fmt(ctx, f, ctx->coded_fmt_desc->fourcc); f->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE; @@ -316,12 +318,13 @@ static void rkvdec_reset_coded_fmt(struct rkvdec_ctx *ctx) static int rkvdec_enum_framesizes(struct file *file, void *priv, struct v4l2_frmsizeenum *fsize) { + struct rkvdec_ctx *ctx = fh_to_rkvdec_ctx(priv); const struct rkvdec_coded_fmt_desc *fmt; if (fsize->index != 0) return -EINVAL; - fmt = rkvdec_find_coded_fmt_desc(fsize->pixel_format); + fmt = rkvdec_find_coded_fmt_desc(ctx, fsize->pixel_format); if (!fmt) return -EINVAL; @@ -388,12 +391,13 @@ static int rkvdec_try_output_fmt(struct file *file, void *priv, { struct v4l2_pix_format_mplane *pix_mp = &f->fmt.pix_mp; struct rkvdec_ctx *ctx = fh_to_rkvdec_ctx(priv); + struct rkvdec_config *cfg = ctx->dev->config; const struct rkvdec_coded_fmt_desc *desc; - desc = rkvdec_find_coded_fmt_desc(pix_mp->pixelformat); + desc = rkvdec_find_coded_fmt_desc(ctx, pix_mp->pixelformat); if (!desc) { - pix_mp->pixelformat = rkvdec_coded_fmts[0].fourcc; - desc = &rkvdec_coded_fmts[0]; + pix_mp->pixelformat = cfg->coded_fmts[0].fourcc; + desc = &cfg->coded_fmts[0]; } v4l2_apply_frmsize_constraints(&pix_mp->width, @@ -470,7 +474,7 @@ static int rkvdec_s_output_fmt(struct file *file, void *priv, if (ret) return ret; - desc = rkvdec_find_coded_fmt_desc(f->fmt.pix_mp.pixelformat); + desc = rkvdec_find_coded_fmt_desc(ctx, f->fmt.pix_mp.pixelformat); if (!desc) return -EINVAL; ctx->coded_fmt_desc = desc; @@ -522,10 +526,13 @@ static int rkvdec_g_capture_fmt(struct file *file, void *priv, static int rkvdec_enum_output_fmt(struct file *file, void *priv, struct v4l2_fmtdesc *f) { - if (f->index >= ARRAY_SIZE(rkvdec_coded_fmts)) + struct rkvdec_ctx *ctx = fh_to_rkvdec_ctx(priv); + struct rkvdec_config *cfg = ctx->dev->config; + + if (f->index >= cfg->coded_fmts_num) return -EINVAL; - f->pixelformat = rkvdec_coded_fmts[f->index].fourcc; + f->pixelformat = cfg->coded_fmts[f->index].fourcc; return 0; } @@ -895,16 +902,17 @@ static int rkvdec_add_ctrls(struct rkvdec_ctx *ctx, static int rkvdec_init_ctrls(struct rkvdec_ctx *ctx) { + struct rkvdec_config *cfg = ctx->dev->config; unsigned int i, nctrls = 0; int ret; - for (i = 0; i < ARRAY_SIZE(rkvdec_coded_fmts); i++) - nctrls += rkvdec_coded_fmts[i].ctrls->num_ctrls; + for (i = 0; i < cfg->coded_fmts_num; i++) + nctrls += cfg->coded_fmts[i].ctrls->num_ctrls; v4l2_ctrl_handler_init(&ctx->ctrl_hdl, nctrls); - for (i = 0; i < ARRAY_SIZE(rkvdec_coded_fmts); i++) { - ret = rkvdec_add_ctrls(ctx, rkvdec_coded_fmts[i].ctrls); + for (i = 0; i < cfg->coded_fmts_num; i++) { + ret = rkvdec_add_ctrls(ctx, cfg->coded_fmts[i].ctrls); if (ret) goto err_free_handler; } @@ -1119,8 +1127,13 @@ static void rkvdec_watchdog_func(struct work_struct *work) } } +const struct rkvdec_config config_rkvdec = { + .coded_fmts = (struct rkvdec_coded_fmt_desc *)rkvdec_coded_fmts, + .coded_fmts_num = ARRAY_SIZE(rkvdec_coded_fmts), +}; + static const struct of_device_id of_rkvdec_match[] = { - { .compatible = "rockchip,rk3399-vdec" }, + { .compatible = "rockchip,rk3399-vdec", .data = &config_rkvdec }, { /* sentinel */ } }; MODULE_DEVICE_TABLE(of, of_rkvdec_match); @@ -1144,6 +1157,9 @@ static int rkvdec_probe(struct platform_device *pdev) mutex_init(&rkvdec->vdev_lock); INIT_DELAYED_WORK(&rkvdec->watchdog_work, rkvdec_watchdog_func); + rkvdec->config = + (struct rkvdec_config *)of_device_get_match_data(rkvdec->dev); + rkvdec->clocks = devm_kcalloc(&pdev->dev, ARRAY_SIZE(rkvdec_clk_names), sizeof(*rkvdec->clocks), GFP_KERNEL); if (!rkvdec->clocks) diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec.h b/drivers/media/platform/rockchip/rkvdec/rkvdec.h index 3451c4bf7cb75..14717c646c665 100644 --- a/drivers/media/platform/rockchip/rkvdec/rkvdec.h +++ b/drivers/media/platform/rockchip/rkvdec/rkvdec.h @@ -100,6 +100,11 @@ struct rkvdec_coded_fmt_desc { u32 subsystem_flags; }; +struct rkvdec_config { + struct rkvdec_coded_fmt_desc *coded_fmts; + size_t coded_fmts_num; +}; + struct rkvdec_dev { struct v4l2_device v4l2_dev; struct media_device mdev; @@ -111,6 +116,7 @@ struct rkvdec_dev { struct mutex vdev_lock; /* serializes ioctls */ struct delayed_work watchdog_work; struct iommu_domain *empty_domain; + struct rkvdec_config *config; }; struct rkvdec_ctx { -- 2.50.1 _______________________________________________ Linux-rockchip mailing list Linux-rockchip@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-rockchip