From nobody Thu Dec 18 09:41:27 2025 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 CB6C7CA0EC1 for ; Mon, 11 Sep 2023 21:30:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347616AbjIKVZF (ORCPT ); Mon, 11 Sep 2023 17:25:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36026 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237754AbjIKNOW (ORCPT ); Mon, 11 Sep 2023 09:14:22 -0400 Received: from mail-ed1-x530.google.com (mail-ed1-x530.google.com [IPv6:2a00:1450:4864:20::530]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 26C1DCD7 for ; Mon, 11 Sep 2023 06:14:16 -0700 (PDT) Received: by mail-ed1-x530.google.com with SMTP id 4fb4d7f45d1cf-52c4d3ff424so5820769a12.0 for ; Mon, 11 Sep 2023 06:14:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694438054; x=1695042854; 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=bEExl+Qnlpbjs/kQF5vqHTfDAzymWTPDJmQL5fGoUhU=; b=O30Nefz8IpD/EzKpngLHnY7JAJMowqEtJBDBz6EbidBVShxjVVg18fwco1dm0yuV7J 8ufMa9xmKmpXXA/RIHFfoEG2iw/iOZkSSjzB+rny5fA3WXivYciCqlYdBYvlMKr/UjpT 1VaUDwXvjKhGq8+siWytucN8W+t8VTeIIpbfJ2i/U1EypxYanz2GV5BXBbK/rBia3333 4itCSPPZ/nE4FsFWkaHlp63Al6XLJsnyK8UNcvFdNt9VBKe0269sXCdjoEuBupY9sm9y h85BgXWvnzqDUPMEDZQRN+Fz7olCfPx2FNTUruMvjOf4Kdi6UBB388Yovt14i/cornY7 RkEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694438054; x=1695042854; 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=bEExl+Qnlpbjs/kQF5vqHTfDAzymWTPDJmQL5fGoUhU=; b=Op+rwfDIrkmDlAJ5Z0Y5yGqx8sGPAuyynRwTSTnalbb0htW5pvNmMMq6kj7J6Pzl9e aFknCaV/7Yk1ac4aZdvdZEaLDHn6uoVhOKLHqj+feo61Pmz2h1GwR57pVERFloHjZJAR mLEwbURcBkDojPl0agjlZRiNwq/WzfQpfrjeurN8Em/5eAO5B9ap3wirYZD46Abc73zA FAuDZVLMUJyE7KLayIwsS7v3s9rNmPOQ1oPzeyUACSrSD6wa10rpQhiHKvhiXLt+IAsL Q/ZD1d2dI08Ft2smh11iPCgvt7797DlWPETYhFbiQ9INh4vO7iPSRZZ81SGITnC3WaZp gCHQ== X-Gm-Message-State: AOJu0YxLaUpGWgTJWxb4c12nu8gm4zJTRHgdMwiA+JGsJmDYzCTLdV7p vtBjf97/2o0dcFG84x2GfTKPzA== X-Google-Smtp-Source: AGHT+IEUw9IMod0ZXSwWnw531y8CCVcRYkIXJE/IS9VPSsi86yb58qunvIeGkEFV1EIPP7YnvjXyMQ== X-Received: by 2002:a17:906:535d:b0:9a3:c4f4:12de with SMTP id j29-20020a170906535d00b009a3c4f412demr5993428ejo.37.1694438054637; Mon, 11 Sep 2023 06:14:14 -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 kt8-20020a170906aac800b00988e953a586sm5313648ejb.61.2023.09.11.06.14.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 06:14:14 -0700 (PDT) From: Bryan O'Donoghue To: rfoss@kernel.org, todor.too@gmail.com, bryan.odonoghue@linaro.org, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, mchehab@kernel.org, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, andrey.konovalov@linaro.org Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 01/17] media: qcom: camss: Amalgamate struct resource with struct resource_ispif Date: Mon, 11 Sep 2023 14:13:55 +0100 Message-ID: <20230911131411.196033-2-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230911131411.196033-1-bryan.odonoghue@linaro.org> References: <20230911131411.196033-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" There is no good reason to differentiate the two resource structures here. As part of a general tidyup of the declaration and passing of resources within in the CAMSS driver it will be advantageous to have one unified resource structure. The two structures are very similar anyway thus leading more credence still to the argument there should be only one. Signed-off-by: Bryan O'Donoghue Acked-by: Konrad Dybcio Reviewed-by: Laurent Pinchart --- drivers/media/platform/qcom/camss/camss-ispif.c | 4 ++-- drivers/media/platform/qcom/camss/camss-ispif.h | 4 ++-- drivers/media/platform/qcom/camss/camss.c | 14 +++++++------- drivers/media/platform/qcom/camss/camss.h | 8 +------- 4 files changed, 12 insertions(+), 18 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-ispif.c b/drivers/medi= a/platform/qcom/camss/camss-ispif.c index 1c7e4b1b49401..61765b874b9a2 100644 --- a/drivers/media/platform/qcom/camss/camss-ispif.c +++ b/drivers/media/platform/qcom/camss/camss-ispif.c @@ -1095,7 +1095,7 @@ static int ispif_init_formats(struct v4l2_subdev *sd,= struct v4l2_subdev_fh *fh) * Return 0 on success or a negative error code otherwise */ int msm_ispif_subdev_init(struct camss *camss, - const struct resources_ispif *res) + const struct resources *res) { struct device *dev =3D camss->dev; struct ispif_device *ispif =3D camss->ispif; @@ -1152,7 +1152,7 @@ int msm_ispif_subdev_init(struct camss *camss, =20 /* Interrupt */ =20 - ret =3D platform_get_irq_byname(pdev, res->interrupt); + ret =3D platform_get_irq_byname(pdev, res->interrupt[0]); if (ret < 0) return ret; =20 diff --git a/drivers/media/platform/qcom/camss/camss-ispif.h b/drivers/medi= a/platform/qcom/camss/camss-ispif.h index fdf28e68cc7d8..c7c41f7afcaad 100644 --- a/drivers/media/platform/qcom/camss/camss-ispif.h +++ b/drivers/media/platform/qcom/camss/camss-ispif.h @@ -66,10 +66,10 @@ struct ispif_device { struct camss *camss; }; =20 -struct resources_ispif; +struct resources; =20 int msm_ispif_subdev_init(struct camss *camss, - const struct resources_ispif *res); + const struct resources *res); =20 int msm_ispif_register_entities(struct ispif_device *ispif, struct v4l2_device *v4l2_dev); diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/plat= form/qcom/camss/camss.c index c6df862c79e39..fa0eb30d77c26 100644 --- a/drivers/media/platform/qcom/camss/camss.c +++ b/drivers/media/platform/qcom/camss/camss.c @@ -93,14 +93,14 @@ static const struct resources csid_res_8x16[] =3D { }, }; =20 -static const struct resources_ispif ispif_res_8x16 =3D { +static const struct resources ispif_res_8x16 =3D { /* ISPIF */ .clock =3D { "top_ahb", "ahb", "ispif_ahb", "csi0", "csi0_pix", "csi0_rdi", "csi1", "csi1_pix", "csi1_rdi" }, .clock_for_reset =3D { "vfe0", "csi_vfe0" }, .reg =3D { "ispif", "csi_clk_mux" }, - .interrupt =3D "ispif" + .interrupt =3D { "ispif" } =20 }; =20 @@ -234,7 +234,7 @@ static const struct resources csid_res_8x96[] =3D { } }; =20 -static const struct resources_ispif ispif_res_8x96 =3D { +static const struct resources ispif_res_8x96 =3D { /* ISPIF */ .clock =3D { "top_ahb", "ahb", "ispif_ahb", "csi0", "csi0_pix", "csi0_rdi", @@ -243,7 +243,7 @@ static const struct resources_ispif ispif_res_8x96 =3D { "csi3", "csi3_pix", "csi3_rdi" }, .clock_for_reset =3D { "vfe0", "csi_vfe0", "vfe1", "csi_vfe1" }, .reg =3D { "ispif", "csi_clk_mux" }, - .interrupt =3D "ispif" + .interrupt =3D { "ispif" } }; =20 static const struct resources vfe_res_8x96[] =3D { @@ -410,7 +410,7 @@ static const struct resources csid_res_660[] =3D { } }; =20 -static const struct resources_ispif ispif_res_660 =3D { +static const struct resources ispif_res_660 =3D { /* ISPIF */ .clock =3D { "top_ahb", "ahb", "ispif_ahb", "csi0", "csi0_pix", "csi0_rdi", @@ -419,7 +419,7 @@ static const struct resources_ispif ispif_res_660 =3D { "csi3", "csi3_pix", "csi3_rdi" }, .clock_for_reset =3D { "vfe0", "csi_vfe0", "vfe1", "csi_vfe1" }, .reg =3D { "ispif", "csi_clk_mux" }, - .interrupt =3D "ispif" + .interrupt =3D { "ispif" } }; =20 static const struct resources vfe_res_660[] =3D { @@ -1122,7 +1122,7 @@ static int camss_init_subdevices(struct camss *camss) { const struct resources *csiphy_res; const struct resources *csid_res; - const struct resources_ispif *ispif_res; + const struct resources *ispif_res; const struct resources *vfe_res; unsigned int i; int ret; diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/plat= form/qcom/camss/camss.h index f6c326cb853b8..e95211cdb1fd6 100644 --- a/drivers/media/platform/qcom/camss/camss.h +++ b/drivers/media/platform/qcom/camss/camss.h @@ -44,18 +44,12 @@ struct resources { char *regulators[CAMSS_RES_MAX]; char *clock[CAMSS_RES_MAX]; + char *clock_for_reset[CAMSS_RES_MAX]; u32 clock_rate[CAMSS_RES_MAX][CAMSS_RES_MAX]; char *reg[CAMSS_RES_MAX]; char *interrupt[CAMSS_RES_MAX]; }; =20 -struct resources_ispif { - char *clock[CAMSS_RES_MAX]; - char *clock_for_reset[CAMSS_RES_MAX]; - char *reg[CAMSS_RES_MAX]; - char *interrupt; -}; - struct icc_bw_tbl { u32 avg; u32 peak; --=20 2.42.0 From nobody Thu Dec 18 09:41:27 2025 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 6C494CA0EDF for ; Mon, 11 Sep 2023 21:37:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236644AbjIKVaD (ORCPT ); Mon, 11 Sep 2023 17:30:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44954 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237759AbjIKNOW (ORCPT ); Mon, 11 Sep 2023 09:14:22 -0400 Received: from mail-ed1-x52d.google.com (mail-ed1-x52d.google.com [IPv6:2a00:1450:4864:20::52d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 910DAE4D for ; Mon, 11 Sep 2023 06:14:17 -0700 (PDT) Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-52e828ad46bso5799228a12.1 for ; Mon, 11 Sep 2023 06:14:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694438056; x=1695042856; 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=hWSBg2m/DFeH+pSop6GqXEz6uLfYv88RDnyNFoEgOcM=; b=jxVn70YRsNZwmomWMm63Ty5/BHsHYO6Xu5bmh7B5fmRp4lhawwvH0MZ3P50o9UsToG aErVSymVDqgXhJ7oGXj9bvM++ARDlD6BiaF6eplgY3VYvX7tRmQPJyPvXb7+2/LErHSA 9D1ZRtbUW1i0o8cQfYlyAQoM7h8gkNfIsLo8YSZP43dBcAAQjngZQmBWEY/Na+UiWo0w 59fyS8YNcMpn1U82eREAGzfqK3XYpd9hTpYlEOzwKamaOKM00z+1qVowvTpayh6172HQ 1ok4K6M+pSv5FWMiARQf6WmBuGBtC6Qb7zQKWPPEIgBosH5tWDcnlz9xgmQH6jQAKKmo sSJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694438056; x=1695042856; 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=hWSBg2m/DFeH+pSop6GqXEz6uLfYv88RDnyNFoEgOcM=; b=jIZA7Rhz08OlQaA9baIRpeyr7qqtaxcc1DtCe1abYbTqJaJWwAEnOUgAN5w7QVWMsq q6h8s9+vGIfloKtYRtIy4U2auLOKGeVBDTEjKRHPdlN3K0WShgmPAWlw80r2eBIjT2ua AYXcghrSyBRkxt6rQryPwli73S1G+o611RTt/kBjdDm5nRevqauvicZttC8ZbSEFB6a9 YnzGmi0MCQTS5PoADAK9bPxG6YvVws7hKYaz76Ghw6MxvtODaTgfQngc5Z3aNQdudsTs SF3I70xf5lE8dkjo/DZDjMUPeRmPRKRZmpmPaSgP+eruvTW/WcnOECOy6d/UXc1YnfSo 5quw== X-Gm-Message-State: AOJu0Yw6MSQyt17h/v1/2Lw0qSnPBevWLqjd39D5Jqfir1YKtMZVOG7Y 5Q5mzAkskNTWCMvRbEbhwOjiLw== X-Google-Smtp-Source: AGHT+IGYCXemrhj8aJqa9udV4YnDokNhFiwufrPafQvWkkAFQKCRQCUxnoJ/pvLn3HAF4gTH2IE89Q== X-Received: by 2002:a17:906:106:b0:9a1:c352:b6a2 with SMTP id 6-20020a170906010600b009a1c352b6a2mr8650202eje.52.1694438056087; Mon, 11 Sep 2023 06:14:16 -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 kt8-20020a170906aac800b00988e953a586sm5313648ejb.61.2023.09.11.06.14.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 06:14:15 -0700 (PDT) From: Bryan O'Donoghue To: rfoss@kernel.org, todor.too@gmail.com, bryan.odonoghue@linaro.org, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, mchehab@kernel.org, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, andrey.konovalov@linaro.org Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 02/17] media: qcom: camss: Rename camss struct resources to camss_subdev_resources Date: Mon, 11 Sep 2023 14:13:56 +0100 Message-ID: <20230911131411.196033-3-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230911131411.196033-1-bryan.odonoghue@linaro.org> References: <20230911131411.196033-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" Rename non-specific struct resources {} to struct camss_subdev_resources {} Each logical block in CAMSS has a number of regulators, clocks and resets associated with it. We represent these blocks as v4l subdevices. The name "struct camss_subdev_resources" is a more descriptive and accurate name. Suggested-by: Laurent Pinchart Signed-off-by: Bryan O'Donoghue --- .../media/platform/qcom/camss/camss-csid.c | 2 +- .../media/platform/qcom/camss/camss-csid.h | 4 +- .../media/platform/qcom/camss/camss-csiphy.c | 2 +- .../media/platform/qcom/camss/camss-csiphy.h | 4 +- .../media/platform/qcom/camss/camss-ispif.c | 2 +- .../media/platform/qcom/camss/camss-ispif.h | 4 +- drivers/media/platform/qcom/camss/camss-vfe.c | 2 +- drivers/media/platform/qcom/camss/camss-vfe.h | 4 +- drivers/media/platform/qcom/camss/camss.c | 44 +++++++++---------- drivers/media/platform/qcom/camss/camss.h | 2 +- 10 files changed, 35 insertions(+), 35 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media= /platform/qcom/camss/camss-csid.c index 9d7fb1adebb98..b1113decdb305 100644 --- a/drivers/media/platform/qcom/camss/camss-csid.c +++ b/drivers/media/platform/qcom/camss/camss-csid.c @@ -566,7 +566,7 @@ static const struct v4l2_ctrl_ops csid_ctrl_ops =3D { * Return 0 on success or a negative error code otherwise */ int msm_csid_subdev_init(struct camss *camss, struct csid_device *csid, - const struct resources *res, u8 id) + const struct camss_subdev_resources *res, u8 id) { struct device *dev =3D camss->dev; struct platform_device *pdev =3D to_platform_device(dev); diff --git a/drivers/media/platform/qcom/camss/camss-csid.h b/drivers/media= /platform/qcom/camss/camss-csid.h index d4b48432a0973..30d94eb2eb041 100644 --- a/drivers/media/platform/qcom/camss/camss-csid.h +++ b/drivers/media/platform/qcom/camss/camss-csid.h @@ -172,7 +172,7 @@ struct csid_device { const struct csid_hw_ops *ops; }; =20 -struct resources; +struct camss_subdev_resources; =20 /* * csid_find_code - Find a format code in an array using array index or fo= rmat code @@ -200,7 +200,7 @@ const struct csid_format *csid_get_fmt_entry(const stru= ct csid_format *formats, u32 code); =20 int msm_csid_subdev_init(struct camss *camss, struct csid_device *csid, - const struct resources *res, u8 id); + const struct camss_subdev_resources *res, u8 id); =20 int msm_csid_register_entity(struct csid_device *csid, struct v4l2_device *v4l2_dev); diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/med= ia/platform/qcom/camss/camss-csiphy.c index c5ae9c61ee0b1..b1b6c4cf18385 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy.c +++ b/drivers/media/platform/qcom/camss/camss-csiphy.c @@ -546,7 +546,7 @@ static int csiphy_init_formats(struct v4l2_subdev *sd, */ int msm_csiphy_subdev_init(struct camss *camss, struct csiphy_device *csiphy, - const struct resources *res, u8 id) + const struct camss_subdev_resources *res, u8 id) { struct device *dev =3D camss->dev; struct platform_device *pdev =3D to_platform_device(dev); diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.h b/drivers/med= ia/platform/qcom/camss/camss-csiphy.h index 1c14947f92d35..c9b7fe82b1f0d 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy.h +++ b/drivers/media/platform/qcom/camss/camss-csiphy.h @@ -83,11 +83,11 @@ struct csiphy_device { unsigned int nformats; }; =20 -struct resources; +struct camss_subdev_resources; =20 int msm_csiphy_subdev_init(struct camss *camss, struct csiphy_device *csiphy, - const struct resources *res, u8 id); + const struct camss_subdev_resources *res, u8 id); =20 int msm_csiphy_register_entity(struct csiphy_device *csiphy, struct v4l2_device *v4l2_dev); diff --git a/drivers/media/platform/qcom/camss/camss-ispif.c b/drivers/medi= a/platform/qcom/camss/camss-ispif.c index 61765b874b9a2..75b8a60806b22 100644 --- a/drivers/media/platform/qcom/camss/camss-ispif.c +++ b/drivers/media/platform/qcom/camss/camss-ispif.c @@ -1095,7 +1095,7 @@ static int ispif_init_formats(struct v4l2_subdev *sd,= struct v4l2_subdev_fh *fh) * Return 0 on success or a negative error code otherwise */ int msm_ispif_subdev_init(struct camss *camss, - const struct resources *res) + const struct camss_subdev_resources *res) { struct device *dev =3D camss->dev; struct ispif_device *ispif =3D camss->ispif; diff --git a/drivers/media/platform/qcom/camss/camss-ispif.h b/drivers/medi= a/platform/qcom/camss/camss-ispif.h index c7c41f7afcaad..dff6d5b35c72e 100644 --- a/drivers/media/platform/qcom/camss/camss-ispif.h +++ b/drivers/media/platform/qcom/camss/camss-ispif.h @@ -66,10 +66,10 @@ struct ispif_device { struct camss *camss; }; =20 -struct resources; +struct camss_subdev_resources; =20 int msm_ispif_subdev_init(struct camss *camss, - const struct resources *res); + const struct camss_subdev_resources *res); =20 int msm_ispif_register_entities(struct ispif_device *ispif, struct v4l2_device *v4l2_dev); diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/= platform/qcom/camss/camss-vfe.c index b021f81cef123..e84dcf0f4b2da 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe.c +++ b/drivers/media/platform/qcom/camss/camss-vfe.c @@ -1279,7 +1279,7 @@ static int vfe_init_formats(struct v4l2_subdev *sd, s= truct v4l2_subdev_fh *fh) * Return 0 on success or a negative error code otherwise */ int msm_vfe_subdev_init(struct camss *camss, struct vfe_device *vfe, - const struct resources *res, u8 id) + const struct camss_subdev_resources *res, u8 id) { struct device *dev =3D camss->dev; struct platform_device *pdev =3D to_platform_device(dev); diff --git a/drivers/media/platform/qcom/camss/camss-vfe.h b/drivers/media/= platform/qcom/camss/camss-vfe.h index cbc314c4e244b..b4bae9f65c68f 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe.h +++ b/drivers/media/platform/qcom/camss/camss-vfe.h @@ -153,10 +153,10 @@ struct vfe_device { struct camss_video_ops video_ops; }; =20 -struct resources; +struct camss_subdev_resources; =20 int msm_vfe_subdev_init(struct camss *camss, struct vfe_device *vfe, - const struct resources *res, u8 id); + const struct camss_subdev_resources *res, u8 id); =20 int msm_vfe_register_entities(struct vfe_device *vfe, struct v4l2_device *v4l2_dev); diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/plat= form/qcom/camss/camss.c index fa0eb30d77c26..718ef8e4f5938 100644 --- a/drivers/media/platform/qcom/camss/camss.c +++ b/drivers/media/platform/qcom/camss/camss.c @@ -31,7 +31,7 @@ #define CAMSS_CLOCK_MARGIN_NUMERATOR 105 #define CAMSS_CLOCK_MARGIN_DENOMINATOR 100 =20 -static const struct resources csiphy_res_8x16[] =3D { +static const struct camss_subdev_resources csiphy_res_8x16[] =3D { /* CSIPHY0 */ { .regulators =3D {}, @@ -57,7 +57,7 @@ static const struct resources csiphy_res_8x16[] =3D { } }; =20 -static const struct resources csid_res_8x16[] =3D { +static const struct camss_subdev_resources csid_res_8x16[] =3D { /* CSID0 */ { .regulators =3D { "vdda" }, @@ -93,7 +93,7 @@ static const struct resources csid_res_8x16[] =3D { }, }; =20 -static const struct resources ispif_res_8x16 =3D { +static const struct camss_subdev_resources ispif_res_8x16 =3D { /* ISPIF */ .clock =3D { "top_ahb", "ahb", "ispif_ahb", "csi0", "csi0_pix", "csi0_rdi", @@ -104,7 +104,7 @@ static const struct resources ispif_res_8x16 =3D { =20 }; =20 -static const struct resources vfe_res_8x16[] =3D { +static const struct camss_subdev_resources vfe_res_8x16[] =3D { /* VFE0 */ { .regulators =3D {}, @@ -126,7 +126,7 @@ static const struct resources vfe_res_8x16[] =3D { } }; =20 -static const struct resources csiphy_res_8x96[] =3D { +static const struct camss_subdev_resources csiphy_res_8x96[] =3D { /* CSIPHY0 */ { .regulators =3D {}, @@ -164,7 +164,7 @@ static const struct resources csiphy_res_8x96[] =3D { } }; =20 -static const struct resources csid_res_8x96[] =3D { +static const struct camss_subdev_resources csid_res_8x96[] =3D { /* CSID0 */ { .regulators =3D { "vdda" }, @@ -234,7 +234,7 @@ static const struct resources csid_res_8x96[] =3D { } }; =20 -static const struct resources ispif_res_8x96 =3D { +static const struct camss_subdev_resources ispif_res_8x96 =3D { /* ISPIF */ .clock =3D { "top_ahb", "ahb", "ispif_ahb", "csi0", "csi0_pix", "csi0_rdi", @@ -246,7 +246,7 @@ static const struct resources ispif_res_8x96 =3D { .interrupt =3D { "ispif" } }; =20 -static const struct resources vfe_res_8x96[] =3D { +static const struct camss_subdev_resources vfe_res_8x96[] =3D { /* VFE0 */ { .regulators =3D {}, @@ -284,7 +284,7 @@ static const struct resources vfe_res_8x96[] =3D { } }; =20 -static const struct resources csiphy_res_660[] =3D { +static const struct camss_subdev_resources csiphy_res_660[] =3D { /* CSIPHY0 */ { .regulators =3D {}, @@ -328,7 +328,7 @@ static const struct resources csiphy_res_660[] =3D { } }; =20 -static const struct resources csid_res_660[] =3D { +static const struct camss_subdev_resources csid_res_660[] =3D { /* CSID0 */ { .regulators =3D { "vdda", "vdd_sec" }, @@ -410,7 +410,7 @@ static const struct resources csid_res_660[] =3D { } }; =20 -static const struct resources ispif_res_660 =3D { +static const struct camss_subdev_resources ispif_res_660 =3D { /* ISPIF */ .clock =3D { "top_ahb", "ahb", "ispif_ahb", "csi0", "csi0_pix", "csi0_rdi", @@ -422,7 +422,7 @@ static const struct resources ispif_res_660 =3D { .interrupt =3D { "ispif" } }; =20 -static const struct resources vfe_res_660[] =3D { +static const struct camss_subdev_resources vfe_res_660[] =3D { /* VFE0 */ { .regulators =3D {}, @@ -466,7 +466,7 @@ static const struct resources vfe_res_660[] =3D { } }; =20 -static const struct resources csiphy_res_845[] =3D { +static const struct camss_subdev_resources csiphy_res_845[] =3D { /* CSIPHY0 */ { .regulators =3D {}, @@ -540,7 +540,7 @@ static const struct resources csiphy_res_845[] =3D { } }; =20 -static const struct resources csid_res_845[] =3D { +static const struct camss_subdev_resources csid_res_845[] =3D { /* CSID0 */ { .regulators =3D { "vdda-phy", "vdda-pll" }, @@ -602,7 +602,7 @@ static const struct resources csid_res_845[] =3D { } }; =20 -static const struct resources vfe_res_845[] =3D { +static const struct camss_subdev_resources vfe_res_845[] =3D { /* VFE0 */ { .regulators =3D {}, @@ -663,7 +663,7 @@ static const struct resources vfe_res_845[] =3D { } }; =20 -static const struct resources csiphy_res_8250[] =3D { +static const struct camss_subdev_resources csiphy_res_8250[] =3D { /* CSIPHY0 */ { .regulators =3D {}, @@ -720,7 +720,7 @@ static const struct resources csiphy_res_8250[] =3D { } }; =20 -static const struct resources csid_res_8250[] =3D { +static const struct camss_subdev_resources csid_res_8250[] =3D { /* CSID0 */ { .regulators =3D { "vdda-phy", "vdda-pll" }, @@ -769,7 +769,7 @@ static const struct resources csid_res_8250[] =3D { } }; =20 -static const struct resources vfe_res_8250[] =3D { +static const struct camss_subdev_resources vfe_res_8250[] =3D { /* VFE0 */ { .regulators =3D {}, @@ -1120,10 +1120,10 @@ static int camss_of_parse_ports(struct camss *camss) */ static int camss_init_subdevices(struct camss *camss) { - const struct resources *csiphy_res; - const struct resources *csid_res; - const struct resources *ispif_res; - const struct resources *vfe_res; + const struct camss_subdev_resources *csiphy_res; + const struct camss_subdev_resources *csid_res; + const struct camss_subdev_resources *ispif_res; + const struct camss_subdev_resources *vfe_res; unsigned int i; int ret; =20 diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/plat= form/qcom/camss/camss.h index e95211cdb1fd6..9d6ba7b17ff02 100644 --- a/drivers/media/platform/qcom/camss/camss.h +++ b/drivers/media/platform/qcom/camss/camss.h @@ -41,7 +41,7 @@ =20 #define CAMSS_RES_MAX 17 =20 -struct resources { +struct camss_subdev_resources { char *regulators[CAMSS_RES_MAX]; char *clock[CAMSS_RES_MAX]; char *clock_for_reset[CAMSS_RES_MAX]; --=20 2.42.0 From nobody Thu Dec 18 09:41:27 2025 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 1E9A0CA0EEA for ; Mon, 11 Sep 2023 21:20:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344275AbjIKVNs (ORCPT ); Mon, 11 Sep 2023 17:13:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44990 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237769AbjIKNOY (ORCPT ); Mon, 11 Sep 2023 09:14:24 -0400 Received: from mail-lf1-x12c.google.com (mail-lf1-x12c.google.com [IPv6:2a00:1450:4864:20::12c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E5ADAEB for ; Mon, 11 Sep 2023 06:14:18 -0700 (PDT) Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-500913779f5so7629043e87.2 for ; Mon, 11 Sep 2023 06:14:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694438057; x=1695042857; 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=WtUvABqn7deJbHXIvivNsqSlJTQ17oV+fRU19/L86bw=; b=c8IZq14I3RbGXZuQs/Qu5Sjrzr6V/bfDAT6AACBO0Oq/Gg53ksOPog9YIqGnOHtovm 92xCofT/EC6FDfl2OZMrA4FQUj3p778lQhR3sSut+SRSAodp8xFMg5cGwexGwTaviVjM V0jE3oBtsE7IC7bOButaQ1SJY765A3kW1SSb9YXC8hge5NrSyWSXlB1G5Na3/LFqhAm9 faAzkRbxvpbdvZuEBrvtOmR5SosAujERxQcVCr5lnT6Y+usVQkWsESm8r7k5fy/RdWoR LvBbBsolb561Z16XRJqJ3UJ+OeWA4p/Riqs4pwYJINhySxr/59qfWb+Mq0YO6Q+204/N 8W8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694438057; x=1695042857; 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=WtUvABqn7deJbHXIvivNsqSlJTQ17oV+fRU19/L86bw=; b=DQThC4F4ADqvxcW6W8vKQOuZK+TdS1MalVPrD9Pgr7w9u8DO1uR03++j927W7t+dIo v76Qdmcj5zVVISi2gqy9ZB+azJClFcY3NmTSGwPViKtFBh9A25z8iqYOt7Vej44MhlqW pNntenkqUKasGh8mX70m098jKNWBzp54j+u8fiVfDJAZX/ydhjEvswTMeAT5wBA2UB96 fr1+NcuujQJDroDzZd8y0WILYjqbFZh1l4/6LIL90YvDx0c1YUvlM38ePOp0CRORmkII IIhvjxC2zV2pqYP7l8F6NxmuC+tAqfT+BgzE6lXC3X7ZoCrXInEhk5fEw/uVdWk8CyD4 QOOA== X-Gm-Message-State: AOJu0YxzmdXgoo7AEYiHU9QVphLBrOoTSv9c7CE3mQ4b3qB+x+pwRbc+ fUoXXgyHHB/q47EwFp+dT9+QEw== X-Google-Smtp-Source: AGHT+IHtv/RoP3ZK/A1nzWckUyyflARRlFvRedTz977+fc5u3KUN5Nf8RqECggG/GHQxpE1IExsVHQ== X-Received: by 2002:a19:435d:0:b0:500:a408:dbd with SMTP id m29-20020a19435d000000b00500a4080dbdmr6796141lfj.55.1694438057105; Mon, 11 Sep 2023 06:14:17 -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 kt8-20020a170906aac800b00988e953a586sm5313648ejb.61.2023.09.11.06.14.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 06:14:16 -0700 (PDT) From: Bryan O'Donoghue To: rfoss@kernel.org, todor.too@gmail.com, bryan.odonoghue@linaro.org, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, mchehab@kernel.org, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, andrey.konovalov@linaro.org Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 03/17] media: qcom: camss: Start to move to module compat matched resources Date: Mon, 11 Sep 2023 14:13:57 +0100 Message-ID: <20230911131411.196033-4-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230911131411.196033-1-bryan.odonoghue@linaro.org> References: <20230911131411.196033-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" There is a lot of unnecessary if/elsing in this code that arguably should never have made it upstream when adding a second let alone subsequent SoC. I'm guilty of not fixing the mess myself when adding in the sm8250. Before adding in any new SoCs or resources lets take the time to cleanup the resource passing. First step is to pass the generic struct camss_resources as a parameter per the compatible list. Subsequent patches will address the other somewhat disparate strutures which we are also doing if/else on and assigning statically. Squashed down a commit to drop useless NULL assignment for ispif resources. Signed-off-by: Bryan O'Donoghue Acked-by: Konrad Dybcio --- drivers/media/platform/qcom/camss/camss.c | 90 ++++++++++++----------- drivers/media/platform/qcom/camss/camss.h | 8 ++ 2 files changed, 54 insertions(+), 44 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/plat= form/qcom/camss/camss.c index 718ef8e4f5938..8fa5dee75672d 100644 --- a/drivers/media/platform/qcom/camss/camss.c +++ b/drivers/media/platform/qcom/camss/camss.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -1120,47 +1121,13 @@ static int camss_of_parse_ports(struct camss *camss) */ static int camss_init_subdevices(struct camss *camss) { - const struct camss_subdev_resources *csiphy_res; - const struct camss_subdev_resources *csid_res; - const struct camss_subdev_resources *ispif_res; - const struct camss_subdev_resources *vfe_res; + const struct camss_resources *res =3D camss->res; unsigned int i; int ret; =20 - if (camss->version =3D=3D CAMSS_8x16) { - csiphy_res =3D csiphy_res_8x16; - csid_res =3D csid_res_8x16; - ispif_res =3D &ispif_res_8x16; - vfe_res =3D vfe_res_8x16; - } else if (camss->version =3D=3D CAMSS_8x96) { - csiphy_res =3D csiphy_res_8x96; - csid_res =3D csid_res_8x96; - ispif_res =3D &ispif_res_8x96; - vfe_res =3D vfe_res_8x96; - } else if (camss->version =3D=3D CAMSS_660) { - csiphy_res =3D csiphy_res_660; - csid_res =3D csid_res_660; - ispif_res =3D &ispif_res_660; - vfe_res =3D vfe_res_660; - } else if (camss->version =3D=3D CAMSS_845) { - csiphy_res =3D csiphy_res_845; - csid_res =3D csid_res_845; - /* Titan VFEs don't have an ISPIF */ - ispif_res =3D NULL; - vfe_res =3D vfe_res_845; - } else if (camss->version =3D=3D CAMSS_8250) { - csiphy_res =3D csiphy_res_8250; - csid_res =3D csid_res_8250; - /* Titan VFEs don't have an ISPIF */ - ispif_res =3D NULL; - vfe_res =3D vfe_res_8250; - } else { - return -EINVAL; - } - for (i =3D 0; i < camss->csiphy_num; i++) { ret =3D msm_csiphy_subdev_init(camss, &camss->csiphy[i], - &csiphy_res[i], i); + &res->csiphy_res[i], i); if (ret < 0) { dev_err(camss->dev, "Failed to init csiphy%d sub-device: %d\n", @@ -1172,7 +1139,7 @@ static int camss_init_subdevices(struct camss *camss) /* note: SM8250 requires VFE to be initialized before CSID */ for (i =3D 0; i < camss->vfe_num + camss->vfe_lite_num; i++) { ret =3D msm_vfe_subdev_init(camss, &camss->vfe[i], - &vfe_res[i], i); + &res->vfe_res[i], i); if (ret < 0) { dev_err(camss->dev, "Fail to init vfe%d sub-device: %d\n", i, ret); @@ -1182,7 +1149,7 @@ static int camss_init_subdevices(struct camss *camss) =20 for (i =3D 0; i < camss->csid_num; i++) { ret =3D msm_csid_subdev_init(camss, &camss->csid[i], - &csid_res[i], i); + &res->csid_res[i], i); if (ret < 0) { dev_err(camss->dev, "Failed to init csid%d sub-device: %d\n", @@ -1191,7 +1158,7 @@ static int camss_init_subdevices(struct camss *camss) } } =20 - ret =3D msm_ispif_subdev_init(camss, ispif_res); + ret =3D msm_ispif_subdev_init(camss, res->ispif_res); if (ret < 0) { dev_err(camss->dev, "Failed to init ispif sub-device: %d\n", ret); @@ -1568,6 +1535,8 @@ static int camss_probe(struct platform_device *pdev) if (!camss) return -ENOMEM; =20 + camss->res =3D of_device_get_match_data(dev); + atomic_set(&camss->ref_count, 0); camss->dev =3D dev; platform_set_drvdata(pdev, camss); @@ -1742,12 +1711,45 @@ static void camss_remove(struct platform_device *pd= ev) camss_genpd_cleanup(camss); } =20 +static const struct camss_resources msm8916_resources =3D { + .csiphy_res =3D csiphy_res_8x16, + .csid_res =3D csid_res_8x16, + .ispif_res =3D &ispif_res_8x16, + .vfe_res =3D vfe_res_8x16, +}; + +static const struct camss_resources msm8996_resources =3D { + .csiphy_res =3D csiphy_res_8x96, + .csid_res =3D csid_res_8x96, + .ispif_res =3D &ispif_res_8x96, + .vfe_res =3D vfe_res_8x96, +}; + +static const struct camss_resources sdm660_resources =3D { + .csiphy_res =3D csiphy_res_660, + .csid_res =3D csid_res_660, + .ispif_res =3D &ispif_res_660, + .vfe_res =3D vfe_res_660, +}; + +static const struct camss_resources sdm845_resources =3D { + .csiphy_res =3D csiphy_res_845, + .csid_res =3D csid_res_845, + .vfe_res =3D vfe_res_845, +}; + +static const struct camss_resources sm8250_resources =3D { + .csiphy_res =3D csiphy_res_8250, + .csid_res =3D csid_res_8250, + .vfe_res =3D vfe_res_8250, +}; + static const struct of_device_id camss_dt_match[] =3D { - { .compatible =3D "qcom,msm8916-camss" }, - { .compatible =3D "qcom,msm8996-camss" }, - { .compatible =3D "qcom,sdm660-camss" }, - { .compatible =3D "qcom,sdm845-camss" }, - { .compatible =3D "qcom,sm8250-camss" }, + { .compatible =3D "qcom,msm8916-camss", .data =3D &msm8916_resources }, + { .compatible =3D "qcom,msm8996-camss", .data =3D &msm8996_resources }, + { .compatible =3D "qcom,sdm660-camss", .data =3D &sdm660_resources }, + { .compatible =3D "qcom,sdm845-camss", .data =3D &sdm845_resources }, + { .compatible =3D "qcom,sm8250-camss", .data =3D &sm8250_resources }, { } }; =20 diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/plat= form/qcom/camss/camss.h index 9d6ba7b17ff02..20c84e8328880 100644 --- a/drivers/media/platform/qcom/camss/camss.h +++ b/drivers/media/platform/qcom/camss/camss.h @@ -79,6 +79,13 @@ enum icc_count { ICC_SM8250_COUNT =3D 4, }; =20 +struct camss_resources { + const struct camss_subdev_resources *csiphy_res; + const struct camss_subdev_resources *csid_res; + const struct camss_subdev_resources *ispif_res; + const struct camss_subdev_resources *vfe_res; +}; + struct camss { enum camss_version version; struct v4l2_device v4l2_dev; @@ -99,6 +106,7 @@ struct camss { struct device_link **genpd_link; struct icc_path *icc_path[ICC_SM8250_COUNT]; struct icc_bw_tbl icc_bw_tbl[ICC_SM8250_COUNT]; + const struct camss_resources *res; }; =20 struct camss_camera_interface { --=20 2.42.0 From nobody Thu Dec 18 09:41:27 2025 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 758D5CA0EC7 for ; Mon, 11 Sep 2023 21:31:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239940AbjIKV0j (ORCPT ); Mon, 11 Sep 2023 17:26:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44984 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237768AbjIKNOY (ORCPT ); Mon, 11 Sep 2023 09:14:24 -0400 Received: from mail-ej1-x634.google.com (mail-ej1-x634.google.com [IPv6:2a00:1450:4864:20::634]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 98543CD7 for ; Mon, 11 Sep 2023 06:14:19 -0700 (PDT) Received: by mail-ej1-x634.google.com with SMTP id a640c23a62f3a-99de884ad25so581734266b.3 for ; Mon, 11 Sep 2023 06:14:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694438058; x=1695042858; 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=sc3QrJ7bPpNquzpdbmPtMRrT+D/boaJ7K4FKMOV9GkU=; b=N/wMwyh3f/uKh+dWFQlAgk4SFpPcPV+d2t5MZ3i3GeMdyKiOqpa8gCHlDorT1w3hrV k+iU5aLpeAv8t6VttBigIjvhqFHclvdY2alHIuaYh4+XkopkMjPBlwdDKi1Nkht6ahxN IZH6wGy+BZ/kqwGhmkWe6I30XVQh8D+wsZK1fjiAijGZOTZkWUn+GMjJb1rCG6Tv6PqG cFz9ZzQz3HvHcKBNcSTf/v9P+35P0m2kcHYDOHKHTgD5FHwblbABTXcgN9PbhOuknCeJ GOPQRNqD7UXi53ZgGjWU9xePu0dwi6ABs1w65aMc+AhaiDIbCEC9aY0ta3GZ5lmJ3mip 8DCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694438058; x=1695042858; 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=sc3QrJ7bPpNquzpdbmPtMRrT+D/boaJ7K4FKMOV9GkU=; b=XWMwr7XPW77yiUO0ZUA1IMlgztTqbCQ5sSZAHfnkwQS+1JYn7UhhJ0tKngTcgvBk+7 IdSzzVxOaAN0rX9bceSDNPYi+msRrWGEiaYpo49MrkBJar1weJiZKJvkN7oagv3+CJQf syEu+OshPfV97GlHIIo3iSQ5MbUQGvLN5kG5kzcIEGlB4JDAtOBEgPW5xB9O7XoZIpXy SR7iThwdjmoa2FThi7WPB8bjR+G+hzDJjl9xOPkq6Xq9mpFDym0vmlr9P0URbOzzULb7 gJJzaorpl9A+CCeQSmFzCGa2pDufDByiprW2y8irxtOoMD+G4BXITs/8V/32laVgI77j IEHg== X-Gm-Message-State: AOJu0YwoJi+zNCvpHfYPSnPArZmSPDVZJGL4mJFrig3blY1ixRmW3Oof Tqre3Co7AY3tInjhjLxBT7DpJA== X-Google-Smtp-Source: AGHT+IETsKLf/4N3NNhqBQeB07DP4YHuaiaE5s6Acmum5qaov4i6lbSgL7iB6T+xFstVAM93OmogwQ== X-Received: by 2002:a17:906:538f:b0:9aa:1e31:98b3 with SMTP id g15-20020a170906538f00b009aa1e3198b3mr4299247ejo.8.1694438058183; Mon, 11 Sep 2023 06:14:18 -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 kt8-20020a170906aac800b00988e953a586sm5313648ejb.61.2023.09.11.06.14.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 06:14:17 -0700 (PDT) From: Bryan O'Donoghue To: rfoss@kernel.org, todor.too@gmail.com, bryan.odonoghue@linaro.org, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, mchehab@kernel.org, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, andrey.konovalov@linaro.org Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 04/17] media: qcom: camss: Pass icc bandwidth table as a platform parameter Date: Mon, 11 Sep 2023 14:13:58 +0100 Message-ID: <20230911131411.196033-5-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230911131411.196033-1-bryan.odonoghue@linaro.org> References: <20230911131411.196033-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" Pass the bandwidth table as a platform parameter not if/else derived pointer to the static table. Signed-off-by: Bryan O'Donoghue Acked-by: Konrad Dybcio Reviewed-by: Laurent Pinchart --- drivers/media/platform/qcom/camss/camss.c | 29 +++++++---------------- drivers/media/platform/qcom/camss/camss.h | 3 ++- 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/plat= form/qcom/camss/camss.c index 8fa5dee75672d..f502b4d9e07c5 100644 --- a/drivers/media/platform/qcom/camss/camss.c +++ b/drivers/media/platform/qcom/camss/camss.c @@ -1485,21 +1485,15 @@ static int camss_configure_pd(struct camss *camss) static int camss_icc_get(struct camss *camss) { const struct resources_icc *icc_res; - int nbr_icc_paths =3D 0; int i; =20 - if (camss->version =3D=3D CAMSS_8250) { - icc_res =3D &icc_res_sm8250[0]; - nbr_icc_paths =3D ICC_SM8250_COUNT; - } + icc_res =3D camss->res->icc_res; =20 - for (i =3D 0; i < nbr_icc_paths; i++) { + for (i =3D 0; i < camss->res->icc_path_num; i++) { camss->icc_path[i] =3D devm_of_icc_get(camss->dev, icc_res[i].name); if (IS_ERR(camss->icc_path[i])) return PTR_ERR(camss->icc_path[i]); - - camss->icc_bw_tbl[i] =3D icc_res[i].icc_bw_tbl; } =20 return 0; @@ -1742,6 +1736,8 @@ static const struct camss_resources sm8250_resources = =3D { .csiphy_res =3D csiphy_res_8250, .csid_res =3D csid_res_8250, .vfe_res =3D vfe_res_8250, + .icc_res =3D icc_res_sm8250, + .icc_path_num =3D ARRAY_SIZE(icc_res_sm8250), }; =20 static const struct of_device_id camss_dt_match[] =3D { @@ -1758,14 +1754,10 @@ MODULE_DEVICE_TABLE(of, camss_dt_match); static int __maybe_unused camss_runtime_suspend(struct device *dev) { struct camss *camss =3D dev_get_drvdata(dev); - int nbr_icc_paths =3D 0; int i; int ret; =20 - if (camss->version =3D=3D CAMSS_8250) - nbr_icc_paths =3D ICC_SM8250_COUNT; - - for (i =3D 0; i < nbr_icc_paths; i++) { + for (i =3D 0; i < camss->res->icc_path_num; i++) { ret =3D icc_set_bw(camss->icc_path[i], 0, 0); if (ret) return ret; @@ -1777,17 +1769,14 @@ static int __maybe_unused camss_runtime_suspend(str= uct device *dev) static int __maybe_unused camss_runtime_resume(struct device *dev) { struct camss *camss =3D dev_get_drvdata(dev); - int nbr_icc_paths =3D 0; + const struct resources_icc *icc_res =3D camss->res->icc_res; int i; int ret; =20 - if (camss->version =3D=3D CAMSS_8250) - nbr_icc_paths =3D ICC_SM8250_COUNT; - - for (i =3D 0; i < nbr_icc_paths; i++) { + for (i =3D 0; i < camss->res->icc_path_num; i++) { ret =3D icc_set_bw(camss->icc_path[i], - camss->icc_bw_tbl[i].avg, - camss->icc_bw_tbl[i].peak); + icc_res[i].icc_bw_tbl.avg, + icc_res[i].icc_bw_tbl.peak); if (ret) return ret; } diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/plat= form/qcom/camss/camss.h index 20c84e8328880..8b2e4adb923ef 100644 --- a/drivers/media/platform/qcom/camss/camss.h +++ b/drivers/media/platform/qcom/camss/camss.h @@ -84,6 +84,8 @@ struct camss_resources { const struct camss_subdev_resources *csid_res; const struct camss_subdev_resources *ispif_res; const struct camss_subdev_resources *vfe_res; + const struct resources_icc *icc_res; + const unsigned int icc_path_num; }; =20 struct camss { @@ -105,7 +107,6 @@ struct camss { struct device **genpd; struct device_link **genpd_link; struct icc_path *icc_path[ICC_SM8250_COUNT]; - struct icc_bw_tbl icc_bw_tbl[ICC_SM8250_COUNT]; const struct camss_resources *res; }; =20 --=20 2.42.0 From nobody Thu Dec 18 09:41:27 2025 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 A675FEE3F05 for ; Mon, 11 Sep 2023 20:50:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231494AbjIKUuD (ORCPT ); Mon, 11 Sep 2023 16:50:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45070 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237786AbjIKNOc (ORCPT ); Mon, 11 Sep 2023 09:14:32 -0400 Received: from mail-lj1-x234.google.com (mail-lj1-x234.google.com [IPv6:2a00:1450:4864:20::234]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4596CEE for ; Mon, 11 Sep 2023 06:14:21 -0700 (PDT) Received: by mail-lj1-x234.google.com with SMTP id 38308e7fff4ca-2ba1e9b1fa9so75491471fa.3 for ; Mon, 11 Sep 2023 06:14:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694438059; x=1695042859; 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=biCoK57H9w4x0GlQBz339du1frh/6bO6nSXoupCi++g=; b=pG3rC7lYhWRyFNk8NHkaVo5V3Z5Eqj3sWk/FymoQZZgHk1aoYFWVJUvnHkeZsJhEOu BSfOC4IluQ30EEhK5qhh9Ib7aR8Wgfero0EqXN12mriuUaQ8f6dcpP0Jq7uVhBBKdRS7 Cdo+ahIx85oAaYdpF7PFMUhRG65b5kpRzEtg0QDi2KRZfp3hlPdj5f/oxvhvqUyd4MN5 fnQCjjigk8nz7Htrsey3/ln8X/9hsIxkYEmy6O049XyFLSEqScBlxUzRgWjbGuyFN8Ch gKLLIOtUM+MYeGpgPlEwh7Erg1h1MgsCHrPIRPGJw2gU3TI1fuXqwk8gTRWwb5oyPb8O M0ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694438059; x=1695042859; 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=biCoK57H9w4x0GlQBz339du1frh/6bO6nSXoupCi++g=; b=kl/+0Nc90OtAjD0l05bo4kLSfKpeSGddViZ1BQY+bKwpY0YoVvzO1SCbrTpRasyBB2 i5XLsIy9X27agii58ae5AgqbGX+GImURtOjfcqB/i7Iy/yJ6ELWUjUBzhS5uZeucN7x2 Z0KXQ6fijy6vN1BzN48uH8I06D44ZYn8m/McPw8ed/o8Qu/hZvrNVZLChw+sb7vxcznA NkT19EHzJlbhRv4vw5wzxHawujgVzb656FIiOomPMqpqLEsVj+D2iDfwytdxx/aUMN+h 6raXsZogcBktOAoqhih/pf9Hx1kc6Ew9mb2pFEWNGDkcBQHmPHgwQGI0XCtsVNxc8Dli PUJw== X-Gm-Message-State: AOJu0YzTmys+vPdvh5wrR0DRxM9gQfrSr24pQSCcO/b9FhLzR/IIjvrw PW3E04mc01R3ggeqlJc+sn/F0Q== X-Google-Smtp-Source: AGHT+IEi062NlJJ7nHO7J99X7G8a1JquSXkFTkOEHGuVEjeSpnMOpCwbef0WPL4YCUHuW7TiimGi7w== X-Received: by 2002:a2e:9d41:0:b0:2bb:aa37:6517 with SMTP id y1-20020a2e9d41000000b002bbaa376517mr6365083ljj.6.1694438059235; Mon, 11 Sep 2023 06:14:19 -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 kt8-20020a170906aac800b00988e953a586sm5313648ejb.61.2023.09.11.06.14.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 06:14:18 -0700 (PDT) From: Bryan O'Donoghue To: rfoss@kernel.org, todor.too@gmail.com, bryan.odonoghue@linaro.org, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, mchehab@kernel.org, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, andrey.konovalov@linaro.org Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 05/17] media: qcom: camss: Pass remainder of variables as resources Date: Mon, 11 Sep 2023 14:13:59 +0100 Message-ID: <20230911131411.196033-6-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230911131411.196033-1-bryan.odonoghue@linaro.org> References: <20230911131411.196033-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" The following variables are being assigned statically based on compatible strings in the probe path. * enum camss_version version; * unsigned int csiphy_num; * unsigned int csid_num; * unsigned int vfe_num; * unsigned int vfe_lite_num; * unsigned int vfe_total_num; Migrate those variables to resource parameters passed in on platform probe arguments. The one caveat is for VFE it has been necessary to intoduce a new variable vfe_total_num to capture the aggregate value of vfe_num + vfe_lite_num. All the rest of the changes are rote camss->variable to camss->res->variable with the parameter tables now populating the listed variables. Signed-off-by: Bryan O'Donoghue Acked-by: Konrad Dybcio Reviewed-by: Laurent Pinchart --- .../media/platform/qcom/camss/camss-csid.c | 14 +-- .../qcom/camss/camss-csiphy-3ph-1-0.c | 8 +- .../media/platform/qcom/camss/camss-csiphy.c | 16 +-- .../media/platform/qcom/camss/camss-ispif.c | 28 ++--- .../media/platform/qcom/camss/camss-vfe-170.c | 4 +- .../media/platform/qcom/camss/camss-vfe-480.c | 4 +- drivers/media/platform/qcom/camss/camss-vfe.c | 26 ++-- .../media/platform/qcom/camss/camss-video.c | 10 +- drivers/media/platform/qcom/camss/camss.c | 115 ++++++++---------- drivers/media/platform/qcom/camss/camss.h | 11 +- 10 files changed, 113 insertions(+), 123 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media= /platform/qcom/camss/camss-csid.c index b1113decdb305..14abb7a7ceb47 100644 --- a/drivers/media/platform/qcom/camss/camss-csid.c +++ b/drivers/media/platform/qcom/camss/camss-csid.c @@ -159,7 +159,7 @@ static int csid_set_power(struct v4l2_subdev *sd, int o= n) struct camss *camss =3D csid->camss; struct device *dev =3D camss->dev; struct vfe_device *vfe =3D &camss->vfe[csid->id]; - u32 version =3D camss->version; + u32 version =3D camss->res->version; int ret =3D 0; =20 if (on) { @@ -576,13 +576,13 @@ int msm_csid_subdev_init(struct camss *camss, struct = csid_device *csid, csid->camss =3D camss; csid->id =3D id; =20 - if (camss->version =3D=3D CAMSS_8x16) { + if (camss->res->version =3D=3D CAMSS_8x16) { csid->ops =3D &csid_ops_4_1; - } else if (camss->version =3D=3D CAMSS_8x96 || - camss->version =3D=3D CAMSS_660) { + } 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->version =3D=3D CAMSS_845 || - camss->version =3D=3D CAMSS_8250) { + } 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; @@ -591,7 +591,7 @@ int msm_csid_subdev_init(struct camss *camss, struct cs= id_device *csid, =20 /* Memory */ =20 - if (camss->version =3D=3D CAMSS_8250) { + if (camss->res->version =3D=3D CAMSS_8250) { /* for titan 480, CSID registers are inside the VFE region, * between the VFE "top" and "bus" registers. this requires * VFE to be initialized before CSID diff --git a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c b/dri= vers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c index 4dba61b8d3f2a..f50e2235c37fc 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c +++ b/drivers/media/platform/qcom/camss/camss-csiphy-3ph-1-0.c @@ -402,7 +402,7 @@ static void csiphy_gen1_config_lanes(struct csiphy_devi= ce *csiphy, val =3D CSIPHY_3PH_LNn_CFG1_SWI_REC_DLY_PRG; writel_relaxed(val, csiphy->base + CSIPHY_3PH_LNn_CFG1(l)); =20 - if (csiphy->camss->version =3D=3D CAMSS_660) + if (csiphy->camss->res->version =3D=3D CAMSS_660) val =3D CSIPHY_3PH_LNn_CFG4_T_HS_CLK_MISS_660; else val =3D CSIPHY_3PH_LNn_CFG4_T_HS_CLK_MISS; @@ -419,7 +419,7 @@ static void csiphy_gen2_config_lanes(struct csiphy_devi= ce *csiphy, int i, l, array_size; u32 val; =20 - switch (csiphy->camss->version) { + switch (csiphy->camss->res->version) { case CAMSS_845: r =3D &lane_regs_sdm845[0][0]; array_size =3D ARRAY_SIZE(lane_regs_sdm845[0]); @@ -468,8 +468,8 @@ static void csiphy_lanes_enable(struct csiphy_device *c= siphy, s64 link_freq, u8 lane_mask) { struct csiphy_lanes_cfg *c =3D &cfg->csi2->lane_cfg; - bool is_gen2 =3D (csiphy->camss->version =3D=3D CAMSS_845 || - csiphy->camss->version =3D=3D CAMSS_8250); + bool is_gen2 =3D (csiphy->camss->res->version =3D=3D CAMSS_845 || + csiphy->camss->res->version =3D=3D CAMSS_8250); u8 settle_cnt; u8 val; int i; diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/med= ia/platform/qcom/camss/camss-csiphy.c index b1b6c4cf18385..48e6a101ec9c9 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy.c +++ b/drivers/media/platform/qcom/camss/camss-csiphy.c @@ -557,17 +557,17 @@ int msm_csiphy_subdev_init(struct camss *camss, csiphy->id =3D id; csiphy->cfg.combo_mode =3D 0; =20 - if (camss->version =3D=3D CAMSS_8x16) { + 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->version =3D=3D CAMSS_8x96 || - camss->version =3D=3D CAMSS_660) { + } 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->version =3D=3D CAMSS_845 || - camss->version =3D=3D CAMSS_8250) { + } 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); @@ -581,8 +581,8 @@ int msm_csiphy_subdev_init(struct camss *camss, if (IS_ERR(csiphy->base)) return PTR_ERR(csiphy->base); =20 - if (camss->version =3D=3D CAMSS_8x16 || - camss->version =3D=3D CAMSS_8x96) { + if (camss->res->version =3D=3D CAMSS_8x16 || + camss->res->version =3D=3D CAMSS_8x96) { csiphy->base_clk_mux =3D devm_platform_ioremap_resource_byname(pdev, res->reg[1]); if (IS_ERR(csiphy->base_clk_mux)) @@ -664,7 +664,7 @@ int msm_csiphy_subdev_init(struct camss *camss, !strcmp(clock->name, "csiphy5_timer")) csiphy->rate_set[i] =3D true; =20 - if (camss->version =3D=3D CAMSS_660 && + if (camss->res->version =3D=3D CAMSS_660 && (!strcmp(clock->name, "csi0_phy") || !strcmp(clock->name, "csi1_phy") || !strcmp(clock->name, "csi2_phy"))) diff --git a/drivers/media/platform/qcom/camss/camss-ispif.c b/drivers/medi= a/platform/qcom/camss/camss-ispif.c index 75b8a60806b22..be9d2f0a10c18 100644 --- a/drivers/media/platform/qcom/camss/camss-ispif.c +++ b/drivers/media/platform/qcom/camss/camss-ispif.c @@ -270,7 +270,7 @@ static int ispif_vfe_reset(struct ispif_device *ispif, = u8 vfe_id) unsigned long time; u32 val; =20 - if (vfe_id > (camss->vfe_num - 1)) { + if (vfe_id > camss->res->vfe_num - 1) { dev_err(camss->dev, "Error: asked reset for invalid VFE%d\n", vfe_id); return -ENOENT; @@ -829,8 +829,8 @@ static int ispif_set_stream(struct v4l2_subdev *sd, int= enable) ispif_select_csid(ispif, intf, csid, vfe, 1); ispif_select_cid(ispif, intf, cid, vfe, 1); ispif_config_irq(ispif, intf, vfe, 1); - if (camss->version =3D=3D CAMSS_8x96 || - camss->version =3D=3D CAMSS_660) + if (camss->res->version =3D=3D CAMSS_8x96 || + camss->res->version =3D=3D CAMSS_660) ispif_config_pack(ispif, line->fmt[MSM_ISPIF_PAD_SINK].code, intf, cid, vfe, 1); @@ -847,8 +847,8 @@ static int ispif_set_stream(struct v4l2_subdev *sd, int= enable) return ret; =20 mutex_lock(&ispif->config_lock); - if (camss->version =3D=3D CAMSS_8x96 || - camss->version =3D=3D CAMSS_660) + if (camss->res->version =3D=3D CAMSS_8x96 || + camss->res->version =3D=3D CAMSS_660) ispif_config_pack(ispif, line->fmt[MSM_ISPIF_PAD_SINK].code, intf, cid, vfe, 0); @@ -1109,10 +1109,10 @@ int msm_ispif_subdev_init(struct camss *camss, ispif->camss =3D camss; =20 /* Number of ISPIF lines - same as number of CSID hardware modules */ - if (camss->version =3D=3D CAMSS_8x16) + if (camss->res->version =3D=3D CAMSS_8x16) ispif->line_num =3D 2; - else if (camss->version =3D=3D CAMSS_8x96 || - camss->version =3D=3D CAMSS_660) + else if (camss->res->version =3D=3D CAMSS_8x96 || + camss->res->version =3D=3D CAMSS_660) ispif->line_num =3D 4; else return -EINVAL; @@ -1126,12 +1126,12 @@ int msm_ispif_subdev_init(struct camss *camss, ispif->line[i].ispif =3D ispif; ispif->line[i].id =3D i; =20 - if (camss->version =3D=3D CAMSS_8x16) { + if (camss->res->version =3D=3D CAMSS_8x16) { ispif->line[i].formats =3D ispif_formats_8x16; ispif->line[i].nformats =3D ARRAY_SIZE(ispif_formats_8x16); - } else if (camss->version =3D=3D CAMSS_8x96 || - camss->version =3D=3D CAMSS_660) { + } else if (camss->res->version =3D=3D CAMSS_8x96 || + camss->res->version =3D=3D CAMSS_660) { ispif->line[i].formats =3D ispif_formats_8x96; ispif->line[i].nformats =3D ARRAY_SIZE(ispif_formats_8x96); @@ -1159,11 +1159,11 @@ int msm_ispif_subdev_init(struct camss *camss, ispif->irq =3D ret; snprintf(ispif->irq_name, sizeof(ispif->irq_name), "%s_%s", dev_name(dev), MSM_ISPIF_NAME); - if (camss->version =3D=3D CAMSS_8x16) + if (camss->res->version =3D=3D CAMSS_8x16) ret =3D devm_request_irq(dev, ispif->irq, ispif_isr_8x16, IRQF_TRIGGER_RISING, ispif->irq_name, ispif); - else if (camss->version =3D=3D CAMSS_8x96 || - camss->version =3D=3D CAMSS_660) + else if (camss->res->version =3D=3D CAMSS_8x96 || + camss->res->version =3D=3D CAMSS_660) ret =3D devm_request_irq(dev, ispif->irq, ispif_isr_8x96, IRQF_TRIGGER_RISING, ispif->irq_name, ispif); else diff --git a/drivers/media/platform/qcom/camss/camss-vfe-170.c b/drivers/me= dia/platform/qcom/camss/camss-vfe-170.c index 168baaa80d4e6..82d2392022dd1 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe-170.c +++ b/drivers/media/platform/qcom/camss/camss-vfe-170.c @@ -673,7 +673,7 @@ static void vfe_pm_domain_off(struct vfe_device *vfe) { struct camss *camss =3D vfe->camss; =20 - if (vfe->id >=3D camss->vfe_num) + if (vfe->id >=3D camss->res->vfe_num) return; =20 device_link_del(camss->genpd_link[vfe->id]); @@ -688,7 +688,7 @@ static int vfe_pm_domain_on(struct vfe_device *vfe) struct camss *camss =3D vfe->camss; enum vfe_line_id id =3D vfe->id; =20 - if (id >=3D camss->vfe_num) + if (id >=3D camss->res->vfe_num) return 0; =20 camss->genpd_link[id] =3D device_link_add(camss->dev, camss->genpd[id], diff --git a/drivers/media/platform/qcom/camss/camss-vfe-480.c b/drivers/me= dia/platform/qcom/camss/camss-vfe-480.c index 8ddb8016434ae..074fa4e38163e 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe-480.c +++ b/drivers/media/platform/qcom/camss/camss-vfe-480.c @@ -499,7 +499,7 @@ static void vfe_pm_domain_off(struct vfe_device *vfe) { struct camss *camss =3D vfe->camss; =20 - if (vfe->id >=3D camss->vfe_num) + if (vfe->id >=3D camss->res->vfe_num) return; =20 device_link_del(camss->genpd_link[vfe->id]); @@ -514,7 +514,7 @@ static int vfe_pm_domain_on(struct vfe_device *vfe) struct camss *camss =3D vfe->camss; enum vfe_line_id id =3D vfe->id; =20 - if (id >=3D camss->vfe_num) + if (id >=3D camss->res->vfe_num) return 0; =20 camss->genpd_link[id] =3D device_link_add(camss->dev, camss->genpd[id], diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/= platform/qcom/camss/camss-vfe.c index e84dcf0f4b2da..94ee7c7039eb3 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe.c +++ b/drivers/media/platform/qcom/camss/camss-vfe.c @@ -170,7 +170,7 @@ static u32 vfe_src_pad_code(struct vfe_line *line, u32 = sink_code, { struct vfe_device *vfe =3D to_vfe(line); =20 - if (vfe->camss->version =3D=3D CAMSS_8x16) + if (vfe->camss->res->version =3D=3D CAMSS_8x16) switch (sink_code) { case MEDIA_BUS_FMT_YUYV8_1X16: { @@ -218,10 +218,10 @@ static u32 vfe_src_pad_code(struct vfe_line *line, u3= 2 sink_code, =20 return sink_code; } - else if (vfe->camss->version =3D=3D CAMSS_8x96 || - vfe->camss->version =3D=3D CAMSS_660 || - vfe->camss->version =3D=3D CAMSS_845 || - vfe->camss->version =3D=3D CAMSS_8250) + else if (vfe->camss->res->version =3D=3D CAMSS_8x96 || + vfe->camss->res->version =3D=3D CAMSS_660 || + vfe->camss->res->version =3D=3D CAMSS_845 || + vfe->camss->res->version =3D=3D CAMSS_8250) switch (sink_code) { case MEDIA_BUS_FMT_YUYV8_1X16: { @@ -1286,7 +1286,7 @@ int msm_vfe_subdev_init(struct camss *camss, struct v= fe_device *vfe, int i, j; int ret; =20 - switch (camss->version) { + switch (camss->res->version) { case CAMSS_8x16: vfe->ops =3D &vfe_ops_4_1; break; @@ -1392,7 +1392,7 @@ int msm_vfe_subdev_init(struct camss *camss, struct v= fe_device *vfe, init_completion(&l->output.sof); init_completion(&l->output.reg_update); =20 - if (camss->version =3D=3D CAMSS_8x16) { + if (camss->res->version =3D=3D CAMSS_8x16) { if (i =3D=3D VFE_LINE_PIX) { l->formats =3D formats_pix_8x16; l->nformats =3D ARRAY_SIZE(formats_pix_8x16); @@ -1400,8 +1400,8 @@ int msm_vfe_subdev_init(struct camss *camss, struct v= fe_device *vfe, l->formats =3D formats_rdi_8x16; l->nformats =3D ARRAY_SIZE(formats_rdi_8x16); } - } else if (camss->version =3D=3D CAMSS_8x96 || - camss->version =3D=3D CAMSS_660) { + } else if (camss->res->version =3D=3D CAMSS_8x96 || + camss->res->version =3D=3D CAMSS_660) { if (i =3D=3D VFE_LINE_PIX) { l->formats =3D formats_pix_8x96; l->nformats =3D ARRAY_SIZE(formats_pix_8x96); @@ -1409,8 +1409,8 @@ int msm_vfe_subdev_init(struct camss *camss, struct v= fe_device *vfe, l->formats =3D formats_rdi_8x96; l->nformats =3D ARRAY_SIZE(formats_rdi_8x96); } - } else if (camss->version =3D=3D CAMSS_845 || - camss->version =3D=3D CAMSS_8250) { + } else if (camss->res->version =3D=3D CAMSS_845 || + camss->res->version =3D=3D CAMSS_8250) { l->formats =3D formats_rdi_845; l->nformats =3D ARRAY_SIZE(formats_rdi_845); } else { @@ -1542,8 +1542,8 @@ int msm_vfe_register_entities(struct vfe_device *vfe, } =20 video_out->ops =3D &vfe->video_ops; - if (vfe->camss->version =3D=3D CAMSS_845 || - vfe->camss->version =3D=3D CAMSS_8250) + if (vfe->camss->res->version =3D=3D CAMSS_845 || + vfe->camss->res->version =3D=3D CAMSS_8250) video_out->bpl_alignment =3D 16; else video_out->bpl_alignment =3D 8; diff --git a/drivers/media/platform/qcom/camss/camss-video.c b/drivers/medi= a/platform/qcom/camss/camss-video.c index 1d686aef92eaf..46a89b5f6c171 100644 --- a/drivers/media/platform/qcom/camss/camss-video.c +++ b/drivers/media/platform/qcom/camss/camss-video.c @@ -1006,7 +1006,7 @@ int msm_video_register(struct camss_video *video, str= uct v4l2_device *v4l2_dev, =20 mutex_init(&video->lock); =20 - if (video->camss->version =3D=3D CAMSS_8x16) { + if (video->camss->res->version =3D=3D CAMSS_8x16) { if (is_pix) { video->formats =3D formats_pix_8x16; video->nformats =3D ARRAY_SIZE(formats_pix_8x16); @@ -1014,8 +1014,8 @@ int msm_video_register(struct camss_video *video, str= uct v4l2_device *v4l2_dev, video->formats =3D formats_rdi_8x16; video->nformats =3D ARRAY_SIZE(formats_rdi_8x16); } - } else if (video->camss->version =3D=3D CAMSS_8x96 || - video->camss->version =3D=3D CAMSS_660) { + } else if (video->camss->res->version =3D=3D CAMSS_8x96 || + video->camss->res->version =3D=3D CAMSS_660) { if (is_pix) { video->formats =3D formats_pix_8x96; video->nformats =3D ARRAY_SIZE(formats_pix_8x96); @@ -1023,8 +1023,8 @@ int msm_video_register(struct camss_video *video, str= uct v4l2_device *v4l2_dev, video->formats =3D formats_rdi_8x96; video->nformats =3D ARRAY_SIZE(formats_rdi_8x96); } - } else if (video->camss->version =3D=3D CAMSS_845 || - video->camss->version =3D=3D CAMSS_8250) { + } else if (video->camss->res->version =3D=3D CAMSS_845 || + video->camss->res->version =3D=3D CAMSS_8250) { video->formats =3D formats_rdi_845; video->nformats =3D ARRAY_SIZE(formats_rdi_845); } else { diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/plat= form/qcom/camss/camss.c index f502b4d9e07c5..d1152a7db9cd2 100644 --- a/drivers/media/platform/qcom/camss/camss.c +++ b/drivers/media/platform/qcom/camss/camss.c @@ -1005,7 +1005,7 @@ int camss_pm_domain_on(struct camss *camss, int id) { int ret =3D 0; =20 - if (id < camss->vfe_num) { + if (id < camss->res->vfe_num) { struct vfe_device *vfe =3D &camss->vfe[id]; =20 ret =3D vfe->ops->pm_domain_on(vfe); @@ -1016,7 +1016,7 @@ int camss_pm_domain_on(struct camss *camss, int id) =20 void camss_pm_domain_off(struct camss *camss, int id) { - if (id < camss->vfe_num) { + if (id < camss->res->vfe_num) { struct vfe_device *vfe =3D &camss->vfe[id]; =20 vfe->ops->pm_domain_off(vfe); @@ -1125,7 +1125,7 @@ static int camss_init_subdevices(struct camss *camss) unsigned int i; int ret; =20 - for (i =3D 0; i < camss->csiphy_num; i++) { + for (i =3D 0; i < camss->res->csiphy_num; i++) { ret =3D msm_csiphy_subdev_init(camss, &camss->csiphy[i], &res->csiphy_res[i], i); if (ret < 0) { @@ -1137,7 +1137,7 @@ static int camss_init_subdevices(struct camss *camss) } =20 /* note: SM8250 requires VFE to be initialized before CSID */ - for (i =3D 0; i < camss->vfe_num + camss->vfe_lite_num; i++) { + for (i =3D 0; i < camss->vfe_total_num; i++) { ret =3D msm_vfe_subdev_init(camss, &camss->vfe[i], &res->vfe_res[i], i); if (ret < 0) { @@ -1147,7 +1147,7 @@ static int camss_init_subdevices(struct camss *camss) } } =20 - for (i =3D 0; i < camss->csid_num; i++) { + for (i =3D 0; i < camss->res->csid_num; i++) { ret =3D msm_csid_subdev_init(camss, &camss->csid[i], &res->csid_res[i], i); if (ret < 0) { @@ -1179,7 +1179,7 @@ static int camss_register_entities(struct camss *cams= s) int i, j, k; int ret; =20 - for (i =3D 0; i < camss->csiphy_num; i++) { + for (i =3D 0; i < camss->res->csiphy_num; i++) { ret =3D msm_csiphy_register_entity(&camss->csiphy[i], &camss->v4l2_dev); if (ret < 0) { @@ -1190,7 +1190,7 @@ static int camss_register_entities(struct camss *cams= s) } } =20 - for (i =3D 0; i < camss->csid_num; i++) { + for (i =3D 0; i < camss->res->csid_num; i++) { ret =3D msm_csid_register_entity(&camss->csid[i], &camss->v4l2_dev); if (ret < 0) { @@ -1209,7 +1209,7 @@ static int camss_register_entities(struct camss *cams= s) goto err_reg_ispif; } =20 - for (i =3D 0; i < camss->vfe_num + camss->vfe_lite_num; i++) { + for (i =3D 0; i < camss->vfe_total_num; i++) { ret =3D msm_vfe_register_entities(&camss->vfe[i], &camss->v4l2_dev); if (ret < 0) { @@ -1220,8 +1220,8 @@ static int camss_register_entities(struct camss *cams= s) } } =20 - for (i =3D 0; i < camss->csiphy_num; i++) { - for (j =3D 0; j < camss->csid_num; j++) { + for (i =3D 0; i < camss->res->csiphy_num; i++) { + for (j =3D 0; j < camss->res->csid_num; j++) { ret =3D media_create_pad_link( &camss->csiphy[i].subdev.entity, MSM_CSIPHY_PAD_SRC, @@ -1240,7 +1240,7 @@ static int camss_register_entities(struct camss *cams= s) } =20 if (camss->ispif) { - for (i =3D 0; i < camss->csid_num; i++) { + for (i =3D 0; i < camss->res->csid_num; i++) { for (j =3D 0; j < camss->ispif->line_num; j++) { ret =3D media_create_pad_link( &camss->csid[i].subdev.entity, @@ -1260,7 +1260,7 @@ static int camss_register_entities(struct camss *cams= s) } =20 for (i =3D 0; i < camss->ispif->line_num; i++) - for (k =3D 0; k < camss->vfe_num; k++) + for (k =3D 0; k < camss->res->vfe_num; k++) for (j =3D 0; j < camss->vfe[k].line_num; j++) { struct v4l2_subdev *ispif =3D &camss->ispif->line[i].subdev; struct v4l2_subdev *vfe =3D &camss->vfe[k].line[j].subdev; @@ -1280,8 +1280,8 @@ static int camss_register_entities(struct camss *cams= s) } } } else { - for (i =3D 0; i < camss->csid_num; i++) - for (k =3D 0; k < camss->vfe_num + camss->vfe_lite_num; k++) + for (i =3D 0; i < camss->res->csid_num; i++) + for (k =3D 0; k < camss->vfe_total_num; k++) for (j =3D 0; j < camss->vfe[k].line_num; j++) { struct v4l2_subdev *csid =3D &camss->csid[i].subdev; struct v4l2_subdev *vfe =3D &camss->vfe[k].line[j].subdev; @@ -1305,7 +1305,7 @@ static int camss_register_entities(struct camss *cams= s) return 0; =20 err_link: - i =3D camss->vfe_num + camss->vfe_lite_num; + i =3D camss->vfe_total_num; err_reg_vfe: for (i--; i >=3D 0; i--) msm_vfe_unregister_entities(&camss->vfe[i]); @@ -1313,12 +1313,12 @@ static int camss_register_entities(struct camss *ca= mss) err_reg_ispif: msm_ispif_unregister_entities(camss->ispif); =20 - i =3D camss->csid_num; + i =3D camss->res->csid_num; err_reg_csid: for (i--; i >=3D 0; i--) msm_csid_unregister_entity(&camss->csid[i]); =20 - i =3D camss->csiphy_num; + i =3D camss->res->csiphy_num; err_reg_csiphy: for (i--; i >=3D 0; i--) msm_csiphy_unregister_entity(&camss->csiphy[i]); @@ -1336,15 +1336,15 @@ static void camss_unregister_entities(struct camss = *camss) { unsigned int i; =20 - for (i =3D 0; i < camss->csiphy_num; i++) + for (i =3D 0; i < camss->res->csiphy_num; i++) msm_csiphy_unregister_entity(&camss->csiphy[i]); =20 - for (i =3D 0; i < camss->csid_num; i++) + for (i =3D 0; i < camss->res->csid_num; i++) msm_csid_unregister_entity(&camss->csid[i]); =20 msm_ispif_unregister_entities(camss->ispif); =20 - for (i =3D 0; i < camss->vfe_num + camss->vfe_lite_num; i++) + for (i =3D 0; i < camss->vfe_total_num; i++) msm_vfe_unregister_entities(&camss->vfe[i]); } =20 @@ -1463,7 +1463,7 @@ static int camss_configure_pd(struct camss *camss) } } =20 - if (i > camss->vfe_num) { + if (i > camss->res->vfe_num) { camss->genpd_link[i - 1] =3D device_link_add(camss->dev, camss->genpd[i = - 1], DL_FLAG_STATELESS | DL_FLAG_PM_RUNTIME | DL_FLAG_RPM_ACTIVE); @@ -1506,7 +1506,7 @@ static void camss_genpd_cleanup(struct camss *camss) if (camss->genpd_num =3D=3D 1) return; =20 - if (camss->genpd_num > camss->vfe_num) + if (camss->genpd_num > camss->res->vfe_num) device_link_del(camss->genpd_link[camss->genpd_num - 1]); =20 for (i =3D 0; i < camss->genpd_num; i++) @@ -1523,7 +1523,8 @@ static int camss_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; struct camss *camss; - int num_subdevs, ret; + int num_subdevs; + int ret; =20 camss =3D devm_kzalloc(dev, sizeof(*camss), GFP_KERNEL); if (!camss) @@ -1535,59 +1536,25 @@ static int camss_probe(struct platform_device *pdev) camss->dev =3D dev; platform_set_drvdata(pdev, camss); =20 - if (of_device_is_compatible(dev->of_node, "qcom,msm8916-camss")) { - camss->version =3D CAMSS_8x16; - camss->csiphy_num =3D 2; - camss->csid_num =3D 2; - camss->vfe_num =3D 1; - } else if (of_device_is_compatible(dev->of_node, - "qcom,msm8996-camss")) { - camss->version =3D CAMSS_8x96; - camss->csiphy_num =3D 3; - camss->csid_num =3D 4; - camss->vfe_num =3D 2; - } else if (of_device_is_compatible(dev->of_node, - "qcom,sdm660-camss")) { - camss->version =3D CAMSS_660; - camss->csiphy_num =3D 3; - camss->csid_num =3D 4; - camss->vfe_num =3D 2; - } else if (of_device_is_compatible(dev->of_node, - "qcom,sdm845-camss")) { - camss->version =3D CAMSS_845; - camss->csiphy_num =3D 4; - camss->csid_num =3D 3; - camss->vfe_num =3D 2; - camss->vfe_lite_num =3D 1; - } else if (of_device_is_compatible(dev->of_node, - "qcom,sm8250-camss")) { - camss->version =3D CAMSS_8250; - camss->csiphy_num =3D 6; - camss->csid_num =3D 4; - camss->vfe_num =3D 2; - camss->vfe_lite_num =3D 2; - } else { - return -EINVAL; - } - - camss->csiphy =3D devm_kcalloc(dev, camss->csiphy_num, + camss->csiphy =3D devm_kcalloc(dev, camss->res->csiphy_num, sizeof(*camss->csiphy), GFP_KERNEL); if (!camss->csiphy) return -ENOMEM; =20 - camss->csid =3D devm_kcalloc(dev, camss->csid_num, sizeof(*camss->csid), + camss->csid =3D devm_kcalloc(dev, camss->res->csid_num, sizeof(*camss->cs= id), GFP_KERNEL); if (!camss->csid) return -ENOMEM; =20 - if (camss->version =3D=3D CAMSS_8x16 || - camss->version =3D=3D CAMSS_8x96) { + if (camss->res->version =3D=3D CAMSS_8x16 || + camss->res->version =3D=3D CAMSS_8x96) { camss->ispif =3D devm_kcalloc(dev, 1, sizeof(*camss->ispif), GFP_KERNEL); if (!camss->ispif) return -ENOMEM; } =20 - camss->vfe =3D devm_kcalloc(dev, camss->vfe_num + camss->vfe_lite_num, + camss->vfe_total_num =3D camss->res->vfe_num + camss->res->vfe_lite_num; + camss->vfe =3D devm_kcalloc(dev, camss->vfe_total_num, sizeof(*camss->vfe), GFP_KERNEL); if (!camss->vfe) return -ENOMEM; @@ -1706,38 +1673,60 @@ static void camss_remove(struct platform_device *pd= ev) } =20 static const struct camss_resources msm8916_resources =3D { + .version =3D CAMSS_8x16, .csiphy_res =3D csiphy_res_8x16, .csid_res =3D csid_res_8x16, .ispif_res =3D &ispif_res_8x16, .vfe_res =3D vfe_res_8x16, + .csiphy_num =3D ARRAY_SIZE(csiphy_res_8x16), + .csid_num =3D ARRAY_SIZE(csid_res_8x16), + .vfe_num =3D ARRAY_SIZE(vfe_res_8x16), }; =20 static const struct camss_resources msm8996_resources =3D { + .version =3D CAMSS_8x96, .csiphy_res =3D csiphy_res_8x96, .csid_res =3D csid_res_8x96, .ispif_res =3D &ispif_res_8x96, .vfe_res =3D vfe_res_8x96, + .csiphy_num =3D ARRAY_SIZE(csiphy_res_8x96), + .csid_num =3D ARRAY_SIZE(csid_res_8x96), + .vfe_num =3D ARRAY_SIZE(vfe_res_8x96), }; =20 static const struct camss_resources sdm660_resources =3D { + .version =3D CAMSS_660, .csiphy_res =3D csiphy_res_660, .csid_res =3D csid_res_660, .ispif_res =3D &ispif_res_660, .vfe_res =3D vfe_res_660, + .csiphy_num =3D ARRAY_SIZE(csiphy_res_660), + .csid_num =3D ARRAY_SIZE(csid_res_660), + .vfe_num =3D ARRAY_SIZE(vfe_res_660), }; =20 static const struct camss_resources sdm845_resources =3D { + .version =3D CAMSS_845, .csiphy_res =3D csiphy_res_845, .csid_res =3D csid_res_845, .vfe_res =3D vfe_res_845, + .csiphy_num =3D ARRAY_SIZE(csiphy_res_845), + .csid_num =3D ARRAY_SIZE(csid_res_845), + .vfe_num =3D 2, + .vfe_lite_num =3D 1, }; =20 static const struct camss_resources sm8250_resources =3D { + .version =3D CAMSS_8250, .csiphy_res =3D csiphy_res_8250, .csid_res =3D csid_res_8250, .vfe_res =3D vfe_res_8250, .icc_res =3D icc_res_sm8250, .icc_path_num =3D ARRAY_SIZE(icc_res_sm8250), + .csiphy_num =3D ARRAY_SIZE(csiphy_res_8250), + .csid_num =3D ARRAY_SIZE(csid_res_8250), + .vfe_num =3D 2, + .vfe_lite_num =3D 2, }; =20 static const struct of_device_id camss_dt_match[] =3D { diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/plat= form/qcom/camss/camss.h index 8b2e4adb923ef..3b6562b515d46 100644 --- a/drivers/media/platform/qcom/camss/camss.h +++ b/drivers/media/platform/qcom/camss/camss.h @@ -80,27 +80,27 @@ enum icc_count { }; =20 struct camss_resources { + enum camss_version version; const struct camss_subdev_resources *csiphy_res; const struct camss_subdev_resources *csid_res; const struct camss_subdev_resources *ispif_res; const struct camss_subdev_resources *vfe_res; const struct resources_icc *icc_res; const unsigned int icc_path_num; + const unsigned int csiphy_num; + const unsigned int csid_num; + const unsigned int vfe_num; + const unsigned int vfe_lite_num; }; =20 struct camss { - enum camss_version version; struct v4l2_device v4l2_dev; struct v4l2_async_notifier notifier; struct media_device media_dev; struct device *dev; - int csiphy_num; struct csiphy_device *csiphy; - int csid_num; struct csid_device *csid; struct ispif_device *ispif; - int vfe_num; - int vfe_lite_num; struct vfe_device *vfe; atomic_t ref_count; int genpd_num; @@ -108,6 +108,7 @@ struct camss { struct device_link **genpd_link; struct icc_path *icc_path[ICC_SM8250_COUNT]; const struct camss_resources *res; + unsigned int vfe_total_num; }; =20 struct camss_camera_interface { --=20 2.42.0 From nobody Thu Dec 18 09:41:27 2025 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 911D2CA0EC6 for ; Mon, 11 Sep 2023 22:09:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1357519AbjIKWFm (ORCPT ); Mon, 11 Sep 2023 18:05:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45050 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237781AbjIKNO3 (ORCPT ); Mon, 11 Sep 2023 09:14:29 -0400 Received: from mail-lj1-x22c.google.com (mail-lj1-x22c.google.com [IPv6:2a00:1450:4864:20::22c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 073E4E40 for ; Mon, 11 Sep 2023 06:14:22 -0700 (PDT) Received: by mail-lj1-x22c.google.com with SMTP id 38308e7fff4ca-2bf6b37859eso47806221fa.0 for ; Mon, 11 Sep 2023 06:14:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694438060; x=1695042860; 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=ZNmLk2/hMJ8q4cG9CX8+EYjM5qVrNntkoJGG0Zi7eVo=; b=DsyMJ5ME93ipaALhkqr/zGh1C3VTw2AD5ko0p1gpqGCgMO1Du5KxKHQYp4MrcomBiQ sx0tftav9WA19IN98LSZQ6QsBu4t2od+NnfWI4AH3FLsytv1d46gzUteAkQPEjCNFTrq OUYBnjkk46if5zRNUWHenjhDAxNTfMuJYKo2HpwznEKyFet6Ymkz1BPPqE12Xgki3V9u swrTELxdSEvtYWxQMhgup6lG+q32CL7jETMLU5YtCNEf1nGQrZjY3hwaanTvrcyqdseN lNs8129rOmbbNyP0ObTCLGwr7BZyzzBXO4h0FYdcfHLtzI0o57cqCC9hw8eucKVPHP/v DHlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694438060; x=1695042860; 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=ZNmLk2/hMJ8q4cG9CX8+EYjM5qVrNntkoJGG0Zi7eVo=; b=m5r2kTz0IKwDQ6110BbHGgXjdJZ/Y573F/vimQaHql9dX9DZHJ0tZQ/ySBYyQ4ME+J MMl+DiYwGt06guJDAcHYqFhJBcuyIYfXauiu+WqReDyqwDYyOGOZPWT6kODhioG0c20p NFuS82kCbuvNIy9NtJomXmGahoIFI/nhcoya4Y4juSSuZYlhqBV6jjS8gG2AyioKVtlb maxT/rCOq7phxml8FvMr6plTgnMu0OzPZJQ2tFhFIR8e9wBJTSGqSUsPq4O1UQgGkf9/ C1pTB+IVR3F2026+2mJrMZGzt8Ydvfa+w3C8igzVPTB3Msgf4HTHAyL4v0qwXdagB1RI 6+aA== X-Gm-Message-State: AOJu0YzA54gOv5/oGSe6lJ27pmNF6oRheYEufh0FWw+2VOMqj1bkUstV YcsQuzoBz2J8TI+ljpAm4Z+btA== X-Google-Smtp-Source: AGHT+IGt5Rjm4p0+DVyi0lup0Vowe/SRu7EJp8zMmjIXiT7NpMa+xUopjQtDv+eRxe/8UD5qNeRZ9Q== X-Received: by 2002:a2e:b618:0:b0:2b5:9778:7ce2 with SMTP id r24-20020a2eb618000000b002b597787ce2mr8180833ljn.15.1694438060329; Mon, 11 Sep 2023 06:14:20 -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 kt8-20020a170906aac800b00988e953a586sm5313648ejb.61.2023.09.11.06.14.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 06:14:19 -0700 (PDT) From: Bryan O'Donoghue To: rfoss@kernel.org, todor.too@gmail.com, bryan.odonoghue@linaro.org, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, mchehab@kernel.org, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, andrey.konovalov@linaro.org Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 06/17] media: qcom: camss: Pass line_num from compat resources Date: Mon, 11 Sep 2023 14:14:00 +0100 Message-ID: <20230911131411.196033-7-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230911131411.196033-1-bryan.odonoghue@linaro.org> References: <20230911131411.196033-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" line_num indicates the number of RDI - raw data interface channels which are associated with a given IFE/VFE - image/video front end. On several SoCs the RDI number is not static for each VFE - for example on sm8250 VFE Lite has four RDIs where regular VFE has three. Assigning line_num statically in the subdev_init() phase initialises each VFE to the lower number, meaning in practical terms that we are lobbing off one RDI on some VFEs. Interrupt handling uses static for (i =3D RDI0; i < RDI2; i++) {} in some of our VFE blocks but this can't work for situations where we have a mixture of VFE @ 3 RDI and VFE-lite @ 4 RDI blocks. First step to remediate is to pass line_num from a compat string controlled data-structure and do so on a per-VFE basis. Later patches will assign the correct number of RDI blocks per VFE. Signed-off-by: Bryan O'Donoghue Reviewed-by: Konrad Dybcio Reviewed-by: Laurent Pinchart --- .../media/platform/qcom/camss/camss-vfe-170.c | 2 -- .../media/platform/qcom/camss/camss-vfe-4-1.c | 2 -- .../media/platform/qcom/camss/camss-vfe-4-7.c | 2 -- .../media/platform/qcom/camss/camss-vfe-4-8.c | 2 -- .../media/platform/qcom/camss/camss-vfe-480.c | 1 - drivers/media/platform/qcom/camss/camss-vfe.c | 5 +++ drivers/media/platform/qcom/camss/camss.c | 36 ++++++++++++------- drivers/media/platform/qcom/camss/camss.h | 1 + 8 files changed, 30 insertions(+), 21 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-vfe-170.c b/drivers/me= dia/platform/qcom/camss/camss-vfe-170.c index 82d2392022dd1..2ba7160b3bd1e 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe-170.c +++ b/drivers/media/platform/qcom/camss/camss-vfe-170.c @@ -753,8 +753,6 @@ static void vfe_subdev_init(struct device *dev, struct = vfe_device *vfe) { vfe->isr_ops =3D vfe_isr_ops_170; vfe->video_ops =3D vfe_video_ops_170; - - vfe->line_num =3D VFE_LINE_NUM_GEN2; } =20 const struct vfe_hw_ops vfe_ops_170 =3D { diff --git a/drivers/media/platform/qcom/camss/camss-vfe-4-1.c b/drivers/me= dia/platform/qcom/camss/camss-vfe-4-1.c index bc309f326f519..2911e4126e7ad 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe-4-1.c +++ b/drivers/media/platform/qcom/camss/camss-vfe-4-1.c @@ -992,8 +992,6 @@ static void vfe_subdev_init(struct device *dev, struct = vfe_device *vfe) vfe->isr_ops =3D vfe_isr_ops_gen1; vfe->ops_gen1 =3D &vfe_ops_gen1_4_1; vfe->video_ops =3D vfe_video_ops_gen1; - - vfe->line_num =3D VFE_LINE_NUM_GEN1; } =20 const struct vfe_hw_ops vfe_ops_4_1 =3D { diff --git a/drivers/media/platform/qcom/camss/camss-vfe-4-7.c b/drivers/me= dia/platform/qcom/camss/camss-vfe-4-7.c index 8acd76c9746ba..b65ed0fef595e 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe-4-7.c +++ b/drivers/media/platform/qcom/camss/camss-vfe-4-7.c @@ -1188,8 +1188,6 @@ static void vfe_subdev_init(struct device *dev, struc= t vfe_device *vfe) vfe->isr_ops =3D vfe_isr_ops_gen1; vfe->ops_gen1 =3D &vfe_ops_gen1_4_7; vfe->video_ops =3D vfe_video_ops_gen1; - - vfe->line_num =3D VFE_LINE_NUM_GEN1; } =20 const struct vfe_hw_ops vfe_ops_4_7 =3D { diff --git a/drivers/media/platform/qcom/camss/camss-vfe-4-8.c b/drivers/me= dia/platform/qcom/camss/camss-vfe-4-8.c index 3a0167ecf873a..7b3805177f037 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe-4-8.c +++ b/drivers/media/platform/qcom/camss/camss-vfe-4-8.c @@ -1173,8 +1173,6 @@ static void vfe_subdev_init(struct device *dev, struc= t vfe_device *vfe) vfe->isr_ops =3D vfe_isr_ops_gen1; vfe->ops_gen1 =3D &vfe_ops_gen1_4_8; vfe->video_ops =3D vfe_video_ops_gen1; - - vfe->line_num =3D VFE_LINE_NUM_GEN1; } =20 const struct vfe_hw_ops vfe_ops_4_8 =3D { diff --git a/drivers/media/platform/qcom/camss/camss-vfe-480.c b/drivers/me= dia/platform/qcom/camss/camss-vfe-480.c index 074fa4e38163e..43a2964121f22 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe-480.c +++ b/drivers/media/platform/qcom/camss/camss-vfe-480.c @@ -569,7 +569,6 @@ static const struct camss_video_ops vfe_video_ops_480 = =3D { static void vfe_subdev_init(struct device *dev, struct vfe_device *vfe) { vfe->video_ops =3D vfe_video_ops_480; - vfe->line_num =3D MAX_VFE_OUTPUT_LINES; } =20 const struct vfe_hw_ops vfe_ops_480 =3D { diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/= platform/qcom/camss/camss-vfe.c index 94ee7c7039eb3..f381c82f1f877 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe.c +++ b/drivers/media/platform/qcom/camss/camss-vfe.c @@ -1305,6 +1305,11 @@ int msm_vfe_subdev_init(struct camss *camss, struct = vfe_device *vfe, default: return -EINVAL; } + + if (!res->line_num) + return -EINVAL; + + vfe->line_num =3D res->line_num; vfe->ops->subdev_init(dev, vfe); =20 /* Memory */ diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/plat= form/qcom/camss/camss.c index d1152a7db9cd2..54886a2a449b0 100644 --- a/drivers/media/platform/qcom/camss/camss.c +++ b/drivers/media/platform/qcom/camss/camss.c @@ -123,7 +123,8 @@ static const struct camss_subdev_resources vfe_res_8x16= [] =3D { { 0 }, { 0 } }, .reg =3D { "vfe0" }, - .interrupt =3D { "vfe0" } + .interrupt =3D { "vfe0" }, + .line_num =3D VFE_LINE_NUM_GEN1, } }; =20 @@ -263,7 +264,8 @@ static const struct camss_subdev_resources vfe_res_8x96= [] =3D { { 0 }, { 0 } }, .reg =3D { "vfe0" }, - .interrupt =3D { "vfe0" } + .interrupt =3D { "vfe0" }, + .line_num =3D VFE_LINE_NUM_GEN1, }, =20 /* VFE1 */ @@ -281,7 +283,8 @@ static const struct camss_subdev_resources vfe_res_8x96= [] =3D { { 0 }, { 0 } }, .reg =3D { "vfe1" }, - .interrupt =3D { "vfe1" } + .interrupt =3D { "vfe1" }, + .line_num =3D VFE_LINE_NUM_GEN1, } }; =20 @@ -442,7 +445,8 @@ static const struct camss_subdev_resources vfe_res_660[= ] =3D { { 0 }, { 0 } }, .reg =3D { "vfe0" }, - .interrupt =3D { "vfe0" } + .interrupt =3D { "vfe0" }, + .line_num =3D VFE_LINE_NUM_GEN1, }, =20 /* VFE1 */ @@ -463,7 +467,8 @@ static const struct camss_subdev_resources vfe_res_660[= ] =3D { { 0 }, { 0 } }, .reg =3D { "vfe1" }, - .interrupt =3D { "vfe1" } + .interrupt =3D { "vfe1" }, + .line_num =3D VFE_LINE_NUM_GEN1, } }; =20 @@ -621,7 +626,8 @@ static const struct camss_subdev_resources vfe_res_845[= ] =3D { { 19200000, 75000000, 384000000, 538666667 }, { 384000000 } }, .reg =3D { "vfe0" }, - .interrupt =3D { "vfe0" } + .interrupt =3D { "vfe0" }, + .line_num =3D VFE_LINE_NUM_GEN2, }, =20 /* VFE1 */ @@ -641,7 +647,8 @@ static const struct camss_subdev_resources vfe_res_845[= ] =3D { { 19200000, 75000000, 384000000, 538666667 }, { 384000000 } }, .reg =3D { "vfe1" }, - .interrupt =3D { "vfe1" } + .interrupt =3D { "vfe1" }, + .line_num =3D VFE_LINE_NUM_GEN2, }, =20 /* VFE-lite */ @@ -660,7 +667,8 @@ static const struct camss_subdev_resources vfe_res_845[= ] =3D { { 19200000, 75000000, 384000000, 538666667 }, { 384000000 } }, .reg =3D { "vfe_lite" }, - .interrupt =3D { "vfe_lite" } + .interrupt =3D { "vfe_lite" }, + .line_num =3D VFE_LINE_NUM_GEN2, } }; =20 @@ -787,7 +795,8 @@ static const struct camss_subdev_resources vfe_res_8250= [] =3D { { 0 }, { 0 } }, .reg =3D { "vfe0" }, - .interrupt =3D { "vfe0" } + .interrupt =3D { "vfe0" }, + .line_num =3D 4, }, /* VFE1 */ { @@ -805,7 +814,8 @@ static const struct camss_subdev_resources vfe_res_8250= [] =3D { { 0 }, { 0 } }, .reg =3D { "vfe1" }, - .interrupt =3D { "vfe1" } + .interrupt =3D { "vfe1" }, + .line_num =3D 4, }, /* VFE2 (lite) */ { @@ -822,7 +832,8 @@ static const struct camss_subdev_resources vfe_res_8250= [] =3D { { 400000000, 480000000 }, { 0 } }, .reg =3D { "vfe_lite0" }, - .interrupt =3D { "vfe_lite0" } + .interrupt =3D { "vfe_lite0" }, + .line_num =3D 4, }, /* VFE3 (lite) */ { @@ -839,7 +850,8 @@ static const struct camss_subdev_resources vfe_res_8250= [] =3D { { 400000000, 480000000 }, { 0 } }, .reg =3D { "vfe_lite1" }, - .interrupt =3D { "vfe_lite1" } + .interrupt =3D { "vfe_lite1" }, + .line_num =3D 4, }, }; =20 diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/plat= form/qcom/camss/camss.h index 3b6562b515d46..fc02aa84a5dd7 100644 --- a/drivers/media/platform/qcom/camss/camss.h +++ b/drivers/media/platform/qcom/camss/camss.h @@ -48,6 +48,7 @@ struct camss_subdev_resources { u32 clock_rate[CAMSS_RES_MAX][CAMSS_RES_MAX]; char *reg[CAMSS_RES_MAX]; char *interrupt[CAMSS_RES_MAX]; + u8 line_num; }; =20 struct icc_bw_tbl { --=20 2.42.0 From nobody Thu Dec 18 09:41:27 2025 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 807A2CA0ECB for ; Mon, 11 Sep 2023 22:16:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1358667AbjIKWMg (ORCPT ); Mon, 11 Sep 2023 18:12:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45090 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237785AbjIKNOc (ORCPT ); Mon, 11 Sep 2023 09:14:32 -0400 Received: from mail-lj1-x236.google.com (mail-lj1-x236.google.com [IPv6:2a00:1450:4864:20::236]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 22BB8E4B for ; Mon, 11 Sep 2023 06:14:23 -0700 (PDT) Received: by mail-lj1-x236.google.com with SMTP id 38308e7fff4ca-2bf78950354so31121651fa.1 for ; Mon, 11 Sep 2023 06:14:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694438061; x=1695042861; 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=e608DI5MeHuewZICLaYIMTA3PLHsCNdeHaBJicx5TJA2t3PBjIiURUTppjEnk8vOJk PuiiEo0osu6Xm98rd4UOoaki65MDVGCZeEyCzWtK9RzO/KKVzBTpTwCNC4gxFkZmERyr n9spqVxObhxtiTSmvSUQySliglj5ZN9SBQvPb7Cb4O3js0Myfp9br+P33Bqmklj/mQL7 7oTG49CoXllUKf50T4oz8BcaVV5omEkDt2Quo+IlgGQH6Q/EnTyf/kRdMJvo0iLbBBXf +FMG7Y7XNg2YyL1ETQPTxWvUGtNsqYITPZ6qBBp1dQ5o/orqL3vIUBoA0xy59v1gmAky d08A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694438061; x=1695042861; 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=ZS8W9Npth4l6El22PUvHklIhWgXhpTBTDLj2xPhwSJGB2DtHotfYm1Adc4qzDF5ctO ytIlUjBZKSDC5rIAd5U1NG8790ffTuYyVLkjZMkD2SxL/ZGv7Pvh/Gae11C7kDD/qISr ZKV/rzuLasPj264hWTOr1CHO3YV9vknRuBuAPFl/wSbb9VlolHtZhkdrf5KRhcJtGQ5b cYyzDswtbN1s9af0b20/jNfmsWIbm11h6gN0TBA6cbYheU8ZBezUcX64w1bAihVB7cnP OAuq63TrTxrfWkBGPWDKUVCdTG+K0bRp2+0PGwCe/qUHz6pIs7RZDznwvuyj6aSRMwZw uA9w== X-Gm-Message-State: AOJu0Ywhp+duR8HlCvM4wC0pbXC4Kg00xDjgV29d94jdKVDvEM0OFsoR tVcoScYhYMYpuhV/Tc/QgsS2MA== X-Google-Smtp-Source: AGHT+IEBSitRF+GReY4YEQ7PXo00HY0hbbrEP0K4D/6MFcaM/1B615RZDjmTKOPu8g1QV3IQGb968g== X-Received: by 2002:a2e:88c6:0:b0:2b9:e317:ec4d with SMTP id a6-20020a2e88c6000000b002b9e317ec4dmr8277127ljk.39.1694438061421; Mon, 11 Sep 2023 06:14:21 -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 kt8-20020a170906aac800b00988e953a586sm5313648ejb.61.2023.09.11.06.14.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 06:14:21 -0700 (PDT) From: Bryan O'Donoghue To: rfoss@kernel.org, todor.too@gmail.com, bryan.odonoghue@linaro.org, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, mchehab@kernel.org, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, andrey.konovalov@linaro.org Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 07/17] media: qcom: camss: Pass CAMSS subdev callbacks via resource ops pointer Date: Mon, 11 Sep 2023 14:14:01 +0100 Message-ID: <20230911131411.196033-8-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230911131411.196033-1-bryan.odonoghue@linaro.org> References: <20230911131411.196033-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 From nobody Thu Dec 18 09:41:27 2025 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 2487ACA0EC8 for ; Mon, 11 Sep 2023 21:30:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346056AbjIKVWx (ORCPT ); Mon, 11 Sep 2023 17:22:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45114 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237792AbjIKNOc (ORCPT ); Mon, 11 Sep 2023 09:14:32 -0400 Received: from mail-ed1-x52a.google.com (mail-ed1-x52a.google.com [IPv6:2a00:1450:4864:20::52a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 49187E54 for ; Mon, 11 Sep 2023 06:14:24 -0700 (PDT) Received: by mail-ed1-x52a.google.com with SMTP id 4fb4d7f45d1cf-51e28cac164so11836158a12.1 for ; Mon, 11 Sep 2023 06:14:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694438062; x=1695042862; 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=XhSKtn1WWoetbFcEPefpk8WL/CMtB2nONd2TgD1HTnc=; b=TxOQngcuQrk9neSYpXpEWDetgRy86M7BgRbVcvi/jBzsjedlSFxqKtxI4oTlPyoXpj Pm6x4/OIkO0zX1fme7BX4cpRCqurJMXUXxzpgG6BnhsGmAN6nJWuIJuXlVG1HEvVCDsN 0+r1x+TC6MXPu+YL4c1BiuvKs4EMe2oKK4O2nFhmoGHrsNO7GdL7udiJUUbSrHHUa2Jf 8ZhZ+y9WvzwJg5AGL9aO2XQfK6ipjn8nhpPT9AZZ2eNCQeetX2/ZQ/OABrHlGhiOcC5h CcITVGUR3+pdy755Jm89Pld3/0m4fulYoWTYH3e3CapCbZUbigtJJ92kNZjvpG4iSsXg EJdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694438062; x=1695042862; 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=XhSKtn1WWoetbFcEPefpk8WL/CMtB2nONd2TgD1HTnc=; b=socy2ogrL8O5KzasmHHT94uFK6RughKOCuIV+xbxzi3rbGIPyV82hAk2Z2W97efZyo BF4RZQhHONNJkXeD+UnnLFC7wxrxNXA5Z3dV6OiGWFaadUjPMm4fm5UNOqG2No/2Vr+z BPdeLqAs0j7CN+Ajn/9ybZtJ0DoeCB2+Z+PtN6UR3bMpHJgkoFvFKPka4hfGK924Q0VD eJnvRdecZbAdZViEYEd4hCvomj4acUwafN+67cdlDDu7moqgO3qAlLyz62uOyQ2wzhtZ AUSMCqYtGQCbgsRjVVgMZDl/M3zO/pREZxJk4eXNxugDvHXfsk86BRcV8J1nebl37x1f otEw== X-Gm-Message-State: AOJu0Yy6stE6U4lLykEug6wQTK6cL1Mj1ta3JMb3Bj/qkPkDG1IPpM7v BQHhj2uWGeXt0Bn/IqLl2aKTzQ== X-Google-Smtp-Source: AGHT+IEFbf3WidJFJmKCbSDnTfUZx1nsd3kx3inUQt+W2uUry3n4S5gz+/xikpS3GNUDhEB5vi7IFw== X-Received: by 2002:a17:906:8a7a:b0:9a9:fa4a:5a4e with SMTP id hy26-20020a1709068a7a00b009a9fa4a5a4emr10218566ejc.13.1694438062745; Mon, 11 Sep 2023 06:14:22 -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 kt8-20020a170906aac800b00988e953a586sm5313648ejb.61.2023.09.11.06.14.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 06:14:22 -0700 (PDT) From: Bryan O'Donoghue To: rfoss@kernel.org, todor.too@gmail.com, bryan.odonoghue@linaro.org, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, mchehab@kernel.org, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, andrey.konovalov@linaro.org Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 08/17] media: qcom: camss: Assign the correct number of RDIs per VFE Date: Mon, 11 Sep 2023 14:14:02 +0100 Message-ID: <20230911131411.196033-9-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230911131411.196033-1-bryan.odonoghue@linaro.org> References: <20230911131411.196033-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" Each Video Front End - VFE - has a variable number of Raw Data Interfaces - RDIs associated with it. The CAMSS code started from a naive implementation where a fixed define was used as a control in a for(){} loop iterating through RDIs. That model scales badly. An attempt was made with VFE_LINE_NUM_GEN2 and VFE_LINE_NUM_GEN1 to differentiate between SoCs but, the problem with that is "gen1" and "gen2" have no meaning in the silicon. There is no fixed constraint in the silicon between VFE and RDI, it is entirely up to the SoC designers how many VFEs are populated and how many RDIs to associate with each VFE. As an example sdm845 has VFE version 175 and sm8250 VFE version 480. sdm845 has 2 VFEs with 4 RDIs and 1 VFE Lite with 4 RDIs. sm8250 has 2 VFEs with 3 RDIs and 2 VFE Lite with 4 RDIs. Clearly then we need a more granular model to capture the necessary data. The defines have gone away to be replaced with per-SoC data but, we haven't populated the parameter data with the real values. Let's call those values out now msm8916: 1 x VFE 3 x RDI per VFE (not 4) msm8996: 2 x VFE 3 x RDI per VFE (not 4) sdm660: 2 x VFE 3 x RDI per VFE (not 4) sdm845: 2 x VFE 4 x RDI per VFE (not 3) 1 x VFE Lite 4 x RDI per VFE Lite (not 3) sm8250: 2 x VFE 3 x RDI per VFE (not 4) 2 x VFE Lite 4 x RDI per VFE Lite This more complex and correct mapping was not possible prior to passing values via driver data. Now that we have that change in place we can correctly map VFEs to RDIs for each VFE. Signed-off-by: Bryan O'Donoghue Acked-by: Konrad Dybcio Reviewed-by: Laurent Pinchart --- drivers/media/platform/qcom/camss/camss-vfe.h | 2 -- drivers/media/platform/qcom/camss/camss.c | 20 +++++++++---------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-vfe.h b/drivers/media/= platform/qcom/camss/camss-vfe.h index b4bae9f65c68f..4783afa73a365 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe.h +++ b/drivers/media/platform/qcom/camss/camss-vfe.h @@ -52,9 +52,7 @@ enum vfe_line_id { VFE_LINE_RDI0 =3D 0, VFE_LINE_RDI1 =3D 1, VFE_LINE_RDI2 =3D 2, - VFE_LINE_NUM_GEN2 =3D 3, VFE_LINE_PIX =3D 3, - VFE_LINE_NUM_GEN1 =3D 4, VFE_LINE_NUM_MAX =3D 4 }; =20 diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/plat= form/qcom/camss/camss.c index 12131d9ea7ca8..8e78dd8d5961e 100644 --- a/drivers/media/platform/qcom/camss/camss.c +++ b/drivers/media/platform/qcom/camss/camss.c @@ -128,7 +128,7 @@ static const struct camss_subdev_resources vfe_res_8x16= [] =3D { { 0 } }, .reg =3D { "vfe0" }, .interrupt =3D { "vfe0" }, - .line_num =3D VFE_LINE_NUM_GEN1, + .line_num =3D 3, .ops =3D &vfe_ops_4_1 } }; @@ -277,7 +277,7 @@ static const struct camss_subdev_resources vfe_res_8x96= [] =3D { { 0 } }, .reg =3D { "vfe0" }, .interrupt =3D { "vfe0" }, - .line_num =3D VFE_LINE_NUM_GEN1, + .line_num =3D 3, .ops =3D &vfe_ops_4_7 }, =20 @@ -297,7 +297,7 @@ static const struct camss_subdev_resources vfe_res_8x96= [] =3D { { 0 } }, .reg =3D { "vfe1" }, .interrupt =3D { "vfe1" }, - .line_num =3D VFE_LINE_NUM_GEN1, + .line_num =3D 3, .ops =3D &vfe_ops_4_7 } }; @@ -467,7 +467,7 @@ static const struct camss_subdev_resources vfe_res_660[= ] =3D { { 0 } }, .reg =3D { "vfe0" }, .interrupt =3D { "vfe0" }, - .line_num =3D VFE_LINE_NUM_GEN1, + .line_num =3D 3, .ops =3D &vfe_ops_4_8 }, =20 @@ -490,7 +490,7 @@ static const struct camss_subdev_resources vfe_res_660[= ] =3D { { 0 } }, .reg =3D { "vfe1" }, .interrupt =3D { "vfe1" }, - .line_num =3D VFE_LINE_NUM_GEN1, + .line_num =3D 3, .ops =3D &vfe_ops_4_8 } }; @@ -657,7 +657,7 @@ static const struct camss_subdev_resources vfe_res_845[= ] =3D { { 384000000 } }, .reg =3D { "vfe0" }, .interrupt =3D { "vfe0" }, - .line_num =3D VFE_LINE_NUM_GEN2, + .line_num =3D 4, .ops =3D &vfe_ops_170 }, =20 @@ -679,7 +679,7 @@ static const struct camss_subdev_resources vfe_res_845[= ] =3D { { 384000000 } }, .reg =3D { "vfe1" }, .interrupt =3D { "vfe1" }, - .line_num =3D VFE_LINE_NUM_GEN2, + .line_num =3D 4, .ops =3D &vfe_ops_170 }, =20 @@ -700,7 +700,7 @@ static const struct camss_subdev_resources vfe_res_845[= ] =3D { { 384000000 } }, .reg =3D { "vfe_lite" }, .interrupt =3D { "vfe_lite" }, - .line_num =3D VFE_LINE_NUM_GEN2, + .line_num =3D 4, .ops =3D &vfe_ops_170 } }; @@ -839,7 +839,7 @@ static const struct camss_subdev_resources vfe_res_8250= [] =3D { { 0 } }, .reg =3D { "vfe0" }, .interrupt =3D { "vfe0" }, - .line_num =3D 4, + .line_num =3D 3, .ops =3D &vfe_ops_480 }, /* VFE1 */ @@ -859,7 +859,7 @@ static const struct camss_subdev_resources vfe_res_8250= [] =3D { { 0 } }, .reg =3D { "vfe1" }, .interrupt =3D { "vfe1" }, - .line_num =3D 4, + .line_num =3D 3, .ops =3D &vfe_ops_480 }, /* VFE2 (lite) */ --=20 2.42.0 From nobody Thu Dec 18 09:41:27 2025 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 99D3BCA0EC7 for ; Mon, 11 Sep 2023 21:59:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1355170AbjIKV5U (ORCPT ); Mon, 11 Sep 2023 17:57:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40398 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237798AbjIKNOc (ORCPT ); Mon, 11 Sep 2023 09:14:32 -0400 Received: from mail-ej1-x62d.google.com (mail-ej1-x62d.google.com [IPv6:2a00:1450:4864:20::62d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EC95CE67 for ; Mon, 11 Sep 2023 06:14:25 -0700 (PDT) Received: by mail-ej1-x62d.google.com with SMTP id a640c23a62f3a-99c3c8adb27so558188266b.1 for ; Mon, 11 Sep 2023 06:14:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694438064; x=1695042864; 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=0TCXlkx9FBx7XbMn7VMNDwyuOtzJKgBsRO7jREukP4c=; b=Y56b8e+YU9PnufBoGgPTApzgOXcK+2g8EuHQ6pN8bzRIIHBormuQdUdQGGYtp6JAii 9lRh8htmjCpb9vGYNhTHrB0uN36c60/tnX3rWrQq/6kh2AdMhWVFtosDRP5xnDNKa5p+ lkhVYlNCHpQcrOJ8wFhp99gL0wIuh9axnDgEI9g+zGw1LTczB33ocgoudJ07Wee8aqsH 6ZDoTPtp7TOiavw2vSgnpb/YT81scTSm4a6XwSJpc0nha8svVjdcfXll33JAroDBeaHe sQJ6ZzluurGOhRgMhPKFbgDp1NmoJxuMTLbbe3KOBhnP4j5UU5eQYH3Y8ylhZdQh2sia 6uFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694438064; x=1695042864; 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=0TCXlkx9FBx7XbMn7VMNDwyuOtzJKgBsRO7jREukP4c=; b=OhaKUL619zvulhR/Oo68+E6bJ3aqZYNTan5uijd6tgg0p5HbXen9rvPWJzlU6W1H5o Iud1ZedNMSQkgOQZ90OdfloP9VdmL+pGd4S+T89EGHemqn6i6h++xVv39gFIL8fnNRjH DbkCEpvBYxddCrPTvgTPHTihjWyGn6UlPm6QYvqSllEQFHSgZSEZAuLy8DNuhdguM9Vx c9Vy/hdxs+V4/0ydMQjbou6JE4fr+C53lJbAz1KjC/u0g+M4NA3pCsgZuua2PWwSJmLW nc22Am1U5Q8I5tugPuRrmiAsdLRGyl15gNRD/xns3ASqlCaTTp4hFiINwCgHvOTY4GUW RM4Q== X-Gm-Message-State: AOJu0Yy8Ypq57KFpTRlWLerBaM8XUwfLDoaIIYviWBLYj7L/Il2QyFTI xtq5BKgkh9crWoo9gouv4DbJuw== X-Google-Smtp-Source: AGHT+IFZzXhiNfwKFMF6Zm2cRmio9F67gVYIwv8DcTVRfvwtJ3y2kR4pCcWDGQrHs17pzDMQ4a2NaA== X-Received: by 2002:a17:907:2cd8:b0:9a1:c357:c743 with SMTP id hg24-20020a1709072cd800b009a1c357c743mr8074375ejc.52.1694438063804; Mon, 11 Sep 2023 06:14:23 -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 kt8-20020a170906aac800b00988e953a586sm5313648ejb.61.2023.09.11.06.14.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 06:14:23 -0700 (PDT) From: Bryan O'Donoghue To: rfoss@kernel.org, todor.too@gmail.com, bryan.odonoghue@linaro.org, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, mchehab@kernel.org, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, andrey.konovalov@linaro.org Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 09/17] media: qcom: camss: Remove special case for VFE get/put Date: Mon, 11 Sep 2023 14:14:03 +0100 Message-ID: <20230911131411.196033-10-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230911131411.196033-1-bryan.odonoghue@linaro.org> References: <20230911131411.196033-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" From sdm845 onwards we need to ensure the VFE is powered on prior to switching on the CSID. Currently the code tests for sdm845, sm8250 and then does get/set. This is not extensible and it turns out is not necessary either since vfe_get and vfe_set reference count. Remove the over-conservative SoC version check. Signed-off-by: Bryan O'Donoghue Suggested-by: Laurent Pinchart Tested-by: Bryan O'Donoghue # rb3 # db410c Reviewed-by: Laurent Pinchart --- drivers/media/platform/qcom/camss/camss-csid.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media= /platform/qcom/camss/camss-csid.c index 99f651e2021cb..02ae3f5cb0c0e 100644 --- a/drivers/media/platform/qcom/camss/camss-csid.c +++ b/drivers/media/platform/qcom/camss/camss-csid.c @@ -159,15 +159,12 @@ static int csid_set_power(struct v4l2_subdev *sd, int= on) struct camss *camss =3D csid->camss; struct device *dev =3D camss->dev; struct vfe_device *vfe =3D &camss->vfe[csid->id]; - u32 version =3D camss->res->version; int ret =3D 0; =20 if (on) { - if (version =3D=3D CAMSS_8250 || version =3D=3D CAMSS_845) { - ret =3D vfe_get(vfe); - if (ret < 0) - return ret; - } + ret =3D vfe_get(vfe); + if (ret < 0) + return ret; =20 ret =3D pm_runtime_resume_and_get(dev); if (ret < 0) @@ -217,8 +214,7 @@ static int csid_set_power(struct v4l2_subdev *sd, int o= n) regulator_bulk_disable(csid->num_supplies, csid->supplies); pm_runtime_put_sync(dev); - if (version =3D=3D CAMSS_8250 || version =3D=3D CAMSS_845) - vfe_put(vfe); + vfe_put(vfe); } =20 return ret; --=20 2.42.0 From nobody Thu Dec 18 09:41:27 2025 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 257BFCA0EC1 for ; Mon, 11 Sep 2023 21:21:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345134AbjIKVPm (ORCPT ); Mon, 11 Sep 2023 17:15:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40420 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237799AbjIKNOd (ORCPT ); Mon, 11 Sep 2023 09:14:33 -0400 Received: from mail-ej1-x634.google.com (mail-ej1-x634.google.com [IPv6:2a00:1450:4864:20::634]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8E59DE68 for ; Mon, 11 Sep 2023 06:14:26 -0700 (PDT) Received: by mail-ej1-x634.google.com with SMTP id a640c23a62f3a-9a9f2827131so425553666b.1 for ; Mon, 11 Sep 2023 06:14:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694438065; x=1695042865; 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=379UQYxpAxza5TcrO1uyZtcU91VH4r4NWvGfZfDBNQU=; b=tNVQ4nGsU6PR/CwerNGT9oGENinDJCCte8VLg1pfptWR6/VmtQKXV1xAhp4dhjWF2o DKPUgk04PsJPJG5pJHeHlXWQvE+YoomHX60NuG7/1uVGhRqBcA7TuRyk9q2OKZ75ZUE/ HlrtaaRJs9yflWQfB+FH60+WoxSRNcKzUsCYZy/58TgKXYnZ31DHd1lCV4SoO6Nj1UKG 4xfD/tvj2XAH57DUo0wcbBrMSk3XbHMPGFjm0wARODR1yhQkpDa9DjF1T6Lf1bQ3Q2by BLVcyPHYTvt3C4p/NcfYeB9AdZaFeIVOLMzkb+tI6jLEPeaVd2DngkRw0mj21KkQuHVq FUIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694438065; x=1695042865; 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=379UQYxpAxza5TcrO1uyZtcU91VH4r4NWvGfZfDBNQU=; b=gIkTg/lrzqpammXorDnTELd7l56NBU/PQYJgvqIxI2EQhlynGrmV4KQ4QDjFvHX+57 AmcjtqxS0XOVA9GWf15MwPDsJJ+DnPxRM71cKbtsY/z7OzJNL5ij2MgmPf2gKW11Qqcy CtntVfXEkIa26LP9ncgP4c1u/3FkHjQgguZ/17m6TlxQcGM2jV0FsHvpJwsMJiJSeivF TCekelEt8NmmiCik5GTA+pm/Vpe0S3hgoHYR/NhnCo3OeUUsT6S88VGD8St9X2t7zAG8 0WjLVqSnvebU62HG5LzpZe4Kdi6avnFzdt3M5ZQ4+Uxy6/RE2Ie+V7s7KJkarETqbh0K GeOA== X-Gm-Message-State: AOJu0YyVbxqRi+THfBRsbxLgN8K9G+WLDkqMMGb4zn0kk/nJNYZ3OBYl 5pz7zmg0Ixqa+5zINErH18Gpbg== X-Google-Smtp-Source: AGHT+IFW/BeHj4BsF45zeLrM3V2+VcezcA54mS2dqsyrgNTiGUKG5AXFvFoFU3ljp5mA3sEDX2GtbQ== X-Received: by 2002:a17:906:53cb:b0:9a9:d5e7:5531 with SMTP id p11-20020a17090653cb00b009a9d5e75531mr6551644ejo.74.1694438065062; Mon, 11 Sep 2023 06:14:25 -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 kt8-20020a170906aac800b00988e953a586sm5313648ejb.61.2023.09.11.06.14.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 06:14:24 -0700 (PDT) From: Bryan O'Donoghue To: rfoss@kernel.org, todor.too@gmail.com, bryan.odonoghue@linaro.org, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, mchehab@kernel.org, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, andrey.konovalov@linaro.org Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 10/17] media: qcom: camss: Untangle if/else spaghetti in camss Date: Mon, 11 Sep 2023 14:14:04 +0100 Message-ID: <20230911131411.196033-11-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230911131411.196033-1-bryan.odonoghue@linaro.org> References: <20230911131411.196033-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" We have a very convoluted if/else legacy here which needs to be rationalised to make it more sustainable. Adding in another Soc or two will make some of these if statements into increasingly large multi-clause behemoths. Introduce switches in the obvious places to despaghetiify. Signed-off-by: Bryan O'Donoghue Acked-by: Konrad Dybcio --- .../media/platform/qcom/camss/camss-csiphy.c | 16 +++++---- drivers/media/platform/qcom/camss/camss-vfe.c | 33 +++++++++++-------- .../media/platform/qcom/camss/camss-video.c | 17 +++++----- 3 files changed, 37 insertions(+), 29 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/med= ia/platform/qcom/camss/camss-csiphy.c index 4310a132dcbe2..18f9a4defb2a4 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy.c +++ b/drivers/media/platform/qcom/camss/camss-csiphy.c @@ -558,19 +558,21 @@ int msm_csiphy_subdev_init(struct camss *camss, csiphy->cfg.combo_mode =3D 0; csiphy->ops =3D res->ops; =20 - if (camss->res->version =3D=3D CAMSS_8x16) { + switch (camss->res->version) { + case CAMSS_8x16: 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) { + break; + case CAMSS_8x96: + case CAMSS_660: 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) { + break; + case CAMSS_845: + case CAMSS_8250: csiphy->formats =3D csiphy_formats_sdm845; csiphy->nformats =3D ARRAY_SIZE(csiphy_formats_sdm845); - } else { - return -EINVAL; + break; } =20 /* Memory */ diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/= platform/qcom/camss/camss-vfe.c index 4d5c32d3dddbf..db8f68819ded9 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe.c +++ b/drivers/media/platform/qcom/camss/camss-vfe.c @@ -170,7 +170,8 @@ static u32 vfe_src_pad_code(struct vfe_line *line, u32 = sink_code, { struct vfe_device *vfe =3D to_vfe(line); =20 - if (vfe->camss->res->version =3D=3D CAMSS_8x16) + switch (vfe->camss->res->version) { + case CAMSS_8x16: switch (sink_code) { case MEDIA_BUS_FMT_YUYV8_1X16: { @@ -218,10 +219,11 @@ static u32 vfe_src_pad_code(struct vfe_line *line, u3= 2 sink_code, =20 return sink_code; } - else if (vfe->camss->res->version =3D=3D CAMSS_8x96 || - vfe->camss->res->version =3D=3D CAMSS_660 || - vfe->camss->res->version =3D=3D CAMSS_845 || - vfe->camss->res->version =3D=3D CAMSS_8250) + break; + case CAMSS_8x96: + case CAMSS_660: + case CAMSS_845: + case CAMSS_8250: switch (sink_code) { case MEDIA_BUS_FMT_YUYV8_1X16: { @@ -281,8 +283,9 @@ static u32 vfe_src_pad_code(struct vfe_line *line, u32 = sink_code, =20 return sink_code; } - else - return 0; + break; + } + return 0; } =20 int vfe_reset(struct vfe_device *vfe) @@ -1379,7 +1382,8 @@ int msm_vfe_subdev_init(struct camss *camss, struct v= fe_device *vfe, init_completion(&l->output.sof); init_completion(&l->output.reg_update); =20 - if (camss->res->version =3D=3D CAMSS_8x16) { + switch (camss->res->version) { + case CAMSS_8x16: if (i =3D=3D VFE_LINE_PIX) { l->formats =3D formats_pix_8x16; l->nformats =3D ARRAY_SIZE(formats_pix_8x16); @@ -1387,8 +1391,9 @@ int msm_vfe_subdev_init(struct camss *camss, struct v= fe_device *vfe, l->formats =3D formats_rdi_8x16; l->nformats =3D ARRAY_SIZE(formats_rdi_8x16); } - } else if (camss->res->version =3D=3D CAMSS_8x96 || - camss->res->version =3D=3D CAMSS_660) { + break; + case CAMSS_8x96: + case CAMSS_660: if (i =3D=3D VFE_LINE_PIX) { l->formats =3D formats_pix_8x96; l->nformats =3D ARRAY_SIZE(formats_pix_8x96); @@ -1396,12 +1401,12 @@ int msm_vfe_subdev_init(struct camss *camss, struct= vfe_device *vfe, l->formats =3D formats_rdi_8x96; l->nformats =3D ARRAY_SIZE(formats_rdi_8x96); } - } else if (camss->res->version =3D=3D CAMSS_845 || - camss->res->version =3D=3D CAMSS_8250) { + break; + case CAMSS_845: + case CAMSS_8250: l->formats =3D formats_rdi_845; l->nformats =3D ARRAY_SIZE(formats_rdi_845); - } else { - return -EINVAL; + break; } } =20 diff --git a/drivers/media/platform/qcom/camss/camss-video.c b/drivers/medi= a/platform/qcom/camss/camss-video.c index 46a89b5f6c171..a89da5ef47109 100644 --- a/drivers/media/platform/qcom/camss/camss-video.c +++ b/drivers/media/platform/qcom/camss/camss-video.c @@ -1006,7 +1006,8 @@ int msm_video_register(struct camss_video *video, str= uct v4l2_device *v4l2_dev, =20 mutex_init(&video->lock); =20 - if (video->camss->res->version =3D=3D CAMSS_8x16) { + switch (video->camss->res->version) { + case CAMSS_8x16: if (is_pix) { video->formats =3D formats_pix_8x16; video->nformats =3D ARRAY_SIZE(formats_pix_8x16); @@ -1014,8 +1015,9 @@ int msm_video_register(struct camss_video *video, str= uct v4l2_device *v4l2_dev, video->formats =3D formats_rdi_8x16; video->nformats =3D ARRAY_SIZE(formats_rdi_8x16); } - } else if (video->camss->res->version =3D=3D CAMSS_8x96 || - video->camss->res->version =3D=3D CAMSS_660) { + break; + case CAMSS_8x96: + case CAMSS_660: if (is_pix) { video->formats =3D formats_pix_8x96; video->nformats =3D ARRAY_SIZE(formats_pix_8x96); @@ -1023,13 +1025,12 @@ int msm_video_register(struct camss_video *video, s= truct v4l2_device *v4l2_dev, video->formats =3D formats_rdi_8x96; video->nformats =3D ARRAY_SIZE(formats_rdi_8x96); } - } else if (video->camss->res->version =3D=3D CAMSS_845 || - video->camss->res->version =3D=3D CAMSS_8250) { + break; + case CAMSS_845: + case CAMSS_8250: video->formats =3D formats_rdi_845; video->nformats =3D ARRAY_SIZE(formats_rdi_845); - } else { - ret =3D -EINVAL; - goto error_video_register; + break; } =20 ret =3D msm_video_init_format(video); --=20 2.42.0 From nobody Thu Dec 18 09:41:27 2025 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 CC0ECCA0EC6 for ; Mon, 11 Sep 2023 21:59:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1355262AbjIKV5k (ORCPT ); Mon, 11 Sep 2023 17:57:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40438 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237804AbjIKNOd (ORCPT ); Mon, 11 Sep 2023 09:14:33 -0400 Received: from mail-ej1-x629.google.com (mail-ej1-x629.google.com [IPv6:2a00:1450:4864:20::629]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AAA40CD7 for ; Mon, 11 Sep 2023 06:14:27 -0700 (PDT) Received: by mail-ej1-x629.google.com with SMTP id a640c23a62f3a-99c136ee106so552876866b.1 for ; Mon, 11 Sep 2023 06:14:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694438066; x=1695042866; 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=Xlz6iwTR+P+aX/Li0khE/j1svXvZ2ELJqgA8Sp/LWUg=; b=riXB3fTGKV3MTaRcTdAtxsKHyrSTnbX6ELDPgcPe4rDRp08KkX6jk+v4s5Pvb8BCT4 jGr8Tz6wCWxERs61lIOQ0LKNk5fn5ZZVGzuketuaYgFzBEo2qV1oD7d/WijarShCUx0x EILB0LzqzmK09J6btHNFkgG/4OrJeE342WhaU0VjfsjT/WAk2hHb+KeuZA2p+K0id8GR 4F3jUpLxOVFhA9frkCvMODUf2MwH3Ud747rgSWPxr0yt4GIIPGBoLQsb5jm33fsXPZb8 rDBy1si0M01TVvFBm5iwl5saBeAdGjW6ohDA0qpYNzN3t25x9zqLvO/i9Z0RiwzG37TD ecjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694438066; x=1695042866; 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=Xlz6iwTR+P+aX/Li0khE/j1svXvZ2ELJqgA8Sp/LWUg=; b=sh4sIVYNo11SMlehKLEzX2cHSANIgYvovvA8tYJlaqhkrnamCeBVGOVPbra0qu9UXF KLL/rQNH4ciQB/AJhFxaLf7POVseo6cQtMYxfmLwckilceKHBRUF9qR1gJJJvDJ6M+p9 yxKHi1SvvlVp7czufdKeCgsS0Lqu9I62rEBOM/e59qtn0FF7uJqUSUn4oYS6gZhObGhn hl7ztNW0II/vH9F/6mEXQn1xzf32uECeksaNY3vlMorJSlZzyv4KGmednicliZCFjM0X /X3mdgNdM28l7zZbMCdppNwg3/LF5DH3yo6DqcK2zz0JIPMpQ4wlwDkBqTPN2ZxXtNY8 xnmA== X-Gm-Message-State: AOJu0YxrPP1CXpsPRcOfvWKyA0tz4672MqJL9MkvLjWrsFY1PlI0AKNH 7Jc+paRl6O1+KTbeW5kt+Lsplg== X-Google-Smtp-Source: AGHT+IHi1NjC7YYvhb26l/0B9n9PKoTamfRqC35EE+RVrZTXnpH8uVnn+2cDTnwSP+ZX2QXdmHP+Ow== X-Received: by 2002:a17:906:1d4:b0:9a2:276d:d83c with SMTP id 20-20020a17090601d400b009a2276dd83cmr8333692ejj.18.1694438066126; Mon, 11 Sep 2023 06:14:26 -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 kt8-20020a170906aac800b00988e953a586sm5313648ejb.61.2023.09.11.06.14.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 06:14:25 -0700 (PDT) From: Bryan O'Donoghue To: rfoss@kernel.org, todor.too@gmail.com, bryan.odonoghue@linaro.org, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, mchehab@kernel.org, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, andrey.konovalov@linaro.org Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 11/17] media: qcom: camss: Allow clocks vfeN vfe_liteN or vfe_lite Date: Mon, 11 Sep 2023 14:14:05 +0100 Message-ID: <20230911131411.196033-12-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230911131411.196033-1-bryan.odonoghue@linaro.org> References: <20230911131411.196033-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" The number of Video Front End - VFE or Image Front End - IFE supported with new SoCs can vary both for the full and lite cases. For example sdm845 has one vfe_lite and two vfe interfaces with the vfe clock called simply "vfe_lite" with no integer postfix. sc8280xp has four vfe and four vfe lite blocks. At the moment we declare vfe_lite0 and vfe_lite1 for sm8250 but never set those clocks because we don't match the strings. We need to support the following clock name formats - vfeN - vfe_liteN - vfe_lite with N being any reasonably sized integer. There are two sites in this code which need to do the same thing, constructing and matching strings with the pattern above, so encapsulate the logic in one function. Signed-off-by: Bryan O'Donoghue --- drivers/media/platform/qcom/camss/camss-vfe.c | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/= platform/qcom/camss/camss-vfe.c index db8f68819ded9..f3cf387e4907e 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe.c +++ b/drivers/media/platform/qcom/camss/camss-vfe.c @@ -431,6 +431,20 @@ void vfe_isr_reset_ack(struct vfe_device *vfe) complete(&vfe->reset_complete); } =20 +static int vfe_match_clock_names(struct vfe_device *vfe, + struct camss_clock *clock) +{ + char vfe_name[6]; /* vfeXX\0 */ + char vfe_lite_name[11]; /* vfe_liteXX\0 */ + + snprintf(vfe_name, sizeof(vfe_name), "vfe%d", vfe->id); + snprintf(vfe_lite_name, sizeof(vfe_lite_name), "vfe_lite%d", vfe->id); + + return (!strcmp(clock->name, vfe_name) || + !strcmp(clock->name, vfe_lite_name) || + !strcmp(clock->name, "vfe_lite")); +} + /* * vfe_set_clock_rates - Calculate and set clock rates on VFE module * @vfe: VFE device @@ -454,9 +468,7 @@ static int vfe_set_clock_rates(struct vfe_device *vfe) for (i =3D 0; i < vfe->nclocks; i++) { struct camss_clock *clock =3D &vfe->clock[i]; =20 - if (!strcmp(clock->name, "vfe0") || - !strcmp(clock->name, "vfe1") || - !strcmp(clock->name, "vfe_lite")) { + if (vfe_match_clock_names(vfe, clock)) { u64 min_rate =3D 0; long rate; =20 @@ -537,9 +549,7 @@ static int vfe_check_clock_rates(struct vfe_device *vfe) for (i =3D 0; i < vfe->nclocks; i++) { struct camss_clock *clock =3D &vfe->clock[i]; =20 - if (!strcmp(clock->name, "vfe0") || - !strcmp(clock->name, "vfe1") || - !strcmp(clock->name, "vfe_lite")) { + if (vfe_match_clock_names(vfe, clock)) { u64 min_rate =3D 0; unsigned long rate; =20 --=20 2.42.0 From nobody Thu Dec 18 09:41:27 2025 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 30673CA0ECE for ; Mon, 11 Sep 2023 22:47:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1378970AbjIKWkR (ORCPT ); Mon, 11 Sep 2023 18:40:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40410 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237808AbjIKNOd (ORCPT ); Mon, 11 Sep 2023 09:14:33 -0400 Received: from mail-ej1-x633.google.com (mail-ej1-x633.google.com [IPv6:2a00:1450:4864:20::633]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 80C05E6C for ; Mon, 11 Sep 2023 06:14:28 -0700 (PDT) Received: by mail-ej1-x633.google.com with SMTP id a640c23a62f3a-99cce6f7de2so561775366b.3 for ; Mon, 11 Sep 2023 06:14:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694438067; x=1695042867; 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=MHtDr8xYhXwGqBJmtIj0tvF8SPL/tjbZCKIvzLXh3+Y=; b=xLRr6Lht8sE0J66Esx8teJ13dD38fWIXBUmYq6YLTqEgGSly1o/QjV0Jaey2lhRAkr DrHDLBUn/lMQlvT0m6DmfWEXHdkkXkVUyzy152ALZwnFHKOw3ai3AQLys5P2BzUqFmN/ iBewcXhXmZUaxglzp7zVtC5f4Br/rKHNRkG0Z1oxxam8yNODlZJc3DpV+ITtmI3oB8Cc SpRkd8N5JWiitAdD8Fte5cx3HT0oa3zlDjNEFIJMGb8uGnJpvXDtqzzvV2Wu6OgA6ACn WdRn80Z/2zaHhNWZ5Txy86UiAJF0vx2G6LziCl8cyLT5yWN+Kh7l+/EsfkB7I+5619Kj XY6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694438067; x=1695042867; 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=MHtDr8xYhXwGqBJmtIj0tvF8SPL/tjbZCKIvzLXh3+Y=; b=I7qxO7JdnESdWocyu0CPYNZWRxxqLELZ8IyTcRXCnXtHK4V3UKHEcrMdTXlZ8ROLIq SS8m19goQUIWIwpJqKOxYd4WOYsi+MEPV8hZtbjGubLGhXSUYUB9WhDxfKB+IUp8ieMR 1RdfdYAPRQPHGjTgelE6Wmp09G+FVJZupfN3eUjYqPgHqWlw3G0Kf+wfcLMVDlbQPvYN wmAHtn0a0ihFUkUKQqr+iPJhmnOdcyXCWupzw4Tfa8Zm8HXZo0x4IS1E3ehLoiadfiKk PKBtDK8buLGqBEasBqSvReLnz7OV5p3oCfk4VVz0sfU/vq9MOUEBZOgMtEUXSc0IdT3z rNlg== X-Gm-Message-State: AOJu0Yw2gOLnnnLn3vAdcQLot3Id4O+qmlS8fotGyF/F3118DSsiWao2 eBf3EsEXj7IJEZsmTj6OBVe+1Q== X-Google-Smtp-Source: AGHT+IEJZEhw/8MjyR5Bg/evKvO1z4rIjCAlxCJ+ycLj2cifs6WrOrzLnSR4rYggt+PToKj7F6w++g== X-Received: by 2002:a17:906:8a54:b0:99d:6b3c:3d40 with SMTP id gx20-20020a1709068a5400b0099d6b3c3d40mr8212956ejc.6.1694438067102; Mon, 11 Sep 2023 06:14:27 -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 kt8-20020a170906aac800b00988e953a586sm5313648ejb.61.2023.09.11.06.14.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 06:14:26 -0700 (PDT) From: Bryan O'Donoghue To: rfoss@kernel.org, todor.too@gmail.com, bryan.odonoghue@linaro.org, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, mchehab@kernel.org, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, andrey.konovalov@linaro.org Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 12/17] media: qcom: camss: Functionally decompose CSIPHY clock lookups Date: Mon, 11 Sep 2023 14:14:06 +0100 Message-ID: <20230911131411.196033-13-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230911131411.196033-1-bryan.odonoghue@linaro.org> References: <20230911131411.196033-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" The csiphyX_timer and csiX_phy values need not be hard-coded. We can functionally decompose the string matching inside of a loop. Static string values are brittle, difficult to extend and not required anyway since the camss->res->csiphy_num value informs us of the number of CSIPHYs and hence the set of potential clocks for a given CSIPHY. In simple terms if we have five CSIPHYs we can have no more and no less than five csiphy_timer clocks. Similarly csi_phy core clocks have a 1:1 relationship with the PHY they clock. Signed-off-by: Bryan O'Donoghue --- .../media/platform/qcom/camss/camss-csiphy.c | 37 ++++++++++++------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/med= ia/platform/qcom/camss/camss-csiphy.c index 18f9a4defb2a4..87d6d65aa90cf 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy.c +++ b/drivers/media/platform/qcom/camss/camss-csiphy.c @@ -536,6 +536,15 @@ static int csiphy_init_formats(struct v4l2_subdev *sd, return csiphy_set_format(sd, fh ? fh->state : NULL, &format); } =20 +static bool csiphy_match_clock_name(const char *clock_name, const char *fo= rmat, + int index) +{ + char name[15]; /* csiphyXX_timer\0 */ + + snprintf(name, sizeof(name), format, index); + return !strcmp(clock_name, name); +} + /* * msm_csiphy_subdev_init - Initialize CSIPHY device structure and resourc= es * @csiphy: CSIPHY device @@ -550,7 +559,7 @@ int msm_csiphy_subdev_init(struct camss *camss, { struct device *dev =3D camss->dev; struct platform_device *pdev =3D to_platform_device(dev); - int i, j; + int i, j, k; int ret; =20 csiphy->camss =3D camss; @@ -656,19 +665,19 @@ int msm_csiphy_subdev_init(struct camss *camss, for (j =3D 0; j < clock->nfreqs; j++) clock->freq[j] =3D res->clock_rate[i][j]; =20 - if (!strcmp(clock->name, "csiphy0_timer") || - !strcmp(clock->name, "csiphy1_timer") || - !strcmp(clock->name, "csiphy2_timer") || - !strcmp(clock->name, "csiphy3_timer") || - !strcmp(clock->name, "csiphy4_timer") || - !strcmp(clock->name, "csiphy5_timer")) - csiphy->rate_set[i] =3D true; - - if (camss->res->version =3D=3D CAMSS_660 && - (!strcmp(clock->name, "csi0_phy") || - !strcmp(clock->name, "csi1_phy") || - !strcmp(clock->name, "csi2_phy"))) - csiphy->rate_set[i] =3D true; + for (k =3D 0; k < camss->res->csiphy_num; k++) { + csiphy->rate_set[i] =3D csiphy_match_clock_name(clock->name, + "csiphy%d_timer", k); + if (csiphy->rate_set[i]) + break; + + if (camss->res->version =3D=3D CAMSS_660) { + csiphy->rate_set[i] =3D csiphy_match_clock_name(clock->name, + "csi%d_phy", k); + if (csiphy->rate_set[i]) + break; + } + } } =20 return 0; --=20 2.42.0 From nobody Thu Dec 18 09:41:27 2025 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 53943CA0EDB for ; Mon, 11 Sep 2023 22:22:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1359530AbjIKWRh (ORCPT ); Mon, 11 Sep 2023 18:17:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40454 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237813AbjIKNOe (ORCPT ); Mon, 11 Sep 2023 09:14:34 -0400 Received: from mail-ej1-x636.google.com (mail-ej1-x636.google.com [IPv6:2a00:1450:4864:20::636]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CA83BE9 for ; Mon, 11 Sep 2023 06:14:29 -0700 (PDT) Received: by mail-ej1-x636.google.com with SMTP id a640c23a62f3a-99cce6f7de2so561778366b.3 for ; Mon, 11 Sep 2023 06:14:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694438068; x=1695042868; 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=0C0C50wtnGO2j7zZY3xq1VlSsU/DQL3UJPAoJpLYkHQ=; b=pzGKIms8wgCSiI86P6DJ3Aw2n4yC5ee2FD3FLfGyKUOizGDDWM38w75Vw1yRf95ddn p+L3JQB7k5BdCcBrg7zg/+Vk8m1b/LhPxJd2wr4IGHi8ipHvozfNAdGaW6Qar+jkU4w7 Na6vWEfB3DF7+PeXotJwDCUTn/qLzBDFfJ1+Ou7mYjNDSKoKcu0YNsi770QUGjPyNc6X MiyYH1toYb+du8zOR47HQW8kKqi5vpa8vMlQj99OS5x8lNnBbxC9OWhbOey5CUu7NiuZ f+QxgLjCh5ZJkC4bcoxNymbjtCnaV3zes2BbpEZlCzojA3hSIlszvGZl9ZVuRiJNwCki snDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694438068; x=1695042868; 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=0C0C50wtnGO2j7zZY3xq1VlSsU/DQL3UJPAoJpLYkHQ=; b=JKWPIAAVnMjNKmaM/SuIPfUJAKcGZzabLw+bCn1bTXzPl96GYYAD1rsT83NpqeCQuY 5fKiX+jV9YUPxHjXsrBqNTrZltkQfOHfI8Y5w97QIvmSHvqvYXkfrrV6MkwlcMF9/mB0 f/f41uiG/Y2mEMzIQl8pOgs+i3gSlGRTvQdbs+nTKSmL58NYw+9psrc7YvQckefyF//H AUP2C3/y/pvz3gtEF+Xu0XfgjBbR7WsuU5uxJzJfXM1ReDV/xvcDDcwFvdATxElpfEu+ 3MzXK1RW1eM2/UBejV9wcNzCU97khKbzGOkRwdffjoSLLzNtfgtfpga7ADcmZJbbUZbr LlSQ== X-Gm-Message-State: AOJu0YxYKEQi7R7e5j7/QfZVZbfD72Tt6GqhYFjmq52BRdTTRAmbBt29 R9XfFvoec/S75Jq4fuWyN1GXmA== X-Google-Smtp-Source: AGHT+IFWAlUwXRLDYM6D+BavP9r0AWzrYZPKIIIHIkPACbQ4yyZ81/dH4aVv3WUbjrLDWfkfGX5EFA== X-Received: by 2002:a17:906:3081:b0:9a5:d657:47e8 with SMTP id 1-20020a170906308100b009a5d65747e8mr8787799ejv.52.1694438068278; Mon, 11 Sep 2023 06:14:28 -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 kt8-20020a170906aac800b00988e953a586sm5313648ejb.61.2023.09.11.06.14.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 06:14:27 -0700 (PDT) From: Bryan O'Donoghue To: rfoss@kernel.org, todor.too@gmail.com, bryan.odonoghue@linaro.org, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, mchehab@kernel.org, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, andrey.konovalov@linaro.org Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 13/17] media: qcom: camss: Fix support for setting CSIPHY clock name csiphyX Date: Mon, 11 Sep 2023 14:14:07 +0100 Message-ID: <20230911131411.196033-14-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230911131411.196033-1-bryan.odonoghue@linaro.org> References: <20230911131411.196033-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" Several of our upstream and soon-to-be upstream SoC CAMSS dtsi declare csiphyX as opposed to the older clock name csiX_phy. Right now the CAMSS code will fail to set the csiphyX clock even if we have declared it in our list of clocks. For sdm845 and sm8250 we appear to "get away" with this error, however on sc8280xp we don't. The right approach here is to set the clock when it is declared. If a SoC doesn't require or a SoC driver implementer doesn't think we need, then the clock ought to simply be omitted from the clock list. Include csiphyX in the set of permissible strings which will subsequently lead to the csiphyX clock being set during csiphy_set_clock_rates() phase. sdm845 and sm8250 will work with the code as-is so I've omitted this from a suggested Fixes list. Signed-off-by: Bryan O'Donoghue --- drivers/media/platform/qcom/camss/camss-csiphy.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/med= ia/platform/qcom/camss/camss-csiphy.c index 87d6d65aa90cf..5202bfcdbc35a 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy.c +++ b/drivers/media/platform/qcom/camss/camss-csiphy.c @@ -677,6 +677,10 @@ int msm_csiphy_subdev_init(struct camss *camss, if (csiphy->rate_set[i]) break; } + + csiphy->rate_set[i] =3D csiphy_match_clock_name(clock->name, "csiphy%d"= , k); + if (csiphy->rate_set[i]) + break; } } =20 --=20 2.42.0 From nobody Thu Dec 18 09:41:27 2025 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 09A80CA0ECF for ; Mon, 11 Sep 2023 22:23:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1376669AbjIKWUM (ORCPT ); Mon, 11 Sep 2023 18:20:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40478 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237818AbjIKNOf (ORCPT ); Mon, 11 Sep 2023 09:14:35 -0400 Received: from mail-ej1-x62c.google.com (mail-ej1-x62c.google.com [IPv6:2a00:1450:4864:20::62c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B0569CD7 for ; Mon, 11 Sep 2023 06:14:30 -0700 (PDT) Received: by mail-ej1-x62c.google.com with SMTP id a640c23a62f3a-9a21b6d105cso563367166b.3 for ; Mon, 11 Sep 2023 06:14:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694438069; x=1695042869; 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=3XAtVUAyBOvnRtU7QZlyMg2OvJJmAGTuY+WdBD311GM=; b=cPtdC0pwWsQvtGhN7POjiqr2i20d7TbLDvCi34jnfBusqydetaRfmwbfnxuM8v+JyQ qyAfVtovwUimLSc1S/B8BKD6qjrZbuaI/Hrslf7UWxbY8uf6tKyvgH4YaX+tSzIovII6 Ry3xukEUeHfoktCl1xEcKFOGdC2vG9OSBQTBelrDNWtW3ObaE1mV6TwwrT7ZgQCMZDqy HmnAmMJroFC5G9ACshats8r+cPO+MMvCm6eSLFbnQwgD7Hn4aa2CN1biYO7tFUyPng8+ wWGSzRNwe+QqCZHPmmNG54hurwYgUGk3EWcrJBIngSXMbH9FKX2mWaT+R5VsXBZ4BWFm Oayw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694438069; x=1695042869; 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=3XAtVUAyBOvnRtU7QZlyMg2OvJJmAGTuY+WdBD311GM=; b=e8NSSvUssKGzKzCpSTIj1ygnAgV0Pw0V7DfWi+KI8pMYjvRJA3kd3+PPtn9+Bw+JP8 but9ifNF65IUlb1FkbPwfGjgcjA0/H67+Nr/+AE9VgfbSqwPJNOMtWhReBYCJwPR6Klz riOzhZKUaxl0tuoz6qHqUcixD8cy+MXMvHqCn4o6uWgog1HsAO70drlavHDt4vNCdRBa VCwQtyUcvivtR3n8x/8AihNMxwXpssRRl6dq04n4b0wjactuQMiGgnwdqCXRzK43gp8z jV+S9qGT9oUnEv/TIsA2jgFKxP/BxXQodSYwlgRKSyPT7xn/ax/ibBFjOOjt6JXw5VQU p+zw== X-Gm-Message-State: AOJu0Yy9P4g1Efb3DiiywaRkOx8Q9CyPFJobuTLT0pkZmMMKjYhqKScI H5pn7di8kQdxRc27+uS54u2f+w== X-Google-Smtp-Source: AGHT+IFUcyRm5SPFoxyVmnZ9MYesGgV7U4jcD+0ykckHs/EKmwcAsWQHdxC1SEXItfkQV7GAHZpBMg== X-Received: by 2002:a17:907:75fc:b0:9a5:ca42:f3a9 with SMTP id jz28-20020a17090775fc00b009a5ca42f3a9mr8029922ejc.2.1694438069246; Mon, 11 Sep 2023 06:14:29 -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 kt8-20020a170906aac800b00988e953a586sm5313648ejb.61.2023.09.11.06.14.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 06:14:28 -0700 (PDT) From: Bryan O'Donoghue To: rfoss@kernel.org, todor.too@gmail.com, bryan.odonoghue@linaro.org, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, mchehab@kernel.org, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, andrey.konovalov@linaro.org Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 14/17] media: qcom: camss: Support RDI3 for VFE 17x Date: Mon, 11 Sep 2023 14:14:08 +0100 Message-ID: <20230911131411.196033-15-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230911131411.196033-1-bryan.odonoghue@linaro.org> References: <20230911131411.196033-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" Some VFEs have four RDIs apiece. Right now the ISR code has a hard-coded value which tops-out at RDI2 meaning only three RDIs can be utilised in practice. Extend out the various routines in camss-vfe-17x.c to support the higher RDI count. Signed-off-by: Bryan O'Donoghue Acked-by: Konrad Dybcio Reviewed-by: Laurent Pinchart --- drivers/media/platform/qcom/camss/camss-vfe-170.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-vfe-170.c b/drivers/me= dia/platform/qcom/camss/camss-vfe-170.c index 2ba7160b3bd1e..a5aa799501861 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe-170.c +++ b/drivers/media/platform/qcom/camss/camss-vfe-170.c @@ -209,7 +209,8 @@ static void vfe_global_reset(struct vfe_device *vfe) GLOBAL_RESET_CMD_IDLE_CGC | GLOBAL_RESET_CMD_RDI0 | GLOBAL_RESET_CMD_RDI1 | - GLOBAL_RESET_CMD_RDI2; + GLOBAL_RESET_CMD_RDI2 | + GLOBAL_RESET_CMD_RDI3; =20 writel_relaxed(BIT(31), vfe->base + VFE_IRQ_MASK_0); =20 @@ -343,7 +344,7 @@ static void vfe_violation_read(struct vfe_device *vfe) static irqreturn_t vfe_isr(int irq, void *dev) { struct vfe_device *vfe =3D dev; - u32 status0, status1, vfe_bus_status[3]; + u32 status0, status1, vfe_bus_status[VFE_LINE_NUM_MAX]; int i, wm; =20 status0 =3D readl_relaxed(vfe->base + VFE_IRQ_STATUS_0); @@ -352,7 +353,7 @@ static irqreturn_t vfe_isr(int irq, void *dev) writel_relaxed(status0, vfe->base + VFE_IRQ_CLEAR_0); writel_relaxed(status1, vfe->base + VFE_IRQ_CLEAR_1); =20 - for (i =3D VFE_LINE_RDI0; i <=3D VFE_LINE_RDI2; i++) { + for (i =3D VFE_LINE_RDI0; i < vfe->line_num; i++) { vfe_bus_status[i] =3D readl_relaxed(vfe->base + VFE_BUS_IRQ_STATUS(i)); writel_relaxed(vfe_bus_status[i], vfe->base + VFE_BUS_IRQ_CLEAR(i)); } @@ -366,11 +367,11 @@ static irqreturn_t vfe_isr(int irq, void *dev) if (status0 & STATUS_0_RESET_ACK) vfe->isr_ops.reset_ack(vfe); =20 - for (i =3D VFE_LINE_RDI0; i <=3D VFE_LINE_RDI2; i++) + for (i =3D VFE_LINE_RDI0; i < vfe->line_num; i++) if (status0 & STATUS_0_RDI_REG_UPDATE(i)) vfe->isr_ops.reg_update(vfe, i); =20 - for (i =3D VFE_LINE_RDI0; i <=3D VFE_LINE_RDI2; i++) + for (i =3D VFE_LINE_RDI0; i < vfe->line_num; i++) if (status0 & STATUS_1_RDI_SOF(i)) vfe->isr_ops.sof(vfe, i); =20 --=20 2.42.0 From nobody Thu Dec 18 09:41:27 2025 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 118C8CA0EC3 for ; Mon, 11 Sep 2023 23:04:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346161AbjIKVXE (ORCPT ); Mon, 11 Sep 2023 17:23:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40530 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237823AbjIKNOg (ORCPT ); Mon, 11 Sep 2023 09:14:36 -0400 Received: from mail-ed1-x52f.google.com (mail-ed1-x52f.google.com [IPv6:2a00:1450:4864:20::52f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D2C39E4B for ; Mon, 11 Sep 2023 06:14:31 -0700 (PDT) Received: by mail-ed1-x52f.google.com with SMTP id 4fb4d7f45d1cf-529fb04a234so5875255a12.3 for ; Mon, 11 Sep 2023 06:14:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694438070; x=1695042870; 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=tmmIFS2GsvUhYHjMDD0wvEsdZNEsSt4tmle0ldKlqCs=; b=gyncj+wwTzKmikglWPWnSN1r5bA9Dg6TDQzB7R0J90ZrUR2URW1kXrfMoZ8/qqKTef /Q3kXtzGbelh+lqb2k6CjPRKS31MHWnYfukoJ0NmNVLMPx/oUzpjQKG5ZjcAzgyT1Szh D6Dm/bf7Np2fmBLy+tLPCqQ1UdhtsY+heF+PPrV/0EcCnBuDFkMt7sqkIFeycBi4+p1l e6Sv0fdrP9AWriUgmOVa1hfddIs9nSLGed7cJoxGmNzZEPthQxt0D8qBmrGpVXX7I3Td 78ZQasDFD6TMg8vSq5HFN5QTnsMV+Bf0OiVbtDTytOmG831uTOaWPZ9PapWILgjPVbTc 1xpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694438070; x=1695042870; 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=tmmIFS2GsvUhYHjMDD0wvEsdZNEsSt4tmle0ldKlqCs=; b=nRidSQXI5O5plyAqL9Le8M080tq/pIxMraGEvSB0ILLTbgiTpruTU8lx4tKSgo4V6y uAumBApysVpMEuQd4JaMPfk4M4pUuy8TalIl2VChO2jO3cRHGXinC24/lca2JLBHNZnz DJFXNP7K73MnG2DJWB0v9d8UpMMafqRFx0bD1y1/8PQigchbNfatm4ZjHJW0VVwZa5z1 iOQKV1AT8AY7+Hapm9rsQhGOj+Ml/C7k80q+wgkZrlwz7x+zllWJ4K9teqq5cI1mNHIj X3wqEKl+BeWw3/P3gF5EAwtfH0tL44yMbeoizX25s3h/i3teZr+LJitTix0IhzPRgwH+ z+Kg== X-Gm-Message-State: AOJu0Yz0xrvz11/i0zeiwmiJu5X9YxSJh2ZSVTxlM+I03VcBjEHxERFu I4K2LTmIFag5ZKMyMp4Du7gOZA== X-Google-Smtp-Source: AGHT+IGhuxr4vSNK9pUHdEX30IVpyboInhXL/zX02dW6lafZlOonCKHjvpQJlDfg5snir97qcrUiGw== X-Received: by 2002:a17:906:6411:b0:9a2:295a:9bc5 with SMTP id d17-20020a170906641100b009a2295a9bc5mr7839683ejm.21.1694438070402; Mon, 11 Sep 2023 06:14:30 -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 kt8-20020a170906aac800b00988e953a586sm5313648ejb.61.2023.09.11.06.14.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 06:14:29 -0700 (PDT) From: Bryan O'Donoghue To: rfoss@kernel.org, todor.too@gmail.com, bryan.odonoghue@linaro.org, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, mchehab@kernel.org, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, andrey.konovalov@linaro.org Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 15/17] media: qcom: camss: Move vfe_disable into a common routine where applicable Date: Mon, 11 Sep 2023 14:14:09 +0100 Message-ID: <20230911131411.196033-16-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230911131411.196033-1-bryan.odonoghue@linaro.org> References: <20230911131411.196033-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" We can move vfe_disable() into a common routine in the core VFE file provided we make wm_stop() a VFE specific callback. The callback is required to capture the case where VFE 17x currently isn't VC enabled where as VFE 480 is. Suggested-by: Laurent Pinchart Signed-off-by: Bryan O'Donoghue --- .../media/platform/qcom/camss/camss-vfe-170.c | 40 +------------------ .../media/platform/qcom/camss/camss-vfe-480.c | 40 +------------------ drivers/media/platform/qcom/camss/camss-vfe.c | 39 ++++++++++++++++++ drivers/media/platform/qcom/camss/camss-vfe.h | 9 +++++ 4 files changed, 50 insertions(+), 78 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-vfe-170.c b/drivers/me= dia/platform/qcom/camss/camss-vfe-170.c index a5aa799501861..0b211fed12760 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe-170.c +++ b/drivers/media/platform/qcom/camss/camss-vfe-170.c @@ -494,22 +494,6 @@ static int vfe_enable_output(struct vfe_line *line) return 0; } =20 -static void vfe_disable_output(struct vfe_line *line) -{ - struct vfe_device *vfe =3D to_vfe(line); - struct vfe_output *output =3D &line->output; - unsigned long flags; - unsigned int i; - - spin_lock_irqsave(&vfe->output_lock, flags); - for (i =3D 0; i < output->wm_num; i++) - vfe_wm_stop(vfe, output->wm_idx[i]); - output->gen2.active_num =3D 0; - spin_unlock_irqrestore(&vfe->output_lock, flags); - - vfe_reset(vfe); -} - /* * vfe_enable - Enable streaming on VFE line * @line: VFE line @@ -555,29 +539,6 @@ static int vfe_enable(struct vfe_line *line) return ret; } =20 -/* - * vfe_disable - Disable streaming on VFE line - * @line: VFE line - * - * Return 0 on success or a negative error code otherwise - */ -static int vfe_disable(struct vfe_line *line) -{ - struct vfe_device *vfe =3D to_vfe(line); - - vfe_disable_output(line); - - vfe_put_output(line); - - mutex_lock(&vfe->stream_lock); - - vfe->stream_count--; - - mutex_unlock(&vfe->stream_lock); - - return 0; -} - /* * vfe_isr_sof - Process start of frame interrupt * @vfe: VFE Device @@ -770,4 +731,5 @@ const struct vfe_hw_ops vfe_ops_170 =3D { .vfe_enable =3D vfe_enable, .vfe_halt =3D vfe_halt, .violation_read =3D vfe_violation_read, + .vfe_wm_stop =3D vfe_wm_stop, }; diff --git a/drivers/media/platform/qcom/camss/camss-vfe-480.c b/drivers/me= dia/platform/qcom/camss/camss-vfe-480.c index 43a2964121f22..f2368b77fc6d6 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe-480.c +++ b/drivers/media/platform/qcom/camss/camss-vfe-480.c @@ -327,22 +327,6 @@ static int vfe_enable_output(struct vfe_line *line) return 0; } =20 -static void vfe_disable_output(struct vfe_line *line) -{ - struct vfe_device *vfe =3D to_vfe(line); - struct vfe_output *output =3D &line->output; - unsigned long flags; - unsigned int i; - - spin_lock_irqsave(&vfe->output_lock, flags); - for (i =3D 0; i < output->wm_num; i++) - vfe_wm_stop(vfe, output->wm_idx[i]); - output->gen2.active_num =3D 0; - spin_unlock_irqrestore(&vfe->output_lock, flags); - - vfe_reset(vfe); -} - /* * vfe_enable - Enable streaming on VFE line * @line: VFE line @@ -390,29 +374,6 @@ static int vfe_enable(struct vfe_line *line) return ret; } =20 -/* - * vfe_disable - Disable streaming on VFE line - * @line: VFE line - * - * Return 0 on success or a negative error code otherwise - */ -static int vfe_disable(struct vfe_line *line) -{ - struct vfe_device *vfe =3D to_vfe(line); - - vfe_disable_output(line); - - vfe_put_output(line); - - mutex_lock(&vfe->stream_lock); - - vfe->stream_count--; - - mutex_unlock(&vfe->stream_lock); - - return 0; -} - /* * vfe_isr_reg_update - Process reg update interrupt * @vfe: VFE Device @@ -581,4 +542,5 @@ const struct vfe_hw_ops vfe_ops_480 =3D { .vfe_disable =3D vfe_disable, .vfe_enable =3D vfe_enable, .vfe_halt =3D vfe_halt, + .vfe_wm_stop =3D vfe_wm_stop, }; diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/= platform/qcom/camss/camss-vfe.c index f3cf387e4907e..3d542ac93b1c2 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe.c +++ b/drivers/media/platform/qcom/camss/camss-vfe.c @@ -410,6 +410,45 @@ int vfe_put_output(struct vfe_line *line) return 0; } =20 +static int vfe_disable_output(struct vfe_line *line) +{ + struct vfe_device *vfe =3D to_vfe(line); + struct vfe_output *output =3D &line->output; + unsigned long flags; + unsigned int i; + + spin_lock_irqsave(&vfe->output_lock, flags); + for (i =3D 0; i < output->wm_num; i++) + vfe->ops->vfe_wm_stop(vfe, output->wm_idx[i]); + output->gen2.active_num =3D 0; + spin_unlock_irqrestore(&vfe->output_lock, flags); + + return vfe_reset(vfe); +} + +/* + * vfe_disable - Disable streaming on VFE line + * @line: VFE line + * + * Return 0 on success or a negative error code otherwise + */ +int vfe_disable(struct vfe_line *line) +{ + struct vfe_device *vfe =3D to_vfe(line); + + vfe_disable_output(line); + + vfe_put_output(line); + + mutex_lock(&vfe->stream_lock); + + vfe->stream_count--; + + mutex_unlock(&vfe->stream_lock); + + return 0; +} + /** * vfe_isr_comp_done() - Process composite image done interrupt * @vfe: VFE Device diff --git a/drivers/media/platform/qcom/camss/camss-vfe.h b/drivers/media/= platform/qcom/camss/camss-vfe.h index 4783afa73a365..09baded0dcdd6 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe.h +++ b/drivers/media/platform/qcom/camss/camss-vfe.h @@ -114,6 +114,7 @@ struct vfe_hw_ops { int (*vfe_enable)(struct vfe_line *line); int (*vfe_halt)(struct vfe_device *vfe); void (*violation_read)(struct vfe_device *vfe); + void (*vfe_wm_stop)(struct vfe_device *vfe, u8 wm); }; =20 struct vfe_isr_ops { @@ -192,6 +193,14 @@ int vfe_reserve_wm(struct vfe_device *vfe, enum vfe_li= ne_id line_id); */ int vfe_reset(struct vfe_device *vfe); =20 +/* + * vfe_disable - Disable streaming on VFE line + * @line: VFE line + * + * Return 0 on success or a negative error code otherwise + */ +int vfe_disable(struct vfe_line *line); + extern const struct vfe_hw_ops vfe_ops_4_1; extern const struct vfe_hw_ops vfe_ops_4_7; extern const struct vfe_hw_ops vfe_ops_4_8; --=20 2.42.0 From nobody Thu Dec 18 09:41:27 2025 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 6FBDBCA0ECF for ; Mon, 11 Sep 2023 22:43:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240039AbjIKWet (ORCPT ); Mon, 11 Sep 2023 18:34:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40586 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237831AbjIKNOi (ORCPT ); Mon, 11 Sep 2023 09:14:38 -0400 Received: from mail-ed1-x534.google.com (mail-ed1-x534.google.com [IPv6:2a00:1450:4864:20::534]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 86546E9 for ; Mon, 11 Sep 2023 06:14:33 -0700 (PDT) Received: by mail-ed1-x534.google.com with SMTP id 4fb4d7f45d1cf-52a3ff5f0abso5687071a12.1 for ; Mon, 11 Sep 2023 06:14:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694438072; x=1695042872; 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=GfLToWi3s74VODYQYeWzaHVcZfMPmR2S8GE/8a2Ka6s=; b=E7nUKy0AiHgN6Fc8wC6A1vHTYuWffz2BCoTvao40CCgCqo9URGTDd3xz9YTeI/y0L4 3c/fNzpeieyODxNiTSQWjhGaCGDfjHJyKWLUzbox76OvsqP5os9xWEeqjQDwxMhEJfsn DHdB3rs+mG10VgAVQyvd1jLngmMNgVuFXCdjPSb5jWUbTfzEb1tOBKPykfwbjSgIHCbl FTROLeT4bpEyrQ42E3NJoeTv3afbkK/scRlcuf75NBAC9nDS4T0ROPDHDkZA6iRfcqVW P1I0ZDZg6znTXfhKi0Rz7vqtPUnouZoBiAnvoHPWTkVPT85LULm8sTvKOeAYMBLmtB6S kWTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694438072; x=1695042872; 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=GfLToWi3s74VODYQYeWzaHVcZfMPmR2S8GE/8a2Ka6s=; b=U8+1Fi2ytA4UBWJPdMItFkDqo+Q5clLdytjRSS0RiB4nQLauppOrF9A1IKcybW6gT6 s5olXX75V4WQInmTRNlEfjwUH8OKLXYHoKOsqmTirLHvnXOoSf/60Obe1XOq7FN+JySP q0AVmdZxVuZntbbY64SPONQ7E5771fORLnwkjGbTNrhWmPDEwny6ltRhusUfMRm9Dd5j 8TtXcC1RFKuRVhdWNrYgNpWxptND49RSe6IDBqZt7daGxj0rxekqzHXDyeveCAsEu5ZC 9eI/c98Kz1PrdoGCoyavqpuQ+kBzEKrQ6SDk8oOASfUPUsb0F2aehR4jnmL7YJMe3imG hMAA== X-Gm-Message-State: AOJu0Yzr/2rqDZ0Y8XaJDO0fcrcZthyEODfz40cWzWeXeZonJCPZaGn+ avJe1D9rGcPoHPuhsHjmwPgusA== X-Google-Smtp-Source: AGHT+IEEXheHwzN33v3HwqxOhbU/PlFfynn+5Wt6jZP5dXrzEYUXQud1rZBRHKBTagAFH+9tmkAJEg== X-Received: by 2002:a17:907:1dcb:b0:99d:dd43:d427 with SMTP id og11-20020a1709071dcb00b0099ddd43d427mr7988343ejc.10.1694438071424; Mon, 11 Sep 2023 06:14:31 -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 kt8-20020a170906aac800b00988e953a586sm5313648ejb.61.2023.09.11.06.14.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 06:14:31 -0700 (PDT) From: Bryan O'Donoghue To: rfoss@kernel.org, todor.too@gmail.com, bryan.odonoghue@linaro.org, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, mchehab@kernel.org, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, andrey.konovalov@linaro.org Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 16/17] media: qcom: camss: Propagate vfe_reset error up the callstack Date: Mon, 11 Sep 2023 14:14:10 +0100 Message-ID: <20230911131411.196033-17-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230911131411.196033-1-bryan.odonoghue@linaro.org> References: <20230911131411.196033-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" A previous patch I had removed the returns from vfe_disable() since we didn't trap any meaningful errors. Konrad pointed out vfe_reset() could return an error, which is true. Trap the vfe_reset() error code and throw it up the callstack. Suggested-by: Konrad Dybcio Signed-off-by: Bryan O'Donoghue --- drivers/media/platform/qcom/camss/camss-vfe.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/= platform/qcom/camss/camss-vfe.c index 3d542ac93b1c2..8d23ca99eed35 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe.c +++ b/drivers/media/platform/qcom/camss/camss-vfe.c @@ -435,8 +435,11 @@ static int vfe_disable_output(struct vfe_line *line) int vfe_disable(struct vfe_line *line) { struct vfe_device *vfe =3D to_vfe(line); + int ret; =20 - vfe_disable_output(line); + ret =3D vfe_disable_output(line); + if (ret) + goto error; =20 vfe_put_output(line); =20 @@ -446,7 +449,8 @@ int vfe_disable(struct vfe_line *line) =20 mutex_unlock(&vfe->stream_lock); =20 - return 0; +error: + return ret; } =20 /** --=20 2.42.0 From nobody Thu Dec 18 09:41:27 2025 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 0D4C5CA0ED4 for ; Mon, 11 Sep 2023 22:16:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1358862AbjIKWNt (ORCPT ); Mon, 11 Sep 2023 18:13:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40620 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237838AbjIKNOj (ORCPT ); Mon, 11 Sep 2023 09:14:39 -0400 Received: from mail-ed1-x532.google.com (mail-ed1-x532.google.com [IPv6:2a00:1450:4864:20::532]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 81160E40 for ; Mon, 11 Sep 2023 06:14:34 -0700 (PDT) Received: by mail-ed1-x532.google.com with SMTP id 4fb4d7f45d1cf-529fb2c6583so5711384a12.1 for ; Mon, 11 Sep 2023 06:14:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694438073; x=1695042873; 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=jRNeftuB+INOMHeCbSOiUEWxB5DnzuRjYAHI6QDDXkA=; b=Vigeez2weEsges0RIcdXWa/U3nqvHSmFBU3YWORDkgLIXIrVtgQEDbDBi5p8hdEGZ/ aG9mtTIJjVQnbUtD6frCGm9NzTxya9/DvEI+PPu1WhySMzhZ0BaAJpwRgcbmogXuA5tg S8Wpe2KCRPTBgDkXaw+J+J3FvvUM1Hdu3pVXosrlYWFUy8PSZiNXQFTJVEpayQFxjSyr kinkI/nGFoQM+Qfw5360zji+JpPziGYF3OcfzwbTJ3obIXJbBWk+41i+We4yyaun+LOu w4V4crhu5UP8a/9+DH+PWu1cKc0cZ/NMOGNaROCkRkPmAbaYRmbQSzwo/IUrWZY6I+QF uK6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694438073; x=1695042873; 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=jRNeftuB+INOMHeCbSOiUEWxB5DnzuRjYAHI6QDDXkA=; b=oL3FkwhPNVq+JFck9LnHoL3Orf7gioxtlISWHY9chbBQ/gXtqvrgJaqCUYEc93u0aE 6CIsCvPyP1U9Idat+yfPVlWUwb6w5ieT2U7+UxPCJwg6BdPko9b+ust1Bxgz/NWMA16p KXWuMRZMsA/AGXHZROYS5zyUua7g39/xjwKE37TxxkK62f36M3LiuzM0DLTLYVZhG8de qkcGbsBAFYIKEp4h6pDuRWVIf3Vy5w8W3oRnrUn9xDjEZ2dd1Prk30lZHZyYo/phepk8 RttbAgc2OB5qXnD7DtkUxyyHks5M3zPaKlyX0cDIW189c7cHaNFYeY/1fO4T0EaCs+zV tlkw== X-Gm-Message-State: AOJu0YwlOHzn6wfR5UP+HCJoh8u2MhEYzHIyp7ntF/3+dAm9sK9NsN5s BSQn7lbFUMeuDF6tchJPmsX7lQ== X-Google-Smtp-Source: AGHT+IHlCK86n0VeHZ+HtSrI9mh5xjoWNZuc9ZOAbu0C2O0EAitiz9ZVW48URQEVox9KobL72BbK+w== X-Received: by 2002:a17:906:5347:b0:9a9:e41c:bcb5 with SMTP id j7-20020a170906534700b009a9e41cbcb5mr9086672ejo.76.1694438072876; Mon, 11 Sep 2023 06:14:32 -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 kt8-20020a170906aac800b00988e953a586sm5313648ejb.61.2023.09.11.06.14.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Sep 2023 06:14:32 -0700 (PDT) From: Bryan O'Donoghue To: rfoss@kernel.org, todor.too@gmail.com, bryan.odonoghue@linaro.org, agross@kernel.org, andersson@kernel.org, konrad.dybcio@linaro.org, mchehab@kernel.org, hverkuil-cisco@xs4all.nl, laurent.pinchart@ideasonboard.com, sakari.ailus@linux.intel.com, andrey.konovalov@linaro.org Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 17/17] media: qcom: camss: Comment CSID dt_id field Date: Mon, 11 Sep 2023 14:14:11 +0100 Message-ID: <20230911131411.196033-18-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230911131411.196033-1-bryan.odonoghue@linaro.org> References: <20230911131411.196033-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" Digging into the documentation we find that the DT_ID bitfield is used to map the six bit DT to a two bit ID code. This value is concatenated to the VC bitfield to create a CID value. DT_ID is the two least significant bits of CID and VC the most significant bits. Originally we set dt_id =3D vc * 4 in and then subsequently set dt_id =3D v= c. commit 3c4ed72a16bc ("media: camss: sm8250: Virtual channels for CSID") silently fixed the multiplication by four which would give a better value for the generated CID without mentioning what was being done or why. Next up I haplessly changed the value back to "dt_id =3D vc * 4" since there didn't appear to be any logic behind it. Hans asked what the change was for and I honestly couldn't remember the provenance of it, so I dug in. Link: https://lore.kernel.org/linux-arm-msm/edd4bf9b-0e1b-883c-1a4d-50f4102= c3924@xs4all.nl/ Add a comment so the next hapless programmer doesn't make this same mistake. Signed-off-by: Bryan O'Donoghue --- drivers/media/platform/qcom/camss/camss-csid-gen2.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/media/platform/qcom/camss/camss-csid-gen2.c b/drivers/= media/platform/qcom/camss/camss-csid-gen2.c index 6ba2b10326444..cee50fc87e9de 100644 --- a/drivers/media/platform/qcom/camss/camss-csid-gen2.c +++ b/drivers/media/platform/qcom/camss/camss-csid-gen2.c @@ -352,6 +352,11 @@ static void __csid_configure_stream(struct csid_device= *csid, u8 enable, u8 vc) phy_sel =3D csid->phy.csiphy_id; =20 if (enable) { + /* + * A value caled 'CID' gets generated internal to CAMSS logic + * which is a concatenation of [vc:6 | dt_id:2] hence we reuse + * the least significant two bits of the VC to 'stuff' the CID value. + */ u8 dt_id =3D vc; =20 if (tg->enabled) { --=20 2.42.0