Blame view

drivers/regulator/88pm8607.c 13.4 KB
d2912cb15   Thomas Gleixner   treewide: Replace...
1
  // SPDX-License-Identifier: GPL-2.0-only
be0e2d3e8   Haojian Zhuang   regulator: add 88...
2
3
4
5
  /*
   * Regulators driver for Marvell 88PM8607
   *
   * Copyright (C) 2009 Marvell International Ltd.
e54f19bff   Jingoo Han   regulator: 88pm86...
6
   *	Haojian Zhuang <haojian.zhuang@marvell.com>
be0e2d3e8   Haojian Zhuang   regulator: add 88...
7
8
9
10
   */
  #include <linux/kernel.h>
  #include <linux/init.h>
  #include <linux/err.h>
2e57d5674   Haojian Zhuang   mfd: 88pm860x: De...
11
12
  #include <linux/of.h>
  #include <linux/regulator/of_regulator.h>
be0e2d3e8   Haojian Zhuang   regulator: add 88...
13
14
15
  #include <linux/platform_device.h>
  #include <linux/regulator/driver.h>
  #include <linux/regulator/machine.h>
53dbab7af   Haojian Zhuang   mfd: Support 88pm...
16
  #include <linux/mfd/88pm860x.h>
65602c32e   Paul Gortmaker   regulator: Add mo...
17
  #include <linux/module.h>
be0e2d3e8   Haojian Zhuang   regulator: add 88...
18
19
20
  
  struct pm8607_regulator_info {
  	struct regulator_desc	desc;
be0e2d3e8   Haojian Zhuang   regulator: add 88...
21

9f79e9db2   Haojian Zhuang   regulator: use vo...
22
  	unsigned int	*vol_suspend;
be0e2d3e8   Haojian Zhuang   regulator: add 88...
23
24
  	int	slope_double;
  };
9f79e9db2   Haojian Zhuang   regulator: use vo...
25
26
27
28
29
30
31
32
33
34
  static const unsigned int BUCK1_table[] = {
  	 725000,  750000,  775000,  800000,  825000,  850000,  875000,  900000,
  	 925000,  950000,  975000, 1000000, 1025000, 1050000, 1075000, 1100000,
  	1125000, 1150000, 1175000, 1200000, 1225000, 1250000, 1275000, 1300000,
  	1325000, 1350000, 1375000, 1400000, 1425000, 1450000, 1475000, 1500000,
  	      0,   25000,   50000,   75000,  100000,  125000,  150000,  175000,
  	 200000,  225000,  250000,  275000,  300000,  325000,  350000,  375000,
  	 400000,  425000,  450000,  475000,  500000,  525000,  550000,  575000,
  	 600000,  625000,  650000,  675000,  700000,  725000,  750000,  775000,
  };
be0e2d3e8   Haojian Zhuang   regulator: add 88...
35

9f79e9db2   Haojian Zhuang   regulator: use vo...
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
  static const unsigned int BUCK1_suspend_table[] = {
  	      0,   25000,   50000,   75000,  100000,  125000,  150000,  175000,
  	 200000,  225000,  250000,  275000,  300000,  325000,  350000,  375000,
  	 400000,  425000,  450000,  475000,  500000,  525000,  550000,  575000,
  	 600000,  625000,  650000,  675000,  700000,  725000,  750000,  775000,
  	 800000,  825000,  850000,  875000,  900000,  925000,  950000,  975000,
  	1000000, 1025000, 1050000, 1075000, 1100000, 1125000, 1150000, 1175000,
  	1200000, 1225000, 1250000, 1275000, 1300000, 1325000, 1350000, 1375000,
  	1400000, 1425000, 1450000, 1475000, 1500000, 1500000, 1500000, 1500000,
  };
  
  static const unsigned int BUCK2_table[] = {
  	      0,   50000,  100000,  150000,  200000,  250000,  300000,  350000,
  	 400000,  450000,  500000,  550000,  600000,  650000,  700000,  750000,
  	 800000,  850000,  900000,  950000, 1000000, 1050000, 1100000, 1150000,
  	1200000, 1250000, 1300000, 1350000, 1400000, 1450000, 1500000, 1550000,
  	1600000, 1650000, 1700000, 1750000, 1800000, 1850000, 1900000, 1950000,
  	2000000, 2050000, 2100000, 2150000, 2200000, 2250000, 2300000, 2350000,
  	2400000, 2450000, 2500000, 2550000, 2600000, 2650000, 2700000, 2750000,
  	2800000, 2850000, 2900000, 2950000, 3000000, 3000000, 3000000, 3000000,
  };
  
  static const unsigned int BUCK2_suspend_table[] = {
  	      0,   50000,  100000,  150000,  200000,  250000,  300000,  350000,
  	 400000,  450000,  500000,  550000,  600000,  650000,  700000,  750000,
  	 800000,  850000,  900000,  950000, 1000000, 1050000, 1100000, 1150000,
  	1200000, 1250000, 1300000, 1350000, 1400000, 1450000, 1500000, 1550000,
  	1600000, 1650000, 1700000, 1750000, 1800000, 1850000, 1900000, 1950000,
  	2000000, 2050000, 2100000, 2150000, 2200000, 2250000, 2300000, 2350000,
  	2400000, 2450000, 2500000, 2550000, 2600000, 2650000, 2700000, 2750000,
  	2800000, 2850000, 2900000, 2950000, 3000000, 3000000, 3000000, 3000000,
  };
  
  static const unsigned int BUCK3_table[] = {
e54f19bff   Jingoo Han   regulator: 88pm86...
70
  	      0,   25000,   50000,   75000,  100000,  125000,  150000,  175000,
9f79e9db2   Haojian Zhuang   regulator: use vo...
71
72
73
74
75
76
77
78
79
80
  	 200000,  225000,  250000,  275000,  300000,  325000,  350000,  375000,
  	 400000,  425000,  450000,  475000,  500000,  525000,  550000,  575000,
  	 600000,  625000,  650000,  675000,  700000,  725000,  750000,  775000,
  	 800000,  825000,  850000,  875000,  900000,  925000,  950000,  975000,
  	1000000, 1025000, 1050000, 1075000, 1100000, 1125000, 1150000, 1175000,
  	1200000, 1225000, 1250000, 1275000, 1300000, 1325000, 1350000, 1375000,
  	1400000, 1425000, 1450000, 1475000, 1500000, 1500000, 1500000, 1500000,
  };
  
  static const unsigned int BUCK3_suspend_table[] = {
e54f19bff   Jingoo Han   regulator: 88pm86...
81
  	      0,   25000,   50000,   75000,  100000,  125000,  150000,  175000,
9f79e9db2   Haojian Zhuang   regulator: use vo...
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
  	 200000,  225000,  250000,  275000,  300000,  325000,  350000,  375000,
  	 400000,  425000,  450000,  475000,  500000,  525000,  550000,  575000,
  	 600000,  625000,  650000,  675000,  700000,  725000,  750000,  775000,
  	 800000,  825000,  850000,  875000,  900000,  925000,  950000,  975000,
  	1000000, 1025000, 1050000, 1075000, 1100000, 1125000, 1150000, 1175000,
  	1200000, 1225000, 1250000, 1275000, 1300000, 1325000, 1350000, 1375000,
  	1400000, 1425000, 1450000, 1475000, 1500000, 1500000, 1500000, 1500000,
  };
  
  static const unsigned int LDO1_table[] = {
  	1800000, 1200000, 2800000, 0,
  };
  
  static const unsigned int LDO1_suspend_table[] = {
  	1800000, 1200000, 0, 0,
  };
  
  static const unsigned int LDO2_table[] = {
  	1800000, 1850000, 1900000, 2700000, 2750000, 2800000, 2850000, 3300000,
  };
  
  static const unsigned int LDO2_suspend_table[] = {
  	1800000, 1850000, 1900000, 2700000, 2750000, 2800000, 2850000, 2900000,
  };
  
  static const unsigned int LDO3_table[] = {
  	1800000, 1850000, 1900000, 2700000, 2750000, 2800000, 2850000, 3300000,
  };
  
  static const unsigned int LDO3_suspend_table[] = {
  	1800000, 1850000, 1900000, 2700000, 2750000, 2800000, 2850000, 2900000,
  };
  
  static const unsigned int LDO4_table[] = {
  	1800000, 1850000, 1900000, 2700000, 2750000, 2800000, 2900000, 3300000,
  };
  
  static const unsigned int LDO4_suspend_table[] = {
  	1800000, 1850000, 1900000, 2700000, 2750000, 2800000, 2900000, 2900000,
  };
  
  static const unsigned int LDO5_table[] = {
  	2900000, 3000000, 3100000, 3300000,
  };
  
  static const unsigned int LDO5_suspend_table[] = {
  	2900000, 0, 0, 0,
  };
  
  static const unsigned int LDO6_table[] = {
  	1800000, 1850000, 2600000, 2650000, 2700000, 2750000, 2800000, 3300000,
  };
  
  static const unsigned int LDO6_suspend_table[] = {
  	1800000, 1850000, 2600000, 2650000, 2700000, 2750000, 2800000, 2900000,
  };
  
  static const unsigned int LDO7_table[] = {
  	1800000, 1850000, 1900000, 2700000, 2750000, 2800000, 2850000, 2900000,
  };
  
  static const unsigned int LDO7_suspend_table[] = {
  	1800000, 1850000, 1900000, 2700000, 2750000, 2800000, 2850000, 2900000,
  };
  
  static const unsigned int LDO8_table[] = {
  	1800000, 1850000, 1900000, 2700000, 2750000, 2800000, 2850000, 2900000,
  };
  
  static const unsigned int LDO8_suspend_table[] = {
  	1800000, 1850000, 1900000, 2700000, 2750000, 2800000, 2850000, 2900000,
  };
  
  static const unsigned int LDO9_table[] = {
  	1800000, 1850000, 1900000, 2700000, 2750000, 2800000, 2850000, 3300000,
  };
  
  static const unsigned int LDO9_suspend_table[] = {
  	1800000, 1850000, 1900000, 2700000, 2750000, 2800000, 2850000, 2900000,
  };
  
  static const unsigned int LDO10_table[] = {
  	1800000, 1850000, 1900000, 2700000, 2750000, 2800000, 2850000, 3300000,
  	1200000, 1200000, 1200000, 1200000, 1200000, 1200000, 1200000, 1200000,
  };
  
  static const unsigned int LDO10_suspend_table[] = {
  	1800000, 1850000, 1900000, 2700000, 2750000, 2800000, 2850000, 2900000,
  	1200000, 1200000, 1200000, 1200000, 1200000, 1200000, 1200000, 1200000,
  };
  
  static const unsigned int LDO12_table[] = {
  	1800000, 1900000, 2700000, 2800000, 2900000, 3000000, 3100000, 3300000,
  	1200000, 1200000, 1200000, 1200000, 1200000, 1200000, 1200000, 1200000,
  };
  
  static const unsigned int LDO12_suspend_table[] = {
  	1800000, 1900000, 2700000, 2800000, 2900000, 2900000, 2900000, 2900000,
  	1200000, 1200000, 1200000, 1200000, 1200000, 1200000, 1200000, 1200000,
  };
  
  static const unsigned int LDO13_table[] = {
3380643b0   Jett.Zhou   regulator: fix th...
184
  	1200000, 1300000, 1800000, 2000000, 2500000, 2800000, 3000000, 0,
9f79e9db2   Haojian Zhuang   regulator: use vo...
185
186
187
188
189
190
191
192
193
194
195
196
197
  };
  
  static const unsigned int LDO13_suspend_table[] = {
  	0,
  };
  
  static const unsigned int LDO14_table[] = {
  	1800000, 1850000, 2700000, 2750000, 2800000, 2850000, 2900000, 3300000,
  };
  
  static const unsigned int LDO14_suspend_table[] = {
  	1800000, 1850000, 2700000, 2750000, 2800000, 2850000, 2900000, 2900000,
  };
be0e2d3e8   Haojian Zhuang   regulator: add 88...
198
199
200
201
  
  static int pm8607_list_voltage(struct regulator_dev *rdev, unsigned index)
  {
  	struct pm8607_regulator_info *info = rdev_get_drvdata(rdev);
2654d368e   Axel Lin   regulator: 88pm86...
202
203
204
205
206
207
208
209
  	int ret;
  
  	ret = regulator_list_voltage_table(rdev, index);
  	if (ret < 0)
  		return ret;
  
  	if (info->slope_double)
  		ret <<= 1;
be0e2d3e8   Haojian Zhuang   regulator: add 88...
210

be0e2d3e8   Haojian Zhuang   regulator: add 88...
211
212
  	return ret;
  }
32cb5d30c   Bhumika Goyal   regulator: 88pm86...
213
  static const struct regulator_ops pm8607_regulator_ops = {
d3d7bccc0   Axel Lin   regulator: Set li...
214
  	.list_voltage	= pm8607_list_voltage,
c6f0a0efb   Axel Lin   regulator: 88pm86...
215
  	.set_voltage_sel = regulator_set_voltage_sel_regmap,
c006b21f7   Axel Lin   regulator: 88pm86...
216
  	.get_voltage_sel = regulator_get_voltage_sel_regmap,
ef26e0dbe   Axel Lin   regulator: 88pm86...
217
218
219
  	.enable = regulator_enable_regmap,
  	.disable = regulator_disable_regmap,
  	.is_enabled = regulator_is_enabled_regmap,
be0e2d3e8   Haojian Zhuang   regulator: add 88...
220
  };
32cb5d30c   Bhumika Goyal   regulator: 88pm86...
221
  static const struct regulator_ops pm8606_preg_ops = {
318c658b7   Axel Lin   regulator: 88pm86...
222
223
224
  	.enable		= regulator_enable_regmap,
  	.disable	= regulator_disable_regmap,
  	.is_enabled	= regulator_is_enabled_regmap,
e7a7810ae   Jett.Zhou   regulator: 88pm86...
225
226
227
228
229
230
  };
  
  #define PM8606_PREG(ereg, ebit)						\
  {									\
  	.desc	= {							\
  		.name	= "PREG",					\
e66264273   Axel Lin   regulator: 88pm86...
231
232
  		.of_match = of_match_ptr("PREG"),			\
  		.regulators_node = of_match_ptr("regulators"),		\
e7a7810ae   Jett.Zhou   regulator: 88pm86...
233
234
235
236
237
238
  		.ops	= &pm8606_preg_ops,				\
  		.type	= REGULATOR_CURRENT,				\
  		.id	= PM8606_ID_PREG,				\
  		.owner	= THIS_MODULE,					\
  		.enable_reg = PM8606_##ereg,				\
  		.enable_mask = (ebit),					\
318c658b7   Axel Lin   regulator: 88pm86...
239
  		.enable_is_inverted = true,				\
e7a7810ae   Jett.Zhou   regulator: 88pm86...
240
241
  	},								\
  }
53b6949ef   Axel Lin   regulator: Add mi...
242
  #define PM8607_DVC(vreg, ureg, ubit, ereg, ebit)			\
be0e2d3e8   Haojian Zhuang   regulator: add 88...
243
244
  {									\
  	.desc	= {							\
9f79e9db2   Haojian Zhuang   regulator: use vo...
245
  		.name	= #vreg,					\
e66264273   Axel Lin   regulator: 88pm86...
246
247
  		.of_match = of_match_ptr(#vreg),			\
  		.regulators_node = of_match_ptr("regulators"),		\
be0e2d3e8   Haojian Zhuang   regulator: add 88...
248
249
  		.ops	= &pm8607_regulator_ops,			\
  		.type	= REGULATOR_VOLTAGE,				\
9f79e9db2   Haojian Zhuang   regulator: use vo...
250
  		.id	= PM8607_ID_##vreg,				\
be0e2d3e8   Haojian Zhuang   regulator: add 88...
251
  		.owner	= THIS_MODULE,					\
2654d368e   Axel Lin   regulator: 88pm86...
252
  		.volt_table = vreg##_table,				\
53b6949ef   Axel Lin   regulator: Add mi...
253
  		.n_voltages = ARRAY_SIZE(vreg##_table),			\
c006b21f7   Axel Lin   regulator: 88pm86...
254
255
  		.vsel_reg = PM8607_##vreg,				\
  		.vsel_mask = ARRAY_SIZE(vreg##_table) - 1,		\
c6f0a0efb   Axel Lin   regulator: 88pm86...
256
257
  		.apply_reg = PM8607_##ureg,				\
  		.apply_bit = (ubit),					\
ef26e0dbe   Axel Lin   regulator: 88pm86...
258
259
  		.enable_reg = PM8607_##ereg,				\
  		.enable_mask = 1 << (ebit),				\
be0e2d3e8   Haojian Zhuang   regulator: add 88...
260
  	},								\
be0e2d3e8   Haojian Zhuang   regulator: add 88...
261
  	.slope_double	= (0),						\
9f79e9db2   Haojian Zhuang   regulator: use vo...
262
  	.vol_suspend	= (unsigned int *)&vreg##_suspend_table,	\
be0e2d3e8   Haojian Zhuang   regulator: add 88...
263
  }
53b6949ef   Axel Lin   regulator: Add mi...
264
  #define PM8607_LDO(_id, vreg, shift, ereg, ebit)			\
be0e2d3e8   Haojian Zhuang   regulator: add 88...
265
266
267
  {									\
  	.desc	= {							\
  		.name	= "LDO" #_id,					\
e66264273   Axel Lin   regulator: 88pm86...
268
269
  		.of_match = of_match_ptr("LDO" #_id),			\
  		.regulators_node = of_match_ptr("regulators"),		\
be0e2d3e8   Haojian Zhuang   regulator: add 88...
270
271
272
273
  		.ops	= &pm8607_regulator_ops,			\
  		.type	= REGULATOR_VOLTAGE,				\
  		.id	= PM8607_ID_LDO##_id,				\
  		.owner	= THIS_MODULE,					\
2654d368e   Axel Lin   regulator: 88pm86...
274
  		.volt_table = LDO##_id##_table,				\
53b6949ef   Axel Lin   regulator: Add mi...
275
  		.n_voltages = ARRAY_SIZE(LDO##_id##_table),		\
c006b21f7   Axel Lin   regulator: 88pm86...
276
277
  		.vsel_reg = PM8607_##vreg,				\
  		.vsel_mask = (ARRAY_SIZE(LDO##_id##_table) - 1) << (shift), \
ef26e0dbe   Axel Lin   regulator: 88pm86...
278
279
  		.enable_reg = PM8607_##ereg,				\
  		.enable_mask = 1 << (ebit),				\
be0e2d3e8   Haojian Zhuang   regulator: add 88...
280
  	},								\
be0e2d3e8   Haojian Zhuang   regulator: add 88...
281
  	.slope_double	= (0),						\
9f79e9db2   Haojian Zhuang   regulator: use vo...
282
  	.vol_suspend	= (unsigned int *)&LDO##_id##_suspend_table,	\
be0e2d3e8   Haojian Zhuang   regulator: add 88...
283
284
285
  }
  
  static struct pm8607_regulator_info pm8607_regulator_info[] = {
c6f0a0efb   Axel Lin   regulator: 88pm86...
286
287
288
  	PM8607_DVC(BUCK1, GO, BIT(0), SUPPLIES_EN11, 0),
  	PM8607_DVC(BUCK2, GO, BIT(1), SUPPLIES_EN11, 1),
  	PM8607_DVC(BUCK3, GO, BIT(2), SUPPLIES_EN11, 2),
53b6949ef   Axel Lin   regulator: Add mi...
289
290
291
292
293
294
295
296
297
298
299
300
301
302
  
  	PM8607_LDO(1,         LDO1, 0, SUPPLIES_EN11, 3),
  	PM8607_LDO(2,         LDO2, 0, SUPPLIES_EN11, 4),
  	PM8607_LDO(3,         LDO3, 0, SUPPLIES_EN11, 5),
  	PM8607_LDO(4,         LDO4, 0, SUPPLIES_EN11, 6),
  	PM8607_LDO(5,         LDO5, 0, SUPPLIES_EN11, 7),
  	PM8607_LDO(6,         LDO6, 0, SUPPLIES_EN12, 0),
  	PM8607_LDO(7,         LDO7, 0, SUPPLIES_EN12, 1),
  	PM8607_LDO(8,         LDO8, 0, SUPPLIES_EN12, 2),
  	PM8607_LDO(9,         LDO9, 0, SUPPLIES_EN12, 3),
  	PM8607_LDO(10,        LDO10, 0, SUPPLIES_EN12, 4),
  	PM8607_LDO(12,        LDO12, 0, SUPPLIES_EN12, 5),
  	PM8607_LDO(13, VIBRATOR_SET, 1, VIBRATOR_SET, 0),
  	PM8607_LDO(14,        LDO14, 0, SUPPLIES_EN12, 6),
ff13e9e25   Haojian Zhuang   mfd: 88pm860x: Av...
303
  };
e7a7810ae   Jett.Zhou   regulator: 88pm86...
304

ff13e9e25   Haojian Zhuang   mfd: 88pm860x: Av...
305
  static struct pm8607_regulator_info pm8606_regulator_info[] = {
e7a7810ae   Jett.Zhou   regulator: 88pm86...
306
  	PM8606_PREG(PREREGULATORB, 5),
be0e2d3e8   Haojian Zhuang   regulator: add 88...
307
  };
a5023574d   Bill Pemberton   regulator: remove...
308
  static int pm8607_regulator_probe(struct platform_device *pdev)
be0e2d3e8   Haojian Zhuang   regulator: add 88...
309
  {
22aad0011   Haojian Zhuang   mfd: Adopt mfd_da...
310
311
  	struct pm860x_chip *chip = dev_get_drvdata(pdev->dev.parent);
  	struct pm8607_regulator_info *info = NULL;
dff91d0b7   Jingoo Han   regulator: use de...
312
  	struct regulator_init_data *pdata = dev_get_platdata(&pdev->dev);
c172708d3   Mark Brown   regulator: core: ...
313
  	struct regulator_config config = { };
0e819b51f   Axel Lin   regulator: 88pm86...
314
  	struct regulator_dev *rdev;
586e1a176   Haojian Zhuang   mfd: Avoid to use...
315
  	struct resource *res;
be0e2d3e8   Haojian Zhuang   regulator: add 88...
316
  	int i;
023670295   Mark Brown   mfd: 88pm860x: Co...
317
  	res = platform_get_resource(pdev, IORESOURCE_REG, 0);
ff13e9e25   Haojian Zhuang   mfd: 88pm860x: Av...
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
  	if (res) {
  		/* There're resources in 88PM8607 regulator driver */
  		for (i = 0; i < ARRAY_SIZE(pm8607_regulator_info); i++) {
  			info = &pm8607_regulator_info[i];
  			if (info->desc.vsel_reg == res->start)
  				break;
  		}
  		if (i == ARRAY_SIZE(pm8607_regulator_info)) {
  			dev_err(&pdev->dev, "Failed to find regulator %llu
  ",
  				(unsigned long long)res->start);
  			return -EINVAL;
  		}
  	} else {
  		/* There's no resource in 88PM8606 PREG regulator driver */
  		info = &pm8606_regulator_info[0];
  		/* i is used to check regulator ID */
  		i = -1;
be0e2d3e8   Haojian Zhuang   regulator: add 88...
336
  	}
be0e2d3e8   Haojian Zhuang   regulator: add 88...
337

22aad0011   Haojian Zhuang   mfd: Adopt mfd_da...
338
  	/* check DVC ramp slope double */
0e819b51f   Axel Lin   regulator: 88pm86...
339
  	if ((i == PM8607_ID_BUCK3) && chip->buck3_double)
586e1a176   Haojian Zhuang   mfd: Avoid to use...
340
  		info->slope_double = 1;
22aad0011   Haojian Zhuang   mfd: Adopt mfd_da...
341

e66264273   Axel Lin   regulator: 88pm86...
342
  	config.dev = chip->dev;
c172708d3   Mark Brown   regulator: core: ...
343
  	config.driver_data = info;
e66264273   Axel Lin   regulator: 88pm86...
344
345
  	if (pdata)
  		config.init_data = pdata;
2e57d5674   Haojian Zhuang   mfd: 88pm860x: De...
346

ef26e0dbe   Axel Lin   regulator: 88pm86...
347
348
349
350
  	if (chip->id == CHIP_PM8607)
  		config.regmap = chip->regmap;
  	else
  		config.regmap = chip->regmap_companion;
0e819b51f   Axel Lin   regulator: 88pm86...
351
352
  	rdev = devm_regulator_register(&pdev->dev, &info->desc, &config);
  	if (IS_ERR(rdev)) {
be0e2d3e8   Haojian Zhuang   regulator: add 88...
353
354
355
  		dev_err(&pdev->dev, "failed to register regulator %s
  ",
  			info->desc.name);
0e819b51f   Axel Lin   regulator: 88pm86...
356
  		return PTR_ERR(rdev);
be0e2d3e8   Haojian Zhuang   regulator: add 88...
357
  	}
be0e2d3e8   Haojian Zhuang   regulator: add 88...
358
359
360
  	platform_set_drvdata(pdev, info);
  	return 0;
  }
0cfeddbde   Krzysztof Kozlowski   regulator: 88pm86...
361
  static const struct platform_device_id pm8607_regulator_driver_ids[] = {
e7a7810ae   Jett.Zhou   regulator: 88pm86...
362
363
364
365
366
367
368
369
370
371
  	{
  		.name	= "88pm860x-regulator",
  		.driver_data	= 0,
  	}, {
  		.name	= "88pm860x-preg",
  		.driver_data	= 0,
  	},
  	{ },
  };
  MODULE_DEVICE_TABLE(platform, pm8607_regulator_driver_ids);
192bbb95c   Haojian Zhuang   regulator: make 8...
372
373
374
  static struct platform_driver pm8607_regulator_driver = {
  	.driver		= {
  		.name	= "88pm860x-regulator",
192bbb95c   Haojian Zhuang   regulator: make 8...
375
376
  	},
  	.probe		= pm8607_regulator_probe,
e7a7810ae   Jett.Zhou   regulator: 88pm86...
377
  	.id_table	= pm8607_regulator_driver_ids,
be0e2d3e8   Haojian Zhuang   regulator: add 88...
378
379
380
381
  };
  
  static int __init pm8607_regulator_init(void)
  {
192bbb95c   Haojian Zhuang   regulator: make 8...
382
  	return platform_driver_register(&pm8607_regulator_driver);
be0e2d3e8   Haojian Zhuang   regulator: add 88...
383
384
385
386
387
  }
  subsys_initcall(pm8607_regulator_init);
  
  static void __exit pm8607_regulator_exit(void)
  {
192bbb95c   Haojian Zhuang   regulator: make 8...
388
  	platform_driver_unregister(&pm8607_regulator_driver);
be0e2d3e8   Haojian Zhuang   regulator: add 88...
389
390
391
392
393
394
395
  }
  module_exit(pm8607_regulator_exit);
  
  MODULE_LICENSE("GPL");
  MODULE_AUTHOR("Haojian Zhuang <haojian.zhuang@marvell.com>");
  MODULE_DESCRIPTION("Regulator Driver for Marvell 88PM8607 PMIC");
  MODULE_ALIAS("platform:88pm8607-regulator");