linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Cristian Marussi <cristian.marussi@arm.com>
To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org
Cc: sudeep.holla@arm.com, lukasz.luba@arm.com,
	james.quinlan@broadcom.com, Jonathan.Cameron@Huawei.com,
	f.fainelli@gmail.com, etienne.carriere@linaro.org,
	thara.gopinath@linaro.org, vincent.guittot@linaro.org,
	souvik.chakravarty@arm.com, cristian.marussi@arm.com
Subject: [PATCH v5 28/36] regulator: scmi: port driver to the new scmi_voltage_proto_ops interface
Date: Tue, 12 Jan 2021 19:20:10 +0000	[thread overview]
Message-ID: <20210112192018.34994-29-cristian.marussi@arm.com> (raw)
In-Reply-To: <20210112192018.34994-1-cristian.marussi@arm.com>

Port driver to the new SCMI Voltage interface based on protocol handles
and common devm_get_ops().

Signed-off-by: Cristian Marussi <cristian.marussi@arm.com>
---
v4 --> v5
- using renamed devm_get/put_protocol
---
 drivers/regulator/scmi-regulator.c | 40 ++++++++++++++++--------------
 1 file changed, 22 insertions(+), 18 deletions(-)

diff --git a/drivers/regulator/scmi-regulator.c b/drivers/regulator/scmi-regulator.c
index 0e8b3caa8146..9a4297276098 100644
--- a/drivers/regulator/scmi-regulator.c
+++ b/drivers/regulator/scmi-regulator.c
@@ -33,9 +33,12 @@
 #include <linux/slab.h>
 #include <linux/types.h>
 
+static const struct scmi_voltage_proto_ops *voltage_ops;
+
 struct scmi_regulator {
 	u32 id;
 	struct scmi_device *sdev;
+	struct scmi_protocol_handle *ph;
 	struct regulator_dev *rdev;
 	struct device_node *of_node;
 	struct regulator_desc desc;
@@ -50,19 +53,17 @@ struct scmi_regulator_info {
 static int scmi_reg_enable(struct regulator_dev *rdev)
 {
 	struct scmi_regulator *sreg = rdev_get_drvdata(rdev);
-	const struct scmi_handle *handle = sreg->sdev->handle;
 
-	return handle->voltage_ops->config_set(handle, sreg->id,
-					       SCMI_VOLTAGE_ARCH_STATE_ON);
+	return voltage_ops->config_set(sreg->ph, sreg->id,
+				       SCMI_VOLTAGE_ARCH_STATE_ON);
 }
 
 static int scmi_reg_disable(struct regulator_dev *rdev)
 {
 	struct scmi_regulator *sreg = rdev_get_drvdata(rdev);
-	const struct scmi_handle *handle = sreg->sdev->handle;
 
-	return handle->voltage_ops->config_set(handle, sreg->id,
-					       SCMI_VOLTAGE_ARCH_STATE_OFF);
+	return voltage_ops->config_set(sreg->ph, sreg->id,
+				       SCMI_VOLTAGE_ARCH_STATE_OFF);
 }
 
 static int scmi_reg_is_enabled(struct regulator_dev *rdev)
@@ -70,10 +71,8 @@ static int scmi_reg_is_enabled(struct regulator_dev *rdev)
 	int ret;
 	u32 config;
 	struct scmi_regulator *sreg = rdev_get_drvdata(rdev);
-	const struct scmi_handle *handle = sreg->sdev->handle;
 
-	ret = handle->voltage_ops->config_get(handle, sreg->id,
-					      &config);
+	ret = voltage_ops->config_get(sreg->ph, sreg->id, &config);
 	if (ret) {
 		dev_err(&sreg->sdev->dev,
 			"Error %d reading regulator %s status.\n",
@@ -89,9 +88,8 @@ static int scmi_reg_get_voltage_sel(struct regulator_dev *rdev)
 	int ret;
 	s32 volt_uV;
 	struct scmi_regulator *sreg = rdev_get_drvdata(rdev);
-	const struct scmi_handle *handle = sreg->sdev->handle;
 
-	ret = handle->voltage_ops->level_get(handle, sreg->id, &volt_uV);
+	ret = voltage_ops->level_get(sreg->ph, sreg->id, &volt_uV);
 	if (ret)
 		return ret;
 
@@ -103,13 +101,12 @@ static int scmi_reg_set_voltage_sel(struct regulator_dev *rdev,
 {
 	s32 volt_uV;
 	struct scmi_regulator *sreg = rdev_get_drvdata(rdev);
-	const struct scmi_handle *handle = sreg->sdev->handle;
 
 	volt_uV = sreg->desc.ops->list_voltage(rdev, selector);
 	if (volt_uV <= 0)
 		return -EINVAL;
 
-	return handle->voltage_ops->level_set(handle, sreg->id, 0x0, volt_uV);
+	return voltage_ops->level_set(sreg->ph, sreg->id, 0x0, volt_uV);
 }
 
 static const struct regulator_ops scmi_reg_fixed_ops = {
@@ -204,11 +201,10 @@ scmi_config_discrete_regulator_mappings(struct scmi_regulator *sreg,
 static int scmi_regulator_common_init(struct scmi_regulator *sreg)
 {
 	int ret;
-	const struct scmi_handle *handle = sreg->sdev->handle;
 	struct device *dev = &sreg->sdev->dev;
 	const struct scmi_voltage_info *vinfo;
 
-	vinfo = handle->voltage_ops->info_get(handle, sreg->id);
+	vinfo = voltage_ops->info_get(sreg->ph, sreg->id);
 	if (!vinfo) {
 		dev_warn(dev, "Failure to get voltage domain %d\n",
 			 sreg->id);
@@ -257,6 +253,7 @@ static int scmi_regulator_common_init(struct scmi_regulator *sreg)
 }
 
 static int process_scmi_regulator_of_node(struct scmi_device *sdev,
+					  struct scmi_protocol_handle *ph,
 					  struct device_node *np,
 					  struct scmi_regulator_info *rinfo)
 {
@@ -284,6 +281,7 @@ static int process_scmi_regulator_of_node(struct scmi_device *sdev,
 
 	rinfo->sregv[dom]->id = dom;
 	rinfo->sregv[dom]->sdev = sdev;
+	rinfo->sregv[dom]->ph = ph;
 
 	/* get hold of good nodes */
 	of_node_get(np);
@@ -302,11 +300,17 @@ static int scmi_regulator_probe(struct scmi_device *sdev)
 	struct device_node *np, *child;
 	const struct scmi_handle *handle = sdev->handle;
 	struct scmi_regulator_info *rinfo;
+	struct scmi_protocol_handle *ph;
 
-	if (!handle || !handle->voltage_ops)
+	if (!handle)
 		return -ENODEV;
 
-	num_doms = handle->voltage_ops->num_domains_get(handle);
+	voltage_ops = handle->devm_get_protocol(sdev,
+						SCMI_PROTOCOL_VOLTAGE, &ph);
+	if (IS_ERR(voltage_ops))
+		return PTR_ERR(voltage_ops);
+
+	num_doms = voltage_ops->num_domains_get(ph);
 	if (num_doms <= 0) {
 		if (!num_doms) {
 			dev_err(&sdev->dev,
@@ -341,7 +345,7 @@ static int scmi_regulator_probe(struct scmi_device *sdev)
 	 */
 	np = of_find_node_by_name(handle->dev->of_node, "regulators");
 	for_each_child_of_node(np, child) {
-		ret = process_scmi_regulator_of_node(sdev, child, rinfo);
+		ret = process_scmi_regulator_of_node(sdev, ph, child, rinfo);
 		/* abort on any mem issue */
 		if (ret == -ENOMEM)
 			return ret;
-- 
2.17.1


  parent reply	other threads:[~2021-01-12 19:23 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-12 19:19 [PATCH v5 0/36] SCMI vendor protocols and modularization Cristian Marussi
2021-01-12 19:19 ` [PATCH v5 01/36] firmware: arm_scmi: review protocol registration interface Cristian Marussi
2021-01-12 19:19 ` [PATCH v5 02/36] firmware: arm_scmi: introduce protocol handle definitions Cristian Marussi
2021-01-12 19:19 ` [PATCH v5 03/36] firmware: arm_scmi: introduce devres get/put protocols operations Cristian Marussi
2021-01-12 19:19 ` [PATCH v5 04/36] firmware: arm_scmi: make notifications aware of protocols users Cristian Marussi
2021-01-12 19:19 ` [PATCH v5 05/36] firmware: arm_scmi: introduce new devres notification ops Cristian Marussi
2021-01-12 19:19 ` [PATCH v5 06/36] firmware: arm_scmi: refactor events registration Cristian Marussi
2021-01-12 19:19 ` [PATCH v5 07/36] firmware: arm_scmi: convert events registration to protocol handles Cristian Marussi
2021-01-12 19:19 ` [PATCH v5 08/36] firmware: arm_scmi: add new protocol handle core xfer ops Cristian Marussi
2021-01-12 19:19 ` [PATCH v5 09/36] firmware: arm_scmi: add helper to access revision area memory Cristian Marussi
2021-01-12 19:19 ` [PATCH v5 10/36] firmware: arm_scmi: port Base protocol to new interface Cristian Marussi
2021-01-12 19:19 ` [PATCH v5 11/36] firmware: arm_scmi: port Perf protocol to new protocols interface Cristian Marussi
2021-01-12 19:19 ` [PATCH v5 12/36] cpufreq: scmi: port driver to the new scmi_perf_proto_ops interface Cristian Marussi
2021-01-12 19:19 ` [PATCH v5 13/36] firmware: arm_scmi: remove legacy scmi_perf_ops protocol interface Cristian Marussi
2021-01-12 19:19 ` [PATCH v5 14/36] firmware: arm_scmi: port Power protocol to new protocols interface Cristian Marussi
2021-01-12 19:19 ` [PATCH v5 15/36] firmware: arm_scmi: port GenPD driver to the new scmi_power_proto_ops interface Cristian Marussi
2021-01-12 19:19 ` [PATCH v5 16/36] firmware: arm_scmi: remove legacy scmi_power_ops protocol interface Cristian Marussi
2021-01-12 19:19 ` [PATCH v5 17/36] firmware: arm_scmi: port Clock protocol to new protocols interface Cristian Marussi
2021-01-12 19:20 ` [PATCH v5 18/36] clk: scmi: port driver to the new scmi_clk_proto_ops interface Cristian Marussi
2021-01-12 19:20 ` [PATCH v5 19/36] firmware: arm_scmi: remove legacy scmi_clk_ops protocol interface Cristian Marussi
2021-01-12 19:20 ` [PATCH v5 20/36] firmware: arm_scmi: port Reset protocol to new protocols interface Cristian Marussi
2021-01-12 19:20 ` [PATCH v5 21/36] reset: reset-scmi: port driver to the new scmi_reset_proto_ops interface Cristian Marussi
2021-01-12 19:20 ` [PATCH v5 22/36] firmware: arm_scmi: remove legacy scmi_reset_ops protocol interface Cristian Marussi
2021-01-12 19:20 ` [PATCH v5 23/36] firmware: arm_scmi: port Sensor protocol to new protocols interface Cristian Marussi
2021-01-12 19:20 ` [PATCH v5 24/36] hwmon: (scmi) port driver to the new scmi_sensor_proto_ops interface Cristian Marussi
2021-01-12 19:20 ` [PATCH v5 25/36] firmware: arm_scmi: remove legacy scmi_sensor_ops protocol interface Cristian Marussi
2021-01-12 19:20 ` [PATCH v5 26/36] firmware: arm_scmi: port SystemPower protocol to new protocols interface Cristian Marussi
2021-01-12 19:20 ` [PATCH v5 27/36] firmware: arm_scmi: port Voltage " Cristian Marussi
2021-01-12 19:20 ` Cristian Marussi [this message]
2021-01-12 19:20 ` [PATCH v5 29/36] firmware: arm_scmi: remove legacy scmi_voltage_ops protocol interface Cristian Marussi
2021-01-12 19:20 ` [PATCH v5 30/36] firmware: arm_scmi: make references to handle const Cristian Marussi
2021-01-12 19:20 ` [PATCH v5 31/36] firmware: arm_scmi: cleanup legacy protocol init code Cristian Marussi
2021-01-12 19:20 ` [PATCH v5 32/36] firmware: arm_scmi: cleanup unused core xfer wrappers Cristian Marussi
2021-01-12 19:20 ` [PATCH v5 33/36] firmware: arm_scmi: cleanup events registration transient code Cristian Marussi
2021-01-12 19:20 ` [PATCH v5 34/36] firmware: arm_scmi: make notify_priv really private Cristian Marussi
2021-01-12 19:20 ` [PATCH v5 35/36] firmware: arm_scmi: add protocol modularization support Cristian Marussi
2021-01-12 19:20 ` [PATCH v5 36/36] firmware: arm_scmi: add dynamic scmi devices creation Cristian Marussi
2021-01-27 16:21 ` [PATCH v5 0/36] SCMI vendor protocols and modularization Vincent Guittot
2021-01-27 16:26   ` Cristian Marussi

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=20210112192018.34994-29-cristian.marussi@arm.com \
    --to=cristian.marussi@arm.com \
    --cc=Jonathan.Cameron@Huawei.com \
    --cc=etienne.carriere@linaro.org \
    --cc=f.fainelli@gmail.com \
    --cc=james.quinlan@broadcom.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lukasz.luba@arm.com \
    --cc=souvik.chakravarty@arm.com \
    --cc=sudeep.holla@arm.com \
    --cc=thara.gopinath@linaro.org \
    --cc=vincent.guittot@linaro.org \
    /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).