Skip to content

Commit

Permalink
regulator: support multiple dummy fixed regulators
Browse files Browse the repository at this point in the history
Currently regulator_register_fixed() uses a constant name to register a
fixed dummy regulator. This is sufficient in principle, since there is no
reason to register multiple such regulators. The user can simply supply all
consumers in one array and use it to initialise such a regulator. However,
in some cases it can be convenient to register multiple such regulators.
This is also a prerequisite for the upcoming patch, that will add a voltage
parameter to this function. The original function is provided as a wrapper
macro.

Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
  • Loading branch information
Guennadi Liakhovetski authored and Mark Brown committed Jun 19, 2012
1 parent 485802a commit dfad84a
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 5 deletions.
14 changes: 11 additions & 3 deletions drivers/regulator/fixed-helper.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#include <linux/slab.h>
#include <linux/string.h>
#include <linux/platform_device.h>
#include <linux/regulator/machine.h>
#include <linux/regulator/fixed.h>
Expand All @@ -13,16 +14,18 @@ static void regulator_fixed_release(struct device *dev)
{
struct fixed_regulator_data *data = container_of(dev,
struct fixed_regulator_data, pdev.dev);
kfree(data->cfg.supply_name);
kfree(data);
}

/**
* regulator_register_fixed - register a no-op fixed regulator
* regulator_register_fixed_name - register a no-op fixed regulator
* @id: platform device id
* @name: name to be used for the regulator
* @supplies: consumers for this regulator
* @num_supplies: number of consumers
*/
struct platform_device *regulator_register_fixed(int id,
struct platform_device *regulator_register_always_on(int id, const char *name,
struct regulator_consumer_supply *supplies, int num_supplies)
{
struct fixed_regulator_data *data;
Expand All @@ -31,7 +34,12 @@ struct platform_device *regulator_register_fixed(int id,
if (!data)
return NULL;

data->cfg.supply_name = "fixed-dummy";
data->cfg.supply_name = kstrdup(name, GFP_KERNEL);
if (!data->cfg.supply_name) {
kfree(data);
return NULL;
}

data->cfg.microvolts = 0;
data->cfg.gpio = -EINVAL;
data->cfg.enabled_at_boot = 1;
Expand Down
7 changes: 5 additions & 2 deletions include/linux/regulator/fixed.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,14 +58,17 @@ struct fixed_voltage_config {
struct regulator_consumer_supply;

#if IS_ENABLED(CONFIG_REGULATOR)
struct platform_device *regulator_register_fixed(int id,
struct platform_device *regulator_register_always_on(int id, const char *name,
struct regulator_consumer_supply *supplies, int num_supplies);
#else
static inline struct platform_device *regulator_register_fixed(int id,
static inline struct platform_device *regulator_register_always_on(int id, const char *name,
struct regulator_consumer_supply *supplies, int num_supplies)
{
return NULL;
}
#endif

#define regulator_register_fixed(id, s, ns) regulator_register_always_on(id, \
"fixed-dummy", s, ns)

#endif

0 comments on commit dfad84a

Please sign in to comment.