diff options
Diffstat (limited to 'drivers/gpio/gpio-aggregator.c')
| -rw-r--r-- | drivers/gpio/gpio-aggregator.c | 18 | 
1 files changed, 14 insertions, 4 deletions
diff --git a/drivers/gpio/gpio-aggregator.c b/drivers/gpio/gpio-aggregator.c index 869dc952cf45..0cb2664085cf 100644 --- a/drivers/gpio/gpio-aggregator.c +++ b/drivers/gpio/gpio-aggregator.c @@ -278,7 +278,8 @@ static int gpio_fwd_get(struct gpio_chip *chip, unsigned int offset)  {  	struct gpiochip_fwd *fwd = gpiochip_get_data(chip); -	return gpiod_get_value(fwd->descs[offset]); +	return chip->can_sleep ? gpiod_get_value_cansleep(fwd->descs[offset]) +			       : gpiod_get_value(fwd->descs[offset]);  }  static int gpio_fwd_get_multiple(struct gpiochip_fwd *fwd, unsigned long *mask, @@ -293,7 +294,10 @@ static int gpio_fwd_get_multiple(struct gpiochip_fwd *fwd, unsigned long *mask,  	for_each_set_bit(i, mask, fwd->chip.ngpio)  		descs[j++] = fwd->descs[i]; -	error = gpiod_get_array_value(j, descs, NULL, values); +	if (fwd->chip.can_sleep) +		error = gpiod_get_array_value_cansleep(j, descs, NULL, values); +	else +		error = gpiod_get_array_value(j, descs, NULL, values);  	if (error)  		return error; @@ -328,7 +332,10 @@ static void gpio_fwd_set(struct gpio_chip *chip, unsigned int offset, int value)  {  	struct gpiochip_fwd *fwd = gpiochip_get_data(chip); -	gpiod_set_value(fwd->descs[offset], value); +	if (chip->can_sleep) +		gpiod_set_value_cansleep(fwd->descs[offset], value); +	else +		gpiod_set_value(fwd->descs[offset], value);  }  static void gpio_fwd_set_multiple(struct gpiochip_fwd *fwd, unsigned long *mask, @@ -343,7 +350,10 @@ static void gpio_fwd_set_multiple(struct gpiochip_fwd *fwd, unsigned long *mask,  		descs[j++] = fwd->descs[i];  	} -	gpiod_set_array_value(j, descs, NULL, values); +	if (fwd->chip.can_sleep) +		gpiod_set_array_value_cansleep(j, descs, NULL, values); +	else +		gpiod_set_array_value(j, descs, NULL, values);  }  static void gpio_fwd_set_multiple_locked(struct gpio_chip *chip,  | 
