[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250620040736.3032667-3-quic_wenmliu@quicinc.com>
Date: Fri, 20 Jun 2025 12:07:35 +0800
From: Wenmeng Liu <quic_wenmliu@...cinc.com>
To: <rfoss@...nel.org>, <todor.too@...il.com>, <bryan.odonoghue@...aro.org>,
<mchehab@...nel.org>, <robh@...nel.org>, <krzk+dt@...nel.org>,
<conor+dt@...nel.org>, <andersson@...nel.org>,
<konradybcio@...nel.org>, <akapatra@...cinc.com>,
<hariramp@...cinc.com>
CC: <linux-media@...r.kernel.org>, <linux-arm-msm@...r.kernel.org>,
<devicetree@...r.kernel.org>, <linux-kernel@...r.kernel.org>,
<quic_svankada@...cinc.com>, <quic_depengs@...cinc.com>,
<quic_vikramsa@...cinc.com>, <quic_wenmliu@...cinc.com>
Subject: [RFC PATCH 2/3] media: qcom: camss: csiphy: Add regulator current load setting
Add support for current load in csiphy.
Signed-off-by: Wenmeng Liu <quic_wenmliu@...cinc.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
Powered by blists - more mailing lists