Merge tag 'audit-pr-20191126' of git://git.kernel.org/pub/scm/linux/kernel/git/pcmoor...
[linux-2.6-microblaze.git] / drivers / pinctrl / core.c
index b70df27..2bbd8ee 100644 (file)
@@ -736,6 +736,34 @@ int pinctrl_get_group_selector(struct pinctrl_dev *pctldev,
        return -EINVAL;
 }
 
+bool pinctrl_gpio_can_use_line(unsigned gpio)
+{
+       struct pinctrl_dev *pctldev;
+       struct pinctrl_gpio_range *range;
+       bool result;
+       int pin;
+
+       /*
+        * Try to obtain GPIO range, if it fails
+        * we're probably dealing with GPIO driver
+        * without a backing pin controller - bail out.
+        */
+       if (pinctrl_get_device_gpio_range(gpio, &pctldev, &range))
+               return true;
+
+       mutex_lock(&pctldev->mutex);
+
+       /* Convert to the pin controllers number space */
+       pin = gpio_to_pin(range, gpio);
+
+       result = pinmux_can_be_used_for_gpio(pctldev, pin);
+
+       mutex_unlock(&pctldev->mutex);
+
+       return result;
+}
+EXPORT_SYMBOL_GPL(pinctrl_gpio_can_use_line);
+
 /**
  * pinctrl_gpio_request() - request a single pin to be used as GPIO
  * @gpio: the GPIO pin number from the GPIO subsystem number space