Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
driver.h
Go to the documentation of this file.
1 /*
2  * driver.h -- SoC Regulator driver support.
3  *
4  * Copyright (C) 2007, 2008 Wolfson Microelectronics PLC.
5  *
6  * Author: Liam Girdwood <[email protected]>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as
10  * published by the Free Software Foundation.
11  *
12  * Regulator Driver Interface.
13  */
14 
15 #ifndef __LINUX_REGULATOR_DRIVER_H_
16 #define __LINUX_REGULATOR_DRIVER_H_
17 
18 #include <linux/device.h>
19 #include <linux/notifier.h>
21 
22 struct regmap;
23 struct regulator_dev;
24 struct regulator_init_data;
25 
30  /* fast/normal/idle/standby are flavors of "on" */
35  /* The regulator is enabled but not regulating */
37  /* in case that any other status doesn't apply */
39 };
40 
97 struct regulator_ops {
98 
99  /* enumerate supported voltages */
100  int (*list_voltage) (struct regulator_dev *, unsigned selector);
101 
102  /* get/set regulator voltage */
103  int (*set_voltage) (struct regulator_dev *, int min_uV, int max_uV,
104  unsigned *selector);
105  int (*map_voltage)(struct regulator_dev *, int min_uV, int max_uV);
106  int (*set_voltage_sel) (struct regulator_dev *, unsigned selector);
109 
110  /* get/set regulator current */
112  int min_uA, int max_uA);
114 
115  /* enable/disable regulator */
116  int (*enable) (struct regulator_dev *);
117  int (*disable) (struct regulator_dev *);
118  int (*is_enabled) (struct regulator_dev *);
119 
120  /* get/set regulator operating mode (defined in consumer.h) */
121  int (*set_mode) (struct regulator_dev *, unsigned int mode);
122  unsigned int (*get_mode) (struct regulator_dev *);
123 
124  /* Time taken to enable or set voltage on the regulator */
126  int (*set_ramp_delay) (struct regulator_dev *, int ramp_delay);
128  unsigned int old_selector,
129  unsigned int new_selector);
130 
131  /* report regulator status ... most other accessors report
132  * control inputs, this reports results of combining inputs
133  * from Linux (and other sources) with the actual load.
134  * returns REGULATOR_STATUS_* or negative errno.
135  */
137 
138  /* get most efficient regulator operating mode for load */
139  unsigned int (*get_optimum_mode) (struct regulator_dev *, int input_uV,
140  int output_uV, int load_uA);
141 
142  /* control and report on bypass mode */
143  int (*set_bypass)(struct regulator_dev *dev, bool enable);
144  int (*get_bypass)(struct regulator_dev *dev, bool *enable);
145 
146  /* the operations below are for configuration of regulator state when
147  * its parent PMIC enters a global STANDBY/HIBERNATE state */
148 
149  /* set regulator suspend voltage */
150  int (*set_suspend_voltage) (struct regulator_dev *, int uV);
151 
152  /* enable/disable regulator in suspend state */
155 
156  /* set regulator suspend operating mode (defined in consumer.h) */
157  int (*set_suspend_mode) (struct regulator_dev *, unsigned int mode);
158 };
159 
160 /*
161  * Regulators can either control voltage or current.
162  */
166 };
167 
199  const char *name;
200  const char *supply_name;
201  int id;
202  unsigned n_voltages;
204  int irq;
206  struct module *owner;
207 
208  unsigned int min_uV;
209  unsigned int uV_step;
210  unsigned int ramp_delay;
211 
212  const unsigned int *volt_table;
213 
214  unsigned int vsel_reg;
215  unsigned int vsel_mask;
216  unsigned int enable_reg;
217  unsigned int enable_mask;
218  unsigned int bypass_reg;
219  unsigned int bypass_mask;
220 
221  unsigned int enable_time;
222 };
223 
243  struct device *dev;
245  void *driver_data;
247  struct regmap *regmap;
248 
249  int ena_gpio;
250  unsigned int ena_gpio_invert:1;
251  unsigned int ena_gpio_flags;
252 };
253 
254 /*
255  * struct regulator_dev
256  *
257  * Voltage / Current regulator class device. One for each
258  * regulator.
259  *
260  * This should *not* be used directly by anything except the regulator
261  * core and notification injection (which should take the mutex and do
262  * no other direct access).
263  */
265  const struct regulator_desc *desc;
270 
271  /* lists we belong to */
272  struct list_head list; /* list of all regulators */
273 
274  /* lists we own */
275  struct list_head consumer_list; /* consumers we supply */
276 
278  struct mutex mutex; /* consumer lock */
279  struct module *owner;
280  struct device dev;
282  struct regulator *supply; /* for tree */
283  struct regmap *regmap;
284 
287 
288  void *reg_data; /* regulator_dev data */
289 
290  struct dentry *debugfs;
291 
292  int ena_gpio;
293  unsigned int ena_gpio_invert:1;
294  unsigned int ena_gpio_state:1;
295 };
296 
297 struct regulator_dev *
299  const struct regulator_config *config);
301 
303  unsigned long event, void *data);
304 
305 void *rdev_get_drvdata(struct regulator_dev *rdev);
306 struct device *rdev_get_dev(struct regulator_dev *rdev);
307 int rdev_get_id(struct regulator_dev *rdev);
308 
309 int regulator_mode_to_status(unsigned int);
310 
312  unsigned int selector);
314  unsigned int selector);
316  int min_uV, int max_uV);
318  int min_uV, int max_uV);
325  unsigned int old_selector,
326  unsigned int new_selector);
329 
330 void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data);
331 
332 #endif