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

Commit 8c4c2016 authored by Linus Walleij's avatar Linus Walleij
Browse files

pinctrl: move strict option to pinmux_ops



While the pinmux_ops are ideally just a vtable for pin mux
calls, the "strict" setting belongs so intuitively with the
pin multiplexing that we should move it here anyway. Putting
it in the top pinctrl_desc makes no sense.

Cc: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent fa76a3db
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -73,7 +73,6 @@ static struct pinctrl_desc foo_desc = {
	.pins = foo_pins,
	.pins = foo_pins,
	.npins = ARRAY_SIZE(foo_pins),
	.npins = ARRAY_SIZE(foo_pins),
	.owner = THIS_MODULE,
	.owner = THIS_MODULE,
	.strict = true,
};
};


int __init foo_probe(void)
int __init foo_probe(void)
@@ -715,6 +714,7 @@ static struct pinmux_ops foo_pmxops = {
	.get_function_name = foo_get_fname,
	.get_function_name = foo_get_fname,
	.get_function_groups = foo_get_groups,
	.get_function_groups = foo_get_groups,
	.set_mux = foo_set_mux,
	.set_mux = foo_set_mux,
	.strict = true,
};
};


/* Pinmux operations are handled by some pin controller */
/* Pinmux operations are handled by some pin controller */
+1 −1
Original line number Original line Diff line number Diff line
@@ -703,6 +703,7 @@ static struct pinmux_ops adi_pinmux_ops = {
	.get_function_name = adi_pinmux_get_func_name,
	.get_function_name = adi_pinmux_get_func_name,
	.get_function_groups = adi_pinmux_get_groups,
	.get_function_groups = adi_pinmux_get_groups,
	.gpio_request_enable = adi_pinmux_request_gpio,
	.gpio_request_enable = adi_pinmux_request_gpio,
	.strict = true,
};
};




@@ -710,7 +711,6 @@ static struct pinctrl_desc adi_pinmux_desc = {
	.name = DRIVER_NAME,
	.name = DRIVER_NAME,
	.pctlops = &adi_pctrl_ops,
	.pctlops = &adi_pctrl_ops,
	.pmxops = &adi_pinmux_ops,
	.pmxops = &adi_pinmux_ops,
	.strict = true,
	.owner = THIS_MODULE,
	.owner = THIS_MODULE,
};
};


+2 −2
Original line number Original line Diff line number Diff line
@@ -107,7 +107,7 @@ static int pin_request(struct pinctrl_dev *pctldev,
				desc->name, desc->gpio_owner, owner);
				desc->name, desc->gpio_owner, owner);
			goto out;
			goto out;
		}
		}
		if (pctldev->desc->strict && desc->mux_usecount &&
		if (ops->strict && desc->mux_usecount &&
		    strcmp(desc->mux_owner, owner)) {
		    strcmp(desc->mux_owner, owner)) {
			dev_err(pctldev->dev,
			dev_err(pctldev->dev,
				"pin %s already requested by %s; cannot claim for %s\n",
				"pin %s already requested by %s; cannot claim for %s\n",
@@ -123,7 +123,7 @@ static int pin_request(struct pinctrl_dev *pctldev,
				desc->name, desc->mux_owner, owner);
				desc->name, desc->mux_owner, owner);
			goto out;
			goto out;
		}
		}
		if (pctldev->desc->strict && desc->gpio_owner) {
		if (ops->strict && desc->gpio_owner) {
			dev_err(pctldev->dev,
			dev_err(pctldev->dev,
				"pin %s already requested by %s; cannot claim for %s\n",
				"pin %s already requested by %s; cannot claim for %s\n",
				desc->name, desc->gpio_owner, owner);
				desc->name, desc->gpio_owner, owner);
+0 −3
Original line number Original line Diff line number Diff line
@@ -114,8 +114,6 @@ struct pinctrl_ops {
 *	of the pins field above
 *	of the pins field above
 * @pctlops: pin control operation vtable, to support global concepts like
 * @pctlops: pin control operation vtable, to support global concepts like
 *	grouping of pins, this is optional.
 *	grouping of pins, this is optional.
 * @strict: check both gpio_owner and mux_owner strictly before approving
	the pin request
 * @pmxops: pinmux operations vtable, if you support pinmuxing in your driver
 * @pmxops: pinmux operations vtable, if you support pinmuxing in your driver
 * @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
@@ -134,7 +132,6 @@ struct pinctrl_desc {
	const struct pinctrl_ops *pctlops;
	const struct pinctrl_ops *pctlops;
	const struct pinmux_ops *pmxops;
	const struct pinmux_ops *pmxops;
	const struct pinconf_ops *confops;
	const struct pinconf_ops *confops;
	bool strict;
	struct module *owner;
	struct module *owner;
#ifdef CONFIG_GENERIC_PINCONF
#ifdef CONFIG_GENERIC_PINCONF
	unsigned int num_custom_params;
	unsigned int num_custom_params;
+4 −0
Original line number Original line Diff line number Diff line
@@ -56,6 +56,9 @@ struct pinctrl_dev;
 *	depending on whether the GPIO is configured as input or output,
 *	depending on whether the GPIO is configured as input or output,
 *	a direction selector function may be implemented as a backing
 *	a direction selector function may be implemented as a backing
 *	to the GPIO controllers that need pin muxing.
 *	to the GPIO controllers that need pin muxing.
 * @strict: do not allow simultaneous use of the same pin for GPIO and another
 *	function. Check both gpio_owner and mux_owner strictly before approving
 *	the pin request.
 */
 */
struct pinmux_ops {
struct pinmux_ops {
	int (*request) (struct pinctrl_dev *pctldev, unsigned offset);
	int (*request) (struct pinctrl_dev *pctldev, unsigned offset);
@@ -79,6 +82,7 @@ struct pinmux_ops {
				   struct pinctrl_gpio_range *range,
				   struct pinctrl_gpio_range *range,
				   unsigned offset,
				   unsigned offset,
				   bool input);
				   bool input);
	bool strict;
};
};


#endif /* CONFIG_PINMUX */
#endif /* CONFIG_PINMUX */