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: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
fa76a3db70
commit
8c4c201634
@ -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 */
|
||||||
|
@ -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,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user