aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/regulator/fixed.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/regulator/fixed.c')
-rw-r--r--drivers/regulator/fixed.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/drivers/regulator/fixed.c b/drivers/regulator/fixed.c
index f9f516a3028a..d11f7622430b 100644
--- a/drivers/regulator/fixed.c
+++ b/drivers/regulator/fixed.c
@@ -24,14 +24,16 @@
24#include <linux/regulator/driver.h> 24#include <linux/regulator/driver.h>
25#include <linux/regulator/fixed.h> 25#include <linux/regulator/fixed.h>
26#include <linux/gpio.h> 26#include <linux/gpio.h>
27#include <linux/delay.h>
27 28
28struct fixed_voltage_data { 29struct fixed_voltage_data {
29 struct regulator_desc desc; 30 struct regulator_desc desc;
30 struct regulator_dev *dev; 31 struct regulator_dev *dev;
31 int microvolts; 32 int microvolts;
32 int gpio; 33 int gpio;
33 unsigned enable_high:1; 34 unsigned startup_delay;
34 unsigned is_enabled:1; 35 bool enable_high;
36 bool is_enabled;
35}; 37};
36 38
37static int fixed_voltage_is_enabled(struct regulator_dev *dev) 39static int fixed_voltage_is_enabled(struct regulator_dev *dev)
@@ -47,7 +49,7 @@ static int fixed_voltage_enable(struct regulator_dev *dev)
47 49
48 if (gpio_is_valid(data->gpio)) { 50 if (gpio_is_valid(data->gpio)) {
49 gpio_set_value_cansleep(data->gpio, data->enable_high); 51 gpio_set_value_cansleep(data->gpio, data->enable_high);
50 data->is_enabled = 1; 52 data->is_enabled = true;
51 } 53 }
52 54
53 return 0; 55 return 0;
@@ -59,12 +61,19 @@ static int fixed_voltage_disable(struct regulator_dev *dev)
59 61
60 if (gpio_is_valid(data->gpio)) { 62 if (gpio_is_valid(data->gpio)) {
61 gpio_set_value_cansleep(data->gpio, !data->enable_high); 63 gpio_set_value_cansleep(data->gpio, !data->enable_high);
62 data->is_enabled = 0; 64 data->is_enabled = false;
63 } 65 }
64 66
65 return 0; 67 return 0;
66} 68}
67 69
70static int fixed_voltage_enable_time(struct regulator_dev *dev)
71{
72 struct fixed_voltage_data *data = rdev_get_drvdata(dev);
73
74 return data->startup_delay;
75}
76
68static int fixed_voltage_get_voltage(struct regulator_dev *dev) 77static int fixed_voltage_get_voltage(struct regulator_dev *dev)
69{ 78{
70 struct fixed_voltage_data *data = rdev_get_drvdata(dev); 79 struct fixed_voltage_data *data = rdev_get_drvdata(dev);
@@ -87,11 +96,12 @@ static struct regulator_ops fixed_voltage_ops = {
87 .is_enabled = fixed_voltage_is_enabled, 96 .is_enabled = fixed_voltage_is_enabled,
88 .enable = fixed_voltage_enable, 97 .enable = fixed_voltage_enable,
89 .disable = fixed_voltage_disable, 98 .disable = fixed_voltage_disable,
99 .enable_time = fixed_voltage_enable_time,
90 .get_voltage = fixed_voltage_get_voltage, 100 .get_voltage = fixed_voltage_get_voltage,
91 .list_voltage = fixed_voltage_list_voltage, 101 .list_voltage = fixed_voltage_list_voltage,
92}; 102};
93 103
94static int regulator_fixed_voltage_probe(struct platform_device *pdev) 104static int __devinit reg_fixed_voltage_probe(struct platform_device *pdev)
95{ 105{
96 struct fixed_voltage_config *config = pdev->dev.platform_data; 106 struct fixed_voltage_config *config = pdev->dev.platform_data;
97 struct fixed_voltage_data *drvdata; 107 struct fixed_voltage_data *drvdata;
@@ -117,6 +127,7 @@ static int regulator_fixed_voltage_probe(struct platform_device *pdev)
117 127
118 drvdata->microvolts = config->microvolts; 128 drvdata->microvolts = config->microvolts;
119 drvdata->gpio = config->gpio; 129 drvdata->gpio = config->gpio;
130 drvdata->startup_delay = config->startup_delay;
120 131
121 if (gpio_is_valid(config->gpio)) { 132 if (gpio_is_valid(config->gpio)) {
122 drvdata->enable_high = config->enable_high; 133 drvdata->enable_high = config->enable_high;
@@ -163,7 +174,7 @@ static int regulator_fixed_voltage_probe(struct platform_device *pdev)
163 /* Regulator without GPIO control is considered 174 /* Regulator without GPIO control is considered
164 * always enabled 175 * always enabled
165 */ 176 */
166 drvdata->is_enabled = 1; 177 drvdata->is_enabled = true;
167 } 178 }
168 179
169 drvdata->dev = regulator_register(&drvdata->desc, &pdev->dev, 180 drvdata->dev = regulator_register(&drvdata->desc, &pdev->dev,
@@ -191,7 +202,7 @@ err:
191 return ret; 202 return ret;
192} 203}
193 204
194static int regulator_fixed_voltage_remove(struct platform_device *pdev) 205static int __devexit reg_fixed_voltage_remove(struct platform_device *pdev)
195{ 206{
196 struct fixed_voltage_data *drvdata = platform_get_drvdata(pdev); 207 struct fixed_voltage_data *drvdata = platform_get_drvdata(pdev);
197 208
@@ -205,10 +216,11 @@ static int regulator_fixed_voltage_remove(struct platform_device *pdev)
205} 216}
206 217
207static struct platform_driver regulator_fixed_voltage_driver = { 218static struct platform_driver regulator_fixed_voltage_driver = {
208 .probe = regulator_fixed_voltage_probe, 219 .probe = reg_fixed_voltage_probe,
209 .remove = regulator_fixed_voltage_remove, 220 .remove = __devexit_p(reg_fixed_voltage_remove),
210 .driver = { 221 .driver = {
211 .name = "reg-fixed-voltage", 222 .name = "reg-fixed-voltage",
223 .owner = THIS_MODULE,
212 }, 224 },
213}; 225};
214 226