|
@@ -688,6 +688,35 @@ int pinctrl_gpio_direction_output(unsigned gpio)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(pinctrl_gpio_direction_output);
|
|
|
|
|
|
+/**
|
|
|
+ * pinctrl_gpio_set_config() - Apply config to given GPIO pin
|
|
|
+ * @gpio: the GPIO pin number from the GPIO subsystem number space
|
|
|
+ * @config: the configuration to apply to the GPIO
|
|
|
+ *
|
|
|
+ * This function should *ONLY* be used from gpiolib-based GPIO drivers, if
|
|
|
+ * they need to call the underlying pin controller to change GPIO config
|
|
|
+ * (for example set debounce time).
|
|
|
+ */
|
|
|
+int pinctrl_gpio_set_config(unsigned gpio, unsigned long config)
|
|
|
+{
|
|
|
+ unsigned long configs[] = { config };
|
|
|
+ struct pinctrl_gpio_range *range;
|
|
|
+ struct pinctrl_dev *pctldev;
|
|
|
+ int ret, pin;
|
|
|
+
|
|
|
+ ret = pinctrl_get_device_gpio_range(gpio, &pctldev, &range);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ mutex_lock(&pctldev->mutex);
|
|
|
+ pin = gpio_to_pin(range, gpio);
|
|
|
+ ret = pinconf_set_config(pctldev, pin, configs, ARRAY_SIZE(configs));
|
|
|
+ mutex_unlock(&pctldev->mutex);
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(pinctrl_gpio_set_config);
|
|
|
+
|
|
|
static struct pinctrl_state *find_state(struct pinctrl *p,
|
|
|
const char *name)
|
|
|
{
|