From nobody Fri Feb 13 12:44:42 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 03501CE7A96 for ; Mon, 25 Sep 2023 15:41:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233062AbjIYPlp (ORCPT ); Mon, 25 Sep 2023 11:41:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53358 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232807AbjIYPl0 (ORCPT ); Mon, 25 Sep 2023 11:41:26 -0400 Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E3B98126 for ; Mon, 25 Sep 2023 08:41:13 -0700 (PDT) Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-405361bba99so62485395e9.2 for ; Mon, 25 Sep 2023 08:41:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1695656472; x=1696261272; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7RcC5Z13/zUqK69N/so6eHAgcugzjOcvez6QkwUNOkw=; b=op1YuN2UTw9XW9FwZWPyfKg1U9kD+Kk3cjtPj/O7m0V/UbJjnJFqkuQB0zj5lkRn3m fJCSpELZz9aAr/OfDfIsI7PS5VMtEsvDSfgAz/DUBLAr0HIFK+8OzviRKbek9wgCvT2q qvj5848EAoyFsrEmkiLPGaWFVVqA3wAxt9llt53UfjKlu/StDL2uA6CuyRjRLoTCIMZV rNHvVWNbRzb/+Qz6EInM6uXnsnaqJ1IR3gfTf41i2LtaaKhxiKsnujZh+42d+hTdmsei Bm/RTDzDE/JmbXy2I0jvneH33cXNqNR4m0sJwzc+AyGmeeA1BjMqa31g9yKyR5R7Ptio CDGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695656472; x=1696261272; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7RcC5Z13/zUqK69N/so6eHAgcugzjOcvez6QkwUNOkw=; b=wJzmCrNmcxNTw+Ebqb/Upu+aMr4QznL3sb3EMNQQ6O59TWZAPEqwKkiKBoYPqLuZqE ViwHzuZMk3ya0ytG7zzxpEhZdt8XOxtt+IZMjq3WeKEEvLxWb/ULxdgkj5O6ypKiBX48 o4msupM2U2o1CXjlNv1lT7DrGHVD+G+apOtHDgIXB6PIcyYAANxx8JyGa2Z036Cf3Ynn vgJIQqK0EXNstt4QOpvvHG87YYfFKIgfw/YGi0hcdg6EUdpNnHPSl4IIe9fuxkRyAKwp nu5nl7I4695CNcgQjebnmmAOxDjz4rz3jW/K3oQXQbApkmUxboZJ9Ss0ZBB0u5Fx1zM+ 5PMA== X-Gm-Message-State: AOJu0Yy2o/mZZAqKy717JclRGe/tiXh4qfquq9WQyJfk3zlb0A/X++8c 6XoURjUyHm7Kkl/ydup/i9XLhQ== X-Google-Smtp-Source: AGHT+IF4VIf3CoRYinlp+YHFgpoiaY+j7De7jLPnWDafMB8fMxMqwfqsU7Rbzb8OWZwya7vFxblMOA== X-Received: by 2002:a05:600c:2205:b0:405:514d:eb15 with SMTP id z5-20020a05600c220500b00405514deb15mr5677279wml.10.1695656472315; Mon, 25 Sep 2023 08:41:12 -0700 (PDT) Received: from sagittarius-a.chello.ie (188-141-3-169.dynamic.upc.ie. [188.141.3.169]) by smtp.gmail.com with ESMTPSA id m15-20020a7bca4f000000b003fe4548188bsm15206155wml.48.2023.09.25.08.41.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Sep 2023 08:41:11 -0700 (PDT) From: Bryan O'Donoghue To: linux-arm-msm@vger.kernel.org, linux-media@vger.kernel.org, hverkuil@xs4all.nl, laurent.pinchart@ideasonboard.com, robert.foss@linaro.org, todor.too@gmail.com, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, mchehab@kernel.org, sakari.ailus@linux.intel.com, andrey.konovalov@linaro.org Cc: linux-kernel@vger.kernel.org, Bryan O'Donoghue Subject: [PATCH v6 07/17] media: qcom: camss: Pass CAMSS subdev callbacks via resource ops pointer Date: Mon, 25 Sep 2023 16:40:49 +0100 Message-ID: <20230925154059.837152-8-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230925154059.837152-1-bryan.odonoghue@linaro.org> References: <20230925154059.837152-1-bryan.odonoghue@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" It is possible to pass all of the CAMSS subdevice internal operations pointers from the controlling resources structure with an additional pointer added to the resources structure. This allows for the removal of most of the probe-time control structures. Signed-off-by: Bryan O'Donoghue --- .../media/platform/qcom/camss/camss-csid.c | 12 +- .../media/platform/qcom/camss/camss-csiphy.c | 4 +- drivers/media/platform/qcom/camss/camss-vfe.c | 20 +-- drivers/media/platform/qcom/camss/camss.c | 117 ++++++++++++------ drivers/media/platform/qcom/camss/camss.h | 1 + 5 files changed, 86 insertions(+), 68 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media= /platform/qcom/camss/camss-csid.c index 14abb7a7ceb47..99f651e2021cb 100644 --- a/drivers/media/platform/qcom/camss/camss-csid.c +++ b/drivers/media/platform/qcom/camss/camss-csid.c @@ -575,18 +575,8 @@ int msm_csid_subdev_init(struct camss *camss, struct c= sid_device *csid, =20 csid->camss =3D camss; csid->id =3D id; + csid->ops =3D res->ops; =20 - if (camss->res->version =3D=3D CAMSS_8x16) { - csid->ops =3D &csid_ops_4_1; - } else if (camss->res->version =3D=3D CAMSS_8x96 || - camss->res->version =3D=3D CAMSS_660) { - csid->ops =3D &csid_ops_4_7; - } else if (camss->res->version =3D=3D CAMSS_845 || - camss->res->version =3D=3D CAMSS_8250) { - csid->ops =3D &csid_ops_gen2; - } else { - return -EINVAL; - } csid->ops->subdev_init(csid); =20 /* Memory */ diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/med= ia/platform/qcom/camss/camss-csiphy.c index 48e6a101ec9c9..4310a132dcbe2 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy.c +++ b/drivers/media/platform/qcom/camss/camss-csiphy.c @@ -556,19 +556,17 @@ int msm_csiphy_subdev_init(struct camss *camss, csiphy->camss =3D camss; csiphy->id =3D id; csiphy->cfg.combo_mode =3D 0; + csiphy->ops =3D res->ops; =20 if (camss->res->version =3D=3D CAMSS_8x16) { - csiphy->ops =3D &csiphy_ops_2ph_1_0; csiphy->formats =3D csiphy_formats_8x16; csiphy->nformats =3D ARRAY_SIZE(csiphy_formats_8x16); } else if (camss->res->version =3D=3D CAMSS_8x96 || camss->res->version =3D=3D CAMSS_660) { - csiphy->ops =3D &csiphy_ops_3ph_1_0; csiphy->formats =3D csiphy_formats_8x96; csiphy->nformats =3D ARRAY_SIZE(csiphy_formats_8x96); } else if (camss->res->version =3D=3D CAMSS_845 || camss->res->version =3D=3D CAMSS_8250) { - csiphy->ops =3D &csiphy_ops_3ph_1_0; csiphy->formats =3D csiphy_formats_sdm845; csiphy->nformats =3D ARRAY_SIZE(csiphy_formats_sdm845); } else { diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/= platform/qcom/camss/camss-vfe.c index f381c82f1f877..4d5c32d3dddbf 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe.c +++ b/drivers/media/platform/qcom/camss/camss-vfe.c @@ -1286,25 +1286,7 @@ int msm_vfe_subdev_init(struct camss *camss, struct = vfe_device *vfe, int i, j; int ret; =20 - switch (camss->res->version) { - case CAMSS_8x16: - vfe->ops =3D &vfe_ops_4_1; - break; - case CAMSS_8x96: - vfe->ops =3D &vfe_ops_4_7; - break; - case CAMSS_660: - vfe->ops =3D &vfe_ops_4_8; - break; - case CAMSS_845: - vfe->ops =3D &vfe_ops_170; - break; - case CAMSS_8250: - vfe->ops =3D &vfe_ops_480; - break; - default: - return -EINVAL; - } + vfe->ops =3D res->ops; =20 if (!res->line_num) return -EINVAL; diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/plat= form/qcom/camss/camss.c index 54886a2a449b0..12131d9ea7ca8 100644 --- a/drivers/media/platform/qcom/camss/camss.c +++ b/drivers/media/platform/qcom/camss/camss.c @@ -42,7 +42,8 @@ static const struct camss_subdev_resources csiphy_res_8x1= 6[] =3D { { 0 }, { 100000000, 200000000 } }, .reg =3D { "csiphy0", "csiphy0_clk_mux" }, - .interrupt =3D { "csiphy0" } + .interrupt =3D { "csiphy0" }, + .ops =3D &csiphy_ops_2ph_1_0 }, =20 /* CSIPHY1 */ @@ -54,7 +55,8 @@ static const struct camss_subdev_resources csiphy_res_8x1= 6[] =3D { { 0 }, { 100000000, 200000000 } }, .reg =3D { "csiphy1", "csiphy1_clk_mux" }, - .interrupt =3D { "csiphy1" } + .interrupt =3D { "csiphy1" }, + .ops =3D &csiphy_ops_2ph_1_0 } }; =20 @@ -73,7 +75,8 @@ static const struct camss_subdev_resources csid_res_8x16[= ] =3D { { 0 }, { 0 } }, .reg =3D { "csid0" }, - .interrupt =3D { "csid0" } + .interrupt =3D { "csid0" }, + .ops =3D &csid_ops_4_1, }, =20 /* CSID1 */ @@ -90,7 +93,8 @@ static const struct camss_subdev_resources csid_res_8x16[= ] =3D { { 0 }, { 0 } }, .reg =3D { "csid1" }, - .interrupt =3D { "csid1" } + .interrupt =3D { "csid1" }, + .ops =3D &csid_ops_4_1, }, }; =20 @@ -125,6 +129,7 @@ static const struct camss_subdev_resources vfe_res_8x16= [] =3D { .reg =3D { "vfe0" }, .interrupt =3D { "vfe0" }, .line_num =3D VFE_LINE_NUM_GEN1, + .ops =3D &vfe_ops_4_1 } }; =20 @@ -138,7 +143,8 @@ static const struct camss_subdev_resources csiphy_res_8= x96[] =3D { { 0 }, { 100000000, 200000000, 266666667 } }, .reg =3D { "csiphy0", "csiphy0_clk_mux" }, - .interrupt =3D { "csiphy0" } + .interrupt =3D { "csiphy0" }, + .ops =3D &csiphy_ops_3ph_1_0 }, =20 /* CSIPHY1 */ @@ -150,7 +156,8 @@ static const struct camss_subdev_resources csiphy_res_8= x96[] =3D { { 0 }, { 100000000, 200000000, 266666667 } }, .reg =3D { "csiphy1", "csiphy1_clk_mux" }, - .interrupt =3D { "csiphy1" } + .interrupt =3D { "csiphy1" }, + .ops =3D &csiphy_ops_3ph_1_0 }, =20 /* CSIPHY2 */ @@ -162,7 +169,8 @@ static const struct camss_subdev_resources csiphy_res_8= x96[] =3D { { 0 }, { 100000000, 200000000, 266666667 } }, .reg =3D { "csiphy2", "csiphy2_clk_mux" }, - .interrupt =3D { "csiphy2" } + .interrupt =3D { "csiphy2" }, + .ops =3D &csiphy_ops_3ph_1_0 } }; =20 @@ -181,7 +189,8 @@ static const struct camss_subdev_resources csid_res_8x9= 6[] =3D { { 0 }, { 0 } }, .reg =3D { "csid0" }, - .interrupt =3D { "csid0" } + .interrupt =3D { "csid0" }, + .ops =3D &csid_ops_4_7, }, =20 /* CSID1 */ @@ -198,7 +207,8 @@ static const struct camss_subdev_resources csid_res_8x9= 6[] =3D { { 0 }, { 0 } }, .reg =3D { "csid1" }, - .interrupt =3D { "csid1" } + .interrupt =3D { "csid1" }, + .ops =3D &csid_ops_4_7, }, =20 /* CSID2 */ @@ -215,7 +225,8 @@ static const struct camss_subdev_resources csid_res_8x9= 6[] =3D { { 0 }, { 0 } }, .reg =3D { "csid2" }, - .interrupt =3D { "csid2" } + .interrupt =3D { "csid2" }, + .ops =3D &csid_ops_4_7, }, =20 /* CSID3 */ @@ -232,7 +243,8 @@ static const struct camss_subdev_resources csid_res_8x9= 6[] =3D { { 0 }, { 0 } }, .reg =3D { "csid3" }, - .interrupt =3D { "csid3" } + .interrupt =3D { "csid3" }, + .ops =3D &csid_ops_4_7, } }; =20 @@ -266,6 +278,7 @@ static const struct camss_subdev_resources vfe_res_8x96= [] =3D { .reg =3D { "vfe0" }, .interrupt =3D { "vfe0" }, .line_num =3D VFE_LINE_NUM_GEN1, + .ops =3D &vfe_ops_4_7 }, =20 /* VFE1 */ @@ -285,6 +298,7 @@ static const struct camss_subdev_resources vfe_res_8x96= [] =3D { .reg =3D { "vfe1" }, .interrupt =3D { "vfe1" }, .line_num =3D VFE_LINE_NUM_GEN1, + .ops =3D &vfe_ops_4_7 } }; =20 @@ -300,7 +314,8 @@ static const struct camss_subdev_resources csiphy_res_6= 60[] =3D { { 100000000, 200000000, 269333333 }, { 0 } }, .reg =3D { "csiphy0", "csiphy0_clk_mux" }, - .interrupt =3D { "csiphy0" } + .interrupt =3D { "csiphy0" }, + .ops =3D &csiphy_ops_3ph_1_0 }, =20 /* CSIPHY1 */ @@ -314,7 +329,8 @@ static const struct camss_subdev_resources csiphy_res_6= 60[] =3D { { 100000000, 200000000, 269333333 }, { 0 } }, .reg =3D { "csiphy1", "csiphy1_clk_mux" }, - .interrupt =3D { "csiphy1" } + .interrupt =3D { "csiphy1" }, + .ops =3D &csiphy_ops_3ph_1_0 }, =20 /* CSIPHY2 */ @@ -328,7 +344,8 @@ static const struct camss_subdev_resources csiphy_res_6= 60[] =3D { { 100000000, 200000000, 269333333 }, { 0 } }, .reg =3D { "csiphy2", "csiphy2_clk_mux" }, - .interrupt =3D { "csiphy2" } + .interrupt =3D { "csiphy2" }, + .ops =3D &csiphy_ops_3ph_1_0 } }; =20 @@ -350,7 +367,8 @@ static const struct camss_subdev_resources csid_res_660= [] =3D { { 0 }, { 0 } }, .reg =3D { "csid0" }, - .interrupt =3D { "csid0" } + .interrupt =3D { "csid0" }, + .ops =3D &csid_ops_4_7, }, =20 /* CSID1 */ @@ -370,7 +388,8 @@ static const struct camss_subdev_resources csid_res_660= [] =3D { { 0 }, { 0 } }, .reg =3D { "csid1" }, - .interrupt =3D { "csid1" } + .interrupt =3D { "csid1" }, + .ops =3D &csid_ops_4_7, }, =20 /* CSID2 */ @@ -390,7 +409,8 @@ static const struct camss_subdev_resources csid_res_660= [] =3D { { 0 }, { 0 } }, .reg =3D { "csid2" }, - .interrupt =3D { "csid2" } + .interrupt =3D { "csid2" }, + .ops =3D &csid_ops_4_7, }, =20 /* CSID3 */ @@ -410,7 +430,8 @@ static const struct camss_subdev_resources csid_res_660= [] =3D { { 0 }, { 0 } }, .reg =3D { "csid3" }, - .interrupt =3D { "csid3" } + .interrupt =3D { "csid3" }, + .ops =3D &csid_ops_4_7, } }; =20 @@ -447,6 +468,7 @@ static const struct camss_subdev_resources vfe_res_660[= ] =3D { .reg =3D { "vfe0" }, .interrupt =3D { "vfe0" }, .line_num =3D VFE_LINE_NUM_GEN1, + .ops =3D &vfe_ops_4_8 }, =20 /* VFE1 */ @@ -469,6 +491,7 @@ static const struct camss_subdev_resources vfe_res_660[= ] =3D { .reg =3D { "vfe1" }, .interrupt =3D { "vfe1" }, .line_num =3D VFE_LINE_NUM_GEN1, + .ops =3D &vfe_ops_4_8 } }; =20 @@ -488,7 +511,8 @@ static const struct camss_subdev_resources csiphy_res_8= 45[] =3D { { 0 }, { 19200000, 240000000, 269333333 } }, .reg =3D { "csiphy0" }, - .interrupt =3D { "csiphy0" } + .interrupt =3D { "csiphy0" }, + .ops =3D &csiphy_ops_3ph_1_0 }, =20 /* CSIPHY1 */ @@ -506,7 +530,8 @@ static const struct camss_subdev_resources csiphy_res_8= 45[] =3D { { 0 }, { 19200000, 240000000, 269333333 } }, .reg =3D { "csiphy1" }, - .interrupt =3D { "csiphy1" } + .interrupt =3D { "csiphy1" }, + .ops =3D &csiphy_ops_3ph_1_0 }, =20 /* CSIPHY2 */ @@ -524,7 +549,8 @@ static const struct camss_subdev_resources csiphy_res_8= 45[] =3D { { 0 }, { 19200000, 240000000, 269333333 } }, .reg =3D { "csiphy2" }, - .interrupt =3D { "csiphy2" } + .interrupt =3D { "csiphy2" }, + .ops =3D &csiphy_ops_3ph_1_0 }, =20 /* CSIPHY3 */ @@ -542,7 +568,8 @@ static const struct camss_subdev_resources csiphy_res_8= 45[] =3D { { 0 }, { 19200000, 240000000, 269333333 } }, .reg =3D { "csiphy3" }, - .interrupt =3D { "csiphy3" } + .interrupt =3D { "csiphy3" }, + .ops =3D &csiphy_ops_3ph_1_0 } }; =20 @@ -564,7 +591,8 @@ static const struct camss_subdev_resources csid_res_845= [] =3D { { 19200000, 75000000, 384000000, 538666667 }, { 384000000 } }, .reg =3D { "csid0" }, - .interrupt =3D { "csid0" } + .interrupt =3D { "csid0" }, + .ops =3D &csid_ops_gen2 }, =20 /* CSID1 */ @@ -584,7 +612,8 @@ static const struct camss_subdev_resources csid_res_845= [] =3D { { 19200000, 75000000, 384000000, 538666667 }, { 384000000 } }, .reg =3D { "csid1" }, - .interrupt =3D { "csid1" } + .interrupt =3D { "csid1" }, + .ops =3D &csid_ops_gen2 }, =20 /* CSID2 */ @@ -604,7 +633,8 @@ static const struct camss_subdev_resources csid_res_845= [] =3D { { 19200000, 75000000, 384000000, 538666667 }, { 384000000 } }, .reg =3D { "csid2" }, - .interrupt =3D { "csid2" } + .interrupt =3D { "csid2" }, + .ops =3D &csid_ops_gen2 } }; =20 @@ -628,6 +658,7 @@ static const struct camss_subdev_resources vfe_res_845[= ] =3D { .reg =3D { "vfe0" }, .interrupt =3D { "vfe0" }, .line_num =3D VFE_LINE_NUM_GEN2, + .ops =3D &vfe_ops_170 }, =20 /* VFE1 */ @@ -649,6 +680,7 @@ static const struct camss_subdev_resources vfe_res_845[= ] =3D { .reg =3D { "vfe1" }, .interrupt =3D { "vfe1" }, .line_num =3D VFE_LINE_NUM_GEN2, + .ops =3D &vfe_ops_170 }, =20 /* VFE-lite */ @@ -669,6 +701,7 @@ static const struct camss_subdev_resources vfe_res_845[= ] =3D { .reg =3D { "vfe_lite" }, .interrupt =3D { "vfe_lite" }, .line_num =3D VFE_LINE_NUM_GEN2, + .ops =3D &vfe_ops_170 } }; =20 @@ -680,7 +713,8 @@ static const struct camss_subdev_resources csiphy_res_8= 250[] =3D { .clock_rate =3D { { 400000000 }, { 300000000 } }, .reg =3D { "csiphy0" }, - .interrupt =3D { "csiphy0" } + .interrupt =3D { "csiphy0" }, + .ops =3D &csiphy_ops_3ph_1_0 }, /* CSIPHY1 */ { @@ -689,7 +723,8 @@ static const struct camss_subdev_resources csiphy_res_8= 250[] =3D { .clock_rate =3D { { 400000000 }, { 300000000 } }, .reg =3D { "csiphy1" }, - .interrupt =3D { "csiphy1" } + .interrupt =3D { "csiphy1" }, + .ops =3D &csiphy_ops_3ph_1_0 }, /* CSIPHY2 */ { @@ -698,7 +733,8 @@ static const struct camss_subdev_resources csiphy_res_8= 250[] =3D { .clock_rate =3D { { 400000000 }, { 300000000 } }, .reg =3D { "csiphy2" }, - .interrupt =3D { "csiphy2" } + .interrupt =3D { "csiphy2" }, + .ops =3D &csiphy_ops_3ph_1_0 }, /* CSIPHY3 */ { @@ -707,7 +743,8 @@ static const struct camss_subdev_resources csiphy_res_8= 250[] =3D { .clock_rate =3D { { 400000000 }, { 300000000 } }, .reg =3D { "csiphy3" }, - .interrupt =3D { "csiphy3" } + .interrupt =3D { "csiphy3" }, + .ops =3D &csiphy_ops_3ph_1_0 }, /* CSIPHY4 */ { @@ -716,7 +753,8 @@ static const struct camss_subdev_resources csiphy_res_8= 250[] =3D { .clock_rate =3D { { 400000000 }, { 300000000 } }, .reg =3D { "csiphy4" }, - .interrupt =3D { "csiphy4" } + .interrupt =3D { "csiphy4" }, + .ops =3D &csiphy_ops_3ph_1_0 }, /* CSIPHY5 */ { @@ -725,7 +763,8 @@ static const struct camss_subdev_resources csiphy_res_8= 250[] =3D { .clock_rate =3D { { 400000000 }, { 300000000 } }, .reg =3D { "csiphy5" }, - .interrupt =3D { "csiphy5" } + .interrupt =3D { "csiphy5" }, + .ops =3D &csiphy_ops_3ph_1_0 } }; =20 @@ -740,7 +779,8 @@ static const struct camss_subdev_resources csid_res_825= 0[] =3D { { 100000000, 200000000, 300000000, 400000000 }, { 0 } }, .reg =3D { "csid0" }, - .interrupt =3D { "csid0" } + .interrupt =3D { "csid0" }, + .ops =3D &csid_ops_gen2 }, /* CSID1 */ { @@ -752,7 +792,8 @@ static const struct camss_subdev_resources csid_res_825= 0[] =3D { { 100000000, 200000000, 300000000, 400000000 }, { 0 } }, .reg =3D { "csid1" }, - .interrupt =3D { "csid1" } + .interrupt =3D { "csid1" }, + .ops =3D &csid_ops_gen2 }, /* CSID2 */ { @@ -763,7 +804,8 @@ static const struct camss_subdev_resources csid_res_825= 0[] =3D { { 400000000, 480000000 }, { 0 } }, .reg =3D { "csid2" }, - .interrupt =3D { "csid2" } + .interrupt =3D { "csid2" }, + .ops =3D &csid_ops_gen2 }, /* CSID3 */ { @@ -774,7 +816,8 @@ static const struct camss_subdev_resources csid_res_825= 0[] =3D { { 400000000, 480000000 }, { 0 } }, .reg =3D { "csid3" }, - .interrupt =3D { "csid3" } + .interrupt =3D { "csid3" }, + .ops =3D &csid_ops_gen2 } }; =20 @@ -797,6 +840,7 @@ static const struct camss_subdev_resources vfe_res_8250= [] =3D { .reg =3D { "vfe0" }, .interrupt =3D { "vfe0" }, .line_num =3D 4, + .ops =3D &vfe_ops_480 }, /* VFE1 */ { @@ -816,6 +860,7 @@ static const struct camss_subdev_resources vfe_res_8250= [] =3D { .reg =3D { "vfe1" }, .interrupt =3D { "vfe1" }, .line_num =3D 4, + .ops =3D &vfe_ops_480 }, /* VFE2 (lite) */ { @@ -834,6 +879,7 @@ static const struct camss_subdev_resources vfe_res_8250= [] =3D { .reg =3D { "vfe_lite0" }, .interrupt =3D { "vfe_lite0" }, .line_num =3D 4, + .ops =3D &vfe_ops_480 }, /* VFE3 (lite) */ { @@ -852,6 +898,7 @@ static const struct camss_subdev_resources vfe_res_8250= [] =3D { .reg =3D { "vfe_lite1" }, .interrupt =3D { "vfe_lite1" }, .line_num =3D 4, + .ops =3D &vfe_ops_480 }, }; =20 diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/plat= form/qcom/camss/camss.h index fc02aa84a5dd7..8acad7321c09d 100644 --- a/drivers/media/platform/qcom/camss/camss.h +++ b/drivers/media/platform/qcom/camss/camss.h @@ -49,6 +49,7 @@ struct camss_subdev_resources { char *reg[CAMSS_RES_MAX]; char *interrupt[CAMSS_RES_MAX]; u8 line_num; + const void *ops; }; =20 struct icc_bw_tbl { --=20 2.42.0