mirror of
https://github.com/torvalds/linux.git
synced 2025-11-02 17:49:03 +02:00
gpio: regmap: Allow ngpio to be read from the property
GPIOLIB supports the case when number of supported GPIOs can be read from the device property. Enable this for drivers that are using GPIO regmap layer. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Reviewed-by: Michael Walle <mwalle@kernel.org> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Tested-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Reviewed-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Link: https://lore.kernel.org/r/20250213195621.3133406-6-andriy.shevchenko@linux.intel.com Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
This commit is contained in:
parent
a630d3960b
commit
db30516188
2 changed files with 10 additions and 5 deletions
|
|
@ -17,6 +17,8 @@
|
|||
#include <linux/gpio/driver.h>
|
||||
#include <linux/gpio/regmap.h>
|
||||
|
||||
#include "gpiolib.h"
|
||||
|
||||
struct gpio_regmap {
|
||||
struct device *parent;
|
||||
struct regmap *regmap;
|
||||
|
|
@ -210,9 +212,6 @@ struct gpio_regmap *gpio_regmap_register(const struct gpio_regmap_config *config
|
|||
if (!config->parent)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
if (!config->ngpio)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
/* we need at least one */
|
||||
if (!config->reg_dat_base && !config->reg_set_base)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
|
@ -243,7 +242,6 @@ struct gpio_regmap *gpio_regmap_register(const struct gpio_regmap_config *config
|
|||
chip->parent = config->parent;
|
||||
chip->fwnode = config->fwnode;
|
||||
chip->base = -1;
|
||||
chip->ngpio = config->ngpio;
|
||||
chip->names = config->names;
|
||||
chip->label = config->label ?: dev_name(config->parent);
|
||||
chip->can_sleep = regmap_might_sleep(config->regmap);
|
||||
|
|
@ -262,6 +260,13 @@ struct gpio_regmap *gpio_regmap_register(const struct gpio_regmap_config *config
|
|||
chip->direction_output = gpio_regmap_direction_output;
|
||||
}
|
||||
|
||||
chip->ngpio = config->ngpio;
|
||||
if (!chip->ngpio) {
|
||||
ret = gpiochip_get_ngpios(chip, chip->parent);
|
||||
if (ret)
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
/* if not set, assume there is only one register */
|
||||
gpio->ngpio_per_reg = config->ngpio_per_reg;
|
||||
if (!gpio->ngpio_per_reg)
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ struct regmap;
|
|||
* If not given, the fwnode of the parent is used.
|
||||
* @label: (Optional) Descriptive name for GPIO controller.
|
||||
* If not given, the name of the device is used.
|
||||
* @ngpio: Number of GPIOs
|
||||
* @ngpio: (Optional) Number of GPIOs
|
||||
* @names: (Optional) Array of names for gpios
|
||||
* @reg_dat_base: (Optional) (in) register base address
|
||||
* @reg_set_base: (Optional) set register base address
|
||||
|
|
|
|||
Loading…
Reference in a new issue