Commit | Line | Data |
---|---|---|
6f168f2f MR |
1 | /* |
2 | * Copyright (C) 2010 NVIDIA, Inc. | |
3 | * | |
4 | * This program is free software; you can redistribute it and/or modify | |
5 | * it under the terms of the GNU General Public License version 2 as | |
6 | * published by the Free Software Foundation. | |
7 | * | |
8 | * This program is distributed in the hope that it will be useful, | |
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 | * GNU General Public License for more details. | |
12 | * | |
13 | * You should have received a copy of the GNU General Public License | |
14 | * along with this program; if not, write to the Free Software | |
15 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA | |
16 | * 02111-1307, USA | |
17 | */ | |
18 | #include <linux/i2c.h> | |
19 | #include <linux/platform_device.h> | |
20 | #include <linux/gpio.h> | |
6f168f2f MR |
21 | #include <linux/regulator/machine.h> |
22 | #include <linux/mfd/tps6586x.h> | |
23 | ||
24 | #include <mach/irqs.h> | |
25 | ||
f2a4d8ae SW |
26 | #include "board-harmony.h" |
27 | ||
6f168f2f MR |
28 | static struct regulator_consumer_supply tps658621_ldo0_supply[] = { |
29 | REGULATOR_SUPPLY("pex_clk", NULL), | |
30 | }; | |
31 | ||
32 | static struct regulator_init_data ldo0_data = { | |
33 | .constraints = { | |
1dbe1dfa | 34 | .min_uV = 3300 * 1000, |
6f168f2f MR |
35 | .max_uV = 3300 * 1000, |
36 | .valid_modes_mask = (REGULATOR_MODE_NORMAL | | |
37 | REGULATOR_MODE_STANDBY), | |
38 | .valid_ops_mask = (REGULATOR_CHANGE_MODE | | |
39 | REGULATOR_CHANGE_STATUS | | |
40 | REGULATOR_CHANGE_VOLTAGE), | |
1dbe1dfa | 41 | .apply_uV = 1, |
6f168f2f MR |
42 | }, |
43 | .num_consumer_supplies = ARRAY_SIZE(tps658621_ldo0_supply), | |
44 | .consumer_supplies = tps658621_ldo0_supply, | |
45 | }; | |
46 | ||
47 | #define HARMONY_REGULATOR_INIT(_id, _minmv, _maxmv) \ | |
48 | static struct regulator_init_data _id##_data = { \ | |
49 | .constraints = { \ | |
50 | .min_uV = (_minmv)*1000, \ | |
51 | .max_uV = (_maxmv)*1000, \ | |
52 | .valid_modes_mask = (REGULATOR_MODE_NORMAL | \ | |
53 | REGULATOR_MODE_STANDBY), \ | |
54 | .valid_ops_mask = (REGULATOR_CHANGE_MODE | \ | |
55 | REGULATOR_CHANGE_STATUS | \ | |
56 | REGULATOR_CHANGE_VOLTAGE), \ | |
57 | }, \ | |
58 | } | |
59 | ||
60 | HARMONY_REGULATOR_INIT(sm0, 725, 1500); | |
61 | HARMONY_REGULATOR_INIT(sm1, 725, 1500); | |
62 | HARMONY_REGULATOR_INIT(sm2, 3000, 4550); | |
63 | HARMONY_REGULATOR_INIT(ldo1, 725, 1500); | |
64 | HARMONY_REGULATOR_INIT(ldo2, 725, 1500); | |
65 | HARMONY_REGULATOR_INIT(ldo3, 1250, 3300); | |
66 | HARMONY_REGULATOR_INIT(ldo4, 1700, 2475); | |
67 | HARMONY_REGULATOR_INIT(ldo5, 1250, 3300); | |
68 | HARMONY_REGULATOR_INIT(ldo6, 1250, 3300); | |
69 | HARMONY_REGULATOR_INIT(ldo7, 1250, 3300); | |
70 | HARMONY_REGULATOR_INIT(ldo8, 1250, 3300); | |
71 | HARMONY_REGULATOR_INIT(ldo9, 1250, 3300); | |
72 | ||
73 | #define TPS_REG(_id, _data) \ | |
74 | { \ | |
75 | .id = TPS6586X_ID_##_id, \ | |
76 | .name = "tps6586x-regulator", \ | |
77 | .platform_data = _data, \ | |
78 | } | |
79 | ||
80 | static struct tps6586x_subdev_info tps_devs[] = { | |
81 | TPS_REG(SM_0, &sm0_data), | |
82 | TPS_REG(SM_1, &sm1_data), | |
83 | TPS_REG(SM_2, &sm2_data), | |
84 | TPS_REG(LDO_0, &ldo0_data), | |
85 | TPS_REG(LDO_1, &ldo1_data), | |
86 | TPS_REG(LDO_2, &ldo2_data), | |
87 | TPS_REG(LDO_3, &ldo3_data), | |
88 | TPS_REG(LDO_4, &ldo4_data), | |
89 | TPS_REG(LDO_5, &ldo5_data), | |
90 | TPS_REG(LDO_6, &ldo6_data), | |
91 | TPS_REG(LDO_7, &ldo7_data), | |
92 | TPS_REG(LDO_8, &ldo8_data), | |
93 | TPS_REG(LDO_9, &ldo9_data), | |
94 | }; | |
95 | ||
96 | static struct tps6586x_platform_data tps_platform = { | |
97 | .irq_base = TEGRA_NR_IRQS, | |
98 | .num_subdevs = ARRAY_SIZE(tps_devs), | |
99 | .subdevs = tps_devs, | |
f2a4d8ae | 100 | .gpio_base = HARMONY_GPIO_TPS6586X(0), |
6f168f2f MR |
101 | }; |
102 | ||
103 | static struct i2c_board_info __initdata harmony_regulators[] = { | |
104 | { | |
105 | I2C_BOARD_INFO("tps6586x", 0x34), | |
106 | .irq = INT_EXTERNAL_PMU, | |
107 | .platform_data = &tps_platform, | |
108 | }, | |
109 | }; | |
110 | ||
111 | int __init harmony_regulator_init(void) | |
112 | { | |
113 | i2c_register_board_info(3, harmony_regulators, 1); | |
114 | ||
115 | return 0; | |
116 | } |