mirror of
https://github.com/LineageOS/android_kernel_samsung_msm8226.git
synced 2026-10-08 00:01:05 +02:00
Merge changes I124a4ba1,Idf7c4e53,I09411d46,I4f270a41,Icd7e6002,I56a14e86,Id91ac5e6,Ia1abd831 into msm-3.0
* changes: regulator: map consumer regulator based on device tree regulator: pass additional of_node to regulator_register() regulator: adapt fixed regulator driver to dt regulator: helper routine to extract regulator_init_data regulator: Constify constraints name regulator: Properly register dummy regulator driver dt: add empty dt helpers for non-dt build copper: regulator-stub: Add devices for Krait Power Control
This commit is contained in:
committed by
QuIC Gerrit Code Review
commit
fcda1ca507
@@ -0,0 +1,29 @@
|
||||
Fixed Voltage regulators
|
||||
|
||||
Required properties:
|
||||
- compatible: Must be "regulator-fixed";
|
||||
|
||||
Optional properties:
|
||||
- gpio: gpio to use for enable control
|
||||
- startup-delay-us: startup time in microseconds
|
||||
- enable-active-high: Polarity of GPIO is Active high
|
||||
If this property is missing, the default assumed is Active low.
|
||||
|
||||
Any property defined as part of the core regulator
|
||||
binding, defined in regulator.txt, can also be used.
|
||||
However a fixed voltage regulator is expected to have the
|
||||
regulator-min-microvolt and regulator-max-microvolt
|
||||
to be the same.
|
||||
|
||||
Example:
|
||||
|
||||
abc: fixedregulator@0 {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "fixed-supply";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
gpio = <&gpio1 16 0>;
|
||||
startup-delay-us = <70000>;
|
||||
enable-active-high;
|
||||
regulator-boot-on
|
||||
};
|
||||
@@ -0,0 +1,54 @@
|
||||
Voltage/Current Regulators
|
||||
|
||||
Optional properties:
|
||||
- regulator-name: A string used as a descriptive name for regulator outputs
|
||||
- regulator-min-microvolt: smallest voltage consumers may set
|
||||
- regulator-max-microvolt: largest voltage consumers may set
|
||||
- regulator-microvolt-offset: Offset applied to voltages to compensate for voltage drops
|
||||
- regulator-min-microamp: smallest current consumers may set
|
||||
- regulator-max-microamp: largest current consumers may set
|
||||
- regulator-always-on: boolean, regulator should never be disabled
|
||||
- regulator-boot-on: bootloader/firmware enabled regulator
|
||||
- <name>-supply: phandle to the parent supply/regulator node
|
||||
|
||||
Example:
|
||||
|
||||
xyzreg: regulator@0 {
|
||||
regulator-min-microvolt = <1000000>;
|
||||
regulator-max-microvolt = <2500000>;
|
||||
regulator-always-on;
|
||||
vin-supply = <&vin>;
|
||||
};
|
||||
|
||||
Regulator Consumers:
|
||||
Consumer nodes can reference one or more of its supplies/
|
||||
regulators using the below bindings.
|
||||
|
||||
- <name>-supply: phandle to the regulator node
|
||||
|
||||
These are the same bindings that a regulator in the above
|
||||
example used to reference its own supply, in which case
|
||||
its just seen as a special case of a regulator being a
|
||||
consumer itself.
|
||||
|
||||
Example of a consumer device node (mmc) referencing two
|
||||
regulators (twl-reg1 and twl-reg2),
|
||||
|
||||
twl-reg1: regulator@0 {
|
||||
...
|
||||
...
|
||||
...
|
||||
};
|
||||
|
||||
twl-reg2: regulator@1 {
|
||||
...
|
||||
...
|
||||
...
|
||||
};
|
||||
|
||||
mmc: mmc@0x0 {
|
||||
...
|
||||
...
|
||||
vmmc-supply = <&twl-reg1>;
|
||||
vmmcaux-supply = <&twl-reg2>;
|
||||
};
|
||||
@@ -138,6 +138,18 @@ VREG_CONSUMERS(LVS2) = {
|
||||
VREG_CONSUMERS(LVS3) = {
|
||||
REGULATOR_SUPPLY("8941_lvs3", NULL),
|
||||
};
|
||||
VREG_CONSUMERS(K0) = {
|
||||
REGULATOR_SUPPLY("krait0", NULL),
|
||||
};
|
||||
VREG_CONSUMERS(K1) = {
|
||||
REGULATOR_SUPPLY("krait1", NULL),
|
||||
};
|
||||
VREG_CONSUMERS(K2) = {
|
||||
REGULATOR_SUPPLY("krait2", NULL),
|
||||
};
|
||||
VREG_CONSUMERS(K3) = {
|
||||
REGULATOR_SUPPLY("krait3", NULL),
|
||||
};
|
||||
|
||||
#define PM8X41_VREG_INIT(_id, _name, _min_uV, _max_uV, _modes, _ops, \
|
||||
_always_on, _supply_regulator, _hpm_min, _system_uA) \
|
||||
@@ -189,6 +201,14 @@ VREG_CONSUMERS(LVS3) = {
|
||||
PM8X41_VREG_INIT(_id, _name, 0, 0, 0, REGULATOR_CHANGE_STATUS, \
|
||||
_always_on, _supply_regulator, 0, 0)
|
||||
|
||||
#define KRAIT_PWR(_id, _name, _always_on, _min_uV, _max_uV, \
|
||||
_supply_regulator, _hpm_min, _system_uA) \
|
||||
PM8X41_VREG_INIT(_id, _name, _min_uV, _max_uV, REGULATOR_MODE_NORMAL \
|
||||
| REGULATOR_MODE_IDLE, REGULATOR_CHANGE_VOLTAGE | \
|
||||
REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_MODE | \
|
||||
REGULATOR_CHANGE_DRMS, _always_on, \
|
||||
_supply_regulator, _hpm_min, _system_uA)
|
||||
|
||||
/* PM8x41 regulator constraints */
|
||||
|
||||
/* ID name a_on min_uV max_uV supply hpm_min sys_uA */
|
||||
@@ -233,6 +253,12 @@ PM8X41_VS(LVS1, "8941_lvs1", 0, "8941_s3");
|
||||
PM8X41_VS(LVS2, "8941_lvs2", 0, "8941_s3");
|
||||
PM8X41_VS(LVS3, "8941_lvs3", 0, "8941_s3");
|
||||
|
||||
/* ID name a_on min_uV max_uV supply hpm_min sys_uA */
|
||||
KRAIT_PWR(K0, "krait0", 0, 850000, 1100000, NULL, 100000, 0);
|
||||
KRAIT_PWR(K1, "krait1", 0, 850000, 1100000, NULL, 100000, 0);
|
||||
KRAIT_PWR(K2, "krait2", 0, 850000, 1100000, NULL, 100000, 0);
|
||||
KRAIT_PWR(K3, "krait3", 0, 850000, 1100000, NULL, 100000, 0);
|
||||
|
||||
#define VREG_DEVICE(_name, _devid) \
|
||||
vreg_device_##_name __devinitdata = \
|
||||
{ \
|
||||
@@ -279,6 +305,10 @@ static struct platform_device VREG_DEVICE(L24, 35);
|
||||
static struct platform_device VREG_DEVICE(LVS1, 36);
|
||||
static struct platform_device VREG_DEVICE(LVS2, 37);
|
||||
static struct platform_device VREG_DEVICE(LVS3, 38);
|
||||
static struct platform_device VREG_DEVICE(K0, 39);
|
||||
static struct platform_device VREG_DEVICE(K1, 40);
|
||||
static struct platform_device VREG_DEVICE(K2, 41);
|
||||
static struct platform_device VREG_DEVICE(K3, 42);
|
||||
|
||||
struct platform_device *msm_copper_stub_regulator_devices[] __devinitdata = {
|
||||
&vreg_device_S1B,
|
||||
@@ -319,6 +349,10 @@ struct platform_device *msm_copper_stub_regulator_devices[] __devinitdata = {
|
||||
&vreg_device_LVS1,
|
||||
&vreg_device_LVS2,
|
||||
&vreg_device_LVS3,
|
||||
&vreg_device_K0,
|
||||
&vreg_device_K1,
|
||||
&vreg_device_K2,
|
||||
&vreg_device_K3,
|
||||
};
|
||||
|
||||
int msm_copper_stub_regulator_devices_len __devinitdata =
|
||||
|
||||
@@ -653,7 +653,8 @@ static int footswitch_probe(struct platform_device *pdev)
|
||||
regval &= ~RETENTION_BIT;
|
||||
writel_relaxed(regval, fs->gfs_ctl_reg);
|
||||
|
||||
fs->rdev = regulator_register(&fs->desc, &pdev->dev, init_data, fs);
|
||||
fs->rdev = regulator_register(&fs->desc, &pdev->dev,
|
||||
init_data, fs, NULL);
|
||||
if (IS_ERR(footswitches[pdev->id].rdev)) {
|
||||
pr_err("regulator_register(\"%s\") failed\n",
|
||||
fs->desc.name);
|
||||
|
||||
@@ -266,7 +266,8 @@ static int footswitch_probe(struct platform_device *pdev)
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
fs->rdev = regulator_register(&fs->desc, &pdev->dev, init_data, fs);
|
||||
fs->rdev = regulator_register(&fs->desc, &pdev->dev,
|
||||
init_data, fs, NULL);
|
||||
if (IS_ERR(fs->rdev)) {
|
||||
pr_err("regulator_register(%s) failed\n", fs->desc.name);
|
||||
rc = PTR_ERR(fs->rdev);
|
||||
|
||||
@@ -196,7 +196,7 @@ static struct regulator_ops proccomm_regulator_ops = {
|
||||
static struct regulator_dev *__devinit create_proccomm_rdev(
|
||||
struct proccomm_regulator_info *info, struct device *parent)
|
||||
{
|
||||
char *name;
|
||||
const char *name;
|
||||
struct proccomm_regulator_drvdata *d;
|
||||
struct regulator_dev *rdev;
|
||||
int rc = 0;
|
||||
@@ -247,7 +247,7 @@ static struct regulator_dev *__devinit create_proccomm_rdev(
|
||||
d->negative = info->negative;
|
||||
d->rdesc.n_voltages = info->n_voltages;
|
||||
|
||||
rdev = regulator_register(&d->rdesc, parent, &info->init_data, d);
|
||||
rdev = regulator_register(&d->rdesc, parent, &info->init_data, d, NULL);
|
||||
|
||||
if (IS_ERR(rdev)) {
|
||||
rc = PTR_ERR(rdev);
|
||||
|
||||
@@ -1330,7 +1330,7 @@ rpm_vreg_init_regulator(const struct rpm_regulator_init_data *pdata,
|
||||
if (rc)
|
||||
goto bail;
|
||||
|
||||
rdev = regulator_register(rdesc, dev, &(pdata->init_data), vreg);
|
||||
rdev = regulator_register(rdesc, dev, &(pdata->init_data), vreg, NULL);
|
||||
if (IS_ERR(rdev)) {
|
||||
rc = PTR_ERR(rdev);
|
||||
pr_err("regulator_register failed: %s, rc=%d\n",
|
||||
|
||||
@@ -174,8 +174,8 @@ static int __devinit saw_probe(struct platform_device *pdev)
|
||||
vreg->desc.owner = THIS_MODULE;
|
||||
vreg->uV = MIN_CORE_VOLTAGE;
|
||||
|
||||
vreg->rdev = regulator_register(&vreg->desc, &pdev->dev, init_data,
|
||||
vreg);
|
||||
vreg->rdev = regulator_register(&vreg->desc, &pdev->dev,
|
||||
init_data, vreg, NULL);
|
||||
if (IS_ERR(vreg->rdev)) {
|
||||
rc = PTR_ERR(vreg->rdev);
|
||||
pr_err("regulator_register failed, rc=%d.\n", rc);
|
||||
|
||||
@@ -284,7 +284,7 @@ static struct pm8xxx_vreg regulator_data[] = {
|
||||
#define MAX_NAME_COMPARISON_LEN 32
|
||||
|
||||
static int __devinit match_regulator(
|
||||
struct pm8xxx_regulator_core_platform_data *core_data, char *name)
|
||||
struct pm8xxx_regulator_core_platform_data *core_data, const char *name)
|
||||
{
|
||||
int found = 0;
|
||||
int i;
|
||||
|
||||
@@ -326,7 +326,7 @@ static struct pm8xxx_vreg regulator_data[] = {
|
||||
#define MAX_NAME_COMPARISON_LEN 32
|
||||
|
||||
static int __devinit match_regulator(
|
||||
struct pm8xxx_regulator_core_platform_data *core_data, char *name)
|
||||
struct pm8xxx_regulator_core_platform_data *core_data, const char *name)
|
||||
{
|
||||
int found = 0;
|
||||
int i;
|
||||
|
||||
@@ -448,7 +448,7 @@ static struct pm8xxx_vreg pm8917_regulator_data[] = {
|
||||
#define MAX_NAME_COMPARISON_LEN 32
|
||||
|
||||
static int __devinit match_regulator(enum pm8xxx_version version,
|
||||
struct pm8xxx_regulator_core_platform_data *core_data, char *name)
|
||||
struct pm8xxx_regulator_core_platform_data *core_data, const char *name)
|
||||
{
|
||||
int found = 0;
|
||||
int i;
|
||||
|
||||
@@ -426,7 +426,7 @@ static int __devinit pm8607_regulator_probe(struct platform_device *pdev)
|
||||
|
||||
/* replace driver_data with info */
|
||||
info->regulator = regulator_register(&info->desc, &pdev->dev,
|
||||
pdata, info);
|
||||
pdata, info, NULL);
|
||||
if (IS_ERR(info->regulator)) {
|
||||
dev_err(&pdev->dev, "failed to register regulator %s\n",
|
||||
info->desc.name);
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
|
||||
obj-$(CONFIG_REGULATOR) += core.o dummy.o
|
||||
obj-$(CONFIG_OF) += of_regulator.o
|
||||
obj-$(CONFIG_REGULATOR_FIXED_VOLTAGE) += fixed.o
|
||||
obj-$(CONFIG_REGULATOR_VIRTUAL_CONSUMER) += virtual.o
|
||||
obj-$(CONFIG_REGULATOR_USERSPACE_CONSUMER) += userspace-consumer.o
|
||||
|
||||
@@ -634,7 +634,7 @@ static int __devinit ab3100_regulators_probe(struct platform_device *pdev)
|
||||
rdev = regulator_register(&ab3100_regulator_desc[i],
|
||||
&pdev->dev,
|
||||
&plfdata->reg_constraints[i],
|
||||
reg);
|
||||
reg, NULL);
|
||||
|
||||
if (IS_ERR(rdev)) {
|
||||
err = PTR_ERR(rdev);
|
||||
|
||||
@@ -821,7 +821,7 @@ static __devinit int ab8500_regulator_probe(struct platform_device *pdev)
|
||||
|
||||
/* register regulator with framework */
|
||||
info->regulator = regulator_register(&info->desc, &pdev->dev,
|
||||
&pdata->regulator[i], info);
|
||||
&pdata->regulator[i], info, NULL);
|
||||
if (IS_ERR(info->regulator)) {
|
||||
err = PTR_ERR(info->regulator);
|
||||
dev_err(&pdev->dev, "failed to register regulator %s\n",
|
||||
|
||||
@@ -233,7 +233,7 @@ static int __devinit ad5398_probe(struct i2c_client *client,
|
||||
chip->current_mask = (chip->current_level - 1) << chip->current_offset;
|
||||
|
||||
chip->rdev = regulator_register(&ad5398_reg, &client->dev,
|
||||
init_data, chip);
|
||||
init_data, chip, NULL);
|
||||
if (IS_ERR(chip->rdev)) {
|
||||
ret = PTR_ERR(chip->rdev);
|
||||
dev_err(&client->dev, "failed to register %s %s\n",
|
||||
|
||||
@@ -106,7 +106,7 @@ static int __init bq24022_probe(struct platform_device *pdev)
|
||||
ret = gpio_direction_output(pdata->gpio_nce, 1);
|
||||
|
||||
bq24022 = regulator_register(&bq24022_desc, &pdev->dev,
|
||||
pdata->init_data, pdata);
|
||||
pdata->init_data, pdata, NULL);
|
||||
if (IS_ERR(bq24022)) {
|
||||
dev_dbg(&pdev->dev, "couldn't register regulator\n");
|
||||
ret = PTR_ERR(bq24022);
|
||||
|
||||
+69
-13
@@ -27,6 +27,8 @@
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/regulator/of_regulator.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/regulator/driver.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
@@ -128,6 +130,33 @@ static struct regulator *get_device_regulator(struct device *dev)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* of_get_regulator - get a regulator device node based on supply name
|
||||
* @dev: Device pointer for the consumer (of regulator) device
|
||||
* @supply: regulator supply name
|
||||
*
|
||||
* Extract the regulator device node corresponding to the supply name.
|
||||
* retruns the device node corresponding to the regulator if found, else
|
||||
* returns NULL.
|
||||
*/
|
||||
static struct device_node *of_get_regulator(struct device *dev, const char *supply)
|
||||
{
|
||||
struct device_node *regnode = NULL;
|
||||
char prop_name[32]; /* 32 is max size of property name */
|
||||
|
||||
dev_dbg(dev, "Looking up %s-supply from device tree\n", supply);
|
||||
|
||||
snprintf(prop_name, 32, "%s-supply", supply);
|
||||
regnode = of_parse_phandle(dev->of_node, prop_name, 0);
|
||||
|
||||
if (!regnode) {
|
||||
dev_warn(dev, "%s property in node %s references invalid phandle",
|
||||
prop_name, dev->of_node->full_name);
|
||||
return NULL;
|
||||
}
|
||||
return regnode;
|
||||
}
|
||||
|
||||
/* Platform voltage constraint check */
|
||||
static int regulator_check_voltage(struct regulator_dev *rdev,
|
||||
int *min_uV, int *max_uV)
|
||||
@@ -1208,6 +1237,30 @@ static int _regulator_get_enable_time(struct regulator_dev *rdev)
|
||||
return rdev->desc->ops->enable_time(rdev);
|
||||
}
|
||||
|
||||
static struct regulator_dev *regulator_dev_lookup(struct device *dev,
|
||||
const char *supply)
|
||||
{
|
||||
struct regulator_dev *r;
|
||||
struct device_node *node;
|
||||
|
||||
/* first do a dt based lookup */
|
||||
if (dev && dev->of_node) {
|
||||
node = of_get_regulator(dev, supply);
|
||||
if (node)
|
||||
list_for_each_entry(r, ®ulator_list, list)
|
||||
if (r->dev.parent &&
|
||||
node == r->dev.of_node)
|
||||
return r;
|
||||
}
|
||||
|
||||
/* if not found, try doing it non-dt way */
|
||||
list_for_each_entry(r, ®ulator_list, list)
|
||||
if (strcmp(rdev_get_name(r), supply) == 0)
|
||||
return r;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Internal regulator request function */
|
||||
static struct regulator *_regulator_get(struct device *dev, const char *id,
|
||||
int exclusive)
|
||||
@@ -1228,6 +1281,10 @@ static struct regulator *_regulator_get(struct device *dev, const char *id,
|
||||
|
||||
mutex_lock(®ulator_list_mutex);
|
||||
|
||||
rdev = regulator_dev_lookup(dev, id);
|
||||
if (rdev)
|
||||
goto found;
|
||||
|
||||
list_for_each_entry(map, ®ulator_map_list, list) {
|
||||
/* If the mapping has a device set up it must match */
|
||||
if (map->dev_name &&
|
||||
@@ -3080,11 +3137,12 @@ static inline void rdev_init_debugfs(struct regulator_dev *rdev)
|
||||
*/
|
||||
struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc,
|
||||
struct device *dev, const struct regulator_init_data *init_data,
|
||||
void *driver_data)
|
||||
void *driver_data, struct device_node *of_node)
|
||||
{
|
||||
static atomic_t regulator_no = ATOMIC_INIT(0);
|
||||
struct regulator_dev *rdev;
|
||||
int ret, i;
|
||||
const char *supply = NULL;
|
||||
|
||||
if (regulator_desc == NULL)
|
||||
return ERR_PTR(-EINVAL);
|
||||
@@ -3140,6 +3198,7 @@ struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc,
|
||||
|
||||
/* register with sysfs */
|
||||
rdev->dev.class = ®ulator_class;
|
||||
rdev->dev.of_node = of_node;
|
||||
rdev->dev.parent = dev;
|
||||
dev_set_name(&rdev->dev, "regulator.%d",
|
||||
atomic_inc_return(®ulator_no) - 1);
|
||||
@@ -3161,21 +3220,18 @@ struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc,
|
||||
if (ret < 0)
|
||||
goto scrub;
|
||||
|
||||
if (init_data->supply_regulator) {
|
||||
if (init_data->supply_regulator)
|
||||
supply = init_data->supply_regulator;
|
||||
else if (regulator_desc->supply_name)
|
||||
supply = regulator_desc->supply_name;
|
||||
|
||||
if (supply) {
|
||||
struct regulator_dev *r;
|
||||
int found = 0;
|
||||
|
||||
list_for_each_entry(r, ®ulator_list, list) {
|
||||
if (strcmp(rdev_get_name(r),
|
||||
init_data->supply_regulator) == 0) {
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
r = regulator_dev_lookup(dev, supply);
|
||||
|
||||
if (!found) {
|
||||
dev_err(dev, "Failed to find supply %s\n",
|
||||
init_data->supply_regulator);
|
||||
if (!r) {
|
||||
dev_err(dev, "Failed to find supply %s\n", supply);
|
||||
ret = -ENODEV;
|
||||
goto scrub;
|
||||
}
|
||||
|
||||
@@ -536,7 +536,7 @@ static int __devinit da903x_regulator_probe(struct platform_device *pdev)
|
||||
ri->desc.ops = &da9030_regulator_ldo1_15_ops;
|
||||
|
||||
rdev = regulator_register(&ri->desc, &pdev->dev,
|
||||
pdev->dev.platform_data, ri);
|
||||
pdev->dev.platform_data, ri, NULL);
|
||||
if (IS_ERR(rdev)) {
|
||||
dev_err(&pdev->dev, "failed to register regulator %s\n",
|
||||
ri->desc.name);
|
||||
|
||||
@@ -485,7 +485,7 @@ static int __devinit db8500_regulator_probe(struct platform_device *pdev)
|
||||
|
||||
/* register with the regulator framework */
|
||||
info->rdev = regulator_register(&info->desc, &pdev->dev,
|
||||
init_data, info);
|
||||
init_data, info, NULL);
|
||||
if (IS_ERR(info->rdev)) {
|
||||
err = PTR_ERR(info->rdev);
|
||||
dev_err(&pdev->dev, "failed to register %s: err %i\n",
|
||||
|
||||
@@ -36,6 +36,29 @@ static struct regulator_desc dummy_desc = {
|
||||
.ops = &dummy_ops,
|
||||
};
|
||||
|
||||
static int __devinit dummy_regulator_probe(struct platform_device *pdev)
|
||||
{
|
||||
int ret;
|
||||
|
||||
dummy_regulator_rdev = regulator_register(&dummy_desc, NULL,
|
||||
&dummy_initdata, NULL, NULL);
|
||||
if (IS_ERR(dummy_regulator_rdev)) {
|
||||
ret = PTR_ERR(dummy_regulator_rdev);
|
||||
pr_err("Failed to register regulator: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver dummy_regulator_driver = {
|
||||
.probe = dummy_regulator_probe,
|
||||
.driver = {
|
||||
.name = "reg-dummy",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device *dummy_pdev;
|
||||
|
||||
void __init regulator_dummy_init(void)
|
||||
@@ -55,12 +78,9 @@ void __init regulator_dummy_init(void)
|
||||
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);
|
||||
ret = platform_driver_register(&dummy_regulator_driver);
|
||||
if (ret != 0) {
|
||||
pr_err("Failed to register dummy regulator driver: %d\n", ret);
|
||||
platform_device_unregister(dummy_pdev);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,10 @@
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/regulator/of_regulator.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
|
||||
struct fixed_voltage_data {
|
||||
struct regulator_desc desc;
|
||||
@@ -37,6 +41,53 @@ struct fixed_voltage_data {
|
||||
bool is_enabled;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* of_get_fixed_voltage_config - extract fixed_voltage_config structure info
|
||||
* @dev: device requesting for fixed_voltage_config
|
||||
*
|
||||
* Populates fixed_voltage_config structure by extracting data from device
|
||||
* tree node, returns a pointer to the populated structure of NULL if memory
|
||||
* alloc fails.
|
||||
*/
|
||||
struct fixed_voltage_config *of_get_fixed_voltage_config(struct device *dev)
|
||||
{
|
||||
struct fixed_voltage_config *config;
|
||||
struct device_node *np = dev->of_node;
|
||||
const __be32 *delay;
|
||||
struct regulator_init_data *init_data;
|
||||
|
||||
config = devm_kzalloc(dev, sizeof(struct fixed_voltage_config),
|
||||
GFP_KERNEL);
|
||||
if (!config)
|
||||
return NULL;
|
||||
|
||||
config->init_data = of_get_regulator_init_data(dev);
|
||||
init_data = config->init_data;
|
||||
|
||||
config->supply_name = init_data->constraints.name;
|
||||
if (init_data->constraints.min_uV == init_data->constraints.max_uV) {
|
||||
config->microvolts = init_data->constraints.min_uV;
|
||||
} else {
|
||||
dev_err(dev,
|
||||
"Fixed regulator specified with variable voltages\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (init_data->constraints.boot_on)
|
||||
config->enabled_at_boot = true;
|
||||
|
||||
config->gpio = of_get_named_gpio(np, "gpio", 0);
|
||||
delay = of_get_property(np, "startup-delay-us", NULL);
|
||||
if (delay)
|
||||
config->startup_delay = be32_to_cpu(*delay);
|
||||
|
||||
if (of_find_property(np, "enable-active-high", NULL))
|
||||
config->enable_high = true;
|
||||
|
||||
return config;
|
||||
}
|
||||
|
||||
static int fixed_voltage_is_enabled(struct regulator_dev *dev)
|
||||
{
|
||||
struct fixed_voltage_data *data = rdev_get_drvdata(dev);
|
||||
@@ -108,6 +159,9 @@ static int __devinit reg_fixed_voltage_probe(struct platform_device *pdev)
|
||||
struct fixed_voltage_data *drvdata;
|
||||
int ret;
|
||||
|
||||
if (pdev->dev.of_node)
|
||||
config = of_get_fixed_voltage_config(&pdev->dev);
|
||||
|
||||
drvdata = kzalloc(sizeof(struct fixed_voltage_data), GFP_KERNEL);
|
||||
if (drvdata == NULL) {
|
||||
dev_err(&pdev->dev, "Failed to allocate device data\n");
|
||||
@@ -179,7 +233,7 @@ static int __devinit reg_fixed_voltage_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
drvdata->dev = regulator_register(&drvdata->desc, &pdev->dev,
|
||||
config->init_data, drvdata);
|
||||
config->init_data, drvdata, NULL);
|
||||
if (IS_ERR(drvdata->dev)) {
|
||||
ret = PTR_ERR(drvdata->dev);
|
||||
dev_err(&pdev->dev, "Failed to register regulator: %d\n", ret);
|
||||
@@ -216,12 +270,23 @@ static int __devexit reg_fixed_voltage_remove(struct platform_device *pdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_OF)
|
||||
static const struct of_device_id fixed_of_match[] __devinitconst = {
|
||||
{ .compatible = "regulator-fixed", },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, fixed_of_match);
|
||||
#else
|
||||
#define fixed_of_match NULL
|
||||
#endif
|
||||
|
||||
static struct platform_driver regulator_fixed_voltage_driver = {
|
||||
.probe = reg_fixed_voltage_probe,
|
||||
.remove = __devexit_p(reg_fixed_voltage_remove),
|
||||
.driver = {
|
||||
.name = "reg-fixed-voltage",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = fixed_of_match,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -152,7 +152,7 @@ static int __devinit gpio_vreg_probe(struct platform_device *pdev)
|
||||
vreg->desc.owner = THIS_MODULE;
|
||||
|
||||
vreg->rdev = regulator_register(&vreg->desc, &pdev->dev,
|
||||
&pdata->init_data, vreg);
|
||||
&pdata->init_data, vreg, NULL);
|
||||
if (IS_ERR(vreg->rdev)) {
|
||||
rc = PTR_ERR(vreg->rdev);
|
||||
pr_err("%s: regulator_register failed, rc=%d.\n", vreg->name,
|
||||
|
||||
@@ -170,7 +170,7 @@ static int __devinit isl6271a_probe(struct i2c_client *i2c,
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
pmic->rdev[i] = regulator_register(&isl_rd[i], &i2c->dev,
|
||||
init_data, pmic);
|
||||
init_data, pmic, NULL);
|
||||
if (IS_ERR(pmic->rdev[i])) {
|
||||
dev_err(&i2c->dev, "failed to register %s\n", id->name);
|
||||
err = PTR_ERR(pmic->rdev[i]);
|
||||
|
||||
@@ -450,7 +450,7 @@ static int __devinit setup_regulators(struct lp3971 *lp3971,
|
||||
for (i = 0; i < pdata->num_regulators; i++) {
|
||||
struct lp3971_regulator_subdev *reg = &pdata->regulators[i];
|
||||
lp3971->rdev[i] = regulator_register(®ulators[reg->id],
|
||||
lp3971->dev, reg->initdata, lp3971);
|
||||
lp3971->dev, reg->initdata, lp3971, NULL);
|
||||
|
||||
if (IS_ERR(lp3971->rdev[i])) {
|
||||
err = PTR_ERR(lp3971->rdev[i]);
|
||||
|
||||
@@ -554,7 +554,7 @@ static int __devinit setup_regulators(struct lp3972 *lp3972,
|
||||
for (i = 0; i < pdata->num_regulators; i++) {
|
||||
struct lp3972_regulator_subdev *reg = &pdata->regulators[i];
|
||||
lp3972->rdev[i] = regulator_register(®ulators[reg->id],
|
||||
lp3972->dev, reg->initdata, lp3972);
|
||||
lp3972->dev, reg->initdata, lp3972, NULL);
|
||||
|
||||
if (IS_ERR(lp3972->rdev[i])) {
|
||||
err = PTR_ERR(lp3972->rdev[i]);
|
||||
|
||||
@@ -214,7 +214,7 @@ static int __devinit max1586_pmic_probe(struct i2c_client *client,
|
||||
}
|
||||
rdev[i] = regulator_register(&max1586_reg[id], &client->dev,
|
||||
pdata->subdevs[i].platform_data,
|
||||
max1586);
|
||||
max1586, NULL);
|
||||
if (IS_ERR(rdev[i])) {
|
||||
ret = PTR_ERR(rdev[i]);
|
||||
dev_err(&client->dev, "failed to register %s\n",
|
||||
|
||||
@@ -347,7 +347,7 @@ static int __devinit max8649_regulator_probe(struct i2c_client *client,
|
||||
}
|
||||
|
||||
info->regulator = regulator_register(&dcdc_desc, &client->dev,
|
||||
pdata->regulator, info);
|
||||
pdata->regulator, info, NULL);
|
||||
if (IS_ERR(info->regulator)) {
|
||||
dev_err(info->dev, "failed to register regulator %s\n",
|
||||
dcdc_desc.name);
|
||||
|
||||
@@ -449,7 +449,7 @@ static int __devinit max8660_probe(struct i2c_client *client,
|
||||
|
||||
rdev[i] = regulator_register(&max8660_reg[id], &client->dev,
|
||||
pdata->subdevs[i].platform_data,
|
||||
max8660);
|
||||
max8660, NULL);
|
||||
if (IS_ERR(rdev[i])) {
|
||||
ret = PTR_ERR(rdev[i]);
|
||||
dev_err(&client->dev, "failed to register %s\n",
|
||||
|
||||
@@ -265,7 +265,7 @@ static int __devinit max8925_regulator_probe(struct platform_device *pdev)
|
||||
ri->chip = chip;
|
||||
|
||||
rdev = regulator_register(&ri->desc, &pdev->dev,
|
||||
pdata->regulator[pdev->id], ri);
|
||||
pdata->regulator[pdev->id], ri, NULL);
|
||||
if (IS_ERR(rdev)) {
|
||||
dev_err(&pdev->dev, "failed to register regulator %s\n",
|
||||
ri->desc.name);
|
||||
|
||||
@@ -211,7 +211,7 @@ static int __devinit max8952_pmic_probe(struct i2c_client *client,
|
||||
mutex_init(&max8952->mutex);
|
||||
|
||||
max8952->rdev = regulator_register(®ulator, max8952->dev,
|
||||
&pdata->reg_data, max8952);
|
||||
&pdata->reg_data, max8952, NULL);
|
||||
|
||||
if (IS_ERR(max8952->rdev)) {
|
||||
ret = PTR_ERR(max8952->rdev);
|
||||
|
||||
@@ -1145,7 +1145,7 @@ static __devinit int max8997_pmic_probe(struct platform_device *pdev)
|
||||
regulators[id].n_voltages = 16;
|
||||
|
||||
rdev[i] = regulator_register(®ulators[id], max8997->dev,
|
||||
pdata->regulators[i].initdata, max8997);
|
||||
pdata->regulators[i].initdata, max8997, NULL);
|
||||
if (IS_ERR(rdev[i])) {
|
||||
ret = PTR_ERR(rdev[i]);
|
||||
dev_err(max8997->dev, "regulator init failed for %d\n",
|
||||
|
||||
@@ -847,7 +847,7 @@ static __devinit int max8998_pmic_probe(struct platform_device *pdev)
|
||||
regulators[index].n_voltages = count;
|
||||
}
|
||||
rdev[i] = regulator_register(®ulators[index], max8998->dev,
|
||||
pdata->regulators[i].initdata, max8998);
|
||||
pdata->regulators[i].initdata, max8998, NULL);
|
||||
if (IS_ERR(rdev[i])) {
|
||||
ret = PTR_ERR(rdev[i]);
|
||||
dev_err(max8998->dev, "regulator init failed\n");
|
||||
|
||||
@@ -356,7 +356,7 @@ static int __devinit mc13783_regulator_probe(struct platform_device *pdev)
|
||||
init_data = &pdata->regulators[i];
|
||||
priv->regulators[i] = regulator_register(
|
||||
&mc13783_regulators[init_data->id].desc,
|
||||
&pdev->dev, init_data->init_data, priv);
|
||||
&pdev->dev, init_data->init_data, priv, NULL);
|
||||
|
||||
if (IS_ERR(priv->regulators[i])) {
|
||||
dev_err(&pdev->dev, "failed to register regulator %s\n",
|
||||
|
||||
@@ -572,7 +572,7 @@ static int __devinit mc13892_regulator_probe(struct platform_device *pdev)
|
||||
init_data = &pdata->regulators[i];
|
||||
priv->regulators[i] = regulator_register(
|
||||
&mc13892_regulators[init_data->id].desc,
|
||||
&pdev->dev, init_data->init_data, priv);
|
||||
&pdev->dev, init_data->init_data, priv, NULL);
|
||||
|
||||
if (IS_ERR(priv->regulators[i])) {
|
||||
dev_err(&pdev->dev, "failed to register regulator %s\n",
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* OF helpers for regulator framework
|
||||
*
|
||||
* Copyright (C) 2011 Texas Instruments, Inc.
|
||||
* Rajendra Nayak <rnayak@ti.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.
|
||||
*/
|
||||
|
||||
#include <linux/slab.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
|
||||
static void of_get_regulation_constraints(struct device_node *np,
|
||||
struct regulator_init_data **init_data)
|
||||
{
|
||||
const __be32 *min_uV, *max_uV, *uV_offset;
|
||||
const __be32 *min_uA, *max_uA;
|
||||
struct regulation_constraints *constraints = &(*init_data)->constraints;
|
||||
|
||||
constraints->name = of_get_property(np, "regulator-name", NULL);
|
||||
|
||||
min_uV = of_get_property(np, "regulator-min-microvolt", NULL);
|
||||
if (min_uV)
|
||||
constraints->min_uV = be32_to_cpu(*min_uV);
|
||||
max_uV = of_get_property(np, "regulator-max-microvolt", NULL);
|
||||
if (max_uV)
|
||||
constraints->max_uV = be32_to_cpu(*max_uV);
|
||||
|
||||
/* Voltage change possible? */
|
||||
if (constraints->min_uV != constraints->max_uV)
|
||||
constraints->valid_ops_mask |= REGULATOR_CHANGE_VOLTAGE;
|
||||
|
||||
uV_offset = of_get_property(np, "regulator-microvolt-offset", NULL);
|
||||
if (uV_offset)
|
||||
constraints->uV_offset = be32_to_cpu(*uV_offset);
|
||||
min_uA = of_get_property(np, "regulator-min-microamp", NULL);
|
||||
if (min_uA)
|
||||
constraints->min_uA = be32_to_cpu(*min_uA);
|
||||
max_uA = of_get_property(np, "regulator-max-microamp", NULL);
|
||||
if (max_uA)
|
||||
constraints->max_uA = be32_to_cpu(*max_uA);
|
||||
|
||||
/* Current change possible? */
|
||||
if (constraints->min_uA != constraints->max_uA)
|
||||
constraints->valid_ops_mask |= REGULATOR_CHANGE_CURRENT;
|
||||
|
||||
if (of_find_property(np, "regulator-boot-on", NULL))
|
||||
constraints->boot_on = true;
|
||||
|
||||
if (of_find_property(np, "regulator-always-on", NULL))
|
||||
constraints->always_on = true;
|
||||
else /* status change should be possible if not always on. */
|
||||
constraints->valid_ops_mask |= REGULATOR_CHANGE_STATUS;
|
||||
}
|
||||
|
||||
/**
|
||||
* of_get_regulator_init_data - extract regulator_init_data structure info
|
||||
* @dev: device requesting for regulator_init_data
|
||||
*
|
||||
* Populates regulator_init_data structure by extracting data from device
|
||||
* tree node, returns a pointer to the populated struture or NULL if memory
|
||||
* alloc fails.
|
||||
*/
|
||||
struct regulator_init_data *of_get_regulator_init_data(struct device *dev)
|
||||
{
|
||||
struct regulator_init_data *init_data;
|
||||
|
||||
if (!dev->of_node)
|
||||
return NULL;
|
||||
|
||||
init_data = devm_kzalloc(dev, sizeof(*init_data), GFP_KERNEL);
|
||||
if (!init_data)
|
||||
return NULL; /* Out of memory? */
|
||||
|
||||
of_get_regulation_constraints(dev->of_node, &init_data);
|
||||
return init_data;
|
||||
}
|
||||
@@ -277,7 +277,7 @@ static int __devinit pcap_regulator_probe(struct platform_device *pdev)
|
||||
void *pcap = dev_get_drvdata(pdev->dev.parent);
|
||||
|
||||
rdev = regulator_register(&pcap_regulators[pdev->id], &pdev->dev,
|
||||
pdev->dev.platform_data, pcap);
|
||||
pdev->dev.platform_data, pcap, NULL);
|
||||
if (IS_ERR(rdev))
|
||||
return PTR_ERR(rdev);
|
||||
|
||||
|
||||
@@ -320,7 +320,7 @@ static int __devinit pcf50633_regulator_probe(struct platform_device *pdev)
|
||||
pcf = dev_to_pcf50633(pdev->dev.parent);
|
||||
|
||||
rdev = regulator_register(®ulators[pdev->id], &pdev->dev,
|
||||
pdev->dev.platform_data, pcf);
|
||||
pdev->dev.platform_data, pcf, NULL);
|
||||
if (IS_ERR(rdev))
|
||||
return PTR_ERR(rdev);
|
||||
|
||||
|
||||
@@ -162,7 +162,7 @@ static int __devinit pm8058_xo_buffer_probe(struct platform_device *pdev)
|
||||
goto bail;
|
||||
|
||||
xo->rdev = regulator_register(rdesc, &pdev->dev,
|
||||
&xo->pdata->init_data, xo);
|
||||
&xo->pdata->init_data, xo, NULL);
|
||||
if (IS_ERR(xo->rdev)) {
|
||||
rc = PTR_ERR(xo->rdev);
|
||||
pr_err("FAIL: regulator_register(%s): rc=%d\n",
|
||||
|
||||
@@ -3206,7 +3206,7 @@ static int __devinit pm8xxx_vreg_probe(struct platform_device *pdev)
|
||||
|
||||
if (!core_data->is_pin_controlled) {
|
||||
vreg->rdev = regulator_register(rdesc, &pdev->dev,
|
||||
&(pdata->init_data), vreg);
|
||||
&(pdata->init_data), vreg, NULL);
|
||||
if (IS_ERR(vreg->rdev)) {
|
||||
rc = PTR_ERR(vreg->rdev);
|
||||
vreg->rdev = NULL;
|
||||
@@ -3215,7 +3215,7 @@ static int __devinit pm8xxx_vreg_probe(struct platform_device *pdev)
|
||||
}
|
||||
} else {
|
||||
vreg->rdev_pc = regulator_register(rdesc, &pdev->dev,
|
||||
&(pdata->init_data), vreg);
|
||||
&(pdata->init_data), vreg, NULL);
|
||||
if (IS_ERR(vreg->rdev_pc)) {
|
||||
rc = PTR_ERR(vreg->rdev_pc);
|
||||
vreg->rdev_pc = NULL;
|
||||
|
||||
@@ -1692,7 +1692,7 @@ static int __devinit pm8058_vreg_probe(struct platform_device *pdev)
|
||||
&= ~(REGULATOR_MODE_NORMAL | REGULATOR_MODE_IDLE);
|
||||
|
||||
vreg->rdev = regulator_register(rdesc, &pdev->dev,
|
||||
&vreg->pdata->init_data, vreg);
|
||||
&vreg->pdata->init_data, vreg, NULL);
|
||||
if (IS_ERR(vreg->rdev)) {
|
||||
rc = PTR_ERR(vreg->rdev);
|
||||
pr_err("%s: regulator_register failed for %s, rc=%d\n",
|
||||
|
||||
@@ -954,7 +954,7 @@ static int __devinit pm8901_vreg_probe(struct platform_device *pdev)
|
||||
&= ~(REGULATOR_MODE_NORMAL | REGULATOR_MODE_IDLE);
|
||||
|
||||
vreg->rdev = regulator_register(rdesc, &pdev->dev,
|
||||
&vreg->pdata->init_data, vreg);
|
||||
&vreg->pdata->init_data, vreg, NULL);
|
||||
if (IS_ERR(vreg->rdev)) {
|
||||
rc = PTR_ERR(vreg->rdev);
|
||||
pr_err("%s: regulator_register failed for %s, rc=%d\n",
|
||||
|
||||
@@ -182,7 +182,7 @@ static int __devinit regulator_stub_probe(struct platform_device *pdev)
|
||||
vreg_priv->voltage = vreg_pdata->init_data.constraints.min_uV;
|
||||
|
||||
vreg_priv->rdev = regulator_register(rdesc, &pdev->dev,
|
||||
&(vreg_pdata->init_data), vreg_priv);
|
||||
&(vreg_pdata->init_data), vreg_priv, NULL);
|
||||
if (IS_ERR(vreg_priv->rdev)) {
|
||||
rc = PTR_ERR(vreg_priv->rdev);
|
||||
vreg_priv->rdev = NULL;
|
||||
|
||||
@@ -151,7 +151,8 @@ static int __devinit tps6105x_regulator_probe(struct platform_device *pdev)
|
||||
/* Register regulator with framework */
|
||||
tps6105x->regulator = regulator_register(&tps6105x_regulator_desc,
|
||||
&tps6105x->client->dev,
|
||||
pdata->regulator_data, tps6105x);
|
||||
pdata->regulator_data, tps6105x,
|
||||
NULL);
|
||||
if (IS_ERR(tps6105x->regulator)) {
|
||||
ret = PTR_ERR(tps6105x->regulator);
|
||||
dev_err(&tps6105x->client->dev,
|
||||
|
||||
@@ -507,7 +507,7 @@ static int __devinit tps_65023_probe(struct i2c_client *client,
|
||||
|
||||
/* Register the regulators */
|
||||
rdev = regulator_register(&tps->desc[i], &client->dev,
|
||||
init_data, tps);
|
||||
init_data, tps, NULL);
|
||||
if (IS_ERR(rdev)) {
|
||||
dev_err(&client->dev, "failed to register %s\n",
|
||||
id->name);
|
||||
|
||||
@@ -605,7 +605,7 @@ int tps6507x_pmic_probe(struct platform_device *pdev)
|
||||
tps->desc[i].owner = THIS_MODULE;
|
||||
|
||||
rdev = regulator_register(&tps->desc[i],
|
||||
tps6507x_dev->dev, init_data, tps);
|
||||
tps6507x_dev->dev, init_data, tps, NULL);
|
||||
if (IS_ERR(rdev)) {
|
||||
dev_err(tps6507x_dev->dev,
|
||||
"failed to register %s regulator\n",
|
||||
|
||||
@@ -651,7 +651,7 @@ static int __devinit pmic_probe(struct spi_device *spi)
|
||||
hw->desc[i].n_voltages = 1;
|
||||
|
||||
hw->rdev[i] = regulator_register(&hw->desc[i], dev,
|
||||
init_data, hw);
|
||||
init_data, hw, NULL);
|
||||
if (IS_ERR(hw->rdev[i])) {
|
||||
ret = PTR_ERR(hw->rdev[i]);
|
||||
hw->rdev[i] = NULL;
|
||||
|
||||
@@ -365,7 +365,7 @@ static int __devinit tps6586x_regulator_probe(struct platform_device *pdev)
|
||||
return err;
|
||||
|
||||
rdev = regulator_register(&ri->desc, &pdev->dev,
|
||||
pdev->dev.platform_data, ri);
|
||||
pdev->dev.platform_data, ri, NULL);
|
||||
if (IS_ERR(rdev)) {
|
||||
dev_err(&pdev->dev, "failed to register regulator %s\n",
|
||||
ri->desc.name);
|
||||
|
||||
@@ -939,7 +939,7 @@ static __devinit int tps65910_probe(struct platform_device *pdev)
|
||||
pmic->desc[i].owner = THIS_MODULE;
|
||||
|
||||
rdev = regulator_register(&pmic->desc[i],
|
||||
tps65910->dev, reg_data, pmic);
|
||||
tps65910->dev, reg_data, pmic, NULL);
|
||||
if (IS_ERR(rdev)) {
|
||||
dev_err(tps65910->dev,
|
||||
"failed to register %s regulator\n",
|
||||
|
||||
@@ -1074,7 +1074,7 @@ static int __devinit twlreg_probe(struct platform_device *pdev)
|
||||
break;
|
||||
}
|
||||
|
||||
rdev = regulator_register(&info->desc, &pdev->dev, initdata, info);
|
||||
rdev = regulator_register(&info->desc, &pdev->dev, initdata, info, NULL);
|
||||
if (IS_ERR(rdev)) {
|
||||
dev_err(&pdev->dev, "can't register %s, %ld\n",
|
||||
info->desc.name, PTR_ERR(rdev));
|
||||
|
||||
@@ -556,7 +556,7 @@ static __devinit int wm831x_buckv_probe(struct platform_device *pdev)
|
||||
wm831x_buckv_dvs_init(dcdc, pdata->dcdc[id]->driver_data);
|
||||
|
||||
dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev,
|
||||
pdata->dcdc[id], dcdc);
|
||||
pdata->dcdc[id], dcdc, NULL);
|
||||
if (IS_ERR(dcdc->regulator)) {
|
||||
ret = PTR_ERR(dcdc->regulator);
|
||||
dev_err(wm831x->dev, "Failed to register DCDC%d: %d\n",
|
||||
@@ -744,7 +744,7 @@ static __devinit int wm831x_buckp_probe(struct platform_device *pdev)
|
||||
dcdc->desc.owner = THIS_MODULE;
|
||||
|
||||
dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev,
|
||||
pdata->dcdc[id], dcdc);
|
||||
pdata->dcdc[id], dcdc, NULL);
|
||||
if (IS_ERR(dcdc->regulator)) {
|
||||
ret = PTR_ERR(dcdc->regulator);
|
||||
dev_err(wm831x->dev, "Failed to register DCDC%d: %d\n",
|
||||
@@ -871,7 +871,7 @@ static __devinit int wm831x_boostp_probe(struct platform_device *pdev)
|
||||
dcdc->desc.owner = THIS_MODULE;
|
||||
|
||||
dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev,
|
||||
pdata->dcdc[id], dcdc);
|
||||
pdata->dcdc[id], dcdc, NULL);
|
||||
if (IS_ERR(dcdc->regulator)) {
|
||||
ret = PTR_ERR(dcdc->regulator);
|
||||
dev_err(wm831x->dev, "Failed to register DCDC%d: %d\n",
|
||||
@@ -970,7 +970,7 @@ static __devinit int wm831x_epe_probe(struct platform_device *pdev)
|
||||
dcdc->desc.owner = THIS_MODULE;
|
||||
|
||||
dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev,
|
||||
pdata->epe[id], dcdc);
|
||||
pdata->epe[id], dcdc, NULL);
|
||||
if (IS_ERR(dcdc->regulator)) {
|
||||
ret = PTR_ERR(dcdc->regulator);
|
||||
dev_err(wm831x->dev, "Failed to register EPE%d: %d\n",
|
||||
|
||||
@@ -189,7 +189,7 @@ static __devinit int wm831x_isink_probe(struct platform_device *pdev)
|
||||
isink->desc.owner = THIS_MODULE;
|
||||
|
||||
isink->regulator = regulator_register(&isink->desc, &pdev->dev,
|
||||
pdata->isink[id], isink);
|
||||
pdata->isink[id], isink, NULL);
|
||||
if (IS_ERR(isink->regulator)) {
|
||||
ret = PTR_ERR(isink->regulator);
|
||||
dev_err(wm831x->dev, "Failed to register ISINK%d: %d\n",
|
||||
|
||||
@@ -345,7 +345,7 @@ static __devinit int wm831x_gp_ldo_probe(struct platform_device *pdev)
|
||||
ldo->desc.owner = THIS_MODULE;
|
||||
|
||||
ldo->regulator = regulator_register(&ldo->desc, &pdev->dev,
|
||||
pdata->ldo[id], ldo);
|
||||
pdata->ldo[id], ldo, NULL);
|
||||
if (IS_ERR(ldo->regulator)) {
|
||||
ret = PTR_ERR(ldo->regulator);
|
||||
dev_err(wm831x->dev, "Failed to register LDO%d: %d\n",
|
||||
@@ -609,7 +609,7 @@ static __devinit int wm831x_aldo_probe(struct platform_device *pdev)
|
||||
ldo->desc.owner = THIS_MODULE;
|
||||
|
||||
ldo->regulator = regulator_register(&ldo->desc, &pdev->dev,
|
||||
pdata->ldo[id], ldo);
|
||||
pdata->ldo[id], ldo, NULL);
|
||||
if (IS_ERR(ldo->regulator)) {
|
||||
ret = PTR_ERR(ldo->regulator);
|
||||
dev_err(wm831x->dev, "Failed to register LDO%d: %d\n",
|
||||
@@ -799,7 +799,7 @@ static __devinit int wm831x_alive_ldo_probe(struct platform_device *pdev)
|
||||
ldo->desc.owner = THIS_MODULE;
|
||||
|
||||
ldo->regulator = regulator_register(&ldo->desc, &pdev->dev,
|
||||
pdata->ldo[id], ldo);
|
||||
pdata->ldo[id], ldo, NULL);
|
||||
if (IS_ERR(ldo->regulator)) {
|
||||
ret = PTR_ERR(ldo->regulator);
|
||||
dev_err(wm831x->dev, "Failed to register LDO%d: %d\n",
|
||||
|
||||
@@ -1428,7 +1428,7 @@ static int wm8350_regulator_probe(struct platform_device *pdev)
|
||||
/* register regulator */
|
||||
rdev = regulator_register(&wm8350_reg[pdev->id], &pdev->dev,
|
||||
pdev->dev.platform_data,
|
||||
dev_get_drvdata(&pdev->dev));
|
||||
dev_get_drvdata(&pdev->dev), NULL);
|
||||
if (IS_ERR(rdev)) {
|
||||
dev_err(&pdev->dev, "failed to register %s\n",
|
||||
wm8350_reg[pdev->id].name);
|
||||
|
||||
@@ -325,7 +325,7 @@ static int __devinit wm8400_regulator_probe(struct platform_device *pdev)
|
||||
struct regulator_dev *rdev;
|
||||
|
||||
rdev = regulator_register(®ulators[pdev->id], &pdev->dev,
|
||||
pdev->dev.platform_data, wm8400);
|
||||
pdev->dev.platform_data, wm8400, NULL);
|
||||
|
||||
if (IS_ERR(rdev))
|
||||
return PTR_ERR(rdev);
|
||||
|
||||
@@ -256,7 +256,7 @@ static __devinit int wm8994_ldo_probe(struct platform_device *pdev)
|
||||
ldo->is_enabled = true;
|
||||
|
||||
ldo->regulator = regulator_register(&wm8994_ldo_desc[id], &pdev->dev,
|
||||
pdata->ldo[id].init_data, ldo);
|
||||
pdata->ldo[id].init_data, ldo, NULL);
|
||||
if (IS_ERR(ldo->regulator)) {
|
||||
ret = PTR_ERR(ldo->regulator);
|
||||
dev_err(wm8994->dev, "Failed to register LDO%d: %d\n",
|
||||
|
||||
@@ -249,6 +249,12 @@ static inline bool of_have_populated_dt(void)
|
||||
#define for_each_child_of_node(parent, child) \
|
||||
while (0)
|
||||
|
||||
static inline int of_device_is_compatible(const struct device_node *device,
|
||||
const char *name)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline struct property *of_find_property(const struct device_node *np,
|
||||
const char *name,
|
||||
int *lenp)
|
||||
@@ -288,6 +294,13 @@ static inline const void *of_get_property(const struct device_node *node,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct device_node *of_parse_phandle(struct device_node *np,
|
||||
const char *phandle_name,
|
||||
int index)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_OF */
|
||||
|
||||
static inline int of_property_read_u32(const struct device_node *np,
|
||||
|
||||
@@ -153,6 +153,7 @@ enum regulator_type {
|
||||
* this type.
|
||||
*
|
||||
* @name: Identifying name for the regulator.
|
||||
* @supply_name: Identifying the regulator supply
|
||||
* @id: Numerical identifier for the regulator.
|
||||
* @n_voltages: Number of selectors available for ops.list_voltage().
|
||||
* @ops: Regulator operations table.
|
||||
@@ -162,6 +163,7 @@ enum regulator_type {
|
||||
*/
|
||||
struct regulator_desc {
|
||||
const char *name;
|
||||
const char *supply_name;
|
||||
int id;
|
||||
unsigned n_voltages;
|
||||
struct regulator_ops *ops;
|
||||
@@ -210,7 +212,7 @@ struct regulator_dev {
|
||||
|
||||
struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc,
|
||||
struct device *dev, const struct regulator_init_data *init_data,
|
||||
void *driver_data);
|
||||
void *driver_data, struct device_node *of_node);
|
||||
void regulator_unregister(struct regulator_dev *rdev);
|
||||
|
||||
int regulator_notifier_call_chain(struct regulator_dev *rdev,
|
||||
|
||||
@@ -95,7 +95,7 @@ struct regulator_state {
|
||||
*/
|
||||
struct regulation_constraints {
|
||||
|
||||
char *name;
|
||||
const char *name;
|
||||
|
||||
/* voltage output range (inclusive) - for voltage control */
|
||||
int min_uV;
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* OpenFirmware regulator support routines
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_OF_REG_H
|
||||
#define __LINUX_OF_REG_H
|
||||
|
||||
#if defined(CONFIG_OF)
|
||||
extern struct regulator_init_data
|
||||
*of_get_regulator_init_data(struct device *dev);
|
||||
#else
|
||||
static inline struct regulator_init_data
|
||||
*of_get_regulator_init_data(struct device *dev)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
#endif /* CONFIG_OF */
|
||||
|
||||
#endif /* __LINUX_OF_REG_H */
|
||||
@@ -832,7 +832,7 @@ static int ldo_regulator_register(struct snd_soc_codec *codec,
|
||||
ldo->voltage = voltage;
|
||||
|
||||
ldo->dev = regulator_register(&ldo->desc, codec->dev,
|
||||
init_data, ldo);
|
||||
init_data, ldo, NULL);
|
||||
if (IS_ERR(ldo->dev)) {
|
||||
int ret = PTR_ERR(ldo->dev);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user