aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuennadi Liakhovetski <g.liakhovetski@gmx.de>2012-06-19 11:43:56 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2012-06-19 18:22:30 -0400
commitdfad84aeab5f71b33a12e6803a809f698bdef5a2 (patch)
treefab2197c2b5931cecf6725147dc146347b543a3e
parent485802a6c524e62b5924849dd727ddbb1497cc71 (diff)
regulator: support multiple dummy fixed regulators
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>
-rw-r--r--drivers/regulator/fixed-helper.c14
-rw-r--r--include/linux/regulator/fixed.h7
2 files changed, 16 insertions, 5 deletions
diff --git a/drivers/regulator/fixed-helper.c b/drivers/regulator/fixed-helper.c
index cacd33c9d042..3aa268dfdb1d 100644
--- a/drivers/regulator/fixed-helper.c
+++ b/drivers/regulator/fixed-helper.c
@@ -1,4 +1,5 @@
1#include <linux/slab.h> 1#include <linux/slab.h>
2#include <linux/string.h>
2#include <linux/platform_device.h> 3#include <linux/platform_device.h>
3#include <linux/regulator/machine.h> 4#include <linux/regulator/machine.h>
4#include <linux/regulator/fixed.h> 5#include <linux/regulator/fixed.h>
@@ -13,16 +14,18 @@ static void regulator_fixed_release(struct device *dev)
13{ 14{
14 struct fixed_regulator_data *data = container_of(dev, 15 struct fixed_regulator_data *data = container_of(dev,
15 struct fixed_regulator_data, pdev.dev); 16 struct fixed_regulator_data, pdev.dev);
17 kfree(data->cfg.supply_name);
16 kfree(data); 18 kfree(data);
17} 19}
18 20
19/** 21/**
20 * regulator_register_fixed - register a no-op fixed regulator 22 * regulator_register_fixed_name - register a no-op fixed regulator
21 * @id: platform device id 23 * @id: platform device id
24 * @name: name to be used for the regulator
22 * @supplies: consumers for this regulator 25 * @supplies: consumers for this regulator
23 * @num_supplies: number of consumers 26 * @num_supplies: number of consumers
24 */ 27 */
25struct platform_device *regulator_register_fixed(int id, 28struct platform_device *regulator_register_always_on(int id, const char *name,
26 struct regulator_consumer_supply *supplies, int num_supplies) 29 struct regulator_consumer_supply *supplies, int num_supplies)
27{ 30{
28 struct fixed_regulator_data *data; 31 struct fixed_regulator_data *data;
@@ -31,7 +34,12 @@ struct platform_device *regulator_register_fixed(int id,
31 if (!data) 34 if (!data)
32 return NULL; 35 return NULL;
33 36
34 data->cfg.supply_name = "fixed-dummy"; 37 data->cfg.supply_name = kstrdup(name, GFP_KERNEL);
38 if (!data->cfg.supply_name) {
39 kfree(data);
40 return NULL;
41 }
42
35 data->cfg.microvolts = 0; 43 data->cfg.microvolts = 0;
36 data->cfg.gpio = -EINVAL; 44 data->cfg.gpio = -EINVAL;
37 data->cfg.enabled_at_boot = 1; 45 data->cfg.enabled_at_boot = 1;
diff --git a/include/linux/regulator/fixed.h b/include/linux/regulator/fixed.h
index f83f7440b488..6b9325b5e371 100644
--- a/include/linux/regulator/fixed.h
+++ b/include/linux/regulator/fixed.h
@@ -58,14 +58,17 @@ struct fixed_voltage_config {
58struct regulator_consumer_supply; 58struct regulator_consumer_supply;
59 59
60#if IS_ENABLED(CONFIG_REGULATOR) 60#if IS_ENABLED(CONFIG_REGULATOR)
61struct platform_device *regulator_register_fixed(int id, 61struct platform_device *regulator_register_always_on(int id, const char *name,
62 struct regulator_consumer_supply *supplies, int num_supplies); 62 struct regulator_consumer_supply *supplies, int num_supplies);
63#else 63#else
64static inline struct platform_device *regulator_register_fixed(int id, 64static inline struct platform_device *regulator_register_always_on(int id, const char *name,
65 struct regulator_consumer_supply *supplies, int num_supplies) 65 struct regulator_consumer_supply *supplies, int num_supplies)
66{ 66{
67 return NULL; 67 return NULL;
68} 68}
69#endif 69#endif
70 70
71#define regulator_register_fixed(id, s, ns) regulator_register_always_on(id, \
72 "fixed-dummy", s, ns)
73
71#endif 74#endif