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

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

pinctrl: conjure names for unnamed pins



If pins with blank names are registered, we assign them names on-the-fly
on the form "PINn" where n is the pin number for that pin on the specific
controller.

Acked-by: default avatarStephen Warren <swarren@nvidia.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 23750196
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -158,6 +158,8 @@ static void pinctrl_free_pindescs(struct pinctrl_dev *pctldev,
		if (pindesc != NULL) {
			radix_tree_delete(&pctldev->pin_desc_tree,
					  pins[i].number);
			if (pindesc->dynamic_name)
				kfree(pindesc->name);
		}
		kfree(pindesc);
	}
@@ -186,13 +188,20 @@ static int pinctrl_register_one_pin(struct pinctrl_dev *pctldev,
	pindesc->pctldev = pctldev;

	/* Copy basic pin info */
	if (pindesc->name) {
		pindesc->name = name;
	} else {
		pindesc->name = kasprintf(GFP_KERNEL, "PIN%u", number);
		if (pindesc->name == NULL)
			return -ENOMEM;
		pindesc->dynamic_name = true;
	}

	spin_lock(&pctldev->pin_desc_tree_lock);
	radix_tree_insert(&pctldev->pin_desc_tree, number, pindesc);
	spin_unlock(&pctldev->pin_desc_tree_lock);
	pr_debug("registered pin %d (%s) on %s\n",
		 number, name ? name : "(unnamed)", pctldev->desc->name);
		 number, pindesc->name, pctldev->desc->name);
	return 0;
}

+2 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ struct pinctrl_dev {
 * @pctldev: corresponding pin control device
 * @name: a name for the pin, e.g. the name of the pin/pad/finger on a
 *	datasheet or such
 * @dynamic_name: if the name of this pin was dynamically allocated
 * @lock: a lock to protect the descriptor structure
 * @mux_requested: whether the pin is already requested by pinmux or not
 * @mux_function: a named muxing function for the pin that will be passed to
@@ -60,6 +61,7 @@ struct pinctrl_dev {
struct pin_desc {
	struct pinctrl_dev *pctldev;
	const char *name;
	bool dynamic_name;
	spinlock_t lock;
	/* These fields only added when supporting pinmux drivers */
#ifdef CONFIG_PINMUX