From 1a2551d968c1a3568f11fe2dedc9d08d6f4272a2 Mon Sep 17 00:00:00 2001 From: Detlev Casanova Date: Tue, 10 Jun 2025 15:13:46 -0400 Subject: [PATCH 075/113] DETLEV(v3): media: rkvdec: Support per-variant interrupt handler Preparation commit for supporting different variants with different interrupt management. Signed-off-by: Detlev Casanova --- drivers/media/platform/rockchip/rkvdec/rkvdec.c | 15 ++++++++++++--- drivers/media/platform/rockchip/rkvdec/rkvdec.h | 1 + 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec.c b/drivers/media/platform/rockchip/rkvdec/rkvdec.c index 19deb1d34a18..a0dca7bff071 100644 --- a/drivers/media/platform/rockchip/rkvdec/rkvdec.c +++ b/drivers/media/platform/rockchip/rkvdec/rkvdec.c @@ -1218,10 +1218,9 @@ static void rkvdec_iommu_restore(struct rkvdec_dev *rkvdec) } } -static irqreturn_t rkvdec_irq_handler(int irq, void *priv) +static irqreturn_t rk3399_irq_handler(struct rkvdec_ctx *ctx) { - struct rkvdec_dev *rkvdec = priv; - struct rkvdec_ctx *ctx = v4l2_m2m_get_curr_priv(rkvdec->m2m_dev); + struct rkvdec_dev *rkvdec = ctx->dev; enum vb2_buffer_state state; u32 status; @@ -1242,6 +1241,15 @@ static irqreturn_t rkvdec_irq_handler(int irq, void *priv) return IRQ_HANDLED; } +static irqreturn_t rkvdec_irq_handler(int irq, void *priv) +{ + struct rkvdec_dev *rkvdec = priv; + struct rkvdec_ctx *ctx = v4l2_m2m_get_curr_priv(rkvdec->m2m_dev); + const struct rkvdec_config *cfg = rkvdec->config; + + return cfg->irq_handler(ctx); +} + static void rkvdec_watchdog_func(struct work_struct *work) { struct rkvdec_dev *rkvdec; @@ -1260,6 +1268,7 @@ static void rkvdec_watchdog_func(struct work_struct *work) static const struct rkvdec_config config_rkvdec = { .coded_fmts = (struct rkvdec_coded_fmt_desc *)rkvdec_coded_fmts, .coded_fmts_num = ARRAY_SIZE(rkvdec_coded_fmts), + .irq_handler = rk3399_irq_handler, }; static const struct rkvdec_variant rk3288_rkvdec_variant = { diff --git a/drivers/media/platform/rockchip/rkvdec/rkvdec.h b/drivers/media/platform/rockchip/rkvdec/rkvdec.h index 86d1af5dee5e..117ebf198a1e 100644 --- a/drivers/media/platform/rockchip/rkvdec/rkvdec.h +++ b/drivers/media/platform/rockchip/rkvdec/rkvdec.h @@ -121,6 +121,7 @@ struct rkvdec_config { size_t coded_fmts_num; struct rcb_size_info *rcb_size_info; size_t rcb_num; + irqreturn_t (*irq_handler)(struct rkvdec_ctx *ctx); }; struct rkvdec_dev { -- 2.34.1