pinctrl: pinconf-generic: loose DT dependence
New pin controllers such as ACPI-based may also have custom properties to parse, and should be able to use generic pin config. Let's make the code compile on !OF systems and rename members a bit to underscore it is custom parameters and not necessarily DT parameters. This fixes a build regression for x86_64 on the zeroday kernel builds. Reported-by: kbuild test robot <fengguang.wu@intel.com> Reviewed-and-tested-by: Soren Brinkmann <soren.brinkmann@xilinx.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
7382b62315
commit
f684e4ac9f
@ -113,10 +113,11 @@ void pinconf_generic_dump_pins(struct pinctrl_dev *pctldev, struct seq_file *s,
|
|||||||
pinconf_generic_dump_one(pctldev, s, gname, pin, conf_items,
|
pinconf_generic_dump_one(pctldev, s, gname, pin, conf_items,
|
||||||
ARRAY_SIZE(conf_items));
|
ARRAY_SIZE(conf_items));
|
||||||
/* driver-specific parameters */
|
/* driver-specific parameters */
|
||||||
if (pctldev->desc->num_dt_params && pctldev->desc->conf_items)
|
if (pctldev->desc->num_custom_params &&
|
||||||
|
pctldev->desc->custom_conf_items)
|
||||||
pinconf_generic_dump_one(pctldev, s, gname, pin,
|
pinconf_generic_dump_one(pctldev, s, gname, pin,
|
||||||
pctldev->desc->conf_items,
|
pctldev->desc->custom_conf_items,
|
||||||
pctldev->desc->num_dt_params);
|
pctldev->desc->num_custom_params);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pinconf_generic_dump_config(struct pinctrl_dev *pctldev,
|
void pinconf_generic_dump_config(struct pinctrl_dev *pctldev,
|
||||||
@ -131,21 +132,24 @@ void pinconf_generic_dump_config(struct pinctrl_dev *pctldev,
|
|||||||
pinconf_to_config_argument(config));
|
pinconf_to_config_argument(config));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pctldev->desc->num_dt_params || !pctldev->desc->conf_items)
|
if (!pctldev->desc->num_custom_params ||
|
||||||
|
!pctldev->desc->custom_conf_items)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (i = 0; i < pctldev->desc->num_dt_params; i++) {
|
for (i = 0; i < pctldev->desc->num_custom_params; i++) {
|
||||||
if (pinconf_to_config_param(config) != pctldev->desc->conf_items[i].param)
|
if (pinconf_to_config_param(config) !=
|
||||||
|
pctldev->desc->custom_conf_items[i].param)
|
||||||
continue;
|
continue;
|
||||||
seq_printf(s, "%s: 0x%x", pctldev->desc->conf_items[i].display,
|
seq_printf(s, "%s: 0x%x",
|
||||||
pinconf_to_config_argument(config));
|
pctldev->desc->custom_conf_items[i].display,
|
||||||
|
pinconf_to_config_argument(config));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(pinconf_generic_dump_config);
|
EXPORT_SYMBOL_GPL(pinconf_generic_dump_config);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_OF
|
#ifdef CONFIG_OF
|
||||||
static const struct pinconf_generic_dt_params dt_params[] = {
|
static const struct pinconf_generic_params dt_params[] = {
|
||||||
{ "bias-disable", PIN_CONFIG_BIAS_DISABLE, 0 },
|
{ "bias-disable", PIN_CONFIG_BIAS_DISABLE, 0 },
|
||||||
{ "bias-high-impedance", PIN_CONFIG_BIAS_HIGH_IMPEDANCE, 0 },
|
{ "bias-high-impedance", PIN_CONFIG_BIAS_HIGH_IMPEDANCE, 0 },
|
||||||
{ "bias-bus-hold", PIN_CONFIG_BIAS_BUS_HOLD, 0 },
|
{ "bias-bus-hold", PIN_CONFIG_BIAS_BUS_HOLD, 0 },
|
||||||
@ -170,9 +174,9 @@ static const struct pinconf_generic_dt_params dt_params[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* parse_dt_cfg - Parse DT pinconf parameters
|
* parse_dt_cfg() - Parse DT pinconf parameters
|
||||||
* @np: DT node
|
* @np: DT node
|
||||||
* @params: Array of describing DT 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
|
||||||
@ -183,7 +187,7 @@ static const struct pinconf_generic_dt_params dt_params[] = {
|
|||||||
* needs to have enough memory allocated to hold all possible entries.
|
* needs to have enough memory allocated to hold all possible entries.
|
||||||
*/
|
*/
|
||||||
static void parse_dt_cfg(struct device_node *np,
|
static void parse_dt_cfg(struct device_node *np,
|
||||||
const struct pinconf_generic_dt_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)
|
||||||
{
|
{
|
||||||
@ -192,7 +196,7 @@ static void parse_dt_cfg(struct device_node *np,
|
|||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
u32 val;
|
u32 val;
|
||||||
int ret;
|
int ret;
|
||||||
const struct pinconf_generic_dt_params *par = ¶ms[i];
|
const struct pinconf_generic_params *par = ¶ms[i];
|
||||||
|
|
||||||
ret = of_property_read_u32(np, par->property, &val);
|
ret = of_property_read_u32(np, par->property, &val);
|
||||||
|
|
||||||
@ -232,15 +236,16 @@ int pinconf_generic_parse_dt_config(struct device_node *np,
|
|||||||
/* allocate a temporary array big enough to hold one of each option */
|
/* allocate a temporary array big enough to hold one of each option */
|
||||||
max_cfg = ARRAY_SIZE(dt_params);
|
max_cfg = ARRAY_SIZE(dt_params);
|
||||||
if (pctldev)
|
if (pctldev)
|
||||||
max_cfg += pctldev->desc->num_dt_params;
|
max_cfg += pctldev->desc->num_custom_params;
|
||||||
cfg = kcalloc(max_cfg, sizeof(*cfg), GFP_KERNEL);
|
cfg = kcalloc(max_cfg, sizeof(*cfg), GFP_KERNEL);
|
||||||
if (!cfg)
|
if (!cfg)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
parse_dt_cfg(np, dt_params, ARRAY_SIZE(dt_params), cfg, &ncfg);
|
parse_dt_cfg(np, dt_params, ARRAY_SIZE(dt_params), cfg, &ncfg);
|
||||||
if (pctldev && pctldev->desc->num_dt_params && pctldev->desc->params)
|
if (pctldev && pctldev->desc->num_custom_params &&
|
||||||
parse_dt_cfg(np, pctldev->desc->params,
|
pctldev->desc->custom_params)
|
||||||
pctldev->desc->num_dt_params, cfg, &ncfg);
|
parse_dt_cfg(np, pctldev->desc->custom_params,
|
||||||
|
pctldev->desc->num_custom_params, cfg, &ncfg);
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
|
@ -920,7 +920,7 @@ enum zynq_pin_config_param {
|
|||||||
PIN_CONFIG_IOSTANDARD = PIN_CONFIG_END + 1,
|
PIN_CONFIG_IOSTANDARD = PIN_CONFIG_END + 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct pinconf_generic_dt_params zynq_dt_params[] = {
|
static const struct pinconf_generic_params zynq_dt_params[] = {
|
||||||
{"io-standard", PIN_CONFIG_IOSTANDARD, zynq_iostd_lvcmos18},
|
{"io-standard", PIN_CONFIG_IOSTANDARD, zynq_iostd_lvcmos18},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1099,9 +1099,9 @@ static struct pinctrl_desc zynq_desc = {
|
|||||||
.pctlops = &zynq_pctrl_ops,
|
.pctlops = &zynq_pctrl_ops,
|
||||||
.pmxops = &zynq_pinmux_ops,
|
.pmxops = &zynq_pinmux_ops,
|
||||||
.confops = &zynq_pinconf_ops,
|
.confops = &zynq_pinconf_ops,
|
||||||
.num_dt_params = ARRAY_SIZE(zynq_dt_params),
|
.num_custom_params = ARRAY_SIZE(zynq_dt_params),
|
||||||
.params = zynq_dt_params,
|
.custom_params = zynq_dt_params,
|
||||||
.conf_items = zynq_conf_items,
|
.custom_conf_items = zynq_conf_items,
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -131,7 +131,7 @@ struct pmic_gpio_state {
|
|||||||
struct gpio_chip chip;
|
struct gpio_chip chip;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct pinconf_generic_dt_params pmic_gpio_bindings[] = {
|
static const struct pinconf_generic_params pmic_gpio_bindings[] = {
|
||||||
{"qcom,pull-up-strength", PMIC_GPIO_CONF_PULL_UP, 0},
|
{"qcom,pull-up-strength", PMIC_GPIO_CONF_PULL_UP, 0},
|
||||||
{"qcom,drive-strength", PMIC_GPIO_CONF_STRENGTH, 0},
|
{"qcom,drive-strength", PMIC_GPIO_CONF_STRENGTH, 0},
|
||||||
};
|
};
|
||||||
@ -742,9 +742,9 @@ static int pmic_gpio_probe(struct platform_device *pdev)
|
|||||||
pctrldesc->name = dev_name(dev);
|
pctrldesc->name = dev_name(dev);
|
||||||
pctrldesc->pins = pindesc;
|
pctrldesc->pins = pindesc;
|
||||||
pctrldesc->npins = npins;
|
pctrldesc->npins = npins;
|
||||||
pctrldesc->num_dt_params = ARRAY_SIZE(pmic_gpio_bindings);
|
pctrldesc->num_custom_params = ARRAY_SIZE(pmic_gpio_bindings);
|
||||||
pctrldesc->params = pmic_gpio_bindings;
|
pctrldesc->custom_params = pmic_gpio_bindings;
|
||||||
pctrldesc->conf_items = pmic_conf_items;
|
pctrldesc->custom_conf_items = pmic_conf_items;
|
||||||
|
|
||||||
for (i = 0; i < npins; i++, pindesc++) {
|
for (i = 0; i < npins; i++, pindesc++) {
|
||||||
pad = &pads[i];
|
pad = &pads[i];
|
||||||
|
@ -162,7 +162,7 @@ static inline unsigned long pinconf_to_config_packed(enum pin_config_param param
|
|||||||
struct pinctrl_dev;
|
struct pinctrl_dev;
|
||||||
struct pinctrl_map;
|
struct pinctrl_map;
|
||||||
|
|
||||||
struct pinconf_generic_dt_params {
|
struct pinconf_generic_params {
|
||||||
const char * const property;
|
const char * const property;
|
||||||
enum pin_config_param param;
|
enum pin_config_param param;
|
||||||
u32 default_value;
|
u32 default_value;
|
||||||
|
@ -118,9 +118,12 @@ struct pinctrl_ops {
|
|||||||
* @confops: pin config operations vtable, if you support pin configuration in
|
* @confops: pin config operations vtable, if you support pin configuration in
|
||||||
* your driver
|
* your driver
|
||||||
* @owner: module providing the pin controller, used for refcounting
|
* @owner: module providing the pin controller, used for refcounting
|
||||||
* @num_dt_params: Number of driver-specific DT parameters
|
* @num_custom_params: Number of driver-specific custom parameters to be parsed
|
||||||
* @params: List of DT parameters
|
* from the hardware description
|
||||||
* @conf_items: Information how to print @params in debugfs
|
* @custom_params: List of driver_specific custom parameters to be parsed from
|
||||||
|
* the hardware description
|
||||||
|
* @custom_conf_items: Information how to print @params in debugfs, must be
|
||||||
|
* the same size as the @custom_params, i.e. @num_custom_params
|
||||||
*/
|
*/
|
||||||
struct pinctrl_desc {
|
struct pinctrl_desc {
|
||||||
const char *name;
|
const char *name;
|
||||||
@ -130,10 +133,10 @@ struct pinctrl_desc {
|
|||||||
const struct pinmux_ops *pmxops;
|
const struct pinmux_ops *pmxops;
|
||||||
const struct pinconf_ops *confops;
|
const struct pinconf_ops *confops;
|
||||||
struct module *owner;
|
struct module *owner;
|
||||||
#if defined(CONFIG_GENERIC_PINCONF) && defined(CONFIG_OF)
|
#ifdef CONFIG_GENERIC_PINCONF
|
||||||
unsigned int num_dt_params;
|
unsigned int num_custom_params;
|
||||||
const struct pinconf_generic_dt_params *params;
|
const struct pinconf_generic_params *custom_params;
|
||||||
const struct pin_config_item *conf_items;
|
const struct pin_config_item *custom_conf_items;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user