-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
regulator: Provide optional dummy regulator for consumers
In order to ease transitions with drivers are boards start using regulators provide an option to cause all regulator_get() calls to succeed, with a dummy always on regulator being supplied where one has not been configured. A warning is printed whenever the dummy regulator is used to aid system development. This regulator does not implement any regulator operations but will allow simple consumers which only do enable() and disable() calls to run. It is kept separate from the fixed voltage regulator to avoid Kconfig confusion on the part of users when it is extended to allow boards to explicitly use the dummy regulator to simplify cases where the majority of supplies are from fixed regulators without software control. This option is currently only effective for systems which do not specify full constriants. If required an override could also be provided to allow these systems to use the dummy regulator, though it is likely that unconfigured supplies on such systems will lead to error due to regulators being powered down more aggressively when not in use. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
- Loading branch information
Mark Brown
authored and
Liam Girdwood
committed
Mar 3, 2010
1 parent
9a7f6a4
commit 34abbd6
Showing
5 changed files
with
135 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
/* | ||
* dummy.c | ||
* | ||
* Copyright 2010 Wolfson Microelectronics PLC. | ||
* | ||
* Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License as | ||
* published by the Free Software Foundation; either version 2 of the | ||
* License, or (at your option) any later version. | ||
* | ||
* This is useful for systems with mixed controllable and | ||
* non-controllable regulators, as well as for allowing testing on | ||
* systems with no controllable regulators. | ||
*/ | ||
|
||
#include <linux/err.h> | ||
#include <linux/platform_device.h> | ||
#include <linux/regulator/driver.h> | ||
#include <linux/regulator/machine.h> | ||
|
||
#include "dummy.h" | ||
|
||
struct regulator_dev *dummy_regulator_rdev; | ||
|
||
static struct regulator_init_data dummy_initdata; | ||
|
||
static struct regulator_ops dummy_ops; | ||
|
||
static struct regulator_desc dummy_desc = { | ||
.name = "dummy", | ||
.id = -1, | ||
.type = REGULATOR_VOLTAGE, | ||
.owner = THIS_MODULE, | ||
.ops = &dummy_ops, | ||
}; | ||
|
||
static struct platform_device *dummy_pdev; | ||
|
||
void __init regulator_dummy_init(void) | ||
{ | ||
int ret; | ||
|
||
dummy_pdev = platform_device_alloc("reg-dummy", -1); | ||
if (!dummy_pdev) { | ||
pr_err("Failed to allocate dummy regulator device\n"); | ||
return; | ||
} | ||
|
||
ret = platform_device_add(dummy_pdev); | ||
if (ret != 0) { | ||
pr_err("Failed to register dummy regulator device: %d\n", ret); | ||
platform_device_put(dummy_pdev); | ||
return; | ||
} | ||
|
||
dummy_regulator_rdev = regulator_register(&dummy_desc, NULL, | ||
&dummy_initdata, NULL); | ||
if (IS_ERR(dummy_regulator_rdev)) { | ||
ret = PTR_ERR(dummy_regulator_rdev); | ||
pr_err("Failed to register regulator: %d\n", ret); | ||
platform_device_unregister(dummy_pdev); | ||
return; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
/* | ||
* dummy.h | ||
* | ||
* Copyright 2010 Wolfson Microelectronics PLC. | ||
* | ||
* Author: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
* | ||
* This program is free software; you can redistribute it and/or | ||
* modify it under the terms of the GNU General Public License as | ||
* published by the Free Software Foundation; either version 2 of the | ||
* License, or (at your option) any later version. | ||
* | ||
* This is useful for systems with mixed controllable and | ||
* non-controllable regulators, as well as for allowing testing on | ||
* systems with no controllable regulators. | ||
*/ | ||
|
||
#ifndef _DUMMY_H | ||
#define _DUMMY_H | ||
|
||
struct regulator_dev; | ||
|
||
extern struct regulator_dev *dummy_regulator_rdev; | ||
|
||
#ifdef CONFIG_REGULATOR_DUMMY | ||
void __init regulator_dummy_init(void); | ||
#else | ||
static inline void regulator_dummy_init(void) { } | ||
#endif | ||
|
||
#endif |