mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 01:53:29 +02:00
pinctrl: pinconf-generic: Use only fwnode API in parse_dt_cfg()
The parse_dt_cfg() uses OF and fwnode APIs. Fix this inconsistency by fully switching it to use fwnode API and rename the function accordingly. While at it, add missing linux/property.h inclusion. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Linus Walleij <linusw@kernel.org>
This commit is contained in:
parent
35b9b024db
commit
e002d16265
|
|
@ -16,6 +16,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/of.h>
|
#include <linux/of.h>
|
||||||
|
#include <linux/property.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/seq_file.h>
|
#include <linux/seq_file.h>
|
||||||
|
|
||||||
|
|
@ -205,19 +206,19 @@ static const struct pinconf_generic_params dt_params[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* parse_dt_cfg() - Parse DT pinconf parameters
|
* parse_fw_cfg() - Parse firmware pinconf parameters
|
||||||
* @np: DT node
|
* @fwnode: firmware node
|
||||||
* @params: Array of describing generic parameters
|
* @params: Array of describing generic parameters
|
||||||
* @count: Number of entries in @params
|
* @count: Number of entries in @params
|
||||||
* @cfg: Array of parsed config options
|
* @cfg: Array of parsed config options
|
||||||
* @ncfg: Number of entries in @cfg
|
* @ncfg: Number of entries in @cfg
|
||||||
*
|
*
|
||||||
* Parse the config options described in @params from @np and puts the result
|
* Parse the config options described in @params from @fwnode and puts the result
|
||||||
* in @cfg. @cfg does not need to be empty, entries are added beginning at
|
* in @cfg. @cfg does not need to be empty, entries are added beginning at
|
||||||
* @ncfg. @ncfg is updated to reflect the number of entries after parsing. @cfg
|
* @ncfg. @ncfg is updated to reflect the number of entries after parsing. @cfg
|
||||||
* needs to have enough memory allocated to hold all possible entries.
|
* needs to have enough memory allocated to hold all possible entries.
|
||||||
*/
|
*/
|
||||||
static int parse_dt_cfg(struct device_node *np,
|
static int parse_fw_cfg(struct fwnode_handle *fwnode,
|
||||||
const struct pinconf_generic_params *params,
|
const struct pinconf_generic_params *params,
|
||||||
unsigned int count, unsigned long *cfg,
|
unsigned int count, unsigned long *cfg,
|
||||||
unsigned int *ncfg)
|
unsigned int *ncfg)
|
||||||
|
|
@ -233,7 +234,7 @@ static int parse_dt_cfg(struct device_node *np,
|
||||||
const struct pinconf_generic_params *par = ¶ms[i];
|
const struct pinconf_generic_params *par = ¶ms[i];
|
||||||
|
|
||||||
if (par->values && par->num_values) {
|
if (par->values && par->num_values) {
|
||||||
ret = fwnode_property_match_property_string(of_fwnode_handle(np),
|
ret = fwnode_property_match_property_string(fwnode,
|
||||||
par->property,
|
par->property,
|
||||||
par->values, par->num_values);
|
par->values, par->num_values);
|
||||||
if (ret == -ENOENT)
|
if (ret == -ENOENT)
|
||||||
|
|
@ -243,7 +244,7 @@ static int parse_dt_cfg(struct device_node *np,
|
||||||
ret = 0;
|
ret = 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ret = of_property_read_u32(np, par->property, &val);
|
ret = fwnode_property_read_u32(fwnode, par->property, &val);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* property not found */
|
/* property not found */
|
||||||
|
|
@ -258,8 +259,8 @@ static int parse_dt_cfg(struct device_node *np,
|
||||||
if (par->param <= count) {
|
if (par->param <= count) {
|
||||||
ret = test_and_set_bit(par->param, properties);
|
ret = test_and_set_bit(par->param, properties);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
pr_err("%s: conflicting setting detected for %s\n",
|
pr_err("%pfw: conflicting setting detected for %s\n",
|
||||||
np->name, par->property);
|
fwnode, par->property);
|
||||||
bitmap_free(properties);
|
bitmap_free(properties);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
@ -272,8 +273,8 @@ static int parse_dt_cfg(struct device_node *np,
|
||||||
|
|
||||||
if (test_bit(PIN_CONFIG_DRIVE_STRENGTH, properties) &&
|
if (test_bit(PIN_CONFIG_DRIVE_STRENGTH, properties) &&
|
||||||
test_bit(PIN_CONFIG_DRIVE_STRENGTH_UA, properties))
|
test_bit(PIN_CONFIG_DRIVE_STRENGTH_UA, properties))
|
||||||
pr_err("%s: cannot have multiple drive strength properties\n",
|
pr_err("%pfw: cannot have multiple drive strength properties\n",
|
||||||
np->name);
|
fwnode);
|
||||||
|
|
||||||
test = test_bit(PIN_CONFIG_BIAS_BUS_HOLD, properties) +
|
test = test_bit(PIN_CONFIG_BIAS_BUS_HOLD, properties) +
|
||||||
test_bit(PIN_CONFIG_BIAS_DISABLE, properties) +
|
test_bit(PIN_CONFIG_BIAS_DISABLE, properties) +
|
||||||
|
|
@ -282,15 +283,15 @@ static int parse_dt_cfg(struct device_node *np,
|
||||||
test_bit(PIN_CONFIG_BIAS_PULL_PIN_DEFAULT, properties) +
|
test_bit(PIN_CONFIG_BIAS_PULL_PIN_DEFAULT, properties) +
|
||||||
test_bit(PIN_CONFIG_BIAS_PULL_DOWN, properties);
|
test_bit(PIN_CONFIG_BIAS_PULL_DOWN, properties);
|
||||||
if (test > 1)
|
if (test > 1)
|
||||||
pr_err("%s: cannot have multiple bias configurations\n",
|
pr_err("%pfw: cannot have multiple bias configurations\n",
|
||||||
np->name);
|
fwnode);
|
||||||
|
|
||||||
test = test_bit(PIN_CONFIG_DRIVE_OPEN_DRAIN, properties) +
|
test = test_bit(PIN_CONFIG_DRIVE_OPEN_DRAIN, properties) +
|
||||||
test_bit(PIN_CONFIG_DRIVE_OPEN_SOURCE, properties) +
|
test_bit(PIN_CONFIG_DRIVE_OPEN_SOURCE, properties) +
|
||||||
test_bit(PIN_CONFIG_DRIVE_PUSH_PULL, properties);
|
test_bit(PIN_CONFIG_DRIVE_PUSH_PULL, properties);
|
||||||
if (test > 1)
|
if (test > 1)
|
||||||
pr_err("%s: cannot have multiple drive configurations\n",
|
pr_err("%pfw: cannot have multiple drive configurations\n",
|
||||||
np->name);
|
fwnode);
|
||||||
|
|
||||||
bitmap_free(properties);
|
bitmap_free(properties);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -371,6 +372,7 @@ int pinconf_generic_parse_dt_config(struct device_node *np,
|
||||||
unsigned long **configs,
|
unsigned long **configs,
|
||||||
unsigned int *nconfigs)
|
unsigned int *nconfigs)
|
||||||
{
|
{
|
||||||
|
struct fwnode_handle *fwnode = of_fwnode_handle(np);
|
||||||
unsigned long *cfg;
|
unsigned long *cfg;
|
||||||
unsigned int max_cfg, ncfg = 0;
|
unsigned int max_cfg, ncfg = 0;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
@ -386,12 +388,12 @@ int pinconf_generic_parse_dt_config(struct device_node *np,
|
||||||
if (!cfg)
|
if (!cfg)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
ret = parse_dt_cfg(np, dt_params, ARRAY_SIZE(dt_params), cfg, &ncfg);
|
ret = parse_fw_cfg(fwnode, dt_params, ARRAY_SIZE(dt_params), cfg, &ncfg);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
if (pctldev && pctldev->desc->num_custom_params &&
|
if (pctldev && pctldev->desc->num_custom_params &&
|
||||||
pctldev->desc->custom_params) {
|
pctldev->desc->custom_params) {
|
||||||
ret = parse_dt_cfg(np, pctldev->desc->custom_params,
|
ret = parse_fw_cfg(fwnode, pctldev->desc->custom_params,
|
||||||
pctldev->desc->num_custom_params, cfg, &ncfg);
|
pctldev->desc->num_custom_params, cfg, &ncfg);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user