From 617c7cb337c1c1ef7d2362c894c55af7179aa0bd Mon Sep 17 00:00:00 2001 From: Keith Short Date: Wed, 19 Jul 2023 12:14:23 -0600 Subject: [PATCH] gpio: nct38xx: Cleanup semaphore usage Cleanup the semaphore usage in the NCT38xx GPIO driver. Signed-off-by: Keith Short --- drivers/gpio/gpio_nct38xx_port.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/gpio/gpio_nct38xx_port.c b/drivers/gpio/gpio_nct38xx_port.c index 561e98842c9..07d3838d842 100644 --- a/drivers/gpio/gpio_nct38xx_port.c +++ b/drivers/gpio/gpio_nct38xx_port.c @@ -90,8 +90,7 @@ static int gpio_nct38xx_pin_config(const struct device *dev, gpio_pin_t pin, gpi ret = nct38xx_reg_update(config->nct38xx_dev, NCT38XX_REG_GPIO_DIR(config->gpio_port), reg, new_reg); - k_sem_give(&data->lock); - return ret; + goto done; } /* Select open drain 0:push-pull 1:open-drain */ @@ -220,10 +219,17 @@ done: static int gpio_nct38xx_port_get_raw(const struct device *dev, gpio_port_value_t *value) { + int ret; const struct gpio_nct38xx_port_config *const config = dev->config; + struct gpio_nct38xx_port_data *const data = dev->data; - return nct38xx_reg_read_byte(config->nct38xx_dev, - NCT38XX_REG_GPIO_DATA_IN(config->gpio_port), (uint8_t *)value); + k_sem_take(&data->lock, K_FOREVER); + + ret = nct38xx_reg_read_byte(config->nct38xx_dev, + NCT38XX_REG_GPIO_DATA_IN(config->gpio_port), (uint8_t *)value); + + k_sem_give(&data->lock); + return ret; } static int gpio_nct38xx_port_set_masked_raw(const struct device *dev, gpio_port_pins_t mask,