Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f684e4ac authored by Linus Walleij's avatar Linus Walleij
Browse files

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: default avatarkbuild test robot <fengguang.wu@intel.com>
Reviewed-and-tested-by: default avatarSoren Brinkmann <soren.brinkmann@xilinx.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 7382b623
Loading
Loading
Loading
Loading
+22 −17
Original line number Diff line number Diff line
@@ -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,
				 ARRAY_SIZE(conf_items));
	/* 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,
					 pctldev->desc->conf_items,
					 pctldev->desc->num_dt_params);
					 pctldev->desc->custom_conf_items,
					 pctldev->desc->num_custom_params);
}

void pinconf_generic_dump_config(struct pinctrl_dev *pctldev,
@@ -131,13 +132,16 @@ void pinconf_generic_dump_config(struct pinctrl_dev *pctldev,
			   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;

	for (i = 0; i < pctldev->desc->num_dt_params; i++) {
		if (pinconf_to_config_param(config) != pctldev->desc->conf_items[i].param)
	for (i = 0; i < pctldev->desc->num_custom_params; i++) {
		if (pinconf_to_config_param(config) !=
		    pctldev->desc->custom_conf_items[i].param)
			continue;
		seq_printf(s, "%s: 0x%x", pctldev->desc->conf_items[i].display,
		seq_printf(s, "%s: 0x%x",
				pctldev->desc->custom_conf_items[i].display,
				pinconf_to_config_argument(config));
	}
}
@@ -145,7 +149,7 @@ EXPORT_SYMBOL_GPL(pinconf_generic_dump_config);
#endif

#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-high-impedance", PIN_CONFIG_BIAS_HIGH_IMPEDANCE, 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
 * @params:	Array of describing DT parameters
 * @params:	Array of describing generic parameters
 * @count:	Number of entries in @params
 * @cfg:	Array of parsed config options
 * @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.
 */
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 *ncfg)
{
@@ -192,7 +196,7 @@ static void parse_dt_cfg(struct device_node *np,
	for (i = 0; i < count; i++) {
		u32 val;
		int ret;
		const struct pinconf_generic_dt_params *par = &params[i];
		const struct pinconf_generic_params *par = &params[i];

		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 */
	max_cfg = ARRAY_SIZE(dt_params);
	if (pctldev)
		max_cfg += pctldev->desc->num_dt_params;
		max_cfg += pctldev->desc->num_custom_params;
	cfg = kcalloc(max_cfg, sizeof(*cfg), GFP_KERNEL);
	if (!cfg)
		return -ENOMEM;

	parse_dt_cfg(np, dt_params, ARRAY_SIZE(dt_params), cfg, &ncfg);
	if (pctldev && pctldev->desc->num_dt_params && pctldev->desc->params)
		parse_dt_cfg(np, pctldev->desc->params,
			      pctldev->desc->num_dt_params, cfg, &ncfg);
	if (pctldev && pctldev->desc->num_custom_params &&
		pctldev->desc->custom_params)
		parse_dt_cfg(np, pctldev->desc->custom_params,
			     pctldev->desc->num_custom_params, cfg, &ncfg);

	ret = 0;

+4 −4
Original line number Diff line number Diff line
@@ -920,7 +920,7 @@ enum zynq_pin_config_param {
	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},
};

@@ -1099,9 +1099,9 @@ static struct pinctrl_desc zynq_desc = {
	.pctlops = &zynq_pctrl_ops,
	.pmxops = &zynq_pinmux_ops,
	.confops = &zynq_pinconf_ops,
	.num_dt_params = ARRAY_SIZE(zynq_dt_params),
	.params = zynq_dt_params,
	.conf_items = zynq_conf_items,
	.num_custom_params = ARRAY_SIZE(zynq_dt_params),
	.custom_params = zynq_dt_params,
	.custom_conf_items = zynq_conf_items,
	.owner = THIS_MODULE,
};

+4 −4
Original line number Diff line number Diff line
@@ -131,7 +131,7 @@ struct pmic_gpio_state {
	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,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->pins = pindesc;
	pctrldesc->npins = npins;
	pctrldesc->num_dt_params = ARRAY_SIZE(pmic_gpio_bindings);
	pctrldesc->params = pmic_gpio_bindings;
	pctrldesc->conf_items = pmic_conf_items;
	pctrldesc->num_custom_params = ARRAY_SIZE(pmic_gpio_bindings);
	pctrldesc->custom_params = pmic_gpio_bindings;
	pctrldesc->custom_conf_items = pmic_conf_items;

	for (i = 0; i < npins; i++, pindesc++) {
		pad = &pads[i];
+1 −1
Original line number Diff line number Diff line
@@ -162,7 +162,7 @@ static inline unsigned long pinconf_to_config_packed(enum pin_config_param param
struct pinctrl_dev;
struct pinctrl_map;

struct pinconf_generic_dt_params {
struct pinconf_generic_params {
	const char * const property;
	enum pin_config_param param;
	u32 default_value;
+10 −7
Original line number Diff line number Diff line
@@ -118,9 +118,12 @@ struct pinctrl_ops {
 * @confops: pin config operations vtable, if you support pin configuration in
 *	your driver
 * @owner: module providing the pin controller, used for refcounting
 * @num_dt_params: Number of driver-specific DT parameters
 * @params: List of DT parameters
 * @conf_items: Information how to print @params in debugfs
 * @num_custom_params: Number of driver-specific custom parameters to be parsed
 *	from the hardware description
 * @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 {
	const char *name;
@@ -130,10 +133,10 @@ struct pinctrl_desc {
	const struct pinmux_ops *pmxops;
	const struct pinconf_ops *confops;
	struct module *owner;
#if defined(CONFIG_GENERIC_PINCONF) && defined(CONFIG_OF)
	unsigned int num_dt_params;
	const struct pinconf_generic_dt_params *params;
	const struct pin_config_item *conf_items;
#ifdef CONFIG_GENERIC_PINCONF
	unsigned int num_custom_params;
	const struct pinconf_generic_params *custom_params;
	const struct pin_config_item *custom_conf_items;
#endif
};