1
2
3
4
5
6
7
8
9
10#include <linux/kernel.h>
11#include <linux/init.h>
12#include <linux/debugfs.h>
13#include <linux/device.h>
14#include <linux/slab.h>
15#include <linux/async.h>
16#include <linux/err.h>
17#include <linux/mutex.h>
18#include <linux/suspend.h>
19#include <linux/delay.h>
20#include <linux/gpio/consumer.h>
21#include <linux/of.h>
22#include <linux/regmap.h>
23#include <linux/regulator/of_regulator.h>
24#include <linux/regulator/consumer.h>
25#include <linux/regulator/coupler.h>
26#include <linux/regulator/driver.h>
27#include <linux/regulator/machine.h>
28#include <linux/module.h>
29
30#define CREATE_TRACE_POINTS
31#include <trace/events/regulator.h>
32
33#include "dummy.h"
34#include "internal.h"
35
36static DEFINE_WW_CLASS(regulator_ww_class);
37static DEFINE_MUTEX(regulator_nesting_mutex);
38static DEFINE_MUTEX(regulator_list_mutex);
39static LIST_HEAD(regulator_map_list);
40static LIST_HEAD(regulator_ena_gpio_list);
41static LIST_HEAD(regulator_supply_alias_list);
42static LIST_HEAD(regulator_coupler_list);
43static bool has_full_constraints;
44
45static struct dentry *debugfs_root;
46
47
48
49
50
51
52struct regulator_map {
53 struct list_head list;
54 const char *dev_name;
55 const char *supply;
56 struct regulator_dev *regulator;
57};
58
59
60
61
62
63
64struct regulator_enable_gpio {
65 struct list_head list;
66 struct gpio_desc *gpiod;
67 u32 enable_count;
68 u32 request_count;
69};
70
71
72
73
74
75
76struct regulator_supply_alias {
77 struct list_head list;
78 struct device *src_dev;
79 const char *src_supply;
80 struct device *alias_dev;
81 const char *alias_supply;
82};
83
84static int _regulator_is_enabled(struct regulator_dev *rdev);
85static int _regulator_disable(struct regulator *regulator);
86static int _regulator_get_current_limit(struct regulator_dev *rdev);
87static unsigned int _regulator_get_mode(struct regulator_dev *rdev);
88static int _notifier_call_chain(struct regulator_dev *rdev,
89 unsigned long event, void *data);
90static int _regulator_do_set_voltage(struct regulator_dev *rdev,
91 int min_uV, int max_uV);
92static int regulator_balance_voltage(struct regulator_dev *rdev,
93 suspend_state_t state);
94static struct regulator *create_regulator(struct regulator_dev *rdev,
95 struct device *dev,
96 const char *supply_name);
97static void destroy_regulator(struct regulator *regulator);
98static void _regulator_put(struct regulator *regulator);
99
100const char *rdev_get_name(struct regulator_dev *rdev)
101{
102 if (rdev->constraints && rdev->constraints->name)
103 return rdev->constraints->name;
104 else if (rdev->desc->name)
105 return rdev->desc->name;
106 else
107 return "";
108}
109EXPORT_SYMBOL_GPL(rdev_get_name);
110
111static bool have_full_constraints(void)
112{
113 return has_full_constraints || of_have_populated_dt();
114}
115
116static bool regulator_ops_is_valid(struct regulator_dev *rdev, int ops)
117{
118 if (!rdev->constraints) {
119 rdev_err(rdev, "no constraints\n");
120 return false;
121 }
122
123 if (rdev->constraints->valid_ops_mask & ops)
124 return true;
125
126 return false;
127}
128
129
130
131
132
133
134
135
136
137
138
139
140static inline int regulator_lock_nested(struct regulator_dev *rdev,
141 struct ww_acquire_ctx *ww_ctx)
142{
143 bool lock = false;
144 int ret = 0;
145
146 mutex_lock(®ulator_nesting_mutex);
147
148 if (ww_ctx || !ww_mutex_trylock(&rdev->mutex)) {
149 if (rdev->mutex_owner == current)
150 rdev->ref_cnt++;
151 else
152 lock = true;
153
154 if (lock) {
155 mutex_unlock(®ulator_nesting_mutex);
156 ret = ww_mutex_lock(&rdev->mutex, ww_ctx);
157 mutex_lock(®ulator_nesting_mutex);
158 }
159 } else {
160 lock = true;
161 }
162
163 if (lock && ret != -EDEADLK) {
164 rdev->ref_cnt++;
165 rdev->mutex_owner = current;
166 }
167
168 mutex_unlock(®ulator_nesting_mutex);
169
170 return ret;
171}
172
173
174
175
176
177
178
179
180
181
182
183static void regulator_lock(struct regulator_dev *rdev)
184{
185 regulator_lock_nested(rdev, NULL);
186}
187
188
189
190
191
192
193
194
195static void regulator_unlock(struct regulator_dev *rdev)
196{
197 mutex_lock(®ulator_nesting_mutex);
198
199 if (--rdev->ref_cnt == 0) {
200 rdev->mutex_owner = NULL;
201 ww_mutex_unlock(&rdev->mutex);
202 }
203
204 WARN_ON_ONCE(rdev->ref_cnt < 0);
205
206 mutex_unlock(®ulator_nesting_mutex);
207}
208
209static bool regulator_supply_is_couple(struct regulator_dev *rdev)
210{
211 struct regulator_dev *c_rdev;
212 int i;
213
214 for (i = 1; i < rdev->coupling_desc.n_coupled; i++) {
215 c_rdev = rdev->coupling_desc.coupled_rdevs[i];
216
217 if (rdev->supply->rdev == c_rdev)
218 return true;
219 }
220
221 return false;
222}
223
224static void regulator_unlock_recursive(struct regulator_dev *rdev,
225 unsigned int n_coupled)
226{
227 struct regulator_dev *c_rdev, *supply_rdev;
228 int i, supply_n_coupled;
229
230 for (i = n_coupled; i > 0; i--) {
231 c_rdev = rdev->coupling_desc.coupled_rdevs[i - 1];
232
233 if (!c_rdev)
234 continue;
235
236 if (c_rdev->supply && !regulator_supply_is_couple(c_rdev)) {
237 supply_rdev = c_rdev->supply->rdev;
238 supply_n_coupled = supply_rdev->coupling_desc.n_coupled;
239
240 regulator_unlock_recursive(supply_rdev,
241 supply_n_coupled);
242 }
243
244 regulator_unlock(c_rdev);
245 }
246}
247
248static int regulator_lock_recursive(struct regulator_dev *rdev,
249 struct regulator_dev **new_contended_rdev,
250 struct regulator_dev **old_contended_rdev,
251 struct ww_acquire_ctx *ww_ctx)
252{
253 struct regulator_dev *c_rdev;
254 int i, err;
255
256 for (i = 0; i < rdev->coupling_desc.n_coupled; i++) {
257 c_rdev = rdev->coupling_desc.coupled_rdevs[i];
258
259 if (!c_rdev)
260 continue;
261
262 if (c_rdev != *old_contended_rdev) {
263 err = regulator_lock_nested(c_rdev, ww_ctx);
264 if (err) {
265 if (err == -EDEADLK) {
266 *new_contended_rdev = c_rdev;
267 goto err_unlock;
268 }
269
270
271 WARN_ON_ONCE(err != -EALREADY);
272 }
273 } else {
274 *old_contended_rdev = NULL;
275 }
276
277 if (c_rdev->supply && !regulator_supply_is_couple(c_rdev)) {
278 err = regulator_lock_recursive(c_rdev->supply->rdev,
279 new_contended_rdev,
280 old_contended_rdev,
281 ww_ctx);
282 if (err) {
283 regulator_unlock(c_rdev);
284 goto err_unlock;
285 }
286 }
287 }
288
289 return 0;
290
291err_unlock:
292 regulator_unlock_recursive(rdev, i);
293
294 return err;
295}
296
297
298
299
300
301
302
303
304
305static void regulator_unlock_dependent(struct regulator_dev *rdev,
306 struct ww_acquire_ctx *ww_ctx)
307{
308 regulator_unlock_recursive(rdev, rdev->coupling_desc.n_coupled);
309 ww_acquire_fini(ww_ctx);
310}
311
312
313
314
315
316
317
318
319
320static void regulator_lock_dependent(struct regulator_dev *rdev,
321 struct ww_acquire_ctx *ww_ctx)
322{
323 struct regulator_dev *new_contended_rdev = NULL;
324 struct regulator_dev *old_contended_rdev = NULL;
325 int err;
326
327 mutex_lock(®ulator_list_mutex);
328
329 ww_acquire_init(ww_ctx, ®ulator_ww_class);
330
331 do {
332 if (new_contended_rdev) {
333 ww_mutex_lock_slow(&new_contended_rdev->mutex, ww_ctx);
334 old_contended_rdev = new_contended_rdev;
335 old_contended_rdev->ref_cnt++;
336 }
337
338 err = regulator_lock_recursive(rdev,
339 &new_contended_rdev,
340 &old_contended_rdev,
341 ww_ctx);
342
343 if (old_contended_rdev)
344 regulator_unlock(old_contended_rdev);
345
346 } while (err == -EDEADLK);
347
348 ww_acquire_done(ww_ctx);
349
350 mutex_unlock(®ulator_list_mutex);
351}
352
353
354
355
356
357
358
359
360
361
362
363
364static struct device_node *of_get_child_regulator(struct device_node *parent,
365 const char *prop_name)
366{
367 struct device_node *regnode = NULL;
368 struct device_node *child = NULL;
369
370 for_each_child_of_node(parent, child) {
371 regnode = of_parse_phandle(child, prop_name, 0);
372
373 if (!regnode) {
374 regnode = of_get_child_regulator(child, prop_name);
375 if (regnode)
376 goto err_node_put;
377 } else {
378 goto err_node_put;
379 }
380 }
381 return NULL;
382
383err_node_put:
384 of_node_put(child);
385 return regnode;
386}
387
388
389
390
391
392
393
394
395
396
397static struct device_node *of_get_regulator(struct device *dev, const char *supply)
398{
399 struct device_node *regnode = NULL;
400 char prop_name[64];
401
402 dev_dbg(dev, "Looking up %s-supply from device tree\n", supply);
403
404 snprintf(prop_name, 64, "%s-supply", supply);
405 regnode = of_parse_phandle(dev->of_node, prop_name, 0);
406
407 if (!regnode) {
408 regnode = of_get_child_regulator(dev->of_node, prop_name);
409 if (regnode)
410 return regnode;
411
412 dev_dbg(dev, "Looking up %s property in node %pOF failed\n",
413 prop_name, dev->of_node);
414 return NULL;
415 }
416 return regnode;
417}
418
419
420int regulator_check_voltage(struct regulator_dev *rdev,
421 int *min_uV, int *max_uV)
422{
423 BUG_ON(*min_uV > *max_uV);
424
425 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_VOLTAGE)) {
426 rdev_err(rdev, "voltage operation not allowed\n");
427 return -EPERM;
428 }
429
430 if (*max_uV > rdev->constraints->max_uV)
431 *max_uV = rdev->constraints->max_uV;
432 if (*min_uV < rdev->constraints->min_uV)
433 *min_uV = rdev->constraints->min_uV;
434
435 if (*min_uV > *max_uV) {
436 rdev_err(rdev, "unsupportable voltage range: %d-%duV\n",
437 *min_uV, *max_uV);
438 return -EINVAL;
439 }
440
441 return 0;
442}
443
444
445static int regulator_check_states(suspend_state_t state)
446{
447 return (state > PM_SUSPEND_MAX || state == PM_SUSPEND_TO_IDLE);
448}
449
450
451
452
453int regulator_check_consumers(struct regulator_dev *rdev,
454 int *min_uV, int *max_uV,
455 suspend_state_t state)
456{
457 struct regulator *regulator;
458 struct regulator_voltage *voltage;
459
460 list_for_each_entry(regulator, &rdev->consumer_list, list) {
461 voltage = ®ulator->voltage[state];
462
463
464
465
466 if (!voltage->min_uV && !voltage->max_uV)
467 continue;
468
469 if (*max_uV > voltage->max_uV)
470 *max_uV = voltage->max_uV;
471 if (*min_uV < voltage->min_uV)
472 *min_uV = voltage->min_uV;
473 }
474
475 if (*min_uV > *max_uV) {
476 rdev_err(rdev, "Restricting voltage, %u-%uuV\n",
477 *min_uV, *max_uV);
478 return -EINVAL;
479 }
480
481 return 0;
482}
483
484
485static int regulator_check_current_limit(struct regulator_dev *rdev,
486 int *min_uA, int *max_uA)
487{
488 BUG_ON(*min_uA > *max_uA);
489
490 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_CURRENT)) {
491 rdev_err(rdev, "current operation not allowed\n");
492 return -EPERM;
493 }
494
495 if (*max_uA > rdev->constraints->max_uA)
496 *max_uA = rdev->constraints->max_uA;
497 if (*min_uA < rdev->constraints->min_uA)
498 *min_uA = rdev->constraints->min_uA;
499
500 if (*min_uA > *max_uA) {
501 rdev_err(rdev, "unsupportable current range: %d-%duA\n",
502 *min_uA, *max_uA);
503 return -EINVAL;
504 }
505
506 return 0;
507}
508
509
510static int regulator_mode_constrain(struct regulator_dev *rdev,
511 unsigned int *mode)
512{
513 switch (*mode) {
514 case REGULATOR_MODE_FAST:
515 case REGULATOR_MODE_NORMAL:
516 case REGULATOR_MODE_IDLE:
517 case REGULATOR_MODE_STANDBY:
518 break;
519 default:
520 rdev_err(rdev, "invalid mode %x specified\n", *mode);
521 return -EINVAL;
522 }
523
524 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_MODE)) {
525 rdev_err(rdev, "mode operation not allowed\n");
526 return -EPERM;
527 }
528
529
530
531
532
533 while (*mode) {
534 if (rdev->constraints->valid_modes_mask & *mode)
535 return 0;
536 *mode /= 2;
537 }
538
539 return -EINVAL;
540}
541
542static inline struct regulator_state *
543regulator_get_suspend_state(struct regulator_dev *rdev, suspend_state_t state)
544{
545 if (rdev->constraints == NULL)
546 return NULL;
547
548 switch (state) {
549 case PM_SUSPEND_STANDBY:
550 return &rdev->constraints->state_standby;
551 case PM_SUSPEND_MEM:
552 return &rdev->constraints->state_mem;
553 case PM_SUSPEND_MAX:
554 return &rdev->constraints->state_disk;
555 default:
556 return NULL;
557 }
558}
559
560static const struct regulator_state *
561regulator_get_suspend_state_check(struct regulator_dev *rdev, suspend_state_t state)
562{
563 const struct regulator_state *rstate;
564
565 rstate = regulator_get_suspend_state(rdev, state);
566 if (rstate == NULL)
567 return NULL;
568
569
570
571
572
573 if (rstate->enabled != ENABLE_IN_SUSPEND &&
574 rstate->enabled != DISABLE_IN_SUSPEND) {
575 if (rdev->desc->ops->set_suspend_voltage ||
576 rdev->desc->ops->set_suspend_mode)
577 rdev_warn(rdev, "No configuration\n");
578 return NULL;
579 }
580
581 return rstate;
582}
583
584static ssize_t microvolts_show(struct device *dev,
585 struct device_attribute *attr, char *buf)
586{
587 struct regulator_dev *rdev = dev_get_drvdata(dev);
588 int uV;
589
590 regulator_lock(rdev);
591 uV = regulator_get_voltage_rdev(rdev);
592 regulator_unlock(rdev);
593
594 if (uV < 0)
595 return uV;
596 return sprintf(buf, "%d\n", uV);
597}
598static DEVICE_ATTR_RO(microvolts);
599
600static ssize_t microamps_show(struct device *dev,
601 struct device_attribute *attr, char *buf)
602{
603 struct regulator_dev *rdev = dev_get_drvdata(dev);
604
605 return sprintf(buf, "%d\n", _regulator_get_current_limit(rdev));
606}
607static DEVICE_ATTR_RO(microamps);
608
609static ssize_t name_show(struct device *dev, struct device_attribute *attr,
610 char *buf)
611{
612 struct regulator_dev *rdev = dev_get_drvdata(dev);
613
614 return sprintf(buf, "%s\n", rdev_get_name(rdev));
615}
616static DEVICE_ATTR_RO(name);
617
618static const char *regulator_opmode_to_str(int mode)
619{
620 switch (mode) {
621 case REGULATOR_MODE_FAST:
622 return "fast";
623 case REGULATOR_MODE_NORMAL:
624 return "normal";
625 case REGULATOR_MODE_IDLE:
626 return "idle";
627 case REGULATOR_MODE_STANDBY:
628 return "standby";
629 }
630 return "unknown";
631}
632
633static ssize_t regulator_print_opmode(char *buf, int mode)
634{
635 return sprintf(buf, "%s\n", regulator_opmode_to_str(mode));
636}
637
638static ssize_t opmode_show(struct device *dev,
639 struct device_attribute *attr, char *buf)
640{
641 struct regulator_dev *rdev = dev_get_drvdata(dev);
642
643 return regulator_print_opmode(buf, _regulator_get_mode(rdev));
644}
645static DEVICE_ATTR_RO(opmode);
646
647static ssize_t regulator_print_state(char *buf, int state)
648{
649 if (state > 0)
650 return sprintf(buf, "enabled\n");
651 else if (state == 0)
652 return sprintf(buf, "disabled\n");
653 else
654 return sprintf(buf, "unknown\n");
655}
656
657static ssize_t state_show(struct device *dev,
658 struct device_attribute *attr, char *buf)
659{
660 struct regulator_dev *rdev = dev_get_drvdata(dev);
661 ssize_t ret;
662
663 regulator_lock(rdev);
664 ret = regulator_print_state(buf, _regulator_is_enabled(rdev));
665 regulator_unlock(rdev);
666
667 return ret;
668}
669static DEVICE_ATTR_RO(state);
670
671static ssize_t status_show(struct device *dev,
672 struct device_attribute *attr, char *buf)
673{
674 struct regulator_dev *rdev = dev_get_drvdata(dev);
675 int status;
676 char *label;
677
678 status = rdev->desc->ops->get_status(rdev);
679 if (status < 0)
680 return status;
681
682 switch (status) {
683 case REGULATOR_STATUS_OFF:
684 label = "off";
685 break;
686 case REGULATOR_STATUS_ON:
687 label = "on";
688 break;
689 case REGULATOR_STATUS_ERROR:
690 label = "error";
691 break;
692 case REGULATOR_STATUS_FAST:
693 label = "fast";
694 break;
695 case REGULATOR_STATUS_NORMAL:
696 label = "normal";
697 break;
698 case REGULATOR_STATUS_IDLE:
699 label = "idle";
700 break;
701 case REGULATOR_STATUS_STANDBY:
702 label = "standby";
703 break;
704 case REGULATOR_STATUS_BYPASS:
705 label = "bypass";
706 break;
707 case REGULATOR_STATUS_UNDEFINED:
708 label = "undefined";
709 break;
710 default:
711 return -ERANGE;
712 }
713
714 return sprintf(buf, "%s\n", label);
715}
716static DEVICE_ATTR_RO(status);
717
718static ssize_t min_microamps_show(struct device *dev,
719 struct device_attribute *attr, char *buf)
720{
721 struct regulator_dev *rdev = dev_get_drvdata(dev);
722
723 if (!rdev->constraints)
724 return sprintf(buf, "constraint not defined\n");
725
726 return sprintf(buf, "%d\n", rdev->constraints->min_uA);
727}
728static DEVICE_ATTR_RO(min_microamps);
729
730static ssize_t max_microamps_show(struct device *dev,
731 struct device_attribute *attr, char *buf)
732{
733 struct regulator_dev *rdev = dev_get_drvdata(dev);
734
735 if (!rdev->constraints)
736 return sprintf(buf, "constraint not defined\n");
737
738 return sprintf(buf, "%d\n", rdev->constraints->max_uA);
739}
740static DEVICE_ATTR_RO(max_microamps);
741
742static ssize_t min_microvolts_show(struct device *dev,
743 struct device_attribute *attr, char *buf)
744{
745 struct regulator_dev *rdev = dev_get_drvdata(dev);
746
747 if (!rdev->constraints)
748 return sprintf(buf, "constraint not defined\n");
749
750 return sprintf(buf, "%d\n", rdev->constraints->min_uV);
751}
752static DEVICE_ATTR_RO(min_microvolts);
753
754static ssize_t max_microvolts_show(struct device *dev,
755 struct device_attribute *attr, char *buf)
756{
757 struct regulator_dev *rdev = dev_get_drvdata(dev);
758
759 if (!rdev->constraints)
760 return sprintf(buf, "constraint not defined\n");
761
762 return sprintf(buf, "%d\n", rdev->constraints->max_uV);
763}
764static DEVICE_ATTR_RO(max_microvolts);
765
766static ssize_t requested_microamps_show(struct device *dev,
767 struct device_attribute *attr, char *buf)
768{
769 struct regulator_dev *rdev = dev_get_drvdata(dev);
770 struct regulator *regulator;
771 int uA = 0;
772
773 regulator_lock(rdev);
774 list_for_each_entry(regulator, &rdev->consumer_list, list) {
775 if (regulator->enable_count)
776 uA += regulator->uA_load;
777 }
778 regulator_unlock(rdev);
779 return sprintf(buf, "%d\n", uA);
780}
781static DEVICE_ATTR_RO(requested_microamps);
782
783static ssize_t num_users_show(struct device *dev, struct device_attribute *attr,
784 char *buf)
785{
786 struct regulator_dev *rdev = dev_get_drvdata(dev);
787 return sprintf(buf, "%d\n", rdev->use_count);
788}
789static DEVICE_ATTR_RO(num_users);
790
791static ssize_t type_show(struct device *dev, struct device_attribute *attr,
792 char *buf)
793{
794 struct regulator_dev *rdev = dev_get_drvdata(dev);
795
796 switch (rdev->desc->type) {
797 case REGULATOR_VOLTAGE:
798 return sprintf(buf, "voltage\n");
799 case REGULATOR_CURRENT:
800 return sprintf(buf, "current\n");
801 }
802 return sprintf(buf, "unknown\n");
803}
804static DEVICE_ATTR_RO(type);
805
806static ssize_t suspend_mem_microvolts_show(struct device *dev,
807 struct device_attribute *attr, char *buf)
808{
809 struct regulator_dev *rdev = dev_get_drvdata(dev);
810
811 return sprintf(buf, "%d\n", rdev->constraints->state_mem.uV);
812}
813static DEVICE_ATTR_RO(suspend_mem_microvolts);
814
815static ssize_t suspend_disk_microvolts_show(struct device *dev,
816 struct device_attribute *attr, char *buf)
817{
818 struct regulator_dev *rdev = dev_get_drvdata(dev);
819
820 return sprintf(buf, "%d\n", rdev->constraints->state_disk.uV);
821}
822static DEVICE_ATTR_RO(suspend_disk_microvolts);
823
824static ssize_t suspend_standby_microvolts_show(struct device *dev,
825 struct device_attribute *attr, char *buf)
826{
827 struct regulator_dev *rdev = dev_get_drvdata(dev);
828
829 return sprintf(buf, "%d\n", rdev->constraints->state_standby.uV);
830}
831static DEVICE_ATTR_RO(suspend_standby_microvolts);
832
833static ssize_t suspend_mem_mode_show(struct device *dev,
834 struct device_attribute *attr, char *buf)
835{
836 struct regulator_dev *rdev = dev_get_drvdata(dev);
837
838 return regulator_print_opmode(buf,
839 rdev->constraints->state_mem.mode);
840}
841static DEVICE_ATTR_RO(suspend_mem_mode);
842
843static ssize_t suspend_disk_mode_show(struct device *dev,
844 struct device_attribute *attr, char *buf)
845{
846 struct regulator_dev *rdev = dev_get_drvdata(dev);
847
848 return regulator_print_opmode(buf,
849 rdev->constraints->state_disk.mode);
850}
851static DEVICE_ATTR_RO(suspend_disk_mode);
852
853static ssize_t suspend_standby_mode_show(struct device *dev,
854 struct device_attribute *attr, char *buf)
855{
856 struct regulator_dev *rdev = dev_get_drvdata(dev);
857
858 return regulator_print_opmode(buf,
859 rdev->constraints->state_standby.mode);
860}
861static DEVICE_ATTR_RO(suspend_standby_mode);
862
863static ssize_t suspend_mem_state_show(struct device *dev,
864 struct device_attribute *attr, char *buf)
865{
866 struct regulator_dev *rdev = dev_get_drvdata(dev);
867
868 return regulator_print_state(buf,
869 rdev->constraints->state_mem.enabled);
870}
871static DEVICE_ATTR_RO(suspend_mem_state);
872
873static ssize_t suspend_disk_state_show(struct device *dev,
874 struct device_attribute *attr, char *buf)
875{
876 struct regulator_dev *rdev = dev_get_drvdata(dev);
877
878 return regulator_print_state(buf,
879 rdev->constraints->state_disk.enabled);
880}
881static DEVICE_ATTR_RO(suspend_disk_state);
882
883static ssize_t suspend_standby_state_show(struct device *dev,
884 struct device_attribute *attr, char *buf)
885{
886 struct regulator_dev *rdev = dev_get_drvdata(dev);
887
888 return regulator_print_state(buf,
889 rdev->constraints->state_standby.enabled);
890}
891static DEVICE_ATTR_RO(suspend_standby_state);
892
893static ssize_t bypass_show(struct device *dev,
894 struct device_attribute *attr, char *buf)
895{
896 struct regulator_dev *rdev = dev_get_drvdata(dev);
897 const char *report;
898 bool bypass;
899 int ret;
900
901 ret = rdev->desc->ops->get_bypass(rdev, &bypass);
902
903 if (ret != 0)
904 report = "unknown";
905 else if (bypass)
906 report = "enabled";
907 else
908 report = "disabled";
909
910 return sprintf(buf, "%s\n", report);
911}
912static DEVICE_ATTR_RO(bypass);
913
914
915
916
917static int drms_uA_update(struct regulator_dev *rdev)
918{
919 struct regulator *sibling;
920 int current_uA = 0, output_uV, input_uV, err;
921 unsigned int mode;
922
923
924
925
926
927 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_DRMS)) {
928 rdev_dbg(rdev, "DRMS operation not allowed\n");
929 return 0;
930 }
931
932 if (!rdev->desc->ops->get_optimum_mode &&
933 !rdev->desc->ops->set_load)
934 return 0;
935
936 if (!rdev->desc->ops->set_mode &&
937 !rdev->desc->ops->set_load)
938 return -EINVAL;
939
940
941 list_for_each_entry(sibling, &rdev->consumer_list, list) {
942 if (sibling->enable_count)
943 current_uA += sibling->uA_load;
944 }
945
946 current_uA += rdev->constraints->system_load;
947
948 if (rdev->desc->ops->set_load) {
949
950 err = rdev->desc->ops->set_load(rdev, current_uA);
951 if (err < 0)
952 rdev_err(rdev, "failed to set load %d: %pe\n",
953 current_uA, ERR_PTR(err));
954 } else {
955
956 output_uV = regulator_get_voltage_rdev(rdev);
957 if (output_uV <= 0) {
958 rdev_err(rdev, "invalid output voltage found\n");
959 return -EINVAL;
960 }
961
962
963 input_uV = 0;
964 if (rdev->supply)
965 input_uV = regulator_get_voltage(rdev->supply);
966 if (input_uV <= 0)
967 input_uV = rdev->constraints->input_uV;
968 if (input_uV <= 0) {
969 rdev_err(rdev, "invalid input voltage found\n");
970 return -EINVAL;
971 }
972
973
974 mode = rdev->desc->ops->get_optimum_mode(rdev, input_uV,
975 output_uV, current_uA);
976
977
978 err = regulator_mode_constrain(rdev, &mode);
979 if (err < 0) {
980 rdev_err(rdev, "failed to get optimum mode @ %d uA %d -> %d uV: %pe\n",
981 current_uA, input_uV, output_uV, ERR_PTR(err));
982 return err;
983 }
984
985 err = rdev->desc->ops->set_mode(rdev, mode);
986 if (err < 0)
987 rdev_err(rdev, "failed to set optimum mode %x: %pe\n",
988 mode, ERR_PTR(err));
989 }
990
991 return err;
992}
993
994static int __suspend_set_state(struct regulator_dev *rdev,
995 const struct regulator_state *rstate)
996{
997 int ret = 0;
998
999 if (rstate->enabled == ENABLE_IN_SUSPEND &&
1000 rdev->desc->ops->set_suspend_enable)
1001 ret = rdev->desc->ops->set_suspend_enable(rdev);
1002 else if (rstate->enabled == DISABLE_IN_SUSPEND &&
1003 rdev->desc->ops->set_suspend_disable)
1004 ret = rdev->desc->ops->set_suspend_disable(rdev);
1005 else
1006 ret = 0;
1007
1008 if (ret < 0) {
1009 rdev_err(rdev, "failed to enabled/disable: %pe\n", ERR_PTR(ret));
1010 return ret;
1011 }
1012
1013 if (rdev->desc->ops->set_suspend_voltage && rstate->uV > 0) {
1014 ret = rdev->desc->ops->set_suspend_voltage(rdev, rstate->uV);
1015 if (ret < 0) {
1016 rdev_err(rdev, "failed to set voltage: %pe\n", ERR_PTR(ret));
1017 return ret;
1018 }
1019 }
1020
1021 if (rdev->desc->ops->set_suspend_mode && rstate->mode > 0) {
1022 ret = rdev->desc->ops->set_suspend_mode(rdev, rstate->mode);
1023 if (ret < 0) {
1024 rdev_err(rdev, "failed to set mode: %pe\n", ERR_PTR(ret));
1025 return ret;
1026 }
1027 }
1028
1029 return ret;
1030}
1031
1032static int suspend_set_initial_state(struct regulator_dev *rdev)
1033{
1034 const struct regulator_state *rstate;
1035
1036 rstate = regulator_get_suspend_state_check(rdev,
1037 rdev->constraints->initial_state);
1038 if (!rstate)
1039 return 0;
1040
1041 return __suspend_set_state(rdev, rstate);
1042}
1043
1044#if defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG)
1045static void print_constraints_debug(struct regulator_dev *rdev)
1046{
1047 struct regulation_constraints *constraints = rdev->constraints;
1048 char buf[160] = "";
1049 size_t len = sizeof(buf) - 1;
1050 int count = 0;
1051 int ret;
1052
1053 if (constraints->min_uV && constraints->max_uV) {
1054 if (constraints->min_uV == constraints->max_uV)
1055 count += scnprintf(buf + count, len - count, "%d mV ",
1056 constraints->min_uV / 1000);
1057 else
1058 count += scnprintf(buf + count, len - count,
1059 "%d <--> %d mV ",
1060 constraints->min_uV / 1000,
1061 constraints->max_uV / 1000);
1062 }
1063
1064 if (!constraints->min_uV ||
1065 constraints->min_uV != constraints->max_uV) {
1066 ret = regulator_get_voltage_rdev(rdev);
1067 if (ret > 0)
1068 count += scnprintf(buf + count, len - count,
1069 "at %d mV ", ret / 1000);
1070 }
1071
1072 if (constraints->uV_offset)
1073 count += scnprintf(buf + count, len - count, "%dmV offset ",
1074 constraints->uV_offset / 1000);
1075
1076 if (constraints->min_uA && constraints->max_uA) {
1077 if (constraints->min_uA == constraints->max_uA)
1078 count += scnprintf(buf + count, len - count, "%d mA ",
1079 constraints->min_uA / 1000);
1080 else
1081 count += scnprintf(buf + count, len - count,
1082 "%d <--> %d mA ",
1083 constraints->min_uA / 1000,
1084 constraints->max_uA / 1000);
1085 }
1086
1087 if (!constraints->min_uA ||
1088 constraints->min_uA != constraints->max_uA) {
1089 ret = _regulator_get_current_limit(rdev);
1090 if (ret > 0)
1091 count += scnprintf(buf + count, len - count,
1092 "at %d mA ", ret / 1000);
1093 }
1094
1095 if (constraints->valid_modes_mask & REGULATOR_MODE_FAST)
1096 count += scnprintf(buf + count, len - count, "fast ");
1097 if (constraints->valid_modes_mask & REGULATOR_MODE_NORMAL)
1098 count += scnprintf(buf + count, len - count, "normal ");
1099 if (constraints->valid_modes_mask & REGULATOR_MODE_IDLE)
1100 count += scnprintf(buf + count, len - count, "idle ");
1101 if (constraints->valid_modes_mask & REGULATOR_MODE_STANDBY)
1102 count += scnprintf(buf + count, len - count, "standby ");
1103
1104 if (!count)
1105 count = scnprintf(buf, len, "no parameters");
1106 else
1107 --count;
1108
1109 count += scnprintf(buf + count, len - count, ", %s",
1110 _regulator_is_enabled(rdev) ? "enabled" : "disabled");
1111
1112 rdev_dbg(rdev, "%s\n", buf);
1113}
1114#else
1115static inline void print_constraints_debug(struct regulator_dev *rdev) {}
1116#endif
1117
1118static void print_constraints(struct regulator_dev *rdev)
1119{
1120 struct regulation_constraints *constraints = rdev->constraints;
1121
1122 print_constraints_debug(rdev);
1123
1124 if ((constraints->min_uV != constraints->max_uV) &&
1125 !regulator_ops_is_valid(rdev, REGULATOR_CHANGE_VOLTAGE))
1126 rdev_warn(rdev,
1127 "Voltage range but no REGULATOR_CHANGE_VOLTAGE\n");
1128}
1129
1130static int machine_constraints_voltage(struct regulator_dev *rdev,
1131 struct regulation_constraints *constraints)
1132{
1133 const struct regulator_ops *ops = rdev->desc->ops;
1134 int ret;
1135
1136
1137 if (rdev->constraints->apply_uV &&
1138 rdev->constraints->min_uV && rdev->constraints->max_uV) {
1139 int target_min, target_max;
1140 int current_uV = regulator_get_voltage_rdev(rdev);
1141
1142 if (current_uV == -ENOTRECOVERABLE) {
1143
1144 rdev_info(rdev, "Setting %d-%duV\n",
1145 rdev->constraints->min_uV,
1146 rdev->constraints->max_uV);
1147 _regulator_do_set_voltage(rdev,
1148 rdev->constraints->min_uV,
1149 rdev->constraints->max_uV);
1150 current_uV = regulator_get_voltage_rdev(rdev);
1151 }
1152
1153 if (current_uV < 0) {
1154 rdev_err(rdev,
1155 "failed to get the current voltage: %pe\n",
1156 ERR_PTR(current_uV));
1157 return current_uV;
1158 }
1159
1160
1161
1162
1163
1164
1165 target_min = current_uV;
1166 target_max = current_uV;
1167
1168 if (current_uV < rdev->constraints->min_uV) {
1169 target_min = rdev->constraints->min_uV;
1170 target_max = rdev->constraints->min_uV;
1171 }
1172
1173 if (current_uV > rdev->constraints->max_uV) {
1174 target_min = rdev->constraints->max_uV;
1175 target_max = rdev->constraints->max_uV;
1176 }
1177
1178 if (target_min != current_uV || target_max != current_uV) {
1179 rdev_info(rdev, "Bringing %duV into %d-%duV\n",
1180 current_uV, target_min, target_max);
1181 ret = _regulator_do_set_voltage(
1182 rdev, target_min, target_max);
1183 if (ret < 0) {
1184 rdev_err(rdev,
1185 "failed to apply %d-%duV constraint: %pe\n",
1186 target_min, target_max, ERR_PTR(ret));
1187 return ret;
1188 }
1189 }
1190 }
1191
1192
1193
1194
1195 if (ops->list_voltage && rdev->desc->n_voltages) {
1196 int count = rdev->desc->n_voltages;
1197 int i;
1198 int min_uV = INT_MAX;
1199 int max_uV = INT_MIN;
1200 int cmin = constraints->min_uV;
1201 int cmax = constraints->max_uV;
1202
1203
1204
1205
1206 if (count == 1 && !cmin) {
1207 cmin = 1;
1208 cmax = INT_MAX;
1209 constraints->min_uV = cmin;
1210 constraints->max_uV = cmax;
1211 }
1212
1213
1214 if ((cmin == 0) && (cmax == 0))
1215 return 0;
1216
1217
1218 if (cmin <= 0 || cmax <= 0 || cmax < cmin) {
1219 rdev_err(rdev, "invalid voltage constraints\n");
1220 return -EINVAL;
1221 }
1222
1223
1224 if (rdev->desc->continuous_voltage_range)
1225 return 0;
1226
1227
1228 for (i = 0; i < count; i++) {
1229 int value;
1230
1231 value = ops->list_voltage(rdev, i);
1232 if (value <= 0)
1233 continue;
1234
1235
1236 if (value >= cmin && value < min_uV)
1237 min_uV = value;
1238 if (value <= cmax && value > max_uV)
1239 max_uV = value;
1240 }
1241
1242
1243 if (max_uV < min_uV) {
1244 rdev_err(rdev,
1245 "unsupportable voltage constraints %u-%uuV\n",
1246 min_uV, max_uV);
1247 return -EINVAL;
1248 }
1249
1250
1251 if (constraints->min_uV < min_uV) {
1252 rdev_dbg(rdev, "override min_uV, %d -> %d\n",
1253 constraints->min_uV, min_uV);
1254 constraints->min_uV = min_uV;
1255 }
1256 if (constraints->max_uV > max_uV) {
1257 rdev_dbg(rdev, "override max_uV, %d -> %d\n",
1258 constraints->max_uV, max_uV);
1259 constraints->max_uV = max_uV;
1260 }
1261 }
1262
1263 return 0;
1264}
1265
1266static int machine_constraints_current(struct regulator_dev *rdev,
1267 struct regulation_constraints *constraints)
1268{
1269 const struct regulator_ops *ops = rdev->desc->ops;
1270 int ret;
1271
1272 if (!constraints->min_uA && !constraints->max_uA)
1273 return 0;
1274
1275 if (constraints->min_uA > constraints->max_uA) {
1276 rdev_err(rdev, "Invalid current constraints\n");
1277 return -EINVAL;
1278 }
1279
1280 if (!ops->set_current_limit || !ops->get_current_limit) {
1281 rdev_warn(rdev, "Operation of current configuration missing\n");
1282 return 0;
1283 }
1284
1285
1286 ret = ops->set_current_limit(rdev, constraints->min_uA,
1287 constraints->max_uA);
1288 if (ret < 0) {
1289 rdev_err(rdev, "Failed to set current constraint, %d\n", ret);
1290 return ret;
1291 }
1292
1293 return 0;
1294}
1295
1296static int _regulator_do_enable(struct regulator_dev *rdev);
1297
1298static int notif_set_limit(struct regulator_dev *rdev,
1299 int (*set)(struct regulator_dev *, int, int, bool),
1300 int limit, int severity)
1301{
1302 bool enable;
1303
1304 if (limit == REGULATOR_NOTIF_LIMIT_DISABLE) {
1305 enable = false;
1306 limit = 0;
1307 } else {
1308 enable = true;
1309 }
1310
1311 if (limit == REGULATOR_NOTIF_LIMIT_ENABLE)
1312 limit = 0;
1313
1314 return set(rdev, limit, severity, enable);
1315}
1316
1317static int handle_notify_limits(struct regulator_dev *rdev,
1318 int (*set)(struct regulator_dev *, int, int, bool),
1319 struct notification_limit *limits)
1320{
1321 int ret = 0;
1322
1323 if (!set)
1324 return -EOPNOTSUPP;
1325
1326 if (limits->prot)
1327 ret = notif_set_limit(rdev, set, limits->prot,
1328 REGULATOR_SEVERITY_PROT);
1329 if (ret)
1330 return ret;
1331
1332 if (limits->err)
1333 ret = notif_set_limit(rdev, set, limits->err,
1334 REGULATOR_SEVERITY_ERR);
1335 if (ret)
1336 return ret;
1337
1338 if (limits->warn)
1339 ret = notif_set_limit(rdev, set, limits->warn,
1340 REGULATOR_SEVERITY_WARN);
1341
1342 return ret;
1343}
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354static int set_machine_constraints(struct regulator_dev *rdev)
1355{
1356 int ret = 0;
1357 const struct regulator_ops *ops = rdev->desc->ops;
1358
1359 ret = machine_constraints_voltage(rdev, rdev->constraints);
1360 if (ret != 0)
1361 return ret;
1362
1363 ret = machine_constraints_current(rdev, rdev->constraints);
1364 if (ret != 0)
1365 return ret;
1366
1367 if (rdev->constraints->ilim_uA && ops->set_input_current_limit) {
1368 ret = ops->set_input_current_limit(rdev,
1369 rdev->constraints->ilim_uA);
1370 if (ret < 0) {
1371 rdev_err(rdev, "failed to set input limit: %pe\n", ERR_PTR(ret));
1372 return ret;
1373 }
1374 }
1375
1376
1377 if (rdev->constraints->initial_state) {
1378 ret = suspend_set_initial_state(rdev);
1379 if (ret < 0) {
1380 rdev_err(rdev, "failed to set suspend state: %pe\n", ERR_PTR(ret));
1381 return ret;
1382 }
1383 }
1384
1385 if (rdev->constraints->initial_mode) {
1386 if (!ops->set_mode) {
1387 rdev_err(rdev, "no set_mode operation\n");
1388 return -EINVAL;
1389 }
1390
1391 ret = ops->set_mode(rdev, rdev->constraints->initial_mode);
1392 if (ret < 0) {
1393 rdev_err(rdev, "failed to set initial mode: %pe\n", ERR_PTR(ret));
1394 return ret;
1395 }
1396 } else if (rdev->constraints->system_load) {
1397
1398
1399
1400
1401 drms_uA_update(rdev);
1402 }
1403
1404 if ((rdev->constraints->ramp_delay || rdev->constraints->ramp_disable)
1405 && ops->set_ramp_delay) {
1406 ret = ops->set_ramp_delay(rdev, rdev->constraints->ramp_delay);
1407 if (ret < 0) {
1408 rdev_err(rdev, "failed to set ramp_delay: %pe\n", ERR_PTR(ret));
1409 return ret;
1410 }
1411 }
1412
1413 if (rdev->constraints->pull_down && ops->set_pull_down) {
1414 ret = ops->set_pull_down(rdev);
1415 if (ret < 0) {
1416 rdev_err(rdev, "failed to set pull down: %pe\n", ERR_PTR(ret));
1417 return ret;
1418 }
1419 }
1420
1421 if (rdev->constraints->soft_start && ops->set_soft_start) {
1422 ret = ops->set_soft_start(rdev);
1423 if (ret < 0) {
1424 rdev_err(rdev, "failed to set soft start: %pe\n", ERR_PTR(ret));
1425 return ret;
1426 }
1427 }
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443 if (rdev->constraints->over_current_protection
1444 && ops->set_over_current_protection) {
1445 int lim = rdev->constraints->over_curr_limits.prot;
1446
1447 ret = ops->set_over_current_protection(rdev, lim,
1448 REGULATOR_SEVERITY_PROT,
1449 true);
1450 if (ret < 0) {
1451 rdev_err(rdev, "failed to set over current protection: %pe\n",
1452 ERR_PTR(ret));
1453 return ret;
1454 }
1455 }
1456
1457 if (rdev->constraints->over_current_detection)
1458 ret = handle_notify_limits(rdev,
1459 ops->set_over_current_protection,
1460 &rdev->constraints->over_curr_limits);
1461 if (ret) {
1462 if (ret != -EOPNOTSUPP) {
1463 rdev_err(rdev, "failed to set over current limits: %pe\n",
1464 ERR_PTR(ret));
1465 return ret;
1466 }
1467 rdev_warn(rdev,
1468 "IC does not support requested over-current limits\n");
1469 }
1470
1471 if (rdev->constraints->over_voltage_detection)
1472 ret = handle_notify_limits(rdev,
1473 ops->set_over_voltage_protection,
1474 &rdev->constraints->over_voltage_limits);
1475 if (ret) {
1476 if (ret != -EOPNOTSUPP) {
1477 rdev_err(rdev, "failed to set over voltage limits %pe\n",
1478 ERR_PTR(ret));
1479 return ret;
1480 }
1481 rdev_warn(rdev,
1482 "IC does not support requested over voltage limits\n");
1483 }
1484
1485 if (rdev->constraints->under_voltage_detection)
1486 ret = handle_notify_limits(rdev,
1487 ops->set_under_voltage_protection,
1488 &rdev->constraints->under_voltage_limits);
1489 if (ret) {
1490 if (ret != -EOPNOTSUPP) {
1491 rdev_err(rdev, "failed to set under voltage limits %pe\n",
1492 ERR_PTR(ret));
1493 return ret;
1494 }
1495 rdev_warn(rdev,
1496 "IC does not support requested under voltage limits\n");
1497 }
1498
1499 if (rdev->constraints->over_temp_detection)
1500 ret = handle_notify_limits(rdev,
1501 ops->set_thermal_protection,
1502 &rdev->constraints->temp_limits);
1503 if (ret) {
1504 if (ret != -EOPNOTSUPP) {
1505 rdev_err(rdev, "failed to set temperature limits %pe\n",
1506 ERR_PTR(ret));
1507 return ret;
1508 }
1509 rdev_warn(rdev,
1510 "IC does not support requested temperature limits\n");
1511 }
1512
1513 if (rdev->constraints->active_discharge && ops->set_active_discharge) {
1514 bool ad_state = (rdev->constraints->active_discharge ==
1515 REGULATOR_ACTIVE_DISCHARGE_ENABLE) ? true : false;
1516
1517 ret = ops->set_active_discharge(rdev, ad_state);
1518 if (ret < 0) {
1519 rdev_err(rdev, "failed to set active discharge: %pe\n", ERR_PTR(ret));
1520 return ret;
1521 }
1522 }
1523
1524
1525
1526
1527 if (rdev->constraints->always_on || rdev->constraints->boot_on) {
1528
1529
1530
1531 if (rdev->supply_name && !rdev->supply)
1532 return -EPROBE_DEFER;
1533
1534 if (rdev->supply) {
1535 ret = regulator_enable(rdev->supply);
1536 if (ret < 0) {
1537 _regulator_put(rdev->supply);
1538 rdev->supply = NULL;
1539 return ret;
1540 }
1541 }
1542
1543 ret = _regulator_do_enable(rdev);
1544 if (ret < 0 && ret != -EINVAL) {
1545 rdev_err(rdev, "failed to enable: %pe\n", ERR_PTR(ret));
1546 return ret;
1547 }
1548
1549 if (rdev->constraints->always_on)
1550 rdev->use_count++;
1551 } else if (rdev->desc->off_on_delay) {
1552 rdev->last_off = ktime_get();
1553 }
1554
1555 print_constraints(rdev);
1556 return 0;
1557}
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568static int set_supply(struct regulator_dev *rdev,
1569 struct regulator_dev *supply_rdev)
1570{
1571 int err;
1572
1573 rdev_info(rdev, "supplied by %s\n", rdev_get_name(supply_rdev));
1574
1575 if (!try_module_get(supply_rdev->owner))
1576 return -ENODEV;
1577
1578 rdev->supply = create_regulator(supply_rdev, &rdev->dev, "SUPPLY");
1579 if (rdev->supply == NULL) {
1580 err = -ENOMEM;
1581 return err;
1582 }
1583 supply_rdev->open_count++;
1584
1585 return 0;
1586}
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599static int set_consumer_device_supply(struct regulator_dev *rdev,
1600 const char *consumer_dev_name,
1601 const char *supply)
1602{
1603 struct regulator_map *node, *new_node;
1604 int has_dev;
1605
1606 if (supply == NULL)
1607 return -EINVAL;
1608
1609 if (consumer_dev_name != NULL)
1610 has_dev = 1;
1611 else
1612 has_dev = 0;
1613
1614 new_node = kzalloc(sizeof(struct regulator_map), GFP_KERNEL);
1615 if (new_node == NULL)
1616 return -ENOMEM;
1617
1618 new_node->regulator = rdev;
1619 new_node->supply = supply;
1620
1621 if (has_dev) {
1622 new_node->dev_name = kstrdup(consumer_dev_name, GFP_KERNEL);
1623 if (new_node->dev_name == NULL) {
1624 kfree(new_node);
1625 return -ENOMEM;
1626 }
1627 }
1628
1629 mutex_lock(®ulator_list_mutex);
1630 list_for_each_entry(node, ®ulator_map_list, list) {
1631 if (node->dev_name && consumer_dev_name) {
1632 if (strcmp(node->dev_name, consumer_dev_name) != 0)
1633 continue;
1634 } else if (node->dev_name || consumer_dev_name) {
1635 continue;
1636 }
1637
1638 if (strcmp(node->supply, supply) != 0)
1639 continue;
1640
1641 pr_debug("%s: %s/%s is '%s' supply; fail %s/%s\n",
1642 consumer_dev_name,
1643 dev_name(&node->regulator->dev),
1644 node->regulator->desc->name,
1645 supply,
1646 dev_name(&rdev->dev), rdev_get_name(rdev));
1647 goto fail;
1648 }
1649
1650 list_add(&new_node->list, ®ulator_map_list);
1651 mutex_unlock(®ulator_list_mutex);
1652
1653 return 0;
1654
1655fail:
1656 mutex_unlock(®ulator_list_mutex);
1657 kfree(new_node->dev_name);
1658 kfree(new_node);
1659 return -EBUSY;
1660}
1661
1662static void unset_regulator_supplies(struct regulator_dev *rdev)
1663{
1664 struct regulator_map *node, *n;
1665
1666 list_for_each_entry_safe(node, n, ®ulator_map_list, list) {
1667 if (rdev == node->regulator) {
1668 list_del(&node->list);
1669 kfree(node->dev_name);
1670 kfree(node);
1671 }
1672 }
1673}
1674
1675#ifdef CONFIG_DEBUG_FS
1676static ssize_t constraint_flags_read_file(struct file *file,
1677 char __user *user_buf,
1678 size_t count, loff_t *ppos)
1679{
1680 const struct regulator *regulator = file->private_data;
1681 const struct regulation_constraints *c = regulator->rdev->constraints;
1682 char *buf;
1683 ssize_t ret;
1684
1685 if (!c)
1686 return 0;
1687
1688 buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
1689 if (!buf)
1690 return -ENOMEM;
1691
1692 ret = snprintf(buf, PAGE_SIZE,
1693 "always_on: %u\n"
1694 "boot_on: %u\n"
1695 "apply_uV: %u\n"
1696 "ramp_disable: %u\n"
1697 "soft_start: %u\n"
1698 "pull_down: %u\n"
1699 "over_current_protection: %u\n",
1700 c->always_on,
1701 c->boot_on,
1702 c->apply_uV,
1703 c->ramp_disable,
1704 c->soft_start,
1705 c->pull_down,
1706 c->over_current_protection);
1707
1708 ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret);
1709 kfree(buf);
1710
1711 return ret;
1712}
1713
1714#endif
1715
1716static const struct file_operations constraint_flags_fops = {
1717#ifdef CONFIG_DEBUG_FS
1718 .open = simple_open,
1719 .read = constraint_flags_read_file,
1720 .llseek = default_llseek,
1721#endif
1722};
1723
1724#define REG_STR_SIZE 64
1725
1726static struct regulator *create_regulator(struct regulator_dev *rdev,
1727 struct device *dev,
1728 const char *supply_name)
1729{
1730 struct regulator *regulator;
1731 int err = 0;
1732
1733 if (dev) {
1734 char buf[REG_STR_SIZE];
1735 int size;
1736
1737 size = snprintf(buf, REG_STR_SIZE, "%s-%s",
1738 dev->kobj.name, supply_name);
1739 if (size >= REG_STR_SIZE)
1740 return NULL;
1741
1742 supply_name = kstrdup(buf, GFP_KERNEL);
1743 if (supply_name == NULL)
1744 return NULL;
1745 } else {
1746 supply_name = kstrdup_const(supply_name, GFP_KERNEL);
1747 if (supply_name == NULL)
1748 return NULL;
1749 }
1750
1751 regulator = kzalloc(sizeof(*regulator), GFP_KERNEL);
1752 if (regulator == NULL) {
1753 kfree(supply_name);
1754 return NULL;
1755 }
1756
1757 regulator->rdev = rdev;
1758 regulator->supply_name = supply_name;
1759
1760 regulator_lock(rdev);
1761 list_add(®ulator->list, &rdev->consumer_list);
1762 regulator_unlock(rdev);
1763
1764 if (dev) {
1765 regulator->dev = dev;
1766
1767
1768 err = sysfs_create_link_nowarn(&rdev->dev.kobj, &dev->kobj,
1769 supply_name);
1770 if (err) {
1771 rdev_dbg(rdev, "could not add device link %s: %pe\n",
1772 dev->kobj.name, ERR_PTR(err));
1773
1774 }
1775 }
1776
1777 if (err != -EEXIST)
1778 regulator->debugfs = debugfs_create_dir(supply_name, rdev->debugfs);
1779 if (!regulator->debugfs) {
1780 rdev_dbg(rdev, "Failed to create debugfs directory\n");
1781 } else {
1782 debugfs_create_u32("uA_load", 0444, regulator->debugfs,
1783 ®ulator->uA_load);
1784 debugfs_create_u32("min_uV", 0444, regulator->debugfs,
1785 ®ulator->voltage[PM_SUSPEND_ON].min_uV);
1786 debugfs_create_u32("max_uV", 0444, regulator->debugfs,
1787 ®ulator->voltage[PM_SUSPEND_ON].max_uV);
1788 debugfs_create_file("constraint_flags", 0444,
1789 regulator->debugfs, regulator,
1790 &constraint_flags_fops);
1791 }
1792
1793
1794
1795
1796
1797
1798 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_STATUS) &&
1799 _regulator_is_enabled(rdev))
1800 regulator->always_on = true;
1801
1802 return regulator;
1803}
1804
1805static int _regulator_get_enable_time(struct regulator_dev *rdev)
1806{
1807 if (rdev->constraints && rdev->constraints->enable_time)
1808 return rdev->constraints->enable_time;
1809 if (rdev->desc->ops->enable_time)
1810 return rdev->desc->ops->enable_time(rdev);
1811 return rdev->desc->enable_time;
1812}
1813
1814static struct regulator_supply_alias *regulator_find_supply_alias(
1815 struct device *dev, const char *supply)
1816{
1817 struct regulator_supply_alias *map;
1818
1819 list_for_each_entry(map, ®ulator_supply_alias_list, list)
1820 if (map->src_dev == dev && strcmp(map->src_supply, supply) == 0)
1821 return map;
1822
1823 return NULL;
1824}
1825
1826static void regulator_supply_alias(struct device **dev, const char **supply)
1827{
1828 struct regulator_supply_alias *map;
1829
1830 map = regulator_find_supply_alias(*dev, *supply);
1831 if (map) {
1832 dev_dbg(*dev, "Mapping supply %s to %s,%s\n",
1833 *supply, map->alias_supply,
1834 dev_name(map->alias_dev));
1835 *dev = map->alias_dev;
1836 *supply = map->alias_supply;
1837 }
1838}
1839
1840static int regulator_match(struct device *dev, const void *data)
1841{
1842 struct regulator_dev *r = dev_to_rdev(dev);
1843
1844 return strcmp(rdev_get_name(r), data) == 0;
1845}
1846
1847static struct regulator_dev *regulator_lookup_by_name(const char *name)
1848{
1849 struct device *dev;
1850
1851 dev = class_find_device(®ulator_class, NULL, name, regulator_match);
1852
1853 return dev ? dev_to_rdev(dev) : NULL;
1854}
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868static struct regulator_dev *regulator_dev_lookup(struct device *dev,
1869 const char *supply)
1870{
1871 struct regulator_dev *r = NULL;
1872 struct device_node *node;
1873 struct regulator_map *map;
1874 const char *devname = NULL;
1875
1876 regulator_supply_alias(&dev, &supply);
1877
1878
1879 if (dev && dev->of_node) {
1880 node = of_get_regulator(dev, supply);
1881 if (node) {
1882 r = of_find_regulator_by_node(node);
1883 if (r)
1884 return r;
1885
1886
1887
1888
1889
1890 return ERR_PTR(-EPROBE_DEFER);
1891 }
1892 }
1893
1894
1895 if (dev)
1896 devname = dev_name(dev);
1897
1898 mutex_lock(®ulator_list_mutex);
1899 list_for_each_entry(map, ®ulator_map_list, list) {
1900
1901 if (map->dev_name &&
1902 (!devname || strcmp(map->dev_name, devname)))
1903 continue;
1904
1905 if (strcmp(map->supply, supply) == 0 &&
1906 get_device(&map->regulator->dev)) {
1907 r = map->regulator;
1908 break;
1909 }
1910 }
1911 mutex_unlock(®ulator_list_mutex);
1912
1913 if (r)
1914 return r;
1915
1916 r = regulator_lookup_by_name(supply);
1917 if (r)
1918 return r;
1919
1920 return ERR_PTR(-ENODEV);
1921}
1922
1923static int regulator_resolve_supply(struct regulator_dev *rdev)
1924{
1925 struct regulator_dev *r;
1926 struct device *dev = rdev->dev.parent;
1927 int ret = 0;
1928
1929
1930 if (!rdev->supply_name)
1931 return 0;
1932
1933
1934 if (rdev->supply)
1935 return 0;
1936
1937 r = regulator_dev_lookup(dev, rdev->supply_name);
1938 if (IS_ERR(r)) {
1939 ret = PTR_ERR(r);
1940
1941
1942 if (ret == -EPROBE_DEFER)
1943 goto out;
1944
1945 if (have_full_constraints()) {
1946 r = dummy_regulator_rdev;
1947 get_device(&r->dev);
1948 } else {
1949 dev_err(dev, "Failed to resolve %s-supply for %s\n",
1950 rdev->supply_name, rdev->desc->name);
1951 ret = -EPROBE_DEFER;
1952 goto out;
1953 }
1954 }
1955
1956 if (r == rdev) {
1957 dev_err(dev, "Supply for %s (%s) resolved to itself\n",
1958 rdev->desc->name, rdev->supply_name);
1959 if (!have_full_constraints()) {
1960 ret = -EINVAL;
1961 goto out;
1962 }
1963 r = dummy_regulator_rdev;
1964 get_device(&r->dev);
1965 }
1966
1967
1968
1969
1970
1971
1972
1973 if (r->dev.parent && r->dev.parent != rdev->dev.parent) {
1974 if (!device_is_bound(r->dev.parent)) {
1975 put_device(&r->dev);
1976 ret = -EPROBE_DEFER;
1977 goto out;
1978 }
1979 }
1980
1981
1982 ret = regulator_resolve_supply(r);
1983 if (ret < 0) {
1984 put_device(&r->dev);
1985 goto out;
1986 }
1987
1988
1989
1990
1991
1992
1993 regulator_lock(rdev);
1994
1995
1996 if (rdev->supply) {
1997 regulator_unlock(rdev);
1998 put_device(&r->dev);
1999 goto out;
2000 }
2001
2002 ret = set_supply(rdev, r);
2003 if (ret < 0) {
2004 regulator_unlock(rdev);
2005 put_device(&r->dev);
2006 goto out;
2007 }
2008
2009 regulator_unlock(rdev);
2010
2011
2012
2013
2014
2015
2016 if (rdev->use_count) {
2017 ret = regulator_enable(rdev->supply);
2018 if (ret < 0) {
2019 _regulator_put(rdev->supply);
2020 rdev->supply = NULL;
2021 goto out;
2022 }
2023 }
2024
2025out:
2026 return ret;
2027}
2028
2029
2030struct regulator *_regulator_get(struct device *dev, const char *id,
2031 enum regulator_get_type get_type)
2032{
2033 struct regulator_dev *rdev;
2034 struct regulator *regulator;
2035 struct device_link *link;
2036 int ret;
2037
2038 if (get_type >= MAX_GET_TYPE) {
2039 dev_err(dev, "invalid type %d in %s\n", get_type, __func__);
2040 return ERR_PTR(-EINVAL);
2041 }
2042
2043 if (id == NULL) {
2044 pr_err("get() with no identifier\n");
2045 return ERR_PTR(-EINVAL);
2046 }
2047
2048 rdev = regulator_dev_lookup(dev, id);
2049 if (IS_ERR(rdev)) {
2050 ret = PTR_ERR(rdev);
2051
2052
2053
2054
2055
2056 if (ret != -ENODEV)
2057 return ERR_PTR(ret);
2058
2059 if (!have_full_constraints()) {
2060 dev_warn(dev,
2061 "incomplete constraints, dummy supplies not allowed\n");
2062 return ERR_PTR(-ENODEV);
2063 }
2064
2065 switch (get_type) {
2066 case NORMAL_GET:
2067
2068
2069
2070
2071
2072 dev_warn(dev, "supply %s not found, using dummy regulator\n", id);
2073 rdev = dummy_regulator_rdev;
2074 get_device(&rdev->dev);
2075 break;
2076
2077 case EXCLUSIVE_GET:
2078 dev_warn(dev,
2079 "dummy supplies not allowed for exclusive requests\n");
2080 fallthrough;
2081
2082 default:
2083 return ERR_PTR(-ENODEV);
2084 }
2085 }
2086
2087 if (rdev->exclusive) {
2088 regulator = ERR_PTR(-EPERM);
2089 put_device(&rdev->dev);
2090 return regulator;
2091 }
2092
2093 if (get_type == EXCLUSIVE_GET && rdev->open_count) {
2094 regulator = ERR_PTR(-EBUSY);
2095 put_device(&rdev->dev);
2096 return regulator;
2097 }
2098
2099 mutex_lock(®ulator_list_mutex);
2100 ret = (rdev->coupling_desc.n_resolved != rdev->coupling_desc.n_coupled);
2101 mutex_unlock(®ulator_list_mutex);
2102
2103 if (ret != 0) {
2104 regulator = ERR_PTR(-EPROBE_DEFER);
2105 put_device(&rdev->dev);
2106 return regulator;
2107 }
2108
2109 ret = regulator_resolve_supply(rdev);
2110 if (ret < 0) {
2111 regulator = ERR_PTR(ret);
2112 put_device(&rdev->dev);
2113 return regulator;
2114 }
2115
2116 if (!try_module_get(rdev->owner)) {
2117 regulator = ERR_PTR(-EPROBE_DEFER);
2118 put_device(&rdev->dev);
2119 return regulator;
2120 }
2121
2122 regulator = create_regulator(rdev, dev, id);
2123 if (regulator == NULL) {
2124 regulator = ERR_PTR(-ENOMEM);
2125 module_put(rdev->owner);
2126 put_device(&rdev->dev);
2127 return regulator;
2128 }
2129
2130 rdev->open_count++;
2131 if (get_type == EXCLUSIVE_GET) {
2132 rdev->exclusive = 1;
2133
2134 ret = _regulator_is_enabled(rdev);
2135 if (ret > 0)
2136 rdev->use_count = 1;
2137 else
2138 rdev->use_count = 0;
2139 }
2140
2141 link = device_link_add(dev, &rdev->dev, DL_FLAG_STATELESS);
2142 if (!IS_ERR_OR_NULL(link))
2143 regulator->device_link = true;
2144
2145 return regulator;
2146}
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161struct regulator *regulator_get(struct device *dev, const char *id)
2162{
2163 return _regulator_get(dev, id, NORMAL_GET);
2164}
2165EXPORT_SYMBOL_GPL(regulator_get);
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188struct regulator *regulator_get_exclusive(struct device *dev, const char *id)
2189{
2190 return _regulator_get(dev, id, EXCLUSIVE_GET);
2191}
2192EXPORT_SYMBOL_GPL(regulator_get_exclusive);
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214struct regulator *regulator_get_optional(struct device *dev, const char *id)
2215{
2216 return _regulator_get(dev, id, OPTIONAL_GET);
2217}
2218EXPORT_SYMBOL_GPL(regulator_get_optional);
2219
2220static void destroy_regulator(struct regulator *regulator)
2221{
2222 struct regulator_dev *rdev = regulator->rdev;
2223
2224 debugfs_remove_recursive(regulator->debugfs);
2225
2226 if (regulator->dev) {
2227 if (regulator->device_link)
2228 device_link_remove(regulator->dev, &rdev->dev);
2229
2230
2231 sysfs_remove_link(&rdev->dev.kobj, regulator->supply_name);
2232 }
2233
2234 regulator_lock(rdev);
2235 list_del(®ulator->list);
2236
2237 rdev->open_count--;
2238 rdev->exclusive = 0;
2239 regulator_unlock(rdev);
2240
2241 kfree_const(regulator->supply_name);
2242 kfree(regulator);
2243}
2244
2245
2246static void _regulator_put(struct regulator *regulator)
2247{
2248 struct regulator_dev *rdev;
2249
2250 if (IS_ERR_OR_NULL(regulator))
2251 return;
2252
2253 lockdep_assert_held_once(®ulator_list_mutex);
2254
2255
2256 WARN_ON(regulator->enable_count);
2257
2258 rdev = regulator->rdev;
2259
2260 destroy_regulator(regulator);
2261
2262 module_put(rdev->owner);
2263 put_device(&rdev->dev);
2264}
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274void regulator_put(struct regulator *regulator)
2275{
2276 mutex_lock(®ulator_list_mutex);
2277 _regulator_put(regulator);
2278 mutex_unlock(®ulator_list_mutex);
2279}
2280EXPORT_SYMBOL_GPL(regulator_put);
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294int regulator_register_supply_alias(struct device *dev, const char *id,
2295 struct device *alias_dev,
2296 const char *alias_id)
2297{
2298 struct regulator_supply_alias *map;
2299
2300 map = regulator_find_supply_alias(dev, id);
2301 if (map)
2302 return -EEXIST;
2303
2304 map = kzalloc(sizeof(struct regulator_supply_alias), GFP_KERNEL);
2305 if (!map)
2306 return -ENOMEM;
2307
2308 map->src_dev = dev;
2309 map->src_supply = id;
2310 map->alias_dev = alias_dev;
2311 map->alias_supply = alias_id;
2312
2313 list_add(&map->list, ®ulator_supply_alias_list);
2314
2315 pr_info("Adding alias for supply %s,%s -> %s,%s\n",
2316 id, dev_name(dev), alias_id, dev_name(alias_dev));
2317
2318 return 0;
2319}
2320EXPORT_SYMBOL_GPL(regulator_register_supply_alias);
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330void regulator_unregister_supply_alias(struct device *dev, const char *id)
2331{
2332 struct regulator_supply_alias *map;
2333
2334 map = regulator_find_supply_alias(dev, id);
2335 if (map) {
2336 list_del(&map->list);
2337 kfree(map);
2338 }
2339}
2340EXPORT_SYMBOL_GPL(regulator_unregister_supply_alias);
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359int regulator_bulk_register_supply_alias(struct device *dev,
2360 const char *const *id,
2361 struct device *alias_dev,
2362 const char *const *alias_id,
2363 int num_id)
2364{
2365 int i;
2366 int ret;
2367
2368 for (i = 0; i < num_id; ++i) {
2369 ret = regulator_register_supply_alias(dev, id[i], alias_dev,
2370 alias_id[i]);
2371 if (ret < 0)
2372 goto err;
2373 }
2374
2375 return 0;
2376
2377err:
2378 dev_err(dev,
2379 "Failed to create supply alias %s,%s -> %s,%s\n",
2380 id[i], dev_name(dev), alias_id[i], dev_name(alias_dev));
2381
2382 while (--i >= 0)
2383 regulator_unregister_supply_alias(dev, id[i]);
2384
2385 return ret;
2386}
2387EXPORT_SYMBOL_GPL(regulator_bulk_register_supply_alias);
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399void regulator_bulk_unregister_supply_alias(struct device *dev,
2400 const char *const *id,
2401 int num_id)
2402{
2403 int i;
2404
2405 for (i = 0; i < num_id; ++i)
2406 regulator_unregister_supply_alias(dev, id[i]);
2407}
2408EXPORT_SYMBOL_GPL(regulator_bulk_unregister_supply_alias);
2409
2410
2411
2412static int regulator_ena_gpio_request(struct regulator_dev *rdev,
2413 const struct regulator_config *config)
2414{
2415 struct regulator_enable_gpio *pin, *new_pin;
2416 struct gpio_desc *gpiod;
2417
2418 gpiod = config->ena_gpiod;
2419 new_pin = kzalloc(sizeof(*new_pin), GFP_KERNEL);
2420
2421 mutex_lock(®ulator_list_mutex);
2422
2423 list_for_each_entry(pin, ®ulator_ena_gpio_list, list) {
2424 if (pin->gpiod == gpiod) {
2425 rdev_dbg(rdev, "GPIO is already used\n");
2426 goto update_ena_gpio_to_rdev;
2427 }
2428 }
2429
2430 if (new_pin == NULL) {
2431 mutex_unlock(®ulator_list_mutex);
2432 return -ENOMEM;
2433 }
2434
2435 pin = new_pin;
2436 new_pin = NULL;
2437
2438 pin->gpiod = gpiod;
2439 list_add(&pin->list, ®ulator_ena_gpio_list);
2440
2441update_ena_gpio_to_rdev:
2442 pin->request_count++;
2443 rdev->ena_pin = pin;
2444
2445 mutex_unlock(®ulator_list_mutex);
2446 kfree(new_pin);
2447
2448 return 0;
2449}
2450
2451static void regulator_ena_gpio_free(struct regulator_dev *rdev)
2452{
2453 struct regulator_enable_gpio *pin, *n;
2454
2455 if (!rdev->ena_pin)
2456 return;
2457
2458
2459 list_for_each_entry_safe(pin, n, ®ulator_ena_gpio_list, list) {
2460 if (pin != rdev->ena_pin)
2461 continue;
2462
2463 if (--pin->request_count)
2464 break;
2465
2466 gpiod_put(pin->gpiod);
2467 list_del(&pin->list);
2468 kfree(pin);
2469 break;
2470 }
2471
2472 rdev->ena_pin = NULL;
2473}
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483static int regulator_ena_gpio_ctrl(struct regulator_dev *rdev, bool enable)
2484{
2485 struct regulator_enable_gpio *pin = rdev->ena_pin;
2486
2487 if (!pin)
2488 return -EINVAL;
2489
2490 if (enable) {
2491
2492 if (pin->enable_count == 0)
2493 gpiod_set_value_cansleep(pin->gpiod, 1);
2494
2495 pin->enable_count++;
2496 } else {
2497 if (pin->enable_count > 1) {
2498 pin->enable_count--;
2499 return 0;
2500 }
2501
2502
2503 if (pin->enable_count <= 1) {
2504 gpiod_set_value_cansleep(pin->gpiod, 0);
2505 pin->enable_count = 0;
2506 }
2507 }
2508
2509 return 0;
2510}
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523static void _regulator_enable_delay(unsigned int delay)
2524{
2525 unsigned int ms = delay / 1000;
2526 unsigned int us = delay % 1000;
2527
2528 if (ms > 0) {
2529
2530
2531
2532
2533 if (ms < 20)
2534 us += ms * 1000;
2535 else
2536 msleep(ms);
2537 }
2538
2539
2540
2541
2542
2543
2544
2545 if (us >= 10)
2546 usleep_range(us, us + 100);
2547 else
2548 udelay(us);
2549}
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563static inline int _regulator_check_status_enabled(struct regulator_dev *rdev)
2564{
2565 int ret = rdev->desc->ops->get_status(rdev);
2566
2567 if (ret < 0) {
2568 rdev_info(rdev, "get_status returned error: %d\n", ret);
2569 return ret;
2570 }
2571
2572 switch (ret) {
2573 case REGULATOR_STATUS_OFF:
2574 case REGULATOR_STATUS_ERROR:
2575 case REGULATOR_STATUS_UNDEFINED:
2576 return 0;
2577 default:
2578 return 1;
2579 }
2580}
2581
2582static int _regulator_do_enable(struct regulator_dev *rdev)
2583{
2584 int ret, delay;
2585
2586
2587 ret = _regulator_get_enable_time(rdev);
2588 if (ret >= 0) {
2589 delay = ret;
2590 } else {
2591 rdev_warn(rdev, "enable_time() failed: %pe\n", ERR_PTR(ret));
2592 delay = 0;
2593 }
2594
2595 trace_regulator_enable(rdev_get_name(rdev));
2596
2597 if (rdev->desc->off_on_delay && rdev->last_off) {
2598
2599
2600
2601 ktime_t end = ktime_add_us(rdev->last_off, rdev->desc->off_on_delay);
2602 s64 remaining = ktime_us_delta(end, ktime_get());
2603
2604 if (remaining > 0)
2605 _regulator_enable_delay(remaining);
2606 }
2607
2608 if (rdev->ena_pin) {
2609 if (!rdev->ena_gpio_state) {
2610 ret = regulator_ena_gpio_ctrl(rdev, true);
2611 if (ret < 0)
2612 return ret;
2613 rdev->ena_gpio_state = 1;
2614 }
2615 } else if (rdev->desc->ops->enable) {
2616 ret = rdev->desc->ops->enable(rdev);
2617 if (ret < 0)
2618 return ret;
2619 } else {
2620 return -EINVAL;
2621 }
2622
2623
2624
2625
2626
2627 trace_regulator_enable_delay(rdev_get_name(rdev));
2628
2629
2630
2631
2632
2633
2634
2635 if (rdev->desc->poll_enabled_time) {
2636 unsigned int time_remaining = delay;
2637
2638 while (time_remaining > 0) {
2639 _regulator_enable_delay(rdev->desc->poll_enabled_time);
2640
2641 if (rdev->desc->ops->get_status) {
2642 ret = _regulator_check_status_enabled(rdev);
2643 if (ret < 0)
2644 return ret;
2645 else if (ret)
2646 break;
2647 } else if (rdev->desc->ops->is_enabled(rdev))
2648 break;
2649
2650 time_remaining -= rdev->desc->poll_enabled_time;
2651 }
2652
2653 if (time_remaining <= 0) {
2654 rdev_err(rdev, "Enabled check timed out\n");
2655 return -ETIMEDOUT;
2656 }
2657 } else {
2658 _regulator_enable_delay(delay);
2659 }
2660
2661 trace_regulator_enable_complete(rdev_get_name(rdev));
2662
2663 return 0;
2664}
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686static int _regulator_handle_consumer_enable(struct regulator *regulator)
2687{
2688 struct regulator_dev *rdev = regulator->rdev;
2689
2690 lockdep_assert_held_once(&rdev->mutex.base);
2691
2692 regulator->enable_count++;
2693 if (regulator->uA_load && regulator->enable_count == 1)
2694 return drms_uA_update(rdev);
2695
2696 return 0;
2697}
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707static int _regulator_handle_consumer_disable(struct regulator *regulator)
2708{
2709 struct regulator_dev *rdev = regulator->rdev;
2710
2711 lockdep_assert_held_once(&rdev->mutex.base);
2712
2713 if (!regulator->enable_count) {
2714 rdev_err(rdev, "Underflow of regulator enable count\n");
2715 return -EINVAL;
2716 }
2717
2718 regulator->enable_count--;
2719 if (regulator->uA_load && regulator->enable_count == 0)
2720 return drms_uA_update(rdev);
2721
2722 return 0;
2723}
2724
2725
2726static int _regulator_enable(struct regulator *regulator)
2727{
2728 struct regulator_dev *rdev = regulator->rdev;
2729 int ret;
2730
2731 lockdep_assert_held_once(&rdev->mutex.base);
2732
2733 if (rdev->use_count == 0 && rdev->supply) {
2734 ret = _regulator_enable(rdev->supply);
2735 if (ret < 0)
2736 return ret;
2737 }
2738
2739
2740 if (rdev->coupling_desc.n_coupled > 1) {
2741 ret = regulator_balance_voltage(rdev, PM_SUSPEND_ON);
2742 if (ret < 0)
2743 goto err_disable_supply;
2744 }
2745
2746 ret = _regulator_handle_consumer_enable(regulator);
2747 if (ret < 0)
2748 goto err_disable_supply;
2749
2750 if (rdev->use_count == 0) {
2751
2752
2753
2754
2755 ret = _regulator_is_enabled(rdev);
2756 if (ret == -EINVAL || ret == 0) {
2757 if (!regulator_ops_is_valid(rdev,
2758 REGULATOR_CHANGE_STATUS)) {
2759 ret = -EPERM;
2760 goto err_consumer_disable;
2761 }
2762
2763 ret = _regulator_do_enable(rdev);
2764 if (ret < 0)
2765 goto err_consumer_disable;
2766
2767 _notifier_call_chain(rdev, REGULATOR_EVENT_ENABLE,
2768 NULL);
2769 } else if (ret < 0) {
2770 rdev_err(rdev, "is_enabled() failed: %pe\n", ERR_PTR(ret));
2771 goto err_consumer_disable;
2772 }
2773
2774 }
2775
2776 rdev->use_count++;
2777
2778 return 0;
2779
2780err_consumer_disable:
2781 _regulator_handle_consumer_disable(regulator);
2782
2783err_disable_supply:
2784 if (rdev->use_count == 0 && rdev->supply)
2785 _regulator_disable(rdev->supply);
2786
2787 return ret;
2788}
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801int regulator_enable(struct regulator *regulator)
2802{
2803 struct regulator_dev *rdev = regulator->rdev;
2804 struct ww_acquire_ctx ww_ctx;
2805 int ret;
2806
2807 regulator_lock_dependent(rdev, &ww_ctx);
2808 ret = _regulator_enable(regulator);
2809 regulator_unlock_dependent(rdev, &ww_ctx);
2810
2811 return ret;
2812}
2813EXPORT_SYMBOL_GPL(regulator_enable);
2814
2815static int _regulator_do_disable(struct regulator_dev *rdev)
2816{
2817 int ret;
2818
2819 trace_regulator_disable(rdev_get_name(rdev));
2820
2821 if (rdev->ena_pin) {
2822 if (rdev->ena_gpio_state) {
2823 ret = regulator_ena_gpio_ctrl(rdev, false);
2824 if (ret < 0)
2825 return ret;
2826 rdev->ena_gpio_state = 0;
2827 }
2828
2829 } else if (rdev->desc->ops->disable) {
2830 ret = rdev->desc->ops->disable(rdev);
2831 if (ret != 0)
2832 return ret;
2833 }
2834
2835 if (rdev->desc->off_on_delay)
2836 rdev->last_off = ktime_get();
2837
2838 trace_regulator_disable_complete(rdev_get_name(rdev));
2839
2840 return 0;
2841}
2842
2843
2844static int _regulator_disable(struct regulator *regulator)
2845{
2846 struct regulator_dev *rdev = regulator->rdev;
2847 int ret = 0;
2848
2849 lockdep_assert_held_once(&rdev->mutex.base);
2850
2851 if (WARN(rdev->use_count <= 0,
2852 "unbalanced disables for %s\n", rdev_get_name(rdev)))
2853 return -EIO;
2854
2855
2856 if (rdev->use_count == 1 &&
2857 (rdev->constraints && !rdev->constraints->always_on)) {
2858
2859
2860 if (regulator_ops_is_valid(rdev, REGULATOR_CHANGE_STATUS)) {
2861 ret = _notifier_call_chain(rdev,
2862 REGULATOR_EVENT_PRE_DISABLE,
2863 NULL);
2864 if (ret & NOTIFY_STOP_MASK)
2865 return -EINVAL;
2866
2867 ret = _regulator_do_disable(rdev);
2868 if (ret < 0) {
2869 rdev_err(rdev, "failed to disable: %pe\n", ERR_PTR(ret));
2870 _notifier_call_chain(rdev,
2871 REGULATOR_EVENT_ABORT_DISABLE,
2872 NULL);
2873 return ret;
2874 }
2875 _notifier_call_chain(rdev, REGULATOR_EVENT_DISABLE,
2876 NULL);
2877 }
2878
2879 rdev->use_count = 0;
2880 } else if (rdev->use_count > 1) {
2881 rdev->use_count--;
2882 }
2883
2884 if (ret == 0)
2885 ret = _regulator_handle_consumer_disable(regulator);
2886
2887 if (ret == 0 && rdev->coupling_desc.n_coupled > 1)
2888 ret = regulator_balance_voltage(rdev, PM_SUSPEND_ON);
2889
2890 if (ret == 0 && rdev->use_count == 0 && rdev->supply)
2891 ret = _regulator_disable(rdev->supply);
2892
2893 return ret;
2894}
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908int regulator_disable(struct regulator *regulator)
2909{
2910 struct regulator_dev *rdev = regulator->rdev;
2911 struct ww_acquire_ctx ww_ctx;
2912 int ret;
2913
2914 regulator_lock_dependent(rdev, &ww_ctx);
2915 ret = _regulator_disable(regulator);
2916 regulator_unlock_dependent(rdev, &ww_ctx);
2917
2918 return ret;
2919}
2920EXPORT_SYMBOL_GPL(regulator_disable);
2921
2922
2923static int _regulator_force_disable(struct regulator_dev *rdev)
2924{
2925 int ret = 0;
2926
2927 lockdep_assert_held_once(&rdev->mutex.base);
2928
2929 ret = _notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE |
2930 REGULATOR_EVENT_PRE_DISABLE, NULL);
2931 if (ret & NOTIFY_STOP_MASK)
2932 return -EINVAL;
2933
2934 ret = _regulator_do_disable(rdev);
2935 if (ret < 0) {
2936 rdev_err(rdev, "failed to force disable: %pe\n", ERR_PTR(ret));
2937 _notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE |
2938 REGULATOR_EVENT_ABORT_DISABLE, NULL);
2939 return ret;
2940 }
2941
2942 _notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE |
2943 REGULATOR_EVENT_DISABLE, NULL);
2944
2945 return 0;
2946}
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957int regulator_force_disable(struct regulator *regulator)
2958{
2959 struct regulator_dev *rdev = regulator->rdev;
2960 struct ww_acquire_ctx ww_ctx;
2961 int ret;
2962
2963 regulator_lock_dependent(rdev, &ww_ctx);
2964
2965 ret = _regulator_force_disable(regulator->rdev);
2966
2967 if (rdev->coupling_desc.n_coupled > 1)
2968 regulator_balance_voltage(rdev, PM_SUSPEND_ON);
2969
2970 if (regulator->uA_load) {
2971 regulator->uA_load = 0;
2972 ret = drms_uA_update(rdev);
2973 }
2974
2975 if (rdev->use_count != 0 && rdev->supply)
2976 _regulator_disable(rdev->supply);
2977
2978 regulator_unlock_dependent(rdev, &ww_ctx);
2979
2980 return ret;
2981}
2982EXPORT_SYMBOL_GPL(regulator_force_disable);
2983
2984static void regulator_disable_work(struct work_struct *work)
2985{
2986 struct regulator_dev *rdev = container_of(work, struct regulator_dev,
2987 disable_work.work);
2988 struct ww_acquire_ctx ww_ctx;
2989 int count, i, ret;
2990 struct regulator *regulator;
2991 int total_count = 0;
2992
2993 regulator_lock_dependent(rdev, &ww_ctx);
2994
2995
2996
2997
2998
2999
3000
3001 cancel_delayed_work(&rdev->disable_work);
3002
3003 list_for_each_entry(regulator, &rdev->consumer_list, list) {
3004 count = regulator->deferred_disables;
3005
3006 if (!count)
3007 continue;
3008
3009 total_count += count;
3010 regulator->deferred_disables = 0;
3011
3012 for (i = 0; i < count; i++) {
3013 ret = _regulator_disable(regulator);
3014 if (ret != 0)
3015 rdev_err(rdev, "Deferred disable failed: %pe\n",
3016 ERR_PTR(ret));
3017 }
3018 }
3019 WARN_ON(!total_count);
3020
3021 if (rdev->coupling_desc.n_coupled > 1)
3022 regulator_balance_voltage(rdev, PM_SUSPEND_ON);
3023
3024 regulator_unlock_dependent(rdev, &ww_ctx);
3025}
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039int regulator_disable_deferred(struct regulator *regulator, int ms)
3040{
3041 struct regulator_dev *rdev = regulator->rdev;
3042
3043 if (!ms)
3044 return regulator_disable(regulator);
3045
3046 regulator_lock(rdev);
3047 regulator->deferred_disables++;
3048 mod_delayed_work(system_power_efficient_wq, &rdev->disable_work,
3049 msecs_to_jiffies(ms));
3050 regulator_unlock(rdev);
3051
3052 return 0;
3053}
3054EXPORT_SYMBOL_GPL(regulator_disable_deferred);
3055
3056static int _regulator_is_enabled(struct regulator_dev *rdev)
3057{
3058
3059 if (rdev->ena_pin)
3060 return rdev->ena_gpio_state;
3061
3062
3063 if (!rdev->desc->ops->is_enabled)
3064 return 1;
3065
3066 return rdev->desc->ops->is_enabled(rdev);
3067}
3068
3069static int _regulator_list_voltage(struct regulator_dev *rdev,
3070 unsigned selector, int lock)
3071{
3072 const struct regulator_ops *ops = rdev->desc->ops;
3073 int ret;
3074
3075 if (rdev->desc->fixed_uV && rdev->desc->n_voltages == 1 && !selector)
3076 return rdev->desc->fixed_uV;
3077
3078 if (ops->list_voltage) {
3079 if (selector >= rdev->desc->n_voltages)
3080 return -EINVAL;
3081 if (selector < rdev->desc->linear_min_sel)
3082 return 0;
3083 if (lock)
3084 regulator_lock(rdev);
3085 ret = ops->list_voltage(rdev, selector);
3086 if (lock)
3087 regulator_unlock(rdev);
3088 } else if (rdev->is_switch && rdev->supply) {
3089 ret = _regulator_list_voltage(rdev->supply->rdev,
3090 selector, lock);
3091 } else {
3092 return -EINVAL;
3093 }
3094
3095 if (ret > 0) {
3096 if (ret < rdev->constraints->min_uV)
3097 ret = 0;
3098 else if (ret > rdev->constraints->max_uV)
3099 ret = 0;
3100 }
3101
3102 return ret;
3103}
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117int regulator_is_enabled(struct regulator *regulator)
3118{
3119 int ret;
3120
3121 if (regulator->always_on)
3122 return 1;
3123
3124 regulator_lock(regulator->rdev);
3125 ret = _regulator_is_enabled(regulator->rdev);
3126 regulator_unlock(regulator->rdev);
3127
3128 return ret;
3129}
3130EXPORT_SYMBOL_GPL(regulator_is_enabled);
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140int regulator_count_voltages(struct regulator *regulator)
3141{
3142 struct regulator_dev *rdev = regulator->rdev;
3143
3144 if (rdev->desc->n_voltages)
3145 return rdev->desc->n_voltages;
3146
3147 if (!rdev->is_switch || !rdev->supply)
3148 return -EINVAL;
3149
3150 return regulator_count_voltages(rdev->supply);
3151}
3152EXPORT_SYMBOL_GPL(regulator_count_voltages);
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164int regulator_list_voltage(struct regulator *regulator, unsigned selector)
3165{
3166 return _regulator_list_voltage(regulator->rdev, selector, 1);
3167}
3168EXPORT_SYMBOL_GPL(regulator_list_voltage);
3169
3170
3171
3172
3173
3174
3175
3176
3177struct regmap *regulator_get_regmap(struct regulator *regulator)
3178{
3179 struct regmap *map = regulator->rdev->regmap;
3180
3181 return map ? map : ERR_PTR(-EOPNOTSUPP);
3182}
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198int regulator_get_hardware_vsel_register(struct regulator *regulator,
3199 unsigned *vsel_reg,
3200 unsigned *vsel_mask)
3201{
3202 struct regulator_dev *rdev = regulator->rdev;
3203 const struct regulator_ops *ops = rdev->desc->ops;
3204
3205 if (ops->set_voltage_sel != regulator_set_voltage_sel_regmap)
3206 return -EOPNOTSUPP;
3207
3208 *vsel_reg = rdev->desc->vsel_reg;
3209 *vsel_mask = rdev->desc->vsel_mask;
3210
3211 return 0;
3212}
3213EXPORT_SYMBOL_GPL(regulator_get_hardware_vsel_register);
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226int regulator_list_hardware_vsel(struct regulator *regulator,
3227 unsigned selector)
3228{
3229 struct regulator_dev *rdev = regulator->rdev;
3230 const struct regulator_ops *ops = rdev->desc->ops;
3231
3232 if (selector >= rdev->desc->n_voltages)
3233 return -EINVAL;
3234 if (selector < rdev->desc->linear_min_sel)
3235 return 0;
3236 if (ops->set_voltage_sel != regulator_set_voltage_sel_regmap)
3237 return -EOPNOTSUPP;
3238
3239 return selector;
3240}
3241EXPORT_SYMBOL_GPL(regulator_list_hardware_vsel);
3242
3243
3244
3245
3246
3247
3248
3249
3250unsigned int regulator_get_linear_step(struct regulator *regulator)
3251{
3252 struct regulator_dev *rdev = regulator->rdev;
3253
3254 return rdev->desc->uV_step;
3255}
3256EXPORT_SYMBOL_GPL(regulator_get_linear_step);
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267int regulator_is_supported_voltage(struct regulator *regulator,
3268 int min_uV, int max_uV)
3269{
3270 struct regulator_dev *rdev = regulator->rdev;
3271 int i, voltages, ret;
3272
3273
3274 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_VOLTAGE)) {
3275 ret = regulator_get_voltage(regulator);
3276 if (ret >= 0)
3277 return min_uV <= ret && ret <= max_uV;
3278 else
3279 return ret;
3280 }
3281
3282
3283 if (rdev->desc->continuous_voltage_range)
3284 return min_uV >= rdev->constraints->min_uV &&
3285 max_uV <= rdev->constraints->max_uV;
3286
3287 ret = regulator_count_voltages(regulator);
3288 if (ret < 0)
3289 return 0;
3290 voltages = ret;
3291
3292 for (i = 0; i < voltages; i++) {
3293 ret = regulator_list_voltage(regulator, i);
3294
3295 if (ret >= min_uV && ret <= max_uV)
3296 return 1;
3297 }
3298
3299 return 0;
3300}
3301EXPORT_SYMBOL_GPL(regulator_is_supported_voltage);
3302
3303static int regulator_map_voltage(struct regulator_dev *rdev, int min_uV,
3304 int max_uV)
3305{
3306 const struct regulator_desc *desc = rdev->desc;
3307
3308 if (desc->ops->map_voltage)
3309 return desc->ops->map_voltage(rdev, min_uV, max_uV);
3310
3311 if (desc->ops->list_voltage == regulator_list_voltage_linear)
3312 return regulator_map_voltage_linear(rdev, min_uV, max_uV);
3313
3314 if (desc->ops->list_voltage == regulator_list_voltage_linear_range)
3315 return regulator_map_voltage_linear_range(rdev, min_uV, max_uV);
3316
3317 if (desc->ops->list_voltage ==
3318 regulator_list_voltage_pickable_linear_range)
3319 return regulator_map_voltage_pickable_linear_range(rdev,
3320 min_uV, max_uV);
3321
3322 return regulator_map_voltage_iterate(rdev, min_uV, max_uV);
3323}
3324
3325static int _regulator_call_set_voltage(struct regulator_dev *rdev,
3326 int min_uV, int max_uV,
3327 unsigned *selector)
3328{
3329 struct pre_voltage_change_data data;
3330 int ret;
3331
3332 data.old_uV = regulator_get_voltage_rdev(rdev);
3333 data.min_uV = min_uV;
3334 data.max_uV = max_uV;
3335 ret = _notifier_call_chain(rdev, REGULATOR_EVENT_PRE_VOLTAGE_CHANGE,
3336 &data);
3337 if (ret & NOTIFY_STOP_MASK)
3338 return -EINVAL;
3339
3340 ret = rdev->desc->ops->set_voltage(rdev, min_uV, max_uV, selector);
3341 if (ret >= 0)
3342 return ret;
3343
3344 _notifier_call_chain(rdev, REGULATOR_EVENT_ABORT_VOLTAGE_CHANGE,
3345 (void *)data.old_uV);
3346
3347 return ret;
3348}
3349
3350static int _regulator_call_set_voltage_sel(struct regulator_dev *rdev,
3351 int uV, unsigned selector)
3352{
3353 struct pre_voltage_change_data data;
3354 int ret;
3355
3356 data.old_uV = regulator_get_voltage_rdev(rdev);
3357 data.min_uV = uV;
3358 data.max_uV = uV;
3359 ret = _notifier_call_chain(rdev, REGULATOR_EVENT_PRE_VOLTAGE_CHANGE,
3360 &data);
3361 if (ret & NOTIFY_STOP_MASK)
3362 return -EINVAL;
3363
3364 ret = rdev->desc->ops->set_voltage_sel(rdev, selector);
3365 if (ret >= 0)
3366 return ret;
3367
3368 _notifier_call_chain(rdev, REGULATOR_EVENT_ABORT_VOLTAGE_CHANGE,
3369 (void *)data.old_uV);
3370
3371 return ret;
3372}
3373
3374static int _regulator_set_voltage_sel_step(struct regulator_dev *rdev,
3375 int uV, int new_selector)
3376{
3377 const struct regulator_ops *ops = rdev->desc->ops;
3378 int diff, old_sel, curr_sel, ret;
3379
3380
3381 if (!_regulator_is_enabled(rdev))
3382 goto final_set;
3383
3384 if (!ops->get_voltage_sel)
3385 return -EINVAL;
3386
3387 old_sel = ops->get_voltage_sel(rdev);
3388 if (old_sel < 0)
3389 return old_sel;
3390
3391 diff = new_selector - old_sel;
3392 if (diff == 0)
3393 return 0;
3394
3395 if (diff > 0) {
3396
3397 for (curr_sel = old_sel + rdev->desc->vsel_step;
3398 curr_sel < new_selector;
3399 curr_sel += rdev->desc->vsel_step) {
3400
3401
3402
3403
3404
3405
3406 ret = ops->set_voltage_sel(rdev, curr_sel);
3407 if (ret)
3408 goto try_revert;
3409 }
3410 } else {
3411
3412 for (curr_sel = old_sel - rdev->desc->vsel_step;
3413 curr_sel > new_selector;
3414 curr_sel -= rdev->desc->vsel_step) {
3415 ret = ops->set_voltage_sel(rdev, curr_sel);
3416 if (ret)
3417 goto try_revert;
3418 }
3419 }
3420
3421final_set:
3422
3423 return _regulator_call_set_voltage_sel(rdev, uV, new_selector);
3424
3425try_revert:
3426
3427
3428
3429
3430 (void)ops->set_voltage_sel(rdev, old_sel);
3431 return ret;
3432}
3433
3434static int _regulator_set_voltage_time(struct regulator_dev *rdev,
3435 int old_uV, int new_uV)
3436{
3437 unsigned int ramp_delay = 0;
3438
3439 if (rdev->constraints->ramp_delay)
3440 ramp_delay = rdev->constraints->ramp_delay;
3441 else if (rdev->desc->ramp_delay)
3442 ramp_delay = rdev->desc->ramp_delay;
3443 else if (rdev->constraints->settling_time)
3444 return rdev->constraints->settling_time;
3445 else if (rdev->constraints->settling_time_up &&
3446 (new_uV > old_uV))
3447 return rdev->constraints->settling_time_up;
3448 else if (rdev->constraints->settling_time_down &&
3449 (new_uV < old_uV))
3450 return rdev->constraints->settling_time_down;
3451
3452 if (ramp_delay == 0) {
3453 rdev_dbg(rdev, "ramp_delay not set\n");
3454 return 0;
3455 }
3456
3457 return DIV_ROUND_UP(abs(new_uV - old_uV), ramp_delay);
3458}
3459
3460static int _regulator_do_set_voltage(struct regulator_dev *rdev,
3461 int min_uV, int max_uV)
3462{
3463 int ret;
3464 int delay = 0;
3465 int best_val = 0;
3466 unsigned int selector;
3467 int old_selector = -1;
3468 const struct regulator_ops *ops = rdev->desc->ops;
3469 int old_uV = regulator_get_voltage_rdev(rdev);
3470
3471 trace_regulator_set_voltage(rdev_get_name(rdev), min_uV, max_uV);
3472
3473 min_uV += rdev->constraints->uV_offset;
3474 max_uV += rdev->constraints->uV_offset;
3475
3476
3477
3478
3479
3480 if (_regulator_is_enabled(rdev) &&
3481 ops->set_voltage_time_sel && ops->get_voltage_sel) {
3482 old_selector = ops->get_voltage_sel(rdev);
3483 if (old_selector < 0)
3484 return old_selector;
3485 }
3486
3487 if (ops->set_voltage) {
3488 ret = _regulator_call_set_voltage(rdev, min_uV, max_uV,
3489 &selector);
3490
3491 if (ret >= 0) {
3492 if (ops->list_voltage)
3493 best_val = ops->list_voltage(rdev,
3494 selector);
3495 else
3496 best_val = regulator_get_voltage_rdev(rdev);
3497 }
3498
3499 } else if (ops->set_voltage_sel) {
3500 ret = regulator_map_voltage(rdev, min_uV, max_uV);
3501 if (ret >= 0) {
3502 best_val = ops->list_voltage(rdev, ret);
3503 if (min_uV <= best_val && max_uV >= best_val) {
3504 selector = ret;
3505 if (old_selector == selector)
3506 ret = 0;
3507 else if (rdev->desc->vsel_step)
3508 ret = _regulator_set_voltage_sel_step(
3509 rdev, best_val, selector);
3510 else
3511 ret = _regulator_call_set_voltage_sel(
3512 rdev, best_val, selector);
3513 } else {
3514 ret = -EINVAL;
3515 }
3516 }
3517 } else {
3518 ret = -EINVAL;
3519 }
3520
3521 if (ret)
3522 goto out;
3523
3524 if (ops->set_voltage_time_sel) {
3525
3526
3527
3528
3529 if (old_selector >= 0 && old_selector != selector)
3530 delay = ops->set_voltage_time_sel(rdev, old_selector,
3531 selector);
3532 } else {
3533 if (old_uV != best_val) {
3534 if (ops->set_voltage_time)
3535 delay = ops->set_voltage_time(rdev, old_uV,
3536 best_val);
3537 else
3538 delay = _regulator_set_voltage_time(rdev,
3539 old_uV,
3540 best_val);
3541 }
3542 }
3543
3544 if (delay < 0) {
3545 rdev_warn(rdev, "failed to get delay: %pe\n", ERR_PTR(delay));
3546 delay = 0;
3547 }
3548
3549
3550 if (delay >= 1000) {
3551 mdelay(delay / 1000);
3552 udelay(delay % 1000);
3553 } else if (delay) {
3554 udelay(delay);
3555 }
3556
3557 if (best_val >= 0) {
3558 unsigned long data = best_val;
3559
3560 _notifier_call_chain(rdev, REGULATOR_EVENT_VOLTAGE_CHANGE,
3561 (void *)data);
3562 }
3563
3564out:
3565 trace_regulator_set_voltage_complete(rdev_get_name(rdev), best_val);
3566
3567 return ret;
3568}
3569
3570static int _regulator_do_set_suspend_voltage(struct regulator_dev *rdev,
3571 int min_uV, int max_uV, suspend_state_t state)
3572{
3573 struct regulator_state *rstate;
3574 int uV, sel;
3575
3576 rstate = regulator_get_suspend_state(rdev, state);
3577 if (rstate == NULL)
3578 return -EINVAL;
3579
3580 if (min_uV < rstate->min_uV)
3581 min_uV = rstate->min_uV;
3582 if (max_uV > rstate->max_uV)
3583 max_uV = rstate->max_uV;
3584
3585 sel = regulator_map_voltage(rdev, min_uV, max_uV);
3586 if (sel < 0)
3587 return sel;
3588
3589 uV = rdev->desc->ops->list_voltage(rdev, sel);
3590 if (uV >= min_uV && uV <= max_uV)
3591 rstate->uV = uV;
3592
3593 return 0;
3594}
3595
3596static int regulator_set_voltage_unlocked(struct regulator *regulator,
3597 int min_uV, int max_uV,
3598 suspend_state_t state)
3599{
3600 struct regulator_dev *rdev = regulator->rdev;
3601 struct regulator_voltage *voltage = ®ulator->voltage[state];
3602 int ret = 0;
3603 int old_min_uV, old_max_uV;
3604 int current_uV;
3605
3606
3607
3608
3609
3610 if (voltage->min_uV == min_uV && voltage->max_uV == max_uV)
3611 goto out;
3612
3613
3614
3615
3616
3617 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_VOLTAGE)) {
3618 current_uV = regulator_get_voltage_rdev(rdev);
3619 if (min_uV <= current_uV && current_uV <= max_uV) {
3620 voltage->min_uV = min_uV;
3621 voltage->max_uV = max_uV;
3622 goto out;
3623 }
3624 }
3625
3626
3627 if (!rdev->desc->ops->set_voltage &&
3628 !rdev->desc->ops->set_voltage_sel) {
3629 ret = -EINVAL;
3630 goto out;
3631 }
3632
3633
3634 ret = regulator_check_voltage(rdev, &min_uV, &max_uV);
3635 if (ret < 0)
3636 goto out;
3637
3638
3639 old_min_uV = voltage->min_uV;
3640 old_max_uV = voltage->max_uV;
3641 voltage->min_uV = min_uV;
3642 voltage->max_uV = max_uV;
3643
3644
3645 ret = regulator_balance_voltage(rdev, state);
3646 if (ret < 0) {
3647 voltage->min_uV = old_min_uV;
3648 voltage->max_uV = old_max_uV;
3649 }
3650
3651out:
3652 return ret;
3653}
3654
3655int regulator_set_voltage_rdev(struct regulator_dev *rdev, int min_uV,
3656 int max_uV, suspend_state_t state)
3657{
3658 int best_supply_uV = 0;
3659 int supply_change_uV = 0;
3660 int ret;
3661
3662 if (rdev->supply &&
3663 regulator_ops_is_valid(rdev->supply->rdev,
3664 REGULATOR_CHANGE_VOLTAGE) &&
3665 (rdev->desc->min_dropout_uV || !(rdev->desc->ops->get_voltage ||
3666 rdev->desc->ops->get_voltage_sel))) {
3667 int current_supply_uV;
3668 int selector;
3669
3670 selector = regulator_map_voltage(rdev, min_uV, max_uV);
3671 if (selector < 0) {
3672 ret = selector;
3673 goto out;
3674 }
3675
3676 best_supply_uV = _regulator_list_voltage(rdev, selector, 0);
3677 if (best_supply_uV < 0) {
3678 ret = best_supply_uV;
3679 goto out;
3680 }
3681
3682 best_supply_uV += rdev->desc->min_dropout_uV;
3683
3684 current_supply_uV = regulator_get_voltage_rdev(rdev->supply->rdev);
3685 if (current_supply_uV < 0) {
3686 ret = current_supply_uV;
3687 goto out;
3688 }
3689
3690 supply_change_uV = best_supply_uV - current_supply_uV;
3691 }
3692
3693 if (supply_change_uV > 0) {
3694 ret = regulator_set_voltage_unlocked(rdev->supply,
3695 best_supply_uV, INT_MAX, state);
3696 if (ret) {
3697 dev_err(&rdev->dev, "Failed to increase supply voltage: %pe\n",
3698 ERR_PTR(ret));
3699 goto out;
3700 }
3701 }
3702
3703 if (state == PM_SUSPEND_ON)
3704 ret = _regulator_do_set_voltage(rdev, min_uV, max_uV);
3705 else
3706 ret = _regulator_do_set_suspend_voltage(rdev, min_uV,
3707 max_uV, state);
3708 if (ret < 0)
3709 goto out;
3710
3711 if (supply_change_uV < 0) {
3712 ret = regulator_set_voltage_unlocked(rdev->supply,
3713 best_supply_uV, INT_MAX, state);
3714 if (ret)
3715 dev_warn(&rdev->dev, "Failed to decrease supply voltage: %pe\n",
3716 ERR_PTR(ret));
3717
3718 ret = 0;
3719 }
3720
3721out:
3722 return ret;
3723}
3724EXPORT_SYMBOL_GPL(regulator_set_voltage_rdev);
3725
3726static int regulator_limit_voltage_step(struct regulator_dev *rdev,
3727 int *current_uV, int *min_uV)
3728{
3729 struct regulation_constraints *constraints = rdev->constraints;
3730
3731
3732 if (!constraints->max_uV_step || !_regulator_is_enabled(rdev))
3733 return 1;
3734
3735 if (*current_uV < 0) {
3736 *current_uV = regulator_get_voltage_rdev(rdev);
3737
3738 if (*current_uV < 0)
3739 return *current_uV;
3740 }
3741
3742 if (abs(*current_uV - *min_uV) <= constraints->max_uV_step)
3743 return 1;
3744
3745
3746 if (*current_uV < *min_uV)
3747 *min_uV = min(*current_uV + constraints->max_uV_step,
3748 *min_uV);
3749 else
3750 *min_uV = max(*current_uV - constraints->max_uV_step,
3751 *min_uV);
3752
3753 return 0;
3754}
3755
3756static int regulator_get_optimal_voltage(struct regulator_dev *rdev,
3757 int *current_uV,
3758 int *min_uV, int *max_uV,
3759 suspend_state_t state,
3760 int n_coupled)
3761{
3762 struct coupling_desc *c_desc = &rdev->coupling_desc;
3763 struct regulator_dev **c_rdevs = c_desc->coupled_rdevs;
3764 struct regulation_constraints *constraints = rdev->constraints;
3765 int desired_min_uV = 0, desired_max_uV = INT_MAX;
3766 int max_current_uV = 0, min_current_uV = INT_MAX;
3767 int highest_min_uV = 0, target_uV, possible_uV;
3768 int i, ret, max_spread;
3769 bool done;
3770
3771 *current_uV = -1;
3772
3773
3774
3775
3776
3777 if (n_coupled == 1) {
3778
3779
3780
3781
3782 desired_min_uV = constraints->min_uV;
3783 desired_max_uV = constraints->max_uV;
3784
3785 ret = regulator_check_consumers(rdev,
3786 &desired_min_uV,
3787 &desired_max_uV, state);
3788 if (ret < 0)
3789 return ret;
3790
3791 possible_uV = desired_min_uV;
3792 done = true;
3793
3794 goto finish;
3795 }
3796
3797
3798 for (i = 0; i < n_coupled; i++) {
3799 int tmp_min = 0;
3800 int tmp_max = INT_MAX;
3801
3802 lockdep_assert_held_once(&c_rdevs[i]->mutex.base);
3803
3804 ret = regulator_check_consumers(c_rdevs[i],
3805 &tmp_min,
3806 &tmp_max, state);
3807 if (ret < 0)
3808 return ret;
3809
3810 ret = regulator_check_voltage(c_rdevs[i], &tmp_min, &tmp_max);
3811 if (ret < 0)
3812 return ret;
3813
3814 highest_min_uV = max(highest_min_uV, tmp_min);
3815
3816 if (i == 0) {
3817 desired_min_uV = tmp_min;
3818 desired_max_uV = tmp_max;
3819 }
3820 }
3821
3822 max_spread = constraints->max_spread[0];
3823
3824
3825
3826
3827
3828
3829 target_uV = max(desired_min_uV, highest_min_uV - max_spread);
3830
3831
3832
3833
3834
3835 for (i = 1; i < n_coupled; i++) {
3836 int tmp_act;
3837
3838 if (!_regulator_is_enabled(c_rdevs[i]))
3839 continue;
3840
3841 tmp_act = regulator_get_voltage_rdev(c_rdevs[i]);
3842 if (tmp_act < 0)
3843 return tmp_act;
3844
3845 min_current_uV = min(tmp_act, min_current_uV);
3846 max_current_uV = max(tmp_act, max_current_uV);
3847 }
3848
3849
3850 if (max_current_uV == 0) {
3851 possible_uV = target_uV;
3852 } else {
3853
3854
3855
3856
3857 possible_uV = max(target_uV, max_current_uV - max_spread);
3858 possible_uV = min(possible_uV, min_current_uV + max_spread);
3859 }
3860
3861 if (possible_uV > desired_max_uV)
3862 return -EINVAL;
3863
3864 done = (possible_uV == target_uV);
3865 desired_min_uV = possible_uV;
3866
3867finish:
3868
3869 if (state == PM_SUSPEND_ON) {
3870 ret = regulator_limit_voltage_step(rdev, current_uV,
3871 &desired_min_uV);
3872 if (ret < 0)
3873 return ret;
3874
3875 if (ret == 0)
3876 done = false;
3877 }
3878
3879
3880 if (n_coupled > 1 && *current_uV == -1) {
3881
3882 if (_regulator_is_enabled(rdev)) {
3883 ret = regulator_get_voltage_rdev(rdev);
3884 if (ret < 0)
3885 return ret;
3886
3887 *current_uV = ret;
3888 } else {
3889 *current_uV = desired_min_uV;
3890 }
3891 }
3892
3893 *min_uV = desired_min_uV;
3894 *max_uV = desired_max_uV;
3895
3896 return done;
3897}
3898
3899int regulator_do_balance_voltage(struct regulator_dev *rdev,
3900 suspend_state_t state, bool skip_coupled)
3901{
3902 struct regulator_dev **c_rdevs;
3903 struct regulator_dev *best_rdev;
3904 struct coupling_desc *c_desc = &rdev->coupling_desc;
3905 int i, ret, n_coupled, best_min_uV, best_max_uV, best_c_rdev;
3906 unsigned int delta, best_delta;
3907 unsigned long c_rdev_done = 0;
3908 bool best_c_rdev_done;
3909
3910 c_rdevs = c_desc->coupled_rdevs;
3911 n_coupled = skip_coupled ? 1 : c_desc->n_coupled;
3912
3913
3914
3915
3916
3917 do {
3918 best_c_rdev_done = false;
3919 best_delta = 0;
3920 best_min_uV = 0;
3921 best_max_uV = 0;
3922 best_c_rdev = 0;
3923 best_rdev = NULL;
3924
3925
3926
3927
3928
3929 for (i = 0; i < n_coupled; i++) {
3930
3931
3932
3933
3934
3935
3936 int optimal_uV = 0, optimal_max_uV = 0, current_uV = 0;
3937
3938 if (test_bit(i, &c_rdev_done))
3939 continue;
3940
3941 ret = regulator_get_optimal_voltage(c_rdevs[i],
3942 ¤t_uV,
3943 &optimal_uV,
3944 &optimal_max_uV,
3945 state, n_coupled);
3946 if (ret < 0)
3947 goto out;
3948
3949 delta = abs(optimal_uV - current_uV);
3950
3951 if (delta && best_delta <= delta) {
3952 best_c_rdev_done = ret;
3953 best_delta = delta;
3954 best_rdev = c_rdevs[i];
3955 best_min_uV = optimal_uV;
3956 best_max_uV = optimal_max_uV;
3957 best_c_rdev = i;
3958 }
3959 }
3960
3961
3962 if (!best_rdev) {
3963 ret = 0;
3964 goto out;
3965 }
3966
3967 ret = regulator_set_voltage_rdev(best_rdev, best_min_uV,
3968 best_max_uV, state);
3969
3970 if (ret < 0)
3971 goto out;
3972
3973 if (best_c_rdev_done)
3974 set_bit(best_c_rdev, &c_rdev_done);
3975
3976 } while (n_coupled > 1);
3977
3978out:
3979 return ret;
3980}
3981
3982static int regulator_balance_voltage(struct regulator_dev *rdev,
3983 suspend_state_t state)
3984{
3985 struct coupling_desc *c_desc = &rdev->coupling_desc;
3986 struct regulator_coupler *coupler = c_desc->coupler;
3987 bool skip_coupled = false;
3988
3989
3990
3991
3992
3993 if (state != PM_SUSPEND_ON)
3994 skip_coupled = true;
3995
3996 if (c_desc->n_resolved < c_desc->n_coupled) {
3997 rdev_err(rdev, "Not all coupled regulators registered\n");
3998 return -EPERM;
3999 }
4000
4001
4002 if (coupler && coupler->balance_voltage)
4003 return coupler->balance_voltage(coupler, rdev, state);
4004
4005 return regulator_do_balance_voltage(rdev, state, skip_coupled);
4006}
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026int regulator_set_voltage(struct regulator *regulator, int min_uV, int max_uV)
4027{
4028 struct ww_acquire_ctx ww_ctx;
4029 int ret;
4030
4031 regulator_lock_dependent(regulator->rdev, &ww_ctx);
4032
4033 ret = regulator_set_voltage_unlocked(regulator, min_uV, max_uV,
4034 PM_SUSPEND_ON);
4035
4036 regulator_unlock_dependent(regulator->rdev, &ww_ctx);
4037
4038 return ret;
4039}
4040EXPORT_SYMBOL_GPL(regulator_set_voltage);
4041
4042static inline int regulator_suspend_toggle(struct regulator_dev *rdev,
4043 suspend_state_t state, bool en)
4044{
4045 struct regulator_state *rstate;
4046
4047 rstate = regulator_get_suspend_state(rdev, state);
4048 if (rstate == NULL)
4049 return -EINVAL;
4050
4051 if (!rstate->changeable)
4052 return -EPERM;
4053
4054 rstate->enabled = (en) ? ENABLE_IN_SUSPEND : DISABLE_IN_SUSPEND;
4055
4056 return 0;
4057}
4058
4059int regulator_suspend_enable(struct regulator_dev *rdev,
4060 suspend_state_t state)
4061{
4062 return regulator_suspend_toggle(rdev, state, true);
4063}
4064EXPORT_SYMBOL_GPL(regulator_suspend_enable);
4065
4066int regulator_suspend_disable(struct regulator_dev *rdev,
4067 suspend_state_t state)
4068{
4069 struct regulator *regulator;
4070 struct regulator_voltage *voltage;
4071
4072
4073
4074
4075
4076 list_for_each_entry(regulator, &rdev->consumer_list, list) {
4077 voltage = ®ulator->voltage[state];
4078 if (voltage->min_uV || voltage->max_uV)
4079 return 0;
4080 }
4081
4082 return regulator_suspend_toggle(rdev, state, false);
4083}
4084EXPORT_SYMBOL_GPL(regulator_suspend_disable);
4085
4086static int _regulator_set_suspend_voltage(struct regulator *regulator,
4087 int min_uV, int max_uV,
4088 suspend_state_t state)
4089{
4090 struct regulator_dev *rdev = regulator->rdev;
4091 struct regulator_state *rstate;
4092
4093 rstate = regulator_get_suspend_state(rdev, state);
4094 if (rstate == NULL)
4095 return -EINVAL;
4096
4097 if (rstate->min_uV == rstate->max_uV) {
4098 rdev_err(rdev, "The suspend voltage can't be changed!\n");
4099 return -EPERM;
4100 }
4101
4102 return regulator_set_voltage_unlocked(regulator, min_uV, max_uV, state);
4103}
4104
4105int regulator_set_suspend_voltage(struct regulator *regulator, int min_uV,
4106 int max_uV, suspend_state_t state)
4107{
4108 struct ww_acquire_ctx ww_ctx;
4109 int ret;
4110
4111
4112 if (regulator_check_states(state) || state == PM_SUSPEND_ON)
4113 return -EINVAL;
4114
4115 regulator_lock_dependent(regulator->rdev, &ww_ctx);
4116
4117 ret = _regulator_set_suspend_voltage(regulator, min_uV,
4118 max_uV, state);
4119
4120 regulator_unlock_dependent(regulator->rdev, &ww_ctx);
4121
4122 return ret;
4123}
4124EXPORT_SYMBOL_GPL(regulator_set_suspend_voltage);
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136int regulator_set_voltage_time(struct regulator *regulator,
4137 int old_uV, int new_uV)
4138{
4139 struct regulator_dev *rdev = regulator->rdev;
4140 const struct regulator_ops *ops = rdev->desc->ops;
4141 int old_sel = -1;
4142 int new_sel = -1;
4143 int voltage;
4144 int i;
4145
4146 if (ops->set_voltage_time)
4147 return ops->set_voltage_time(rdev, old_uV, new_uV);
4148 else if (!ops->set_voltage_time_sel)
4149 return _regulator_set_voltage_time(rdev, old_uV, new_uV);
4150
4151
4152 if (!ops->list_voltage || !rdev->desc->n_voltages)
4153 return -EINVAL;
4154
4155 for (i = 0; i < rdev->desc->n_voltages; i++) {
4156
4157 if (i < rdev->desc->linear_min_sel)
4158 continue;
4159
4160 if (old_sel >= 0 && new_sel >= 0)
4161 break;
4162
4163 voltage = regulator_list_voltage(regulator, i);
4164 if (voltage < 0)
4165 return -EINVAL;
4166 if (voltage == 0)
4167 continue;
4168 if (voltage == old_uV)
4169 old_sel = i;
4170 if (voltage == new_uV)
4171 new_sel = i;
4172 }
4173
4174 if (old_sel < 0 || new_sel < 0)
4175 return -EINVAL;
4176
4177 return ops->set_voltage_time_sel(rdev, old_sel, new_sel);
4178}
4179EXPORT_SYMBOL_GPL(regulator_set_voltage_time);
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193int regulator_set_voltage_time_sel(struct regulator_dev *rdev,
4194 unsigned int old_selector,
4195 unsigned int new_selector)
4196{
4197 int old_volt, new_volt;
4198
4199
4200 if (!rdev->desc->ops->list_voltage)
4201 return -EINVAL;
4202
4203 old_volt = rdev->desc->ops->list_voltage(rdev, old_selector);
4204 new_volt = rdev->desc->ops->list_voltage(rdev, new_selector);
4205
4206 if (rdev->desc->ops->set_voltage_time)
4207 return rdev->desc->ops->set_voltage_time(rdev, old_volt,
4208 new_volt);
4209 else
4210 return _regulator_set_voltage_time(rdev, old_volt, new_volt);
4211}
4212EXPORT_SYMBOL_GPL(regulator_set_voltage_time_sel);
4213
4214int regulator_sync_voltage_rdev(struct regulator_dev *rdev)
4215{
4216 int ret;
4217
4218 regulator_lock(rdev);
4219
4220 if (!rdev->desc->ops->set_voltage &&
4221 !rdev->desc->ops->set_voltage_sel) {
4222 ret = -EINVAL;
4223 goto out;
4224 }
4225
4226
4227 if (rdev->coupling_desc.n_coupled > 1)
4228 ret = regulator_balance_voltage(rdev, PM_SUSPEND_ON);
4229 else
4230 ret = -EOPNOTSUPP;
4231
4232out:
4233 regulator_unlock(rdev);
4234 return ret;
4235}
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245int regulator_sync_voltage(struct regulator *regulator)
4246{
4247 struct regulator_dev *rdev = regulator->rdev;
4248 struct regulator_voltage *voltage = ®ulator->voltage[PM_SUSPEND_ON];
4249 int ret, min_uV, max_uV;
4250
4251 regulator_lock(rdev);
4252
4253 if (!rdev->desc->ops->set_voltage &&
4254 !rdev->desc->ops->set_voltage_sel) {
4255 ret = -EINVAL;
4256 goto out;
4257 }
4258
4259
4260 if (!voltage->min_uV && !voltage->max_uV) {
4261 ret = -EINVAL;
4262 goto out;
4263 }
4264
4265 min_uV = voltage->min_uV;
4266 max_uV = voltage->max_uV;
4267
4268
4269 ret = regulator_check_voltage(rdev, &min_uV, &max_uV);
4270 if (ret < 0)
4271 goto out;
4272
4273 ret = regulator_check_consumers(rdev, &min_uV, &max_uV, 0);
4274 if (ret < 0)
4275 goto out;
4276
4277
4278 if (rdev->coupling_desc.n_coupled > 1)
4279 ret = regulator_balance_voltage(rdev, PM_SUSPEND_ON);
4280 else
4281 ret = _regulator_do_set_voltage(rdev, min_uV, max_uV);
4282
4283out:
4284 regulator_unlock(rdev);
4285 return ret;
4286}
4287EXPORT_SYMBOL_GPL(regulator_sync_voltage);
4288
4289int regulator_get_voltage_rdev(struct regulator_dev *rdev)
4290{
4291 int sel, ret;
4292 bool bypassed;
4293
4294 if (rdev->desc->ops->get_bypass) {
4295 ret = rdev->desc->ops->get_bypass(rdev, &bypassed);
4296 if (ret < 0)
4297 return ret;
4298 if (bypassed) {
4299
4300 if (!rdev->supply) {
4301 rdev_err(rdev,
4302 "bypassed regulator has no supply!\n");
4303 return -EPROBE_DEFER;
4304 }
4305
4306 return regulator_get_voltage_rdev(rdev->supply->rdev);
4307 }
4308 }
4309
4310 if (rdev->desc->ops->get_voltage_sel) {
4311 sel = rdev->desc->ops->get_voltage_sel(rdev);
4312 if (sel < 0)
4313 return sel;
4314 ret = rdev->desc->ops->list_voltage(rdev, sel);
4315 } else if (rdev->desc->ops->get_voltage) {
4316 ret = rdev->desc->ops->get_voltage(rdev);
4317 } else if (rdev->desc->ops->list_voltage) {
4318 ret = rdev->desc->ops->list_voltage(rdev, 0);
4319 } else if (rdev->desc->fixed_uV && (rdev->desc->n_voltages == 1)) {
4320 ret = rdev->desc->fixed_uV;
4321 } else if (rdev->supply) {
4322 ret = regulator_get_voltage_rdev(rdev->supply->rdev);
4323 } else if (rdev->supply_name) {
4324 return -EPROBE_DEFER;
4325 } else {
4326 return -EINVAL;
4327 }
4328
4329 if (ret < 0)
4330 return ret;
4331 return ret - rdev->constraints->uV_offset;
4332}
4333EXPORT_SYMBOL_GPL(regulator_get_voltage_rdev);
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344int regulator_get_voltage(struct regulator *regulator)
4345{
4346 struct ww_acquire_ctx ww_ctx;
4347 int ret;
4348
4349 regulator_lock_dependent(regulator->rdev, &ww_ctx);
4350 ret = regulator_get_voltage_rdev(regulator->rdev);
4351 regulator_unlock_dependent(regulator->rdev, &ww_ctx);
4352
4353 return ret;
4354}
4355EXPORT_SYMBOL_GPL(regulator_get_voltage);
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373int regulator_set_current_limit(struct regulator *regulator,
4374 int min_uA, int max_uA)
4375{
4376 struct regulator_dev *rdev = regulator->rdev;
4377 int ret;
4378
4379 regulator_lock(rdev);
4380
4381
4382 if (!rdev->desc->ops->set_current_limit) {
4383 ret = -EINVAL;
4384 goto out;
4385 }
4386
4387
4388 ret = regulator_check_current_limit(rdev, &min_uA, &max_uA);
4389 if (ret < 0)
4390 goto out;
4391
4392 ret = rdev->desc->ops->set_current_limit(rdev, min_uA, max_uA);
4393out:
4394 regulator_unlock(rdev);
4395 return ret;
4396}
4397EXPORT_SYMBOL_GPL(regulator_set_current_limit);
4398
4399static int _regulator_get_current_limit_unlocked(struct regulator_dev *rdev)
4400{
4401
4402 if (!rdev->desc->ops->get_current_limit)
4403 return -EINVAL;
4404
4405 return rdev->desc->ops->get_current_limit(rdev);
4406}
4407
4408static int _regulator_get_current_limit(struct regulator_dev *rdev)
4409{
4410 int ret;
4411
4412 regulator_lock(rdev);
4413 ret = _regulator_get_current_limit_unlocked(rdev);
4414 regulator_unlock(rdev);
4415
4416 return ret;
4417}
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428int regulator_get_current_limit(struct regulator *regulator)
4429{
4430 return _regulator_get_current_limit(regulator->rdev);
4431}
4432EXPORT_SYMBOL_GPL(regulator_get_current_limit);
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445int regulator_set_mode(struct regulator *regulator, unsigned int mode)
4446{
4447 struct regulator_dev *rdev = regulator->rdev;
4448 int ret;
4449 int regulator_curr_mode;
4450
4451 regulator_lock(rdev);
4452
4453
4454 if (!rdev->desc->ops->set_mode) {
4455 ret = -EINVAL;
4456 goto out;
4457 }
4458
4459
4460 if (rdev->desc->ops->get_mode) {
4461 regulator_curr_mode = rdev->desc->ops->get_mode(rdev);
4462 if (regulator_curr_mode == mode) {
4463 ret = 0;
4464 goto out;
4465 }
4466 }
4467
4468
4469 ret = regulator_mode_constrain(rdev, &mode);
4470 if (ret < 0)
4471 goto out;
4472
4473 ret = rdev->desc->ops->set_mode(rdev, mode);
4474out:
4475 regulator_unlock(rdev);
4476 return ret;
4477}
4478EXPORT_SYMBOL_GPL(regulator_set_mode);
4479
4480static unsigned int _regulator_get_mode_unlocked(struct regulator_dev *rdev)
4481{
4482
4483 if (!rdev->desc->ops->get_mode)
4484 return -EINVAL;
4485
4486 return rdev->desc->ops->get_mode(rdev);
4487}
4488
4489static unsigned int _regulator_get_mode(struct regulator_dev *rdev)
4490{
4491 int ret;
4492
4493 regulator_lock(rdev);
4494 ret = _regulator_get_mode_unlocked(rdev);
4495 regulator_unlock(rdev);
4496
4497 return ret;
4498}
4499
4500
4501
4502
4503
4504
4505
4506unsigned int regulator_get_mode(struct regulator *regulator)
4507{
4508 return _regulator_get_mode(regulator->rdev);
4509}
4510EXPORT_SYMBOL_GPL(regulator_get_mode);
4511
4512static int rdev_get_cached_err_flags(struct regulator_dev *rdev)
4513{
4514 int ret = 0;
4515
4516 if (rdev->use_cached_err) {
4517 spin_lock(&rdev->err_lock);
4518 ret = rdev->cached_err;
4519 spin_unlock(&rdev->err_lock);
4520 }
4521 return ret;
4522}
4523
4524static int _regulator_get_error_flags(struct regulator_dev *rdev,
4525 unsigned int *flags)
4526{
4527 int cached_flags, ret = 0;
4528
4529 regulator_lock(rdev);
4530
4531 cached_flags = rdev_get_cached_err_flags(rdev);
4532
4533 if (rdev->desc->ops->get_error_flags)
4534 ret = rdev->desc->ops->get_error_flags(rdev, flags);
4535 else if (!rdev->use_cached_err)
4536 ret = -EINVAL;
4537
4538 *flags |= cached_flags;
4539
4540 regulator_unlock(rdev);
4541
4542 return ret;
4543}
4544
4545
4546
4547
4548
4549
4550
4551
4552int regulator_get_error_flags(struct regulator *regulator,
4553 unsigned int *flags)
4554{
4555 return _regulator_get_error_flags(regulator->rdev, flags);
4556}
4557EXPORT_SYMBOL_GPL(regulator_get_error_flags);
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593int regulator_set_load(struct regulator *regulator, int uA_load)
4594{
4595 struct regulator_dev *rdev = regulator->rdev;
4596 int old_uA_load;
4597 int ret = 0;
4598
4599 regulator_lock(rdev);
4600 old_uA_load = regulator->uA_load;
4601 regulator->uA_load = uA_load;
4602 if (regulator->enable_count && old_uA_load != uA_load) {
4603 ret = drms_uA_update(rdev);
4604 if (ret < 0)
4605 regulator->uA_load = old_uA_load;
4606 }
4607 regulator_unlock(rdev);
4608
4609 return ret;
4610}
4611EXPORT_SYMBOL_GPL(regulator_set_load);
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624int regulator_allow_bypass(struct regulator *regulator, bool enable)
4625{
4626 struct regulator_dev *rdev = regulator->rdev;
4627 const char *name = rdev_get_name(rdev);
4628 int ret = 0;
4629
4630 if (!rdev->desc->ops->set_bypass)
4631 return 0;
4632
4633 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_BYPASS))
4634 return 0;
4635
4636 regulator_lock(rdev);
4637
4638 if (enable && !regulator->bypass) {
4639 rdev->bypass_count++;
4640
4641 if (rdev->bypass_count == rdev->open_count) {
4642 trace_regulator_bypass_enable(name);
4643
4644 ret = rdev->desc->ops->set_bypass(rdev, enable);
4645 if (ret != 0)
4646 rdev->bypass_count--;
4647 else
4648 trace_regulator_bypass_enable_complete(name);
4649 }
4650
4651 } else if (!enable && regulator->bypass) {
4652 rdev->bypass_count--;
4653
4654 if (rdev->bypass_count != rdev->open_count) {
4655 trace_regulator_bypass_disable(name);
4656
4657 ret = rdev->desc->ops->set_bypass(rdev, enable);
4658 if (ret != 0)
4659 rdev->bypass_count++;
4660 else
4661 trace_regulator_bypass_disable_complete(name);
4662 }
4663 }
4664
4665 if (ret == 0)
4666 regulator->bypass = enable;
4667
4668 regulator_unlock(rdev);
4669
4670 return ret;
4671}
4672EXPORT_SYMBOL_GPL(regulator_allow_bypass);
4673
4674
4675
4676
4677
4678
4679
4680
4681int regulator_register_notifier(struct regulator *regulator,
4682 struct notifier_block *nb)
4683{
4684 return blocking_notifier_chain_register(®ulator->rdev->notifier,
4685 nb);
4686}
4687EXPORT_SYMBOL_GPL(regulator_register_notifier);
4688
4689
4690
4691
4692
4693
4694
4695
4696int regulator_unregister_notifier(struct regulator *regulator,
4697 struct notifier_block *nb)
4698{
4699 return blocking_notifier_chain_unregister(®ulator->rdev->notifier,
4700 nb);
4701}
4702EXPORT_SYMBOL_GPL(regulator_unregister_notifier);
4703
4704
4705
4706
4707static int _notifier_call_chain(struct regulator_dev *rdev,
4708 unsigned long event, void *data)
4709{
4710
4711 return blocking_notifier_call_chain(&rdev->notifier, event, data);
4712}
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728int regulator_bulk_get(struct device *dev, int num_consumers,
4729 struct regulator_bulk_data *consumers)
4730{
4731 int i;
4732 int ret;
4733
4734 for (i = 0; i < num_consumers; i++)
4735 consumers[i].consumer = NULL;
4736
4737 for (i = 0; i < num_consumers; i++) {
4738 consumers[i].consumer = regulator_get(dev,
4739 consumers[i].supply);
4740 if (IS_ERR(consumers[i].consumer)) {
4741 ret = PTR_ERR(consumers[i].consumer);
4742 consumers[i].consumer = NULL;
4743 goto err;
4744 }
4745 }
4746
4747 return 0;
4748
4749err:
4750 if (ret != -EPROBE_DEFER)
4751 dev_err(dev, "Failed to get supply '%s': %pe\n",
4752 consumers[i].supply, ERR_PTR(ret));
4753 else
4754 dev_dbg(dev, "Failed to get supply '%s', deferring\n",
4755 consumers[i].supply);
4756
4757 while (--i >= 0)
4758 regulator_put(consumers[i].consumer);
4759
4760 return ret;
4761}
4762EXPORT_SYMBOL_GPL(regulator_bulk_get);
4763
4764static void regulator_bulk_enable_async(void *data, async_cookie_t cookie)
4765{
4766 struct regulator_bulk_data *bulk = data;
4767
4768 bulk->ret = regulator_enable(bulk->consumer);
4769}
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783int regulator_bulk_enable(int num_consumers,
4784 struct regulator_bulk_data *consumers)
4785{
4786 ASYNC_DOMAIN_EXCLUSIVE(async_domain);
4787 int i;
4788 int ret = 0;
4789
4790 for (i = 0; i < num_consumers; i++) {
4791 async_schedule_domain(regulator_bulk_enable_async,
4792 &consumers[i], &async_domain);
4793 }
4794
4795 async_synchronize_full_domain(&async_domain);
4796
4797
4798 for (i = 0; i < num_consumers; i++) {
4799 if (consumers[i].ret != 0) {
4800 ret = consumers[i].ret;
4801 goto err;
4802 }
4803 }
4804
4805 return 0;
4806
4807err:
4808 for (i = 0; i < num_consumers; i++) {
4809 if (consumers[i].ret < 0)
4810 pr_err("Failed to enable %s: %pe\n", consumers[i].supply,
4811 ERR_PTR(consumers[i].ret));
4812 else
4813 regulator_disable(consumers[i].consumer);
4814 }
4815
4816 return ret;
4817}
4818EXPORT_SYMBOL_GPL(regulator_bulk_enable);
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832int regulator_bulk_disable(int num_consumers,
4833 struct regulator_bulk_data *consumers)
4834{
4835 int i;
4836 int ret, r;
4837
4838 for (i = num_consumers - 1; i >= 0; --i) {
4839 ret = regulator_disable(consumers[i].consumer);
4840 if (ret != 0)
4841 goto err;
4842 }
4843
4844 return 0;
4845
4846err:
4847 pr_err("Failed to disable %s: %pe\n", consumers[i].supply, ERR_PTR(ret));
4848 for (++i; i < num_consumers; ++i) {
4849 r = regulator_enable(consumers[i].consumer);
4850 if (r != 0)
4851 pr_err("Failed to re-enable %s: %pe\n",
4852 consumers[i].supply, ERR_PTR(r));
4853 }
4854
4855 return ret;
4856}
4857EXPORT_SYMBOL_GPL(regulator_bulk_disable);
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873int regulator_bulk_force_disable(int num_consumers,
4874 struct regulator_bulk_data *consumers)
4875{
4876 int i;
4877 int ret = 0;
4878
4879 for (i = 0; i < num_consumers; i++) {
4880 consumers[i].ret =
4881 regulator_force_disable(consumers[i].consumer);
4882
4883
4884 if (consumers[i].ret && !ret)
4885 ret = consumers[i].ret;
4886 }
4887
4888 return ret;
4889}
4890EXPORT_SYMBOL_GPL(regulator_bulk_force_disable);
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901void regulator_bulk_free(int num_consumers,
4902 struct regulator_bulk_data *consumers)
4903{
4904 int i;
4905
4906 for (i = 0; i < num_consumers; i++) {
4907 regulator_put(consumers[i].consumer);
4908 consumers[i].consumer = NULL;
4909 }
4910}
4911EXPORT_SYMBOL_GPL(regulator_bulk_free);
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922int regulator_notifier_call_chain(struct regulator_dev *rdev,
4923 unsigned long event, void *data)
4924{
4925 _notifier_call_chain(rdev, event, data);
4926 return NOTIFY_DONE;
4927
4928}
4929EXPORT_SYMBOL_GPL(regulator_notifier_call_chain);
4930
4931
4932
4933
4934
4935
4936
4937
4938int regulator_mode_to_status(unsigned int mode)
4939{
4940 switch (mode) {
4941 case REGULATOR_MODE_FAST:
4942 return REGULATOR_STATUS_FAST;
4943 case REGULATOR_MODE_NORMAL:
4944 return REGULATOR_STATUS_NORMAL;
4945 case REGULATOR_MODE_IDLE:
4946 return REGULATOR_STATUS_IDLE;
4947 case REGULATOR_MODE_STANDBY:
4948 return REGULATOR_STATUS_STANDBY;
4949 default:
4950 return REGULATOR_STATUS_UNDEFINED;
4951 }
4952}
4953EXPORT_SYMBOL_GPL(regulator_mode_to_status);
4954
4955static struct attribute *regulator_dev_attrs[] = {
4956 &dev_attr_name.attr,
4957 &dev_attr_num_users.attr,
4958 &dev_attr_type.attr,
4959 &dev_attr_microvolts.attr,
4960 &dev_attr_microamps.attr,
4961 &dev_attr_opmode.attr,
4962 &dev_attr_state.attr,
4963 &dev_attr_status.attr,
4964 &dev_attr_bypass.attr,
4965 &dev_attr_requested_microamps.attr,
4966 &dev_attr_min_microvolts.attr,
4967 &dev_attr_max_microvolts.attr,
4968 &dev_attr_min_microamps.attr,
4969 &dev_attr_max_microamps.attr,
4970 &dev_attr_suspend_standby_state.attr,
4971 &dev_attr_suspend_mem_state.attr,
4972 &dev_attr_suspend_disk_state.attr,
4973 &dev_attr_suspend_standby_microvolts.attr,
4974 &dev_attr_suspend_mem_microvolts.attr,
4975 &dev_attr_suspend_disk_microvolts.attr,
4976 &dev_attr_suspend_standby_mode.attr,
4977 &dev_attr_suspend_mem_mode.attr,
4978 &dev_attr_suspend_disk_mode.attr,
4979 NULL
4980};
4981
4982
4983
4984
4985
4986static umode_t regulator_attr_is_visible(struct kobject *kobj,
4987 struct attribute *attr, int idx)
4988{
4989 struct device *dev = kobj_to_dev(kobj);
4990 struct regulator_dev *rdev = dev_to_rdev(dev);
4991 const struct regulator_ops *ops = rdev->desc->ops;
4992 umode_t mode = attr->mode;
4993
4994
4995 if (attr == &dev_attr_name.attr ||
4996 attr == &dev_attr_num_users.attr ||
4997 attr == &dev_attr_type.attr)
4998 return mode;
4999
5000
5001 if (attr == &dev_attr_microvolts.attr) {
5002 if ((ops->get_voltage && ops->get_voltage(rdev) >= 0) ||
5003 (ops->get_voltage_sel && ops->get_voltage_sel(rdev) >= 0) ||
5004 (ops->list_voltage && ops->list_voltage(rdev, 0) >= 0) ||
5005 (rdev->desc->fixed_uV && rdev->desc->n_voltages == 1))
5006 return mode;
5007 return 0;
5008 }
5009
5010 if (attr == &dev_attr_microamps.attr)
5011 return ops->get_current_limit ? mode : 0;
5012
5013 if (attr == &dev_attr_opmode.attr)
5014 return ops->get_mode ? mode : 0;
5015
5016 if (attr == &dev_attr_state.attr)
5017 return (rdev->ena_pin || ops->is_enabled) ? mode : 0;
5018
5019 if (attr == &dev_attr_status.attr)
5020 return ops->get_status ? mode : 0;
5021
5022 if (attr == &dev_attr_bypass.attr)
5023 return ops->get_bypass ? mode : 0;
5024
5025
5026 if (attr == &dev_attr_min_microvolts.attr ||
5027 attr == &dev_attr_max_microvolts.attr)
5028 return (ops->set_voltage || ops->set_voltage_sel) ? mode : 0;
5029
5030 if (attr == &dev_attr_min_microamps.attr ||
5031 attr == &dev_attr_max_microamps.attr)
5032 return ops->set_current_limit ? mode : 0;
5033
5034 if (attr == &dev_attr_suspend_standby_state.attr ||
5035 attr == &dev_attr_suspend_mem_state.attr ||
5036 attr == &dev_attr_suspend_disk_state.attr)
5037 return mode;
5038
5039 if (attr == &dev_attr_suspend_standby_microvolts.attr ||
5040 attr == &dev_attr_suspend_mem_microvolts.attr ||
5041 attr == &dev_attr_suspend_disk_microvolts.attr)
5042 return ops->set_suspend_voltage ? mode : 0;
5043
5044 if (attr == &dev_attr_suspend_standby_mode.attr ||
5045 attr == &dev_attr_suspend_mem_mode.attr ||
5046 attr == &dev_attr_suspend_disk_mode.attr)
5047 return ops->set_suspend_mode ? mode : 0;
5048
5049 return mode;
5050}
5051
5052static const struct attribute_group regulator_dev_group = {
5053 .attrs = regulator_dev_attrs,
5054 .is_visible = regulator_attr_is_visible,
5055};
5056
5057static const struct attribute_group *regulator_dev_groups[] = {
5058 ®ulator_dev_group,
5059 NULL
5060};
5061
5062static void regulator_dev_release(struct device *dev)
5063{
5064 struct regulator_dev *rdev = dev_get_drvdata(dev);
5065
5066 kfree(rdev->constraints);
5067 of_node_put(rdev->dev.of_node);
5068 kfree(rdev);
5069}
5070
5071static void rdev_init_debugfs(struct regulator_dev *rdev)
5072{
5073 struct device *parent = rdev->dev.parent;
5074 const char *rname = rdev_get_name(rdev);
5075 char name[NAME_MAX];
5076
5077
5078 if (parent && rname == rdev->desc->name) {
5079 snprintf(name, sizeof(name), "%s-%s", dev_name(parent),
5080 rname);
5081 rname = name;
5082 }
5083
5084 rdev->debugfs = debugfs_create_dir(rname, debugfs_root);
5085 if (!rdev->debugfs) {
5086 rdev_warn(rdev, "Failed to create debugfs directory\n");
5087 return;
5088 }
5089
5090 debugfs_create_u32("use_count", 0444, rdev->debugfs,
5091 &rdev->use_count);
5092 debugfs_create_u32("open_count", 0444, rdev->debugfs,
5093 &rdev->open_count);
5094 debugfs_create_u32("bypass_count", 0444, rdev->debugfs,
5095 &rdev->bypass_count);
5096}
5097
5098static int regulator_register_resolve_supply(struct device *dev, void *data)
5099{
5100 struct regulator_dev *rdev = dev_to_rdev(dev);
5101
5102 if (regulator_resolve_supply(rdev))
5103 rdev_dbg(rdev, "unable to resolve supply\n");
5104
5105 return 0;
5106}
5107
5108int regulator_coupler_register(struct regulator_coupler *coupler)
5109{
5110 mutex_lock(®ulator_list_mutex);
5111 list_add_tail(&coupler->list, ®ulator_coupler_list);
5112 mutex_unlock(®ulator_list_mutex);
5113
5114 return 0;
5115}
5116
5117static struct regulator_coupler *
5118regulator_find_coupler(struct regulator_dev *rdev)
5119{
5120 struct regulator_coupler *coupler;
5121 int err;
5122
5123
5124
5125
5126
5127
5128 list_for_each_entry_reverse(coupler, ®ulator_coupler_list, list) {
5129 err = coupler->attach_regulator(coupler, rdev);
5130 if (!err) {
5131 if (!coupler->balance_voltage &&
5132 rdev->coupling_desc.n_coupled > 2)
5133 goto err_unsupported;
5134
5135 return coupler;
5136 }
5137
5138 if (err < 0)
5139 return ERR_PTR(err);
5140
5141 if (err == 1)
5142 continue;
5143
5144 break;
5145 }
5146
5147 return ERR_PTR(-EINVAL);
5148
5149err_unsupported:
5150 if (coupler->detach_regulator)
5151 coupler->detach_regulator(coupler, rdev);
5152
5153 rdev_err(rdev,
5154 "Voltage balancing for multiple regulator couples is unimplemented\n");
5155
5156 return ERR_PTR(-EPERM);
5157}
5158
5159static void regulator_resolve_coupling(struct regulator_dev *rdev)
5160{
5161 struct regulator_coupler *coupler = rdev->coupling_desc.coupler;
5162 struct coupling_desc *c_desc = &rdev->coupling_desc;
5163 int n_coupled = c_desc->n_coupled;
5164 struct regulator_dev *c_rdev;
5165 int i;
5166
5167 for (i = 1; i < n_coupled; i++) {
5168
5169 if (c_desc->coupled_rdevs[i])
5170 continue;
5171
5172 c_rdev = of_parse_coupled_regulator(rdev, i - 1);
5173
5174 if (!c_rdev)
5175 continue;
5176
5177 if (c_rdev->coupling_desc.coupler != coupler) {
5178 rdev_err(rdev, "coupler mismatch with %s\n",
5179 rdev_get_name(c_rdev));
5180 return;
5181 }
5182
5183 c_desc->coupled_rdevs[i] = c_rdev;
5184 c_desc->n_resolved++;
5185
5186 regulator_resolve_coupling(c_rdev);
5187 }
5188}
5189
5190static void regulator_remove_coupling(struct regulator_dev *rdev)
5191{
5192 struct regulator_coupler *coupler = rdev->coupling_desc.coupler;
5193 struct coupling_desc *__c_desc, *c_desc = &rdev->coupling_desc;
5194 struct regulator_dev *__c_rdev, *c_rdev;
5195 unsigned int __n_coupled, n_coupled;
5196 int i, k;
5197 int err;
5198
5199 n_coupled = c_desc->n_coupled;
5200
5201 for (i = 1; i < n_coupled; i++) {
5202 c_rdev = c_desc->coupled_rdevs[i];
5203
5204 if (!c_rdev)
5205 continue;
5206
5207 regulator_lock(c_rdev);
5208
5209 __c_desc = &c_rdev->coupling_desc;
5210 __n_coupled = __c_desc->n_coupled;
5211
5212 for (k = 1; k < __n_coupled; k++) {
5213 __c_rdev = __c_desc->coupled_rdevs[k];
5214
5215 if (__c_rdev == rdev) {
5216 __c_desc->coupled_rdevs[k] = NULL;
5217 __c_desc->n_resolved--;
5218 break;
5219 }
5220 }
5221
5222 regulator_unlock(c_rdev);
5223
5224 c_desc->coupled_rdevs[i] = NULL;
5225 c_desc->n_resolved--;
5226 }
5227
5228 if (coupler && coupler->detach_regulator) {
5229 err = coupler->detach_regulator(coupler, rdev);
5230 if (err)
5231 rdev_err(rdev, "failed to detach from coupler: %pe\n",
5232 ERR_PTR(err));
5233 }
5234
5235 kfree(rdev->coupling_desc.coupled_rdevs);
5236 rdev->coupling_desc.coupled_rdevs = NULL;
5237}
5238
5239static int regulator_init_coupling(struct regulator_dev *rdev)
5240{
5241 struct regulator_dev **coupled;
5242 int err, n_phandles;
5243
5244 if (!IS_ENABLED(CONFIG_OF))
5245 n_phandles = 0;
5246 else
5247 n_phandles = of_get_n_coupled(rdev);
5248
5249 coupled = kcalloc(n_phandles + 1, sizeof(*coupled), GFP_KERNEL);
5250 if (!coupled)
5251 return -ENOMEM;
5252
5253 rdev->coupling_desc.coupled_rdevs = coupled;
5254
5255
5256
5257
5258
5259 rdev->coupling_desc.coupled_rdevs[0] = rdev;
5260 rdev->coupling_desc.n_coupled = n_phandles + 1;
5261 rdev->coupling_desc.n_resolved++;
5262
5263
5264 if (n_phandles == 0)
5265 return 0;
5266
5267 if (!of_check_coupling_data(rdev))
5268 return -EPERM;
5269
5270 mutex_lock(®ulator_list_mutex);
5271 rdev->coupling_desc.coupler = regulator_find_coupler(rdev);
5272 mutex_unlock(®ulator_list_mutex);
5273
5274 if (IS_ERR(rdev->coupling_desc.coupler)) {
5275 err = PTR_ERR(rdev->coupling_desc.coupler);
5276 rdev_err(rdev, "failed to get coupler: %pe\n", ERR_PTR(err));
5277 return err;
5278 }
5279
5280 return 0;
5281}
5282
5283static int generic_coupler_attach(struct regulator_coupler *coupler,
5284 struct regulator_dev *rdev)
5285{
5286 if (rdev->coupling_desc.n_coupled > 2) {
5287 rdev_err(rdev,
5288 "Voltage balancing for multiple regulator couples is unimplemented\n");
5289 return -EPERM;
5290 }
5291
5292 if (!rdev->constraints->always_on) {
5293 rdev_err(rdev,
5294 "Coupling of a non always-on regulator is unimplemented\n");
5295 return -ENOTSUPP;
5296 }
5297
5298 return 0;
5299}
5300
5301static struct regulator_coupler generic_regulator_coupler = {
5302 .attach_regulator = generic_coupler_attach,
5303};
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314struct regulator_dev *
5315regulator_register(const struct regulator_desc *regulator_desc,
5316 const struct regulator_config *cfg)
5317{
5318 const struct regulator_init_data *init_data;
5319 struct regulator_config *config = NULL;
5320 static atomic_t regulator_no = ATOMIC_INIT(-1);
5321 struct regulator_dev *rdev;
5322 bool dangling_cfg_gpiod = false;
5323 bool dangling_of_gpiod = false;
5324 struct device *dev;
5325 int ret, i;
5326
5327 if (cfg == NULL)
5328 return ERR_PTR(-EINVAL);
5329 if (cfg->ena_gpiod)
5330 dangling_cfg_gpiod = true;
5331 if (regulator_desc == NULL) {
5332 ret = -EINVAL;
5333 goto rinse;
5334 }
5335
5336 dev = cfg->dev;
5337 WARN_ON(!dev);
5338
5339 if (regulator_desc->name == NULL || regulator_desc->ops == NULL) {
5340 ret = -EINVAL;
5341 goto rinse;
5342 }
5343
5344 if (regulator_desc->type != REGULATOR_VOLTAGE &&
5345 regulator_desc->type != REGULATOR_CURRENT) {
5346 ret = -EINVAL;
5347 goto rinse;
5348 }
5349
5350
5351 WARN_ON(regulator_desc->ops->get_voltage &&
5352 regulator_desc->ops->get_voltage_sel);
5353 WARN_ON(regulator_desc->ops->set_voltage &&
5354 regulator_desc->ops->set_voltage_sel);
5355
5356
5357 if (regulator_desc->ops->get_voltage_sel &&
5358 !regulator_desc->ops->list_voltage) {
5359 ret = -EINVAL;
5360 goto rinse;
5361 }
5362 if (regulator_desc->ops->set_voltage_sel &&
5363 !regulator_desc->ops->list_voltage) {
5364 ret = -EINVAL;
5365 goto rinse;
5366 }
5367
5368 rdev = kzalloc(sizeof(struct regulator_dev), GFP_KERNEL);
5369 if (rdev == NULL) {
5370 ret = -ENOMEM;
5371 goto rinse;
5372 }
5373 device_initialize(&rdev->dev);
5374 spin_lock_init(&rdev->err_lock);
5375
5376
5377
5378
5379
5380 config = kmemdup(cfg, sizeof(*cfg), GFP_KERNEL);
5381 if (config == NULL) {
5382 ret = -ENOMEM;
5383 goto clean;
5384 }
5385
5386 init_data = regulator_of_get_init_data(dev, regulator_desc, config,
5387 &rdev->dev.of_node);
5388
5389
5390
5391
5392
5393
5394 if (PTR_ERR(init_data) == -EPROBE_DEFER) {
5395 ret = -EPROBE_DEFER;
5396 goto clean;
5397 }
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407 if (!cfg->ena_gpiod && config->ena_gpiod)
5408 dangling_of_gpiod = true;
5409 if (!init_data) {
5410 init_data = config->init_data;
5411 rdev->dev.of_node = of_node_get(config->of_node);
5412 }
5413
5414 ww_mutex_init(&rdev->mutex, ®ulator_ww_class);
5415 rdev->reg_data = config->driver_data;
5416 rdev->owner = regulator_desc->owner;
5417 rdev->desc = regulator_desc;
5418 if (config->regmap)
5419 rdev->regmap = config->regmap;
5420 else if (dev_get_regmap(dev, NULL))
5421 rdev->regmap = dev_get_regmap(dev, NULL);
5422 else if (dev->parent)
5423 rdev->regmap = dev_get_regmap(dev->parent, NULL);
5424 INIT_LIST_HEAD(&rdev->consumer_list);
5425 INIT_LIST_HEAD(&rdev->list);
5426 BLOCKING_INIT_NOTIFIER_HEAD(&rdev->notifier);
5427 INIT_DELAYED_WORK(&rdev->disable_work, regulator_disable_work);
5428
5429
5430 if (init_data && init_data->regulator_init) {
5431 ret = init_data->regulator_init(rdev->reg_data);
5432 if (ret < 0)
5433 goto clean;
5434 }
5435
5436 if (config->ena_gpiod) {
5437 ret = regulator_ena_gpio_request(rdev, config);
5438 if (ret != 0) {
5439 rdev_err(rdev, "Failed to request enable GPIO: %pe\n",
5440 ERR_PTR(ret));
5441 goto clean;
5442 }
5443
5444 dangling_cfg_gpiod = false;
5445 dangling_of_gpiod = false;
5446 }
5447
5448
5449 rdev->dev.class = ®ulator_class;
5450 rdev->dev.parent = dev;
5451 dev_set_name(&rdev->dev, "regulator.%lu",
5452 (unsigned long) atomic_inc_return(®ulator_no));
5453 dev_set_drvdata(&rdev->dev, rdev);
5454
5455
5456 if (init_data)
5457 rdev->constraints = kmemdup(&init_data->constraints,
5458 sizeof(*rdev->constraints),
5459 GFP_KERNEL);
5460 else
5461 rdev->constraints = kzalloc(sizeof(*rdev->constraints),
5462 GFP_KERNEL);
5463 if (!rdev->constraints) {
5464 ret = -ENOMEM;
5465 goto wash;
5466 }
5467
5468 if (init_data && init_data->supply_regulator)
5469 rdev->supply_name = init_data->supply_regulator;
5470 else if (regulator_desc->supply_name)
5471 rdev->supply_name = regulator_desc->supply_name;
5472
5473 ret = set_machine_constraints(rdev);
5474 if (ret == -EPROBE_DEFER) {
5475
5476
5477
5478
5479
5480
5481
5482 rdev_dbg(rdev, "will resolve supply early: %s\n",
5483 rdev->supply_name);
5484 ret = regulator_resolve_supply(rdev);
5485 if (!ret)
5486 ret = set_machine_constraints(rdev);
5487 else
5488 rdev_dbg(rdev, "unable to resolve supply early: %pe\n",
5489 ERR_PTR(ret));
5490 }
5491 if (ret < 0)
5492 goto wash;
5493
5494 ret = regulator_init_coupling(rdev);
5495 if (ret < 0)
5496 goto wash;
5497
5498
5499 if (init_data) {
5500 for (i = 0; i < init_data->num_consumer_supplies; i++) {
5501 ret = set_consumer_device_supply(rdev,
5502 init_data->consumer_supplies[i].dev_name,
5503 init_data->consumer_supplies[i].supply);
5504 if (ret < 0) {
5505 dev_err(dev, "Failed to set supply %s\n",
5506 init_data->consumer_supplies[i].supply);
5507 goto unset_supplies;
5508 }
5509 }
5510 }
5511
5512 if (!rdev->desc->ops->get_voltage &&
5513 !rdev->desc->ops->list_voltage &&
5514 !rdev->desc->fixed_uV)
5515 rdev->is_switch = true;
5516
5517 ret = device_add(&rdev->dev);
5518 if (ret != 0)
5519 goto unset_supplies;
5520
5521 rdev_init_debugfs(rdev);
5522
5523
5524 mutex_lock(®ulator_list_mutex);
5525 regulator_resolve_coupling(rdev);
5526 mutex_unlock(®ulator_list_mutex);
5527
5528
5529 class_for_each_device(®ulator_class, NULL, NULL,
5530 regulator_register_resolve_supply);
5531 kfree(config);
5532 return rdev;
5533
5534unset_supplies:
5535 mutex_lock(®ulator_list_mutex);
5536 unset_regulator_supplies(rdev);
5537 regulator_remove_coupling(rdev);
5538 mutex_unlock(®ulator_list_mutex);
5539wash:
5540 kfree(rdev->coupling_desc.coupled_rdevs);
5541 mutex_lock(®ulator_list_mutex);
5542 regulator_ena_gpio_free(rdev);
5543 mutex_unlock(®ulator_list_mutex);
5544clean:
5545 if (dangling_of_gpiod)
5546 gpiod_put(config->ena_gpiod);
5547 kfree(config);
5548 put_device(&rdev->dev);
5549rinse:
5550 if (dangling_cfg_gpiod)
5551 gpiod_put(cfg->ena_gpiod);
5552 return ERR_PTR(ret);
5553}
5554EXPORT_SYMBOL_GPL(regulator_register);
5555
5556
5557
5558
5559
5560
5561
5562void regulator_unregister(struct regulator_dev *rdev)
5563{
5564 if (rdev == NULL)
5565 return;
5566
5567 if (rdev->supply) {
5568 while (rdev->use_count--)
5569 regulator_disable(rdev->supply);
5570 regulator_put(rdev->supply);
5571 }
5572
5573 flush_work(&rdev->disable_work.work);
5574
5575 mutex_lock(®ulator_list_mutex);
5576
5577 debugfs_remove_recursive(rdev->debugfs);
5578 WARN_ON(rdev->open_count);
5579 regulator_remove_coupling(rdev);
5580 unset_regulator_supplies(rdev);
5581 list_del(&rdev->list);
5582 regulator_ena_gpio_free(rdev);
5583 device_unregister(&rdev->dev);
5584
5585 mutex_unlock(®ulator_list_mutex);
5586}
5587EXPORT_SYMBOL_GPL(regulator_unregister);
5588
5589#ifdef CONFIG_SUSPEND
5590
5591
5592
5593
5594
5595
5596static int regulator_suspend(struct device *dev)
5597{
5598 struct regulator_dev *rdev = dev_to_rdev(dev);
5599 suspend_state_t state = pm_suspend_target_state;
5600 int ret;
5601 const struct regulator_state *rstate;
5602
5603 rstate = regulator_get_suspend_state_check(rdev, state);
5604 if (!rstate)
5605 return 0;
5606
5607 regulator_lock(rdev);
5608 ret = __suspend_set_state(rdev, rstate);
5609 regulator_unlock(rdev);
5610
5611 return ret;
5612}
5613
5614static int regulator_resume(struct device *dev)
5615{
5616 suspend_state_t state = pm_suspend_target_state;
5617 struct regulator_dev *rdev = dev_to_rdev(dev);
5618 struct regulator_state *rstate;
5619 int ret = 0;
5620
5621 rstate = regulator_get_suspend_state(rdev, state);
5622 if (rstate == NULL)
5623 return 0;
5624
5625
5626 if (!rdev->desc->ops->resume)
5627 return 0;
5628
5629 regulator_lock(rdev);
5630
5631 if (rstate->enabled == ENABLE_IN_SUSPEND ||
5632 rstate->enabled == DISABLE_IN_SUSPEND)
5633 ret = rdev->desc->ops->resume(rdev);
5634
5635 regulator_unlock(rdev);
5636
5637 return ret;
5638}
5639#else
5640
5641#define regulator_suspend NULL
5642#define regulator_resume NULL
5643
5644#endif
5645
5646#ifdef CONFIG_PM
5647static const struct dev_pm_ops __maybe_unused regulator_pm_ops = {
5648 .suspend = regulator_suspend,
5649 .resume = regulator_resume,
5650};
5651#endif
5652
5653struct class regulator_class = {
5654 .name = "regulator",
5655 .dev_release = regulator_dev_release,
5656 .dev_groups = regulator_dev_groups,
5657#ifdef CONFIG_PM
5658 .pm = ®ulator_pm_ops,
5659#endif
5660};
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672void regulator_has_full_constraints(void)
5673{
5674 has_full_constraints = 1;
5675}
5676EXPORT_SYMBOL_GPL(regulator_has_full_constraints);
5677
5678
5679
5680
5681
5682
5683
5684
5685void *rdev_get_drvdata(struct regulator_dev *rdev)
5686{
5687 return rdev->reg_data;
5688}
5689EXPORT_SYMBOL_GPL(rdev_get_drvdata);
5690
5691
5692
5693
5694
5695
5696
5697
5698void *regulator_get_drvdata(struct regulator *regulator)
5699{
5700 return regulator->rdev->reg_data;
5701}
5702EXPORT_SYMBOL_GPL(regulator_get_drvdata);
5703
5704
5705
5706
5707
5708
5709void regulator_set_drvdata(struct regulator *regulator, void *data)
5710{
5711 regulator->rdev->reg_data = data;
5712}
5713EXPORT_SYMBOL_GPL(regulator_set_drvdata);
5714
5715
5716
5717
5718
5719int rdev_get_id(struct regulator_dev *rdev)
5720{
5721 return rdev->desc->id;
5722}
5723EXPORT_SYMBOL_GPL(rdev_get_id);
5724
5725struct device *rdev_get_dev(struct regulator_dev *rdev)
5726{
5727 return &rdev->dev;
5728}
5729EXPORT_SYMBOL_GPL(rdev_get_dev);
5730
5731struct regmap *rdev_get_regmap(struct regulator_dev *rdev)
5732{
5733 return rdev->regmap;
5734}
5735EXPORT_SYMBOL_GPL(rdev_get_regmap);
5736
5737void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data)
5738{
5739 return reg_init_data->driver_data;
5740}
5741EXPORT_SYMBOL_GPL(regulator_get_init_drvdata);
5742
5743#ifdef CONFIG_DEBUG_FS
5744static int supply_map_show(struct seq_file *sf, void *data)
5745{
5746 struct regulator_map *map;
5747
5748 list_for_each_entry(map, ®ulator_map_list, list) {
5749 seq_printf(sf, "%s -> %s.%s\n",
5750 rdev_get_name(map->regulator), map->dev_name,
5751 map->supply);
5752 }
5753
5754 return 0;
5755}
5756DEFINE_SHOW_ATTRIBUTE(supply_map);
5757
5758struct summary_data {
5759 struct seq_file *s;
5760 struct regulator_dev *parent;
5761 int level;
5762};
5763
5764static void regulator_summary_show_subtree(struct seq_file *s,
5765 struct regulator_dev *rdev,
5766 int level);
5767
5768static int regulator_summary_show_children(struct device *dev, void *data)
5769{
5770 struct regulator_dev *rdev = dev_to_rdev(dev);
5771 struct summary_data *summary_data = data;
5772
5773 if (rdev->supply && rdev->supply->rdev == summary_data->parent)
5774 regulator_summary_show_subtree(summary_data->s, rdev,
5775 summary_data->level + 1);
5776
5777 return 0;
5778}
5779
5780static void regulator_summary_show_subtree(struct seq_file *s,
5781 struct regulator_dev *rdev,
5782 int level)
5783{
5784 struct regulation_constraints *c;
5785 struct regulator *consumer;
5786 struct summary_data summary_data;
5787 unsigned int opmode;
5788
5789 if (!rdev)
5790 return;
5791
5792 opmode = _regulator_get_mode_unlocked(rdev);
5793 seq_printf(s, "%*s%-*s %3d %4d %6d %7s ",
5794 level * 3 + 1, "",
5795 30 - level * 3, rdev_get_name(rdev),
5796 rdev->use_count, rdev->open_count, rdev->bypass_count,
5797 regulator_opmode_to_str(opmode));
5798
5799 seq_printf(s, "%5dmV ", regulator_get_voltage_rdev(rdev) / 1000);
5800 seq_printf(s, "%5dmA ",
5801 _regulator_get_current_limit_unlocked(rdev) / 1000);
5802
5803 c = rdev->constraints;
5804 if (c) {
5805 switch (rdev->desc->type) {
5806 case REGULATOR_VOLTAGE:
5807 seq_printf(s, "%5dmV %5dmV ",
5808 c->min_uV / 1000, c->max_uV / 1000);
5809 break;
5810 case REGULATOR_CURRENT:
5811 seq_printf(s, "%5dmA %5dmA ",
5812 c->min_uA / 1000, c->max_uA / 1000);
5813 break;
5814 }
5815 }
5816
5817 seq_puts(s, "\n");
5818
5819 list_for_each_entry(consumer, &rdev->consumer_list, list) {
5820 if (consumer->dev && consumer->dev->class == ®ulator_class)
5821 continue;
5822
5823 seq_printf(s, "%*s%-*s ",
5824 (level + 1) * 3 + 1, "",
5825 30 - (level + 1) * 3,
5826 consumer->supply_name ? consumer->supply_name :
5827 consumer->dev ? dev_name(consumer->dev) : "deviceless");
5828
5829 switch (rdev->desc->type) {
5830 case REGULATOR_VOLTAGE:
5831 seq_printf(s, "%3d %33dmA%c%5dmV %5dmV",
5832 consumer->enable_count,
5833 consumer->uA_load / 1000,
5834 consumer->uA_load && !consumer->enable_count ?
5835 '*' : ' ',
5836 consumer->voltage[PM_SUSPEND_ON].min_uV / 1000,
5837 consumer->voltage[PM_SUSPEND_ON].max_uV / 1000);
5838 break;
5839 case REGULATOR_CURRENT:
5840 break;
5841 }
5842
5843 seq_puts(s, "\n");
5844 }
5845
5846 summary_data.s = s;
5847 summary_data.level = level;
5848 summary_data.parent = rdev;
5849
5850 class_for_each_device(®ulator_class, NULL, &summary_data,
5851 regulator_summary_show_children);
5852}
5853
5854struct summary_lock_data {
5855 struct ww_acquire_ctx *ww_ctx;
5856 struct regulator_dev **new_contended_rdev;
5857 struct regulator_dev **old_contended_rdev;
5858};
5859
5860static int regulator_summary_lock_one(struct device *dev, void *data)
5861{
5862 struct regulator_dev *rdev = dev_to_rdev(dev);
5863 struct summary_lock_data *lock_data = data;
5864 int ret = 0;
5865
5866 if (rdev != *lock_data->old_contended_rdev) {
5867 ret = regulator_lock_nested(rdev, lock_data->ww_ctx);
5868
5869 if (ret == -EDEADLK)
5870 *lock_data->new_contended_rdev = rdev;
5871 else
5872 WARN_ON_ONCE(ret);
5873 } else {
5874 *lock_data->old_contended_rdev = NULL;
5875 }
5876
5877 return ret;
5878}
5879
5880static int regulator_summary_unlock_one(struct device *dev, void *data)
5881{
5882 struct regulator_dev *rdev = dev_to_rdev(dev);
5883 struct summary_lock_data *lock_data = data;
5884
5885 if (lock_data) {
5886 if (rdev == *lock_data->new_contended_rdev)
5887 return -EDEADLK;
5888 }
5889
5890 regulator_unlock(rdev);
5891
5892 return 0;
5893}
5894
5895static int regulator_summary_lock_all(struct ww_acquire_ctx *ww_ctx,
5896 struct regulator_dev **new_contended_rdev,
5897 struct regulator_dev **old_contended_rdev)
5898{
5899 struct summary_lock_data lock_data;
5900 int ret;
5901
5902 lock_data.ww_ctx = ww_ctx;
5903 lock_data.new_contended_rdev = new_contended_rdev;
5904 lock_data.old_contended_rdev = old_contended_rdev;
5905
5906 ret = class_for_each_device(®ulator_class, NULL, &lock_data,
5907 regulator_summary_lock_one);
5908 if (ret)
5909 class_for_each_device(®ulator_class, NULL, &lock_data,
5910 regulator_summary_unlock_one);
5911
5912 return ret;
5913}
5914
5915static void regulator_summary_lock(struct ww_acquire_ctx *ww_ctx)
5916{
5917 struct regulator_dev *new_contended_rdev = NULL;
5918 struct regulator_dev *old_contended_rdev = NULL;
5919 int err;
5920
5921 mutex_lock(®ulator_list_mutex);
5922
5923 ww_acquire_init(ww_ctx, ®ulator_ww_class);
5924
5925 do {
5926 if (new_contended_rdev) {
5927 ww_mutex_lock_slow(&new_contended_rdev->mutex, ww_ctx);
5928 old_contended_rdev = new_contended_rdev;
5929 old_contended_rdev->ref_cnt++;
5930 }
5931
5932 err = regulator_summary_lock_all(ww_ctx,
5933 &new_contended_rdev,
5934 &old_contended_rdev);
5935
5936 if (old_contended_rdev)
5937 regulator_unlock(old_contended_rdev);
5938
5939 } while (err == -EDEADLK);
5940
5941 ww_acquire_done(ww_ctx);
5942}
5943
5944static void regulator_summary_unlock(struct ww_acquire_ctx *ww_ctx)
5945{
5946 class_for_each_device(®ulator_class, NULL, NULL,
5947 regulator_summary_unlock_one);
5948 ww_acquire_fini(ww_ctx);
5949
5950 mutex_unlock(®ulator_list_mutex);
5951}
5952
5953static int regulator_summary_show_roots(struct device *dev, void *data)
5954{
5955 struct regulator_dev *rdev = dev_to_rdev(dev);
5956 struct seq_file *s = data;
5957
5958 if (!rdev->supply)
5959 regulator_summary_show_subtree(s, rdev, 0);
5960
5961 return 0;
5962}
5963
5964static int regulator_summary_show(struct seq_file *s, void *data)
5965{
5966 struct ww_acquire_ctx ww_ctx;
5967
5968 seq_puts(s, " regulator use open bypass opmode voltage current min max\n");
5969 seq_puts(s, "---------------------------------------------------------------------------------------\n");
5970
5971 regulator_summary_lock(&ww_ctx);
5972
5973 class_for_each_device(®ulator_class, NULL, s,
5974 regulator_summary_show_roots);
5975
5976 regulator_summary_unlock(&ww_ctx);
5977
5978 return 0;
5979}
5980DEFINE_SHOW_ATTRIBUTE(regulator_summary);
5981#endif
5982
5983static int __init regulator_init(void)
5984{
5985 int ret;
5986
5987 ret = class_register(®ulator_class);
5988
5989 debugfs_root = debugfs_create_dir("regulator", NULL);
5990 if (!debugfs_root)
5991 pr_warn("regulator: Failed to create debugfs directory\n");
5992
5993#ifdef CONFIG_DEBUG_FS
5994 debugfs_create_file("supply_map", 0444, debugfs_root, NULL,
5995 &supply_map_fops);
5996
5997 debugfs_create_file("regulator_summary", 0444, debugfs_root,
5998 NULL, ®ulator_summary_fops);
5999#endif
6000 regulator_dummy_init();
6001
6002 regulator_coupler_register(&generic_regulator_coupler);
6003
6004 return ret;
6005}
6006
6007
6008core_initcall(regulator_init);
6009
6010static int regulator_late_cleanup(struct device *dev, void *data)
6011{
6012 struct regulator_dev *rdev = dev_to_rdev(dev);
6013 const struct regulator_ops *ops = rdev->desc->ops;
6014 struct regulation_constraints *c = rdev->constraints;
6015 int enabled, ret;
6016
6017 if (c && c->always_on)
6018 return 0;
6019
6020 if (!regulator_ops_is_valid(rdev, REGULATOR_CHANGE_STATUS))
6021 return 0;
6022
6023 regulator_lock(rdev);
6024
6025 if (rdev->use_count)
6026 goto unlock;
6027
6028
6029 if (ops->is_enabled)
6030 enabled = ops->is_enabled(rdev);
6031 else
6032 enabled = 1;
6033
6034
6035 if (enabled <= 0)
6036 goto unlock;
6037
6038 if (have_full_constraints()) {
6039
6040
6041
6042 rdev_info(rdev, "disabling\n");
6043 ret = _regulator_do_disable(rdev);
6044 if (ret != 0)
6045 rdev_err(rdev, "couldn't disable: %pe\n", ERR_PTR(ret));
6046 } else {
6047
6048
6049
6050
6051
6052 rdev_warn(rdev, "incomplete constraints, leaving on\n");
6053 }
6054
6055unlock:
6056 regulator_unlock(rdev);
6057
6058 return 0;
6059}
6060
6061static void regulator_init_complete_work_function(struct work_struct *work)
6062{
6063
6064
6065
6066
6067
6068
6069
6070 class_for_each_device(®ulator_class, NULL, NULL,
6071 regulator_register_resolve_supply);
6072
6073
6074
6075
6076
6077
6078 class_for_each_device(®ulator_class, NULL, NULL,
6079 regulator_late_cleanup);
6080}
6081
6082static DECLARE_DELAYED_WORK(regulator_init_complete_work,
6083 regulator_init_complete_work_function);
6084
6085static int __init regulator_init_complete(void)
6086{
6087
6088
6089
6090
6091
6092
6093 if (of_have_populated_dt())
6094 has_full_constraints = true;
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107 schedule_delayed_work(®ulator_init_complete_work,
6108 msecs_to_jiffies(30000));
6109
6110 return 0;
6111}
6112late_initcall_sync(regulator_init_complete);
6113