diff options
Diffstat (limited to 'drivers/pinctrl/core.c')
| -rw-r--r-- | drivers/pinctrl/core.c | 35 | 
1 files changed, 23 insertions, 12 deletions
| diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c index 2686a4450dfc..f67a8b7a4e18 100644 --- a/drivers/pinctrl/core.c +++ b/drivers/pinctrl/core.c @@ -481,18 +481,12 @@ int pinctrl_get_group_pins(struct pinctrl_dev *pctldev, const char *pin_group,  }  EXPORT_SYMBOL_GPL(pinctrl_get_group_pins); -/** - * pinctrl_find_gpio_range_from_pin() - locate the GPIO range for a pin - * @pctldev: the pin controller device to look in - * @pin: a controller-local number to find the range for - */  struct pinctrl_gpio_range * -pinctrl_find_gpio_range_from_pin(struct pinctrl_dev *pctldev, -				 unsigned int pin) +pinctrl_find_gpio_range_from_pin_nolock(struct pinctrl_dev *pctldev, +					unsigned int pin)  {  	struct pinctrl_gpio_range *range; -	mutex_lock(&pctldev->mutex);  	/* Loop over the ranges */  	list_for_each_entry(range, &pctldev->gpio_ranges, node) {  		/* Check if we're in the valid range */ @@ -500,15 +494,32 @@ pinctrl_find_gpio_range_from_pin(struct pinctrl_dev *pctldev,  			int a;  			for (a = 0; a < range->npins; a++) {  				if (range->pins[a] == pin) -					goto out; +					return range;  			}  		} else if (pin >= range->pin_base &&  			   pin < range->pin_base + range->npins) -			goto out; +			return range;  	} -	range = NULL; -out: + +	return NULL; +} +EXPORT_SYMBOL_GPL(pinctrl_find_gpio_range_from_pin_nolock); + +/** + * pinctrl_find_gpio_range_from_pin() - locate the GPIO range for a pin + * @pctldev: the pin controller device to look in + * @pin: a controller-local number to find the range for + */ +struct pinctrl_gpio_range * +pinctrl_find_gpio_range_from_pin(struct pinctrl_dev *pctldev, +				 unsigned int pin) +{ +	struct pinctrl_gpio_range *range; + +	mutex_lock(&pctldev->mutex); +	range = pinctrl_find_gpio_range_from_pin_nolock(pctldev, pin);  	mutex_unlock(&pctldev->mutex); +  	return range;  }  EXPORT_SYMBOL_GPL(pinctrl_find_gpio_range_from_pin); | 
