diff options
author | Mattias Wallin <mattias.wallin@stericsson.com> | 2010-05-01 12:26:20 -0400 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2010-05-27 19:37:45 -0400 |
commit | fa661258a27aa74aaf741882053d195291cefb75 (patch) | |
tree | 73b6e0c7156088f660de465555ee13226ac78242 /drivers/regulator/ab3100.c | |
parent | 812f9e9d424dde9ccb35975c0281edb6f8543735 (diff) |
mfd: AB3100 register access change to abx500 API
The interface for the AB3100 is changed to make way for the
ABX500 family of chips: AB3550, AB5500 and future ST-Ericsson
Analog Baseband chips. The register access functions are moved
out to a separate struct abx500_ops. In this way the interface
is moved from the implementation and the sub functionality drivers
can keep their interface intact when chip infrastructure and
communication mechanisms changes. We also define the AB3550
device IDs and the AB3550 platform data struct and convert
the catenated 32bit event to an array of 3 x 8bits.
Signed-off-by: Mattias Wallin <mattias.wallin@stericsson.com>
Signed-off-by: Linus Walleij <linus.walleij@stericsson.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/regulator/ab3100.c')
-rw-r--r-- | drivers/regulator/ab3100.c | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/drivers/regulator/ab3100.c b/drivers/regulator/ab3100.c index 04ca7f62c57e..7b14a67bdca2 100644 --- a/drivers/regulator/ab3100.c +++ b/drivers/regulator/ab3100.c | |||
@@ -41,7 +41,7 @@ | |||
41 | * struct ab3100_regulator | 41 | * struct ab3100_regulator |
42 | * A struct passed around the individual regulator functions | 42 | * A struct passed around the individual regulator functions |
43 | * @platform_device: platform device holding this regulator | 43 | * @platform_device: platform device holding this regulator |
44 | * @ab3100: handle to the AB3100 parent chip | 44 | * @dev: handle to the device |
45 | * @plfdata: AB3100 platform data passed in at probe time | 45 | * @plfdata: AB3100 platform data passed in at probe time |
46 | * @regreg: regulator register number in the AB3100 | 46 | * @regreg: regulator register number in the AB3100 |
47 | * @fixed_voltage: a fixed voltage for this regulator, if this | 47 | * @fixed_voltage: a fixed voltage for this regulator, if this |
@@ -52,7 +52,7 @@ | |||
52 | */ | 52 | */ |
53 | struct ab3100_regulator { | 53 | struct ab3100_regulator { |
54 | struct regulator_dev *rdev; | 54 | struct regulator_dev *rdev; |
55 | struct ab3100 *ab3100; | 55 | struct device *dev; |
56 | struct ab3100_platform_data *plfdata; | 56 | struct ab3100_platform_data *plfdata; |
57 | u8 regreg; | 57 | u8 regreg; |
58 | int fixed_voltage; | 58 | int fixed_voltage; |
@@ -183,7 +183,7 @@ static int ab3100_enable_regulator(struct regulator_dev *reg) | |||
183 | int err; | 183 | int err; |
184 | u8 regval; | 184 | u8 regval; |
185 | 185 | ||
186 | err = ab3100_get_register_interruptible(abreg->ab3100, abreg->regreg, | 186 | err = abx500_get_register_interruptible(abreg->dev, 0, abreg->regreg, |
187 | ®val); | 187 | ®val); |
188 | if (err) { | 188 | if (err) { |
189 | dev_warn(®->dev, "failed to get regid %d value\n", | 189 | dev_warn(®->dev, "failed to get regid %d value\n", |
@@ -197,7 +197,7 @@ static int ab3100_enable_regulator(struct regulator_dev *reg) | |||
197 | 197 | ||
198 | regval |= AB3100_REG_ON_MASK; | 198 | regval |= AB3100_REG_ON_MASK; |
199 | 199 | ||
200 | err = ab3100_set_register_interruptible(abreg->ab3100, abreg->regreg, | 200 | err = abx500_set_register_interruptible(abreg->dev, 0, abreg->regreg, |
201 | regval); | 201 | regval); |
202 | if (err) { | 202 | if (err) { |
203 | dev_warn(®->dev, "failed to set regid %d value\n", | 203 | dev_warn(®->dev, "failed to set regid %d value\n", |
@@ -245,14 +245,14 @@ static int ab3100_disable_regulator(struct regulator_dev *reg) | |||
245 | if (abreg->regreg == AB3100_LDO_D) { | 245 | if (abreg->regreg == AB3100_LDO_D) { |
246 | dev_info(®->dev, "disabling LDO D - shut down system\n"); | 246 | dev_info(®->dev, "disabling LDO D - shut down system\n"); |
247 | /* Setting LDO D to 0x00 cuts the power to the SoC */ | 247 | /* Setting LDO D to 0x00 cuts the power to the SoC */ |
248 | return ab3100_set_register_interruptible(abreg->ab3100, | 248 | return abx500_set_register_interruptible(abreg->dev, 0, |
249 | AB3100_LDO_D, 0x00U); | 249 | AB3100_LDO_D, 0x00U); |
250 | } | 250 | } |
251 | 251 | ||
252 | /* | 252 | /* |
253 | * All other regulators are handled here | 253 | * All other regulators are handled here |
254 | */ | 254 | */ |
255 | err = ab3100_get_register_interruptible(abreg->ab3100, abreg->regreg, | 255 | err = abx500_get_register_interruptible(abreg->dev, 0, abreg->regreg, |
256 | ®val); | 256 | ®val); |
257 | if (err) { | 257 | if (err) { |
258 | dev_err(®->dev, "unable to get register 0x%x\n", | 258 | dev_err(®->dev, "unable to get register 0x%x\n", |
@@ -260,7 +260,7 @@ static int ab3100_disable_regulator(struct regulator_dev *reg) | |||
260 | return err; | 260 | return err; |
261 | } | 261 | } |
262 | regval &= ~AB3100_REG_ON_MASK; | 262 | regval &= ~AB3100_REG_ON_MASK; |
263 | return ab3100_set_register_interruptible(abreg->ab3100, abreg->regreg, | 263 | return abx500_set_register_interruptible(abreg->dev, 0, abreg->regreg, |
264 | regval); | 264 | regval); |
265 | } | 265 | } |
266 | 266 | ||
@@ -270,7 +270,7 @@ static int ab3100_is_enabled_regulator(struct regulator_dev *reg) | |||
270 | u8 regval; | 270 | u8 regval; |
271 | int err; | 271 | int err; |
272 | 272 | ||
273 | err = ab3100_get_register_interruptible(abreg->ab3100, abreg->regreg, | 273 | err = abx500_get_register_interruptible(abreg->dev, 0, abreg->regreg, |
274 | ®val); | 274 | ®val); |
275 | if (err) { | 275 | if (err) { |
276 | dev_err(®->dev, "unable to get register 0x%x\n", | 276 | dev_err(®->dev, "unable to get register 0x%x\n", |
@@ -305,7 +305,7 @@ static int ab3100_get_voltage_regulator(struct regulator_dev *reg) | |||
305 | * For variable types, read out setting and index into | 305 | * For variable types, read out setting and index into |
306 | * supplied voltage list. | 306 | * supplied voltage list. |
307 | */ | 307 | */ |
308 | err = ab3100_get_register_interruptible(abreg->ab3100, | 308 | err = abx500_get_register_interruptible(abreg->dev, 0, |
309 | abreg->regreg, ®val); | 309 | abreg->regreg, ®val); |
310 | if (err) { | 310 | if (err) { |
311 | dev_warn(®->dev, | 311 | dev_warn(®->dev, |
@@ -373,7 +373,7 @@ static int ab3100_set_voltage_regulator(struct regulator_dev *reg, | |||
373 | if (bestindex < 0) | 373 | if (bestindex < 0) |
374 | return bestindex; | 374 | return bestindex; |
375 | 375 | ||
376 | err = ab3100_get_register_interruptible(abreg->ab3100, | 376 | err = abx500_get_register_interruptible(abreg->dev, 0, |
377 | abreg->regreg, ®val); | 377 | abreg->regreg, ®val); |
378 | if (err) { | 378 | if (err) { |
379 | dev_warn(®->dev, | 379 | dev_warn(®->dev, |
@@ -386,7 +386,7 @@ static int ab3100_set_voltage_regulator(struct regulator_dev *reg, | |||
386 | regval &= ~0xE0; | 386 | regval &= ~0xE0; |
387 | regval |= (bestindex << 5); | 387 | regval |= (bestindex << 5); |
388 | 388 | ||
389 | err = ab3100_set_register_interruptible(abreg->ab3100, | 389 | err = abx500_set_register_interruptible(abreg->dev, 0, |
390 | abreg->regreg, regval); | 390 | abreg->regreg, regval); |
391 | if (err) | 391 | if (err) |
392 | dev_warn(®->dev, "failed to set regulator register %02x\n", | 392 | dev_warn(®->dev, "failed to set regulator register %02x\n", |
@@ -414,7 +414,7 @@ static int ab3100_set_suspend_voltage_regulator(struct regulator_dev *reg, | |||
414 | /* LDO E and BUCK have special suspend voltages you can set */ | 414 | /* LDO E and BUCK have special suspend voltages you can set */ |
415 | bestindex = ab3100_get_best_voltage_index(reg, uV, uV); | 415 | bestindex = ab3100_get_best_voltage_index(reg, uV, uV); |
416 | 416 | ||
417 | err = ab3100_get_register_interruptible(abreg->ab3100, | 417 | err = abx500_get_register_interruptible(abreg->dev, 0, |
418 | targetreg, ®val); | 418 | targetreg, ®val); |
419 | if (err) { | 419 | if (err) { |
420 | dev_warn(®->dev, | 420 | dev_warn(®->dev, |
@@ -427,7 +427,7 @@ static int ab3100_set_suspend_voltage_regulator(struct regulator_dev *reg, | |||
427 | regval &= ~0xE0; | 427 | regval &= ~0xE0; |
428 | regval |= (bestindex << 5); | 428 | regval |= (bestindex << 5); |
429 | 429 | ||
430 | err = ab3100_set_register_interruptible(abreg->ab3100, | 430 | err = abx500_set_register_interruptible(abreg->dev, 0, |
431 | targetreg, regval); | 431 | targetreg, regval); |
432 | if (err) | 432 | if (err) |
433 | dev_warn(®->dev, "failed to set regulator register %02x\n", | 433 | dev_warn(®->dev, "failed to set regulator register %02x\n", |
@@ -574,13 +574,12 @@ ab3100_regulator_desc[AB3100_NUM_REGULATORS] = { | |||
574 | static int __devinit ab3100_regulators_probe(struct platform_device *pdev) | 574 | static int __devinit ab3100_regulators_probe(struct platform_device *pdev) |
575 | { | 575 | { |
576 | struct ab3100_platform_data *plfdata = pdev->dev.platform_data; | 576 | struct ab3100_platform_data *plfdata = pdev->dev.platform_data; |
577 | struct ab3100 *ab3100 = platform_get_drvdata(pdev); | ||
578 | int err = 0; | 577 | int err = 0; |
579 | u8 data; | 578 | u8 data; |
580 | int i; | 579 | int i; |
581 | 580 | ||
582 | /* Check chip state */ | 581 | /* Check chip state */ |
583 | err = ab3100_get_register_interruptible(ab3100, | 582 | err = abx500_get_register_interruptible(&pdev->dev, 0, |
584 | AB3100_LDO_D, &data); | 583 | AB3100_LDO_D, &data); |
585 | if (err) { | 584 | if (err) { |
586 | dev_err(&pdev->dev, "could not read initial status of LDO_D\n"); | 585 | dev_err(&pdev->dev, "could not read initial status of LDO_D\n"); |
@@ -595,7 +594,7 @@ static int __devinit ab3100_regulators_probe(struct platform_device *pdev) | |||
595 | 594 | ||
596 | /* Set up regulators */ | 595 | /* Set up regulators */ |
597 | for (i = 0; i < ARRAY_SIZE(ab3100_reg_init_order); i++) { | 596 | for (i = 0; i < ARRAY_SIZE(ab3100_reg_init_order); i++) { |
598 | err = ab3100_set_register_interruptible(ab3100, | 597 | err = abx500_set_register_interruptible(&pdev->dev, 0, |
599 | ab3100_reg_init_order[i], | 598 | ab3100_reg_init_order[i], |
600 | plfdata->reg_initvals[i]); | 599 | plfdata->reg_initvals[i]); |
601 | if (err) { | 600 | if (err) { |
@@ -617,7 +616,7 @@ static int __devinit ab3100_regulators_probe(struct platform_device *pdev) | |||
617 | * see what it looks like for a certain machine, go | 616 | * see what it looks like for a certain machine, go |
618 | * into the machine I2C setup. | 617 | * into the machine I2C setup. |
619 | */ | 618 | */ |
620 | reg->ab3100 = ab3100; | 619 | reg->dev = &pdev->dev; |
621 | reg->plfdata = plfdata; | 620 | reg->plfdata = plfdata; |
622 | 621 | ||
623 | /* | 622 | /* |