[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20240428-pinctrl-scmi-oem-v3-v3-2-eda341eb47ed@nxp.com>
Date: Sun, 28 Apr 2024 13:07:48 +0800
From: "Peng Fan (OSS)" <peng.fan@....nxp.com>
To: Sudeep Holla <sudeep.holla@....com>,
Cristian Marussi <cristian.marussi@....com>, Rob Herring <robh@...nel.org>,
Krzysztof Kozlowski <krzk+dt@...nel.org>,
Conor Dooley <conor+dt@...nel.org>, Shawn Guo <shawnguo@...nel.org>,
Sascha Hauer <s.hauer@...gutronix.de>,
Pengutronix Kernel Team <kernel@...gutronix.de>,
Fabio Estevam <festevam@...il.com>,
Linus Walleij <linus.walleij@...aro.org>,
Dong Aisheng <aisheng.dong@....com>, Jacky Bai <ping.bai@....com>
Cc: linux-arm-kernel@...ts.infradead.org, devicetree@...r.kernel.org,
linux-kernel@...r.kernel.org, imx@...ts.linux.dev,
linux-gpio@...r.kernel.org, Peng Fan <peng.fan@....com>
Subject: [PATCH v3 2/6] pinctrl: scmi: move pinctrl_ops to scmi_pinctrl
From: Peng Fan <peng.fan@....com>
Make pinctrl_ops a global variable not able to support multiple
protocol@19 nodes, so make it per scmi_pinctrl.
Signed-off-by: Peng Fan <peng.fan@....com>
---
drivers/pinctrl/pinctrl-scmi.c | 35 ++++++++++++++++++-----------------
1 file changed, 18 insertions(+), 17 deletions(-)
diff --git a/drivers/pinctrl/pinctrl-scmi.c b/drivers/pinctrl/pinctrl-scmi.c
index 036bc1e3fc6c..682ff595c3c7 100644
--- a/drivers/pinctrl/pinctrl-scmi.c
+++ b/drivers/pinctrl/pinctrl-scmi.c
@@ -30,8 +30,6 @@
/* Define num configs, if not large than 4 use stack, else use kcalloc() */
#define SCMI_NUM_CONFIGS 4
-static const struct scmi_pinctrl_proto_ops *pinctrl_ops;
-
struct scmi_pinctrl {
struct device *dev;
struct scmi_protocol_handle *ph;
@@ -41,13 +39,14 @@ struct scmi_pinctrl {
unsigned int nr_functions;
struct pinctrl_pin_desc *pins;
unsigned int nr_pins;
+ const struct scmi_pinctrl_proto_ops *ops;
};
static int pinctrl_scmi_get_groups_count(struct pinctrl_dev *pctldev)
{
struct scmi_pinctrl *pmx = pinctrl_dev_get_drvdata(pctldev);
- return pinctrl_ops->count_get(pmx->ph, GROUP_TYPE);
+ return pmx->ops->count_get(pmx->ph, GROUP_TYPE);
}
static const char *pinctrl_scmi_get_group_name(struct pinctrl_dev *pctldev,
@@ -57,7 +56,7 @@ static const char *pinctrl_scmi_get_group_name(struct pinctrl_dev *pctldev,
const char *name;
struct scmi_pinctrl *pmx = pinctrl_dev_get_drvdata(pctldev);
- ret = pinctrl_ops->name_get(pmx->ph, selector, GROUP_TYPE, &name);
+ ret = pmx->ops->name_get(pmx->ph, selector, GROUP_TYPE, &name);
if (ret) {
dev_err(pmx->dev, "get name failed with err %d", ret);
return NULL;
@@ -73,7 +72,7 @@ static int pinctrl_scmi_get_group_pins(struct pinctrl_dev *pctldev,
{
struct scmi_pinctrl *pmx = pinctrl_dev_get_drvdata(pctldev);
- return pinctrl_ops->group_pins_get(pmx->ph, selector, pins, num_pins);
+ return pmx->ops->group_pins_get(pmx->ph, selector, pins, num_pins);
}
static const struct pinctrl_ops pinctrl_scmi_pinctrl_ops = {
@@ -90,7 +89,7 @@ static int pinctrl_scmi_get_functions_count(struct pinctrl_dev *pctldev)
{
struct scmi_pinctrl *pmx = pinctrl_dev_get_drvdata(pctldev);
- return pinctrl_ops->count_get(pmx->ph, FUNCTION_TYPE);
+ return pmx->ops->count_get(pmx->ph, FUNCTION_TYPE);
}
static const char *pinctrl_scmi_get_function_name(struct pinctrl_dev *pctldev,
@@ -100,7 +99,7 @@ static const char *pinctrl_scmi_get_function_name(struct pinctrl_dev *pctldev,
const char *name;
struct scmi_pinctrl *pmx = pinctrl_dev_get_drvdata(pctldev);
- ret = pinctrl_ops->name_get(pmx->ph, selector, FUNCTION_TYPE, &name);
+ ret = pmx->ops->name_get(pmx->ph, selector, FUNCTION_TYPE, &name);
if (ret) {
dev_err(pmx->dev, "get name failed with err %d", ret);
return NULL;
@@ -131,7 +130,7 @@ static int pinctrl_scmi_get_function_groups(struct pinctrl_dev *pctldev,
if (func->ngroups)
goto done;
- ret = pinctrl_ops->function_groups_get(pmx->ph, selector, &num_groups,
+ ret = pmx->ops->function_groups_get(pmx->ph, selector, &num_groups,
&group_ids);
if (ret) {
dev_err(pmx->dev, "Unable to get function groups, err %d", ret);
@@ -171,7 +170,7 @@ static int pinctrl_scmi_func_set_mux(struct pinctrl_dev *pctldev,
{
struct scmi_pinctrl *pmx = pinctrl_dev_get_drvdata(pctldev);
- return pinctrl_ops->mux_set(pmx->ph, selector, group);
+ return pmx->ops->mux_set(pmx->ph, selector, group);
}
static int pinctrl_scmi_request(struct pinctrl_dev *pctldev,
@@ -179,14 +178,14 @@ static int pinctrl_scmi_request(struct pinctrl_dev *pctldev,
{
struct scmi_pinctrl *pmx = pinctrl_dev_get_drvdata(pctldev);
- return pinctrl_ops->pin_request(pmx->ph, offset);
+ return pmx->ops->pin_request(pmx->ph, offset);
}
static int pinctrl_scmi_free(struct pinctrl_dev *pctldev, unsigned int offset)
{
struct scmi_pinctrl *pmx = pinctrl_dev_get_drvdata(pctldev);
- return pinctrl_ops->pin_free(pmx->ph, offset);
+ return pmx->ops->pin_free(pmx->ph, offset);
}
static const struct pinmux_ops pinctrl_scmi_pinmux_ops = {
@@ -295,7 +294,7 @@ static int pinctrl_scmi_pinconf_get(struct pinctrl_dev *pctldev,
if (ret)
return ret;
- ret = pinctrl_ops->settings_get_one(pmx->ph, pin, PIN_TYPE, type,
+ ret = pmx->ops->settings_get_one(pmx->ph, pin, PIN_TYPE, type,
&config_value);
/* Convert SCMI error code to PINCTRL expected error code */
if (ret == -EOPNOTSUPP)
@@ -372,7 +371,7 @@ static int pinctrl_scmi_pinconf_set(struct pinctrl_dev *pctldev,
p_config_value[i] = pinconf_to_config_argument(configs[i]);
}
- ret = pinctrl_ops->settings_conf(pmx->ph, pin, PIN_TYPE, num_configs,
+ ret = pmx->ops->settings_conf(pmx->ph, pin, PIN_TYPE, num_configs,
p_config_type, p_config_value);
if (ret)
dev_err(pmx->dev, "Error parsing config %d\n", ret);
@@ -415,7 +414,7 @@ static int pinctrl_scmi_pinconf_group_set(struct pinctrl_dev *pctldev,
p_config_value[i] = pinconf_to_config_argument(configs[i]);
}
- ret = pinctrl_ops->settings_conf(pmx->ph, group, GROUP_TYPE,
+ ret = pmx->ops->settings_conf(pmx->ph, group, GROUP_TYPE,
num_configs, p_config_type,
p_config_value);
if (ret)
@@ -447,7 +446,7 @@ static int pinctrl_scmi_pinconf_group_get(struct pinctrl_dev *pctldev,
return ret;
}
- ret = pinctrl_ops->settings_get_one(pmx->ph, group, GROUP_TYPE, type,
+ ret = pmx->ops->settings_get_one(pmx->ph, group, GROUP_TYPE, type,
&config_value);
/* Convert SCMI error code to PINCTRL expected error code */
if (ret == -EOPNOTSUPP)
@@ -476,7 +475,7 @@ static int pinctrl_scmi_get_pins(struct scmi_pinctrl *pmx,
unsigned int npins;
int ret, i;
- npins = pinctrl_ops->count_get(pmx->ph, PIN_TYPE);
+ npins = pmx->ops->count_get(pmx->ph, PIN_TYPE);
/*
* npins will never be zero, the scmi pinctrl driver has bailed out
* if npins is zero.
@@ -491,7 +490,7 @@ static int pinctrl_scmi_get_pins(struct scmi_pinctrl *pmx,
* The memory for name is handled by the scmi firmware driver,
* no need free here
*/
- ret = pinctrl_ops->name_get(pmx->ph, i, PIN_TYPE, &pins[i].name);
+ ret = pmx->ops->name_get(pmx->ph, i, PIN_TYPE, &pins[i].name);
if (ret)
return dev_err_probe(pmx->dev, ret,
"Can't get name for pin %d", i);
@@ -511,6 +510,7 @@ static int scmi_pinctrl_probe(struct scmi_device *sdev)
struct scmi_pinctrl *pmx;
const struct scmi_handle *handle;
struct scmi_protocol_handle *ph;
+ const struct scmi_pinctrl_proto_ops *pinctrl_ops;
if (!sdev->handle)
return -EINVAL;
@@ -526,6 +526,7 @@ static int scmi_pinctrl_probe(struct scmi_device *sdev)
return -ENOMEM;
pmx->ph = ph;
+ pmx->ops = pinctrl_ops;
pmx->dev = dev;
pmx->pctl_desc.name = DRV_NAME;
--
2.37.1
Powered by blists - more mailing lists