Loading drivers/regulator/arizona-ldo1.c +2 −0 Original line number Diff line number Diff line Loading @@ -130,6 +130,7 @@ static const struct regulator_desc arizona_ldo1_hc = { .uV_step = 50000, .n_voltages = 8, .enable_time = 1500, .ramp_delay = 24000, .owner = THIS_MODULE, }; Loading @@ -153,6 +154,7 @@ static const struct regulator_desc arizona_ldo1 = { .uV_step = 25000, .n_voltages = 13, .enable_time = 500, .ramp_delay = 24000, .owner = THIS_MODULE, }; Loading drivers/regulator/core.c +33 −0 Original line number Diff line number Diff line Loading @@ -3360,6 +3360,39 @@ unsigned int regulator_get_mode(struct regulator *regulator) } EXPORT_SYMBOL_GPL(regulator_get_mode); static int _regulator_get_error_flags(struct regulator_dev *rdev, unsigned int *flags) { int ret; mutex_lock(&rdev->mutex); /* sanity check */ if (!rdev->desc->ops->get_error_flags) { ret = -EINVAL; goto out; } ret = rdev->desc->ops->get_error_flags(rdev, flags); out: mutex_unlock(&rdev->mutex); return ret; } /** * regulator_get_error_flags - get regulator error information * @regulator: regulator source * @flags: pointer to store error flags * * Get the current regulator error information. */ int regulator_get_error_flags(struct regulator *regulator, unsigned int *flags) { return _regulator_get_error_flags(regulator->rdev, flags); } EXPORT_SYMBOL_GPL(regulator_get_error_flags); /** * regulator_set_load - set regulator load * @regulator: regulator source Loading drivers/regulator/fixed.c +46 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,9 @@ #include <linux/of_gpio.h> #include <linux/regulator/of_regulator.h> #include <linux/regulator/machine.h> #include <linux/acpi.h> #include <linux/property.h> #include <linux/gpio/consumer.h> struct fixed_voltage_data { struct regulator_desc desc; Loading Loading @@ -94,6 +97,44 @@ of_get_fixed_voltage_config(struct device *dev, return config; } /** * acpi_get_fixed_voltage_config - extract fixed_voltage_config structure info * @dev: device requesting for fixed_voltage_config * @desc: regulator description * * Populates fixed_voltage_config structure by extracting data through ACPI * interface, returns a pointer to the populated structure of NULL if memory * alloc fails. */ static struct fixed_voltage_config * acpi_get_fixed_voltage_config(struct device *dev, const struct regulator_desc *desc) { struct fixed_voltage_config *config; const char *supply_name; struct gpio_desc *gpiod; int ret; config = devm_kzalloc(dev, sizeof(*config), GFP_KERNEL); if (!config) return ERR_PTR(-ENOMEM); ret = device_property_read_string(dev, "supply-name", &supply_name); if (!ret) config->supply_name = supply_name; gpiod = gpiod_get(dev, "gpio", GPIOD_ASIS); if (IS_ERR(gpiod)) return ERR_PTR(-ENODEV); config->gpio = desc_to_gpio(gpiod); config->enable_high = device_property_read_bool(dev, "enable-active-high"); gpiod_put(gpiod); return config; } static struct regulator_ops fixed_voltage_ops = { }; Loading @@ -114,6 +155,11 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev) &drvdata->desc); if (IS_ERR(config)) return PTR_ERR(config); } else if (ACPI_HANDLE(&pdev->dev)) { config = acpi_get_fixed_voltage_config(&pdev->dev, &drvdata->desc); if (IS_ERR(config)) return PTR_ERR(config); } else { config = dev_get_platdata(&pdev->dev); } Loading drivers/regulator/helpers.c +5 −1 Original line number Diff line number Diff line Loading @@ -454,13 +454,17 @@ EXPORT_SYMBOL_GPL(regulator_set_bypass_regmap); int regulator_get_bypass_regmap(struct regulator_dev *rdev, bool *enable) { unsigned int val; unsigned int val_on = rdev->desc->bypass_val_on; int ret; ret = regmap_read(rdev->regmap, rdev->desc->bypass_reg, &val); if (ret != 0) return ret; *enable = (val & rdev->desc->bypass_mask) == rdev->desc->bypass_val_on; if (!val_on) val_on = rdev->desc->bypass_mask; *enable = (val & rdev->desc->bypass_mask) == val_on; return 0; } Loading include/linux/regulator/consumer.h +27 −0 Original line number Diff line number Diff line Loading @@ -120,6 +120,25 @@ struct regmap; #define REGULATOR_EVENT_PRE_DISABLE 0x400 #define REGULATOR_EVENT_ABORT_DISABLE 0x800 /* * Regulator errors that can be queried using regulator_get_error_flags * * UNDER_VOLTAGE Regulator output is under voltage. * OVER_CURRENT Regulator output current is too high. * REGULATION_OUT Regulator output is out of regulation. * FAIL Regulator output has failed. * OVER_TEMP Regulator over temp. * * NOTE: These errors can be OR'ed together. */ #define REGULATOR_ERROR_UNDER_VOLTAGE BIT(1) #define REGULATOR_ERROR_OVER_CURRENT BIT(2) #define REGULATOR_ERROR_REGULATION_OUT BIT(3) #define REGULATOR_ERROR_FAIL BIT(4) #define REGULATOR_ERROR_OVER_TEMP BIT(5) /** * struct pre_voltage_change_data - Data sent with PRE_VOLTAGE_CHANGE event * Loading Loading @@ -237,6 +256,8 @@ int regulator_get_current_limit(struct regulator *regulator); int regulator_set_mode(struct regulator *regulator, unsigned int mode); unsigned int regulator_get_mode(struct regulator *regulator); int regulator_get_error_flags(struct regulator *regulator, unsigned int *flags); int regulator_set_load(struct regulator *regulator, int load_uA); int regulator_allow_bypass(struct regulator *regulator, bool allow); Loading Loading @@ -477,6 +498,12 @@ static inline unsigned int regulator_get_mode(struct regulator *regulator) return REGULATOR_MODE_NORMAL; } static inline int regulator_get_error_flags(struct regulator *regulator, unsigned int *flags) { return -EINVAL; } static inline int regulator_set_load(struct regulator *regulator, int load_uA) { return REGULATOR_MODE_NORMAL; Loading Loading
drivers/regulator/arizona-ldo1.c +2 −0 Original line number Diff line number Diff line Loading @@ -130,6 +130,7 @@ static const struct regulator_desc arizona_ldo1_hc = { .uV_step = 50000, .n_voltages = 8, .enable_time = 1500, .ramp_delay = 24000, .owner = THIS_MODULE, }; Loading @@ -153,6 +154,7 @@ static const struct regulator_desc arizona_ldo1 = { .uV_step = 25000, .n_voltages = 13, .enable_time = 500, .ramp_delay = 24000, .owner = THIS_MODULE, }; Loading
drivers/regulator/core.c +33 −0 Original line number Diff line number Diff line Loading @@ -3360,6 +3360,39 @@ unsigned int regulator_get_mode(struct regulator *regulator) } EXPORT_SYMBOL_GPL(regulator_get_mode); static int _regulator_get_error_flags(struct regulator_dev *rdev, unsigned int *flags) { int ret; mutex_lock(&rdev->mutex); /* sanity check */ if (!rdev->desc->ops->get_error_flags) { ret = -EINVAL; goto out; } ret = rdev->desc->ops->get_error_flags(rdev, flags); out: mutex_unlock(&rdev->mutex); return ret; } /** * regulator_get_error_flags - get regulator error information * @regulator: regulator source * @flags: pointer to store error flags * * Get the current regulator error information. */ int regulator_get_error_flags(struct regulator *regulator, unsigned int *flags) { return _regulator_get_error_flags(regulator->rdev, flags); } EXPORT_SYMBOL_GPL(regulator_get_error_flags); /** * regulator_set_load - set regulator load * @regulator: regulator source Loading
drivers/regulator/fixed.c +46 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,9 @@ #include <linux/of_gpio.h> #include <linux/regulator/of_regulator.h> #include <linux/regulator/machine.h> #include <linux/acpi.h> #include <linux/property.h> #include <linux/gpio/consumer.h> struct fixed_voltage_data { struct regulator_desc desc; Loading Loading @@ -94,6 +97,44 @@ of_get_fixed_voltage_config(struct device *dev, return config; } /** * acpi_get_fixed_voltage_config - extract fixed_voltage_config structure info * @dev: device requesting for fixed_voltage_config * @desc: regulator description * * Populates fixed_voltage_config structure by extracting data through ACPI * interface, returns a pointer to the populated structure of NULL if memory * alloc fails. */ static struct fixed_voltage_config * acpi_get_fixed_voltage_config(struct device *dev, const struct regulator_desc *desc) { struct fixed_voltage_config *config; const char *supply_name; struct gpio_desc *gpiod; int ret; config = devm_kzalloc(dev, sizeof(*config), GFP_KERNEL); if (!config) return ERR_PTR(-ENOMEM); ret = device_property_read_string(dev, "supply-name", &supply_name); if (!ret) config->supply_name = supply_name; gpiod = gpiod_get(dev, "gpio", GPIOD_ASIS); if (IS_ERR(gpiod)) return ERR_PTR(-ENODEV); config->gpio = desc_to_gpio(gpiod); config->enable_high = device_property_read_bool(dev, "enable-active-high"); gpiod_put(gpiod); return config; } static struct regulator_ops fixed_voltage_ops = { }; Loading @@ -114,6 +155,11 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev) &drvdata->desc); if (IS_ERR(config)) return PTR_ERR(config); } else if (ACPI_HANDLE(&pdev->dev)) { config = acpi_get_fixed_voltage_config(&pdev->dev, &drvdata->desc); if (IS_ERR(config)) return PTR_ERR(config); } else { config = dev_get_platdata(&pdev->dev); } Loading
drivers/regulator/helpers.c +5 −1 Original line number Diff line number Diff line Loading @@ -454,13 +454,17 @@ EXPORT_SYMBOL_GPL(regulator_set_bypass_regmap); int regulator_get_bypass_regmap(struct regulator_dev *rdev, bool *enable) { unsigned int val; unsigned int val_on = rdev->desc->bypass_val_on; int ret; ret = regmap_read(rdev->regmap, rdev->desc->bypass_reg, &val); if (ret != 0) return ret; *enable = (val & rdev->desc->bypass_mask) == rdev->desc->bypass_val_on; if (!val_on) val_on = rdev->desc->bypass_mask; *enable = (val & rdev->desc->bypass_mask) == val_on; return 0; } Loading
include/linux/regulator/consumer.h +27 −0 Original line number Diff line number Diff line Loading @@ -120,6 +120,25 @@ struct regmap; #define REGULATOR_EVENT_PRE_DISABLE 0x400 #define REGULATOR_EVENT_ABORT_DISABLE 0x800 /* * Regulator errors that can be queried using regulator_get_error_flags * * UNDER_VOLTAGE Regulator output is under voltage. * OVER_CURRENT Regulator output current is too high. * REGULATION_OUT Regulator output is out of regulation. * FAIL Regulator output has failed. * OVER_TEMP Regulator over temp. * * NOTE: These errors can be OR'ed together. */ #define REGULATOR_ERROR_UNDER_VOLTAGE BIT(1) #define REGULATOR_ERROR_OVER_CURRENT BIT(2) #define REGULATOR_ERROR_REGULATION_OUT BIT(3) #define REGULATOR_ERROR_FAIL BIT(4) #define REGULATOR_ERROR_OVER_TEMP BIT(5) /** * struct pre_voltage_change_data - Data sent with PRE_VOLTAGE_CHANGE event * Loading Loading @@ -237,6 +256,8 @@ int regulator_get_current_limit(struct regulator *regulator); int regulator_set_mode(struct regulator *regulator, unsigned int mode); unsigned int regulator_get_mode(struct regulator *regulator); int regulator_get_error_flags(struct regulator *regulator, unsigned int *flags); int regulator_set_load(struct regulator *regulator, int load_uA); int regulator_allow_bypass(struct regulator *regulator, bool allow); Loading Loading @@ -477,6 +498,12 @@ static inline unsigned int regulator_get_mode(struct regulator *regulator) return REGULATOR_MODE_NORMAL; } static inline int regulator_get_error_flags(struct regulator *regulator, unsigned int *flags) { return -EINVAL; } static inline int regulator_set_load(struct regulator *regulator, int load_uA) { return REGULATOR_MODE_NORMAL; Loading