-
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.
yaml --- r: 312584 b: refs/heads/master c: 1910efa h: refs/heads/master v: v3
- Loading branch information
Mark Brown
committed
Jun 25, 2012
1 parent
6c00014
commit b0b2160
Showing
3 changed files
with
136 additions
and
2 deletions.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: 1af142c6f9843952d8eaff1c3de40d0b5d16f3ed | ||
refs/heads/master: 1910efa1d0fdf8109b285d4486f6a0de810b5574 |
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,134 @@ | ||
/* | ||
* arizona-ldo1.c -- LDO1 supply for Arizona devices | ||
* | ||
* Copyright 2012 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. | ||
*/ | ||
|
||
#include <linux/module.h> | ||
#include <linux/moduleparam.h> | ||
#include <linux/init.h> | ||
#include <linux/bitops.h> | ||
#include <linux/err.h> | ||
#include <linux/platform_device.h> | ||
#include <linux/regulator/driver.h> | ||
#include <linux/regulator/machine.h> | ||
#include <linux/gpio.h> | ||
#include <linux/slab.h> | ||
|
||
#include <linux/mfd/arizona/core.h> | ||
#include <linux/mfd/arizona/pdata.h> | ||
#include <linux/mfd/arizona/registers.h> | ||
|
||
struct arizona_ldo1 { | ||
struct regulator_dev *regulator; | ||
struct arizona *arizona; | ||
|
||
struct regulator_consumer_supply supply; | ||
struct regulator_init_data init_data; | ||
}; | ||
|
||
static struct regulator_ops arizona_ldo1_ops = { | ||
.list_voltage = regulator_list_voltage_linear, | ||
.map_voltage = regulator_map_voltage_linear, | ||
.get_voltage_sel = regulator_get_voltage_sel_regmap, | ||
.set_voltage_sel = regulator_set_voltage_sel_regmap, | ||
}; | ||
|
||
static const struct regulator_desc arizona_ldo1 = { | ||
.name = "LDO1", | ||
.supply_name = "LDOVDD", | ||
.type = REGULATOR_VOLTAGE, | ||
.ops = &arizona_ldo1_ops, | ||
|
||
.vsel_reg = ARIZONA_LDO1_CONTROL_1, | ||
.vsel_mask = ARIZONA_LDO1_VSEL_MASK, | ||
.min_uV = 900000, | ||
.uV_step = 50000, | ||
.n_voltages = 7, | ||
|
||
.owner = THIS_MODULE, | ||
}; | ||
|
||
static const struct regulator_init_data arizona_ldo1_default = { | ||
.num_consumer_supplies = 1, | ||
}; | ||
|
||
static __devinit int arizona_ldo1_probe(struct platform_device *pdev) | ||
{ | ||
struct arizona *arizona = dev_get_drvdata(pdev->dev.parent); | ||
struct regulator_config config = { }; | ||
struct arizona_ldo1 *ldo1; | ||
int ret; | ||
|
||
ldo1 = devm_kzalloc(&pdev->dev, sizeof(*ldo1), GFP_KERNEL); | ||
if (ldo1 == NULL) { | ||
dev_err(&pdev->dev, "Unable to allocate private data\n"); | ||
return -ENOMEM; | ||
} | ||
|
||
ldo1->arizona = arizona; | ||
|
||
/* | ||
* Since the chip usually supplies itself we provide some | ||
* default init_data for it. This will be overridden with | ||
* platform data if provided. | ||
*/ | ||
ldo1->init_data = arizona_ldo1_default; | ||
ldo1->init_data.consumer_supplies = &ldo1->supply; | ||
ldo1->supply.supply = "DCVDD"; | ||
ldo1->supply.dev_name = dev_name(arizona->dev); | ||
|
||
config.dev = arizona->dev; | ||
config.driver_data = ldo1; | ||
config.regmap = arizona->regmap; | ||
|
||
if (arizona->pdata.ldo1) | ||
config.init_data = arizona->pdata.ldo1; | ||
else | ||
config.init_data = &ldo1->init_data; | ||
|
||
ldo1->regulator = regulator_register(&arizona_ldo1, &config); | ||
if (IS_ERR(ldo1->regulator)) { | ||
ret = PTR_ERR(ldo1->regulator); | ||
dev_err(arizona->dev, "Failed to register LDO1 supply: %d\n", | ||
ret); | ||
return ret; | ||
} | ||
|
||
platform_set_drvdata(pdev, ldo1); | ||
|
||
return 0; | ||
} | ||
|
||
static __devexit int arizona_ldo1_remove(struct platform_device *pdev) | ||
{ | ||
struct arizona_ldo1 *ldo1 = platform_get_drvdata(pdev); | ||
|
||
regulator_unregister(ldo1->regulator); | ||
|
||
return 0; | ||
} | ||
|
||
static struct platform_driver arizona_ldo1_driver = { | ||
.probe = arizona_ldo1_probe, | ||
.remove = __devexit_p(arizona_ldo1_remove), | ||
.driver = { | ||
.name = "arizona-ldo1", | ||
.owner = THIS_MODULE, | ||
}, | ||
}; | ||
|
||
module_platform_driver(arizona_ldo1_driver); | ||
|
||
/* Module information */ | ||
MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>"); | ||
MODULE_DESCRIPTION("Arizona LDO1 driver"); | ||
MODULE_LICENSE("GPL"); | ||
MODULE_ALIAS("platform:arizona-ldo1"); |