Commit 8978277c authored by William Breathitt Gray's avatar William Breathitt Gray Committed by Bartosz Golaszewski
Browse files

gpio: regmap: Always set gpio_chip get_direction



If you only have reg_dat_base set, then it is input-only; if you only
have reg_set_base set, then it is output-only. Thus, we can always set
gpio_chip get_direction to gpio_regmap_get_direction and return
GPIO_LINE_DIRECTION_IN/GPIO_LINE_DIRECTION_OUT given the respective
register base addresses configuration.

Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: default avatarMichael Walle <michael@walle.cc>
Signed-off-by: default avatarWilliam Breathitt Gray <william.gray@linaro.org>
Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
parent 9eeaa60e
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -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;
@@ -265,8 +270,8 @@ struct gpio_regmap *gpio_regmap_register(const struct gpio_regmap_config *config
	else if (gpio->reg_set_base)
		chip->set = gpio_regmap_set;

	if (gpio->reg_dir_in_base || gpio->reg_dir_out_base) {
	chip->get_direction = gpio_regmap_get_direction;
	if (gpio->reg_dir_in_base || gpio->reg_dir_out_base) {
		chip->direction_input = gpio_regmap_direction_input;
		chip->direction_output = gpio_regmap_direction_output;
	}