diff options
Diffstat (limited to 'drivers/gpio/gpio-regmap.c')
| -rw-r--r-- | drivers/gpio/gpio-regmap.c | 17 | 
1 files changed, 7 insertions, 10 deletions
diff --git a/drivers/gpio/gpio-regmap.c b/drivers/gpio/gpio-regmap.c index 6383136cbe59..fca17d478984 100644 --- a/drivers/gpio/gpio-regmap.c +++ b/drivers/gpio/gpio-regmap.c @@ -111,6 +111,11 @@ static int gpio_regmap_get_direction(struct gpio_chip *chip,  	unsigned int base, val, reg, mask;  	int invert, ret; +	if (gpio->reg_dat_base && !gpio->reg_set_base) +		return GPIO_LINE_DIRECTION_IN; +	if (gpio->reg_set_base && !gpio->reg_dat_base) +		return GPIO_LINE_DIRECTION_OUT; +  	if (gpio->reg_dir_out_base) {  		base = gpio_regmap_addr(gpio->reg_dir_out_base);  		invert = 0; @@ -249,15 +254,7 @@ struct gpio_regmap *gpio_regmap_register(const struct gpio_regmap_config *config  	chip->ngpio = config->ngpio;  	chip->names = config->names;  	chip->label = config->label ?: dev_name(config->parent); - -	/* -	 * If our regmap is fast_io we should probably set can_sleep to false. -	 * Right now, the regmap doesn't save this property, nor is there any -	 * access function for it. -	 * The only regmap type which uses fast_io is regmap-mmio. For now, -	 * assume a safe default of true here. -	 */ -	chip->can_sleep = true; +	chip->can_sleep = regmap_might_sleep(config->regmap);  	chip->get = gpio_regmap_get;  	if (gpio->reg_set_base && gpio->reg_clr_base) @@ -265,8 +262,8 @@ struct gpio_regmap *gpio_regmap_register(const struct gpio_regmap_config *config  	else if (gpio->reg_set_base)  		chip->set = gpio_regmap_set; +	chip->get_direction = gpio_regmap_get_direction;  	if (gpio->reg_dir_in_base || gpio->reg_dir_out_base) { -		chip->get_direction = gpio_regmap_get_direction;  		chip->direction_input = gpio_regmap_direction_input;  		chip->direction_output = gpio_regmap_direction_output;  	}  |