devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH 0/3] Add current load setting for qcom camss csiphy
@ 2025-06-20  4:07 Wenmeng Liu
  2025-06-20  4:07 ` [RFC PATCH 1/3] media: dt-bindings: Add regulator current load Wenmeng Liu
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Wenmeng Liu @ 2025-06-20  4:07 UTC (permalink / raw)
  To: rfoss, todor.too, bryan.odonoghue, mchehab, robh, krzk+dt,
	conor+dt, andersson, konradybcio, akapatra, hariramp
  Cc: linux-media, linux-arm-msm, devicetree, linux-kernel,
	quic_svankada, quic_depengs, quic_vikramsa, quic_wenmliu

Currently qcom camss csiphy drivers don’t set regulator’s currents
load properly using Linux regulator framework. This causes every 
regulator’s initial mode set as HPM (high current mode), 
which may have higher power consumption.
To address this issue, add current configuration for CSIPHY.

Wenmeng Liu (3):
  media: dt-bindings: Add regulator current load
  media: qcom: camss: csiphy: Add regulator current load setting
  arm64: dts: qcom: qcs6490-rb3gen2: Add csiphy current support

 .../bindings/media/qcom,sc7280-camss.yaml     |  6 ++++
 .../qcs6490-rb3gen2-vision-mezzanine.dtso     |  1 +
 .../media/platform/qcom/camss/camss-csiphy.c  | 29 +++++++++++++++++++
 .../media/platform/qcom/camss/camss-csiphy.h  |  1 +
 4 files changed, 37 insertions(+)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [RFC PATCH 1/3] media: dt-bindings: Add regulator current load
  2025-06-20  4:07 [RFC PATCH 0/3] Add current load setting for qcom camss csiphy Wenmeng Liu
@ 2025-06-20  4:07 ` Wenmeng Liu
  2025-06-20  8:35   ` Krzysztof Kozlowski
  2025-06-20  4:07 ` [RFC PATCH 2/3] media: qcom: camss: csiphy: Add regulator current load setting Wenmeng Liu
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 8+ messages in thread
From: Wenmeng Liu @ 2025-06-20  4:07 UTC (permalink / raw)
  To: rfoss, todor.too, bryan.odonoghue, mchehab, robh, krzk+dt,
	conor+dt, andersson, konradybcio, akapatra, hariramp
  Cc: linux-media, linux-arm-msm, devicetree, linux-kernel,
	quic_svankada, quic_depengs, quic_vikramsa, quic_wenmliu

Add regulator current load support for vdda-phy vdda-pll.

Signed-off-by: Wenmeng Liu <quic_wenmliu@quicinc.com>
---
 .../devicetree/bindings/media/qcom,sc7280-camss.yaml        | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/Documentation/devicetree/bindings/media/qcom,sc7280-camss.yaml b/Documentation/devicetree/bindings/media/qcom,sc7280-camss.yaml
index ee35e3bc97ff..a1ae4701d178 100644
--- a/Documentation/devicetree/bindings/media/qcom,sc7280-camss.yaml
+++ b/Documentation/devicetree/bindings/media/qcom,sc7280-camss.yaml
@@ -131,6 +131,12 @@ properties:
     description:
       Phandle to 1.8V regulator supply to PHY refclk pll block.
 
+  regulator-load-current:
+    $ref: /schemas/types.yaml#/definitions/uint32-array
+    description: |
+      Specifies the load current (in microamperes) for the regulators used by the device.
+      The first value corresponds to vdda-phy, and the second to vdda-pll.
+
   ports:
     $ref: /schemas/graph.yaml#/properties/ports
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [RFC PATCH 2/3] media: qcom: camss: csiphy: Add regulator current load setting
  2025-06-20  4:07 [RFC PATCH 0/3] Add current load setting for qcom camss csiphy Wenmeng Liu
  2025-06-20  4:07 ` [RFC PATCH 1/3] media: dt-bindings: Add regulator current load Wenmeng Liu
@ 2025-06-20  4:07 ` Wenmeng Liu
  2025-06-20  4:07 ` [RFC PATCH 3/3] arm64: dts: qcom: qcs6490-rb3gen2: Add csiphy current support Wenmeng Liu
  2025-06-20  8:23 ` [RFC PATCH 0/3] Add current load setting for qcom camss csiphy Bryan O'Donoghue
  3 siblings, 0 replies; 8+ messages in thread
From: Wenmeng Liu @ 2025-06-20  4:07 UTC (permalink / raw)
  To: rfoss, todor.too, bryan.odonoghue, mchehab, robh, krzk+dt,
	conor+dt, andersson, konradybcio, akapatra, hariramp
  Cc: linux-media, linux-arm-msm, devicetree, linux-kernel,
	quic_svankada, quic_depengs, quic_vikramsa, quic_wenmliu

Add support for current load in csiphy.

Signed-off-by: Wenmeng Liu <quic_wenmliu@quicinc.com>
---
 .../media/platform/qcom/camss/camss-csiphy.c  | 29 +++++++++++++++++++
 .../media/platform/qcom/camss/camss-csiphy.h  |  1 +
 2 files changed, 30 insertions(+)

diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/media/platform/qcom/camss/camss-csiphy.c
index c622efcc92ff..c3069e8a6b62 100644
--- a/drivers/media/platform/qcom/camss/camss-csiphy.c
+++ b/drivers/media/platform/qcom/camss/camss-csiphy.c
@@ -209,6 +209,7 @@ static int csiphy_set_power(struct v4l2_subdev *sd, int on)
 {
 	struct csiphy_device *csiphy = v4l2_get_subdevdata(sd);
 	struct device *dev = csiphy->camss->dev;
+	int i;
 
 	if (on) {
 		int ret;
@@ -217,6 +218,15 @@ static int csiphy_set_power(struct v4l2_subdev *sd, int on)
 		if (ret < 0)
 			return ret;
 
+		if (csiphy->load_currents) {
+			for (i = 0; i < csiphy->num_supplies; i++) {
+				ret = regulator_set_load(csiphy->supplies[i].consumer,
+							 csiphy->load_currents[i]);
+			if (ret)
+				return ret;
+			}
+		}
+
 		ret = regulator_bulk_enable(csiphy->num_supplies,
 					    csiphy->supplies);
 		if (ret < 0) {
@@ -250,6 +260,11 @@ static int csiphy_set_power(struct v4l2_subdev *sd, int on)
 
 		camss_disable_clocks(csiphy->nclocks, csiphy->clock);
 
+		if (csiphy->load_currents) {
+			for (i = 0; i < csiphy->num_supplies; i++)
+				regulator_set_load(csiphy->supplies[i].consumer, 0);
+		}
+
 		regulator_bulk_disable(csiphy->num_supplies, csiphy->supplies);
 
 		pm_runtime_put_sync(dev);
@@ -717,6 +732,20 @@ int msm_csiphy_subdev_init(struct camss *camss,
 
 	ret = devm_regulator_bulk_get(camss->dev, csiphy->num_supplies,
 				      csiphy->supplies);
+
+	if (device_property_present(camss->dev, "regulator-load-current")) {
+		csiphy->load_currents = kcalloc(csiphy->num_supplies, sizeof(u32), GFP_KERNEL);
+		if (!csiphy->load_currents)
+			return -ENOMEM;
+
+		ret = device_property_read_u32_array(camss->dev,
+						     "regulator-load-current",
+						     csiphy->load_currents,
+						     csiphy->num_supplies);
+		for (i = 0; i < csiphy->num_supplies; i++)
+			regulator_set_load(csiphy->supplies[i].consumer, 0);
+	}
+
 	return ret;
 }
 
diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.h b/drivers/media/platform/qcom/camss/camss-csiphy.h
index ab91273303b9..74ebfc67a375 100644
--- a/drivers/media/platform/qcom/camss/camss-csiphy.h
+++ b/drivers/media/platform/qcom/camss/camss-csiphy.h
@@ -106,6 +106,7 @@ struct csiphy_device {
 	int nclocks;
 	u32 timer_clk_rate;
 	struct regulator_bulk_data *supplies;
+	u32 *load_currents;
 	int num_supplies;
 	struct csiphy_config cfg;
 	struct v4l2_mbus_framefmt fmt[MSM_CSIPHY_PADS_NUM];
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [RFC PATCH 3/3] arm64: dts: qcom: qcs6490-rb3gen2: Add csiphy current support
  2025-06-20  4:07 [RFC PATCH 0/3] Add current load setting for qcom camss csiphy Wenmeng Liu
  2025-06-20  4:07 ` [RFC PATCH 1/3] media: dt-bindings: Add regulator current load Wenmeng Liu
  2025-06-20  4:07 ` [RFC PATCH 2/3] media: qcom: camss: csiphy: Add regulator current load setting Wenmeng Liu
@ 2025-06-20  4:07 ` Wenmeng Liu
  2025-06-20  8:33   ` Krzysztof Kozlowski
  2025-06-20  8:23 ` [RFC PATCH 0/3] Add current load setting for qcom camss csiphy Bryan O'Donoghue
  3 siblings, 1 reply; 8+ messages in thread
From: Wenmeng Liu @ 2025-06-20  4:07 UTC (permalink / raw)
  To: rfoss, todor.too, bryan.odonoghue, mchehab, robh, krzk+dt,
	conor+dt, andersson, konradybcio, akapatra, hariramp
  Cc: linux-media, linux-arm-msm, devicetree, linux-kernel,
	quic_svankada, quic_depengs, quic_vikramsa, quic_wenmliu

Add csiphy current value to support csiphy current load setting.

Signed-off-by: Wenmeng Liu <quic_wenmliu@quicinc.com>
---
 arch/arm64/boot/dts/qcom/qcs6490-rb3gen2-vision-mezzanine.dtso | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2-vision-mezzanine.dtso b/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2-vision-mezzanine.dtso
index b9e4a5214f70..60e7d46db394 100644
--- a/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2-vision-mezzanine.dtso
+++ b/arch/arm64/boot/dts/qcom/qcs6490-rb3gen2-vision-mezzanine.dtso
@@ -16,6 +16,7 @@
 &camss {
 	vdda-phy-supply = <&vreg_l10c_0p88>;
 	vdda-pll-supply = <&vreg_l6b_1p2>;
+	regulator-load-current = <54000 96400>;
 
 	status = "okay";
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [RFC PATCH 0/3] Add current load setting for qcom camss csiphy
  2025-06-20  4:07 [RFC PATCH 0/3] Add current load setting for qcom camss csiphy Wenmeng Liu
                   ` (2 preceding siblings ...)
  2025-06-20  4:07 ` [RFC PATCH 3/3] arm64: dts: qcom: qcs6490-rb3gen2: Add csiphy current support Wenmeng Liu
@ 2025-06-20  8:23 ` Bryan O'Donoghue
  2025-06-27  9:34   ` Wenmeng Liu
  3 siblings, 1 reply; 8+ messages in thread
From: Bryan O'Donoghue @ 2025-06-20  8:23 UTC (permalink / raw)
  To: Wenmeng Liu, rfoss, todor.too, mchehab, robh, krzk+dt, conor+dt,
	andersson, konradybcio, akapatra, hariramp
  Cc: linux-media, linux-arm-msm, devicetree, linux-kernel,
	quic_svankada, quic_depengs, quic_vikramsa

On 20/06/2025 05:07, Wenmeng Liu wrote:
> Currently qcom camss csiphy drivers don’t set regulator’s currents
> load properly using Linux regulator framework. This causes every
> regulator’s initial mode set as HPM (high current mode),
> which may have higher power consumption.
> To address this issue, add current configuration for CSIPHY.
> 
> Wenmeng Liu (3):
>    media: dt-bindings: Add regulator current load
>    media: qcom: camss: csiphy: Add regulator current load setting
>    arm64: dts: qcom: qcs6490-rb3gen2: Add csiphy current support
> 
>   .../bindings/media/qcom,sc7280-camss.yaml     |  6 ++++
>   .../qcs6490-rb3gen2-vision-mezzanine.dtso     |  1 +
>   .../media/platform/qcom/camss/camss-csiphy.c  | 29 +++++++++++++++++++
>   .../media/platform/qcom/camss/camss-csiphy.h  |  1 +
>   4 files changed, 37 insertions(+)
> 

How are these load-currents determined ?

Looking at other instances of setting current for PHYs

  grep -r regulator_set_load * | grep com 
  
            [git:camss-bugfix-6.17] ✖
drivers/phy/qualcomm/phy-qcom-edp.c:	ret = 
regulator_set_load(edp->supplies[0].consumer, 21800); /* 1.2 V vdda-phy */
drivers/phy/qualcomm/phy-qcom-edp.c:	ret = 
regulator_set_load(edp->supplies[1].consumer, 36000); /* 0.9 V vdda-pll */
drivers/phy/qualcomm/phy-qcom-usb-hs.c:	ret = 
regulator_set_load(uphy->v1p8, 50000);
drivers/phy/qualcomm/phy-qcom-usb-hs.c:	ret = 
regulator_set_load(uphy->v3p3, 50000);
drivers/phy/qualcomm/phy-qcom-usb-hs-28nm.c:	ret = 
regulator_set_load(priv->vregs[VDDA_1P8].consumer, 19000);
drivers/phy/qualcomm/phy-qcom-usb-hs-28nm.c:	ret = 
regulator_set_load(priv->vregs[VDDA_3P3].consumer, 16000);
drivers/phy/qualcomm/phy-qcom-usb-hs-28nm.c: 
regulator_set_load(priv->vregs[VDDA_1P8].consumer, 0);
drivers/phy/qualcomm/phy-qcom-qmp-combo.c:		ret = 
regulator_set_load(qmp->vregs[i].consumer,
drivers/remoteproc/qcom_q6v5_pas.c:		regulator_set_load(adsp->cx_supply, 
100000);
drivers/remoteproc/qcom_wcnss.c:			regulator_set_load(bulk[i].consumer, 
info[i].load_uA);
drivers/remoteproc/qcom_wcnss_iris.c:		 
regulator_set_load(iris->vregs[i].consumer,
drivers/remoteproc/qcom_q6v5_mss.c:			ret = regulator_set_load(regs[i].reg,
drivers/remoteproc/qcom_q6v5_mss.c:			regulator_set_load(regs[i].reg, 0);
drivers/remoteproc/qcom_q6v5_mss.c:			regulator_set_load(regs[i].reg, 0);
drivers/remoteproc/qcom_q6v5_wcss.c:	regulator_set_load(wcss->cx_supply, 
100000);

I think this is the type of thing we should bury in SoC resources not in DT.

I can think of how we might want to change the current depending on the 
pixel rate.. but then I think that is something we could calculate based 
on pixel rate with descriptions as a base in

driver/media/platfrom/qcom/camss/camss.c::static const struct 
camss_subdev_resources csiphy_res_SoCNumber[];

---
bod

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC PATCH 3/3] arm64: dts: qcom: qcs6490-rb3gen2: Add csiphy current support
  2025-06-20  4:07 ` [RFC PATCH 3/3] arm64: dts: qcom: qcs6490-rb3gen2: Add csiphy current support Wenmeng Liu
@ 2025-06-20  8:33   ` Krzysztof Kozlowski
  0 siblings, 0 replies; 8+ messages in thread
From: Krzysztof Kozlowski @ 2025-06-20  8:33 UTC (permalink / raw)
  To: Wenmeng Liu, rfoss, todor.too, bryan.odonoghue, mchehab, robh,
	krzk+dt, conor+dt, andersson, konradybcio, akapatra, hariramp
  Cc: linux-media, linux-arm-msm, devicetree, linux-kernel,
	quic_svankada, quic_depengs, quic_vikramsa

On 20/06/2025 06:07, Wenmeng Liu wrote:
> Add csiphy current value to support csiphy current load setting.

Why? Why doing this? Why is this needed?

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC PATCH 1/3] media: dt-bindings: Add regulator current load
  2025-06-20  4:07 ` [RFC PATCH 1/3] media: dt-bindings: Add regulator current load Wenmeng Liu
@ 2025-06-20  8:35   ` Krzysztof Kozlowski
  0 siblings, 0 replies; 8+ messages in thread
From: Krzysztof Kozlowski @ 2025-06-20  8:35 UTC (permalink / raw)
  To: Wenmeng Liu, rfoss, todor.too, bryan.odonoghue, mchehab, robh,
	krzk+dt, conor+dt, andersson, konradybcio, akapatra, hariramp
  Cc: linux-media, linux-arm-msm, devicetree, linux-kernel,
	quic_svankada, quic_depengs, quic_vikramsa

On 20/06/2025 06:07, Wenmeng Liu wrote:
> Add regulator current load support for vdda-phy vdda-pll.
> 
> Signed-off-by: Wenmeng Liu <quic_wenmliu@quicinc.com>
> ---
>  .../devicetree/bindings/media/qcom,sc7280-camss.yaml        | 6 ++++++
>  1 file changed, 6 insertions(+)
> 

This patch fails on so many levels... do internal reviews first.

Use existing properties, see regulators. If not, use existing unit
suffixes. Otherwise it is just another downstream property you send us,
to which we responded many times - don't.

Please use subject prefixes matching the subsystem. You can get them for
example with `git log --oneline -- DIRECTORY_OR_FILE` on the directory
your patch is touching. For bindings, the preferred subjects are
explained here:
https://www.kernel.org/doc/html/latest/devicetree/bindings/submitting-patches.html#i-for-patch-submitters

Read meeting notes from internal discussions where you discussed this
already.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [RFC PATCH 0/3] Add current load setting for qcom camss csiphy
  2025-06-20  8:23 ` [RFC PATCH 0/3] Add current load setting for qcom camss csiphy Bryan O'Donoghue
@ 2025-06-27  9:34   ` Wenmeng Liu
  0 siblings, 0 replies; 8+ messages in thread
From: Wenmeng Liu @ 2025-06-27  9:34 UTC (permalink / raw)
  To: Bryan O'Donoghue, rfoss, todor.too, mchehab, robh, krzk+dt,
	conor+dt, andersson, konradybcio, akapatra, hariramp
  Cc: linux-media, linux-arm-msm, devicetree, linux-kernel,
	quic_svankada, quic_depengs, quic_vikramsa



On 2025/6/20 16:23, Bryan O'Donoghue wrote:
> On 20/06/2025 05:07, Wenmeng Liu wrote:
>> Currently qcom camss csiphy drivers don’t set regulator’s currents
>> load properly using Linux regulator framework. This causes every
>> regulator’s initial mode set as HPM (high current mode),
>> which may have higher power consumption.
>> To address this issue, add current configuration for CSIPHY.
>>
>> Wenmeng Liu (3):
>>    media: dt-bindings: Add regulator current load
>>    media: qcom: camss: csiphy: Add regulator current load setting
>>    arm64: dts: qcom: qcs6490-rb3gen2: Add csiphy current support
>>
>>   .../bindings/media/qcom,sc7280-camss.yaml     |  6 ++++
>>   .../qcs6490-rb3gen2-vision-mezzanine.dtso     |  1 +
>>   .../media/platform/qcom/camss/camss-csiphy.c  | 29 +++++++++++++++++++
>>   .../media/platform/qcom/camss/camss-csiphy.h  |  1 +
>>   4 files changed, 37 insertions(+)
>>
> 
> How are these load-currents determined ?

According to my discussion with hw colleague,current value is decided 
based on post silicon calibration, this value is fixed for the 
corresponding chip.

> Looking at other instances of setting current for PHYs
> 
>   grep -r regulator_set_load * | grep com
>             [git:camss-bugfix-6.17] ✖
> drivers/phy/qualcomm/phy-qcom-edp.c:    ret = regulator_set_load(edp- 
>  >supplies[0].consumer, 21800); /* 1.2 V vdda-phy */
> drivers/phy/qualcomm/phy-qcom-edp.c:    ret = regulator_set_load(edp- 
>  >supplies[1].consumer, 36000); /* 0.9 V vdda-pll */
> drivers/phy/qualcomm/phy-qcom-usb-hs.c:    ret = 
> regulator_set_load(uphy->v1p8, 50000);
> drivers/phy/qualcomm/phy-qcom-usb-hs.c:    ret = 
> regulator_set_load(uphy->v3p3, 50000);
> drivers/phy/qualcomm/phy-qcom-usb-hs-28nm.c:    ret = 
> regulator_set_load(priv->vregs[VDDA_1P8].consumer, 19000);
> drivers/phy/qualcomm/phy-qcom-usb-hs-28nm.c:    ret = 
> regulator_set_load(priv->vregs[VDDA_3P3].consumer, 16000);
> drivers/phy/qualcomm/phy-qcom-usb-hs-28nm.c: regulator_set_load(priv- 
>  >vregs[VDDA_1P8].consumer, 0);
> drivers/phy/qualcomm/phy-qcom-qmp-combo.c:        ret = 
> regulator_set_load(qmp->vregs[i].consumer,
> drivers/remoteproc/qcom_q6v5_pas.c:        regulator_set_load(adsp- 
>  >cx_supply, 100000);
> drivers/remoteproc/qcom_wcnss.c:            
> regulator_set_load(bulk[i].consumer, info[i].load_uA);
> drivers/remoteproc/qcom_wcnss_iris.c: regulator_set_load(iris- 
>  >vregs[i].consumer,
> drivers/remoteproc/qcom_q6v5_mss.c:            ret = 
> regulator_set_load(regs[i].reg,
> drivers/remoteproc/qcom_q6v5_mss.c:            
> regulator_set_load(regs[i].reg, 0);
> drivers/remoteproc/qcom_q6v5_mss.c:            
> regulator_set_load(regs[i].reg, 0);
> drivers/remoteproc/qcom_q6v5_wcss.c:    regulator_set_load(wcss- 
>  >cx_supply, 100000);
> 
> I think this is the type of thing we should bury in SoC resources not in 
> DT.
> 
> I can think of how we might want to change the current depending on the 
> pixel rate.. but then I think that is something we could calculate based 
> on pixel rate with descriptions as a base in
> 
> driver/media/platfrom/qcom/camss/camss.c::static const struct 
> camss_subdev_resources csiphy_res_SoCNumber[];
> 
> ---
> bod
> 

Yes, it's more common to put the current value in the code.Will be 
updated in v2.

Thanks,
Wenmeng


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2025-06-27  9:34 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-20  4:07 [RFC PATCH 0/3] Add current load setting for qcom camss csiphy Wenmeng Liu
2025-06-20  4:07 ` [RFC PATCH 1/3] media: dt-bindings: Add regulator current load Wenmeng Liu
2025-06-20  8:35   ` Krzysztof Kozlowski
2025-06-20  4:07 ` [RFC PATCH 2/3] media: qcom: camss: csiphy: Add regulator current load setting Wenmeng Liu
2025-06-20  4:07 ` [RFC PATCH 3/3] arm64: dts: qcom: qcs6490-rb3gen2: Add csiphy current support Wenmeng Liu
2025-06-20  8:33   ` Krzysztof Kozlowski
2025-06-20  8:23 ` [RFC PATCH 0/3] Add current load setting for qcom camss csiphy Bryan O'Donoghue
2025-06-27  9:34   ` Wenmeng Liu

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).