regulator: core: Correct type of mode in regulator_mode_constrain
PATCH v2 1/2 regulator: core: Correct type of mode in regulator_mode_constrain
Every function handling the mode within the regulator core uses an unsigned int for mode, except for regulator_mode_constrain. This patch changes the type of mode within regulator_mode_constrain which fixes several instances where we are passing pointers to unsigned ints then treating them as an int within this function.
---
No change since v1.
Thanks,
Charles
drivers/regulator/core.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/regulator/core.c +2 -1
@@ -293,7 +293,8 @@ static int regulator_check_current_limit(struct regulator_dev *rdev, }/* operating mode constraint check */ -static int regulator_mode_constrain (struct regulator_dev *rdev,int *mode) +static int regulator_mode_constrain (struct regulator_dev *rdev, +unsigned int *mode) {switch (*mode) {case REGULATOR_MODE_FAST :
Signature · 1 line
2.1.4
PATCH v2 2/2 regulator: core: Allow enable GPIO to be specified using GPIOD
The regulator subsystem has used GPIOs internally for a while, however, end drivers must still specify their enable GPIO using a GPIO number. This patch allows the end drivers to specify the enable GPIO using GPIOD directly.
---
Changes since v1:
- Make a small correction to the error path, where we were calling desc_to_gpio on something that might not be zero.
Thanks,
Charles
drivers/regulator/core.c | 43 ++++++++++++++++++++++++++-------------- include/linux/regulator/driver.h | 14 ++++++++----- 2 files changed, 37 insertions(+), 20 deletions(-)
drivers/regulator/core.c +28 -15
@@ -1929,6 +1929,16 @@ void regulator_bulk_unregister_supply_alias(struct device *dev, }EXPORT_SYMBOL_GPL (regulator_bulk_unregister_supply_alias); +static bool regulator_ena_gpio_valid (const struct regulator_config *config) +{ +if (config->ena_gpiod) +return true; + +if (config->ena_gpio || config->ena_gpio_initialized) +return gpio_is_valid (config->ena_gpio); + +return false; +}/* Manage enable GPIO list. Same GPIO pin can be shared among regulators */ static int regulator_ena_gpio_request(struct regulator_dev *rdev,
@@ -1938,7 +1948,10 @@ static int regulator_ena_gpio_request(struct regulator_dev *rdev,struct gpio_desc *gpiod;int ret; - gpiod =gpio_to_desc (config->ena_gpio); +if (config->ena_gpiod) + gpiod = config->ena_gpiod; +else + gpiod =gpio_to_desc (config->ena_gpio);list_for_each_entry (pin, ®ulator_ena_gpio_list, list) {if (pin->gpiod == gpiod) {
@@ -1948,16 +1961,20 @@ static int regulator_ena_gpio_request(struct regulator_dev *rdev, } } - ret =gpio_request_one (config->ena_gpio, -GPIOF_DIR_OUT | config->ena_gpio_flags, -rdev_get_name (rdev)); -if (ret) -return ret; - pin =kzalloc (sizeof (struct regulator_enable_gpio ),GFP_KERNEL ); -if (pin ==NULL ) { -gpio_free (config->ena_gpio); +if (!pin)return -ENOMEM ; + +if (!config->ena_gpiod) { + ret =gpio_request_one (config->ena_gpio, +GPIOF_DIR_OUT | config->ena_gpio_flags, +rdev_get_name (rdev)); +if (ret) { +kfree (pin); +rdev_err (rdev,"Failed to request enable GPIO%d: %d\n" , + config->ena_gpio, ret); +return ret; + } } pin->gpiod = gpiod;
@@ -4027,16 +4044,12 @@ regulator_register(const struct regulator_desc *regulator_desc, goto clean; } -if ((config->ena_gpio || config->ena_gpio_initialized) && -gpio_is_valid (config->ena_gpio)) { +if (regulator_ena_gpio_valid (config)) {mutex_lock (®ulator_list_mutex); ret =regulator_ena_gpio_request (rdev, config);mutex_unlock (®ulator_list_mutex); -if (ret !=0 ) { -rdev_err (rdev,"Failed to request enable GPIO%d: %d\n" , - config->ena_gpio, ret); +if (ret !=0 ) goto clean; - } }/* register with sysfs */
include/linux/regulator/driver.h +9 -5
@@ -367,11 +367,13 @@ struct regulator_desc {* NULL). * @regmap: regmap to use for core regmap helpers if dev_get_regmap() is * insufficient. -* @ena_gpio_initialized: GPIO controlling regulator enable was properly -* initialized, meaning that >= 0 is a valid gpio -* identifier and < 0 is a non existent gpio. -* @ena_gpio: GPIO controlling regulator enable. +* @ena_gpiod: GPIO controlling regulator enable. * @ena_gpio_invert: Sense for GPIO enable control. +* @ena_gpio_initialized: ena_gpio enable was properly initialized, +* meaning that >= 0 is a valid gpio identifier +* and < 0 is a non existent gpio. +* @ena_gpio: GPIO controlling regulator enable, deprecated in favour of +* ena_gpiod. * @ena_gpio_flags: Flags to use when calling gpio_request_one() */ struct regulator_config {
@@ -381,9 +383,11 @@ struct regulator_config {struct device_node *of_node;struct regmap *regmap; +struct gpio_desc *ena_gpiod; + unsigned int ena_gpio_invert:1; +bool ena_gpio_initialized;int ena_gpio; - unsigned int ena_gpio_invert:1;unsigned int ena_gpio_flags; };
Signature · 1 line
2.1.4