linux-arm-msm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Bryan O'Donoghue <bod@kernel.org>
To: Wenmeng Liu <wenmeng.liu@oss.qualcomm.com>,
	rfoss@kernel.org, todor.too@gmail.com,
	bryan.odonoghue@linaro.org, vladimir.zapolskiy@linaro.org,
	mchehab@kernel.org
Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3] media: qcom: camss: Add support for regulator init_load_uA in CSIPHY
Date: Mon, 3 Nov 2025 10:45:54 +0000	[thread overview]
Message-ID: <e13632e8-e845-41e7-a423-299f987ca73d@kernel.org> (raw)
In-Reply-To: <20250912103631.1184-1-wenmeng.liu@oss.qualcomm.com>

On 12/09/2025 11:36, Wenmeng Liu wrote:
> Some Qualcomm regulators are configured with initial mode as
> HPM (High Power Mode), which may lead to higher power consumption.
> To reduce power usage, it's preferable to set the initial mode
> to LPM (Low Power Mode).
> 
> To ensure the regulator can switch from LPM to HPM when needed,
> this patch adds current load configuration for CAMSS CSIPHY.
> This allows the regulator framework to scale the mode dynamically
> based on the load requirement.
> 
> The current default value for current is uninitialized or random.
> To address this, initial current values are added for the
> following platforms:
> MSM8916, MSM8953, MSM8996, QCM2290, SDM670, SM8250, SC7280, SM8550
> QCS8300, SA8775P and X1E80100.
> 
> For SDM660, SDM845, SC8280XP the value is set to 0,
> indicating that no default current value is configured,
> the other values are derived from the power grid.
> 
> Signed-off-by: Wenmeng Liu <wenmeng.liu@oss.qualcomm.com>
> 
> ---
> Changes in v3:
> - Use devm_regulator_bulk_get_const instead of devm_regulator_bulk_get.
> - Set the default current value to 0.
> - Refactor the code to minimize data copying, and support more platform-specific values.
> - Link to v2: https://lore.kernel.org/all/20250729-camss_csiphy_current-v2-1-da3c72a2055c@quicinc.com/
> 
> Changes in v2:
> - Change the source of the current value from DTS to CAMSS resource
> - Link to v1: https://lore.kernel.org/all/20250620040736.3032667-1-quic_wenmliu@quicinc.com/
> ---
>   .../media/platform/qcom/camss/camss-csid.c    |  18 +-
>   .../media/platform/qcom/camss/camss-csiphy.c  |  19 +-
>   drivers/media/platform/qcom/camss/camss.c     | 290 ++++++++++++++----
>   drivers/media/platform/qcom/camss/camss.h     |   2 +-
>   4 files changed, 235 insertions(+), 94 deletions(-)
> 
> diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media/platform/qcom/camss/camss-csid.c
> index 5284b5857368..ed1820488c98 100644
> --- a/drivers/media/platform/qcom/camss/camss-csid.c
> +++ b/drivers/media/platform/qcom/camss/camss-csid.c
> @@ -1187,24 +1187,12 @@ int msm_csid_subdev_init(struct camss *camss, struct csid_device *csid,
> 
>   	/* Regulator */
>   	for (i = 0; i < ARRAY_SIZE(res->regulators); i++) {
> -		if (res->regulators[i])
> +		if (res->regulators[i].supply)
>   			csid->num_supplies++;
>   	}
> 
> -	if (csid->num_supplies) {
> -		csid->supplies = devm_kmalloc_array(camss->dev,
> -						    csid->num_supplies,
> -						    sizeof(*csid->supplies),
> -						    GFP_KERNEL);
> -		if (!csid->supplies)
> -			return -ENOMEM;
> -	}
> -
> -	for (i = 0; i < csid->num_supplies; i++)
> -		csid->supplies[i].supply = res->regulators[i];
> -
> -	ret = devm_regulator_bulk_get(camss->dev, csid->num_supplies,
> -				      csid->supplies);
> +	ret = devm_regulator_bulk_get_const(camss->dev, csid->num_supplies,
> +					    res->regulators, &csid->supplies);
>   	if (ret)
>   		return ret;
> 
> diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/media/platform/qcom/camss/camss-csiphy.c
> index 2de97f58f9ae..390427c163de 100644
> --- a/drivers/media/platform/qcom/camss/camss-csiphy.c
> +++ b/drivers/media/platform/qcom/camss/camss-csiphy.c
> @@ -694,24 +694,13 @@ int msm_csiphy_subdev_init(struct camss *camss,
> 
>   	/* CSIPHY supplies */
>   	for (i = 0; i < ARRAY_SIZE(res->regulators); i++) {
> -		if (res->regulators[i])
> +		if (res->regulators[i].supply)
>   			csiphy->num_supplies++;
>   	}
> 
> -	if (csiphy->num_supplies) {
> -		csiphy->supplies = devm_kmalloc_array(camss->dev,
> -						      csiphy->num_supplies,
> -						      sizeof(*csiphy->supplies),
> -						      GFP_KERNEL);
> -		if (!csiphy->supplies)
> -			return -ENOMEM;
> -	}
> -
> -	for (i = 0; i < csiphy->num_supplies; i++)
> -		csiphy->supplies[i].supply = res->regulators[i];
> -
> -	ret = devm_regulator_bulk_get(camss->dev, csiphy->num_supplies,
> -				      csiphy->supplies);
> +	if (csiphy->num_supplies > 0)
> +		ret = devm_regulator_bulk_get_const(camss->dev, csiphy->num_supplies,
> +						    res->regulators, &csiphy->supplies);
>   	return ret;
>   }
> 
> diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
> index 2fbcd0e343aa..43e4bc5a91be 100644
> --- a/drivers/media/platform/qcom/camss/camss.c
> +++ b/drivers/media/platform/qcom/camss/camss.c
> @@ -73,7 +73,9 @@ static const struct camss_subdev_resources csiphy_res_8x16[] = {
>   static const struct camss_subdev_resources csid_res_8x16[] = {
>   	/* CSID0 */
>   	{
> -		.regulators = { "vdda" },
> +		.regulators = {
> +			{ .supply = "vdda", .init_load_uA = 40000 }
> +		},
>   		.clock = { "top_ahb", "ispif_ahb", "csi0_ahb", "ahb",
>   			   "csi0", "csi0_phy", "csi0_pix", "csi0_rdi" },
>   		.clock_rate = { { 0 },
> @@ -95,7 +97,9 @@ static const struct camss_subdev_resources csid_res_8x16[] = {
> 
>   	/* CSID1 */
>   	{
> -		.regulators = { "vdda" },
> +		.regulators = {
> +			{ .supply = "vdda", .init_load_uA = 40000 }
> +		},
>   		.clock = { "top_ahb", "ispif_ahb", "csi1_ahb", "ahb",
>   			   "csi1", "csi1_phy", "csi1_pix", "csi1_rdi" },
>   		.clock_rate = { { 0 },
> @@ -157,7 +161,9 @@ static const struct camss_subdev_resources vfe_res_8x16[] = {
>   static const struct camss_subdev_resources csid_res_8x53[] = {
>   	/* CSID0 */
>   	{
> -		.regulators = { "vdda" },
> +		.regulators = {
> +			{ .supply = "vdda", .init_load_uA = 9900 }
> +		},
>   		.clock = { "top_ahb", "ispif_ahb", "csi0_ahb", "ahb",
>   			   "csi0", "csi0_phy", "csi0_pix", "csi0_rdi" },
>   		.clock_rate = { { 0 },
> @@ -180,7 +186,9 @@ static const struct camss_subdev_resources csid_res_8x53[] = {
> 
>   	/* CSID1 */
>   	{
> -		.regulators = { "vdda" },
> +		.regulators = {
> +			{ .supply = "vdda", .init_load_uA = 9900 }
> +		},
>   		.clock = { "top_ahb", "ispif_ahb", "csi1_ahb", "ahb",
>   			   "csi1", "csi1_phy", "csi1_pix", "csi1_rdi" },
>   		.clock_rate = { { 0 },
> @@ -203,7 +211,9 @@ static const struct camss_subdev_resources csid_res_8x53[] = {
> 
>   	/* CSID2 */
>   	{
> -		.regulators = { "vdda" },
> +		.regulators = {
> +			{ .supply = "vdda", .init_load_uA = 9900 }
> +		},
>   		.clock = { "top_ahb", "ispif_ahb", "csi2_ahb", "ahb",
>   			   "csi2", "csi2_phy", "csi2_pix", "csi2_rdi" },
>   		.clock_rate = { { 0 },
> @@ -364,7 +374,9 @@ static const struct camss_subdev_resources csiphy_res_8x96[] = {
>   static const struct camss_subdev_resources csid_res_8x96[] = {
>   	/* CSID0 */
>   	{
> -		.regulators = { "vdda" },
> +		.regulators = {
> +			{ .supply = "vdda", .init_load_uA = 80160 }
> +		},
>   		.clock = { "top_ahb", "ispif_ahb", "csi0_ahb", "ahb",
>   			   "csi0", "csi0_phy", "csi0_pix", "csi0_rdi" },
>   		.clock_rate = { { 0 },
> @@ -386,7 +398,9 @@ static const struct camss_subdev_resources csid_res_8x96[] = {
> 
>   	/* CSID1 */
>   	{
> -		.regulators = { "vdda" },
> +		.regulators = {
> +			{ .supply = "vdda", .init_load_uA = 80160 }
> +		},
>   		.clock = { "top_ahb", "ispif_ahb", "csi1_ahb", "ahb",
>   			   "csi1", "csi1_phy", "csi1_pix", "csi1_rdi" },
>   		.clock_rate = { { 0 },
> @@ -408,7 +422,9 @@ static const struct camss_subdev_resources csid_res_8x96[] = {
> 
>   	/* CSID2 */
>   	{
> -		.regulators = { "vdda" },
> +		.regulators = {
> +			{ .supply = "vdda", .init_load_uA = 80160 }
> +		},
>   		.clock = { "top_ahb", "ispif_ahb", "csi2_ahb", "ahb",
>   			   "csi2", "csi2_phy", "csi2_pix", "csi2_rdi" },
>   		.clock_rate = { { 0 },
> @@ -430,7 +446,9 @@ static const struct camss_subdev_resources csid_res_8x96[] = {
> 
>   	/* CSID3 */
>   	{
> -		.regulators = { "vdda" },
> +		.regulators = {
> +			{ .supply = "vdda", .init_load_uA = 80160 }
> +		},
>   		.clock = { "top_ahb", "ispif_ahb", "csi3_ahb", "ahb",
>   			   "csi3", "csi3_phy", "csi3_pix", "csi3_rdi" },
>   		.clock_rate = { { 0 },
> @@ -518,7 +536,10 @@ static const struct camss_subdev_resources vfe_res_8x96[] = {
>   static const struct camss_subdev_resources csiphy_res_2290[] = {
>   	/* CSIPHY0 */
>   	{
> -		.regulators = { "vdd-csiphy-1p2", "vdd-csiphy-1p8" },
> +		.regulators = {
> +			{ .supply = "vdd-csiphy-1p2", .init_load_uA = 26700 },
> +			{ .supply = "vdd-csiphy-1p8", .init_load_uA = 2600 }
> +		},
>   		.clock = { "top_ahb", "ahb", "csiphy0", "csiphy0_timer" },
>   		.clock_rate = { { 0 },
>   				{ 0 },
> @@ -535,7 +556,10 @@ static const struct camss_subdev_resources csiphy_res_2290[] = {
> 
>   	/* CSIPHY1 */
>   	{
> -		.regulators = { "vdd-csiphy-1p2", "vdd-csiphy-1p8" },
> +		.regulators = {
> +			{ .supply = "vdd-csiphy-1p2", .init_load_uA = 26700 },
> +			{ .supply = "vdd-csiphy-1p8", .init_load_uA = 2600 }
> +		},
>   		.clock = { "top_ahb", "ahb", "csiphy1", "csiphy1_timer" },
>   		.clock_rate = { { 0 },
>   				{ 0 },
> @@ -711,7 +735,10 @@ static const struct camss_subdev_resources csiphy_res_660[] = {
>   static const struct camss_subdev_resources csid_res_660[] = {
>   	/* CSID0 */
>   	{
> -		.regulators = { "vdda", "vdd_sec" },
> +		.regulators = {
> +			{ .supply = "vdda", .init_load_uA = 0 },
> +			{ .supply = "vdd_sec", .init_load_uA = 0 }
> +		},
>   		.clock = { "top_ahb", "ispif_ahb", "csi0_ahb", "ahb",
>   			   "csi0", "csi0_phy", "csi0_pix", "csi0_rdi",
>   			   "cphy_csid0" },
> @@ -736,7 +763,10 @@ static const struct camss_subdev_resources csid_res_660[] = {
> 
>   	/* CSID1 */
>   	{
> -		.regulators = { "vdda", "vdd_sec" },
> +		.regulators = {
> +			{ .supply = "vdda", .init_load_uA = 0 },
> +			{ .supply = "vdd_sec", .init_load_uA = 0 }
> +		},
>   		.clock = { "top_ahb", "ispif_ahb", "csi1_ahb", "ahb",
>   			   "csi1", "csi1_phy", "csi1_pix", "csi1_rdi",
>   			   "cphy_csid1" },
> @@ -761,7 +791,10 @@ static const struct camss_subdev_resources csid_res_660[] = {
> 
>   	/* CSID2 */
>   	{
> -		.regulators = { "vdda", "vdd_sec" },
> +		.regulators = {
> +			{ .supply = "vdda", .init_load_uA = 0 },
> +			{ .supply = "vdd_sec", .init_load_uA = 0 }
> +		},
>   		.clock = { "top_ahb", "ispif_ahb", "csi2_ahb", "ahb",
>   			   "csi2", "csi2_phy", "csi2_pix", "csi2_rdi",
>   			   "cphy_csid2" },
> @@ -786,7 +819,10 @@ static const struct camss_subdev_resources csid_res_660[] = {
> 
>   	/* CSID3 */
>   	{
> -		.regulators = { "vdda", "vdd_sec" },
> +		.regulators = {
> +			{ .supply = "vdda", .init_load_uA = 0 },
> +			{ .supply = "vdd_sec", .init_load_uA = 0 }
> +		},
>   		.clock = { "top_ahb", "ispif_ahb", "csi3_ahb", "ahb",
>   			   "csi3", "csi3_phy", "csi3_pix", "csi3_rdi",
>   			   "cphy_csid3" },
> @@ -883,7 +919,10 @@ static const struct camss_subdev_resources vfe_res_660[] = {
>   static const struct camss_subdev_resources csiphy_res_670[] = {
>   	/* CSIPHY0 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 42800 },
> +			{ .supply = "vdda-pll", .init_load_uA = 13900 }
> +		},
>   		.clock = { "soc_ahb", "cpas_ahb",
>   			   "csiphy0", "csiphy0_timer" },
>   		.clock_rate = { { 0 },
> @@ -901,7 +940,10 @@ static const struct camss_subdev_resources csiphy_res_670[] = {
> 
>   	/* CSIPHY1 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 42800 },
> +			{ .supply = "vdda-pll", .init_load_uA = 13900 }
> +		},
>   		.clock = { "soc_ahb", "cpas_ahb",
>   			   "csiphy1", "csiphy1_timer" },
>   		.clock_rate = { { 0 },
> @@ -919,7 +961,10 @@ static const struct camss_subdev_resources csiphy_res_670[] = {
> 
>   	/* CSIPHY2 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 42800 },
> +			{ .supply = "vdda-pll", .init_load_uA = 13900 }
> +		},
>   		.clock = { "soc_ahb", "cpas_ahb",
>   			   "csiphy2", "csiphy2_timer" },
>   		.clock_rate = { { 0 },
> @@ -1159,7 +1204,10 @@ static const struct camss_subdev_resources csiphy_res_845[] = {
>   static const struct camss_subdev_resources csid_res_845[] = {
>   	/* CSID0 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 0 },
> +			{ .supply = "vdda-pll", .init_load_uA = 0 }
> +		},
>   		.clock = { "cpas_ahb", "cphy_rx_src", "slow_ahb_src",
>   				"soc_ahb", "vfe0", "vfe0_src",
>   				"vfe0_cphy_rx", "csi0",
> @@ -1184,7 +1232,10 @@ static const struct camss_subdev_resources csid_res_845[] = {
> 
>   	/* CSID1 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 0 },
> +			{ .supply = "vdda-pll", .init_load_uA = 0 }
> +		},
>   		.clock = { "cpas_ahb", "cphy_rx_src", "slow_ahb_src",
>   				"soc_ahb", "vfe1", "vfe1_src",
>   				"vfe1_cphy_rx", "csi1",
> @@ -1209,7 +1260,10 @@ static const struct camss_subdev_resources csid_res_845[] = {
> 
>   	/* CSID2 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 0 },
> +			{ .supply = "vdda-pll", .init_load_uA = 0 }
> +		},
>   		.clock = { "cpas_ahb", "cphy_rx_src", "slow_ahb_src",
>   				"soc_ahb", "vfe_lite", "vfe_lite_src",
>   				"vfe_lite_cphy_rx", "csi2",
> @@ -1321,7 +1375,10 @@ static const struct camss_subdev_resources vfe_res_845[] = {
>   static const struct camss_subdev_resources csiphy_res_8250[] = {
>   	/* CSIPHY0 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 17500 },
> +			{ .supply = "vdda-pll", .init_load_uA = 10000 }
> +		},
>   		.clock = { "csiphy0", "csiphy0_timer" },
>   		.clock_rate = { { 400000000 },
>   				{ 300000000 } },
> @@ -1335,7 +1392,10 @@ static const struct camss_subdev_resources csiphy_res_8250[] = {
>   	},
>   	/* CSIPHY1 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 17500 },
> +			{ .supply = "vdda-pll", .init_load_uA = 10000 }
> +		},
>   		.clock = { "csiphy1", "csiphy1_timer" },
>   		.clock_rate = { { 400000000 },
>   				{ 300000000 } },
> @@ -1349,7 +1409,10 @@ static const struct camss_subdev_resources csiphy_res_8250[] = {
>   	},
>   	/* CSIPHY2 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 17500 },
> +			{ .supply = "vdda-pll", .init_load_uA = 10000 }
> +		},
>   		.clock = { "csiphy2", "csiphy2_timer" },
>   		.clock_rate = { { 400000000 },
>   				{ 300000000 } },
> @@ -1363,7 +1426,10 @@ static const struct camss_subdev_resources csiphy_res_8250[] = {
>   	},
>   	/* CSIPHY3 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 17500 },
> +			{ .supply = "vdda-pll", .init_load_uA = 10000 }
> +		},
>   		.clock = { "csiphy3", "csiphy3_timer" },
>   		.clock_rate = { { 400000000 },
>   				{ 300000000 } },
> @@ -1377,7 +1443,10 @@ static const struct camss_subdev_resources csiphy_res_8250[] = {
>   	},
>   	/* CSIPHY4 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 17500 },
> +			{ .supply = "vdda-pll", .init_load_uA = 10000 }
> +		},
>   		.clock = { "csiphy4", "csiphy4_timer" },
>   		.clock_rate = { { 400000000 },
>   				{ 300000000 } },
> @@ -1391,7 +1460,10 @@ static const struct camss_subdev_resources csiphy_res_8250[] = {
>   	},
>   	/* CSIPHY5 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 17500 },
> +			{ .supply = "vdda-pll", .init_load_uA = 10000 }
> +		},
>   		.clock = { "csiphy5", "csiphy5_timer" },
>   		.clock_rate = { { 400000000 },
>   				{ 300000000 } },
> @@ -1605,7 +1677,10 @@ static const struct resources_icc icc_res_sm8250[] = {
>   static const struct camss_subdev_resources csiphy_res_7280[] = {
>   	/* CSIPHY0 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 16100 },
> +			{ .supply = "vdda-pll", .init_load_uA = 9000 }
> +		},
> 
>   		.clock = { "csiphy0", "csiphy0_timer" },
>   		.clock_rate = { { 300000000, 400000000 },
> @@ -1620,7 +1695,10 @@ static const struct camss_subdev_resources csiphy_res_7280[] = {
>   	},
>   	/* CSIPHY1 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 16100 },
> +			{ .supply = "vdda-pll", .init_load_uA = 9000 }
> +		},
> 
>   		.clock = { "csiphy1", "csiphy1_timer" },
>   		.clock_rate = { { 300000000, 400000000 },
> @@ -1635,7 +1713,10 @@ static const struct camss_subdev_resources csiphy_res_7280[] = {
>   	},
>   	/* CSIPHY2 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 16100 },
> +			{ .supply = "vdda-pll", .init_load_uA = 9000 }
> +		},
> 
>   		.clock = { "csiphy2", "csiphy2_timer" },
>   		.clock_rate = { { 300000000, 400000000 },
> @@ -1650,7 +1731,10 @@ static const struct camss_subdev_resources csiphy_res_7280[] = {
>   	},
>   	/* CSIPHY3 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 16100 },
> +			{ .supply = "vdda-pll", .init_load_uA = 9000 }
> +		},
> 
>   		.clock = { "csiphy3", "csiphy3_timer" },
>   		.clock_rate = { { 300000000, 400000000 },
> @@ -1665,7 +1749,10 @@ static const struct camss_subdev_resources csiphy_res_7280[] = {
>   	},
>   	/* CSIPHY4 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 16100 },
> +			{ .supply = "vdda-pll", .init_load_uA = 9000 }
> +		},
> 
>   		.clock = { "csiphy4", "csiphy4_timer" },
>   		.clock_rate = { { 300000000, 400000000 },
> @@ -1978,7 +2065,10 @@ static const struct camss_subdev_resources csiphy_res_sc8280xp[] = {
>   static const struct camss_subdev_resources csid_res_sc8280xp[] = {
>   	/* CSID0 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 0 },
> +			{ .supply = "vdda-pll", .init_load_uA = 0 }
> +		},
>   		.clock = { "vfe0_csid", "vfe0_cphy_rx", "vfe0", "vfe0_axi" },
>   		.clock_rate = { { 400000000, 480000000, 600000000 },
>   				{ 0 },
> @@ -1994,7 +2084,10 @@ static const struct camss_subdev_resources csid_res_sc8280xp[] = {
>   	},
>   	/* CSID1 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 0 },
> +			{ .supply = "vdda-pll", .init_load_uA = 0 }
> +		},
>   		.clock = { "vfe1_csid", "vfe1_cphy_rx", "vfe1", "vfe1_axi" },
>   		.clock_rate = { { 400000000, 480000000, 600000000 },
>   				{ 0 },
> @@ -2010,7 +2103,10 @@ static const struct camss_subdev_resources csid_res_sc8280xp[] = {
>   	},
>   	/* CSID2 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 0 },
> +			{ .supply = "vdda-pll", .init_load_uA = 0 }
> +		},
>   		.clock = { "vfe2_csid", "vfe2_cphy_rx", "vfe2", "vfe2_axi" },
>   		.clock_rate = { { 400000000, 480000000, 600000000 },
>   				{ 0 },
> @@ -2026,7 +2122,10 @@ static const struct camss_subdev_resources csid_res_sc8280xp[] = {
>   	},
>   	/* CSID3 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 0 },
> +			{ .supply = "vdda-pll", .init_load_uA = 0 }
> +		},
>   		.clock = { "vfe3_csid", "vfe3_cphy_rx", "vfe3", "vfe3_axi" },
>   		.clock_rate = { { 400000000, 480000000, 600000000 },
>   				{ 0 },
> @@ -2042,7 +2141,10 @@ static const struct camss_subdev_resources csid_res_sc8280xp[] = {
>   	},
>   	/* CSID_LITE0 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 0 },
> +			{ .supply = "vdda-pll", .init_load_uA = 0 }
> +		},
>   		.clock = { "vfe_lite0_csid", "vfe_lite0_cphy_rx", "vfe_lite0" },
>   		.clock_rate = { { 400000000, 480000000, 600000000 },
>   				{ 0 },
> @@ -2058,7 +2160,10 @@ static const struct camss_subdev_resources csid_res_sc8280xp[] = {
>   	},
>   	/* CSID_LITE1 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 0 },
> +			{ .supply = "vdda-pll", .init_load_uA = 0 }
> +		},
>   		.clock = { "vfe_lite1_csid", "vfe_lite1_cphy_rx", "vfe_lite1" },
>   		.clock_rate = { { 400000000, 480000000, 600000000 },
>   				{ 0 },
> @@ -2074,7 +2179,10 @@ static const struct camss_subdev_resources csid_res_sc8280xp[] = {
>   	},
>   	/* CSID_LITE2 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 0 },
> +			{ .supply = "vdda-pll", .init_load_uA = 0 }
> +		},
>   		.clock = { "vfe_lite2_csid", "vfe_lite2_cphy_rx", "vfe_lite2" },
>   		.clock_rate = { { 400000000, 480000000, 600000000 },
>   				{ 0 },
> @@ -2090,7 +2198,10 @@ static const struct camss_subdev_resources csid_res_sc8280xp[] = {
>   	},
>   	/* CSID_LITE3 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 0 },
> +			{ .supply = "vdda-pll", .init_load_uA = 0 }
> +		},
>   		.clock = { "vfe_lite3_csid", "vfe_lite3_cphy_rx", "vfe_lite3" },
>   		.clock_rate = { { 400000000, 480000000, 600000000 },
>   				{ 0 },
> @@ -2291,7 +2402,10 @@ static const struct resources_icc icc_res_sc8280xp[] = {
>   static const struct camss_subdev_resources csiphy_res_8550[] = {
>   	/* CSIPHY0 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 32200 },
> +			{ .supply = "vdda-pll", .init_load_uA = 18000 }
> +		},
>   		.clock = { "csiphy0", "csiphy0_timer" },
>   		.clock_rate = { { 400000000, 480000000 },
>   				{ 400000000 } },
> @@ -2305,7 +2419,10 @@ static const struct camss_subdev_resources csiphy_res_8550[] = {
>   	},
>   	/* CSIPHY1 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 32200 },
> +			{ .supply = "vdda-pll", .init_load_uA = 18000 }
> +		},
>   		.clock = { "csiphy1", "csiphy1_timer" },
>   		.clock_rate = { { 400000000, 480000000 },
>   				{ 400000000 } },
> @@ -2319,7 +2436,10 @@ static const struct camss_subdev_resources csiphy_res_8550[] = {
>   	},
>   	/* CSIPHY2 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 32200 },
> +			{ .supply = "vdda-pll", .init_load_uA = 18000 }
> +		},
>   		.clock = { "csiphy2", "csiphy2_timer" },
>   		.clock_rate = { { 400000000, 480000000 },
>   				{ 400000000 } },
> @@ -2333,7 +2453,10 @@ static const struct camss_subdev_resources csiphy_res_8550[] = {
>   	},
>   	/* CSIPHY3 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 32200 },
> +			{ .supply = "vdda-pll", .init_load_uA = 18000 }
> +		},
>   		.clock = { "csiphy3", "csiphy3_timer" },
>   		.clock_rate = { { 400000000, 480000000 },
>   				{ 400000000 } },
> @@ -2347,7 +2470,10 @@ static const struct camss_subdev_resources csiphy_res_8550[] = {
>   	},
>   	/* CSIPHY4 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 37900 },
> +			{ .supply = "vdda-pll", .init_load_uA = 18600 }
> +		},
>   		.clock = { "csiphy4", "csiphy4_timer" },
>   		.clock_rate = { { 400000000, 480000000 },
>   				{ 400000000 } },
> @@ -2361,7 +2487,10 @@ static const struct camss_subdev_resources csiphy_res_8550[] = {
>   	},
>   	/* CSIPHY5 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 32200 },
> +			{ .supply = "vdda-pll", .init_load_uA = 18000 }
> +		},
>   		.clock = { "csiphy5", "csiphy5_timer" },
>   		.clock_rate = { { 400000000, 480000000 },
>   				{ 400000000 } },
> @@ -2375,7 +2504,10 @@ static const struct camss_subdev_resources csiphy_res_8550[] = {
>   	},
>   	/* CSIPHY6 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 37900 },
> +			{ .supply = "vdda-pll", .init_load_uA = 18600 }
> +		},
>   		.clock = { "csiphy6", "csiphy6_timer" },
>   		.clock_rate = { { 400000000, 480000000 },
>   				{ 400000000 } },
> @@ -2389,7 +2521,10 @@ static const struct camss_subdev_resources csiphy_res_8550[] = {
>   	},
>   	/* CSIPHY7 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 32200 },
> +			{ .supply = "vdda-pll", .init_load_uA = 18000 }
> +		},
>   		.clock = { "csiphy7", "csiphy7_timer" },
>   		.clock_rate = { { 400000000, 480000000 },
>   				{ 400000000 } },
> @@ -2620,7 +2755,10 @@ static const struct resources_icc icc_res_sm8550[] = {
>   static const struct camss_subdev_resources csiphy_res_8300[] = {
>   	/* CSIPHY0 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 15900 },
> +			{ .supply = "vdda-pll", .init_load_uA = 8900 }
> +		},
> 
>   		.clock = { "csiphy_rx", "csiphy0", "csiphy0_timer" },
>   		.clock_rate = {
> @@ -2638,7 +2776,10 @@ static const struct camss_subdev_resources csiphy_res_8300[] = {
>   	},
>   	/* CSIPHY1 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 15900 },
> +			{ .supply = "vdda-pll", .init_load_uA = 8900 }
> +		},
> 
>   		.clock = { "csiphy_rx", "csiphy1", "csiphy1_timer" },
>   		.clock_rate = {
> @@ -2656,7 +2797,10 @@ static const struct camss_subdev_resources csiphy_res_8300[] = {
>   	},
>   	/* CSIPHY2 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 15900 },
> +			{ .supply = "vdda-pll", .init_load_uA = 8900 }
> +		},
> 
>   		.clock = { "csiphy_rx", "csiphy2", "csiphy2_timer" },
>   		.clock_rate = {
> @@ -2677,7 +2821,10 @@ static const struct camss_subdev_resources csiphy_res_8300[] = {
>   static const struct camss_subdev_resources csiphy_res_8775p[] = {
>   	/* CSIPHY0 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 15900 },
> +			{ .supply = "vdda-pll", .init_load_uA = 8900 }
> +		},
>   		.clock = { "csiphy_rx", "csiphy0", "csiphy0_timer"},
>   		.clock_rate = {
>   			{ 400000000 },
> @@ -2694,7 +2841,10 @@ static const struct camss_subdev_resources csiphy_res_8775p[] = {
>   	},
>   	/* CSIPHY1 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 15900 },
> +			{ .supply = "vdda-pll", .init_load_uA = 8900 }
> +		},
>   		.clock = { "csiphy_rx", "csiphy1", "csiphy1_timer"},
>   		.clock_rate = {
>   			{ 400000000 },
> @@ -2711,7 +2861,10 @@ static const struct camss_subdev_resources csiphy_res_8775p[] = {
>   	},
>   	/* CSIPHY2 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 15900 },
> +			{ .supply = "vdda-pll", .init_load_uA = 8900 }
> +		},
>   		.clock = { "csiphy_rx", "csiphy2", "csiphy2_timer"},
>   		.clock_rate = {
>   			{ 400000000 },
> @@ -2728,7 +2881,10 @@ static const struct camss_subdev_resources csiphy_res_8775p[] = {
>   	},
>   	/* CSIPHY3 */
>   	{
> -		.regulators = { "vdda-phy", "vdda-pll" },
> +		.regulators = {
> +			{ .supply = "vdda-phy", .init_load_uA = 15900 },
> +			{ .supply = "vdda-pll", .init_load_uA = 8900 }
> +		},
>   		.clock = { "csiphy_rx", "csiphy3", "csiphy3_timer"},
>   		.clock_rate = {
>   			{ 400000000 },
> @@ -3081,8 +3237,10 @@ static const struct resources_icc icc_res_sa8775p[] = {
>   static const struct camss_subdev_resources csiphy_res_x1e80100[] = {
>   	/* CSIPHY0 */
>   	{
> -		.regulators = { "vdd-csiphy-0p8",
> -				"vdd-csiphy-1p2" },
> +		.regulators = {
> +			{ .supply = "vdd-csiphy-0p8", .init_load_uA = 105000 },
> +			{ .supply = "vdd-csiphy-1p2", .init_load_uA = 58900 }
> +		},
>   		.clock = { "csiphy0", "csiphy0_timer" },
>   		.clock_rate = { { 300000000, 400000000, 480000000 },
>   				{ 266666667, 400000000 } },
> @@ -3096,8 +3254,10 @@ static const struct camss_subdev_resources csiphy_res_x1e80100[] = {
>   	},
>   	/* CSIPHY1 */
>   	{
> -		.regulators = { "vdd-csiphy-0p8",
> -				"vdd-csiphy-1p2" },
> +		.regulators = {
> +			{ .supply = "vdd-csiphy-0p8", .init_load_uA = 105000 },
> +			{ .supply = "vdd-csiphy-1p2", .init_load_uA = 58900 }
> +		},
>   		.clock = { "csiphy1", "csiphy1_timer" },
>   		.clock_rate = { { 300000000, 400000000, 480000000 },
>   				{ 266666667, 400000000 } },
> @@ -3111,8 +3271,10 @@ static const struct camss_subdev_resources csiphy_res_x1e80100[] = {
>   	},
>   	/* CSIPHY2 */
>   	{
> -		.regulators = { "vdd-csiphy-0p8",
> -				"vdd-csiphy-1p2" },
> +		.regulators = {
> +			{ .supply = "vdd-csiphy-0p8", .init_load_uA = 105000 },
> +			{ .supply = "vdd-csiphy-1p2", .init_load_uA = 58900 }
> +		},
>   		.clock = { "csiphy2", "csiphy2_timer" },
>   		.clock_rate = { { 300000000, 400000000, 480000000 },
>   				{ 266666667, 400000000 } },
> @@ -3126,8 +3288,10 @@ static const struct camss_subdev_resources csiphy_res_x1e80100[] = {
>   	},
>   	/* CSIPHY4 */
>   	{
> -		.regulators = { "vdd-csiphy-0p8",
> -				"vdd-csiphy-1p2" },
> +		.regulators = {
> +			{ .supply = "vdd-csiphy-0p8", .init_load_uA = 105000 },
> +			{ .supply = "vdd-csiphy-1p2", .init_load_uA = 58900 }
> +		},
>   		.clock = { "csiphy4", "csiphy4_timer" },
>   		.clock_rate = { { 300000000, 400000000, 480000000 },
>   				{ 266666667, 400000000 } },
> diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/platform/qcom/camss/camss.h
> index a70fbc78ccc3..3d5095158338 100644
> --- a/drivers/media/platform/qcom/camss/camss.h
> +++ b/drivers/media/platform/qcom/camss/camss.h
> @@ -43,7 +43,7 @@
>   #define CAMSS_RES_MAX 17
> 
>   struct camss_subdev_resources {
> -	char *regulators[CAMSS_RES_MAX];
> +	struct regulator_bulk_data 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];
> --
> 2.34.1
> 
> 

Wenmeng.

Could you do a v4 of this patch please add add

- MSM8939
- SM8650

to the list of init_load_uA currents ?

https://gitlab.freedesktop.org/linux-media/users/bodonoghue/-/tree/next-6.19?ref_type=heads

Rather than gate the two above SoCs I think it is more appropriate to 
apply those patches and re-up this.

---
bod

  reply	other threads:[~2025-11-03 10:45 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <IuFM40eMljHXycV-ScfwhLDKad31Nxa584Rqcfej5infS4sstQsB4cOhwYnnBB6TkJzon7ryQip1xCRGvhtfJA==@protonmail.internalid>
2025-09-12 10:36 ` [PATCH v3] media: qcom: camss: Add support for regulator init_load_uA in CSIPHY Wenmeng Liu
2025-11-03 10:45   ` Bryan O'Donoghue [this message]
2025-11-14  8:29     ` Wenmeng Liu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e13632e8-e845-41e7-a423-299f987ca73d@kernel.org \
    --to=bod@kernel.org \
    --cc=bryan.odonoghue@linaro.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=rfoss@kernel.org \
    --cc=todor.too@gmail.com \
    --cc=vladimir.zapolskiy@linaro.org \
    --cc=wenmeng.liu@oss.qualcomm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).