From nobody Fri Dec 19 04:51:21 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 78825EC8744 for ; Thu, 7 Sep 2023 16:46:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235286AbjIGQq5 (ORCPT ); Thu, 7 Sep 2023 12:46:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37882 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243153AbjIGQq3 (ORCPT ); Thu, 7 Sep 2023 12:46:29 -0400 Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 26F82268A for ; Thu, 7 Sep 2023 09:45:57 -0700 (PDT) Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-40078c4855fso12947855e9.3 for ; Thu, 07 Sep 2023 09:45:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694105054; x=1694709854; 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=lpzSr3sRnuQ75xbjBCrsoAJIRua3eHR9WqspfokMtZM=; b=kyKTzmu+86CjSv0VI/czKzUK9Ialb9Xc5yWvPW95kqmfcWCIvi7ZeicPWiUPn+VhZf hM/qIcEsv1zP9X+fBDHkgZ+iBfNjncog3qaLBxYA3JBkdp9k3lNTl1zw9LRwLxJPdmMm CHsmtpxSlu1TOOguOr6yqZL1lD+Qvj0X+tGkBcAbD5hjDJ7YZXKZEOz+kQtJQlJ4v9N6 z+fSZG+S48K9nGcBEjTxKMrzMehGUbjn511v0ANVos5pmdYFmqztzTazFKX82n2my+Ff dS8YTK3iH3msQc4anLGD0kBxySH4iIxjskSW6uLyLXU3XmSRogo+qxsmsoaDcGGUBwQN JPbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694105054; x=1694709854; 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=lpzSr3sRnuQ75xbjBCrsoAJIRua3eHR9WqspfokMtZM=; b=hPvc1fBgqVqZT9AG/p9x/Pxa9PDcsqdrxNAhfK2UloBZ7f6AAnZKj77p9Q5CZkE5wI VSKijDnZIWCQAMhetvlJxuAZ539qD9WccF4UoQJ2lFO8DfLZc6/2e/wTaWGUU5WFyZ9l 0Nt22T002D9qt62X97V2jOf6P1YSn0lft2M/J0QD31qs5koVQtWoOG1b3CgAYY3+0pcW 3198zZEu/PtpHoOq7Ti5qsXOWqFFoO1+XAJrA7UmuwIih22FkUi+qIDOjGuq2KMmj3e+ mG40QNK7xaRgGuIttdkmU8AarFsRk/FDH5Mq55Fg75BAfCcK7s9fLp0xP4MSm258hcBj ogwg== X-Gm-Message-State: AOJu0YwcchPmVyflCENT6zE3IvN5RIL/iAZ2JC28IbLHEJfA2eUvfA6f 60otkNjAVNJNb9i1tz0kb9GAcQ== X-Google-Smtp-Source: AGHT+IHVKEtYz56QNLCbYnGjVCBekMfSmkfMS+T15llKG2MSY7qHaG1utC4L9TwUXSJtLySBa3mE6A== X-Received: by 2002:a05:600c:218f:b0:401:b2c7:34a8 with SMTP id e15-20020a05600c218f00b00401b2c734a8mr211013wme.7.1694105054614; Thu, 07 Sep 2023 09:44: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 d15-20020adffd8f000000b00317ab75748bsm23822145wrr.49.2023.09.07.09.44.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Sep 2023 09:44: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 v4 01/17] media: qcom: camss: Amalgamate struct resource with struct resource_ispif Date: Thu, 7 Sep 2023 17:43:54 +0100 Message-ID: <20230907164410.36651-2-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230907164410.36651-1-bryan.odonoghue@linaro.org> References: <20230907164410.36651-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.41.0 From nobody Fri Dec 19 04:51:21 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 EADB6EC8743 for ; Thu, 7 Sep 2023 16:53:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244443AbjIGQxN (ORCPT ); Thu, 7 Sep 2023 12:53:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46418 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245230AbjIGQxI (ORCPT ); Thu, 7 Sep 2023 12:53:08 -0400 Received: from mail-lf1-x130.google.com (mail-lf1-x130.google.com [IPv6:2a00:1450:4864:20::130]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 660711FD2 for ; Thu, 7 Sep 2023 09:52:40 -0700 (PDT) Received: by mail-lf1-x130.google.com with SMTP id 2adb3069b0e04-50078eba7afso2040095e87.0 for ; Thu, 07 Sep 2023 09:52:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694105503; x=1694710303; 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=fV8KpdoQDRQ8tjtNRjv68+ye669LLw2wjvu1wdeDVe4=; b=XIYvG04PynqQhSt+labddIArzImXIi2aHp4zIgrbbJRdTZ8XZbKUUA6o7xVPrl/GVw Fy+Q472rRaZIjGK6X6vL/4lOLh4izrAHw5SHgeXDE2+OB8tx1WPGszH24qk0t05UaFDV tgS7xgY6h4zMHevZDu8SRFYERYvP3/Z6RfL2urd9yvZfe71p5RG9e0VDq+oqTUIBT6+f H45d0aQoJAlmqv7Z0J6wumyRjbGPLPXRRnRActPXWBE5V1BkixPkdwym50vLZi0oZ8wG VJc+u3o732YWaKplxhUUDjXqyTsklhBBOChImAugFAgNmpMnvBPRvmMQAnjZ8ffIwqXE Rh1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694105503; x=1694710303; 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=fV8KpdoQDRQ8tjtNRjv68+ye669LLw2wjvu1wdeDVe4=; b=JAi2EaG83SjNGOjpmBZrlsg49p1bjMJbgbBq5CNyxm2XFfqis5JzPbIQQWx9SmbgSN Sk5ipooFwm8kCyVkGJfiOZCHNMZo8CIaKeJy302r15Oq0iX0AezBPAqBIH9fPPnWXKsm PQy26ijzvLTfMRrAO1TaqnoytrGl574PZpNiP0aBaOQW5myY4QyhxETRyuIuuO9Qyu7l PfV9PYU0iQT5Rw7sZi38VQG2+EHHGaYYtV+0XBOEZiXGnk+0TWc3f9i+vqzPQRNDuKI5 cWge6a+/R2ESi2+Z2zNt+opNWcbduLlnWBbIG0t5H32Q/oXGJY2fBu858Vyn5/rpWi/x rgfA== X-Gm-Message-State: AOJu0Yzexnnvt2JeKWp+TJP1jE5S8cb3AO6B7FWtDm8AC7EkXKFmzKEg fC13jqYJyhJ+5/8sOOh2S4duXrUnWRiXhIbUKls= X-Google-Smtp-Source: AGHT+IE0XVCmwr0SmJJDDwCcla6gpiZj2pDgHCPdPQpxz2U8YdFgYjywz92eZNDZGtB8BErh4/8RYQ== X-Received: by 2002:a7b:cbcf:0:b0:3fb:fa9f:5292 with SMTP id n15-20020a7bcbcf000000b003fbfa9f5292mr171840wmi.25.1694105055741; Thu, 07 Sep 2023 09:44:15 -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 d15-20020adffd8f000000b00317ab75748bsm23822145wrr.49.2023.09.07.09.44.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Sep 2023 09:44: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 v4 02/17] media: qcom: camss: Rename camss struct resources to camss_subdev_resources Date: Thu, 7 Sep 2023 17:43:55 +0100 Message-ID: <20230907164410.36651-3-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230907164410.36651-1-bryan.odonoghue@linaro.org> References: <20230907164410.36651-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 Acked-by: Konrad Dybcio --- .../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.41.0 From nobody Fri Dec 19 04:51:21 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 E0D43EC8743 for ; Thu, 7 Sep 2023 16:50:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243957AbjIGQux (ORCPT ); Thu, 7 Sep 2023 12:50:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43182 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243805AbjIGQuv (ORCPT ); Thu, 7 Sep 2023 12:50:51 -0400 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 494381FE9 for ; Thu, 7 Sep 2023 09:50:24 -0700 (PDT) Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-402d0eda361so13947175e9.0 for ; Thu, 07 Sep 2023 09:50:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694105057; x=1694709857; 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=sYC+BO4g5oTHRDZDWzjxJL3LHVv+wyIe2Onv6IGcb8w=; b=fVV6Jxj1VJX3sg2tc2RoJxuCnUpkSPcfeBIQ0rkK/IDmZnSohn5k7Z5X/Ajcbhqggz ZKVJ1sYe+vkY1MPgcQsKymLTnpkg/BYrgB50Zq0BJ892KRKk/WCUlexwLmOAcbSm08nS 2+vSw2jDGPmTRp+nx7ALFXJfys7406P5l4NDxHdwDf54sdy4rwhfpZsaw/lkUvdxjWQF MUlD1iWEjsbqEpUm5N8v1fjOrWxnRwWeDts0PODLvI1nlNhUJMs331s1QR3ABLAHVDZW gvh7URwYOpeFrf9eawHxWef05QJuHY+dGS+Mw1TS+yqwRtfRbYDAQGzePGEqzq7KVVxC efpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694105057; x=1694709857; 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=sYC+BO4g5oTHRDZDWzjxJL3LHVv+wyIe2Onv6IGcb8w=; b=NhF8mKUlVVh7YjpehYtWbgMIEmc625NZN+Vrcb0M3hljQJY4WYWTccLVNHzS2MxF7Q i092QRHd1rYSp2s3cQKyGrDfo8KH0rX+XjuROhqKY3DNnC9ybo82IwqykE92cQEZHWwR iDrSYtRU8nX/s3U0J+taiC9FGmYYrm6lvPp5i892MKoS9bcfwwSrgh59ubuTxPJgVpVX lglS2IVJItZaiea5+QrOhseMYs57AO+jQIqQyml6D94vFJJ/aea63AJOCCVOclCB9HVS QdUxgd0/NNSH099PZcedoA8sPhDbs6unIYzV/2Nk/36rkrZ1Fwtz1UL8rXskhud/4WEp 9a7A== X-Gm-Message-State: AOJu0YwM98WfxUBhjCPJCarY83lnZ7v2juSTKX4sx63tF8CYSqpMSDlJ 1LslcGXiesaPkK8b8q71+atXnQ== X-Google-Smtp-Source: AGHT+IH58JOMVJkJQTXziWMLSctU7Mh0KznBuqW0N3Bdt4Kffvekz45e17vGsrqKjrzQSNllW+7xCA== X-Received: by 2002:a7b:c7cd:0:b0:3fe:2b8c:9f0b with SMTP id z13-20020a7bc7cd000000b003fe2b8c9f0bmr187266wmk.23.1694105057223; Thu, 07 Sep 2023 09:44: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 d15-20020adffd8f000000b00317ab75748bsm23822145wrr.49.2023.09.07.09.44.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Sep 2023 09:44: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 v4 03/17] media: qcom: camss: Start to move to module compat matched resources Date: Thu, 7 Sep 2023 17:43:56 +0100 Message-ID: <20230907164410.36651-4-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230907164410.36651-1-bryan.odonoghue@linaro.org> References: <20230907164410.36651-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.41.0 From nobody Fri Dec 19 04:51:21 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 5B333EC8748 for ; Thu, 7 Sep 2023 16:54:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244562AbjIGQyB (ORCPT ); Thu, 7 Sep 2023 12:54:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35868 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244542AbjIGQx7 (ORCPT ); Thu, 7 Sep 2023 12:53:59 -0400 Received: from mail-lf1-x134.google.com (mail-lf1-x134.google.com [IPv6:2a00:1450:4864:20::134]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6B85D1739 for ; Thu, 7 Sep 2023 09:53:31 -0700 (PDT) Received: by mail-lf1-x134.google.com with SMTP id 2adb3069b0e04-50098cc8967so1893009e87.1 for ; Thu, 07 Sep 2023 09:53:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694105553; x=1694710353; 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=g/nXqq80I4IzTYU/xw/l32pkZE5e0Wqos3W+T1+jfP8=; b=fntjTtuLJ2/x4rKqwWEQmwSAduS0mgL2Oqod6WukAYdp9q/xGolPtbyxTxQUQLTr44 3jE5mwCgj5uRn1yUrxemh7MVJ/w4Hb+jqPSRTw7Q06Pg47aiGU2xExYIKl7Fy64YESnb DHiEBmDfppKlpQkiyKWhFwexH7y837BP7MvLfyP+yF01mBr6JCrpUQvjTtaMvoekSy6L QZ7h7TwmuTZpueaahPyIWO4UU6Z7N1zZCcMkbxlkEOvSRXvfoRcpgU/MGFi2r7LpK7CF kw0n3uJ+CyiWAZ9fJiewZO7NgGsO9pRLYSg3RvlFDwnoe2/IOg+hlz5IunCrhQq+C24U Ls9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694105553; x=1694710353; 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=g/nXqq80I4IzTYU/xw/l32pkZE5e0Wqos3W+T1+jfP8=; b=QKukWrJ3CTdo5RBBGoNnMcnu91bCbIlMyLTymHJOOkosbNsU5+sfI2mqOGzPD7RByI 9lGtoaN1rs1ADI9NHFkkSzX/zXvguIxAiK8/CA6OxTNA0UbGCLM3SiNRSYw3+Gk45/3E ehwsmOiOgX1CwYjxT3IB4ka8JmYXGVCdpsJM4Hs9GpgKhNfmj/DqG79ptj2WDdLJlyEY J7zzjMI4buzrWIx/8oqHU1uiJ5Sq/DqTTJp+dGlOtTShUiBjrKcMePBnRphd0YBMYzWU mXJRlrXjoOfnnglPTDmKzL/lB+yxGRundoz4dnwHeXXtC/L63ipm8v+fCNgEMXr2YLL+ ipXw== X-Gm-Message-State: AOJu0Ywq+sRXZJG5KOM90Y/+agtP9n+HP2prAjgRTMR6bmyzy/wrz4Y1 sAlP6bnalz9FlIKcDISL6VUaKymIpQHNngdCZKs= X-Google-Smtp-Source: AGHT+IGqptEswUlG0hUEuEen1gglgR+GUxNpzhlwHVg0WMAC2RIUsxeJ8cynTSEoY0qRp5rsXklLTA== X-Received: by 2002:a7b:ce95:0:b0:401:b0f2:88b4 with SMTP id q21-20020a7bce95000000b00401b0f288b4mr164275wmj.26.1694105058573; Thu, 07 Sep 2023 09:44: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 d15-20020adffd8f000000b00317ab75748bsm23822145wrr.49.2023.09.07.09.44.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Sep 2023 09:44: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 v4 04/17] media: qcom: camss: Pass icc bandwidth table as a platform parameter Date: Thu, 7 Sep 2023 17:43:57 +0100 Message-ID: <20230907164410.36651-5-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230907164410.36651-1-bryan.odonoghue@linaro.org> References: <20230907164410.36651-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.41.0 From nobody Fri Dec 19 04:51:21 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 45278EC873E for ; Thu, 7 Sep 2023 16:46:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243774AbjIGQqw (ORCPT ); Thu, 7 Sep 2023 12:46:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38072 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243031AbjIGQq0 (ORCPT ); Thu, 7 Sep 2023 12:46:26 -0400 Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1C7511BF8 for ; Thu, 7 Sep 2023 09:45:48 -0700 (PDT) Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-3fef56f7248so12594765e9.3 for ; Thu, 07 Sep 2023 09:45:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694105060; x=1694709860; 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=BODtppMpvqhoTYUjFaLbvzw+8MEvuduAIn6gn7S9ovM=; b=Dwa6W2cQaf5ZjbD7IGqVZFgZfrkltVFyiBfaAFB2jhr8cpekmYKRuHP6rqyWMNpFdE kG8ycSmkA8B/lhGKwMmVjAsz1zw/bcT/A+HsVbNiKkQ0ln1+yAPYh7vOFiK6e2DSl10T aaOMVA3v/DCGyWOjpJomp2ymWttrkPg855iNwcnJqaBTfV4wwm63uxJmSnS3gnvunn2g r5/JdE0CkVi0qUMcNiw1iSG33ma0TeYJ83HmbMkcMFwrBQ0ecagAWgR8l4ez4xm2ob3e zr2sf1RDo5+aHB+VoI0FgXnQNt6qrzNEzJQS/G6jlWtaZbHYDiGyKbvfnm/HPABJ/P/5 hMWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694105060; x=1694709860; 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=BODtppMpvqhoTYUjFaLbvzw+8MEvuduAIn6gn7S9ovM=; b=N/qh9fop4V4c7jfiuPXIqZAZ5z36psNwE7wErGlcHGL45JQF8rjDJxFspTDuQJrPmy 4BVz0oz0aYXrXLKw4rFUFo9KfMexWGxy17VQ5re3cQNvr3m/2l9MVmnltTY1mVk/OZ8P Ans2qfGECPjoop+ovm3lrITmbGhNgjis1pinEwtMXfk+5L2qN1EiyoDUv4EpZOD4FCTO I0CzneLLJkjOb7E2KJeSI6NxGEWkeQGj92McqYeXtG8U9igZ6nDMHqFHfS8DVjrv6i1p xhhl1AxBto2FFC9sLBYroD/vN6pMuuNrQ71c8/9mD4sq907njf/MIXY7Vlcee3FrInqY Djow== X-Gm-Message-State: AOJu0YwYKBarfUVTxvitRB2QdEvWcL57BcMFqqi84RlpkOyaoR0eOfcd thNHg4JnLtLXwR5LEtN0btPNeA== X-Google-Smtp-Source: AGHT+IEY0WHmG0AYkAE6u06Bbsfb+M9oDf5GmKuNuORCrvzYrBmFHtH6Hdw/qSkEuGDwe6HCzc1AqQ== X-Received: by 2002:adf:eed1:0:b0:314:1fdc:796d with SMTP id a17-20020adfeed1000000b003141fdc796dmr4545351wrp.70.1694105060019; Thu, 07 Sep 2023 09:44: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 d15-20020adffd8f000000b00317ab75748bsm23822145wrr.49.2023.09.07.09.44.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Sep 2023 09:44: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 v4 05/17] media: qcom: camss: Pass remainder of variables as resources Date: Thu, 7 Sep 2023 17:43:58 +0100 Message-ID: <20230907164410.36651-6-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230907164410.36651-1-bryan.odonoghue@linaro.org> References: <20230907164410.36651-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.41.0 From nobody Fri Dec 19 04:51:21 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 0A9D8EC8742 for ; Thu, 7 Sep 2023 17:31:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235194AbjIGRbC (ORCPT ); Thu, 7 Sep 2023 13:31:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43716 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232033AbjIGRbB (ORCPT ); Thu, 7 Sep 2023 13:31:01 -0400 Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 37C921FCF for ; Thu, 7 Sep 2023 10:30:30 -0700 (PDT) Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-40061928e5aso13627285e9.3 for ; Thu, 07 Sep 2023 10:30:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694107775; x=1694712575; 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=OEHv0MdkX93VAwCi1pNsQdwYRCrC3ZMgoibqw+TRjPw=; b=K3GnsMESQgSr/E7YQQFKpEuFODvgBY9hcJ7DFRqGbL+h4TidjFeswMEe+790zZqd3H qdPn9Hhw557Yd03QHioiAvhQWqYUJC/RljZzU1F5ffi/R1Btryp0QoP2PT1wIjG83iqL A++xFXYiPcLu5XtOM2Hsp9ddd5jPJtJeyQpTEft5P2QANPKAyTfRuGCOBjHzQByrh+Z0 wLwzvKw6aUm/jpku/myxoKrHJ1JNCi3nkgj6oEjPuLmxUXcQb+cRhMSm/t9y3biMR+mY 0UDFQAtWzrLerUJQvD2ARxwUn78IUolbDIvr2AccKC8P7qbUvW8jZSI4v8pngqkidYE1 M9Pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694107775; x=1694712575; 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=OEHv0MdkX93VAwCi1pNsQdwYRCrC3ZMgoibqw+TRjPw=; b=kDEWoDQ4AAKxLzMoby7qHo73RkibjpKqMmjzcQ2zt2F2hb9ukdCuSucy3q4PdhBuUs 8buyrGWkKdsV2gBsm6uZKUlhOCpgPyQ8y2goClJ5obnj7KXtAMAIuayZhTNfzjPh5fcM DIWPJ2FTUROwRhHAuk9zOHExpPfkTwBsnliBosgtTSMNWTNaIwNg4OxkNWOQUQF8uSnI hspZXDHWQiDbT35tppCkNw3pHWLYWRZp7rwjESfORZ23+QI4eHHRfrcvdrSjVupKDvdo yV7juFuLjR/IZklGrCrP/0nc8o2vrY5FRV602PZH/xfVqE4g6H8D8KokmW/bqZAHcgbX J3JA== X-Gm-Message-State: AOJu0YzOJfXzBdogdN2hhayJSXF892EeiI3RZbIkqJyY+dLwCvcA6kHB Dh5R6oJuak74G8VmAWVrX1q5VVNdogJK3NWhPhw= X-Google-Smtp-Source: AGHT+IFkzdTbzhr5MEuwRGNQuvx0ZAuPI3EQQBj3a/RoaT81dJU4eHj0yVwXL+761H1AaYu7u0Ri6Q== X-Received: by 2002:adf:cd0a:0:b0:317:cdc4:762e with SMTP id w10-20020adfcd0a000000b00317cdc4762emr6008892wrm.63.1694105061207; Thu, 07 Sep 2023 09:44: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 d15-20020adffd8f000000b00317ab75748bsm23822145wrr.49.2023.09.07.09.44.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Sep 2023 09:44:20 -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 v4 06/17] media: qcom: camss: Pass line_num from compat resources Date: Thu, 7 Sep 2023 17:43:59 +0100 Message-ID: <20230907164410.36651-7-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230907164410.36651-1-bryan.odonoghue@linaro.org> References: <20230907164410.36651-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.41.0 From nobody Fri Dec 19 04:51:21 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 23D69EC8742 for ; Thu, 7 Sep 2023 17:00:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238736AbjIGRAu (ORCPT ); Thu, 7 Sep 2023 13:00:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57214 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238880AbjIGRAY (ORCPT ); Thu, 7 Sep 2023 13:00:24 -0400 Received: from mail-lf1-x133.google.com (mail-lf1-x133.google.com [IPv6:2a00:1450:4864:20::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3CB5910FD for ; Thu, 7 Sep 2023 09:59:54 -0700 (PDT) Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-5029ace4a28so39739e87.1 for ; Thu, 07 Sep 2023 09:59:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694105917; x=1694710717; 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=1Vp9gjySSy9xONrH1HSuS5SPQoGqqE5MfOKry0R6GA0=; b=BNaVjZDchQ2YLLPDGgAw/1PQidzyhthG23n/wNzsUASEfgzZuKTuqwxx/YuspFjygk s6lyWWD3aJnnu2W/kn/iL1LnQ0V6uLQZlR4p7x+nWvnDkB3vfSwU6lEc3VawYa0aEqKI QABXhhPCbBY8nEUU9RmZUF6gjE0LTlwPohQeiL2RCTbbc0VP6rIUb0yDxr6bjNDQkPMt qcQQL3hve/zEW7ClUGPoamLIceHlUf16qSlfdyy/XRciRgdhUxLW3aRCBC7kOGeILcAP SfWq7UNVMExOkZGyaFtmuldbQS7cE1E6fqWapvs7LhoqqBdhmoLq9d8ARYunyfUNQG1t sPoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694105917; x=1694710717; 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=1Vp9gjySSy9xONrH1HSuS5SPQoGqqE5MfOKry0R6GA0=; b=BES6J4awfRElPiwF9JE+xBkxK0XEiOztSIrJY87rD+RyEIL6L9bB2pUI2QcrY84nWT I8z5GLHiV52TbUqSaakzqMLNYW8u9Vp9K8ck6pOpOh1bK4ivmZNTLxEYqNVC7G7YGCvj URNPiUH7xRAOW6AwkJvJRsXX8LYiUlWl3R9xuYHOE7MCRDYf7Suekf1MSQOa18/UoWD1 z/9a+/1XzM8Pxhg4tYefto06lTTiJpalJpDu+m21UiEQFbFYQeW+8x5KgaFvTbpMraJX v+aNVqw+t9V86KYQhkOUPLSjULw/QFvo6hREgthoslBugWvC0E82rzq53HllLJOjrjJy bgyQ== X-Gm-Message-State: AOJu0Yz5QAtPVX7TB++MadDsLoBcrlqbpHt/LpYhEfISNeDYlnC1+44S JspfXfFgaNjB6+r5YIbMIqs7/qcU9HWU04lbqv0= X-Google-Smtp-Source: AGHT+IF35Af+zXB4rHx7SM5F9eX+zlD3FtLrDH1mM81yBsy6tbsioq0cRZGld1vUCDhLkKgjdVW0Vw== X-Received: by 2002:a05:600c:4e51:b0:3fe:d67d:5040 with SMTP id e17-20020a05600c4e5100b003fed67d5040mr2686390wmq.5.1694105063827; Thu, 07 Sep 2023 09:44: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 d15-20020adffd8f000000b00317ab75748bsm23822145wrr.49.2023.09.07.09.44.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Sep 2023 09:44: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 v4 07/17] media: qcom: camss: Pass CAMSS subdev callbacks via resource ops pointer Date: Thu, 7 Sep 2023 17:44:00 +0100 Message-ID: <20230907164410.36651-8-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230907164410.36651-1-bryan.odonoghue@linaro.org> References: <20230907164410.36651-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 Acked-by: Konrad Dybcio --- .../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.41.0 From nobody Fri Dec 19 04:51:21 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 C8CBEEC873E for ; Thu, 7 Sep 2023 17:00:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240198AbjIGRAc (ORCPT ); Thu, 7 Sep 2023 13:00:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60746 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239909AbjIGRAP (ORCPT ); Thu, 7 Sep 2023 13:00:15 -0400 Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [IPv6:2a00:1450:4864:20::332]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D43B1BF8 for ; Thu, 7 Sep 2023 09:59:33 -0700 (PDT) Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-402d499580dso13266895e9.1 for ; Thu, 07 Sep 2023 09:59:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694105880; x=1694710680; 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=r2eMRVYZa9yK+ZkgTl4p3lLwil9RZtGAozJNRxapQmc=; b=Lwevslcd4GRBR4+sX6zMPGvb5/0/RZJPhNa+Xm1hnbc0dJB3PoHPyniVbnM/ovsmNB 54aM2w6ZKJOt7C0MtlG4q03e7+kdNouOevH+Lp8ToP2QViMWlRo8H3yD/MDJyl7TLv0s w9FT4zSM18RGgZFzfRHsY4/mBAPTkw0NVEXOWUEZ9GOqXSndhgswoRanqxCZJEVbk7aZ 34harjp0IS6N0THVVHtRUoTePwUjEcgJxwS61yhbQ0ewL9MdonOHJFKmdImSJesaeh0z 8I9xa7fZYAE1uisywocr4XR9Y7Jdb6NUOPhmy7jIQBYN3xhT5CFyATtkTZ80ad8yh3a+ ojkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694105880; x=1694710680; 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=r2eMRVYZa9yK+ZkgTl4p3lLwil9RZtGAozJNRxapQmc=; b=NpkId7JPvJ/5CyqXWXFEfAARVaqAZNzfogJHRIaMDW3jj53IO/kX6XhXleYW05LiC0 vp93BiOCQp8DP/hjY+0/1qWmsx26ZxEznZWidvI2COV067hoBzJR6VkmbtrhrZ1AJnOs 4Dk/2SKG0C+s6uwwEuqw9EJ11ZQSoUHlEKeKAhw9TQa+RIc4ncZPJC+SgYmYxxklgXPc YRFDMM1pxU/6kwTwb8SBqR4gOubNjLMEnEjsDOec5n0uuHa7PvvhkcXoFnZydSQcubr1 MZgAuUkCsTEysZk0PBNhfb1addFxnp69jFCgNXWiFnZxw7IhIMg7BfodrOwT+DvPWB0u YEbQ== X-Gm-Message-State: AOJu0Yz6/YboepWsg9welC1j677K4P5FL+k+5jSBv8qYlmk6G3UliNcy s2KOiInOEqGjWIQgw+vFEbhD5pBO1rafFePwze4= X-Google-Smtp-Source: AGHT+IFfEQjrdgJzj3lbHrT1DzWXt/XdNKHsEr/Du0B2dJDVUyYYVus4VSj11Y5jeqf+eAK0YDVMvg== X-Received: by 2002:adf:f68c:0:b0:317:6cc7:6b21 with SMTP id v12-20020adff68c000000b003176cc76b21mr5206350wrp.69.1694105065339; Thu, 07 Sep 2023 09:44: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 d15-20020adffd8f000000b00317ab75748bsm23822145wrr.49.2023.09.07.09.44.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Sep 2023 09:44: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 v4 08/17] media: qcom: camss: Assign the correct number of RDIs per VFE Date: Thu, 7 Sep 2023 17:44:01 +0100 Message-ID: <20230907164410.36651-9-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230907164410.36651-1-bryan.odonoghue@linaro.org> References: <20230907164410.36651-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.41.0 From nobody Fri Dec 19 04:51:21 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 F2250EC873E for ; Thu, 7 Sep 2023 16:55:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244755AbjIGQzR (ORCPT ); Thu, 7 Sep 2023 12:55:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35836 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244636AbjIGQzP (ORCPT ); Thu, 7 Sep 2023 12:55:15 -0400 Received: from mail-lj1-x22e.google.com (mail-lj1-x22e.google.com [IPv6:2a00:1450:4864:20::22e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8873E1FEF for ; Thu, 7 Sep 2023 09:54:51 -0700 (PDT) Received: by mail-lj1-x22e.google.com with SMTP id 38308e7fff4ca-2b9d07a8d84so19670981fa.3 for ; Thu, 07 Sep 2023 09:54:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694105612; x=1694710412; 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=zSVSANzjwjWJL58JqdMOyxf39JxdZOjplNSWyv8wvaY=; b=XywIpqIGwX4ZoiB2xEaEnF1citpCFFIkNsrhnCg+p63B7a/hBbW/jSkLqoN8LXGN/P /wNG2n3wnClVMrkucZJY52cbCxFZdnCY7IYX1ERmXt9XLziEqM2Z1+ArZH1GzP/fDtNb Sunvd+wC+HtIzO9H3i4UhleizAPdfjLMZOGQzalzKISIp5cpGaXuTm4J09QHlqDnSnWo 1UzYYchbmOl+MkQJ2lMeEjej0iNNwQw4yN6CNqvCoDFZ+A/hTNp3l142wLRxGq2wNTqn xBvvJhMvNK8YqZR2/WId+zHCZRyydJm9skbCSy/PIghJCrqjdaeR2YtrFw4Hovu3dHLf Vp+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694105612; x=1694710412; 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=zSVSANzjwjWJL58JqdMOyxf39JxdZOjplNSWyv8wvaY=; b=Gys245+rUrvPfv9pyZ5HWiIE2YIoPcQ1pvo/XpSyWmVCnHBQI4alOKPmzJmG5MgGEj Va5Vctsw86Dh1OGQJs2o6FJMBoe7sBAzXEh5PwIm1uyrR0SnKhBxJsmdTECdDIU3nrsB /Sz7r4z7iIU70jEIrCnb+u/bwD0M1AIxZrBKzFjC1nsAwBC7nNZeuYkhxVdm0iZvvHkp lgRyoC5Iw5aWY9eryZNU7NyzExOZ6eJIxPgtZsUAJQqlfbFocUsP7U/Fo67uENB89E9u lzuUkorLG1mS3sIeOWe5jwAuqlr9qKaaQZv2cjaAnMBmw2yDR326P8QuMpdpKI2S2cdr 3V2Q== X-Gm-Message-State: AOJu0YzMt97W4EnOY4GbyJQOoYoF1ixEnoqWtJPaq2K5rGn9vllcJKKq 5fJbQk0f5QhBKUzS5zCB/BVYM0aA16Ch0gs+quA= X-Google-Smtp-Source: AGHT+IHKo1JmOMb4+djt+NKGu6fxIHBbTNo3gqmI+h53oZDKltsofVpbHkVMvWTKSuUVVecRTOFMHQ== X-Received: by 2002:a5d:5643:0:b0:319:7471:2965 with SMTP id j3-20020a5d5643000000b0031974712965mr5838wrw.21.1694105066449; Thu, 07 Sep 2023 09:44: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 d15-20020adffd8f000000b00317ab75748bsm23822145wrr.49.2023.09.07.09.44.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Sep 2023 09:44: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 v4 09/17] media: qcom: camss: Remove special case for VFE get/put Date: Thu, 7 Sep 2023 17:44:02 +0100 Message-ID: <20230907164410.36651-10-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230907164410.36651-1-bryan.odonoghue@linaro.org> References: <20230907164410.36651-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 --- 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.41.0 From nobody Fri Dec 19 04:51:21 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 1D925EC8742 for ; Thu, 7 Sep 2023 17:00:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241486AbjIGRBA (ORCPT ); Thu, 7 Sep 2023 13:01:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60738 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239001AbjIGRA3 (ORCPT ); Thu, 7 Sep 2023 13:00:29 -0400 Received: from mail-lf1-x12a.google.com (mail-lf1-x12a.google.com [IPv6:2a00:1450:4864:20::12a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A893D268A for ; Thu, 7 Sep 2023 10:00:00 -0700 (PDT) Received: by mail-lf1-x12a.google.com with SMTP id 2adb3069b0e04-5007f3d3235so1961736e87.2 for ; Thu, 07 Sep 2023 10:00:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694105917; x=1694710717; 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=s3z4bbmKCuqNXhi6+jCpU8FeEUQHehDy7ati4HRipes=; b=eLtqjEfVAPhXppvHZoHBlZl6gJ+qt/3EAiLp9AHyiHe5BSLnuHHhf4iXQgAcNVPc6a nkbq0/KONnGlwmS+cxKuCYJ6yDTSBiFb9SZLTgPqYaDah7GxhbHQV067m8ktmCv688wc 2T0OQpSF8GfHu4E1gBUPSRt6/VcyohH7mqd3fTMbPkXwz+EZOU4Z277IGGlM6G6fnR7Q l/4ccVy1d14EidAtpC5ruOblFsBADDWOUbe38C/eXQL6DwdN9h6XOVRnRWBv4VStGnfh d/H0DLTFnL0OGQIZT/mDznhg0q+b/4l06GGpUU02AT5YbpxJI2EV+Ba6Rmy7OpJ/mBZe gdQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694105917; x=1694710717; 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=s3z4bbmKCuqNXhi6+jCpU8FeEUQHehDy7ati4HRipes=; b=uJoPqKruowUzax2mWWHWlEF6Ard/5eeROx4owI7OnbLgV+8MZ62DuSSsBYuEsbErKS C4h1Iern4kRKSGbSLaLOUxSNGfDzRtfvmLgrnv+XK1rSWkAV5ufh1eS6LDWDhtRPNP0d DQ4UKd75O2jCtkq0j/mxU8x9ZI6ORnN/jQRtuxy928151G1S4DdDXTE2xNwg1xfD4EfD O4j+wCm2zbYht/Bqnp3Vofe6o15Nk6IsKXbwqrJTkH8uk7q5R/xMTbEHtbpYi+HOQB7Z 4Wp9GJ3OPDurMKmfmiQB78o2E74gjawg8eYMbBfb7ab6VE7lksmyxP/RARska/+CF7WX kGOw== X-Gm-Message-State: AOJu0Yw9OU5le0NHpe78VErd0vKPr/D8RDdEDbBZLtUMZvK3/0sIspJt Oj4CAKWGK2InpLNMfmVO6WeuK4lFuEyzhxDg7RA= X-Google-Smtp-Source: AGHT+IFz0apguPB/MYG7ETDtmZBWdV5vuxGZYZXDuL7reHJRxxEyuYfa01oTpLf/Vc5mFNN/Dk4Zcw== X-Received: by 2002:adf:ce05:0:b0:31c:6525:770d with SMTP id p5-20020adfce05000000b0031c6525770dmr11658wrn.1.1694105067571; Thu, 07 Sep 2023 09:44: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 d15-20020adffd8f000000b00317ab75748bsm23822145wrr.49.2023.09.07.09.44.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Sep 2023 09:44: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 v4 10/17] media: qcom: camss: Untangle if/else spaghetti in camss Date: Thu, 7 Sep 2023 17:44:03 +0100 Message-ID: <20230907164410.36651-11-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230907164410.36651-1-bryan.odonoghue@linaro.org> References: <20230907164410.36651-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.41.0 From nobody Fri Dec 19 04:51:21 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 191E9EC8743 for ; Thu, 7 Sep 2023 16:47:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243447AbjIGQrI (ORCPT ); Thu, 7 Sep 2023 12:47:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38172 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243551AbjIGQqe (ORCPT ); Thu, 7 Sep 2023 12:46:34 -0400 Received: from mail-wr1-x431.google.com (mail-wr1-x431.google.com [IPv6:2a00:1450:4864:20::431]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 68BA31717 for ; Thu, 7 Sep 2023 09:46:05 -0700 (PDT) Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-31c5c06e8bbso1137866f8f.1 for ; Thu, 07 Sep 2023 09:46:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694105103; x=1694709903; 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=uwcHAIcWBLJgaFSQPPVwbdgX5AY+gP8RU9uRq6s//uY=; b=y7CE+LvjOEr79dwyTdQld/2N2vRGs0TXRd/d2FVDew8Mzns+HpWyLcu47G8lSCZDty yul9qWUqCHy3HP/TPjinq2iJigk0iLB65kEDRUkBm1oVih8JPQ8XgFwm7f9n1bTlNJ6L Gku/lBIkg34BhLfr87OYSyUqpuO4mNGcUgFPDqhOXQmxBurhALAUDQcQgwatwHDVAAZb PKpuKbsPnRkTuB4UFI1Csom3HrfB/6ZaEelNa2hyDG5KIgen/H1Mr7czEYGeNi3G2Ngu 2o6I2tY1H7ZGcnZKSRcVRzO+ZaAk7KWZG3JHFUmXWV9MRc6CWxvJMnoYHIkO9hcsObtv RLXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694105103; x=1694709903; 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=uwcHAIcWBLJgaFSQPPVwbdgX5AY+gP8RU9uRq6s//uY=; b=leiO0h7lSY1ydTwZYn8LEa3QDifVwVHAVHSLRkTKZ195yqa0bQ6uNOeilqU4PjL365 O4Pjxw4JL6RIyqfILXzKpkjSPW7FHNKUg+vbLXeR53ItWUOQcm522m0OI/83uqVuFBHl +Lx3pEyXrFPtAFkl9F/GZ7fecGZY6O3UP/wN8b/EytlmCrftRIzpQsa2Da/SEadXV314 IRemfm7cCfK6h4GScx4DSBjGBTfQ9KmkzePrR7CN4vVJg9Lv6vK1IN5AWTg0CT37likM MzsvBbI+Pgn+SmYrXISbEzJFnLJyWuArtm2JBwAddEauh+vdH3xzkYpz04EXnyT6Hw6c BRZg== X-Gm-Message-State: AOJu0Ywtk/5zFCQnbh4q1kYk8odKcnKNzaTMLGKVuIwMAqI2d+Vqe/St qC0UOnkvrLqdos8zzNdsGWPIkn2b3lsCMm3NJYQ= X-Google-Smtp-Source: AGHT+IGI74jJS2lLMQ7WQZ30fEqVq6xagTXB+9/TYDSpq1UToqDG3+wKhhhWajVHYTAaSq6j59RRGA== X-Received: by 2002:adf:cf0d:0:b0:317:7441:1a4 with SMTP id o13-20020adfcf0d000000b00317744101a4mr5783702wrj.29.1694105069227; Thu, 07 Sep 2023 09:44: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 d15-20020adffd8f000000b00317ab75748bsm23822145wrr.49.2023.09.07.09.44.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Sep 2023 09:44: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 v4 11/17] media: qcom: camss: Allow clocks vfeN vfe_liteN or vfe_lite Date: Thu, 7 Sep 2023 17:44:04 +0100 Message-ID: <20230907164410.36651-12-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230907164410.36651-1-bryan.odonoghue@linaro.org> References: <20230907164410.36651-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 Acked-by: Konrad Dybcio --- 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.41.0 From nobody Fri Dec 19 04:51:21 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 0191BEC8743 for ; Thu, 7 Sep 2023 16:48:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242820AbjIGQsx (ORCPT ); Thu, 7 Sep 2023 12:48:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47240 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242277AbjIGQsw (ORCPT ); Thu, 7 Sep 2023 12:48:52 -0400 Received: from mail-lf1-x135.google.com (mail-lf1-x135.google.com [IPv6:2a00:1450:4864:20::135]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CC5121FE5 for ; Thu, 7 Sep 2023 09:48:31 -0700 (PDT) Received: by mail-lf1-x135.google.com with SMTP id 2adb3069b0e04-501eec0a373so1866309e87.3 for ; Thu, 07 Sep 2023 09:48:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694105248; x=1694710048; 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=12+DTZFXkG2owWWbljTCuZqxlyIGQ8q+rzU2uqt9NvI=; b=ig1X5qr1nIfOvTeCoBq79J7gV7gffGovSCD1sQM9R15YQSQoPycdxOStFUu+hm7ong HhW5alc5By7EbhH3OD4SjWhRCUX6B8uUeslW25m5CXkvdv9MyrlVVR8S5hFwo0wKqioA oVFQrR1SxX1w77BN9gAPnCv5MMIF2/LEKm9rlFcXOPb6StXU3C46zv5Yxby70/v6i/HL clYIw3joP8lB0ENNqLElrkIX41AH9QUEe/MKSv/wmqGweyTusqb/B95LLOqHqjoRp47k t9szyZkaG1vkbZgwufi6ri86KeI40jDC77NR4QddpPb/4oho+ZYIsXKmqGffNav32DfU 2Svg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694105248; x=1694710048; 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=12+DTZFXkG2owWWbljTCuZqxlyIGQ8q+rzU2uqt9NvI=; b=YepWVbNO6UX7FsOV+/RfjYH+cdzIZa31h9dtLSjzkEHSIZefeSM5imMI/+CmKxwQOi FgaFLdWqAgTgbplEihkMI1PwIrAHk4HBwx1EYR/8FXAWxpzF/wHgweV8kMCgP4ePqvmE dkfiGxFNpcdpGd9unU+0zkjhLkXNmJjvUfS0Z4u/AbUAd/U/3x7apXpPK/9tcHofa8MK +P3+5unVShHZkTUx3URwg4yk9kpZnDov0ER73mzBqH8Q/V6vhsRn5WqJvfMjEcYutmDl eEB3wAh0BeFj/QqY86A7diFFo3EEyhfhHOVuUEuovDQXIxhKhauj0cEDb3eoRVubfaR8 EjZQ== X-Gm-Message-State: AOJu0YxAytI7USHlswzq2LS6I3JkpedK4+at/w4qERiy75WVV2yiHScj ZJ2G/dSOuN444rFX8Ih1PRe5YNRDwerrxxt+Sb0= X-Google-Smtp-Source: AGHT+IEmqQIeynZQq8tWIXW+dw0WlocG78ZMWRShFxQCtRvuNcFwkxJ1oTDZoxEq9Fho2wtuqLBuVQ== X-Received: by 2002:a5d:4538:0:b0:31c:e933:9590 with SMTP id j24-20020a5d4538000000b0031ce9339590mr5053146wra.33.1694105070513; Thu, 07 Sep 2023 09:44: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 d15-20020adffd8f000000b00317ab75748bsm23822145wrr.49.2023.09.07.09.44.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Sep 2023 09:44: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 v4 12/17] media: qcom: camss: Functionally decompose CSIPHY clock lookups Date: Thu, 7 Sep 2023 17:44:05 +0100 Message-ID: <20230907164410.36651-13-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230907164410.36651-1-bryan.odonoghue@linaro.org> References: <20230907164410.36651-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 Acked-by: Konrad Dybcio --- .../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.41.0 From nobody Fri Dec 19 04:51:21 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 BBC44EC873E for ; Thu, 7 Sep 2023 16:59:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238638AbjIGQ7y (ORCPT ); Thu, 7 Sep 2023 12:59:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52256 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233666AbjIGQ7a (ORCPT ); Thu, 7 Sep 2023 12:59:30 -0400 Received: from mail-lj1-x232.google.com (mail-lj1-x232.google.com [IPv6:2a00:1450:4864:20::232]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8D2BA1FD2 for ; Thu, 7 Sep 2023 09:59:03 -0700 (PDT) Received: by mail-lj1-x232.google.com with SMTP id 38308e7fff4ca-2bceca8a41aso19981441fa.0 for ; Thu, 07 Sep 2023 09:59:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694105872; x=1694710672; 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=3IGORlEL+j7QOCTKX6XyQpE4GsPUdQpP3Lht2awpSqA=; b=dvpnDOAGqyIulgWWS55DvTHqts2W7Vm9HF5zs+1NFwr6WiOfTFU4Njysu850kgnyBO kVqGoYvY63vnzOZhtdV7cFOJNQAVRwBIRB82JjM5O7xKV0imazrBuZE/CQvqohUvCsTW AwbrVN9FIajQTcPUeNGJDo6lJRt71fEE9sY4M39khZ0KYecqszrTyVo+HHusSE3ZKYH2 Qhizx+2Y9U/DvjVTUPD2bCIbgZ/ykclR/1IX62fvJkyH+9xZTYECKli4gdIpA6v/j8I1 LQfF9dgklmpOrqKsFl7I7LF4k4EPDfSpkQ/Muw/D2huEcm53VA2rFWKu567ekYdKq24h i1nQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694105872; x=1694710672; 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=3IGORlEL+j7QOCTKX6XyQpE4GsPUdQpP3Lht2awpSqA=; b=W7VqYrQZ0hybCKP1KgO4p4C/vdYXKgueWX+7yAO/K3caCmaPD+lsn/f/yLPwyq81ce 7ndDOOVzMVqlf3wplohsFAZdiHklQAqNCX0gYtB2RNE/t8/w3tLVuA4SYc8qXjI+XopY 5meBdHktoob13KuKHmUjJ3RLvgz28Kt9TV7gFd0mXBcS+faLpFqcPcdyyayLH8mDWNJh HERRJIjpvlJMuXEFS1ycjafx+KuMBLbmwe+0VzW4m5gvq8ImGQ34ldSZn3djpla9bRbz wlRcyxjK5zphLB43YIInehMrH0IZyX9He2dRewGlDCREacssxYTqfMhzpzIfKnup+9PI Ek+A== X-Gm-Message-State: AOJu0YxU2oF48F0NK0I3h+2CvLSsv9Mw6BQFGgrzxIy0diOEtC7T3svy H/Ot0UamK0s0h/tOEI4lUpQ2L/QaBb1KzqBqdes= X-Google-Smtp-Source: AGHT+IFFhtFOfyjIUjTQaoISN3ahU3GulYsY3a4nJuObsLIa20hRbGZNlKWDpuep8zKWObREFaQEoQ== X-Received: by 2002:a5d:6504:0:b0:31a:d4a9:bdac with SMTP id x4-20020a5d6504000000b0031ad4a9bdacmr948wru.11.1694105072392; Thu, 07 Sep 2023 09:44: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 d15-20020adffd8f000000b00317ab75748bsm23822145wrr.49.2023.09.07.09.44.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Sep 2023 09:44: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 v4 13/17] media: qcom: camss: Fix support for setting CSIPHY clock name csiphyX Date: Thu, 7 Sep 2023 17:44:06 +0100 Message-ID: <20230907164410.36651-14-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230907164410.36651-1-bryan.odonoghue@linaro.org> References: <20230907164410.36651-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.41.0 From nobody Fri Dec 19 04:51:21 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 C99D8EC873E for ; Thu, 7 Sep 2023 16:50:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243787AbjIGQu1 (ORCPT ); Thu, 7 Sep 2023 12:50:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40050 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243551AbjIGQuX (ORCPT ); Thu, 7 Sep 2023 12:50:23 -0400 Received: from mail-lj1-x233.google.com (mail-lj1-x233.google.com [IPv6:2a00:1450:4864:20::233]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 339D7172E for ; Thu, 7 Sep 2023 09:49:58 -0700 (PDT) Received: by mail-lj1-x233.google.com with SMTP id 38308e7fff4ca-2bcfdadd149so21646561fa.0 for ; Thu, 07 Sep 2023 09:49:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694105334; x=1694710134; 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=fsf1mehY1EU1JR1nmS7E45I2Zeglu1yJCbPwjJvU1uU=; b=CJN7mRLqE4/Enw/Bmu49b/FLzfBaLpKRifiYvMD9TwhVEFdMXj1LGrbF0V97zJzHD2 a8sKaqmt4ESuomrPGJpvatCPhOtrg54HqNvm0uUJ4LOwcHXMWJBvnH629RPvYwUYPrQK UBoqBWskN8h+tq+lHzR/M362YOXXVjsoyb5rA2HlXyRCVkSe6d5tihsOlzyzGtPhdTNa f9IRLcKoKO/9izlloewHb3k4epgIzDGb0EKiVICn4smNFBrW//7u6mwShTnAFwpAY7Tf +Y5eu/u1+Yos+8+qtto/dLEpIVu/T7nANU2ghJ+d2l8SKDH/+qCevwoXKttUc6pNwBMe rqCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694105334; x=1694710134; 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=fsf1mehY1EU1JR1nmS7E45I2Zeglu1yJCbPwjJvU1uU=; b=D+i5DS7zADWI4esu1zo6oPSDp926MaZEY0j/u+ohY2EAGU6x1Y3Jtpw6nBB++ccSWq PaU/2Iv91VUKMKuku0Q6SbY91+k2OoZV6Q20DFNQBv4h5WTUJtTRcvcnvAAZ+S+AYQ5E e9/tOTR/lNuzDwnt5LQbPy9G0dx1NoZwhJWUAs6+BY71ErVTQuvdHD+AXxmVYLFAR7JP T1GR4vF+2PNAC4hgetB/Btk8SF1dyPTXg2JSD6L1JHs0cw2cAB5ktgB7AjdUOlgyqgx6 gsv/IPdFzgf3eyK/SofUG0NWESn35HqMAG5VpTvQk7ZHkjXjiKstwvqBSJVOMTr75BvL ou2Q== X-Gm-Message-State: AOJu0Yw79ABv5b9BjKKmyW5Net1L/qNMH5U9X/cckI5Ew3A42RK4NnE4 wu0PSQXuGdACmYY979MY/6BxvaiWWkWVHPe50qs= X-Google-Smtp-Source: AGHT+IG3BWilOJ+YfKjw7ZTqC8wbsZGwXEa01yDeLkkclOQHDpZHzPugldVac3UjZ9qjBCmK/nJTAA== X-Received: by 2002:a5d:4d84:0:b0:319:85e2:6972 with SMTP id b4-20020a5d4d84000000b0031985e26972mr4850999wru.42.1694105073885; Thu, 07 Sep 2023 09:44:33 -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 d15-20020adffd8f000000b00317ab75748bsm23822145wrr.49.2023.09.07.09.44.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Sep 2023 09:44:33 -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 v4 14/17] media: qcom: camss: Support RDI3 for VFE 17x Date: Thu, 7 Sep 2023 17:44:07 +0100 Message-ID: <20230907164410.36651-15-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230907164410.36651-1-bryan.odonoghue@linaro.org> References: <20230907164410.36651-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.41.0 From nobody Fri Dec 19 04:51:21 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 4386EEC874B for ; Thu, 7 Sep 2023 16:54:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244568AbjIGQyk (ORCPT ); Thu, 7 Sep 2023 12:54:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51048 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240084AbjIGQyi (ORCPT ); Thu, 7 Sep 2023 12:54:38 -0400 Received: from mail-ej1-x632.google.com (mail-ej1-x632.google.com [IPv6:2a00:1450:4864:20::632]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C39CB1BC9 for ; Thu, 7 Sep 2023 09:54:05 -0700 (PDT) Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-9a6190af24aso145656666b.0 for ; Thu, 07 Sep 2023 09:54:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694105583; x=1694710383; 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=FA5jwmfCSlNH83mfRCiNqnTglrB8xLWvA9YsruFheoo=; b=Tsfn61itD0cG7hIucGv2kiH/dIZtu/07etiYp76b8KiNcJ7oEDZ/ejHXGrmXzFzTL1 +mMBzI3js/vojWtIthcMi1RKwf6l8rObw84mDQwIww6uyxPe8EV+SJdmWQZZGaUbbAxR Zg5o0G5f/Ty7kIeWONpZI5wTbfro2wDEwwWwisKVnI/zxtYSYEx2Aig1s7AvSOTiGWr3 3pOKwalA5LRKMPdzSNx5OXpf9xdJMBTiglgKHfQzhzVilB5nSeQaSFg8OckvvNfuiNhx EO7aTCywvUvAYchugVpVbsWlMldFXEv1vKPIf9CaQeDfdzg0jMVkqZOKes3HKvmR7REe 496Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694105583; x=1694710383; 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=FA5jwmfCSlNH83mfRCiNqnTglrB8xLWvA9YsruFheoo=; b=WLIKenSHV8cRXbwfEBGHuhR/e48Zrkq7tbE/BQ/Rp7Vv/IC6W7qFTp9Slwt8OLLSLx 5VXLxxGaaaZulsr0YVtNxX2Wesef+lODNkXQuVD44OYYy/PUs/Gkhkku7YFp5Zz1bNDk WLVJo9PWZg2tnJC4S1E6nIpfZVpVNPHzz+KbxCgcyoKRXFqz+SJrwBsFKQsz65RicphT AiewyMlhgwwCdVBRqb893IeBYG8xQu24grUwwwso7D5CKRXC50e4/6o+8D1XKxKB4XF3 fyYhJXhzxYQQ+SbFKYPsBq5FpmBQyHNXCHp0DBXd41UtzvZTLdOOiQeUGpyv4qtYFK61 ATcg== X-Gm-Message-State: AOJu0YwJOum6sJzkcL1Y3bSrlqm9zuZvKgXlFLN4I6tPyV8JDegzdgop i8g3da496ssJo9mTJcxort9A3+P4t1StnU8+jF8= X-Google-Smtp-Source: AGHT+IFroVO8G3mbET4JOoWsuUdk2z+EQkzfg9MqOG6q51gWHzzSYhkYXfwGQSn9ILQzuo7RsAP0eA== X-Received: by 2002:a5d:4204:0:b0:31a:d2b2:f28f with SMTP id n4-20020a5d4204000000b0031ad2b2f28fmr4918993wrq.51.1694105075012; Thu, 07 Sep 2023 09:44:35 -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 d15-20020adffd8f000000b00317ab75748bsm23822145wrr.49.2023.09.07.09.44.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Sep 2023 09:44:34 -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 v4 15/17] media: qcom: camss: Move vfe_disable into a common routine where applicable Date: Thu, 7 Sep 2023 17:44:08 +0100 Message-ID: <20230907164410.36651-16-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230907164410.36651-1-bryan.odonoghue@linaro.org> References: <20230907164410.36651-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 Acked-by: Konrad Dybcio --- .../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 | 42 +++++++++++++++++++ drivers/media/platform/qcom/camss/camss-vfe.h | 9 ++++ 4 files changed, 53 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..26817f9ca4f1a 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe.c +++ b/drivers/media/platform/qcom/camss/camss-vfe.c @@ -410,6 +410,48 @@ 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; + int ret; + + 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); + + ret =3D vfe_reset(vfe); + + return ret; +} + +/* + * 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.41.0 From nobody Fri Dec 19 04:51:21 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 2BECFEC8743 for ; Thu, 7 Sep 2023 16:55:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244771AbjIGQzX (ORCPT ); Thu, 7 Sep 2023 12:55:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35964 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244691AbjIGQzS (ORCPT ); Thu, 7 Sep 2023 12:55:18 -0400 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6271B197 for ; Thu, 7 Sep 2023 09:54:55 -0700 (PDT) Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-402d499580dso13164055e9.1 for ; Thu, 07 Sep 2023 09:54:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694105290; x=1694710090; 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=1DBkJj6t1gRX5aZK5tJ1KyLlxRpK3N5foL763peQ1Wg=; b=lm9Pmk2npPKoqUlQhHTICYiMKgWCTy9if1NT3qaGI/vyr+0PPr5S4RNdd0n5m/ht8q zdxpP0ORw11SWDE45+uwbREiQDRcEwj7Ns45ptmzxETTKnBcL+MO4cClaCRyznDOsgOJ ITEuYKYdF+/nTQen3OZWiMywhBBlgNYfXXrHa/f8szxt6/06ywE9VG5UrZTansqyOCi/ iO9QVAqrZKEDsMX7+kR2OkC+0h0HpW5lA4hLRLBVkft06bB0Ey+VEO3OSWmhvE/OkEJa Z90OPoh6P9x+kxQX2m2ZQeJT3+tBjQyUZF23am9iKrTeyrhUzPI0cMEz3U5dwweEIxX+ 8Yeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694105290; x=1694710090; 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=1DBkJj6t1gRX5aZK5tJ1KyLlxRpK3N5foL763peQ1Wg=; b=UHdUACARyf2HGDhFFHemCXv6V/fBBrL+d3tRJ2p0SwmIvmMXW7dxoyHjafyznlx+x9 SiMTlDeUhrRxBYgKScWjulqL+jTrzPcb0Hx1PmJ0/Z1ek1/uxmXJE+evmaddkmd0B/Ig unzyJJOViIh3U8WBvis1KKf2HuWc7inQJ2jtOQZugdegqhsMJcKz7YIhMBcO10vaM8wf 1MEV7PBgCCZiF65NZ+xi8WTUsb2cBIGxooI7avVu9pV6hY9dlCTvonc1ZmMw3e/gLZMr SBYRf4lS1mOkeSRhIUmavZliioGYp+bd9nWyafgPXI6komef72YIfQCAlPPn/Z95C6qd kKBQ== X-Gm-Message-State: AOJu0YzzLC73PnAAWoLstpFhZdv4vZ7E9cN5VrJKW59aoDL/gK9APPr+ r3OLeQoFNmBYX4J+JE+JT78J7Cr35SYfTKss8qE= X-Google-Smtp-Source: AGHT+IFoXG6hPmdGbK3c+YMW3n5SuKQkxSl3oJs1X+mNHJr9JBpHBciaJW/Anw6OgngsMIAc/RGSgQ== X-Received: by 2002:a5d:4e42:0:b0:319:867e:97cb with SMTP id r2-20020a5d4e42000000b00319867e97cbmr5862684wrt.42.1694105076065; Thu, 07 Sep 2023 09:44:36 -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 d15-20020adffd8f000000b00317ab75748bsm23822145wrr.49.2023.09.07.09.44.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Sep 2023 09:44:35 -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 v4 16/17] media: qcom: camss: Propagate vfe_reset error up the callstack Date: Thu, 7 Sep 2023 17:44:09 +0100 Message-ID: <20230907164410.36651-17-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230907164410.36651-1-bryan.odonoghue@linaro.org> References: <20230907164410.36651-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 Acked-by: Konrad Dybcio --- 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 26817f9ca4f1a..256c0d8b8949d 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe.c +++ b/drivers/media/platform/qcom/camss/camss-vfe.c @@ -438,8 +438,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 @@ -449,7 +452,8 @@ int vfe_disable(struct vfe_line *line) =20 mutex_unlock(&vfe->stream_lock); =20 - return 0; +error: + return ret; } =20 /** --=20 2.41.0 From nobody Fri Dec 19 04:51:21 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 61BC7EC873E for ; Thu, 7 Sep 2023 16:47:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243918AbjIGQra (ORCPT ); Thu, 7 Sep 2023 12:47:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37952 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244035AbjIGQrC (ORCPT ); Thu, 7 Sep 2023 12:47:02 -0400 Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2108F2113 for ; Thu, 7 Sep 2023 09:46:33 -0700 (PDT) Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-4013454fa93so13403765e9.0 for ; Thu, 07 Sep 2023 09:46:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1694105134; x=1694709934; 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=FIu4eWCkEOSVtI8FoLJRLwwONGivM5mrULXtY5Z5HVI=; b=giVOdMQ5IFjGJzsdDzRayfgwzcrcsDWHJznCZqtaMO8/65Ed1aLt3F3l1EiNniW7tF DGq9snYMVFFSTE+QWHjPYAsZvrDyFkCKsHvyDoNN21bSyHM8SLi0uVtM9dY879VoeNrH eIC9yNGOS4J1+JlRIxOkppaP6OXAP3eR8M4i68t32dJjaDkBsRfIAaQMEcm6lpZdx8yo r8qBoJaf1JbAAiedblCvPzNDbmaVYZ919peP70SSQAgIevOtKDvrpvRVhdTEVkTiGXHk sfxS+UlGCr5xX/CnlKYJayJ11lYgNn4XSnJPBaOjnwcezNzTx6LMrIdqUNDXYmcOzO+i fmEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694105134; x=1694709934; 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=FIu4eWCkEOSVtI8FoLJRLwwONGivM5mrULXtY5Z5HVI=; b=CgTdDEalDQ8XSMYQdBhqNKwfFKPztXVSGMQ07GxpfzO3Q0dKC+2DB4bBwc0LliPN0c bgv4ExDgCK0BQRUHbxn+ZFu3M6i2ErDuJXvYGPtM6sxYV9pKD8ODRs74aqUYxVPHMFZw FXBmEkYoVppT6AJWRu2/piwpXQKOjZuJQ47Y7SvaEpyYx0WveJiN03vDSLrMdEb8y2/f zvQAIsYqgPmS7q+El4gDqgH0rkTZOqiFgWNVpD4mzU4p3Pz3ojnWu1+H1cVDoPjr2Xq8 4pOSSiDYQoKpN69Z+XM40OM85n3ZujXMr6QBcRMrK6vPsPO8PI7ke5wd+QU9lWCTn2si N5TQ== X-Gm-Message-State: AOJu0YxafaGobTSA9tgTP01NTM5abqWhzoUbnHbX0qXGDRqKxXA4hGJz z2zOGDRizJLb/9kytbscnZ1NTcgmz74pzrJHxro= X-Google-Smtp-Source: AGHT+IHYQm/x1ttHvlb4nOLzsoqtQcWa1sflGXM/+Y5olsT43jMQsj+a+Uw0WpuUCkC0LtSmUtNegg== X-Received: by 2002:adf:d0ca:0:b0:317:e1fb:d56a with SMTP id z10-20020adfd0ca000000b00317e1fbd56amr5095651wrh.40.1694105077152; Thu, 07 Sep 2023 09:44:37 -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 d15-20020adffd8f000000b00317ab75748bsm23822145wrr.49.2023.09.07.09.44.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Sep 2023 09:44:36 -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 v4 17/17] media: qcom: camss: Comment CSID dt_id field Date: Thu, 7 Sep 2023 17:44:10 +0100 Message-ID: <20230907164410.36651-18-bryan.odonoghue@linaro.org> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230907164410.36651-1-bryan.odonoghue@linaro.org> References: <20230907164410.36651-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.41.0