diff --git a/drivers/pinctrl/pinmux.c b/drivers/pinctrl/pinmux.c index 53fe25e9e8647c2f0db51abfad538de48a36b2f5..92cd855f374873d8ab42c3cb17d233df6945c7f8 100644 --- a/drivers/pinctrl/pinmux.c +++ b/drivers/pinctrl/pinmux.c @@ -247,18 +247,7 @@ static const char *pin_free(struct pinctrl_dev *pctldev, int pin, return NULL; } } - mutex_unlock(&desc->mux_lock); - - /* - * If there is no kind of request function for the pin we just assume - * we got it by default and proceed. - */ - if (gpio_range && ops->gpio_disable_free) - ops->gpio_disable_free(pctldev, gpio_range, pin); - else if (ops->free) - ops->free(pctldev, pin); - mutex_lock(&desc->mux_lock); if (gpio_range) { owner = desc->gpio_owner; desc->gpio_owner = NULL; @@ -269,6 +258,15 @@ static const char *pin_free(struct pinctrl_dev *pctldev, int pin, } mutex_unlock(&desc->mux_lock); + /* + * If there is no kind of request function for the pin we just assume + * we got it by default and proceed. + */ + if (gpio_range && ops->gpio_disable_free) + ops->gpio_disable_free(pctldev, gpio_range, pin); + else if (ops->free) + ops->free(pctldev, pin); + module_put(pctldev->owner); return owner;