diff options
Diffstat (limited to 'drivers/pinctrl/pinctrl-sx150x.c')
-rw-r--r-- | drivers/pinctrl/pinctrl-sx150x.c | 70 |
1 files changed, 16 insertions, 54 deletions
diff --git a/drivers/pinctrl/pinctrl-sx150x.c b/drivers/pinctrl/pinctrl-sx150x.c index 4725fac3ede5..c339800a396b 100644 --- a/drivers/pinctrl/pinctrl-sx150x.c +++ b/drivers/pinctrl/pinctrl-sx150x.c @@ -343,13 +343,9 @@ static int sx150x_gpio_set_single_ended(struct gpio_chip *chip, sx150x_pin_is_oscio(pctl, offset)) return 0; - mutex_lock(&pctl->lock); ret = regmap_write_bits(pctl->regmap, pctl->data->pri.x789.reg_drain, BIT(offset), 0); - mutex_unlock(&pctl->lock); - if (ret < 0) - return ret; break; case LINE_MODE_OPEN_DRAIN: @@ -357,20 +353,16 @@ static int sx150x_gpio_set_single_ended(struct gpio_chip *chip, sx150x_pin_is_oscio(pctl, offset)) return -ENOTSUPP; - mutex_lock(&pctl->lock); ret = regmap_write_bits(pctl->regmap, pctl->data->pri.x789.reg_drain, BIT(offset), BIT(offset)); - mutex_unlock(&pctl->lock); - if (ret < 0) - return ret; break; - default: - return -ENOTSUPP; + ret = -ENOTSUPP; + break; } - return 0; + return ret; } static int __sx150x_gpio_set(struct sx150x_pinctrl *pctl, unsigned int offset, @@ -385,57 +377,46 @@ static void sx150x_gpio_set(struct gpio_chip *chip, unsigned int offset, { struct sx150x_pinctrl *pctl = gpiochip_get_data(chip); - if (sx150x_pin_is_oscio(pctl, offset)) { - mutex_lock(&pctl->lock); + if (sx150x_pin_is_oscio(pctl, offset)) regmap_write(pctl->regmap, pctl->data->pri.x789.reg_clock, (value ? 0x1f : 0x10)); - mutex_unlock(&pctl->lock); - } else { - mutex_lock(&pctl->lock); + else __sx150x_gpio_set(pctl, offset, value); - mutex_unlock(&pctl->lock); - } + } static int sx150x_gpio_direction_input(struct gpio_chip *chip, unsigned int offset) { struct sx150x_pinctrl *pctl = gpiochip_get_data(chip); - int ret; if (sx150x_pin_is_oscio(pctl, offset)) return -EINVAL; - mutex_lock(&pctl->lock); - ret = regmap_write_bits(pctl->regmap, - pctl->data->reg_dir, - BIT(offset), BIT(offset)); - mutex_unlock(&pctl->lock); - - return ret; + return regmap_write_bits(pctl->regmap, + pctl->data->reg_dir, + BIT(offset), BIT(offset)); } static int sx150x_gpio_direction_output(struct gpio_chip *chip, unsigned int offset, int value) { struct sx150x_pinctrl *pctl = gpiochip_get_data(chip); - int status; + int ret; if (sx150x_pin_is_oscio(pctl, offset)) { sx150x_gpio_set(chip, offset, value); return 0; } - mutex_lock(&pctl->lock); - status = __sx150x_gpio_set(pctl, offset, value); - if (status >= 0) - status = regmap_write_bits(pctl->regmap, - pctl->data->reg_dir, - BIT(offset), 0); - mutex_unlock(&pctl->lock); + ret = __sx150x_gpio_set(pctl, offset, value); + if (ret < 0) + return ret; - return status; + return regmap_write_bits(pctl->regmap, + pctl->data->reg_dir, + BIT(offset), 0); } static void sx150x_irq_mask(struct irq_data *d) @@ -536,12 +517,9 @@ static int sx150x_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin, switch (param) { case PIN_CONFIG_DRIVE_PUSH_PULL: case PIN_CONFIG_OUTPUT: - mutex_lock(&pctl->lock); ret = regmap_read(pctl->regmap, pctl->data->pri.x789.reg_clock, &data); - mutex_unlock(&pctl->lock); - if (ret < 0) return ret; @@ -566,12 +544,10 @@ static int sx150x_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin, switch (param) { case PIN_CONFIG_BIAS_PULL_DOWN: - mutex_lock(&pctl->lock); ret = regmap_read(pctl->regmap, pctl->data->reg_pulldn, &data); data &= BIT(pin); - mutex_unlock(&pctl->lock); if (ret < 0) return ret; @@ -583,12 +559,10 @@ static int sx150x_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin, break; case PIN_CONFIG_BIAS_PULL_UP: - mutex_lock(&pctl->lock); ret = regmap_read(pctl->regmap, pctl->data->reg_pullup, &data); data &= BIT(pin); - mutex_unlock(&pctl->lock); if (ret < 0) return ret; @@ -603,12 +577,10 @@ static int sx150x_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin, if (pctl->data->model != SX150X_789) return -ENOTSUPP; - mutex_lock(&pctl->lock); ret = regmap_read(pctl->regmap, pctl->data->pri.x789.reg_drain, &data); data &= BIT(pin); - mutex_unlock(&pctl->lock); if (ret < 0) return ret; @@ -623,12 +595,10 @@ static int sx150x_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin, if (pctl->data->model != SX150X_789) arg = true; else { - mutex_lock(&pctl->lock); ret = regmap_read(pctl->regmap, pctl->data->pri.x789.reg_drain, &data); data &= BIT(pin); - mutex_unlock(&pctl->lock); if (ret < 0) return ret; @@ -693,41 +663,33 @@ static int sx150x_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin, switch (param) { case PIN_CONFIG_BIAS_PULL_PIN_DEFAULT: case PIN_CONFIG_BIAS_DISABLE: - mutex_lock(&pctl->lock); ret = regmap_write_bits(pctl->regmap, pctl->data->reg_pulldn, BIT(pin), 0); - mutex_unlock(&pctl->lock); if (ret < 0) return ret; - mutex_lock(&pctl->lock); ret = regmap_write_bits(pctl->regmap, pctl->data->reg_pullup, BIT(pin), 0); - mutex_unlock(&pctl->lock); if (ret < 0) return ret; break; case PIN_CONFIG_BIAS_PULL_UP: - mutex_lock(&pctl->lock); ret = regmap_write_bits(pctl->regmap, pctl->data->reg_pullup, BIT(pin), BIT(pin)); - mutex_unlock(&pctl->lock); if (ret < 0) return ret; break; case PIN_CONFIG_BIAS_PULL_DOWN: - mutex_lock(&pctl->lock); ret = regmap_write_bits(pctl->regmap, pctl->data->reg_pulldn, BIT(pin), BIT(pin)); - mutex_unlock(&pctl->lock); if (ret < 0) return ret; |