Re: [PATCH 1/3] pinctrl: export pin_request to support parent pin
From: Jun Nie <hidden>
Date: 2016-09-06 06:07:22
Also in:
linux-gpio
2016-08-26 20:19 GMT+08:00 Jun Nie [off-list ref]:
quoted hunk ↗ jump to hunk
Some pin functions may be controlled in 2nd level multiplex. We need configure 1st level multiplex when request such functions. Export pin_request functionality so that parent can be configured automatically with calling it in pinmux_ops->request(). Signed-off-by: Jun Nie <redacted> --- drivers/pinctrl/core.c | 20 ++++++++++++++++++++ drivers/pinctrl/pinmux.c | 3 ++- drivers/pinctrl/pinmux.h | 9 +++++++++ include/linux/pinctrl/pinctrl.h | 2 ++ 4 files changed, 33 insertions(+), 1 deletion(-)diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c index fb38e20..0782a93 100644 --- a/drivers/pinctrl/core.c +++ b/drivers/pinctrl/core.c@@ -688,6 +688,26 @@ int pinctrl_gpio_direction_output(unsigned gpio) } EXPORT_SYMBOL_GPL(pinctrl_gpio_direction_output); +/** + * pinctrl_request_pin() - request a single pin to be used + * @offset: the pin number from pinctrl dev pin number space + */ +int pinctrl_request_pin(struct pinctrl_dev *pctldev, + int offset, const char *owner) +{ + int ret; + + mutex_lock(&pctldev->mutex); + + ret = pin_request(pctldev, offset, owner, NULL); + + mutex_unlock(&pctldev->mutex); + + return ret; +} +EXPORT_SYMBOL_GPL(pinctrl_request_pin); + + static struct pinctrl_state *find_state(struct pinctrl *p, const char *name) {diff --git a/drivers/pinctrl/pinmux.c b/drivers/pinctrl/pinmux.c index ece7028..b18c1f0 100644 --- a/drivers/pinctrl/pinmux.c +++ b/drivers/pinctrl/pinmux.c@@ -80,7 +80,7 @@ int pinmux_validate_map(struct pinctrl_map const *map, int i) * @gpio_range: the range matching the GPIO pin if this is a request for a * single GPIO pin */ -static int pin_request(struct pinctrl_dev *pctldev, +int pin_request(struct pinctrl_dev *pctldev, int pin, const char *owner, struct pinctrl_gpio_range *gpio_range) {@@ -180,6 +180,7 @@ out: return status; } +EXPORT_SYMBOL(pin_request); /** * pin_free() - release a single muxed in pin so something else can be muxeddiff --git a/drivers/pinctrl/pinmux.h b/drivers/pinctrl/pinmux.h index d1a98b1c..6ff9baf 100644 --- a/drivers/pinctrl/pinmux.h +++ b/drivers/pinctrl/pinmux.h@@ -30,6 +30,9 @@ int pinmux_map_to_setting(struct pinctrl_map const *map, void pinmux_free_setting(struct pinctrl_setting const *setting); int pinmux_enable_setting(struct pinctrl_setting const *setting); void pinmux_disable_setting(struct pinctrl_setting const *setting); +int pin_request(struct pinctrl_dev *pctldev, + int pin, const char *owner, + struct pinctrl_gpio_range *gpio_range); #else@@ -83,6 +86,12 @@ static inline void pinmux_disable_setting( { } +int pin_request(struct pinctrl_dev *pctldev, + int pin, const char *owner, + struct pinctrl_gpio_range *gpio_range) +{ +} + #endif #if defined(CONFIG_PINMUX) && defined(CONFIG_DEBUG_FS)diff --git a/include/linux/pinctrl/pinctrl.h b/include/linux/pinctrl/pinctrl.h index a42e57d..13bb7a1 100644 --- a/include/linux/pinctrl/pinctrl.h +++ b/include/linux/pinctrl/pinctrl.h@@ -167,6 +167,8 @@ pinctrl_find_gpio_range_from_pin(struct pinctrl_dev *pctldev, extern int pinctrl_get_group_pins(struct pinctrl_dev *pctldev, const char *pin_group, const unsigned **pins, unsigned *num_pins); +extern int pinctrl_request_pin(struct pinctrl_dev *pctldev, + int offset, const char *owner); #ifdef CONFIG_OF extern struct pinctrl_dev *of_pinctrl_get(struct device_node *np); --1.9.1
Linus, Do you have any comments on these change and following ZX pinctrl driver? Thank you! Jun