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

Commit 9dfac4fd authored by Linus Walleij's avatar Linus Walleij
Browse files

pinctrl: delete raw device pointers in pinmux maps



After discussion with Mark Brown in an unrelated thread about
ADC lookups, it came to my knowledge that the ability to pass
a struct device * in the regulator consumers is just a
historical artifact, and not really recommended. Since there
are no in-kernel users of these pointers, we just kill them
right now, before someone starts to use them.

Reviewed-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 8dc6ae4d
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -805,10 +805,7 @@ must match a function provided by the pinmux driver handling this pin range.

As you can see we may have several pin controllers on the system and thus
we need to specify which one of them that contain the functions we wish
to map. The map can also use struct device * directly, so there is no
inherent need to use strings to specify .dev_name or .ctrl_dev_name, these
are for the situation where you do not have a handle to the struct device *,
for example if they are not yet instantiated or cumbersome to obtain.
to map.

You register this pinmux mapping to the pinmux subsystem by simply:

+7 −15
Original line number Diff line number Diff line
@@ -48,31 +48,23 @@ void *pinctrl_dev_get_drvdata(struct pinctrl_dev *pctldev)
EXPORT_SYMBOL_GPL(pinctrl_dev_get_drvdata);

/**
 * get_pinctrl_dev_from_dev() - look up pin controller device
 * @dev: a device pointer, this may be NULL but then devname needs to be
 *	defined instead
 * @devname: the name of a device instance, as returned by dev_name(), this
 *	may be NULL but then dev needs to be defined instead
 * get_pinctrl_dev_from_devname() - look up pin controller device
 * @devname: the name of a device instance, as returned by dev_name()
 *
 * Looks up a pin control device matching a certain device name or pure device
 * pointer, the pure device pointer will take precedence.
 */
struct pinctrl_dev *get_pinctrl_dev_from_dev(struct device *dev,
					     const char *devname)
struct pinctrl_dev *get_pinctrl_dev_from_devname(const char *devname)
{
	struct pinctrl_dev *pctldev = NULL;
	bool found = false;

	if (!devname)
		return NULL;

	mutex_lock(&pinctrldev_list_mutex);
	list_for_each_entry(pctldev, &pinctrldev_list, node) {
		if (dev && pctldev->dev == dev) {
			/* Matched on device pointer */
			found = true;
			break;
		}

		if (devname &&
		    !strcmp(dev_name(pctldev->dev), devname)) {
		if (!strcmp(dev_name(pctldev->dev), devname)) {
			/* Matched on device name */
			found = true;
			break;
+1 −2
Original line number Diff line number Diff line
@@ -72,8 +72,7 @@ struct pin_desc {
#endif
};

struct pinctrl_dev *get_pinctrl_dev_from_dev(struct device *dev,
					     const char *dev_name);
struct pinctrl_dev *get_pinctrl_dev_from_devname(const char *dev_name);
struct pin_desc *pin_desc_get(struct pinctrl_dev *pctldev, unsigned int pin);
int pin_get_from_name(struct pinctrl_dev *pctldev, const char *name);
int pinctrl_get_device_gpio_range(unsigned gpio,
+4 −4
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ int pin_config_get(const char *dev_name, const char *name,
	struct pinctrl_dev *pctldev;
	int pin;

	pctldev = get_pinctrl_dev_from_dev(NULL, dev_name);
	pctldev = get_pinctrl_dev_from_devname(dev_name);
	if (!pctldev)
		return -EINVAL;

@@ -99,7 +99,7 @@ int pin_config_set(const char *dev_name, const char *name,
	struct pinctrl_dev *pctldev;
	int pin;

	pctldev = get_pinctrl_dev_from_dev(NULL, dev_name);
	pctldev = get_pinctrl_dev_from_devname(dev_name);
	if (!pctldev)
		return -EINVAL;

@@ -118,7 +118,7 @@ int pin_config_group_get(const char *dev_name, const char *pin_group,
	const struct pinconf_ops *ops;
	int selector;

	pctldev = get_pinctrl_dev_from_dev(NULL, dev_name);
	pctldev = get_pinctrl_dev_from_devname(dev_name);
	if (!pctldev)
		return -EINVAL;
	ops = pctldev->desc->confops;
@@ -151,7 +151,7 @@ int pin_config_group_set(const char *dev_name, const char *pin_group,
	int ret;
	int i;

	pctldev = get_pinctrl_dev_from_dev(NULL, dev_name);
	pctldev = get_pinctrl_dev_from_devname(dev_name);
	if (!pctldev)
		return -EINVAL;
	ops = pctldev->desc->confops;
+8 −19
Original line number Diff line number Diff line
@@ -354,7 +354,7 @@ int __init pinmux_register_mappings(struct pinmux_map const *maps,
			return -EINVAL;
		}

		if (!maps[i].ctrl_dev && !maps[i].ctrl_dev_name) {
		if (!maps[i].ctrl_dev_name) {
			pr_err("failed to register map %s (%d): no pin control device given\n",
			       maps[i].name, i);
			return -EINVAL;
@@ -366,7 +366,7 @@ int __init pinmux_register_mappings(struct pinmux_map const *maps,
			return -EINVAL;
		}

		if (!maps[i].dev && !maps[i].dev_name)
		if (!maps[i].dev_name)
			pr_debug("add system map %s function %s with no device\n",
				 maps[i].name,
				 maps[i].function);
@@ -721,20 +721,12 @@ struct pinmux *pinmux_get(struct device *dev, const char *name)
		/*
		 * First, try to find the pctldev given in the map
		 */
		pctldev = get_pinctrl_dev_from_dev(map->ctrl_dev,
						   map->ctrl_dev_name);
		pctldev = get_pinctrl_dev_from_devname(map->ctrl_dev_name);
		if (!pctldev) {
			const char *devname = NULL;

			if (map->ctrl_dev)
				devname = dev_name(map->ctrl_dev);
			else if (map->ctrl_dev_name)
				devname = map->ctrl_dev_name;

			pr_warning("could not find a pinctrl device for pinmux function %s, fishy, they shall all have one\n",
				   map->function);
			pr_warning("given pinctrl device name: %s",
				   devname ? devname : "UNDEFINED");
				   map->ctrl_dev_name);

			/* Continue to check the other mappings anyway... */
			continue;
@@ -925,7 +917,7 @@ static int pinmux_hog_map(struct pinctrl_dev *pctldev,
	struct pinmux *pmx;
	int ret;

	if (map->dev || map->dev_name) {
	if (map->dev_name) {
		/*
		 * TODO: the day we have device tree support, we can
		 * traverse the device tree and hog to specific device nodes
@@ -996,9 +988,8 @@ int pinmux_hog_maps(struct pinctrl_dev *pctldev)
		if (!map->hog_on_boot)
			continue;

		if ((map->ctrl_dev == dev) ||
			(map->ctrl_dev_name &&
				!strcmp(map->ctrl_dev_name, devname))) {
		if (map->ctrl_dev_name &&
		    !strcmp(map->ctrl_dev_name, devname)) {
			/* OK time to hog! */
			ret = pinmux_hog_map(pctldev, map);
			if (ret)
@@ -1156,14 +1147,12 @@ static int pinmux_maps_show(struct seq_file *s, void *what)
		struct pinmux_map const *map = &pinmux_maps[i];

		seq_printf(s, "%s:\n", map->name);
		if (map->dev || map->dev_name)
		if (map->dev_name)
			seq_printf(s, "  device: %s\n",
				   map->dev ? dev_name(map->dev) :
				   map->dev_name);
		else
			seq_printf(s, "  SYSTEM MUX\n");
		seq_printf(s, "  controlling device %s\n",
			   map->ctrl_dev ? dev_name(map->ctrl_dev) :
			   map->ctrl_dev_name);
		seq_printf(s, "  function: %s\n", map->function);
		seq_printf(s, "  group: %s\n", map->group ? map->group :
Loading