Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge remote-tracking branches 'regulator/topic/core', 'regulator/topic/regmap' and 'regulator/topic/register' into regulator-next

+2077 -2218
+1 -2
Documentation/power/regulator/regulator.txt
··· 11 11 Drivers can register a regulator by calling :- 12 12 13 13 struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc, 14 - struct device *dev, struct regulator_init_data *init_data, 15 - void *driver_data, struct device_node *of_node); 14 + const struct regulator_config *config); 16 15 17 16 This will register the regulators capabilities and operations to the regulator 18 17 core.
-11
drivers/mfd/tps65090.c
··· 78 78 }, 79 79 }; 80 80 81 - struct tps65090 { 82 - struct mutex lock; 83 - struct device *dev; 84 - struct i2c_client *client; 85 - struct regmap *rmap; 86 - struct irq_chip irq_chip; 87 - struct mutex irq_lock; 88 - int irq_base; 89 - unsigned int id; 90 - }; 91 - 92 81 int tps65090_write(struct device *dev, int reg, uint8_t val) 93 82 { 94 83 struct tps65090 *tps = dev_get_drvdata(dev);
+51 -126
drivers/regulator/88pm8607.c
··· 27 27 unsigned int *vol_table; 28 28 unsigned int *vol_suspend; 29 29 30 - int vol_reg; 31 - int vol_shift; 32 - int vol_nbits; 33 30 int update_reg; 34 31 int update_bit; 35 - int enable_reg; 36 - int enable_bit; 37 32 int slope_double; 38 33 }; 39 34 ··· 211 216 struct pm8607_regulator_info *info = rdev_get_drvdata(rdev); 212 217 int ret = -EINVAL; 213 218 214 - if (info->vol_table && (index < (1 << info->vol_nbits))) { 219 + if (info->vol_table && (index < rdev->desc->n_voltages)) { 215 220 ret = info->vol_table[index]; 216 221 if (info->slope_double) 217 222 ret <<= 1; ··· 219 224 return ret; 220 225 } 221 226 222 - static int choose_voltage(struct regulator_dev *rdev, int min_uV, int max_uV) 227 + static int pm8607_set_voltage_sel(struct regulator_dev *rdev, unsigned selector) 223 228 { 224 229 struct pm8607_regulator_info *info = rdev_get_drvdata(rdev); 225 - int i, ret = -ENOENT; 226 - 227 - if (info->slope_double) { 228 - min_uV = min_uV >> 1; 229 - max_uV = max_uV >> 1; 230 - } 231 - if (info->vol_table) { 232 - for (i = 0; i < (1 << info->vol_nbits); i++) { 233 - if (!info->vol_table[i]) 234 - break; 235 - if ((min_uV <= info->vol_table[i]) 236 - && (max_uV >= info->vol_table[i])) { 237 - ret = i; 238 - break; 239 - } 240 - } 241 - } 242 - if (ret < 0) 243 - pr_err("invalid voltage range (%d %d) uV\n", min_uV, max_uV); 244 - return ret; 245 - } 246 - 247 - static int pm8607_set_voltage(struct regulator_dev *rdev, 248 - int min_uV, int max_uV, unsigned *selector) 249 - { 250 - struct pm8607_regulator_info *info = rdev_get_drvdata(rdev); 251 - uint8_t val, mask; 230 + uint8_t val; 252 231 int ret; 253 232 254 - if (min_uV > max_uV) { 255 - pr_err("invalid voltage range (%d, %d) uV\n", min_uV, max_uV); 256 - return -EINVAL; 257 - } 233 + val = (uint8_t)(selector << (ffs(rdev->desc->vsel_mask) - 1)); 258 234 259 - ret = choose_voltage(rdev, min_uV, max_uV); 260 - if (ret < 0) 261 - return -EINVAL; 262 - *selector = ret; 263 - val = (uint8_t)(ret << info->vol_shift); 264 - mask = ((1 << info->vol_nbits) - 1) << info->vol_shift; 265 - 266 - ret = pm860x_set_bits(info->i2c, info->vol_reg, mask, val); 235 + ret = pm860x_set_bits(info->i2c, rdev->desc->vsel_reg, 236 + rdev->desc->vsel_mask, val); 267 237 if (ret) 268 238 return ret; 269 239 switch (info->desc.id) { ··· 242 282 return ret; 243 283 } 244 284 245 - static int pm8607_get_voltage(struct regulator_dev *rdev) 246 - { 247 - struct pm8607_regulator_info *info = rdev_get_drvdata(rdev); 248 - uint8_t val, mask; 249 - int ret; 250 - 251 - ret = pm860x_reg_read(info->i2c, info->vol_reg); 252 - if (ret < 0) 253 - return ret; 254 - 255 - mask = ((1 << info->vol_nbits) - 1) << info->vol_shift; 256 - val = ((unsigned char)ret & mask) >> info->vol_shift; 257 - 258 - return pm8607_list_voltage(rdev, val); 259 - } 260 - 261 - static int pm8607_enable(struct regulator_dev *rdev) 262 - { 263 - struct pm8607_regulator_info *info = rdev_get_drvdata(rdev); 264 - 265 - return pm860x_set_bits(info->i2c, info->enable_reg, 266 - 1 << info->enable_bit, 267 - 1 << info->enable_bit); 268 - } 269 - 270 - static int pm8607_disable(struct regulator_dev *rdev) 271 - { 272 - struct pm8607_regulator_info *info = rdev_get_drvdata(rdev); 273 - 274 - return pm860x_set_bits(info->i2c, info->enable_reg, 275 - 1 << info->enable_bit, 0); 276 - } 277 - 278 - static int pm8607_is_enabled(struct regulator_dev *rdev) 279 - { 280 - struct pm8607_regulator_info *info = rdev_get_drvdata(rdev); 281 - int ret; 282 - 283 - ret = pm860x_reg_read(info->i2c, info->enable_reg); 284 - if (ret < 0) 285 - return ret; 286 - 287 - return !!((unsigned char)ret & (1 << info->enable_bit)); 288 - } 289 - 290 285 static struct regulator_ops pm8607_regulator_ops = { 291 - .set_voltage = pm8607_set_voltage, 292 - .get_voltage = pm8607_get_voltage, 293 - .enable = pm8607_enable, 294 - .disable = pm8607_disable, 295 - .is_enabled = pm8607_is_enabled, 286 + .list_voltage = pm8607_list_voltage, 287 + .set_voltage_sel = pm8607_set_voltage_sel, 288 + .get_voltage_sel = regulator_get_voltage_sel_regmap, 289 + .enable = regulator_enable_regmap, 290 + .disable = regulator_disable_regmap, 291 + .is_enabled = regulator_is_enabled_regmap, 296 292 }; 297 293 298 - #define PM8607_DVC(vreg, nbits, ureg, ubit, ereg, ebit) \ 294 + #define PM8607_DVC(vreg, ureg, ubit, ereg, ebit) \ 299 295 { \ 300 296 .desc = { \ 301 297 .name = #vreg, \ ··· 259 343 .type = REGULATOR_VOLTAGE, \ 260 344 .id = PM8607_ID_##vreg, \ 261 345 .owner = THIS_MODULE, \ 346 + .n_voltages = ARRAY_SIZE(vreg##_table), \ 347 + .vsel_reg = PM8607_##vreg, \ 348 + .vsel_mask = ARRAY_SIZE(vreg##_table) - 1, \ 349 + .enable_reg = PM8607_##ereg, \ 350 + .enable_mask = 1 << (ebit), \ 262 351 }, \ 263 - .vol_reg = PM8607_##vreg, \ 264 - .vol_shift = (0), \ 265 - .vol_nbits = (nbits), \ 266 352 .update_reg = PM8607_##ureg, \ 267 353 .update_bit = (ubit), \ 268 - .enable_reg = PM8607_##ereg, \ 269 - .enable_bit = (ebit), \ 270 354 .slope_double = (0), \ 271 355 .vol_table = (unsigned int *)&vreg##_table, \ 272 356 .vol_suspend = (unsigned int *)&vreg##_suspend_table, \ 273 357 } 274 358 275 - #define PM8607_LDO(_id, vreg, shift, nbits, ereg, ebit) \ 359 + #define PM8607_LDO(_id, vreg, shift, ereg, ebit) \ 276 360 { \ 277 361 .desc = { \ 278 362 .name = "LDO" #_id, \ ··· 280 364 .type = REGULATOR_VOLTAGE, \ 281 365 .id = PM8607_ID_LDO##_id, \ 282 366 .owner = THIS_MODULE, \ 367 + .n_voltages = ARRAY_SIZE(LDO##_id##_table), \ 368 + .vsel_reg = PM8607_##vreg, \ 369 + .vsel_mask = (ARRAY_SIZE(LDO##_id##_table) - 1) << (shift), \ 370 + .enable_reg = PM8607_##ereg, \ 371 + .enable_mask = 1 << (ebit), \ 283 372 }, \ 284 - .vol_reg = PM8607_##vreg, \ 285 - .vol_shift = (shift), \ 286 - .vol_nbits = (nbits), \ 287 - .enable_reg = PM8607_##ereg, \ 288 - .enable_bit = (ebit), \ 289 373 .slope_double = (0), \ 290 374 .vol_table = (unsigned int *)&LDO##_id##_table, \ 291 375 .vol_suspend = (unsigned int *)&LDO##_id##_suspend_table, \ 292 376 } 293 377 294 378 static struct pm8607_regulator_info pm8607_regulator_info[] = { 295 - PM8607_DVC(BUCK1, 6, GO, 0, SUPPLIES_EN11, 0), 296 - PM8607_DVC(BUCK2, 6, GO, 1, SUPPLIES_EN11, 1), 297 - PM8607_DVC(BUCK3, 6, GO, 2, SUPPLIES_EN11, 2), 379 + PM8607_DVC(BUCK1, GO, 0, SUPPLIES_EN11, 0), 380 + PM8607_DVC(BUCK2, GO, 1, SUPPLIES_EN11, 1), 381 + PM8607_DVC(BUCK3, GO, 2, SUPPLIES_EN11, 2), 298 382 299 - PM8607_LDO( 1, LDO1, 0, 2, SUPPLIES_EN11, 3), 300 - PM8607_LDO( 2, LDO2, 0, 3, SUPPLIES_EN11, 4), 301 - PM8607_LDO( 3, LDO3, 0, 3, SUPPLIES_EN11, 5), 302 - PM8607_LDO( 4, LDO4, 0, 3, SUPPLIES_EN11, 6), 303 - PM8607_LDO( 5, LDO5, 0, 2, SUPPLIES_EN11, 7), 304 - PM8607_LDO( 6, LDO6, 0, 3, SUPPLIES_EN12, 0), 305 - PM8607_LDO( 7, LDO7, 0, 3, SUPPLIES_EN12, 1), 306 - PM8607_LDO( 8, LDO8, 0, 3, SUPPLIES_EN12, 2), 307 - PM8607_LDO( 9, LDO9, 0, 3, SUPPLIES_EN12, 3), 308 - PM8607_LDO(10, LDO10, 0, 4, SUPPLIES_EN12, 4), 309 - PM8607_LDO(12, LDO12, 0, 4, SUPPLIES_EN12, 5), 310 - PM8607_LDO(13, VIBRATOR_SET, 1, 3, VIBRATOR_SET, 0), 311 - PM8607_LDO(14, LDO14, 0, 3, SUPPLIES_EN12, 6), 383 + PM8607_LDO(1, LDO1, 0, SUPPLIES_EN11, 3), 384 + PM8607_LDO(2, LDO2, 0, SUPPLIES_EN11, 4), 385 + PM8607_LDO(3, LDO3, 0, SUPPLIES_EN11, 5), 386 + PM8607_LDO(4, LDO4, 0, SUPPLIES_EN11, 6), 387 + PM8607_LDO(5, LDO5, 0, SUPPLIES_EN11, 7), 388 + PM8607_LDO(6, LDO6, 0, SUPPLIES_EN12, 0), 389 + PM8607_LDO(7, LDO7, 0, SUPPLIES_EN12, 1), 390 + PM8607_LDO(8, LDO8, 0, SUPPLIES_EN12, 2), 391 + PM8607_LDO(9, LDO9, 0, SUPPLIES_EN12, 3), 392 + PM8607_LDO(10, LDO10, 0, SUPPLIES_EN12, 4), 393 + PM8607_LDO(12, LDO12, 0, SUPPLIES_EN12, 5), 394 + PM8607_LDO(13, VIBRATOR_SET, 1, VIBRATOR_SET, 0), 395 + PM8607_LDO(14, LDO14, 0, SUPPLIES_EN12, 6), 312 396 }; 313 397 314 398 static int __devinit pm8607_regulator_probe(struct platform_device *pdev) ··· 316 400 struct pm860x_chip *chip = dev_get_drvdata(pdev->dev.parent); 317 401 struct pm8607_regulator_info *info = NULL; 318 402 struct regulator_init_data *pdata = pdev->dev.platform_data; 403 + struct regulator_config config = { }; 319 404 struct resource *res; 320 405 int i; 321 406 ··· 342 425 if ((i == PM8607_ID_BUCK3) && info->chip->buck3_double) 343 426 info->slope_double = 1; 344 427 428 + config.dev = &pdev->dev; 429 + config.init_data = pdata; 430 + config.driver_data = info; 431 + 432 + if (chip->id == CHIP_PM8607) 433 + config.regmap = chip->regmap; 434 + else 435 + config.regmap = chip->regmap_companion; 436 + 345 437 /* replace driver_data with info */ 346 - info->regulator = regulator_register(&info->desc, &pdev->dev, 347 - pdata, info, NULL); 438 + info->regulator = regulator_register(&info->desc, &config); 348 439 if (IS_ERR(info->regulator)) { 349 440 dev_err(&pdev->dev, "failed to register regulator %s\n", 350 441 info->desc.name);
+19 -2
drivers/regulator/Kconfig
··· 223 223 Say Y here to support the voltage regulators and convertors 224 224 on PCF50633 225 225 226 + config REGULATOR_RC5T583 227 + tristate "RICOH RC5T583 Power regulators" 228 + depends on MFD_RC5T583 229 + help 230 + Select this option to enable the power regulator of RICOH 231 + PMIC RC5T583. 232 + This driver supports the control of different power rails of device 233 + through regulator interface. The device supports multiple DCDC/LDO 234 + outputs which can be controlled by i2c communication. 235 + 226 236 config REGULATOR_S5M8767 227 237 tristate "Samsung S5M8767A voltage regulator" 228 238 depends on MFD_S5M_CORE ··· 278 268 audio amplifiers. 279 269 280 270 config REGULATOR_TPS62360 281 - tristate "TI TPS62360 Power Regulator" 271 + tristate "TI TPS6236x Power Regulator" 282 272 depends on I2C 283 273 select REGMAP_I2C 284 274 help 285 - This driver supports TPS62360 voltage regulator chip. This 275 + This driver supports TPS6236x voltage regulator chip. This 286 276 regulator is meant for processor core supply. This chip is 287 277 high-frequency synchronous step down dc-dc converter optimized 288 278 for battery-powered portable applications. ··· 303 293 This driver supports TPS6507X voltage regulator chips. TPS6507X provides 304 294 three step-down converters and two general-purpose LDO voltage regulators. 305 295 It supports TI's software based Class-2 SmartReflex implementation. 296 + 297 + config REGULATOR_TPS65090 298 + tristate "TI TPS65090 Power regulator" 299 + depends on MFD_TPS65090 300 + help 301 + This driver provides support for the voltage regulators on the 302 + TI TPS65090 PMIC. 306 303 307 304 config REGULATOR_TPS65217 308 305 tristate "TI TPS65217 Power regulators"
+3 -1
drivers/regulator/Makefile
··· 9 9 obj-$(CONFIG_REGULATOR_VIRTUAL_CONSUMER) += virtual.o 10 10 obj-$(CONFIG_REGULATOR_USERSPACE_CONSUMER) += userspace-consumer.o 11 11 12 - obj-$(CONFIG_REGULATOR_GPIO) += gpio-regulator.o 13 12 obj-$(CONFIG_REGULATOR_88PM8607) += 88pm8607.o 14 13 obj-$(CONFIG_REGULATOR_AAT2870) += aat2870-regulator.o 15 14 obj-$(CONFIG_REGULATOR_AB3100) += ab3100.o ··· 19 20 obj-$(CONFIG_REGULATOR_DA9052) += da9052-regulator.o 20 21 obj-$(CONFIG_REGULATOR_DBX500_PRCMU) += dbx500-prcmu.o 21 22 obj-$(CONFIG_REGULATOR_DB8500_PRCMU) += db8500-prcmu.o 23 + obj-$(CONFIG_REGULATOR_GPIO) += gpio-regulator.o 22 24 obj-$(CONFIG_REGULATOR_ISL6271A) += isl6271a-regulator.o 23 25 obj-$(CONFIG_REGULATOR_LP3971) += lp3971.o 24 26 obj-$(CONFIG_REGULATOR_LP3972) += lp3972.o ··· 35 35 obj-$(CONFIG_REGULATOR_MC13XXX_CORE) += mc13xxx-regulator-core.o 36 36 obj-$(CONFIG_REGULATOR_PCAP) += pcap-regulator.o 37 37 obj-$(CONFIG_REGULATOR_PCF50633) += pcf50633-regulator.o 38 + obj-$(CONFIG_REGULATOR_RC5T583) += rc5t583-regulator.o 38 39 obj-$(CONFIG_REGULATOR_S5M8767) += s5m8767.o 39 40 obj-$(CONFIG_REGULATOR_TPS6105X) += tps6105x-regulator.o 40 41 obj-$(CONFIG_REGULATOR_TPS62360) += tps62360-regulator.o 41 42 obj-$(CONFIG_REGULATOR_TPS65023) += tps65023-regulator.o 42 43 obj-$(CONFIG_REGULATOR_TPS6507X) += tps6507x-regulator.o 44 + obj-$(CONFIG_REGULATOR_TPS65090) += tps65090-regulator.o 43 45 obj-$(CONFIG_REGULATOR_TPS65217) += tps65217-regulator.o 44 46 obj-$(CONFIG_REGULATOR_TPS6524X) += tps6524x-regulator.o 45 47 obj-$(CONFIG_REGULATOR_TPS6586X) += tps6586x-regulator.o
+7 -2
drivers/regulator/aat2870-regulator.c
··· 178 178 static int aat2870_regulator_probe(struct platform_device *pdev) 179 179 { 180 180 struct aat2870_regulator *ri; 181 + struct regulator_config config = { 0 }; 181 182 struct regulator_dev *rdev; 182 183 183 184 ri = aat2870_get_regulator(pdev->id); ··· 188 187 } 189 188 ri->aat2870 = dev_get_drvdata(pdev->dev.parent); 190 189 191 - rdev = regulator_register(&ri->desc, &pdev->dev, 192 - pdev->dev.platform_data, ri, NULL); 190 + config.dev = &pdev->dev; 191 + config.driver_data = ri; 192 + config.init_data = pdev->dev.platform_data; 193 + 194 + rdev = regulator_register(&ri->desc, &config); 193 195 if (IS_ERR(rdev)) { 194 196 dev_err(&pdev->dev, "Failed to register regulator %s\n", 195 197 ri->desc.name); ··· 235 231 MODULE_DESCRIPTION("AnalogicTech AAT2870 Regulator"); 236 232 MODULE_LICENSE("GPL"); 237 233 MODULE_AUTHOR("Jin Park <jinyoungp@nvidia.com>"); 234 + MODULE_ALIAS("platform:aat2870-regulator");
+11 -18
drivers/regulator/ab3100.c
··· 338 338 return bestindex; 339 339 } 340 340 341 - static int ab3100_set_voltage_regulator(struct regulator_dev *reg, 342 - int min_uV, int max_uV, 343 - unsigned *selector) 341 + static int ab3100_set_voltage_regulator_sel(struct regulator_dev *reg, 342 + unsigned selector) 344 343 { 345 344 struct ab3100_regulator *abreg = reg->reg_data; 346 345 u8 regval; 347 346 int err; 348 - int bestindex; 349 - 350 - bestindex = ab3100_get_best_voltage_index(reg, min_uV, max_uV); 351 - if (bestindex < 0) 352 - return bestindex; 353 - 354 - *selector = bestindex; 355 347 356 348 err = abx500_get_register_interruptible(abreg->dev, 0, 357 349 abreg->regreg, &regval); ··· 356 364 357 365 /* The highest three bits control the variable regulators */ 358 366 regval &= ~0xE0; 359 - regval |= (bestindex << 5); 367 + regval |= (selector << 5); 360 368 361 369 err = abx500_set_register_interruptible(abreg->dev, 0, 362 370 abreg->regreg, regval); ··· 456 464 .disable = ab3100_disable_regulator, 457 465 .is_enabled = ab3100_is_enabled_regulator, 458 466 .get_voltage = ab3100_get_voltage_regulator, 459 - .set_voltage = ab3100_set_voltage_regulator, 467 + .set_voltage_sel = ab3100_set_voltage_regulator_sel, 460 468 .list_voltage = ab3100_list_voltage_regulator, 461 469 .enable_time = ab3100_enable_time_regulator, 462 470 }; ··· 466 474 .disable = ab3100_disable_regulator, 467 475 .is_enabled = ab3100_is_enabled_regulator, 468 476 .get_voltage = ab3100_get_voltage_regulator, 469 - .set_voltage = ab3100_set_voltage_regulator, 477 + .set_voltage_sel = ab3100_set_voltage_regulator_sel, 470 478 .set_suspend_voltage = ab3100_set_suspend_voltage_regulator, 471 479 .list_voltage = ab3100_list_voltage_regulator, 472 480 .enable_time = ab3100_enable_time_regulator, ··· 574 582 static int __devinit ab3100_regulators_probe(struct platform_device *pdev) 575 583 { 576 584 struct ab3100_platform_data *plfdata = pdev->dev.platform_data; 585 + struct regulator_config config = { }; 577 586 int err = 0; 578 587 u8 data; 579 588 int i; ··· 620 627 reg->dev = &pdev->dev; 621 628 reg->plfdata = plfdata; 622 629 630 + config.dev = &pdev->dev; 631 + config.driver_data = reg; 632 + config.init_data = &plfdata->reg_constraints[i]; 633 + 623 634 /* 624 635 * Register the regulator, pass around 625 636 * the ab3100_regulator struct 626 637 */ 627 - rdev = regulator_register(&ab3100_regulator_desc[i], 628 - &pdev->dev, 629 - &plfdata->reg_constraints[i], 630 - reg, NULL); 631 - 638 + rdev = regulator_register(&ab3100_regulator_desc[i], &config); 632 639 if (IS_ERR(rdev)) { 633 640 err = PTR_ERR(rdev); 634 641 dev_err(&pdev->dev,
+10 -33
drivers/regulator/ab8500.c
··· 234 234 return val; 235 235 } 236 236 237 - static int ab8500_get_best_voltage_index(struct regulator_dev *rdev, 238 - int min_uV, int max_uV) 239 - { 240 - struct ab8500_regulator_info *info = rdev_get_drvdata(rdev); 241 - int i; 242 - 243 - /* check the supported voltage */ 244 - for (i = 0; i < info->voltages_len; i++) { 245 - if ((info->voltages[i] >= min_uV) && 246 - (info->voltages[i] <= max_uV)) 247 - return i; 248 - } 249 - 250 - return -EINVAL; 251 - } 252 - 253 - static int ab8500_regulator_set_voltage(struct regulator_dev *rdev, 254 - int min_uV, int max_uV, 255 - unsigned *selector) 237 + static int ab8500_regulator_set_voltage_sel(struct regulator_dev *rdev, 238 + unsigned selector) 256 239 { 257 240 int ret; 258 241 struct ab8500_regulator_info *info = rdev_get_drvdata(rdev); ··· 246 263 return -EINVAL; 247 264 } 248 265 249 - /* get the appropriate voltages within the range */ 250 - ret = ab8500_get_best_voltage_index(rdev, min_uV, max_uV); 251 - if (ret < 0) { 252 - dev_err(rdev_get_dev(rdev), 253 - "couldn't get best voltage for regulator\n"); 254 - return ret; 255 - } 256 - 257 - *selector = ret; 258 - 259 266 /* set the registers for the request */ 260 - regval = (u8)ret; 267 + regval = (u8)selector; 261 268 ret = abx500_mask_and_set_register_interruptible(info->dev, 262 269 info->voltage_bank, info->voltage_reg, 263 270 info->voltage_mask, regval); ··· 292 319 .disable = ab8500_regulator_disable, 293 320 .is_enabled = ab8500_regulator_is_enabled, 294 321 .get_voltage_sel = ab8500_regulator_get_voltage_sel, 295 - .set_voltage = ab8500_regulator_set_voltage, 322 + .set_voltage_sel = ab8500_regulator_set_voltage_sel, 296 323 .list_voltage = ab8500_list_voltage, 297 324 .enable_time = ab8500_regulator_enable_time, 298 325 .set_voltage_time_sel = ab8500_regulator_set_voltage_time_sel, ··· 712 739 { 713 740 struct ab8500 *ab8500 = dev_get_drvdata(pdev->dev.parent); 714 741 struct ab8500_platform_data *pdata; 742 + struct regulator_config config = { }; 715 743 int i, err; 716 744 717 745 if (!ab8500) { ··· 780 806 info = &ab8500_regulator_info[i]; 781 807 info->dev = &pdev->dev; 782 808 809 + config.dev = &pdev->dev; 810 + config.init_data = &pdata->regulator[i]; 811 + config.driver_data = info; 812 + 783 813 /* fix for hardware before ab8500v2.0 */ 784 814 if (abx500_get_chip_id(info->dev) < 0x20) { 785 815 if (info->desc.id == AB8500_LDO_AUX3) { ··· 797 819 } 798 820 799 821 /* register regulator with framework */ 800 - info->regulator = regulator_register(&info->desc, &pdev->dev, 801 - &pdata->regulator[i], info, NULL); 822 + info->regulator = regulator_register(&info->desc, &config); 802 823 if (IS_ERR(info->regulator)) { 803 824 err = PTR_ERR(info->regulator); 804 825 dev_err(&pdev->dev, "failed to register regulator %s\n",
+10 -9
drivers/regulator/ad5398.c
··· 99 99 if (ad5398_calc_current(chip, selector) > max_uA) 100 100 return -EINVAL; 101 101 102 - dev_dbg(&client->dev, "changing current %dmA\n", 103 - ad5398_calc_current(chip, selector) / 1000); 102 + dev_dbg(&client->dev, "changing current %duA\n", 103 + ad5398_calc_current(chip, selector)); 104 104 105 105 /* read chip enable bit */ 106 106 ret = ad5398_read_reg(client, &data); ··· 184 184 .is_enabled = ad5398_is_enabled, 185 185 }; 186 186 187 - static struct regulator_desc ad5398_reg = { 187 + static const struct regulator_desc ad5398_reg = { 188 188 .name = "isink", 189 189 .id = 0, 190 190 .ops = &ad5398_ops, ··· 212 212 const struct i2c_device_id *id) 213 213 { 214 214 struct regulator_init_data *init_data = client->dev.platform_data; 215 + struct regulator_config config = { }; 215 216 struct ad5398_chip_info *chip; 216 217 const struct ad5398_current_data_format *df = 217 218 (struct ad5398_current_data_format *)id->driver_data; ··· 221 220 if (!init_data) 222 221 return -EINVAL; 223 222 224 - chip = kzalloc(sizeof(*chip), GFP_KERNEL); 223 + chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL); 225 224 if (!chip) 226 225 return -ENOMEM; 226 + 227 + config.dev = &client->dev; 228 + config.init_data = init_data; 229 + config.driver_data = chip; 227 230 228 231 chip->client = client; 229 232 ··· 237 232 chip->current_offset = df->current_offset; 238 233 chip->current_mask = (chip->current_level - 1) << chip->current_offset; 239 234 240 - chip->rdev = regulator_register(&ad5398_reg, &client->dev, 241 - init_data, chip, NULL); 235 + chip->rdev = regulator_register(&ad5398_reg, &config); 242 236 if (IS_ERR(chip->rdev)) { 243 237 ret = PTR_ERR(chip->rdev); 244 238 dev_err(&client->dev, "failed to register %s %s\n", ··· 250 246 return 0; 251 247 252 248 err: 253 - kfree(chip); 254 249 return ret; 255 250 } 256 251 ··· 258 255 struct ad5398_chip_info *chip = i2c_get_clientdata(client); 259 256 260 257 regulator_unregister(chip->rdev); 261 - kfree(chip); 262 - 263 258 return 0; 264 259 } 265 260
+7 -2
drivers/regulator/anatop-regulator.c
··· 122 122 struct anatop_regulator *sreg; 123 123 struct regulator_init_data *initdata; 124 124 struct anatop *anatopmfd = dev_get_drvdata(pdev->dev.parent); 125 + struct regulator_config config = { }; 125 126 int ret = 0; 126 127 127 128 initdata = of_get_regulator_init_data(dev, np); ··· 179 178 rdesc->n_voltages = (sreg->max_voltage - sreg->min_voltage) 180 179 / 25000 + 1; 181 180 181 + config.dev = &pdev->dev; 182 + config.init_data = initdata; 183 + config.driver_data = sreg; 184 + config.of_node = pdev->dev.of_node; 185 + 182 186 /* register regulator */ 183 - rdev = regulator_register(rdesc, dev, 184 - initdata, sreg, pdev->dev.of_node); 187 + rdev = regulator_register(rdesc, &config); 185 188 if (IS_ERR(rdev)) { 186 189 dev_err(dev, "failed to register %s\n", 187 190 rdesc->name);
+236 -92
drivers/regulator/core.c
··· 24 24 #include <linux/suspend.h> 25 25 #include <linux/delay.h> 26 26 #include <linux/of.h> 27 + #include <linux/regmap.h> 27 28 #include <linux/regulator/of_regulator.h> 28 29 #include <linux/regulator/consumer.h> 29 30 #include <linux/regulator/driver.h> ··· 75 74 struct regulator { 76 75 struct device *dev; 77 76 struct list_head list; 77 + unsigned int always_on:1; 78 78 int uA_load; 79 79 int min_uV; 80 80 int max_uV; ··· 155 153 return NULL; 156 154 } 157 155 return regnode; 156 + } 157 + 158 + static int _regulator_can_change_status(struct regulator_dev *rdev) 159 + { 160 + if (!rdev->constraints) 161 + return 0; 162 + 163 + if (rdev->constraints->valid_ops_mask & REGULATOR_CHANGE_STATUS) 164 + return 1; 165 + else 166 + return 0; 158 167 } 159 168 160 169 /* Platform voltage constraint check */ ··· 662 649 /* get input voltage */ 663 650 input_uV = 0; 664 651 if (rdev->supply) 665 - input_uV = _regulator_get_voltage(rdev); 652 + input_uV = regulator_get_voltage(rdev->supply); 666 653 if (input_uV <= 0) 667 654 input_uV = rdev->constraints->input_uV; 668 655 if (input_uV <= 0) ··· 686 673 struct regulator_state *rstate) 687 674 { 688 675 int ret = 0; 689 - bool can_set_state; 690 - 691 - can_set_state = rdev->desc->ops->set_suspend_enable && 692 - rdev->desc->ops->set_suspend_disable; 693 676 694 677 /* If we have no suspend mode configration don't set anything; 695 - * only warn if the driver actually makes the suspend mode 696 - * configurable. 678 + * only warn if the driver implements set_suspend_voltage or 679 + * set_suspend_mode callback. 697 680 */ 698 681 if (!rstate->enabled && !rstate->disabled) { 699 - if (can_set_state) 682 + if (rdev->desc->ops->set_suspend_voltage || 683 + rdev->desc->ops->set_suspend_mode) 700 684 rdev_warn(rdev, "No configuration\n"); 701 685 return 0; 702 686 } ··· 703 693 return -EINVAL; 704 694 } 705 695 706 - if (!can_set_state) { 707 - rdev_err(rdev, "no way to set suspend state\n"); 708 - return -EINVAL; 709 - } 710 - 711 - if (rstate->enabled) 696 + if (rstate->enabled && rdev->desc->ops->set_suspend_enable) 712 697 ret = rdev->desc->ops->set_suspend_enable(rdev); 713 - else 698 + else if (rstate->disabled && rdev->desc->ops->set_suspend_disable) 714 699 ret = rdev->desc->ops->set_suspend_disable(rdev); 700 + else /* OK if set_suspend_enable or set_suspend_disable is NULL */ 701 + ret = 0; 702 + 715 703 if (ret < 0) { 716 704 rdev_err(rdev, "failed to enabled/disable\n"); 717 705 return ret; ··· 1154 1146 &regulator->max_uV); 1155 1147 } 1156 1148 1149 + /* 1150 + * Check now if the regulator is an always on regulator - if 1151 + * it is then we don't need to do nearly so much work for 1152 + * enable/disable calls. 1153 + */ 1154 + if (!_regulator_can_change_status(rdev) && 1155 + _regulator_is_enabled(rdev)) 1156 + regulator->always_on = true; 1157 + 1157 1158 mutex_unlock(&rdev->mutex); 1158 1159 return regulator; 1159 1160 link_name_err: ··· 1186 1169 } 1187 1170 1188 1171 static struct regulator_dev *regulator_dev_lookup(struct device *dev, 1189 - const char *supply) 1172 + const char *supply, 1173 + int *ret) 1190 1174 { 1191 1175 struct regulator_dev *r; 1192 1176 struct device_node *node; 1177 + struct regulator_map *map; 1178 + const char *devname = NULL; 1193 1179 1194 1180 /* first do a dt based lookup */ 1195 1181 if (dev && dev->of_node) { 1196 1182 node = of_get_regulator(dev, supply); 1197 - if (node) 1183 + if (node) { 1198 1184 list_for_each_entry(r, &regulator_list, list) 1199 1185 if (r->dev.parent && 1200 1186 node == r->dev.of_node) 1201 1187 return r; 1188 + } else { 1189 + /* 1190 + * If we couldn't even get the node then it's 1191 + * not just that the device didn't register 1192 + * yet, there's no node and we'll never 1193 + * succeed. 1194 + */ 1195 + *ret = -ENODEV; 1196 + } 1202 1197 } 1203 1198 1204 1199 /* if not found, try doing it non-dt way */ 1200 + if (dev) 1201 + devname = dev_name(dev); 1202 + 1205 1203 list_for_each_entry(r, &regulator_list, list) 1206 1204 if (strcmp(rdev_get_name(r), supply) == 0) 1207 1205 return r; 1206 + 1207 + list_for_each_entry(map, &regulator_map_list, list) { 1208 + /* If the mapping has a device set up it must match */ 1209 + if (map->dev_name && 1210 + (!devname || strcmp(map->dev_name, devname))) 1211 + continue; 1212 + 1213 + if (strcmp(map->supply, supply) == 0) 1214 + return map->regulator; 1215 + } 1216 + 1208 1217 1209 1218 return NULL; 1210 1219 } ··· 1240 1197 int exclusive) 1241 1198 { 1242 1199 struct regulator_dev *rdev; 1243 - struct regulator_map *map; 1244 1200 struct regulator *regulator = ERR_PTR(-EPROBE_DEFER); 1245 1201 const char *devname = NULL; 1246 1202 int ret; ··· 1254 1212 1255 1213 mutex_lock(&regulator_list_mutex); 1256 1214 1257 - rdev = regulator_dev_lookup(dev, id); 1215 + rdev = regulator_dev_lookup(dev, id, &ret); 1258 1216 if (rdev) 1259 1217 goto found; 1260 - 1261 - list_for_each_entry(map, &regulator_map_list, list) { 1262 - /* If the mapping has a device set up it must match */ 1263 - if (map->dev_name && 1264 - (!devname || strcmp(map->dev_name, devname))) 1265 - continue; 1266 - 1267 - if (strcmp(map->supply, id) == 0) { 1268 - rdev = map->regulator; 1269 - goto found; 1270 - } 1271 - } 1272 1218 1273 1219 if (board_wants_dummy_regulator) { 1274 1220 rdev = dummy_regulator_rdev; ··· 1465 1435 } 1466 1436 EXPORT_SYMBOL_GPL(devm_regulator_put); 1467 1437 1468 - static int _regulator_can_change_status(struct regulator_dev *rdev) 1469 - { 1470 - if (!rdev->constraints) 1471 - return 0; 1472 - 1473 - if (rdev->constraints->valid_ops_mask & REGULATOR_CHANGE_STATUS) 1474 - return 1; 1475 - else 1476 - return 0; 1477 - } 1478 - 1479 1438 /* locks held by regulator_enable() */ 1480 1439 static int _regulator_enable(struct regulator_dev *rdev) 1481 1440 { ··· 1544 1525 struct regulator_dev *rdev = regulator->rdev; 1545 1526 int ret = 0; 1546 1527 1528 + if (regulator->always_on) 1529 + return 0; 1530 + 1547 1531 if (rdev->supply) { 1548 1532 ret = regulator_enable(rdev->supply); 1549 1533 if (ret != 0) ··· 1624 1602 { 1625 1603 struct regulator_dev *rdev = regulator->rdev; 1626 1604 int ret = 0; 1605 + 1606 + if (regulator->always_on) 1607 + return 0; 1627 1608 1628 1609 mutex_lock(&rdev->mutex); 1629 1610 ret = _regulator_disable(rdev); ··· 1736 1711 struct regulator_dev *rdev = regulator->rdev; 1737 1712 int ret; 1738 1713 1714 + if (regulator->always_on) 1715 + return 0; 1716 + 1739 1717 mutex_lock(&rdev->mutex); 1740 1718 rdev->deferred_disables++; 1741 1719 mutex_unlock(&rdev->mutex); ··· 1751 1723 return 0; 1752 1724 } 1753 1725 EXPORT_SYMBOL_GPL(regulator_disable_deferred); 1726 + 1727 + /** 1728 + * regulator_is_enabled_regmap - standard is_enabled() for regmap users 1729 + * 1730 + * @rdev: regulator to operate on 1731 + * 1732 + * Regulators that use regmap for their register I/O can set the 1733 + * enable_reg and enable_mask fields in their descriptor and then use 1734 + * this as their is_enabled operation, saving some code. 1735 + */ 1736 + int regulator_is_enabled_regmap(struct regulator_dev *rdev) 1737 + { 1738 + unsigned int val; 1739 + int ret; 1740 + 1741 + ret = regmap_read(rdev->regmap, rdev->desc->enable_reg, &val); 1742 + if (ret != 0) 1743 + return ret; 1744 + 1745 + return (val & rdev->desc->enable_mask) != 0; 1746 + } 1747 + EXPORT_SYMBOL_GPL(regulator_is_enabled_regmap); 1748 + 1749 + /** 1750 + * regulator_enable_regmap - standard enable() for regmap users 1751 + * 1752 + * @rdev: regulator to operate on 1753 + * 1754 + * Regulators that use regmap for their register I/O can set the 1755 + * enable_reg and enable_mask fields in their descriptor and then use 1756 + * this as their enable() operation, saving some code. 1757 + */ 1758 + int regulator_enable_regmap(struct regulator_dev *rdev) 1759 + { 1760 + return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, 1761 + rdev->desc->enable_mask, 1762 + rdev->desc->enable_mask); 1763 + } 1764 + EXPORT_SYMBOL_GPL(regulator_enable_regmap); 1765 + 1766 + /** 1767 + * regulator_disable_regmap - standard disable() for regmap users 1768 + * 1769 + * @rdev: regulator to operate on 1770 + * 1771 + * Regulators that use regmap for their register I/O can set the 1772 + * enable_reg and enable_mask fields in their descriptor and then use 1773 + * this as their disable() operation, saving some code. 1774 + */ 1775 + int regulator_disable_regmap(struct regulator_dev *rdev) 1776 + { 1777 + return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, 1778 + rdev->desc->enable_mask, 0); 1779 + } 1780 + EXPORT_SYMBOL_GPL(regulator_disable_regmap); 1754 1781 1755 1782 static int _regulator_is_enabled(struct regulator_dev *rdev) 1756 1783 { ··· 1831 1748 int regulator_is_enabled(struct regulator *regulator) 1832 1749 { 1833 1750 int ret; 1751 + 1752 + if (regulator->always_on) 1753 + return 1; 1834 1754 1835 1755 mutex_lock(&regulator->rdev->mutex); 1836 1756 ret = _regulator_is_enabled(regulator->rdev); ··· 1923 1837 } 1924 1838 EXPORT_SYMBOL_GPL(regulator_is_supported_voltage); 1925 1839 1840 + /** 1841 + * regulator_get_voltage_sel_regmap - standard get_voltage_sel for regmap users 1842 + * 1843 + * @rdev: regulator to operate on 1844 + * 1845 + * Regulators that use regmap for their register I/O can set the 1846 + * vsel_reg and vsel_mask fields in their descriptor and then use this 1847 + * as their get_voltage_vsel operation, saving some code. 1848 + */ 1849 + int regulator_get_voltage_sel_regmap(struct regulator_dev *rdev) 1850 + { 1851 + unsigned int val; 1852 + int ret; 1853 + 1854 + ret = regmap_read(rdev->regmap, rdev->desc->vsel_reg, &val); 1855 + if (ret != 0) 1856 + return ret; 1857 + 1858 + val &= rdev->desc->vsel_mask; 1859 + val >>= ffs(rdev->desc->vsel_mask) - 1; 1860 + 1861 + return val; 1862 + } 1863 + EXPORT_SYMBOL_GPL(regulator_get_voltage_sel_regmap); 1864 + 1865 + /** 1866 + * regulator_set_voltage_sel_regmap - standard set_voltage_sel for regmap users 1867 + * 1868 + * @rdev: regulator to operate on 1869 + * @sel: Selector to set 1870 + * 1871 + * Regulators that use regmap for their register I/O can set the 1872 + * vsel_reg and vsel_mask fields in their descriptor and then use this 1873 + * as their set_voltage_vsel operation, saving some code. 1874 + */ 1875 + int regulator_set_voltage_sel_regmap(struct regulator_dev *rdev, unsigned sel) 1876 + { 1877 + sel <<= ffs(rdev->desc->vsel_mask) - 1; 1878 + 1879 + return regmap_update_bits(rdev->regmap, rdev->desc->vsel_reg, 1880 + rdev->desc->vsel_mask, sel); 1881 + } 1882 + EXPORT_SYMBOL_GPL(regulator_set_voltage_sel_regmap); 1883 + 1926 1884 static int _regulator_do_set_voltage(struct regulator_dev *rdev, 1927 1885 int min_uV, int max_uV) 1928 1886 { 1929 1887 int ret; 1930 1888 int delay = 0; 1931 1889 unsigned int selector; 1890 + int old_selector = -1; 1891 + int best_val = INT_MAX; 1932 1892 1933 1893 trace_regulator_set_voltage(rdev_get_name(rdev), min_uV, max_uV); 1934 1894 1935 1895 min_uV += rdev->constraints->uV_offset; 1936 1896 max_uV += rdev->constraints->uV_offset; 1937 1897 1898 + /* 1899 + * If we can't obtain the old selector there is not enough 1900 + * info to call set_voltage_time_sel(). 1901 + */ 1902 + if (rdev->desc->ops->set_voltage_time_sel && 1903 + rdev->desc->ops->get_voltage_sel) { 1904 + old_selector = rdev->desc->ops->get_voltage_sel(rdev); 1905 + if (old_selector < 0) 1906 + return old_selector; 1907 + } 1908 + 1938 1909 if (rdev->desc->ops->set_voltage) { 1939 1910 ret = rdev->desc->ops->set_voltage(rdev, min_uV, max_uV, 1940 1911 &selector); 1941 1912 1942 1913 if (rdev->desc->ops->list_voltage) 1943 - selector = rdev->desc->ops->list_voltage(rdev, 1914 + best_val = rdev->desc->ops->list_voltage(rdev, 1944 1915 selector); 1945 1916 else 1946 - selector = -1; 1917 + best_val = -1; 1947 1918 } else if (rdev->desc->ops->set_voltage_sel) { 1948 - int best_val = INT_MAX; 1949 1919 int i; 1950 1920 1951 1921 selector = 0; ··· 2020 1878 } 2021 1879 } 2022 1880 2023 - /* 2024 - * If we can't obtain the old selector there is not enough 2025 - * info to call set_voltage_time_sel(). 2026 - */ 2027 - if (rdev->desc->ops->set_voltage_time_sel && 2028 - rdev->desc->ops->get_voltage_sel) { 2029 - unsigned int old_selector = 0; 2030 - 2031 - ret = rdev->desc->ops->get_voltage_sel(rdev); 2032 - if (ret < 0) 2033 - return ret; 2034 - old_selector = ret; 2035 - ret = rdev->desc->ops->set_voltage_time_sel(rdev, 2036 - old_selector, selector); 2037 - if (ret < 0) 2038 - rdev_warn(rdev, "set_voltage_time_sel() failed: %d\n", ret); 2039 - else 2040 - delay = ret; 2041 - } 2042 - 2043 - if (best_val != INT_MAX) { 1881 + if (best_val != INT_MAX) 2044 1882 ret = rdev->desc->ops->set_voltage_sel(rdev, selector); 2045 - selector = best_val; 2046 - } else { 1883 + else 2047 1884 ret = -EINVAL; 2048 - } 2049 1885 } else { 2050 1886 ret = -EINVAL; 1887 + } 1888 + 1889 + /* Call set_voltage_time_sel if successfully obtained old_selector */ 1890 + if (ret == 0 && old_selector >= 0 && 1891 + rdev->desc->ops->set_voltage_time_sel) { 1892 + 1893 + delay = rdev->desc->ops->set_voltage_time_sel(rdev, 1894 + old_selector, selector); 1895 + if (delay < 0) { 1896 + rdev_warn(rdev, "set_voltage_time_sel() failed: %d\n", 1897 + delay); 1898 + delay = 0; 1899 + } 2051 1900 } 2052 1901 2053 1902 /* Insert any necessary delays */ ··· 2053 1920 _notifier_call_chain(rdev, REGULATOR_EVENT_VOLTAGE_CHANGE, 2054 1921 NULL); 2055 1922 2056 - trace_regulator_set_voltage_complete(rdev_get_name(rdev), selector); 1923 + trace_regulator_set_voltage_complete(rdev_get_name(rdev), best_val); 2057 1924 2058 1925 return ret; 2059 1926 } ··· 2457 2324 */ 2458 2325 ret = -EINVAL; 2459 2326 2327 + if (!rdev->desc->ops->set_mode) 2328 + goto out; 2329 + 2460 2330 /* get output voltage */ 2461 2331 output_uV = _regulator_get_voltage(rdev); 2462 2332 if (output_uV <= 0) { ··· 2661 2525 int i; 2662 2526 int ret = 0; 2663 2527 2664 - for (i = 0; i < num_consumers; i++) 2665 - async_schedule_domain(regulator_bulk_enable_async, 2666 - &consumers[i], &async_domain); 2528 + for (i = 0; i < num_consumers; i++) { 2529 + if (consumers[i].consumer->always_on) 2530 + consumers[i].ret = 0; 2531 + else 2532 + async_schedule_domain(regulator_bulk_enable_async, 2533 + &consumers[i], &async_domain); 2534 + } 2667 2535 2668 2536 async_synchronize_full_domain(&async_domain); 2669 2537 ··· 2706 2566 struct regulator_bulk_data *consumers) 2707 2567 { 2708 2568 int i; 2709 - int ret; 2569 + int ret, r; 2710 2570 2711 2571 for (i = num_consumers - 1; i >= 0; --i) { 2712 2572 ret = regulator_disable(consumers[i].consumer); ··· 2718 2578 2719 2579 err: 2720 2580 pr_err("Failed to disable %s: %d\n", consumers[i].supply, ret); 2721 - for (++i; i < num_consumers; ++i) 2722 - regulator_enable(consumers[i].consumer); 2581 + for (++i; i < num_consumers; ++i) { 2582 + r = regulator_enable(consumers[i].consumer); 2583 + if (r != 0) 2584 + pr_err("Failed to reename %s: %d\n", 2585 + consumers[i].supply, r); 2586 + } 2723 2587 2724 2588 return ret; 2725 2589 } ··· 2900 2756 return status; 2901 2757 } 2902 2758 2903 - /* suspend mode constraints need multiple supporting methods */ 2904 - if (!(ops->set_suspend_enable && ops->set_suspend_disable)) 2905 - return status; 2906 - 2907 2759 status = device_create_file(dev, &dev_attr_suspend_standby_state); 2908 2760 if (status < 0) 2909 2761 return status; ··· 2960 2820 /** 2961 2821 * regulator_register - register regulator 2962 2822 * @regulator_desc: regulator to register 2963 - * @dev: struct device for the regulator 2964 - * @init_data: platform provided init data, passed through by driver 2965 - * @driver_data: private regulator data 2966 - * @of_node: OpenFirmware node to parse for device tree bindings (may be 2967 - * NULL). 2823 + * @config: runtime configuration for regulator 2968 2824 * 2969 2825 * Called by regulator drivers to register a regulator. 2970 2826 * Returns 0 on success. 2971 2827 */ 2972 - struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc, 2973 - struct device *dev, const struct regulator_init_data *init_data, 2974 - void *driver_data, struct device_node *of_node) 2828 + struct regulator_dev * 2829 + regulator_register(const struct regulator_desc *regulator_desc, 2830 + const struct regulator_config *config) 2975 2831 { 2976 2832 const struct regulation_constraints *constraints = NULL; 2833 + const struct regulator_init_data *init_data; 2977 2834 static atomic_t regulator_no = ATOMIC_INIT(0); 2978 2835 struct regulator_dev *rdev; 2836 + struct device *dev; 2979 2837 int ret, i; 2980 2838 const char *supply = NULL; 2981 2839 2982 - if (regulator_desc == NULL) 2840 + if (regulator_desc == NULL || config == NULL) 2983 2841 return ERR_PTR(-EINVAL); 2842 + 2843 + dev = config->dev; 2844 + WARN_ON(!dev); 2984 2845 2985 2846 if (regulator_desc->name == NULL || regulator_desc->ops == NULL) 2986 2847 return ERR_PTR(-EINVAL); ··· 3006 2865 return ERR_PTR(-EINVAL); 3007 2866 } 3008 2867 2868 + init_data = config->init_data; 2869 + 3009 2870 rdev = kzalloc(sizeof(struct regulator_dev), GFP_KERNEL); 3010 2871 if (rdev == NULL) 3011 2872 return ERR_PTR(-ENOMEM); ··· 3015 2872 mutex_lock(&regulator_list_mutex); 3016 2873 3017 2874 mutex_init(&rdev->mutex); 3018 - rdev->reg_data = driver_data; 2875 + rdev->reg_data = config->driver_data; 3019 2876 rdev->owner = regulator_desc->owner; 3020 2877 rdev->desc = regulator_desc; 2878 + rdev->regmap = config->regmap; 3021 2879 INIT_LIST_HEAD(&rdev->consumer_list); 3022 2880 INIT_LIST_HEAD(&rdev->list); 3023 2881 BLOCKING_INIT_NOTIFIER_HEAD(&rdev->notifier); ··· 3033 2889 3034 2890 /* register with sysfs */ 3035 2891 rdev->dev.class = &regulator_class; 3036 - rdev->dev.of_node = of_node; 2892 + rdev->dev.of_node = config->of_node; 3037 2893 rdev->dev.parent = dev; 3038 2894 dev_set_name(&rdev->dev, "regulator.%d", 3039 2895 atomic_inc_return(&regulator_no) - 1); ··· 3066 2922 if (supply) { 3067 2923 struct regulator_dev *r; 3068 2924 3069 - r = regulator_dev_lookup(dev, supply); 2925 + r = regulator_dev_lookup(dev, supply, &ret); 3070 2926 3071 2927 if (!r) { 3072 2928 dev_err(dev, "Failed to find supply %s\n", supply);
+6 -2
drivers/regulator/da903x.c
··· 517 517 { 518 518 struct da903x_regulator_info *ri = NULL; 519 519 struct regulator_dev *rdev; 520 + struct regulator_config config = { }; 520 521 521 522 ri = find_regulator_info(pdev->id); 522 523 if (ri == NULL) { ··· 537 536 if (ri->desc.id == DA9030_ID_LDO1 || ri->desc.id == DA9030_ID_LDO15) 538 537 ri->desc.ops = &da9030_regulator_ldo1_15_ops; 539 538 540 - rdev = regulator_register(&ri->desc, &pdev->dev, 541 - pdev->dev.platform_data, ri, NULL); 539 + config.dev = &pdev->dev; 540 + config.init_data = pdev->dev.platform_data; 541 + config.driver_data = ri; 542 + 543 + rdev = regulator_register(&ri->desc, &config); 542 544 if (IS_ERR(rdev)) { 543 545 dev_err(&pdev->dev, "failed to register regulator %s\n", 544 546 ri->desc.name);
+138 -295
drivers/regulator/da9052-regulator.c
··· 19 19 #include <linux/platform_device.h> 20 20 #include <linux/regulator/driver.h> 21 21 #include <linux/regulator/machine.h> 22 + #ifdef CONFIG_OF 23 + #include <linux/regulator/of_regulator.h> 24 + #endif 22 25 23 26 #include <linux/mfd/da9052/da9052.h> 24 27 #include <linux/mfd/da9052/reg.h> ··· 40 37 #define DA9052_BUCK_ILIM_MASK_EVEN 0x0c 41 38 #define DA9052_BUCK_ILIM_MASK_ODD 0xc0 42 39 40 + /* DA9052 REGULATOR IDs */ 41 + #define DA9052_ID_BUCK1 0 42 + #define DA9052_ID_BUCK2 1 43 + #define DA9052_ID_BUCK3 2 44 + #define DA9052_ID_BUCK4 3 45 + #define DA9052_ID_LDO1 4 46 + #define DA9052_ID_LDO2 5 47 + #define DA9052_ID_LDO3 6 48 + #define DA9052_ID_LDO4 7 49 + #define DA9052_ID_LDO5 8 50 + #define DA9052_ID_LDO6 9 51 + #define DA9052_ID_LDO7 10 52 + #define DA9052_ID_LDO8 11 53 + #define DA9052_ID_LDO9 12 54 + #define DA9052_ID_LDO10 13 55 + 43 56 static const u32 da9052_current_limits[3][4] = { 44 57 {700000, 800000, 1000000, 1200000}, /* DA9052-BC BUCKs */ 45 58 {1600000, 2000000, 2400000, 3000000}, /* DA9053-AA/Bx BUCK-CORE */ ··· 69 50 int step_uV; 70 51 int min_uV; 71 52 int max_uV; 72 - unsigned char volt_shift; 73 - unsigned char en_bit; 74 53 unsigned char activate_bit; 75 54 }; 76 55 ··· 85 68 return -EINVAL; 86 69 87 70 return 0; 88 - } 89 - 90 - static int da9052_regulator_enable(struct regulator_dev *rdev) 91 - { 92 - struct da9052_regulator *regulator = rdev_get_drvdata(rdev); 93 - struct da9052_regulator_info *info = regulator->info; 94 - int offset = rdev_get_id(rdev); 95 - 96 - return da9052_reg_update(regulator->da9052, 97 - DA9052_BUCKCORE_REG + offset, 98 - 1 << info->en_bit, 1 << info->en_bit); 99 - } 100 - 101 - static int da9052_regulator_disable(struct regulator_dev *rdev) 102 - { 103 - struct da9052_regulator *regulator = rdev_get_drvdata(rdev); 104 - struct da9052_regulator_info *info = regulator->info; 105 - int offset = rdev_get_id(rdev); 106 - 107 - return da9052_reg_update(regulator->da9052, 108 - DA9052_BUCKCORE_REG + offset, 109 - 1 << info->en_bit, 0); 110 - } 111 - 112 - static int da9052_regulator_is_enabled(struct regulator_dev *rdev) 113 - { 114 - struct da9052_regulator *regulator = rdev_get_drvdata(rdev); 115 - struct da9052_regulator_info *info = regulator->info; 116 - int offset = rdev_get_id(rdev); 117 - int ret; 118 - 119 - ret = da9052_reg_read(regulator->da9052, DA9052_BUCKCORE_REG + offset); 120 - if (ret < 0) 121 - return ret; 122 - 123 - return ret & (1 << info->en_bit); 124 71 } 125 72 126 73 static int da9052_dcdc_get_current_limit(struct regulator_dev *rdev) ··· 154 173 reg_val << 6); 155 174 } 156 175 157 - static int da9052_list_buckperi_voltage(struct regulator_dev *rdev, 158 - unsigned int selector) 159 - { 160 - struct da9052_regulator *regulator = rdev_get_drvdata(rdev); 161 - struct da9052_regulator_info *info = regulator->info; 162 - int volt_uV; 163 - 164 - if ((regulator->da9052->chip_id == DA9052) && 165 - (selector >= DA9052_BUCK_PERI_REG_MAP_UPTO_3uV)) { 166 - volt_uV = ((DA9052_BUCK_PERI_REG_MAP_UPTO_3uV * info->step_uV) 167 - + info->min_uV); 168 - volt_uV += (selector - DA9052_BUCK_PERI_REG_MAP_UPTO_3uV) 169 - * (DA9052_BUCK_PERI_3uV_STEP); 170 - } else 171 - volt_uV = (selector * info->step_uV) + info->min_uV; 172 - 173 - if (volt_uV > info->max_uV) 174 - return -EINVAL; 175 - 176 - return volt_uV; 177 - } 178 - 179 176 static int da9052_list_voltage(struct regulator_dev *rdev, 180 177 unsigned int selector) 181 178 { 182 179 struct da9052_regulator *regulator = rdev_get_drvdata(rdev); 183 180 struct da9052_regulator_info *info = regulator->info; 181 + int id = rdev_get_id(rdev); 184 182 int volt_uV; 185 183 186 - volt_uV = info->min_uV + info->step_uV * selector; 184 + if ((id == DA9052_ID_BUCK4) && (regulator->da9052->chip_id == DA9052) 185 + && (selector >= DA9052_BUCK_PERI_REG_MAP_UPTO_3uV)) { 186 + volt_uV = ((DA9052_BUCK_PERI_REG_MAP_UPTO_3uV * info->step_uV) 187 + + info->min_uV); 188 + volt_uV += (selector - DA9052_BUCK_PERI_REG_MAP_UPTO_3uV) 189 + * (DA9052_BUCK_PERI_3uV_STEP); 190 + } else { 191 + volt_uV = (selector * info->step_uV) + info->min_uV; 192 + } 187 193 188 194 if (volt_uV > info->max_uV) 189 195 return -EINVAL; ··· 178 210 return volt_uV; 179 211 } 180 212 181 - static int da9052_regulator_set_voltage_int(struct regulator_dev *rdev, 213 + static int da9052_regulator_set_voltage(struct regulator_dev *rdev, 182 214 int min_uV, int max_uV, 183 215 unsigned int *selector) 184 216 { 185 217 struct da9052_regulator *regulator = rdev_get_drvdata(rdev); 186 218 struct da9052_regulator_info *info = regulator->info; 187 - int offset = rdev_get_id(rdev); 219 + int id = rdev_get_id(rdev); 188 220 int ret; 189 221 190 222 ret = verify_range(info, min_uV, max_uV); ··· 194 226 if (min_uV < info->min_uV) 195 227 min_uV = info->min_uV; 196 228 197 - *selector = DIV_ROUND_UP(min_uV - info->min_uV, info->step_uV); 229 + if ((id == DA9052_ID_BUCK4) && (regulator->da9052->chip_id == DA9052) 230 + && (min_uV >= DA9052_CONST_3uV)) { 231 + *selector = DA9052_BUCK_PERI_REG_MAP_UPTO_3uV + 232 + DIV_ROUND_UP(min_uV - DA9052_CONST_3uV, 233 + DA9052_BUCK_PERI_3uV_STEP); 234 + } else { 235 + *selector = DIV_ROUND_UP(min_uV - info->min_uV, info->step_uV); 236 + } 198 237 199 238 ret = da9052_list_voltage(rdev, *selector); 200 239 if (ret < 0) 201 240 return ret; 202 241 203 - return da9052_reg_update(regulator->da9052, 204 - DA9052_BUCKCORE_REG + offset, 205 - (1 << info->volt_shift) - 1, *selector); 206 - } 207 - 208 - static int da9052_set_ldo_voltage(struct regulator_dev *rdev, 209 - int min_uV, int max_uV, 210 - unsigned int *selector) 211 - { 212 - return da9052_regulator_set_voltage_int(rdev, min_uV, max_uV, selector); 213 - } 214 - 215 - static int da9052_set_ldo5_6_voltage(struct regulator_dev *rdev, 216 - int min_uV, int max_uV, 217 - unsigned int *selector) 218 - { 219 - struct da9052_regulator *regulator = rdev_get_drvdata(rdev); 220 - struct da9052_regulator_info *info = regulator->info; 221 - int ret; 222 - 223 - ret = da9052_regulator_set_voltage_int(rdev, min_uV, max_uV, selector); 242 + ret = da9052_reg_update(regulator->da9052, rdev->desc->vsel_reg, 243 + rdev->desc->vsel_mask, *selector); 224 244 if (ret < 0) 225 245 return ret; 226 246 227 - /* Some LDOs are DVC controlled which requires enabling of 228 - * the LDO activate bit to implment the changes on the 229 - * LDO output. 230 - */ 231 - return da9052_reg_update(regulator->da9052, DA9052_SUPPLY_REG, 232 - info->activate_bit, info->activate_bit); 233 - } 234 - 235 - static int da9052_set_dcdc_voltage(struct regulator_dev *rdev, 236 - int min_uV, int max_uV, 237 - unsigned int *selector) 238 - { 239 - struct da9052_regulator *regulator = rdev_get_drvdata(rdev); 240 - struct da9052_regulator_info *info = regulator->info; 241 - int ret; 242 - 243 - ret = da9052_regulator_set_voltage_int(rdev, min_uV, max_uV, selector); 244 - if (ret < 0) 245 - return ret; 246 - 247 - /* Some DCDCs are DVC controlled which requires enabling of 248 - * the DCDC activate bit to implment the changes on the 249 - * DCDC output. 250 - */ 251 - return da9052_reg_update(regulator->da9052, DA9052_SUPPLY_REG, 252 - info->activate_bit, info->activate_bit); 253 - } 254 - 255 - static int da9052_get_regulator_voltage_sel(struct regulator_dev *rdev) 256 - { 257 - struct da9052_regulator *regulator = rdev_get_drvdata(rdev); 258 - struct da9052_regulator_info *info = regulator->info; 259 - int offset = rdev_get_id(rdev); 260 - int ret; 261 - 262 - ret = da9052_reg_read(regulator->da9052, DA9052_BUCKCORE_REG + offset); 263 - if (ret < 0) 264 - return ret; 265 - 266 - ret &= ((1 << info->volt_shift) - 1); 247 + /* Some LDOs and DCDCs are DVC controlled which requires enabling of 248 + * the activate bit to implment the changes on the output. 249 + */ 250 + switch (id) { 251 + case DA9052_ID_BUCK1: 252 + case DA9052_ID_BUCK2: 253 + case DA9052_ID_BUCK3: 254 + case DA9052_ID_LDO2: 255 + case DA9052_ID_LDO3: 256 + ret = da9052_reg_update(regulator->da9052, DA9052_SUPPLY_REG, 257 + info->activate_bit, info->activate_bit); 258 + break; 259 + } 267 260 268 261 return ret; 269 262 } 270 - 271 - static int da9052_set_buckperi_voltage(struct regulator_dev *rdev, int min_uV, 272 - int max_uV, unsigned int *selector) 273 - { 274 - struct da9052_regulator *regulator = rdev_get_drvdata(rdev); 275 - struct da9052_regulator_info *info = regulator->info; 276 - int offset = rdev_get_id(rdev); 277 - int ret; 278 - 279 - ret = verify_range(info, min_uV, max_uV); 280 - if (ret < 0) 281 - return ret; 282 - 283 - if (min_uV < info->min_uV) 284 - min_uV = info->min_uV; 285 - 286 - if ((regulator->da9052->chip_id == DA9052) && 287 - (min_uV >= DA9052_CONST_3uV)) 288 - *selector = DA9052_BUCK_PERI_REG_MAP_UPTO_3uV + 289 - DIV_ROUND_UP(min_uV - DA9052_CONST_3uV, 290 - DA9052_BUCK_PERI_3uV_STEP); 291 - else 292 - *selector = DIV_ROUND_UP(min_uV - info->min_uV, info->step_uV); 293 - 294 - ret = da9052_list_buckperi_voltage(rdev, *selector); 295 - if (ret < 0) 296 - return ret; 297 - 298 - return da9052_reg_update(regulator->da9052, 299 - DA9052_BUCKCORE_REG + offset, 300 - (1 << info->volt_shift) - 1, *selector); 301 - } 302 - 303 - static int da9052_get_buckperi_voltage_sel(struct regulator_dev *rdev) 304 - { 305 - struct da9052_regulator *regulator = rdev_get_drvdata(rdev); 306 - struct da9052_regulator_info *info = regulator->info; 307 - int offset = rdev_get_id(rdev); 308 - int ret; 309 - 310 - ret = da9052_reg_read(regulator->da9052, DA9052_BUCKCORE_REG + offset); 311 - if (ret < 0) 312 - return ret; 313 - 314 - ret &= ((1 << info->volt_shift) - 1); 315 - 316 - return ret; 317 - } 318 - 319 - static struct regulator_ops da9052_buckperi_ops = { 320 - .list_voltage = da9052_list_buckperi_voltage, 321 - .get_voltage_sel = da9052_get_buckperi_voltage_sel, 322 - .set_voltage = da9052_set_buckperi_voltage, 323 - 324 - .get_current_limit = da9052_dcdc_get_current_limit, 325 - .set_current_limit = da9052_dcdc_set_current_limit, 326 - 327 - .is_enabled = da9052_regulator_is_enabled, 328 - .enable = da9052_regulator_enable, 329 - .disable = da9052_regulator_disable, 330 - }; 331 263 332 264 static struct regulator_ops da9052_dcdc_ops = { 333 - .set_voltage = da9052_set_dcdc_voltage, 265 + .set_voltage = da9052_regulator_set_voltage, 334 266 .get_current_limit = da9052_dcdc_get_current_limit, 335 267 .set_current_limit = da9052_dcdc_set_current_limit, 336 268 337 269 .list_voltage = da9052_list_voltage, 338 - .get_voltage_sel = da9052_get_regulator_voltage_sel, 339 - .is_enabled = da9052_regulator_is_enabled, 340 - .enable = da9052_regulator_enable, 341 - .disable = da9052_regulator_disable, 342 - }; 343 - 344 - static struct regulator_ops da9052_ldo5_6_ops = { 345 - .set_voltage = da9052_set_ldo5_6_voltage, 346 - 347 - .list_voltage = da9052_list_voltage, 348 - .get_voltage_sel = da9052_get_regulator_voltage_sel, 349 - .is_enabled = da9052_regulator_is_enabled, 350 - .enable = da9052_regulator_enable, 351 - .disable = da9052_regulator_disable, 270 + .get_voltage_sel = regulator_get_voltage_sel_regmap, 271 + .is_enabled = regulator_is_enabled_regmap, 272 + .enable = regulator_enable_regmap, 273 + .disable = regulator_disable_regmap, 352 274 }; 353 275 354 276 static struct regulator_ops da9052_ldo_ops = { 355 - .set_voltage = da9052_set_ldo_voltage, 277 + .set_voltage = da9052_regulator_set_voltage, 356 278 357 279 .list_voltage = da9052_list_voltage, 358 - .get_voltage_sel = da9052_get_regulator_voltage_sel, 359 - .is_enabled = da9052_regulator_is_enabled, 360 - .enable = da9052_regulator_enable, 361 - .disable = da9052_regulator_disable, 280 + .get_voltage_sel = regulator_get_voltage_sel_regmap, 281 + .is_enabled = regulator_is_enabled_regmap, 282 + .enable = regulator_enable_regmap, 283 + .disable = regulator_disable_regmap, 362 284 }; 363 - 364 - #define DA9052_LDO5_6(_id, step, min, max, sbits, ebits, abits) \ 365 - {\ 366 - .reg_desc = {\ 367 - .name = "LDO" #_id,\ 368 - .ops = &da9052_ldo5_6_ops,\ 369 - .type = REGULATOR_VOLTAGE,\ 370 - .id = _id,\ 371 - .n_voltages = (max - min) / step + 1, \ 372 - .owner = THIS_MODULE,\ 373 - },\ 374 - .min_uV = (min) * 1000,\ 375 - .max_uV = (max) * 1000,\ 376 - .step_uV = (step) * 1000,\ 377 - .volt_shift = (sbits),\ 378 - .en_bit = (ebits),\ 379 - .activate_bit = (abits),\ 380 - } 381 285 382 286 #define DA9052_LDO(_id, step, min, max, sbits, ebits, abits) \ 383 287 {\ 384 288 .reg_desc = {\ 385 - .name = "LDO" #_id,\ 289 + .name = #_id,\ 386 290 .ops = &da9052_ldo_ops,\ 387 291 .type = REGULATOR_VOLTAGE,\ 388 - .id = _id,\ 292 + .id = DA9052_ID_##_id,\ 389 293 .n_voltages = (max - min) / step + 1, \ 390 294 .owner = THIS_MODULE,\ 295 + .vsel_reg = DA9052_BUCKCORE_REG + DA9052_ID_##_id, \ 296 + .vsel_mask = (1 << (sbits)) - 1,\ 297 + .enable_reg = DA9052_BUCKCORE_REG + DA9052_ID_##_id, \ 298 + .enable_mask = 1 << (ebits),\ 391 299 },\ 392 300 .min_uV = (min) * 1000,\ 393 301 .max_uV = (max) * 1000,\ 394 302 .step_uV = (step) * 1000,\ 395 - .volt_shift = (sbits),\ 396 - .en_bit = (ebits),\ 397 303 .activate_bit = (abits),\ 398 304 } 399 305 400 306 #define DA9052_DCDC(_id, step, min, max, sbits, ebits, abits) \ 401 307 {\ 402 308 .reg_desc = {\ 403 - .name = "BUCK" #_id,\ 309 + .name = #_id,\ 404 310 .ops = &da9052_dcdc_ops,\ 405 311 .type = REGULATOR_VOLTAGE,\ 406 - .id = _id,\ 312 + .id = DA9052_ID_##_id,\ 407 313 .n_voltages = (max - min) / step + 1, \ 408 314 .owner = THIS_MODULE,\ 315 + .vsel_reg = DA9052_BUCKCORE_REG + DA9052_ID_##_id, \ 316 + .vsel_mask = (1 << (sbits)) - 1,\ 317 + .enable_reg = DA9052_BUCKCORE_REG + DA9052_ID_##_id, \ 318 + .enable_mask = 1 << (ebits),\ 409 319 },\ 410 320 .min_uV = (min) * 1000,\ 411 321 .max_uV = (max) * 1000,\ 412 322 .step_uV = (step) * 1000,\ 413 - .volt_shift = (sbits),\ 414 - .en_bit = (ebits),\ 415 - .activate_bit = (abits),\ 416 - } 417 - 418 - #define DA9052_BUCKPERI(_id, step, min, max, sbits, ebits, abits) \ 419 - {\ 420 - .reg_desc = {\ 421 - .name = "BUCK" #_id,\ 422 - .ops = &da9052_buckperi_ops,\ 423 - .type = REGULATOR_VOLTAGE,\ 424 - .id = _id,\ 425 - .n_voltages = (max - min) / step + 1, \ 426 - .owner = THIS_MODULE,\ 427 - },\ 428 - .min_uV = (min) * 1000,\ 429 - .max_uV = (max) * 1000,\ 430 - .step_uV = (step) * 1000,\ 431 - .volt_shift = (sbits),\ 432 - .en_bit = (ebits),\ 433 323 .activate_bit = (abits),\ 434 324 } 435 325 436 326 static struct da9052_regulator_info da9052_regulator_info[] = { 437 - /* Buck1 - 4 */ 438 - DA9052_DCDC(0, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBCOREGO), 439 - DA9052_DCDC(1, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBPROGO), 440 - DA9052_DCDC(2, 25, 925, 2500, 6, 6, DA9052_SUPPLY_VBMEMGO), 441 - DA9052_BUCKPERI(3, 50, 1800, 3600, 5, 6, 0), 442 - /* LD01 - LDO10 */ 443 - DA9052_LDO(4, 50, 600, 1800, 5, 6, 0), 444 - DA9052_LDO5_6(5, 25, 600, 1800, 6, 6, DA9052_SUPPLY_VLDO2GO), 445 - DA9052_LDO5_6(6, 25, 1725, 3300, 6, 6, DA9052_SUPPLY_VLDO3GO), 446 - DA9052_LDO(7, 25, 1725, 3300, 6, 6, 0), 447 - DA9052_LDO(8, 50, 1200, 3600, 6, 6, 0), 448 - DA9052_LDO(9, 50, 1200, 3600, 6, 6, 0), 449 - DA9052_LDO(10, 50, 1200, 3600, 6, 6, 0), 450 - DA9052_LDO(11, 50, 1200, 3600, 6, 6, 0), 451 - DA9052_LDO(12, 50, 1250, 3650, 6, 6, 0), 452 - DA9052_LDO(13, 50, 1200, 3600, 6, 6, 0), 327 + DA9052_DCDC(BUCK1, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBCOREGO), 328 + DA9052_DCDC(BUCK2, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBPROGO), 329 + DA9052_DCDC(BUCK3, 25, 925, 2500, 6, 6, DA9052_SUPPLY_VBMEMGO), 330 + DA9052_DCDC(BUCK4, 50, 1800, 3600, 5, 6, 0), 331 + DA9052_LDO(LDO1, 50, 600, 1800, 5, 6, 0), 332 + DA9052_LDO(LDO2, 25, 600, 1800, 6, 6, DA9052_SUPPLY_VLDO2GO), 333 + DA9052_LDO(LDO3, 25, 1725, 3300, 6, 6, DA9052_SUPPLY_VLDO3GO), 334 + DA9052_LDO(LDO4, 25, 1725, 3300, 6, 6, 0), 335 + DA9052_LDO(LDO5, 50, 1200, 3600, 6, 6, 0), 336 + DA9052_LDO(LDO6, 50, 1200, 3600, 6, 6, 0), 337 + DA9052_LDO(LDO7, 50, 1200, 3600, 6, 6, 0), 338 + DA9052_LDO(LDO8, 50, 1200, 3600, 6, 6, 0), 339 + DA9052_LDO(LDO9, 50, 1250, 3650, 6, 6, 0), 340 + DA9052_LDO(LDO10, 50, 1200, 3600, 6, 6, 0), 453 341 }; 454 342 455 343 static struct da9052_regulator_info da9053_regulator_info[] = { 456 - /* Buck1 - 4 */ 457 - DA9052_DCDC(0, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBCOREGO), 458 - DA9052_DCDC(1, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBPROGO), 459 - DA9052_DCDC(2, 25, 925, 2500, 6, 6, DA9052_SUPPLY_VBMEMGO), 460 - DA9052_BUCKPERI(3, 25, 925, 2500, 6, 6, 0), 461 - /* LD01 - LDO10 */ 462 - DA9052_LDO(4, 50, 600, 1800, 5, 6, 0), 463 - DA9052_LDO5_6(5, 25, 600, 1800, 6, 6, DA9052_SUPPLY_VLDO2GO), 464 - DA9052_LDO5_6(6, 25, 1725, 3300, 6, 6, DA9052_SUPPLY_VLDO3GO), 465 - DA9052_LDO(7, 25, 1725, 3300, 6, 6, 0), 466 - DA9052_LDO(8, 50, 1200, 3600, 6, 6, 0), 467 - DA9052_LDO(9, 50, 1200, 3600, 6, 6, 0), 468 - DA9052_LDO(10, 50, 1200, 3600, 6, 6, 0), 469 - DA9052_LDO(11, 50, 1200, 3600, 6, 6, 0), 470 - DA9052_LDO(12, 50, 1250, 3650, 6, 6, 0), 471 - DA9052_LDO(13, 50, 1200, 3600, 6, 6, 0), 344 + DA9052_DCDC(BUCK1, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBCOREGO), 345 + DA9052_DCDC(BUCK2, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBPROGO), 346 + DA9052_DCDC(BUCK3, 25, 925, 2500, 6, 6, DA9052_SUPPLY_VBMEMGO), 347 + DA9052_DCDC(BUCK4, 25, 925, 2500, 6, 6, 0), 348 + DA9052_LDO(LDO1, 50, 600, 1800, 5, 6, 0), 349 + DA9052_LDO(LDO2, 25, 600, 1800, 6, 6, DA9052_SUPPLY_VLDO2GO), 350 + DA9052_LDO(LDO3, 25, 1725, 3300, 6, 6, DA9052_SUPPLY_VLDO3GO), 351 + DA9052_LDO(LDO4, 25, 1725, 3300, 6, 6, 0), 352 + DA9052_LDO(LDO5, 50, 1200, 3600, 6, 6, 0), 353 + DA9052_LDO(LDO6, 50, 1200, 3600, 6, 6, 0), 354 + DA9052_LDO(LDO7, 50, 1200, 3600, 6, 6, 0), 355 + DA9052_LDO(LDO8, 50, 1200, 3600, 6, 6, 0), 356 + DA9052_LDO(LDO9, 50, 1250, 3650, 6, 6, 0), 357 + DA9052_LDO(LDO10, 50, 1200, 3600, 6, 6, 0), 472 358 }; 473 359 474 360 static inline struct da9052_regulator_info *find_regulator_info(u8 chip_id, ··· 355 533 356 534 static int __devinit da9052_regulator_probe(struct platform_device *pdev) 357 535 { 536 + struct regulator_config config = { }; 358 537 struct da9052_regulator *regulator; 359 538 struct da9052 *da9052; 360 539 struct da9052_pdata *pdata; 361 - int ret; 362 540 363 541 regulator = devm_kzalloc(&pdev->dev, sizeof(struct da9052_regulator), 364 542 GFP_KERNEL); ··· 373 551 pdev->id); 374 552 if (regulator->info == NULL) { 375 553 dev_err(&pdev->dev, "invalid regulator ID specified\n"); 376 - ret = -EINVAL; 377 - goto err; 554 + return -EINVAL; 378 555 } 556 + 557 + config.dev = &pdev->dev; 558 + config.driver_data = regulator; 559 + config.regmap = da9052->regmap; 560 + if (pdata && pdata->regulators) { 561 + config.init_data = pdata->regulators[pdev->id]; 562 + } else { 563 + #ifdef CONFIG_OF 564 + struct device_node *nproot = da9052->dev->of_node; 565 + struct device_node *np; 566 + 567 + if (!nproot) 568 + return -ENODEV; 569 + 570 + nproot = of_find_node_by_name(nproot, "regulators"); 571 + if (!nproot) 572 + return -ENODEV; 573 + 574 + for (np = of_get_next_child(nproot, NULL); !np; 575 + np = of_get_next_child(nproot, np)) { 576 + if (!of_node_cmp(np->name, 577 + regulator->info->reg_desc.name)) { 578 + config.init_data = of_get_regulator_init_data( 579 + &pdev->dev, np); 580 + break; 581 + } 582 + } 583 + #endif 584 + } 585 + 379 586 regulator->rdev = regulator_register(&regulator->info->reg_desc, 380 - &pdev->dev, 381 - pdata->regulators[pdev->id], 382 - regulator, NULL); 587 + &config); 383 588 if (IS_ERR(regulator->rdev)) { 384 589 dev_err(&pdev->dev, "failed to register regulator %s\n", 385 590 regulator->info->reg_desc.name); 386 - ret = PTR_ERR(regulator->rdev); 387 - goto err; 591 + return PTR_ERR(regulator->rdev); 388 592 } 389 593 390 594 platform_set_drvdata(pdev, regulator); 391 595 392 596 return 0; 393 - err: 394 - devm_kfree(&pdev->dev, regulator); 395 - return ret; 396 597 } 397 598 398 599 static int __devexit da9052_regulator_remove(struct platform_device *pdev) ··· 423 578 struct da9052_regulator *regulator = platform_get_drvdata(pdev); 424 579 425 580 regulator_unregister(regulator->rdev); 426 - devm_kfree(&pdev->dev, regulator); 427 - 428 581 return 0; 429 582 } 430 583
+6 -2
drivers/regulator/db8500-prcmu.c
··· 414 414 { 415 415 struct regulator_init_data *db8500_init_data = 416 416 dev_get_platdata(&pdev->dev); 417 + struct regulator_config config = { }; 417 418 int i, err; 418 419 419 420 /* register all regulators */ ··· 426 425 info = &dbx500_regulator_info[i]; 427 426 info->dev = &pdev->dev; 428 427 428 + config.dev = &pdev->dev; 429 + config.init_data = init_data; 430 + config.driver_data = info; 431 + 429 432 /* register with the regulator framework */ 430 - info->rdev = regulator_register(&info->desc, &pdev->dev, 431 - init_data, info, NULL); 433 + info->rdev = regulator_register(&info->desc, &config); 432 434 if (IS_ERR(info->rdev)) { 433 435 err = PTR_ERR(info->rdev); 434 436 dev_err(&pdev->dev, "failed to register %s: err %i\n",
+5 -2
drivers/regulator/dummy.c
··· 39 39 40 40 static int __devinit dummy_regulator_probe(struct platform_device *pdev) 41 41 { 42 + struct regulator_config config = { }; 42 43 int ret; 43 44 44 - dummy_regulator_rdev = regulator_register(&dummy_desc, NULL, 45 - &dummy_initdata, NULL, NULL); 45 + config.dev = &pdev->dev; 46 + config.init_data = &dummy_initdata; 47 + 48 + dummy_regulator_rdev = regulator_register(&dummy_desc, &config); 46 49 if (IS_ERR(dummy_regulator_rdev)) { 47 50 ret = PTR_ERR(dummy_regulator_rdev); 48 51 pr_err("Failed to register regulator: %d\n", ret);
+36 -35
drivers/regulator/fixed.c
··· 105 105 { 106 106 struct fixed_voltage_data *data = rdev_get_drvdata(dev); 107 107 108 - if (gpio_is_valid(data->gpio)) { 109 - gpio_set_value_cansleep(data->gpio, data->enable_high); 110 - data->is_enabled = true; 111 - } 108 + gpio_set_value_cansleep(data->gpio, data->enable_high); 109 + data->is_enabled = true; 112 110 113 111 return 0; 114 112 } ··· 115 117 { 116 118 struct fixed_voltage_data *data = rdev_get_drvdata(dev); 117 119 118 - if (gpio_is_valid(data->gpio)) { 119 - gpio_set_value_cansleep(data->gpio, !data->enable_high); 120 - data->is_enabled = false; 121 - } 120 + gpio_set_value_cansleep(data->gpio, !data->enable_high); 121 + data->is_enabled = false; 122 122 123 123 return 0; 124 124 } ··· 149 153 return data->microvolts; 150 154 } 151 155 152 - static struct regulator_ops fixed_voltage_ops = { 156 + static struct regulator_ops fixed_voltage_gpio_ops = { 153 157 .is_enabled = fixed_voltage_is_enabled, 154 158 .enable = fixed_voltage_enable, 155 159 .disable = fixed_voltage_disable, ··· 158 162 .list_voltage = fixed_voltage_list_voltage, 159 163 }; 160 164 165 + static struct regulator_ops fixed_voltage_ops = { 166 + .get_voltage = fixed_voltage_get_voltage, 167 + .list_voltage = fixed_voltage_list_voltage, 168 + }; 169 + 161 170 static int __devinit reg_fixed_voltage_probe(struct platform_device *pdev) 162 171 { 163 172 struct fixed_voltage_config *config; 164 173 struct fixed_voltage_data *drvdata; 174 + struct regulator_config cfg = { }; 165 175 int ret; 166 176 167 177 if (pdev->dev.of_node) ··· 178 176 if (!config) 179 177 return -ENOMEM; 180 178 181 - drvdata = kzalloc(sizeof(struct fixed_voltage_data), GFP_KERNEL); 179 + drvdata = devm_kzalloc(&pdev->dev, sizeof(struct fixed_voltage_data), 180 + GFP_KERNEL); 182 181 if (drvdata == NULL) { 183 182 dev_err(&pdev->dev, "Failed to allocate device data\n"); 184 183 ret = -ENOMEM; ··· 194 191 } 195 192 drvdata->desc.type = REGULATOR_VOLTAGE; 196 193 drvdata->desc.owner = THIS_MODULE; 197 - drvdata->desc.ops = &fixed_voltage_ops; 198 194 199 195 if (config->microvolts) 200 196 drvdata->desc.n_voltages = 1; ··· 203 201 drvdata->startup_delay = config->startup_delay; 204 202 205 203 if (gpio_is_valid(config->gpio)) { 204 + int gpio_flag; 206 205 drvdata->enable_high = config->enable_high; 207 206 208 207 /* FIXME: Remove below print warning ··· 221 218 dev_warn(&pdev->dev, 222 219 "using GPIO 0 for regulator enable control\n"); 223 220 224 - ret = gpio_request(config->gpio, config->supply_name); 221 + /* 222 + * set output direction without changing state 223 + * to prevent glitch 224 + */ 225 + drvdata->is_enabled = config->enabled_at_boot; 226 + ret = drvdata->is_enabled ? 227 + config->enable_high : !config->enable_high; 228 + gpio_flag = ret ? GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW; 229 + 230 + if (config->gpio_is_open_drain) 231 + gpio_flag |= GPIOF_OPEN_DRAIN; 232 + 233 + ret = gpio_request_one(config->gpio, gpio_flag, 234 + config->supply_name); 225 235 if (ret) { 226 236 dev_err(&pdev->dev, 227 237 "Could not obtain regulator enable GPIO %d: %d\n", ··· 242 226 goto err_name; 243 227 } 244 228 245 - /* set output direction without changing state 246 - * to prevent glitch 247 - */ 248 - drvdata->is_enabled = config->enabled_at_boot; 249 - ret = drvdata->is_enabled ? 250 - config->enable_high : !config->enable_high; 251 - 252 - ret = gpio_direction_output(config->gpio, ret); 253 - if (ret) { 254 - dev_err(&pdev->dev, 255 - "Could not configure regulator enable GPIO %d direction: %d\n", 256 - config->gpio, ret); 257 - goto err_gpio; 258 - } 229 + drvdata->desc.ops = &fixed_voltage_gpio_ops; 259 230 260 231 } else { 261 - /* Regulator without GPIO control is considered 262 - * always enabled 263 - */ 264 - drvdata->is_enabled = true; 232 + drvdata->desc.ops = &fixed_voltage_ops; 265 233 } 266 234 267 - drvdata->dev = regulator_register(&drvdata->desc, &pdev->dev, 268 - config->init_data, drvdata, 269 - pdev->dev.of_node); 235 + cfg.dev = &pdev->dev; 236 + cfg.init_data = config->init_data; 237 + cfg.driver_data = drvdata; 238 + cfg.of_node = pdev->dev.of_node; 239 + 240 + drvdata->dev = regulator_register(&drvdata->desc, &cfg); 270 241 if (IS_ERR(drvdata->dev)) { 271 242 ret = PTR_ERR(drvdata->dev); 272 243 dev_err(&pdev->dev, "Failed to register regulator: %d\n", ret); ··· 273 270 err_name: 274 271 kfree(drvdata->desc.name); 275 272 err: 276 - kfree(drvdata); 277 273 return ret; 278 274 } 279 275 ··· 284 282 if (gpio_is_valid(drvdata->gpio)) 285 283 gpio_free(drvdata->gpio); 286 284 kfree(drvdata->desc.name); 287 - kfree(drvdata); 288 285 289 286 return 0; 290 287 }
+12 -9
drivers/regulator/gpio-regulator.c
··· 105 105 int min, int max) 106 106 { 107 107 struct gpio_regulator_data *data = rdev_get_drvdata(dev); 108 - int ptr, target, state; 108 + int ptr, target, state, best_val = INT_MAX; 109 109 110 - target = -1; 111 110 for (ptr = 0; ptr < data->nr_states; ptr++) 112 - if (data->states[ptr].value >= min && 111 + if (data->states[ptr].value < best_val && 112 + data->states[ptr].value >= min && 113 113 data->states[ptr].value <= max) 114 114 target = data->states[ptr].gpios; 115 115 116 - if (target < 0) 116 + if (best_val == INT_MAX) 117 117 return -EINVAL; 118 118 119 119 for (ptr = 0; ptr < data->nr_gpios; ptr++) { ··· 172 172 { 173 173 struct gpio_regulator_config *config = pdev->dev.platform_data; 174 174 struct gpio_regulator_data *drvdata; 175 + struct regulator_config cfg = { }; 175 176 int ptr, ret, state; 176 177 177 - drvdata = kzalloc(sizeof(struct gpio_regulator_data), GFP_KERNEL); 178 + drvdata = devm_kzalloc(&pdev->dev, sizeof(struct gpio_regulator_data), 179 + GFP_KERNEL); 178 180 if (drvdata == NULL) { 179 181 dev_err(&pdev->dev, "Failed to allocate device data\n"); 180 182 return -ENOMEM; ··· 285 283 } 286 284 drvdata->state = state; 287 285 288 - drvdata->dev = regulator_register(&drvdata->desc, &pdev->dev, 289 - config->init_data, drvdata, NULL); 286 + cfg.dev = &pdev->dev; 287 + cfg.init_data = config->init_data; 288 + cfg.driver_data = &drvdata; 289 + 290 + drvdata->dev = regulator_register(&drvdata->desc, &cfg); 290 291 if (IS_ERR(drvdata->dev)) { 291 292 ret = PTR_ERR(drvdata->dev); 292 293 dev_err(&pdev->dev, "Failed to register regulator: %d\n", ret); ··· 312 307 err_name: 313 308 kfree(drvdata->desc.name); 314 309 err: 315 - kfree(drvdata); 316 310 return ret; 317 311 } 318 312 ··· 330 326 gpio_free(drvdata->enable_gpio); 331 327 332 328 kfree(drvdata->desc.name); 333 - kfree(drvdata); 334 329 335 330 return 0; 336 331 }
+11 -14
drivers/regulator/isl6271a-regulator.c
··· 112 112 .list_voltage = isl6271a_list_fixed_voltage, 113 113 }; 114 114 115 - static struct regulator_desc isl_rd[] = { 115 + static const struct regulator_desc isl_rd[] = { 116 116 { 117 117 .name = "Core Buck", 118 118 .id = 0, ··· 140 140 static int __devinit isl6271a_probe(struct i2c_client *i2c, 141 141 const struct i2c_device_id *id) 142 142 { 143 + struct regulator_config config = { }; 143 144 struct regulator_init_data *init_data = i2c->dev.platform_data; 144 145 struct isl_pmic *pmic; 145 146 int err, i; ··· 148 147 if (!i2c_check_functionality(i2c->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) 149 148 return -EIO; 150 149 151 - if (!init_data) { 152 - dev_err(&i2c->dev, "no platform data supplied\n"); 153 - return -EIO; 154 - } 155 - 156 - pmic = kzalloc(sizeof(struct isl_pmic), GFP_KERNEL); 150 + pmic = devm_kzalloc(&i2c->dev, sizeof(struct isl_pmic), GFP_KERNEL); 157 151 if (!pmic) 158 152 return -ENOMEM; 159 153 ··· 157 161 mutex_init(&pmic->mtx); 158 162 159 163 for (i = 0; i < 3; i++) { 160 - pmic->rdev[i] = regulator_register(&isl_rd[i], &i2c->dev, 161 - init_data, pmic, NULL); 164 + config.dev = &i2c->dev; 165 + if (i == 0) 166 + config.init_data = init_data; 167 + else 168 + config.init_data = 0; 169 + config.driver_data = pmic; 170 + 171 + pmic->rdev[i] = regulator_register(&isl_rd[i], &config); 162 172 if (IS_ERR(pmic->rdev[i])) { 163 173 dev_err(&i2c->dev, "failed to register %s\n", id->name); 164 174 err = PTR_ERR(pmic->rdev[i]); ··· 179 177 error: 180 178 while (--i >= 0) 181 179 regulator_unregister(pmic->rdev[i]); 182 - 183 - kfree(pmic); 184 180 return err; 185 181 } 186 182 ··· 189 189 190 190 for (i = 0; i < 3; i++) 191 191 regulator_unregister(pmic->rdev[i]); 192 - 193 - kfree(pmic); 194 - 195 192 return 0; 196 193 } 197 194
+24 -63
drivers/regulator/lp3971.c
··· 124 124 static int lp3971_ldo_list_voltage(struct regulator_dev *dev, unsigned index) 125 125 { 126 126 int ldo = rdev_get_id(dev) - LP3971_LDO1; 127 + 128 + if (index > LDO_VOL_MAX_IDX) 129 + return -EINVAL; 130 + 127 131 return 1000 * LDO_VOL_VALUE_MAP(ldo)[index]; 128 132 } 129 133 ··· 172 168 return 1000 * LDO_VOL_VALUE_MAP(ldo)[val]; 173 169 } 174 170 175 - static int lp3971_ldo_set_voltage(struct regulator_dev *dev, 176 - int min_uV, int max_uV, 177 - unsigned int *selector) 171 + static int lp3971_ldo_set_voltage_sel(struct regulator_dev *dev, 172 + unsigned int selector) 178 173 { 179 174 struct lp3971 *lp3971 = rdev_get_drvdata(dev); 180 175 int ldo = rdev_get_id(dev) - LP3971_LDO1; 181 - int min_vol = min_uV / 1000, max_vol = max_uV / 1000; 182 - const int *vol_map = LDO_VOL_VALUE_MAP(ldo); 183 - u16 val; 184 - 185 - if (min_vol < vol_map[LDO_VOL_MIN_IDX] || 186 - min_vol > vol_map[LDO_VOL_MAX_IDX]) 187 - return -EINVAL; 188 - 189 - for (val = LDO_VOL_MIN_IDX; val <= LDO_VOL_MAX_IDX; val++) 190 - if (vol_map[val] >= min_vol) 191 - break; 192 - 193 - if (val > LDO_VOL_MAX_IDX || vol_map[val] > max_vol) 194 - return -EINVAL; 195 - 196 - *selector = val; 197 176 198 177 return lp3971_set_bits(lp3971, LP3971_LDO_VOL_CONTR_REG(ldo), 199 178 LDO_VOL_CONTR_MASK << LDO_VOL_CONTR_SHIFT(ldo), 200 - val << LDO_VOL_CONTR_SHIFT(ldo)); 179 + selector << LDO_VOL_CONTR_SHIFT(ldo)); 201 180 } 202 181 203 182 static struct regulator_ops lp3971_ldo_ops = { ··· 189 202 .enable = lp3971_ldo_enable, 190 203 .disable = lp3971_ldo_disable, 191 204 .get_voltage = lp3971_ldo_get_voltage, 192 - .set_voltage = lp3971_ldo_set_voltage, 205 + .set_voltage_sel = lp3971_ldo_set_voltage_sel, 193 206 }; 194 207 195 208 static int lp3971_dcdc_list_voltage(struct regulator_dev *dev, unsigned index) 196 209 { 210 + if (index < BUCK_TARGET_VOL_MIN_IDX || index > BUCK_TARGET_VOL_MAX_IDX) 211 + return -EINVAL; 212 + 197 213 return 1000 * buck_voltage_map[index]; 198 214 } 199 215 ··· 249 259 return val; 250 260 } 251 261 252 - static int lp3971_dcdc_set_voltage(struct regulator_dev *dev, 253 - int min_uV, int max_uV, 254 - unsigned int *selector) 262 + static int lp3971_dcdc_set_voltage_sel(struct regulator_dev *dev, 263 + unsigned int selector) 255 264 { 256 265 struct lp3971 *lp3971 = rdev_get_drvdata(dev); 257 266 int buck = rdev_get_id(dev) - LP3971_DCDC1; 258 - int min_vol = min_uV / 1000, max_vol = max_uV / 1000; 259 - const int *vol_map = buck_voltage_map; 260 - u16 val; 261 267 int ret; 262 268 263 - if (min_vol < vol_map[BUCK_TARGET_VOL_MIN_IDX] || 264 - min_vol > vol_map[BUCK_TARGET_VOL_MAX_IDX]) 265 - return -EINVAL; 266 - 267 - for (val = BUCK_TARGET_VOL_MIN_IDX; val <= BUCK_TARGET_VOL_MAX_IDX; 268 - val++) 269 - if (vol_map[val] >= min_vol) 270 - break; 271 - 272 - if (val > BUCK_TARGET_VOL_MAX_IDX || vol_map[val] > max_vol) 273 - return -EINVAL; 274 - 275 - *selector = val; 276 - 277 269 ret = lp3971_set_bits(lp3971, LP3971_BUCK_TARGET_VOL1_REG(buck), 278 - BUCK_TARGET_VOL_MASK, val); 270 + BUCK_TARGET_VOL_MASK, selector); 279 271 if (ret) 280 272 return ret; 281 273 ··· 278 306 .enable = lp3971_dcdc_enable, 279 307 .disable = lp3971_dcdc_disable, 280 308 .get_voltage = lp3971_dcdc_get_voltage, 281 - .set_voltage = lp3971_dcdc_set_voltage, 309 + .set_voltage_sel = lp3971_dcdc_set_voltage_sel, 282 310 }; 283 311 284 - static struct regulator_desc regulators[] = { 312 + static const struct regulator_desc regulators[] = { 285 313 { 286 314 .name = "LDO1", 287 315 .id = LP3971_LDO1, ··· 421 449 422 450 /* Instantiate the regulators */ 423 451 for (i = 0; i < pdata->num_regulators; i++) { 452 + struct regulator_config config = { }; 424 453 struct lp3971_regulator_subdev *reg = &pdata->regulators[i]; 425 - lp3971->rdev[i] = regulator_register(&regulators[reg->id], 426 - lp3971->dev, reg->initdata, lp3971, NULL); 427 454 455 + config.dev = lp3971->dev; 456 + config.init_data = reg->initdata; 457 + config.driver_data = lp3971; 458 + 459 + lp3971->rdev[i] = regulator_register(&regulators[reg->id], 460 + &config); 428 461 if (IS_ERR(lp3971->rdev[i])) { 429 462 err = PTR_ERR(lp3971->rdev[i]); 430 463 dev_err(lp3971->dev, "regulator init failed: %d\n", ··· 522 545 .id_table = lp3971_i2c_id, 523 546 }; 524 547 525 - static int __init lp3971_module_init(void) 526 - { 527 - int ret; 528 - 529 - ret = i2c_add_driver(&lp3971_i2c_driver); 530 - if (ret != 0) 531 - pr_err("Failed to register I2C driver: %d\n", ret); 532 - 533 - return ret; 534 - } 535 - module_init(lp3971_module_init); 536 - 537 - static void __exit lp3971_module_exit(void) 538 - { 539 - i2c_del_driver(&lp3971_i2c_driver); 540 - } 541 - module_exit(lp3971_module_exit); 548 + module_i2c_driver(lp3971_i2c_driver); 542 549 543 550 MODULE_LICENSE("GPL"); 544 551 MODULE_AUTHOR("Marek Szyprowski <m.szyprowski@samsung.com>");
+26 -48
drivers/regulator/lp3972.c
··· 245 245 static int lp3972_ldo_list_voltage(struct regulator_dev *dev, unsigned index) 246 246 { 247 247 int ldo = rdev_get_id(dev) - LP3972_LDO1; 248 + 249 + if (index < LP3972_LDO_VOL_MIN_IDX(ldo) || 250 + index > LP3972_LDO_VOL_MAX_IDX(ldo)) 251 + return -EINVAL; 252 + 248 253 return 1000 * LP3972_LDO_VOL_VALUE_MAP(ldo)[index]; 249 254 } 250 255 ··· 297 292 return 1000 * LP3972_LDO_VOL_VALUE_MAP(ldo)[val]; 298 293 } 299 294 300 - static int lp3972_ldo_set_voltage(struct regulator_dev *dev, 301 - int min_uV, int max_uV, 302 - unsigned int *selector) 295 + static int lp3972_ldo_set_voltage_sel(struct regulator_dev *dev, 296 + unsigned int selector) 303 297 { 304 298 struct lp3972 *lp3972 = rdev_get_drvdata(dev); 305 299 int ldo = rdev_get_id(dev) - LP3972_LDO1; 306 - int min_vol = min_uV / 1000, max_vol = max_uV / 1000; 307 - const int *vol_map = LP3972_LDO_VOL_VALUE_MAP(ldo); 308 - u16 val; 309 300 int shift, ret; 310 - 311 - if (min_vol < vol_map[LP3972_LDO_VOL_MIN_IDX(ldo)] || 312 - min_vol > vol_map[LP3972_LDO_VOL_MAX_IDX(ldo)]) 313 - return -EINVAL; 314 - 315 - for (val = LP3972_LDO_VOL_MIN_IDX(ldo); 316 - val <= LP3972_LDO_VOL_MAX_IDX(ldo); val++) 317 - if (vol_map[val] >= min_vol) 318 - break; 319 - 320 - if (val > LP3972_LDO_VOL_MAX_IDX(ldo) || vol_map[val] > max_vol) 321 - return -EINVAL; 322 - 323 - *selector = val; 324 301 325 302 shift = LP3972_LDO_VOL_CONTR_SHIFT(ldo); 326 303 ret = lp3972_set_bits(lp3972, LP3972_LDO_VOL_CONTR_REG(ldo), 327 - LP3972_LDO_VOL_MASK(ldo) << shift, val << shift); 304 + LP3972_LDO_VOL_MASK(ldo) << shift, selector << shift); 328 305 329 306 if (ret) 330 307 return ret; ··· 342 355 .enable = lp3972_ldo_enable, 343 356 .disable = lp3972_ldo_disable, 344 357 .get_voltage = lp3972_ldo_get_voltage, 345 - .set_voltage = lp3972_ldo_set_voltage, 358 + .set_voltage_sel = lp3972_ldo_set_voltage_sel, 346 359 }; 347 360 348 361 static int lp3972_dcdc_list_voltage(struct regulator_dev *dev, unsigned index) 349 362 { 350 363 int buck = rdev_get_id(dev) - LP3972_DCDC1; 364 + 365 + if (index < LP3972_BUCK_VOL_MIN_IDX(buck) || 366 + index > LP3972_BUCK_VOL_MAX_IDX(buck)) 367 + return -EINVAL; 368 + 351 369 return 1000 * buck_voltage_map[buck][index]; 352 370 } 353 371 ··· 411 419 return val; 412 420 } 413 421 414 - static int lp3972_dcdc_set_voltage(struct regulator_dev *dev, 415 - int min_uV, int max_uV, 416 - unsigned int *selector) 422 + static int lp3972_dcdc_set_voltage_sel(struct regulator_dev *dev, 423 + unsigned int selector) 417 424 { 418 425 struct lp3972 *lp3972 = rdev_get_drvdata(dev); 419 426 int buck = rdev_get_id(dev) - LP3972_DCDC1; 420 - int min_vol = min_uV / 1000, max_vol = max_uV / 1000; 421 - const int *vol_map = buck_voltage_map[buck]; 422 - u16 val; 423 427 int ret; 424 428 425 - if (min_vol < vol_map[LP3972_BUCK_VOL_MIN_IDX(buck)] || 426 - min_vol > vol_map[LP3972_BUCK_VOL_MAX_IDX(buck)]) 427 - return -EINVAL; 428 - 429 - for (val = LP3972_BUCK_VOL_MIN_IDX(buck); 430 - val <= LP3972_BUCK_VOL_MAX_IDX(buck); val++) 431 - if (vol_map[val] >= min_vol) 432 - break; 433 - 434 - if (val > LP3972_BUCK_VOL_MAX_IDX(buck) || 435 - vol_map[val] > max_vol) 436 - return -EINVAL; 437 - 438 - *selector = val; 439 - 440 429 ret = lp3972_set_bits(lp3972, LP3972_BUCK_VOL1_REG(buck), 441 - LP3972_BUCK_VOL_MASK, val); 430 + LP3972_BUCK_VOL_MASK, selector); 442 431 if (ret) 443 432 return ret; 444 433 ··· 441 468 .enable = lp3972_dcdc_enable, 442 469 .disable = lp3972_dcdc_disable, 443 470 .get_voltage = lp3972_dcdc_get_voltage, 444 - .set_voltage = lp3972_dcdc_set_voltage, 471 + .set_voltage_sel = lp3972_dcdc_set_voltage_sel, 445 472 }; 446 473 447 - static struct regulator_desc regulators[] = { 474 + static const struct regulator_desc regulators[] = { 448 475 { 449 476 .name = "LDO1", 450 477 .id = LP3972_LDO1, ··· 527 554 /* Instantiate the regulators */ 528 555 for (i = 0; i < pdata->num_regulators; i++) { 529 556 struct lp3972_regulator_subdev *reg = &pdata->regulators[i]; 530 - lp3972->rdev[i] = regulator_register(&regulators[reg->id], 531 - lp3972->dev, reg->initdata, lp3972, NULL); 557 + struct regulator_config config = { }; 532 558 559 + config.dev = lp3972->dev; 560 + config.init_data = reg->initdata; 561 + config.driver_data = lp3972; 562 + 563 + lp3972->rdev[i] = regulator_register(&regulators[reg->id], 564 + &config); 533 565 if (IS_ERR(lp3972->rdev[i])) { 534 566 err = PTR_ERR(lp3972->rdev[i]); 535 567 dev_err(lp3972->dev, "regulator init failed: %d\n",
+13 -15
drivers/regulator/max1586.c
··· 161 161 .list_voltage = max1586_v6_list, 162 162 }; 163 163 164 - static struct regulator_desc max1586_reg[] = { 164 + static const struct regulator_desc max1586_reg[] = { 165 165 { 166 166 .name = "Output_V3", 167 167 .id = MAX1586_V3, ··· 185 185 { 186 186 struct regulator_dev **rdev; 187 187 struct max1586_platform_data *pdata = client->dev.platform_data; 188 + struct regulator_config config = { }; 188 189 struct max1586_data *max1586; 189 190 int i, id, ret = -ENOMEM; 190 191 191 - max1586 = kzalloc(sizeof(struct max1586_data) + 192 + max1586 = devm_kzalloc(&client->dev, sizeof(struct max1586_data) + 192 193 sizeof(struct regulator_dev *) * (MAX1586_V6 + 1), 193 194 GFP_KERNEL); 194 195 if (!max1586) 195 - goto out; 196 + return -ENOMEM; 196 197 197 198 max1586->client = client; 198 199 199 - if (!pdata->v3_gain) { 200 - ret = -EINVAL; 201 - goto out_unmap; 202 - } 200 + if (!pdata->v3_gain) 201 + return -EINVAL; 202 + 203 203 max1586->min_uV = MAX1586_V3_MIN_UV / 1000 * pdata->v3_gain / 1000; 204 204 max1586->max_uV = MAX1586_V3_MAX_UV / 1000 * pdata->v3_gain / 1000; 205 205 ··· 212 212 dev_err(&client->dev, "invalid regulator id %d\n", id); 213 213 goto err; 214 214 } 215 - rdev[i] = regulator_register(&max1586_reg[id], &client->dev, 216 - pdata->subdevs[i].platform_data, 217 - max1586, NULL); 215 + 216 + config.dev = &client->dev; 217 + config.init_data = pdata->subdevs[i].platform_data; 218 + config.driver_data = max1586; 219 + 220 + rdev[i] = regulator_register(&max1586_reg[id], &config); 218 221 if (IS_ERR(rdev[i])) { 219 222 ret = PTR_ERR(rdev[i]); 220 223 dev_err(&client->dev, "failed to register %s\n", ··· 233 230 err: 234 231 while (--i >= 0) 235 232 regulator_unregister(rdev[i]); 236 - out_unmap: 237 - kfree(max1586); 238 - out: 239 233 return ret; 240 234 } 241 235 ··· 244 244 for (i = 0; i <= MAX1586_V6; i++) 245 245 if (max1586->rdev[i]) 246 246 regulator_unregister(max1586->rdev[i]); 247 - kfree(max1586); 248 - 249 247 return 0; 250 248 } 251 249
+13 -17
drivers/regulator/max8649.c
··· 207 207 208 208 }; 209 209 210 - static struct regulator_desc dcdc_desc = { 210 + static const struct regulator_desc dcdc_desc = { 211 211 .name = "max8649", 212 212 .ops = &max8649_dcdc_ops, 213 213 .type = REGULATOR_VOLTAGE, ··· 225 225 { 226 226 struct max8649_platform_data *pdata = client->dev.platform_data; 227 227 struct max8649_regulator_info *info = NULL; 228 + struct regulator_config config = { }; 228 229 unsigned int val; 229 230 unsigned char data; 230 231 int ret; 231 232 232 - info = kzalloc(sizeof(struct max8649_regulator_info), GFP_KERNEL); 233 + info = devm_kzalloc(&client->dev, sizeof(struct max8649_regulator_info), 234 + GFP_KERNEL); 233 235 if (!info) { 234 236 dev_err(&client->dev, "No enough memory\n"); 235 237 return -ENOMEM; 236 238 } 237 239 238 - info->regmap = regmap_init_i2c(client, &max8649_regmap_config); 240 + info->regmap = devm_regmap_init_i2c(client, &max8649_regmap_config); 239 241 if (IS_ERR(info->regmap)) { 240 242 ret = PTR_ERR(info->regmap); 241 243 dev_err(&client->dev, "Failed to allocate register map: %d\n", ret); 242 - goto fail; 244 + return ret; 243 245 } 244 246 245 247 info->dev = &client->dev; ··· 269 267 if (ret != 0) { 270 268 dev_err(info->dev, "Failed to detect ID of MAX8649:%d\n", 271 269 ret); 272 - goto out; 270 + return ret; 273 271 } 274 272 dev_info(info->dev, "Detected MAX8649 (ID:%x)\n", val); 275 273 ··· 299 297 MAX8649_RAMP_DOWN); 300 298 } 301 299 302 - info->regulator = regulator_register(&dcdc_desc, &client->dev, 303 - pdata->regulator, info, NULL); 300 + config.dev = &client->dev; 301 + config.init_data = pdata->regulator; 302 + config.driver_data = info; 303 + 304 + info->regulator = regulator_register(&dcdc_desc, &config); 304 305 if (IS_ERR(info->regulator)) { 305 306 dev_err(info->dev, "failed to register regulator %s\n", 306 307 dcdc_desc.name); 307 - ret = PTR_ERR(info->regulator); 308 - goto out; 308 + return PTR_ERR(info->regulator); 309 309 } 310 310 311 - dev_info(info->dev, "Max8649 regulator device is detected.\n"); 312 311 return 0; 313 - out: 314 - regmap_exit(info->regmap); 315 - fail: 316 - kfree(info); 317 - return ret; 318 312 } 319 313 320 314 static int __devexit max8649_regulator_remove(struct i2c_client *client) ··· 320 322 if (info) { 321 323 if (info->regulator) 322 324 regulator_unregister(info->regulator); 323 - regmap_exit(info->regmap); 324 - kfree(info); 325 325 } 326 326 327 327 return 0;
+14 -18
drivers/regulator/max8660.c
··· 313 313 .set_voltage = max8660_ldo67_set, 314 314 }; 315 315 316 - static struct regulator_desc max8660_reg[] = { 316 + static const struct regulator_desc max8660_reg[] = { 317 317 { 318 318 .name = "V3(DCDC)", 319 319 .id = MAX8660_V3, ··· 361 361 { 362 362 struct regulator_dev **rdev; 363 363 struct max8660_platform_data *pdata = client->dev.platform_data; 364 + struct regulator_config config = { }; 364 365 struct max8660 *max8660; 365 366 int boot_on, i, id, ret = -EINVAL; 366 367 367 368 if (pdata->num_subdevs > MAX8660_V_END) { 368 369 dev_err(&client->dev, "Too many regulators found!\n"); 369 - goto out; 370 + return -EINVAL; 370 371 } 371 372 372 373 max8660 = kzalloc(sizeof(struct max8660) + 373 374 sizeof(struct regulator_dev *) * MAX8660_V_END, 374 375 GFP_KERNEL); 375 - if (!max8660) { 376 - ret = -ENOMEM; 377 - goto out; 378 - } 376 + if (!max8660) 377 + return -ENOMEM; 379 378 380 379 max8660->client = client; 381 380 rdev = max8660->rdev; ··· 403 404 for (i = 0; i < pdata->num_subdevs; i++) { 404 405 405 406 if (!pdata->subdevs[i].platform_data) 406 - goto err_free; 407 + goto err_out; 407 408 408 409 boot_on = pdata->subdevs[i].platform_data->constraints.boot_on; 409 410 ··· 429 430 case MAX8660_V7: 430 431 if (!strcmp(i2c_id->name, "max8661")) { 431 432 dev_err(&client->dev, "Regulator not on this chip!\n"); 432 - goto err_free; 433 + goto err_out; 433 434 } 434 435 435 436 if (boot_on) ··· 439 440 default: 440 441 dev_err(&client->dev, "invalid regulator %s\n", 441 442 pdata->subdevs[i].name); 442 - goto err_free; 443 + goto err_out; 443 444 } 444 445 } 445 446 ··· 448 449 449 450 id = pdata->subdevs[i].id; 450 451 451 - rdev[i] = regulator_register(&max8660_reg[id], &client->dev, 452 - pdata->subdevs[i].platform_data, 453 - max8660, NULL); 452 + config.dev = &client->dev; 453 + config.init_data = pdata->subdevs[i].platform_data; 454 + config.driver_data = max8660; 455 + 456 + rdev[i] = regulator_register(&max8660_reg[id], &config); 454 457 if (IS_ERR(rdev[i])) { 455 458 ret = PTR_ERR(rdev[i]); 456 459 dev_err(&client->dev, "failed to register %s\n", ··· 462 461 } 463 462 464 463 i2c_set_clientdata(client, max8660); 465 - dev_info(&client->dev, "Maxim 8660/8661 regulator driver loaded\n"); 466 464 return 0; 467 465 468 466 err_unregister: 469 467 while (--i >= 0) 470 468 regulator_unregister(rdev[i]); 471 - err_free: 472 - kfree(max8660); 473 - out: 469 + err_out: 474 470 return ret; 475 471 } 476 472 ··· 479 481 for (i = 0; i < MAX8660_V_END; i++) 480 482 if (max8660->rdev[i]) 481 483 regulator_unregister(max8660->rdev[i]); 482 - kfree(max8660); 483 - 484 484 return 0; 485 485 } 486 486
+13 -12
drivers/regulator/max8925-regulator.c
··· 42 42 int max_uV; 43 43 int step_uV; 44 44 int vol_reg; 45 - int vol_shift; 46 - int vol_nbits; 47 45 int enable_reg; 48 46 }; 49 47 ··· 73 75 } 74 76 data = DIV_ROUND_UP(min_uV - info->min_uV, info->step_uV); 75 77 *selector = data; 76 - data <<= info->vol_shift; 77 - mask = ((1 << info->vol_nbits) - 1) << info->vol_shift; 78 + mask = rdev->desc->n_voltages - 1; 78 79 79 80 return max8925_set_bits(info->i2c, info->vol_reg, mask, data); 80 81 } ··· 87 90 ret = max8925_reg_read(info->i2c, info->vol_reg); 88 91 if (ret < 0) 89 92 return ret; 90 - mask = ((1 << info->vol_nbits) - 1) << info->vol_shift; 91 - data = (ret & mask) >> info->vol_shift; 93 + mask = rdev->desc->n_voltages - 1; 94 + data = ret & mask; 92 95 93 96 return max8925_list_voltage(rdev, data); 94 97 } ··· 160 163 } 161 164 162 165 static struct regulator_ops max8925_regulator_sdv_ops = { 166 + .list_voltage = max8925_list_voltage, 163 167 .set_voltage = max8925_set_voltage, 164 168 .get_voltage = max8925_get_voltage, 165 169 .enable = max8925_enable, ··· 172 174 }; 173 175 174 176 static struct regulator_ops max8925_regulator_ldo_ops = { 177 + .list_voltage = max8925_list_voltage, 175 178 .set_voltage = max8925_set_voltage, 176 179 .get_voltage = max8925_get_voltage, 177 180 .enable = max8925_enable, ··· 188 189 .type = REGULATOR_VOLTAGE, \ 189 190 .id = MAX8925_ID_SD##_id, \ 190 191 .owner = THIS_MODULE, \ 192 + .n_voltages = 64, \ 191 193 }, \ 192 194 .min_uV = min * 1000, \ 193 195 .max_uV = max * 1000, \ 194 196 .step_uV = step * 1000, \ 195 197 .vol_reg = MAX8925_SDV##_id, \ 196 - .vol_shift = 0, \ 197 - .vol_nbits = 6, \ 198 198 .enable_reg = MAX8925_SDCTL##_id, \ 199 199 } 200 200 ··· 205 207 .type = REGULATOR_VOLTAGE, \ 206 208 .id = MAX8925_ID_LDO##_id, \ 207 209 .owner = THIS_MODULE, \ 210 + .n_voltages = 64, \ 208 211 }, \ 209 212 .min_uV = min * 1000, \ 210 213 .max_uV = max * 1000, \ 211 214 .step_uV = step * 1000, \ 212 215 .vol_reg = MAX8925_LDOVOUT##_id, \ 213 - .vol_shift = 0, \ 214 - .vol_nbits = 6, \ 215 216 .enable_reg = MAX8925_LDOCTL##_id, \ 216 217 } 217 218 ··· 258 261 { 259 262 struct max8925_chip *chip = dev_get_drvdata(pdev->dev.parent); 260 263 struct max8925_platform_data *pdata = chip->dev->platform_data; 264 + struct regulator_config config = { }; 261 265 struct max8925_regulator_info *ri; 262 266 struct regulator_dev *rdev; 263 267 ··· 270 272 ri->i2c = chip->i2c; 271 273 ri->chip = chip; 272 274 273 - rdev = regulator_register(&ri->desc, &pdev->dev, 274 - pdata->regulator[pdev->id], ri, NULL); 275 + config.dev = &pdev->dev; 276 + config.init_data = pdata->regulator[pdev->id]; 277 + config.driver_data = ri; 278 + 279 + rdev = regulator_register(&ri->desc, &config); 275 280 if (IS_ERR(rdev)) { 276 281 dev_err(&pdev->dev, "failed to register regulator %s\n", 277 282 ri->desc.name);
+18 -28
drivers/regulator/max8952.c
··· 130 130 return max8952_voltage(max8952, vid); 131 131 } 132 132 133 - static int max8952_set_voltage(struct regulator_dev *rdev, 134 - int min_uV, int max_uV, unsigned *selector) 133 + static int max8952_set_voltage_sel(struct regulator_dev *rdev, 134 + unsigned selector) 135 135 { 136 136 struct max8952_data *max8952 = rdev_get_drvdata(rdev); 137 - s8 vid = -1, i; 138 137 139 138 if (!gpio_is_valid(max8952->pdata->gpio_vid0) || 140 139 !gpio_is_valid(max8952->pdata->gpio_vid1)) { ··· 141 142 return -EPERM; 142 143 } 143 144 144 - for (i = 0; i < MAX8952_NUM_DVS_MODE; i++) { 145 - int volt = max8952_voltage(max8952, i); 146 - 147 - /* Set the voltage as low as possible within the range */ 148 - if (volt <= max_uV && volt >= min_uV) 149 - if (vid == -1 || max8952_voltage(max8952, vid) > volt) 150 - vid = i; 151 - } 152 - 153 - if (vid >= 0 && vid < MAX8952_NUM_DVS_MODE) { 154 - max8952->vid0 = (vid % 2 == 1); 155 - max8952->vid1 = (((vid >> 1) % 2) == 1); 156 - *selector = vid; 157 - gpio_set_value(max8952->pdata->gpio_vid0, max8952->vid0); 158 - gpio_set_value(max8952->pdata->gpio_vid1, max8952->vid1); 159 - } else 160 - return -EINVAL; 145 + max8952->vid0 = selector & 0x1; 146 + max8952->vid1 = (selector >> 1) & 0x1; 147 + gpio_set_value(max8952->pdata->gpio_vid0, max8952->vid0); 148 + gpio_set_value(max8952->pdata->gpio_vid1, max8952->vid1); 161 149 162 150 return 0; 163 151 } ··· 155 169 .enable = max8952_enable, 156 170 .disable = max8952_disable, 157 171 .get_voltage = max8952_get_voltage, 158 - .set_voltage = max8952_set_voltage, 172 + .set_voltage_sel = max8952_set_voltage_sel, 159 173 .set_suspend_disable = max8952_disable, 160 174 }; 161 175 162 - static struct regulator_desc regulator = { 176 + static const struct regulator_desc regulator = { 163 177 .name = "MAX8952_VOUT", 164 178 .id = 0, 165 179 .n_voltages = MAX8952_NUM_DVS_MODE, ··· 173 187 { 174 188 struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent); 175 189 struct max8952_platform_data *pdata = client->dev.platform_data; 190 + struct regulator_config config = { }; 176 191 struct max8952_data *max8952; 177 192 178 193 int ret = 0, err = 0; ··· 194 207 max8952->dev = &client->dev; 195 208 max8952->pdata = pdata; 196 209 197 - max8952->rdev = regulator_register(&regulator, max8952->dev, 198 - &pdata->reg_data, max8952, NULL); 210 + config.dev = max8952->dev; 211 + config.init_data = &pdata->reg_data; 212 + config.driver_data = max8952; 213 + 214 + max8952->rdev = regulator_register(&regulator, &config); 199 215 200 216 if (IS_ERR(max8952->rdev)) { 201 217 ret = PTR_ERR(max8952->rdev); ··· 207 217 } 208 218 209 219 max8952->en = !!(pdata->reg_data.constraints.boot_on); 210 - max8952->vid0 = (pdata->default_mode % 2) == 1; 211 - max8952->vid1 = ((pdata->default_mode >> 1) % 2) == 1; 220 + max8952->vid0 = pdata->default_mode & 0x1; 221 + max8952->vid1 = (pdata->default_mode >> 1) & 0x1; 212 222 213 223 if (gpio_is_valid(pdata->gpio_en)) { 214 224 if (!gpio_request(pdata->gpio_en, "MAX8952 EN")) ··· 231 241 gpio_is_valid(pdata->gpio_vid1)) { 232 242 if (!gpio_request(pdata->gpio_vid0, "MAX8952 VID0")) 233 243 gpio_direction_output(pdata->gpio_vid0, 234 - (pdata->default_mode) % 2); 244 + (pdata->default_mode) & 0x1); 235 245 else 236 246 err = 1; 237 247 238 248 if (!gpio_request(pdata->gpio_vid1, "MAX8952 VID1")) 239 249 gpio_direction_output(pdata->gpio_vid1, 240 - (pdata->default_mode >> 1) % 2); 250 + (pdata->default_mode >> 1) & 0x1); 241 251 else { 242 252 if (!err) 243 253 gpio_free(pdata->gpio_vid0);
+70 -113
drivers/regulator/max8997.c
··· 68 68 int min; 69 69 int max; 70 70 int step; 71 - unsigned int n_bits; 72 71 }; 73 72 74 73 /* Voltage maps in mV */ 75 74 static const struct voltage_map_desc ldo_voltage_map_desc = { 76 - .min = 800, .max = 3950, .step = 50, .n_bits = 6, 75 + .min = 800, .max = 3950, .step = 50, 77 76 }; /* LDO1 ~ 18, 21 all */ 78 77 79 78 static const struct voltage_map_desc buck1245_voltage_map_desc = { 80 - .min = 650, .max = 2225, .step = 25, .n_bits = 6, 79 + .min = 650, .max = 2225, .step = 25, 81 80 }; /* Buck1, 2, 4, 5 */ 82 81 83 82 static const struct voltage_map_desc buck37_voltage_map_desc = { 84 - .min = 750, .max = 3900, .step = 50, .n_bits = 6, 83 + .min = 750, .max = 3900, .step = 50, 85 84 }; /* Buck3, 7 */ 86 85 87 86 /* current map in mA */ 88 87 static const struct voltage_map_desc charger_current_map_desc = { 89 - .min = 200, .max = 950, .step = 50, .n_bits = 4, 88 + .min = 200, .max = 950, .step = 50, 90 89 }; 91 90 92 91 static const struct voltage_map_desc topoff_current_map_desc = { 93 - .min = 50, .max = 200, .step = 10, .n_bits = 4, 92 + .min = 50, .max = 200, .step = 10, 94 93 }; 95 94 96 95 static const struct voltage_map_desc *reg_voltage_map[] = { ··· 319 320 static int max8997_get_voltage_register(struct regulator_dev *rdev, 320 321 int *_reg, int *_shift, int *_mask) 321 322 { 323 + struct max8997_data *max8997 = rdev_get_drvdata(rdev); 322 324 int rid = rdev_get_id(rdev); 323 325 int reg, shift = 0, mask = 0x3f; 324 326 ··· 329 329 break; 330 330 case MAX8997_BUCK1: 331 331 reg = MAX8997_REG_BUCK1DVS1; 332 + if (max8997->buck1_gpiodvs) 333 + reg += max8997->buck125_gpioindex; 332 334 break; 333 335 case MAX8997_BUCK2: 334 336 reg = MAX8997_REG_BUCK2DVS1; 337 + if (max8997->buck2_gpiodvs) 338 + reg += max8997->buck125_gpioindex; 335 339 break; 336 340 case MAX8997_BUCK3: 337 341 reg = MAX8997_REG_BUCK3DVS; ··· 345 341 break; 346 342 case MAX8997_BUCK5: 347 343 reg = MAX8997_REG_BUCK5DVS1; 344 + if (max8997->buck5_gpiodvs) 345 + reg += max8997->buck125_gpioindex; 348 346 break; 349 347 case MAX8997_BUCK7: 350 348 reg = MAX8997_REG_BUCK7DVS; ··· 387 381 struct max8997_data *max8997 = rdev_get_drvdata(rdev); 388 382 struct i2c_client *i2c = max8997->iodev->i2c; 389 383 int reg, shift, mask, ret; 390 - int rid = rdev_get_id(rdev); 391 384 u8 val; 392 385 393 386 ret = max8997_get_voltage_register(rdev, &reg, &shift, &mask); 394 387 if (ret) 395 388 return ret; 396 - 397 - if ((rid == MAX8997_BUCK1 && max8997->buck1_gpiodvs) || 398 - (rid == MAX8997_BUCK2 && max8997->buck2_gpiodvs) || 399 - (rid == MAX8997_BUCK5 && max8997->buck5_gpiodvs)) 400 - reg += max8997->buck125_gpioindex; 401 389 402 390 ret = max8997_read_reg(i2c, reg, &val); 403 391 if (ret) ··· 415 415 const struct voltage_map_desc *desc, 416 416 int min_vol, int max_vol) 417 417 { 418 - int i = 0; 418 + int i; 419 419 420 420 if (desc == NULL) 421 421 return -EINVAL; ··· 423 423 if (max_vol < desc->min || min_vol > desc->max) 424 424 return -EINVAL; 425 425 426 - while (desc->min + desc->step * i < min_vol && 427 - desc->min + desc->step * i < desc->max) 428 - i++; 426 + if (min_vol < desc->min) 427 + min_vol = desc->min; 428 + 429 + i = DIV_ROUND_UP(min_vol - desc->min, desc->step); 429 430 430 431 if (desc->min + desc->step * i > max_vol) 431 - return -EINVAL; 432 - 433 - if (i >= (1 << desc->n_bits)) 434 432 return -EINVAL; 435 433 436 434 return i; ··· 852 854 .set_current_limit = max8997_set_voltage_ldobuck_wrap, 853 855 }; 854 856 855 - #define regulator_desc_ldo(num) { \ 856 - .name = "LDO"#num, \ 857 - .id = MAX8997_LDO##num, \ 858 - .ops = &max8997_ldo_ops, \ 859 - .type = REGULATOR_VOLTAGE, \ 860 - .owner = THIS_MODULE, \ 861 - } 862 - #define regulator_desc_buck(num) { \ 863 - .name = "BUCK"#num, \ 864 - .id = MAX8997_BUCK##num, \ 865 - .ops = &max8997_buck_ops, \ 857 + #define MAX8997_VOLTAGE_REGULATOR(_name, _ops) {\ 858 + .name = #_name, \ 859 + .id = MAX8997_##_name, \ 860 + .ops = &_ops, \ 866 861 .type = REGULATOR_VOLTAGE, \ 867 862 .owner = THIS_MODULE, \ 868 863 } 869 864 865 + #define MAX8997_CURRENT_REGULATOR(_name, _ops) {\ 866 + .name = #_name, \ 867 + .id = MAX8997_##_name, \ 868 + .ops = &_ops, \ 869 + .type = REGULATOR_CURRENT, \ 870 + .owner = THIS_MODULE, \ 871 + } 872 + 870 873 static struct regulator_desc regulators[] = { 871 - regulator_desc_ldo(1), 872 - regulator_desc_ldo(2), 873 - regulator_desc_ldo(3), 874 - regulator_desc_ldo(4), 875 - regulator_desc_ldo(5), 876 - regulator_desc_ldo(6), 877 - regulator_desc_ldo(7), 878 - regulator_desc_ldo(8), 879 - regulator_desc_ldo(9), 880 - regulator_desc_ldo(10), 881 - regulator_desc_ldo(11), 882 - regulator_desc_ldo(12), 883 - regulator_desc_ldo(13), 884 - regulator_desc_ldo(14), 885 - regulator_desc_ldo(15), 886 - regulator_desc_ldo(16), 887 - regulator_desc_ldo(17), 888 - regulator_desc_ldo(18), 889 - regulator_desc_ldo(21), 890 - regulator_desc_buck(1), 891 - regulator_desc_buck(2), 892 - regulator_desc_buck(3), 893 - regulator_desc_buck(4), 894 - regulator_desc_buck(5), 895 - { 896 - .name = "BUCK6", 897 - .id = MAX8997_BUCK6, 898 - .ops = &max8997_fixedvolt_ops, 899 - .type = REGULATOR_VOLTAGE, 900 - .owner = THIS_MODULE, 901 - }, 902 - regulator_desc_buck(7), 903 - { 904 - .name = "EN32KHz_AP", 905 - .id = MAX8997_EN32KHZ_AP, 906 - .ops = &max8997_fixedvolt_ops, 907 - .type = REGULATOR_VOLTAGE, 908 - .owner = THIS_MODULE, 909 - }, { 910 - .name = "EN32KHz_CP", 911 - .id = MAX8997_EN32KHZ_CP, 912 - .ops = &max8997_fixedvolt_ops, 913 - .type = REGULATOR_VOLTAGE, 914 - .owner = THIS_MODULE, 915 - }, { 916 - .name = "ENVICHG", 917 - .id = MAX8997_ENVICHG, 918 - .ops = &max8997_fixedvolt_ops, 919 - .type = REGULATOR_VOLTAGE, 920 - .owner = THIS_MODULE, 921 - }, { 922 - .name = "ESAFEOUT1", 923 - .id = MAX8997_ESAFEOUT1, 924 - .ops = &max8997_safeout_ops, 925 - .type = REGULATOR_VOLTAGE, 926 - .owner = THIS_MODULE, 927 - }, { 928 - .name = "ESAFEOUT2", 929 - .id = MAX8997_ESAFEOUT2, 930 - .ops = &max8997_safeout_ops, 931 - .type = REGULATOR_VOLTAGE, 932 - .owner = THIS_MODULE, 933 - }, { 934 - .name = "CHARGER_CV", 935 - .id = MAX8997_CHARGER_CV, 936 - .ops = &max8997_fixedstate_ops, 937 - .type = REGULATOR_VOLTAGE, 938 - .owner = THIS_MODULE, 939 - }, { 940 - .name = "CHARGER", 941 - .id = MAX8997_CHARGER, 942 - .ops = &max8997_charger_ops, 943 - .type = REGULATOR_CURRENT, 944 - .owner = THIS_MODULE, 945 - }, { 946 - .name = "CHARGER_TOPOFF", 947 - .id = MAX8997_CHARGER_TOPOFF, 948 - .ops = &max8997_charger_fixedstate_ops, 949 - .type = REGULATOR_CURRENT, 950 - .owner = THIS_MODULE, 951 - }, 874 + MAX8997_VOLTAGE_REGULATOR(LDO1, max8997_ldo_ops), 875 + MAX8997_VOLTAGE_REGULATOR(LDO2, max8997_ldo_ops), 876 + MAX8997_VOLTAGE_REGULATOR(LDO3, max8997_ldo_ops), 877 + MAX8997_VOLTAGE_REGULATOR(LDO4, max8997_ldo_ops), 878 + MAX8997_VOLTAGE_REGULATOR(LDO5, max8997_ldo_ops), 879 + MAX8997_VOLTAGE_REGULATOR(LDO6, max8997_ldo_ops), 880 + MAX8997_VOLTAGE_REGULATOR(LDO7, max8997_ldo_ops), 881 + MAX8997_VOLTAGE_REGULATOR(LDO8, max8997_ldo_ops), 882 + MAX8997_VOLTAGE_REGULATOR(LDO9, max8997_ldo_ops), 883 + MAX8997_VOLTAGE_REGULATOR(LDO10, max8997_ldo_ops), 884 + MAX8997_VOLTAGE_REGULATOR(LDO11, max8997_ldo_ops), 885 + MAX8997_VOLTAGE_REGULATOR(LDO12, max8997_ldo_ops), 886 + MAX8997_VOLTAGE_REGULATOR(LDO13, max8997_ldo_ops), 887 + MAX8997_VOLTAGE_REGULATOR(LDO14, max8997_ldo_ops), 888 + MAX8997_VOLTAGE_REGULATOR(LDO15, max8997_ldo_ops), 889 + MAX8997_VOLTAGE_REGULATOR(LDO16, max8997_ldo_ops), 890 + MAX8997_VOLTAGE_REGULATOR(LDO17, max8997_ldo_ops), 891 + MAX8997_VOLTAGE_REGULATOR(LDO18, max8997_ldo_ops), 892 + MAX8997_VOLTAGE_REGULATOR(LDO21, max8997_ldo_ops), 893 + MAX8997_VOLTAGE_REGULATOR(BUCK1, max8997_buck_ops), 894 + MAX8997_VOLTAGE_REGULATOR(BUCK2, max8997_buck_ops), 895 + MAX8997_VOLTAGE_REGULATOR(BUCK3, max8997_buck_ops), 896 + MAX8997_VOLTAGE_REGULATOR(BUCK4, max8997_buck_ops), 897 + MAX8997_VOLTAGE_REGULATOR(BUCK5, max8997_buck_ops), 898 + MAX8997_VOLTAGE_REGULATOR(BUCK6, max8997_fixedvolt_ops), 899 + MAX8997_VOLTAGE_REGULATOR(BUCK7, max8997_buck_ops), 900 + MAX8997_VOLTAGE_REGULATOR(EN32KHZ_AP, max8997_fixedvolt_ops), 901 + MAX8997_VOLTAGE_REGULATOR(EN32KHZ_CP, max8997_fixedvolt_ops), 902 + MAX8997_VOLTAGE_REGULATOR(ENVICHG, max8997_fixedvolt_ops), 903 + MAX8997_VOLTAGE_REGULATOR(ESAFEOUT1, max8997_safeout_ops), 904 + MAX8997_VOLTAGE_REGULATOR(ESAFEOUT2, max8997_safeout_ops), 905 + MAX8997_VOLTAGE_REGULATOR(CHARGER_CV, max8997_fixedstate_ops), 906 + MAX8997_CURRENT_REGULATOR(CHARGER, max8997_charger_ops), 907 + MAX8997_CURRENT_REGULATOR(CHARGER_TOPOFF, 908 + max8997_charger_fixedstate_ops), 952 909 }; 953 910 954 911 static __devinit int max8997_pmic_probe(struct platform_device *pdev) 955 912 { 956 913 struct max8997_dev *iodev = dev_get_drvdata(pdev->dev.parent); 957 914 struct max8997_platform_data *pdata = dev_get_platdata(iodev->dev); 915 + struct regulator_config config = { }; 958 916 struct regulator_dev **rdev; 959 917 struct max8997_data *max8997; 960 918 struct i2c_client *i2c; ··· 1094 1140 else if (id == MAX8997_CHARGER_CV) 1095 1141 regulators[id].n_voltages = 16; 1096 1142 1097 - rdev[i] = regulator_register(&regulators[id], max8997->dev, 1098 - pdata->regulators[i].initdata, max8997, NULL); 1143 + config.dev = max8997->dev; 1144 + config.init_data = pdata->regulators[i].initdata; 1145 + config.driver_data = max8997; 1146 + 1147 + rdev[i] = regulator_register(&regulators[id], &config); 1099 1148 if (IS_ERR(rdev[i])) { 1100 1149 ret = PTR_ERR(rdev[i]); 1101 1150 dev_err(max8997->dev, "regulator init failed for %d\n",
+52 -24
drivers/regulator/max8998.c
··· 277 277 return 0; 278 278 } 279 279 280 - static int max8998_get_voltage(struct regulator_dev *rdev) 280 + static int max8998_get_voltage_sel(struct regulator_dev *rdev) 281 281 { 282 282 struct max8998_data *max8998 = rdev_get_drvdata(rdev); 283 283 struct i2c_client *i2c = max8998->iodev->i2c; ··· 295 295 val >>= shift; 296 296 val &= mask; 297 297 298 - return max8998_list_voltage(rdev, val); 298 + return val; 299 299 } 300 300 301 301 static int max8998_set_voltage_ldo(struct regulator_dev *rdev, ··· 306 306 int min_vol = min_uV / 1000, max_vol = max_uV / 1000; 307 307 const struct voltage_map_desc *desc; 308 308 int ldo = rdev_get_id(rdev); 309 - int reg, shift = 0, mask, ret; 310 - int i = 0; 309 + int reg, shift = 0, mask, ret, i; 311 310 312 311 if (ldo >= ARRAY_SIZE(ldo_voltage_map)) 313 312 return -EINVAL; ··· 318 319 if (max_vol < desc->min || min_vol > desc->max) 319 320 return -EINVAL; 320 321 321 - while (desc->min + desc->step*i < min_vol && 322 - desc->min + desc->step*i < desc->max) 323 - i++; 322 + if (min_vol < desc->min) 323 + min_vol = desc->min; 324 + 325 + i = DIV_ROUND_UP(min_vol - desc->min, desc->step); 324 326 325 327 if (desc->min + desc->step*i > max_vol) 326 328 return -EINVAL; ··· 359 359 const struct voltage_map_desc *desc; 360 360 int buck = rdev_get_id(rdev); 361 361 int reg, shift = 0, mask, ret; 362 - int difference = 0, i = 0, j = 0, previous_vol = 0; 363 - u8 val = 0; 362 + int i, j, previous_sel; 364 363 static u8 buck1_last_val; 365 364 366 365 if (buck >= ARRAY_SIZE(ldo_voltage_map)) ··· 373 374 if (max_vol < desc->min || min_vol > desc->max) 374 375 return -EINVAL; 375 376 376 - while (desc->min + desc->step*i < min_vol && 377 - desc->min + desc->step*i < desc->max) 378 - i++; 377 + if (min_vol < desc->min) 378 + min_vol = desc->min; 379 + 380 + i = DIV_ROUND_UP(min_vol - desc->min, desc->step); 379 381 380 382 if (desc->min + desc->step*i > max_vol) 381 383 return -EINVAL; ··· 387 387 if (ret) 388 388 return ret; 389 389 390 - previous_vol = max8998_get_voltage(rdev); 390 + previous_sel = max8998_get_voltage_sel(rdev); 391 391 392 392 /* Check if voltage needs to be changed */ 393 393 /* if previous_voltage equal new voltage, return */ 394 - if (previous_vol == max8998_list_voltage(rdev, i)) { 394 + if (previous_sel == i) { 395 395 dev_dbg(max8998->dev, "No voltage change, old:%d, new:%d\n", 396 - previous_vol, max8998_list_voltage(rdev, i)); 396 + max8998_list_voltage(rdev, previous_sel), 397 + max8998_list_voltage(rdev, i)); 397 398 return ret; 398 399 } 399 400 ··· 483 482 break; 484 483 } 485 484 485 + return ret; 486 + } 487 + 488 + static int max8998_set_voltage_buck_time_sel(struct regulator_dev *rdev, 489 + unsigned int old_selector, 490 + unsigned int new_selector) 491 + { 492 + struct max8998_data *max8998 = rdev_get_drvdata(rdev); 493 + struct i2c_client *i2c = max8998->iodev->i2c; 494 + const struct voltage_map_desc *desc; 495 + int buck = rdev_get_id(rdev); 496 + u8 val = 0; 497 + int difference, ret; 498 + 499 + if (buck < MAX8998_BUCK1 || buck > MAX8998_BUCK4) 500 + return -EINVAL; 501 + 502 + desc = ldo_voltage_map[buck]; 503 + 486 504 /* Voltage stabilization */ 487 - max8998_read_reg(i2c, MAX8998_REG_ONOFF4, &val); 505 + ret = max8998_read_reg(i2c, MAX8998_REG_ONOFF4, &val); 506 + if (ret) 507 + return ret; 488 508 489 509 /* lp3974 hasn't got ENRAMP bit - ramp is assumed as true */ 490 510 /* MAX8998 has ENRAMP bit implemented, so test it*/ 491 511 if (max8998->iodev->type == TYPE_MAX8998 && !(val & MAX8998_ENRAMP)) 492 - return ret; 512 + return 0; 493 513 494 - difference = desc->min + desc->step*i - previous_vol/1000; 514 + difference = (new_selector - old_selector) * desc->step; 495 515 if (difference > 0) 496 - udelay(difference / ((val & 0x0f) + 1)); 516 + return difference / ((val & 0x0f) + 1); 497 517 498 - return ret; 518 + return 0; 499 519 } 500 520 501 521 static struct regulator_ops max8998_ldo_ops = { ··· 524 502 .is_enabled = max8998_ldo_is_enabled, 525 503 .enable = max8998_ldo_enable, 526 504 .disable = max8998_ldo_disable, 527 - .get_voltage = max8998_get_voltage, 505 + .get_voltage_sel = max8998_get_voltage_sel, 528 506 .set_voltage = max8998_set_voltage_ldo, 529 507 .set_suspend_enable = max8998_ldo_enable, 530 508 .set_suspend_disable = max8998_ldo_disable, ··· 535 513 .is_enabled = max8998_ldo_is_enabled, 536 514 .enable = max8998_ldo_enable, 537 515 .disable = max8998_ldo_disable, 538 - .get_voltage = max8998_get_voltage, 516 + .get_voltage_sel = max8998_get_voltage_sel, 539 517 .set_voltage = max8998_set_voltage_buck, 518 + .set_voltage_time_sel = max8998_set_voltage_buck_time_sel, 540 519 .set_suspend_enable = max8998_ldo_enable, 541 520 .set_suspend_disable = max8998_ldo_disable, 542 521 }; ··· 708 685 { 709 686 struct max8998_dev *iodev = dev_get_drvdata(pdev->dev.parent); 710 687 struct max8998_platform_data *pdata = dev_get_platdata(iodev->dev); 688 + struct regulator_config config = { }; 711 689 struct regulator_dev **rdev; 712 690 struct max8998_data *max8998; 713 691 struct i2c_client *i2c; ··· 864 840 int count = (desc->max - desc->min) / desc->step + 1; 865 841 regulators[index].n_voltages = count; 866 842 } 867 - rdev[i] = regulator_register(&regulators[index], max8998->dev, 868 - pdata->regulators[i].initdata, max8998, NULL); 843 + 844 + config.dev = max8998->dev; 845 + config.init_data = pdata->regulators[i].initdata; 846 + config.driver_data = max8998; 847 + 848 + rdev[i] = regulator_register(&regulators[index], &config); 869 849 if (IS_ERR(rdev[i])) { 870 850 ret = PTR_ERR(rdev[i]); 871 851 dev_err(max8998->dev, "regulator init failed\n");
+10 -4
drivers/regulator/mc13783-regulator.c
··· 340 340 struct mc13xxx_regulator_platform_data *pdata = 341 341 dev_get_platdata(&pdev->dev); 342 342 struct mc13xxx_regulator_init_data *init_data; 343 + struct regulator_config config = { }; 343 344 int i, ret; 344 345 345 346 dev_dbg(&pdev->dev, "%s id %d\n", __func__, pdev->id); ··· 358 357 priv->mc13xxx = mc13783; 359 358 360 359 for (i = 0; i < pdata->num_regulators; i++) { 361 - init_data = &pdata->regulators[i]; 362 - priv->regulators[i] = regulator_register( 363 - &mc13783_regulators[init_data->id].desc, 364 - &pdev->dev, init_data->init_data, priv, NULL); 360 + struct regulator_desc *desc; 365 361 362 + init_data = &pdata->regulators[i]; 363 + desc = &mc13783_regulators[init_data->id].desc; 364 + 365 + config.dev = &pdev->dev; 366 + config.init_data = init_data->init_data; 367 + config.driver_data = priv; 368 + 369 + priv->regulators[i] = regulator_register(desc, &config); 366 370 if (IS_ERR(priv->regulators[i])) { 367 371 dev_err(&pdev->dev, "failed to register regulator %s\n", 368 372 mc13783_regulators[i].desc.name);
+10 -15
drivers/regulator/mc13892-regulator.c
··· 428 428 return val; 429 429 } 430 430 431 - static int mc13892_sw_regulator_set_voltage(struct regulator_dev *rdev, 432 - int min_uV, int max_uV, unsigned *selector) 431 + static int mc13892_sw_regulator_set_voltage_sel(struct regulator_dev *rdev, 432 + unsigned selector) 433 433 { 434 434 struct mc13xxx_regulator_priv *priv = rdev_get_drvdata(rdev); 435 435 int hi, value, mask, id = rdev_get_id(rdev); 436 436 u32 valread; 437 437 int ret; 438 438 439 - dev_dbg(rdev_get_dev(rdev), "%s id: %d min_uV: %d max_uV: %d\n", 440 - __func__, id, min_uV, max_uV); 441 - 442 - /* Find the best index */ 443 - value = mc13xxx_get_best_voltage_index(rdev, min_uV, max_uV); 444 - dev_dbg(rdev_get_dev(rdev), "%s best value: %d\n", __func__, value); 445 - if (value < 0) 446 - return value; 447 - 448 - value = mc13892_regulators[id].voltages[value]; 439 + value = mc13892_regulators[id].voltages[selector]; 449 440 450 441 mc13xxx_lock(priv->mc13xxx); 451 442 ret = mc13xxx_reg_read(priv->mc13xxx, ··· 471 480 static struct regulator_ops mc13892_sw_regulator_ops = { 472 481 .is_enabled = mc13xxx_sw_regulator_is_enabled, 473 482 .list_voltage = mc13xxx_regulator_list_voltage, 474 - .set_voltage = mc13892_sw_regulator_set_voltage, 483 + .set_voltage_sel = mc13892_sw_regulator_set_voltage_sel, 475 484 .get_voltage = mc13892_sw_regulator_get_voltage, 476 485 }; 477 486 ··· 519 528 struct mc13xxx_regulator_platform_data *pdata = 520 529 dev_get_platdata(&pdev->dev); 521 530 struct mc13xxx_regulator_init_data *mc13xxx_data; 531 + struct regulator_config config = { }; 522 532 int i, ret; 523 533 int num_regulators = 0; 524 534 u32 val; ··· 589 597 } 590 598 desc = &mc13892_regulators[id].desc; 591 599 592 - priv->regulators[i] = regulator_register( 593 - desc, &pdev->dev, init_data, priv, node); 600 + config.dev = &pdev->dev; 601 + config.init_data = init_data; 602 + config.driver_data = priv; 603 + config.of_node = node; 594 604 605 + priv->regulators[i] = regulator_register(desc, &config); 595 606 if (IS_ERR(priv->regulators[i])) { 596 607 dev_err(&pdev->dev, "failed to register regulator %s\n", 597 608 mc13892_regulators[i].desc.name);
+5 -49
drivers/regulator/mc13xxx-regulator-core.c
··· 94 94 } 95 95 EXPORT_SYMBOL_GPL(mc13xxx_regulator_list_voltage); 96 96 97 - int mc13xxx_get_best_voltage_index(struct regulator_dev *rdev, 98 - int min_uV, int max_uV) 97 + static int mc13xxx_regulator_set_voltage_sel(struct regulator_dev *rdev, 98 + unsigned selector) 99 99 { 100 100 struct mc13xxx_regulator_priv *priv = rdev_get_drvdata(rdev); 101 101 struct mc13xxx_regulator *mc13xxx_regulators = priv->mc13xxx_regulators; 102 - int reg_id = rdev_get_id(rdev); 103 - int i; 104 - int bestmatch; 105 - int bestindex; 106 - 107 - /* 108 - * Locate the minimum voltage fitting the criteria on 109 - * this regulator. The switchable voltages are not 110 - * in strict falling order so we need to check them 111 - * all for the best match. 112 - */ 113 - bestmatch = INT_MAX; 114 - bestindex = -1; 115 - for (i = 0; i < mc13xxx_regulators[reg_id].desc.n_voltages; i++) { 116 - if (mc13xxx_regulators[reg_id].voltages[i] >= min_uV && 117 - mc13xxx_regulators[reg_id].voltages[i] < bestmatch) { 118 - bestmatch = mc13xxx_regulators[reg_id].voltages[i]; 119 - bestindex = i; 120 - } 121 - } 122 - 123 - if (bestindex < 0 || bestmatch > max_uV) { 124 - dev_warn(&rdev->dev, "no possible value for %d<=x<=%d uV\n", 125 - min_uV, max_uV); 126 - return -EINVAL; 127 - } 128 - return bestindex; 129 - } 130 - EXPORT_SYMBOL_GPL(mc13xxx_get_best_voltage_index); 131 - 132 - static int mc13xxx_regulator_set_voltage(struct regulator_dev *rdev, int min_uV, 133 - int max_uV, unsigned *selector) 134 - { 135 - struct mc13xxx_regulator_priv *priv = rdev_get_drvdata(rdev); 136 - struct mc13xxx_regulator *mc13xxx_regulators = priv->mc13xxx_regulators; 137 - int value, id = rdev_get_id(rdev); 102 + int id = rdev_get_id(rdev); 138 103 int ret; 139 - 140 - dev_dbg(rdev_get_dev(rdev), "%s id: %d min_uV: %d max_uV: %d\n", 141 - __func__, id, min_uV, max_uV); 142 - 143 - /* Find the best index */ 144 - value = mc13xxx_get_best_voltage_index(rdev, min_uV, max_uV); 145 - dev_dbg(rdev_get_dev(rdev), "%s best value: %d\n", __func__, value); 146 - if (value < 0) 147 - return value; 148 104 149 105 mc13xxx_lock(priv->mc13xxx); 150 106 ret = mc13xxx_reg_rmw(priv->mc13xxx, mc13xxx_regulators[id].vsel_reg, 151 107 mc13xxx_regulators[id].vsel_mask, 152 - value << mc13xxx_regulators[id].vsel_shift); 108 + selector << mc13xxx_regulators[id].vsel_shift); 153 109 mc13xxx_unlock(priv->mc13xxx); 154 110 155 111 return ret; ··· 143 187 .disable = mc13xxx_regulator_disable, 144 188 .is_enabled = mc13xxx_regulator_is_enabled, 145 189 .list_voltage = mc13xxx_regulator_list_voltage, 146 - .set_voltage = mc13xxx_regulator_set_voltage, 190 + .set_voltage_sel = mc13xxx_regulator_set_voltage_sel, 147 191 .get_voltage = mc13xxx_regulator_get_voltage, 148 192 }; 149 193 EXPORT_SYMBOL_GPL(mc13xxx_regulator_ops);
-2
drivers/regulator/mc13xxx.h
··· 35 35 36 36 extern int mc13xxx_sw_regulator(struct regulator_dev *rdev); 37 37 extern int mc13xxx_sw_regulator_is_enabled(struct regulator_dev *rdev); 38 - extern int mc13xxx_get_best_voltage_index(struct regulator_dev *rdev, 39 - int min_uV, int max_uV); 40 38 extern int mc13xxx_regulator_list_voltage(struct regulator_dev *rdev, 41 39 unsigned selector); 42 40 extern int mc13xxx_fixed_regulator_set_voltage(struct regulator_dev *rdev,
+17 -37
drivers/regulator/pcap-regulator.c
··· 150 150 VREG_INFO(SW2S, PCAP_REG_LOWPWR, NA, 20, NA, NA), */ 151 151 }; 152 152 153 - static int pcap_regulator_set_voltage(struct regulator_dev *rdev, 154 - int min_uV, int max_uV, 155 - unsigned *selector) 153 + static int pcap_regulator_set_voltage_sel(struct regulator_dev *rdev, 154 + unsigned selector) 156 155 { 157 156 struct pcap_regulator *vreg = &vreg_table[rdev_get_id(rdev)]; 158 157 void *pcap = rdev_get_drvdata(rdev); 159 - int uV; 160 - u8 i; 161 158 162 159 /* the regulator doesn't support voltage switching */ 163 160 if (vreg->n_voltages == 1) 164 161 return -EINVAL; 165 162 166 - for (i = 0; i < vreg->n_voltages; i++) { 167 - /* For V1 the first is not the best match */ 168 - if (i == 0 && rdev_get_id(rdev) == V1) 169 - i = 1; 170 - else if (i + 1 == vreg->n_voltages && rdev_get_id(rdev) == V1) 171 - i = 0; 172 - 173 - uV = vreg->voltage_table[i] * 1000; 174 - if (min_uV <= uV && uV <= max_uV) { 175 - *selector = i; 176 - return ezx_pcap_set_bits(pcap, vreg->reg, 177 - (vreg->n_voltages - 1) << vreg->index, 178 - i << vreg->index); 179 - } 180 - 181 - if (i == 0 && rdev_get_id(rdev) == V1) 182 - i = vreg->n_voltages - 1; 183 - } 184 - 185 - /* the requested voltage range is not supported by this regulator */ 186 - return -EINVAL; 163 + return ezx_pcap_set_bits(pcap, vreg->reg, 164 + (vreg->n_voltages - 1) << vreg->index, 165 + selector << vreg->index); 187 166 } 188 167 189 - static int pcap_regulator_get_voltage(struct regulator_dev *rdev) 168 + static int pcap_regulator_get_voltage_sel(struct regulator_dev *rdev) 190 169 { 191 170 struct pcap_regulator *vreg = &vreg_table[rdev_get_id(rdev)]; 192 171 void *pcap = rdev_get_drvdata(rdev); 193 172 u32 tmp; 194 - int mV; 195 173 196 174 if (vreg->n_voltages == 1) 197 - return vreg->voltage_table[0] * 1000; 175 + return 0; 198 176 199 177 ezx_pcap_read(pcap, vreg->reg, &tmp); 200 178 tmp = ((tmp >> vreg->index) & (vreg->n_voltages - 1)); 201 - mV = vreg->voltage_table[tmp]; 202 - 203 - return mV * 1000; 179 + return tmp; 204 180 } 205 181 206 182 static int pcap_regulator_enable(struct regulator_dev *rdev) ··· 224 248 225 249 static struct regulator_ops pcap_regulator_ops = { 226 250 .list_voltage = pcap_regulator_list_voltage, 227 - .set_voltage = pcap_regulator_set_voltage, 228 - .get_voltage = pcap_regulator_get_voltage, 251 + .set_voltage_sel = pcap_regulator_set_voltage_sel, 252 + .get_voltage_sel = pcap_regulator_get_voltage_sel, 229 253 .enable = pcap_regulator_enable, 230 254 .disable = pcap_regulator_disable, 231 255 .is_enabled = pcap_regulator_is_enabled, ··· 241 265 .owner = THIS_MODULE, \ 242 266 } 243 267 244 - static struct regulator_desc pcap_regulators[] = { 268 + static const struct regulator_desc pcap_regulators[] = { 245 269 VREG(V1), VREG(V2), VREG(V3), VREG(V4), VREG(V5), VREG(V6), VREG(V7), 246 270 VREG(V8), VREG(V9), VREG(V10), VREG(VAUX1), VREG(VAUX2), VREG(VAUX3), 247 271 VREG(VAUX4), VREG(VSIM), VREG(VSIM2), VREG(VVIB), VREG(SW1), VREG(SW2), ··· 251 275 { 252 276 struct regulator_dev *rdev; 253 277 void *pcap = dev_get_drvdata(pdev->dev.parent); 278 + struct regulator_config config = { }; 254 279 255 - rdev = regulator_register(&pcap_regulators[pdev->id], &pdev->dev, 256 - pdev->dev.platform_data, pcap, NULL); 280 + config.dev = &pdev->dev; 281 + config.init_data = pdev->dev.platform_data; 282 + config.driver_data = pcap; 283 + 284 + rdev = regulator_register(&pcap_regulators[pdev->id], &config); 257 285 if (IS_ERR(rdev)) 258 286 return PTR_ERR(rdev); 259 287
+49 -150
drivers/regulator/pcf50633-regulator.c
··· 24 24 #include <linux/mfd/pcf50633/core.h> 25 25 #include <linux/mfd/pcf50633/pmic.h> 26 26 27 - #define PCF50633_REGULATOR(_name, _id, _n) \ 28 - { \ 29 - .name = _name, \ 30 - .id = _id, \ 31 - .ops = &pcf50633_regulator_ops, \ 32 - .n_voltages = _n, \ 33 - .type = REGULATOR_VOLTAGE, \ 34 - .owner = THIS_MODULE, \ 27 + #define PCF50633_REGULATOR(_name, _id, _n) \ 28 + { \ 29 + .name = _name, \ 30 + .id = PCF50633_REGULATOR_##_id, \ 31 + .ops = &pcf50633_regulator_ops, \ 32 + .n_voltages = _n, \ 33 + .type = REGULATOR_VOLTAGE, \ 34 + .owner = THIS_MODULE, \ 35 + .vsel_reg = PCF50633_REG_##_id##OUT, \ 36 + .vsel_mask = 0xff, \ 37 + .enable_reg = PCF50633_REG_##_id##OUT + 1, \ 38 + .enable_mask = PCF50633_REGULATOR_ON, \ 35 39 } 36 - 37 - static const u8 pcf50633_regulator_registers[PCF50633_NUM_REGULATORS] = { 38 - [PCF50633_REGULATOR_AUTO] = PCF50633_REG_AUTOOUT, 39 - [PCF50633_REGULATOR_DOWN1] = PCF50633_REG_DOWN1OUT, 40 - [PCF50633_REGULATOR_DOWN2] = PCF50633_REG_DOWN2OUT, 41 - [PCF50633_REGULATOR_MEMLDO] = PCF50633_REG_MEMLDOOUT, 42 - [PCF50633_REGULATOR_LDO1] = PCF50633_REG_LDO1OUT, 43 - [PCF50633_REGULATOR_LDO2] = PCF50633_REG_LDO2OUT, 44 - [PCF50633_REGULATOR_LDO3] = PCF50633_REG_LDO3OUT, 45 - [PCF50633_REGULATOR_LDO4] = PCF50633_REG_LDO4OUT, 46 - [PCF50633_REGULATOR_LDO5] = PCF50633_REG_LDO5OUT, 47 - [PCF50633_REGULATOR_LDO6] = PCF50633_REG_LDO6OUT, 48 - [PCF50633_REGULATOR_HCLDO] = PCF50633_REG_HCLDOOUT, 49 - }; 50 40 51 41 /* Bits from voltage value */ 52 42 static u8 auto_voltage_bits(unsigned int millivolts) 53 43 { 54 44 if (millivolts < 1800) 55 - return 0; 45 + return 0x2f; 56 46 if (millivolts > 3800) 57 47 return 0xff; 58 48 ··· 77 87 /* Obtain voltage value from bits */ 78 88 static unsigned int auto_voltage_value(u8 bits) 79 89 { 90 + /* AUTOOUT: 00000000 to 00101110 are reserved. 91 + * Return 0 for bits in reserved range, which means this selector code 92 + * can't be used on this system */ 80 93 if (bits < 0x2f) 81 94 return 0; 82 95 ··· 116 123 117 124 millivolts = min_uV / 1000; 118 125 119 - regnr = pcf50633_regulator_registers[regulator_id]; 126 + regnr = rdev->desc->vsel_reg; 120 127 121 128 switch (regulator_id) { 122 129 case PCF50633_REGULATOR_AUTO: ··· 147 154 return pcf50633_reg_write(pcf, regnr, volt_bits); 148 155 } 149 156 150 - static int pcf50633_regulator_voltage_value(enum pcf50633_regulator_id id, 151 - u8 bits) 157 + static int pcf50633_regulator_list_voltage(struct regulator_dev *rdev, 158 + unsigned int index) 152 159 { 160 + int regulator_id = rdev_get_id(rdev); 161 + 153 162 int millivolts; 154 163 155 - switch (id) { 164 + switch (regulator_id) { 156 165 case PCF50633_REGULATOR_AUTO: 157 - millivolts = auto_voltage_value(bits); 166 + millivolts = auto_voltage_value(index); 158 167 break; 159 168 case PCF50633_REGULATOR_DOWN1: 160 - millivolts = down_voltage_value(bits); 169 + millivolts = down_voltage_value(index); 161 170 break; 162 171 case PCF50633_REGULATOR_DOWN2: 163 - millivolts = down_voltage_value(bits); 172 + millivolts = down_voltage_value(index); 164 173 break; 165 174 case PCF50633_REGULATOR_LDO1: 166 175 case PCF50633_REGULATOR_LDO2: ··· 172 177 case PCF50633_REGULATOR_LDO6: 173 178 case PCF50633_REGULATOR_HCLDO: 174 179 case PCF50633_REGULATOR_MEMLDO: 175 - millivolts = ldo_voltage_value(bits); 180 + millivolts = ldo_voltage_value(index); 176 181 break; 177 182 default: 178 183 return -EINVAL; ··· 181 186 return millivolts * 1000; 182 187 } 183 188 184 - static int pcf50633_regulator_get_voltage(struct regulator_dev *rdev) 185 - { 186 - struct pcf50633 *pcf; 187 - int regulator_id; 188 - u8 volt_bits, regnr; 189 - 190 - pcf = rdev_get_drvdata(rdev); 191 - 192 - regulator_id = rdev_get_id(rdev); 193 - if (regulator_id >= PCF50633_NUM_REGULATORS) 194 - return -EINVAL; 195 - 196 - regnr = pcf50633_regulator_registers[regulator_id]; 197 - 198 - volt_bits = pcf50633_reg_read(pcf, regnr); 199 - 200 - return pcf50633_regulator_voltage_value(regulator_id, volt_bits); 201 - } 202 - 203 - static int pcf50633_regulator_list_voltage(struct regulator_dev *rdev, 204 - unsigned int index) 205 - { 206 - struct pcf50633 *pcf; 207 - int regulator_id; 208 - 209 - pcf = rdev_get_drvdata(rdev); 210 - 211 - regulator_id = rdev_get_id(rdev); 212 - 213 - switch (regulator_id) { 214 - case PCF50633_REGULATOR_AUTO: 215 - index += 0x2f; 216 - break; 217 - default: 218 - break; 219 - } 220 - 221 - return pcf50633_regulator_voltage_value(regulator_id, index); 222 - } 223 - 224 - static int pcf50633_regulator_enable(struct regulator_dev *rdev) 225 - { 226 - struct pcf50633 *pcf = rdev_get_drvdata(rdev); 227 - int regulator_id; 228 - u8 regnr; 229 - 230 - regulator_id = rdev_get_id(rdev); 231 - if (regulator_id >= PCF50633_NUM_REGULATORS) 232 - return -EINVAL; 233 - 234 - /* The *ENA register is always one after the *OUT register */ 235 - regnr = pcf50633_regulator_registers[regulator_id] + 1; 236 - 237 - return pcf50633_reg_set_bit_mask(pcf, regnr, PCF50633_REGULATOR_ON, 238 - PCF50633_REGULATOR_ON); 239 - } 240 - 241 - static int pcf50633_regulator_disable(struct regulator_dev *rdev) 242 - { 243 - struct pcf50633 *pcf = rdev_get_drvdata(rdev); 244 - int regulator_id; 245 - u8 regnr; 246 - 247 - regulator_id = rdev_get_id(rdev); 248 - if (regulator_id >= PCF50633_NUM_REGULATORS) 249 - return -EINVAL; 250 - 251 - /* the *ENA register is always one after the *OUT register */ 252 - regnr = pcf50633_regulator_registers[regulator_id] + 1; 253 - 254 - return pcf50633_reg_set_bit_mask(pcf, regnr, 255 - PCF50633_REGULATOR_ON, 0); 256 - } 257 - 258 - static int pcf50633_regulator_is_enabled(struct regulator_dev *rdev) 259 - { 260 - struct pcf50633 *pcf = rdev_get_drvdata(rdev); 261 - int regulator_id = rdev_get_id(rdev); 262 - u8 regnr; 263 - 264 - regulator_id = rdev_get_id(rdev); 265 - if (regulator_id >= PCF50633_NUM_REGULATORS) 266 - return -EINVAL; 267 - 268 - /* the *ENA register is always one after the *OUT register */ 269 - regnr = pcf50633_regulator_registers[regulator_id] + 1; 270 - 271 - return pcf50633_reg_read(pcf, regnr) & PCF50633_REGULATOR_ON; 272 - } 273 - 274 189 static struct regulator_ops pcf50633_regulator_ops = { 275 190 .set_voltage = pcf50633_regulator_set_voltage, 276 - .get_voltage = pcf50633_regulator_get_voltage, 191 + .get_voltage_sel = regulator_get_voltage_sel_regmap, 277 192 .list_voltage = pcf50633_regulator_list_voltage, 278 - .enable = pcf50633_regulator_enable, 279 - .disable = pcf50633_regulator_disable, 280 - .is_enabled = pcf50633_regulator_is_enabled, 193 + .enable = regulator_enable_regmap, 194 + .disable = regulator_disable_regmap, 195 + .is_enabled = regulator_is_enabled_regmap, 281 196 }; 282 197 283 - static struct regulator_desc regulators[] = { 284 - [PCF50633_REGULATOR_AUTO] = 285 - PCF50633_REGULATOR("auto", PCF50633_REGULATOR_AUTO, 81), 286 - [PCF50633_REGULATOR_DOWN1] = 287 - PCF50633_REGULATOR("down1", PCF50633_REGULATOR_DOWN1, 96), 288 - [PCF50633_REGULATOR_DOWN2] = 289 - PCF50633_REGULATOR("down2", PCF50633_REGULATOR_DOWN2, 96), 290 - [PCF50633_REGULATOR_LDO1] = 291 - PCF50633_REGULATOR("ldo1", PCF50633_REGULATOR_LDO1, 28), 292 - [PCF50633_REGULATOR_LDO2] = 293 - PCF50633_REGULATOR("ldo2", PCF50633_REGULATOR_LDO2, 28), 294 - [PCF50633_REGULATOR_LDO3] = 295 - PCF50633_REGULATOR("ldo3", PCF50633_REGULATOR_LDO3, 28), 296 - [PCF50633_REGULATOR_LDO4] = 297 - PCF50633_REGULATOR("ldo4", PCF50633_REGULATOR_LDO4, 28), 298 - [PCF50633_REGULATOR_LDO5] = 299 - PCF50633_REGULATOR("ldo5", PCF50633_REGULATOR_LDO5, 28), 300 - [PCF50633_REGULATOR_LDO6] = 301 - PCF50633_REGULATOR("ldo6", PCF50633_REGULATOR_LDO6, 28), 302 - [PCF50633_REGULATOR_HCLDO] = 303 - PCF50633_REGULATOR("hcldo", PCF50633_REGULATOR_HCLDO, 28), 304 - [PCF50633_REGULATOR_MEMLDO] = 305 - PCF50633_REGULATOR("memldo", PCF50633_REGULATOR_MEMLDO, 28), 198 + static const struct regulator_desc regulators[] = { 199 + [PCF50633_REGULATOR_AUTO] = PCF50633_REGULATOR("auto", AUTO, 128), 200 + [PCF50633_REGULATOR_DOWN1] = PCF50633_REGULATOR("down1", DOWN1, 96), 201 + [PCF50633_REGULATOR_DOWN2] = PCF50633_REGULATOR("down2", DOWN2, 96), 202 + [PCF50633_REGULATOR_LDO1] = PCF50633_REGULATOR("ldo1", LDO1, 28), 203 + [PCF50633_REGULATOR_LDO2] = PCF50633_REGULATOR("ldo2", LDO2, 28), 204 + [PCF50633_REGULATOR_LDO3] = PCF50633_REGULATOR("ldo3", LDO3, 28), 205 + [PCF50633_REGULATOR_LDO4] = PCF50633_REGULATOR("ldo4", LDO4, 28), 206 + [PCF50633_REGULATOR_LDO5] = PCF50633_REGULATOR("ldo5", LDO5, 28), 207 + [PCF50633_REGULATOR_LDO6] = PCF50633_REGULATOR("ldo6", LDO6, 28), 208 + [PCF50633_REGULATOR_HCLDO] = PCF50633_REGULATOR("hcldo", HCLDO, 28), 209 + [PCF50633_REGULATOR_MEMLDO] = PCF50633_REGULATOR("memldo", MEMLDO, 28), 306 210 }; 307 211 308 212 static int __devinit pcf50633_regulator_probe(struct platform_device *pdev) 309 213 { 310 214 struct regulator_dev *rdev; 311 215 struct pcf50633 *pcf; 216 + struct regulator_config config = { }; 312 217 313 218 /* Already set by core driver */ 314 219 pcf = dev_to_pcf50633(pdev->dev.parent); 315 220 316 - rdev = regulator_register(&regulators[pdev->id], &pdev->dev, 317 - pdev->dev.platform_data, pcf, NULL); 221 + config.dev = &pdev->dev; 222 + config.init_data = pdev->dev.platform_data; 223 + config.driver_data = pcf; 224 + config.regmap = pcf->regmap; 225 + 226 + rdev = regulator_register(&regulators[pdev->id], &config); 318 227 if (IS_ERR(rdev)) 319 228 return PTR_ERR(rdev); 320 229
+295
drivers/regulator/rc5t583-regulator.c
··· 1 + /* 2 + * Regulator driver for RICOH RC5T583 power management chip. 3 + * 4 + * Copyright (c) 2011-2012, NVIDIA CORPORATION. All rights reserved. 5 + * Author: Laxman dewangan <ldewangan@nvidia.com> 6 + * 7 + * based on code 8 + * Copyright (C) 2011 RICOH COMPANY,LTD 9 + * 10 + * 11 + * This program is free software; you can redistribute it and/or modify it 12 + * under the terms and conditions of the GNU General Public License, 13 + * version 2, as published by the Free Software Foundation. 14 + * 15 + * This program is distributed in the hope it will be useful, but WITHOUT 16 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 17 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 18 + * more details. 19 + * 20 + * You should have received a copy of the GNU General Public License 21 + * along with this program. If not, see <http://www.gnu.org/licenses/>. 22 + * 23 + */ 24 + 25 + #include <linux/module.h> 26 + #include <linux/delay.h> 27 + #include <linux/init.h> 28 + #include <linux/slab.h> 29 + #include <linux/err.h> 30 + #include <linux/platform_device.h> 31 + #include <linux/regulator/driver.h> 32 + #include <linux/regulator/machine.h> 33 + #include <linux/gpio.h> 34 + #include <linux/mfd/rc5t583.h> 35 + 36 + struct rc5t583_regulator_info { 37 + int deepsleep_id; 38 + 39 + /* Regulator register address.*/ 40 + uint8_t reg_disc_reg; 41 + uint8_t disc_bit; 42 + uint8_t deepsleep_reg; 43 + 44 + /* Chip constraints on regulator behavior */ 45 + int min_uV; 46 + int max_uV; 47 + int step_uV; 48 + 49 + /* Regulator specific turn-on delay and voltage settling time*/ 50 + int enable_uv_per_us; 51 + int change_uv_per_us; 52 + 53 + /* Used by regulator core */ 54 + struct regulator_desc desc; 55 + }; 56 + 57 + struct rc5t583_regulator { 58 + struct rc5t583_regulator_info *reg_info; 59 + 60 + /* Devices */ 61 + struct device *dev; 62 + struct rc5t583 *mfd; 63 + struct regulator_dev *rdev; 64 + }; 65 + 66 + static int rc5t583_list_voltage(struct regulator_dev *rdev, unsigned selector) 67 + { 68 + struct rc5t583_regulator *reg = rdev_get_drvdata(rdev); 69 + struct rc5t583_regulator_info *ri = reg->reg_info; 70 + return ri->min_uV + (ri->step_uV * selector); 71 + } 72 + 73 + static int rc5t583_set_voltage(struct regulator_dev *rdev, 74 + int min_uV, int max_uV, unsigned *selector) 75 + { 76 + struct rc5t583_regulator *reg = rdev_get_drvdata(rdev); 77 + struct rc5t583_regulator_info *ri = reg->reg_info; 78 + int sel, ret; 79 + 80 + if (min_uV < ri->min_uV) 81 + min_uV = ri->min_uV; 82 + 83 + sel = DIV_ROUND_UP(min_uV - ri->min_uV, ri->step_uV); 84 + 85 + if (sel >= rdev->desc->n_voltages) { 86 + dev_err(&rdev->dev, "Invalid selector 0x%02x\n", sel); 87 + return -EINVAL; 88 + } 89 + 90 + *selector = sel; 91 + 92 + ret = rc5t583_update(reg->mfd->dev, rdev->desc->vsel_reg, sel, 93 + rdev->desc->vsel_mask); 94 + if (ret < 0) 95 + dev_err(&rdev->dev, "Error in update voltage register 0x%02x\n", 96 + rdev->desc->vsel_reg); 97 + return ret; 98 + } 99 + 100 + static int rc5t583_regulator_enable_time(struct regulator_dev *rdev) 101 + { 102 + struct rc5t583_regulator *reg = rdev_get_drvdata(rdev); 103 + int vsel = regulator_get_voltage_sel_regmap(rdev); 104 + int curr_uV = rc5t583_list_voltage(rdev, vsel); 105 + 106 + return DIV_ROUND_UP(curr_uV, reg->reg_info->enable_uv_per_us); 107 + } 108 + 109 + static int rc5t583_set_voltage_time_sel(struct regulator_dev *rdev, 110 + unsigned int old_selector, unsigned int new_selector) 111 + { 112 + struct rc5t583_regulator *reg = rdev_get_drvdata(rdev); 113 + int old_uV, new_uV; 114 + old_uV = rc5t583_list_voltage(rdev, old_selector); 115 + 116 + if (old_uV < 0) 117 + return old_uV; 118 + 119 + new_uV = rc5t583_list_voltage(rdev, new_selector); 120 + if (new_uV < 0) 121 + return new_uV; 122 + 123 + return DIV_ROUND_UP(abs(old_uV - new_uV), 124 + reg->reg_info->change_uv_per_us); 125 + } 126 + 127 + 128 + static struct regulator_ops rc5t583_ops = { 129 + .is_enabled = regulator_is_enabled_regmap, 130 + .enable = regulator_enable_regmap, 131 + .disable = regulator_disable_regmap, 132 + .enable_time = rc5t583_regulator_enable_time, 133 + .get_voltage_sel = regulator_get_voltage_sel_regmap, 134 + .set_voltage = rc5t583_set_voltage, 135 + .list_voltage = rc5t583_list_voltage, 136 + .set_voltage_time_sel = rc5t583_set_voltage_time_sel, 137 + }; 138 + 139 + #define RC5T583_REG(_id, _en_reg, _en_bit, _disc_reg, _disc_bit, \ 140 + _vout_mask, _min_mv, _max_mv, _step_uV, _enable_mv) \ 141 + { \ 142 + .reg_disc_reg = RC5T583_REG_##_disc_reg, \ 143 + .disc_bit = _disc_bit, \ 144 + .deepsleep_reg = RC5T583_REG_##_id##DAC_DS, \ 145 + .min_uV = _min_mv * 1000, \ 146 + .max_uV = _max_mv * 1000, \ 147 + .step_uV = _step_uV, \ 148 + .enable_uv_per_us = _enable_mv * 1000, \ 149 + .change_uv_per_us = 40 * 1000, \ 150 + .deepsleep_id = RC5T583_DS_##_id, \ 151 + .desc = { \ 152 + .name = "rc5t583-regulator-"#_id, \ 153 + .id = RC5T583_REGULATOR_##_id, \ 154 + .n_voltages = (_max_mv - _min_mv) * 1000 / _step_uV + 1, \ 155 + .ops = &rc5t583_ops, \ 156 + .type = REGULATOR_VOLTAGE, \ 157 + .owner = THIS_MODULE, \ 158 + .vsel_reg = RC5T583_REG_##_id##DAC, \ 159 + .vsel_mask = _vout_mask, \ 160 + .enable_reg = RC5T583_REG_##_en_reg, \ 161 + .enable_mask = BIT(_en_bit), \ 162 + }, \ 163 + } 164 + 165 + static struct rc5t583_regulator_info rc5t583_reg_info[RC5T583_REGULATOR_MAX] = { 166 + RC5T583_REG(DC0, DC0CTL, 0, DC0CTL, 1, 0x7F, 700, 1500, 12500, 4), 167 + RC5T583_REG(DC1, DC1CTL, 0, DC1CTL, 1, 0x7F, 700, 1500, 12500, 14), 168 + RC5T583_REG(DC2, DC2CTL, 0, DC2CTL, 1, 0x7F, 900, 2400, 12500, 14), 169 + RC5T583_REG(DC3, DC3CTL, 0, DC3CTL, 1, 0x7F, 900, 2400, 12500, 14), 170 + RC5T583_REG(LDO0, LDOEN2, 0, LDODIS2, 0, 0x7F, 900, 3400, 25000, 160), 171 + RC5T583_REG(LDO1, LDOEN2, 1, LDODIS2, 1, 0x7F, 900, 3400, 25000, 160), 172 + RC5T583_REG(LDO2, LDOEN2, 2, LDODIS2, 2, 0x7F, 900, 3400, 25000, 160), 173 + RC5T583_REG(LDO3, LDOEN2, 3, LDODIS2, 3, 0x7F, 900, 3400, 25000, 160), 174 + RC5T583_REG(LDO4, LDOEN2, 4, LDODIS2, 4, 0x3F, 750, 1500, 12500, 133), 175 + RC5T583_REG(LDO5, LDOEN2, 5, LDODIS2, 5, 0x7F, 900, 3400, 25000, 267), 176 + RC5T583_REG(LDO6, LDOEN2, 6, LDODIS2, 6, 0x7F, 900, 3400, 25000, 133), 177 + RC5T583_REG(LDO7, LDOEN2, 7, LDODIS2, 7, 0x7F, 900, 3400, 25000, 233), 178 + RC5T583_REG(LDO8, LDOEN1, 0, LDODIS1, 0, 0x7F, 900, 3400, 25000, 233), 179 + RC5T583_REG(LDO9, LDOEN1, 1, LDODIS1, 1, 0x7F, 900, 3400, 25000, 133), 180 + }; 181 + 182 + static int __devinit rc5t583_regulator_probe(struct platform_device *pdev) 183 + { 184 + struct rc5t583 *rc5t583 = dev_get_drvdata(pdev->dev.parent); 185 + struct rc5t583_platform_data *pdata = dev_get_platdata(rc5t583->dev); 186 + struct regulator_init_data *reg_data; 187 + struct regulator_config config = { }; 188 + struct rc5t583_regulator *reg = NULL; 189 + struct rc5t583_regulator *regs; 190 + struct regulator_dev *rdev; 191 + struct rc5t583_regulator_info *ri; 192 + int ret; 193 + int id; 194 + 195 + if (!pdata) { 196 + dev_err(&pdev->dev, "No platform data, exiting...\n"); 197 + return -ENODEV; 198 + } 199 + 200 + regs = devm_kzalloc(&pdev->dev, RC5T583_REGULATOR_MAX * 201 + sizeof(struct rc5t583_regulator), GFP_KERNEL); 202 + if (!regs) { 203 + dev_err(&pdev->dev, "Memory allocation failed exiting..\n"); 204 + return -ENOMEM; 205 + } 206 + 207 + 208 + for (id = 0; id < RC5T583_REGULATOR_MAX; ++id) { 209 + reg_data = pdata->reg_init_data[id]; 210 + 211 + /* No need to register if there is no regulator data */ 212 + if (!reg_data) 213 + continue; 214 + 215 + reg = &regs[id]; 216 + ri = &rc5t583_reg_info[id]; 217 + reg->reg_info = ri; 218 + reg->mfd = rc5t583; 219 + reg->dev = &pdev->dev; 220 + 221 + if (ri->deepsleep_id == RC5T583_DS_NONE) 222 + goto skip_ext_pwr_config; 223 + 224 + ret = rc5t583_ext_power_req_config(rc5t583->dev, 225 + ri->deepsleep_id, 226 + pdata->regulator_ext_pwr_control[id], 227 + pdata->regulator_deepsleep_slot[id]); 228 + /* 229 + * Configuring external control is not a major issue, 230 + * just give warning. 231 + */ 232 + if (ret < 0) 233 + dev_warn(&pdev->dev, 234 + "Failed to configure ext control %d\n", id); 235 + 236 + skip_ext_pwr_config: 237 + config.dev = &pdev->dev; 238 + config.init_data = reg_data; 239 + config.driver_data = reg; 240 + config.regmap = rc5t583->regmap; 241 + 242 + rdev = regulator_register(&ri->desc, &config); 243 + if (IS_ERR(rdev)) { 244 + dev_err(&pdev->dev, "Failed to register regulator %s\n", 245 + ri->desc.name); 246 + ret = PTR_ERR(rdev); 247 + goto clean_exit; 248 + } 249 + reg->rdev = rdev; 250 + } 251 + platform_set_drvdata(pdev, regs); 252 + return 0; 253 + 254 + clean_exit: 255 + while (--id >= 0) 256 + regulator_unregister(regs[id].rdev); 257 + 258 + return ret; 259 + } 260 + 261 + static int __devexit rc5t583_regulator_remove(struct platform_device *pdev) 262 + { 263 + struct rc5t583_regulator *regs = platform_get_drvdata(pdev); 264 + int id; 265 + 266 + for (id = 0; id < RC5T583_REGULATOR_MAX; ++id) 267 + regulator_unregister(regs[id].rdev); 268 + return 0; 269 + } 270 + 271 + static struct platform_driver rc5t583_regulator_driver = { 272 + .driver = { 273 + .name = "rc5t583-regulator", 274 + .owner = THIS_MODULE, 275 + }, 276 + .probe = rc5t583_regulator_probe, 277 + .remove = __devexit_p(rc5t583_regulator_remove), 278 + }; 279 + 280 + static int __init rc5t583_regulator_init(void) 281 + { 282 + return platform_driver_register(&rc5t583_regulator_driver); 283 + } 284 + subsys_initcall(rc5t583_regulator_init); 285 + 286 + static void __exit rc5t583_regulator_exit(void) 287 + { 288 + platform_driver_unregister(&rc5t583_regulator_driver); 289 + } 290 + module_exit(rc5t583_regulator_exit); 291 + 292 + MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>"); 293 + MODULE_DESCRIPTION("RC5T583 regulator driver"); 294 + MODULE_ALIAS("platform:rc5t583-regulator"); 295 + MODULE_LICENSE("GPL v2");
+160 -167
drivers/regulator/s5m8767.c
··· 28 28 struct s5m87xx_dev *iodev; 29 29 int num_regulators; 30 30 struct regulator_dev **rdev; 31 + struct s5m_opmode_data *opmode; 31 32 32 33 int ramp_delay; 33 34 bool buck2_ramp; ··· 142 141 return val; 143 142 } 144 143 145 - static int s5m8767_get_register(struct regulator_dev *rdev, int *reg) 144 + unsigned int s5m8767_opmode_reg[][4] = { 145 + /* {OFF, ON, LOWPOWER, SUSPEND} */ 146 + /* LDO1 ... LDO28 */ 147 + {0x0, 0x3, 0x2, 0x1}, /* LDO1 */ 148 + {0x0, 0x3, 0x2, 0x1}, 149 + {0x0, 0x3, 0x2, 0x1}, 150 + {0x0, 0x0, 0x0, 0x0}, 151 + {0x0, 0x3, 0x2, 0x1}, /* LDO5 */ 152 + {0x0, 0x3, 0x2, 0x1}, 153 + {0x0, 0x3, 0x2, 0x1}, 154 + {0x0, 0x3, 0x2, 0x1}, 155 + {0x0, 0x3, 0x2, 0x1}, 156 + {0x0, 0x3, 0x2, 0x1}, /* LDO10 */ 157 + {0x0, 0x3, 0x2, 0x1}, 158 + {0x0, 0x3, 0x2, 0x1}, 159 + {0x0, 0x3, 0x2, 0x1}, 160 + {0x0, 0x3, 0x2, 0x1}, 161 + {0x0, 0x3, 0x2, 0x1}, /* LDO15 */ 162 + {0x0, 0x3, 0x2, 0x1}, 163 + {0x0, 0x3, 0x2, 0x1}, 164 + {0x0, 0x0, 0x0, 0x0}, 165 + {0x0, 0x3, 0x2, 0x1}, 166 + {0x0, 0x3, 0x2, 0x1}, /* LDO20 */ 167 + {0x0, 0x3, 0x2, 0x1}, 168 + {0x0, 0x3, 0x2, 0x1}, 169 + {0x0, 0x0, 0x0, 0x0}, 170 + {0x0, 0x3, 0x2, 0x1}, 171 + {0x0, 0x3, 0x2, 0x1}, /* LDO25 */ 172 + {0x0, 0x3, 0x2, 0x1}, 173 + {0x0, 0x3, 0x2, 0x1}, 174 + {0x0, 0x3, 0x2, 0x1}, /* LDO28 */ 175 + 176 + /* BUCK1 ... BUCK9 */ 177 + {0x0, 0x3, 0x1, 0x1}, /* BUCK1 */ 178 + {0x0, 0x3, 0x1, 0x1}, 179 + {0x0, 0x3, 0x1, 0x1}, 180 + {0x0, 0x3, 0x1, 0x1}, 181 + {0x0, 0x3, 0x2, 0x1}, /* BUCK5 */ 182 + {0x0, 0x3, 0x1, 0x1}, 183 + {0x0, 0x3, 0x1, 0x1}, 184 + {0x0, 0x3, 0x1, 0x1}, 185 + {0x0, 0x3, 0x1, 0x1}, /* BUCK9 */ 186 + }; 187 + 188 + static int s5m8767_get_register(struct regulator_dev *rdev, int *reg, 189 + int *enable_ctrl) 146 190 { 147 191 int reg_id = rdev_get_id(rdev); 192 + unsigned int mode; 193 + struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); 148 194 149 195 switch (reg_id) { 150 196 case S5M8767_LDO1 ... S5M8767_LDO2: ··· 216 168 return -EINVAL; 217 169 } 218 170 171 + mode = s5m8767->opmode[reg_id].mode; 172 + *enable_ctrl = s5m8767_opmode_reg[reg_id][mode] << S5M8767_ENCTRL_SHIFT; 219 173 return 0; 220 174 } 221 175 ··· 225 175 { 226 176 struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); 227 177 int ret, reg; 228 - int mask = 0xc0, pattern = 0xc0; 178 + int mask = 0xc0, enable_ctrl; 229 179 u8 val; 230 180 231 - ret = s5m8767_get_register(rdev, &reg); 181 + ret = s5m8767_get_register(rdev, &reg, &enable_ctrl); 232 182 if (ret == -EINVAL) 233 183 return 1; 234 184 else if (ret) ··· 238 188 if (ret) 239 189 return ret; 240 190 241 - return (val & mask) == pattern; 191 + return (val & mask) == enable_ctrl; 242 192 } 243 193 244 194 static int s5m8767_reg_enable(struct regulator_dev *rdev) 245 195 { 246 196 struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); 247 197 int ret, reg; 248 - int mask = 0xc0, pattern = 0xc0; 198 + int mask = 0xc0, enable_ctrl; 249 199 250 - ret = s5m8767_get_register(rdev, &reg); 200 + ret = s5m8767_get_register(rdev, &reg, &enable_ctrl); 251 201 if (ret) 252 202 return ret; 253 203 254 - return s5m_reg_update(s5m8767->iodev, reg, pattern, mask); 204 + return s5m_reg_update(s5m8767->iodev, reg, enable_ctrl, mask); 255 205 } 256 206 257 207 static int s5m8767_reg_disable(struct regulator_dev *rdev) 258 208 { 259 209 struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); 260 210 int ret, reg; 261 - int mask = 0xc0, pattern = 0xc0; 211 + int mask = 0xc0, enable_ctrl; 262 212 263 - ret = s5m8767_get_register(rdev, &reg); 213 + ret = s5m8767_get_register(rdev, &reg, &enable_ctrl); 264 214 if (ret) 265 215 return ret; 266 216 267 - return s5m_reg_update(s5m8767->iodev, reg, ~pattern, mask); 217 + return s5m_reg_update(s5m8767->iodev, reg, ~mask, mask); 268 218 } 269 219 270 220 static int s5m8767_get_voltage_register(struct regulator_dev *rdev, int *_reg) ··· 355 305 return selector; 356 306 } 357 307 358 - static int s5m8767_set_voltage(struct regulator_dev *rdev, 359 - int min_uV, int max_uV, unsigned *selector) 360 - { 361 - struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); 362 - const struct s5m_voltage_desc *desc; 363 - int reg_id = rdev_get_id(rdev); 364 - int sel, reg, mask, ret; 365 - u8 val; 366 - 367 - switch (reg_id) { 368 - case S5M8767_LDO1 ... S5M8767_LDO28: 369 - mask = 0x3f; 370 - break; 371 - case S5M8767_BUCK1 ... S5M8767_BUCK6: 372 - mask = 0xff; 373 - break; 374 - case S5M8767_BUCK7 ... S5M8767_BUCK8: 375 - return -EINVAL; 376 - case S5M8767_BUCK9: 377 - mask = 0xff; 378 - break; 379 - default: 380 - return -EINVAL; 381 - } 382 - 383 - desc = reg_voltage_map[reg_id]; 384 - 385 - sel = s5m8767_convert_voltage_to_sel(desc, min_uV, max_uV); 386 - if (sel < 0) 387 - return sel; 388 - 389 - ret = s5m8767_get_voltage_register(rdev, &reg); 390 - if (ret) 391 - return ret; 392 - 393 - s5m_reg_read(s5m8767->iodev, reg, &val); 394 - val &= ~mask; 395 - val |= sel; 396 - 397 - ret = s5m_reg_write(s5m8767->iodev, reg, val); 398 - *selector = sel; 399 - 400 - return ret; 401 - } 402 - 403 308 static inline void s5m8767_set_high(struct s5m8767_info *s5m8767) 404 309 { 405 310 int temp_index = s5m8767->buck_gpioindex; ··· 373 368 gpio_set_value(s5m8767->buck_gpios[0], (temp_index >> 2) & 0x1); 374 369 } 375 370 376 - static int s5m8767_set_voltage_buck(struct regulator_dev *rdev, 377 - int min_uV, int max_uV, unsigned *selector) 371 + static int s5m8767_set_voltage(struct regulator_dev *rdev, 372 + int min_uV, int max_uV, unsigned *selector) 378 373 { 379 374 struct s5m8767_info *s5m8767 = rdev_get_drvdata(rdev); 380 - int reg_id = rdev_get_id(rdev); 381 375 const struct s5m_voltage_desc *desc; 382 - int new_val, old_val, i = 0; 383 - 384 - if (reg_id < S5M8767_BUCK1 || reg_id > S5M8767_BUCK6) 385 - return -EINVAL; 376 + int reg_id = rdev_get_id(rdev); 377 + int sel, reg, mask, ret = 0, old_index, index = 0; 378 + u8 val; 379 + u8 *buck234_vol = NULL; 386 380 387 381 switch (reg_id) { 388 - case S5M8767_BUCK1: 389 - return s5m8767_set_voltage(rdev, min_uV, max_uV, selector); 390 - case S5M8767_BUCK2 ... S5M8767_BUCK4: 382 + case S5M8767_LDO1 ... S5M8767_LDO28: 383 + mask = 0x3f; 391 384 break; 392 - case S5M8767_BUCK5 ... S5M8767_BUCK6: 393 - return s5m8767_set_voltage(rdev, min_uV, max_uV, selector); 385 + case S5M8767_BUCK1 ... S5M8767_BUCK6: 386 + mask = 0xff; 387 + if (reg_id == S5M8767_BUCK2 && s5m8767->buck2_gpiodvs) 388 + buck234_vol = &s5m8767->buck2_vol[0]; 389 + else if (reg_id == S5M8767_BUCK3 && s5m8767->buck3_gpiodvs) 390 + buck234_vol = &s5m8767->buck3_vol[0]; 391 + else if (reg_id == S5M8767_BUCK4 && s5m8767->buck4_gpiodvs) 392 + buck234_vol = &s5m8767->buck4_vol[0]; 393 + break; 394 + case S5M8767_BUCK7 ... S5M8767_BUCK8: 395 + return -EINVAL; 394 396 case S5M8767_BUCK9: 395 - return s5m8767_set_voltage(rdev, min_uV, max_uV, selector); 397 + mask = 0xff; 398 + break; 399 + default: 400 + return -EINVAL; 396 401 } 397 402 398 403 desc = reg_voltage_map[reg_id]; 399 - new_val = s5m8767_convert_voltage_to_sel(desc, min_uV, max_uV); 400 - if (new_val < 0) 401 - return new_val; 402 404 403 - switch (reg_id) { 404 - case S5M8767_BUCK2: 405 - if (s5m8767->buck2_gpiodvs) { 406 - while (s5m8767->buck2_vol[i] != new_val) 407 - i++; 408 - } else 409 - return s5m8767_set_voltage(rdev, min_uV, 410 - max_uV, selector); 411 - break; 412 - case S5M8767_BUCK3: 413 - if (s5m8767->buck3_gpiodvs) { 414 - while (s5m8767->buck3_vol[i] != new_val) 415 - i++; 416 - } else 417 - return s5m8767_set_voltage(rdev, min_uV, 418 - max_uV, selector); 419 - break; 420 - case S5M8767_BUCK4: 421 - if (s5m8767->buck3_gpiodvs) { 422 - while (s5m8767->buck4_vol[i] != new_val) 423 - i++; 424 - } else 425 - return s5m8767_set_voltage(rdev, min_uV, 426 - max_uV, selector); 427 - break; 405 + sel = s5m8767_convert_voltage_to_sel(desc, min_uV, max_uV); 406 + if (sel < 0) 407 + return sel; 408 + 409 + /* buck234_vol != NULL means to control buck234 voltage via DVS GPIO */ 410 + if (buck234_vol) { 411 + while (*buck234_vol != sel) { 412 + buck234_vol++; 413 + index++; 414 + } 415 + old_index = s5m8767->buck_gpioindex; 416 + s5m8767->buck_gpioindex = index; 417 + 418 + if (index > old_index) 419 + s5m8767_set_high(s5m8767); 420 + else 421 + s5m8767_set_low(s5m8767); 422 + } else { 423 + ret = s5m8767_get_voltage_register(rdev, &reg); 424 + if (ret) 425 + return ret; 426 + 427 + s5m_reg_read(s5m8767->iodev, reg, &val); 428 + val = (val & ~mask) | sel; 429 + 430 + ret = s5m_reg_write(s5m8767->iodev, reg, val); 428 431 } 429 432 430 - old_val = s5m8767->buck_gpioindex; 431 - s5m8767->buck_gpioindex = i; 432 - 433 - if (i > old_val) 434 - s5m8767_set_high(s5m8767); 435 - else 436 - s5m8767_set_low(s5m8767); 437 - 438 - *selector = new_val; 439 - return 0; 433 + *selector = sel; 434 + return ret; 440 435 } 441 436 442 437 static int s5m8767_set_voltage_time_sel(struct regulator_dev *rdev, ··· 455 450 return 0; 456 451 } 457 452 458 - static struct regulator_ops s5m8767_ldo_ops = { 453 + static struct regulator_ops s5m8767_ops = { 459 454 .list_voltage = s5m8767_list_voltage, 460 455 .is_enabled = s5m8767_reg_is_enabled, 461 456 .enable = s5m8767_reg_enable, ··· 465 460 .set_voltage_time_sel = s5m8767_set_voltage_time_sel, 466 461 }; 467 462 468 - static struct regulator_ops s5m8767_buck_ops = { 469 - .list_voltage = s5m8767_list_voltage, 470 - .is_enabled = s5m8767_reg_is_enabled, 471 - .enable = s5m8767_reg_enable, 472 - .disable = s5m8767_reg_disable, 473 - .get_voltage_sel = s5m8767_get_voltage_sel, 474 - .set_voltage = s5m8767_set_voltage_buck, 475 - .set_voltage_time_sel = s5m8767_set_voltage_time_sel, 476 - }; 477 - 478 - #define regulator_desc_ldo(num) { \ 479 - .name = "LDO"#num, \ 480 - .id = S5M8767_LDO##num, \ 481 - .ops = &s5m8767_ldo_ops, \ 482 - .type = REGULATOR_VOLTAGE, \ 483 - .owner = THIS_MODULE, \ 484 - } 485 - #define regulator_desc_buck(num) { \ 486 - .name = "BUCK"#num, \ 487 - .id = S5M8767_BUCK##num, \ 488 - .ops = &s5m8767_buck_ops, \ 463 + #define s5m8767_regulator_desc(_name) { \ 464 + .name = #_name, \ 465 + .id = S5M8767_##_name, \ 466 + .ops = &s5m8767_ops, \ 489 467 .type = REGULATOR_VOLTAGE, \ 490 468 .owner = THIS_MODULE, \ 491 469 } 492 470 493 471 static struct regulator_desc regulators[] = { 494 - regulator_desc_ldo(1), 495 - regulator_desc_ldo(2), 496 - regulator_desc_ldo(3), 497 - regulator_desc_ldo(4), 498 - regulator_desc_ldo(5), 499 - regulator_desc_ldo(6), 500 - regulator_desc_ldo(7), 501 - regulator_desc_ldo(8), 502 - regulator_desc_ldo(9), 503 - regulator_desc_ldo(10), 504 - regulator_desc_ldo(11), 505 - regulator_desc_ldo(12), 506 - regulator_desc_ldo(13), 507 - regulator_desc_ldo(14), 508 - regulator_desc_ldo(15), 509 - regulator_desc_ldo(16), 510 - regulator_desc_ldo(17), 511 - regulator_desc_ldo(18), 512 - regulator_desc_ldo(19), 513 - regulator_desc_ldo(20), 514 - regulator_desc_ldo(21), 515 - regulator_desc_ldo(22), 516 - regulator_desc_ldo(23), 517 - regulator_desc_ldo(24), 518 - regulator_desc_ldo(25), 519 - regulator_desc_ldo(26), 520 - regulator_desc_ldo(27), 521 - regulator_desc_ldo(28), 522 - regulator_desc_buck(1), 523 - regulator_desc_buck(2), 524 - regulator_desc_buck(3), 525 - regulator_desc_buck(4), 526 - regulator_desc_buck(5), 527 - regulator_desc_buck(6), 528 - regulator_desc_buck(7), 529 - regulator_desc_buck(8), 530 - regulator_desc_buck(9), 472 + s5m8767_regulator_desc(LDO1), 473 + s5m8767_regulator_desc(LDO2), 474 + s5m8767_regulator_desc(LDO3), 475 + s5m8767_regulator_desc(LDO4), 476 + s5m8767_regulator_desc(LDO5), 477 + s5m8767_regulator_desc(LDO6), 478 + s5m8767_regulator_desc(LDO7), 479 + s5m8767_regulator_desc(LDO8), 480 + s5m8767_regulator_desc(LDO9), 481 + s5m8767_regulator_desc(LDO10), 482 + s5m8767_regulator_desc(LDO11), 483 + s5m8767_regulator_desc(LDO12), 484 + s5m8767_regulator_desc(LDO13), 485 + s5m8767_regulator_desc(LDO14), 486 + s5m8767_regulator_desc(LDO15), 487 + s5m8767_regulator_desc(LDO16), 488 + s5m8767_regulator_desc(LDO17), 489 + s5m8767_regulator_desc(LDO18), 490 + s5m8767_regulator_desc(LDO19), 491 + s5m8767_regulator_desc(LDO20), 492 + s5m8767_regulator_desc(LDO21), 493 + s5m8767_regulator_desc(LDO22), 494 + s5m8767_regulator_desc(LDO23), 495 + s5m8767_regulator_desc(LDO24), 496 + s5m8767_regulator_desc(LDO25), 497 + s5m8767_regulator_desc(LDO26), 498 + s5m8767_regulator_desc(LDO27), 499 + s5m8767_regulator_desc(LDO28), 500 + s5m8767_regulator_desc(BUCK1), 501 + s5m8767_regulator_desc(BUCK2), 502 + s5m8767_regulator_desc(BUCK3), 503 + s5m8767_regulator_desc(BUCK4), 504 + s5m8767_regulator_desc(BUCK5), 505 + s5m8767_regulator_desc(BUCK6), 506 + s5m8767_regulator_desc(BUCK7), 507 + s5m8767_regulator_desc(BUCK8), 508 + s5m8767_regulator_desc(BUCK9), 531 509 }; 532 510 533 511 static __devinit int s5m8767_pmic_probe(struct platform_device *pdev) 534 512 { 535 513 struct s5m87xx_dev *iodev = dev_get_drvdata(pdev->dev.parent); 536 514 struct s5m_platform_data *pdata = dev_get_platdata(iodev->dev); 515 + struct regulator_config config = { }; 537 516 struct regulator_dev **rdev; 538 517 struct s5m8767_info *s5m8767; 539 518 int i, ret, size; ··· 575 586 s5m8767->buck2_ramp = pdata->buck2_ramp_enable; 576 587 s5m8767->buck3_ramp = pdata->buck3_ramp_enable; 577 588 s5m8767->buck4_ramp = pdata->buck4_ramp_enable; 589 + s5m8767->opmode = pdata->opmode; 578 590 579 591 for (i = 0; i < 8; i++) { 580 592 if (s5m8767->buck2_gpiodvs) { ··· 713 723 regulators[id].n_voltages = 714 724 (desc->max - desc->min) / desc->step + 1; 715 725 716 - rdev[i] = regulator_register(&regulators[id], s5m8767->dev, 717 - pdata->regulators[i].initdata, s5m8767, NULL); 726 + config.dev = s5m8767->dev; 727 + config.init_data = pdata->regulators[i].initdata; 728 + config.driver_data = s5m8767; 729 + 730 + rdev[i] = regulator_register(&regulators[id], &config); 718 731 if (IS_ERR(rdev[i])) { 719 732 ret = PTR_ERR(rdev[i]); 720 733 dev_err(s5m8767->dev, "regulator init failed for %d\n",
+7 -4
drivers/regulator/tps6105x-regulator.c
··· 123 123 .list_voltage = tps6105x_regulator_list_voltage, 124 124 }; 125 125 126 - static struct regulator_desc tps6105x_regulator_desc = { 126 + static const struct regulator_desc tps6105x_regulator_desc = { 127 127 .name = "tps6105x-boost", 128 128 .ops = &tps6105x_regulator_ops, 129 129 .type = REGULATOR_VOLTAGE, ··· 139 139 { 140 140 struct tps6105x *tps6105x = dev_get_platdata(&pdev->dev); 141 141 struct tps6105x_platform_data *pdata = tps6105x->pdata; 142 + struct regulator_config config = { }; 142 143 int ret; 143 144 144 145 /* This instance is not set for regulator mode so bail out */ ··· 149 148 return 0; 150 149 } 151 150 151 + config.dev = &tps6105x->client->dev; 152 + config.init_data = pdata->regulator_data; 153 + config.driver_data = tps6105x; 154 + 152 155 /* Register regulator with framework */ 153 156 tps6105x->regulator = regulator_register(&tps6105x_regulator_desc, 154 - &tps6105x->client->dev, 155 - pdata->regulator_data, tps6105x, 156 - NULL); 157 + &config); 157 158 if (IS_ERR(tps6105x->regulator)) { 158 159 ret = PTR_ERR(tps6105x->regulator); 159 160 dev_err(&tps6105x->client->dev,
+29 -17
drivers/regulator/tps62360-regulator.c
··· 1 1 /* 2 2 * tps62360.c -- TI tps62360 3 3 * 4 - * Driver for processor core supply tps62360 and tps62361B 4 + * Driver for processor core supply tps62360, tps62361B, tps62362 and tps62363. 5 5 * 6 6 * Copyright (c) 2012, NVIDIA Corporation. 7 7 * ··· 46 46 #define REG_RAMPCTRL 6 47 47 #define REG_CHIPID 8 48 48 49 - enum chips {TPS62360, TPS62361}; 49 + enum chips {TPS62360, TPS62361, TPS62362, TPS62363}; 50 50 51 51 #define TPS62360_BASE_VOLTAGE 770 52 52 #define TPS62360_N_VOLTAGES 64 ··· 56 56 57 57 /* tps 62360 chip information */ 58 58 struct tps62360_chip { 59 - const char *name; 60 59 struct device *dev; 61 60 struct regulator_desc desc; 62 - struct i2c_client *client; 63 61 struct regulator_dev *rdev; 64 62 struct regmap *regmap; 65 63 int chip_id; ··· 270 272 static int __devinit tps62360_probe(struct i2c_client *client, 271 273 const struct i2c_device_id *id) 272 274 { 275 + struct regulator_config config = { }; 273 276 struct tps62360_regulator_platform_data *pdata; 274 277 struct regulator_dev *rdev; 275 278 struct tps62360_chip *tps; ··· 296 297 tps->en_internal_pulldn = pdata->en_internal_pulldn; 297 298 tps->vsel0_gpio = pdata->vsel0_gpio; 298 299 tps->vsel1_gpio = pdata->vsel1_gpio; 299 - tps->client = client; 300 300 tps->dev = &client->dev; 301 - tps->name = id->name; 302 - tps->voltage_base = (id->driver_data == TPS62360) ? 303 - TPS62360_BASE_VOLTAGE : TPS62361_BASE_VOLTAGE; 304 - tps->voltage_reg_mask = (id->driver_data == TPS62360) ? 0x3F : 0x7F; 301 + 302 + switch (id->driver_data) { 303 + case TPS62360: 304 + case TPS62362: 305 + tps->voltage_base = TPS62360_BASE_VOLTAGE; 306 + tps->voltage_reg_mask = 0x3F; 307 + tps->desc.n_voltages = TPS62360_N_VOLTAGES; 308 + break; 309 + case TPS62361: 310 + case TPS62363: 311 + tps->voltage_base = TPS62361_BASE_VOLTAGE; 312 + tps->voltage_reg_mask = 0x7F; 313 + tps->desc.n_voltages = TPS62361_N_VOLTAGES; 314 + break; 315 + default: 316 + return -ENODEV; 317 + } 305 318 306 319 tps->desc.name = id->name; 307 320 tps->desc.id = 0; 308 - tps->desc.n_voltages = (id->driver_data == TPS62360) ? 309 - TPS62360_N_VOLTAGES : TPS62361_N_VOLTAGES; 310 321 tps->desc.ops = &tps62360_dcdc_ops; 311 322 tps->desc.type = REGULATOR_VOLTAGE; 312 323 tps->desc.owner = THIS_MODULE; 313 - tps->regmap = regmap_init_i2c(client, &tps62360_regmap_config); 324 + tps->regmap = devm_regmap_init_i2c(client, &tps62360_regmap_config); 314 325 if (IS_ERR(tps->regmap)) { 315 326 ret = PTR_ERR(tps->regmap); 316 327 dev_err(&client->dev, "%s() Err: Failed to allocate register" ··· 385 376 goto err_init; 386 377 } 387 378 379 + config.dev = &client->dev; 380 + config.init_data = &pdata->reg_init_data; 381 + config.driver_data = tps; 382 + 388 383 /* Register the regulators */ 389 - rdev = regulator_register(&tps->desc, &client->dev, 390 - &pdata->reg_init_data, tps, NULL); 384 + rdev = regulator_register(&tps->desc, &config); 391 385 if (IS_ERR(rdev)) { 392 386 dev_err(tps->dev, "%s() Err: Failed to register %s\n", 393 387 __func__, id->name); ··· 408 396 if (gpio_is_valid(tps->vsel0_gpio)) 409 397 gpio_free(tps->vsel0_gpio); 410 398 err_gpio0: 411 - regmap_exit(tps->regmap); 412 399 return ret; 413 400 } 414 401 ··· 428 417 gpio_free(tps->vsel0_gpio); 429 418 430 419 regulator_unregister(tps->rdev); 431 - regmap_exit(tps->regmap); 432 420 return 0; 433 421 } 434 422 ··· 449 439 static const struct i2c_device_id tps62360_id[] = { 450 440 {.name = "tps62360", .driver_data = TPS62360}, 451 441 {.name = "tps62361", .driver_data = TPS62361}, 442 + {.name = "tps62362", .driver_data = TPS62362}, 443 + {.name = "tps62363", .driver_data = TPS62363}, 452 444 {}, 453 445 }; 454 446 ··· 480 468 module_exit(tps62360_cleanup); 481 469 482 470 MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>"); 483 - MODULE_DESCRIPTION("TPS62360 voltage regulator driver"); 471 + MODULE_DESCRIPTION("TPS6236x voltage regulator driver"); 484 472 MODULE_LICENSE("GPL v2");
+46 -197
drivers/regulator/tps65023-regulator.c
··· 72 72 73 73 /* LDO_CTRL bitfields */ 74 74 #define TPS65023_LDO_CTRL_LDOx_SHIFT(ldo_id) ((ldo_id)*4) 75 - #define TPS65023_LDO_CTRL_LDOx_MASK(ldo_id) (0xF0 >> ((ldo_id)*4)) 75 + #define TPS65023_LDO_CTRL_LDOx_MASK(ldo_id) (0x0F << ((ldo_id)*4)) 76 76 77 77 /* Number of step-down converters available */ 78 78 #define TPS65023_NUM_DCDC 3 ··· 139 139 /* PMIC details */ 140 140 struct tps_pmic { 141 141 struct regulator_desc desc[TPS65023_NUM_REGULATOR]; 142 - struct i2c_client *client; 143 142 struct regulator_dev *rdev[TPS65023_NUM_REGULATOR]; 144 143 const struct tps_info *info[TPS65023_NUM_REGULATOR]; 145 144 struct regmap *regmap; ··· 150 151 const struct tps_info *info; 151 152 u8 core_regulator; 152 153 }; 153 - 154 - static int tps65023_dcdc_is_enabled(struct regulator_dev *dev) 155 - { 156 - struct tps_pmic *tps = rdev_get_drvdata(dev); 157 - int data, dcdc = rdev_get_id(dev); 158 - int ret; 159 - u8 shift; 160 - 161 - if (dcdc < TPS65023_DCDC_1 || dcdc > TPS65023_DCDC_3) 162 - return -EINVAL; 163 - 164 - shift = TPS65023_NUM_REGULATOR - dcdc; 165 - ret = regmap_read(tps->regmap, TPS65023_REG_REG_CTRL, &data); 166 - 167 - if (ret != 0) 168 - return ret; 169 - else 170 - return (data & 1<<shift) ? 1 : 0; 171 - } 172 - 173 - static int tps65023_ldo_is_enabled(struct regulator_dev *dev) 174 - { 175 - struct tps_pmic *tps = rdev_get_drvdata(dev); 176 - int data, ldo = rdev_get_id(dev); 177 - int ret; 178 - u8 shift; 179 - 180 - if (ldo < TPS65023_LDO_1 || ldo > TPS65023_LDO_2) 181 - return -EINVAL; 182 - 183 - shift = (ldo == TPS65023_LDO_1 ? 1 : 2); 184 - ret = regmap_read(tps->regmap, TPS65023_REG_REG_CTRL, &data); 185 - 186 - if (ret != 0) 187 - return ret; 188 - else 189 - return (data & 1<<shift) ? 1 : 0; 190 - } 191 - 192 - static int tps65023_dcdc_enable(struct regulator_dev *dev) 193 - { 194 - struct tps_pmic *tps = rdev_get_drvdata(dev); 195 - int dcdc = rdev_get_id(dev); 196 - u8 shift; 197 - 198 - if (dcdc < TPS65023_DCDC_1 || dcdc > TPS65023_DCDC_3) 199 - return -EINVAL; 200 - 201 - shift = TPS65023_NUM_REGULATOR - dcdc; 202 - return regmap_update_bits(tps->regmap, TPS65023_REG_REG_CTRL, 1 << shift, 1 << shift); 203 - } 204 - 205 - static int tps65023_dcdc_disable(struct regulator_dev *dev) 206 - { 207 - struct tps_pmic *tps = rdev_get_drvdata(dev); 208 - int dcdc = rdev_get_id(dev); 209 - u8 shift; 210 - 211 - if (dcdc < TPS65023_DCDC_1 || dcdc > TPS65023_DCDC_3) 212 - return -EINVAL; 213 - 214 - shift = TPS65023_NUM_REGULATOR - dcdc; 215 - return regmap_update_bits(tps->regmap, TPS65023_REG_REG_CTRL, 1 << shift, 0); 216 - } 217 - 218 - static int tps65023_ldo_enable(struct regulator_dev *dev) 219 - { 220 - struct tps_pmic *tps = rdev_get_drvdata(dev); 221 - int ldo = rdev_get_id(dev); 222 - u8 shift; 223 - 224 - if (ldo < TPS65023_LDO_1 || ldo > TPS65023_LDO_2) 225 - return -EINVAL; 226 - 227 - shift = (ldo == TPS65023_LDO_1 ? 1 : 2); 228 - return regmap_update_bits(tps->regmap, TPS65023_REG_REG_CTRL, 1 << shift, 1 << shift); 229 - } 230 - 231 - static int tps65023_ldo_disable(struct regulator_dev *dev) 232 - { 233 - struct tps_pmic *tps = rdev_get_drvdata(dev); 234 - int ldo = rdev_get_id(dev); 235 - u8 shift; 236 - 237 - if (ldo < TPS65023_LDO_1 || ldo > TPS65023_LDO_2) 238 - return -EINVAL; 239 - 240 - shift = (ldo == TPS65023_LDO_1 ? 1 : 2); 241 - return regmap_update_bits(tps->regmap, TPS65023_REG_REG_CTRL, 1 << shift, 0); 242 - } 243 154 244 155 static int tps65023_dcdc_get_voltage(struct regulator_dev *dev) 245 156 { ··· 170 261 return tps->info[dcdc]->min_uV; 171 262 } 172 263 173 - static int tps65023_dcdc_set_voltage(struct regulator_dev *dev, 174 - int min_uV, int max_uV, 175 - unsigned *selector) 264 + static int tps65023_dcdc_set_voltage_sel(struct regulator_dev *dev, 265 + unsigned selector) 176 266 { 177 267 struct tps_pmic *tps = rdev_get_drvdata(dev); 178 268 int dcdc = rdev_get_id(dev); 179 - int vsel; 180 269 int ret; 181 270 182 271 if (dcdc != tps->core_regulator) 183 272 return -EINVAL; 184 - if (min_uV < tps->info[dcdc]->min_uV 185 - || min_uV > tps->info[dcdc]->max_uV) 186 - return -EINVAL; 187 - if (max_uV < tps->info[dcdc]->min_uV 188 - || max_uV > tps->info[dcdc]->max_uV) 189 - return -EINVAL; 190 273 191 - for (vsel = 0; vsel < tps->info[dcdc]->table_len; vsel++) { 192 - int mV = tps->info[dcdc]->table[vsel]; 193 - int uV = mV * 1000; 194 - 195 - /* Break at the first in-range value */ 196 - if (min_uV <= uV && uV <= max_uV) 197 - break; 198 - } 199 - 200 - *selector = vsel; 201 - 202 - if (vsel == tps->info[dcdc]->table_len) 203 - goto failed; 204 - 205 - ret = regmap_write(tps->regmap, TPS65023_REG_DEF_CORE, vsel); 274 + ret = regmap_write(tps->regmap, TPS65023_REG_DEF_CORE, selector); 275 + if (ret) 276 + goto out; 206 277 207 278 /* Tell the chip that we have changed the value in DEFCORE 208 279 * and its time to update the core voltage 209 280 */ 210 - regmap_update_bits(tps->regmap, TPS65023_REG_CON_CTRL2, 211 - TPS65023_REG_CTRL2_GO, TPS65023_REG_CTRL2_GO); 281 + ret = regmap_update_bits(tps->regmap, TPS65023_REG_CON_CTRL2, 282 + TPS65023_REG_CTRL2_GO, TPS65023_REG_CTRL2_GO); 212 283 284 + out: 213 285 return ret; 214 - 215 - failed: 216 - return -EINVAL; 217 286 } 218 287 219 288 static int tps65023_ldo_get_voltage(struct regulator_dev *dev) ··· 212 325 return tps->info[ldo]->table[data] * 1000; 213 326 } 214 327 215 - static int tps65023_ldo_set_voltage(struct regulator_dev *dev, 216 - int min_uV, int max_uV, unsigned *selector) 328 + static int tps65023_ldo_set_voltage_sel(struct regulator_dev *dev, 329 + unsigned selector) 217 330 { 218 331 struct tps_pmic *tps = rdev_get_drvdata(dev); 219 - int data, vsel, ldo = rdev_get_id(dev); 220 - int ret; 332 + int ldo_index = rdev_get_id(dev) - TPS65023_LDO_1; 221 333 222 - if (ldo < TPS65023_LDO_1 || ldo > TPS65023_LDO_2) 223 - return -EINVAL; 224 - 225 - if (min_uV < tps->info[ldo]->min_uV || min_uV > tps->info[ldo]->max_uV) 226 - return -EINVAL; 227 - if (max_uV < tps->info[ldo]->min_uV || max_uV > tps->info[ldo]->max_uV) 228 - return -EINVAL; 229 - 230 - for (vsel = 0; vsel < tps->info[ldo]->table_len; vsel++) { 231 - int mV = tps->info[ldo]->table[vsel]; 232 - int uV = mV * 1000; 233 - 234 - /* Break at the first in-range value */ 235 - if (min_uV <= uV && uV <= max_uV) 236 - break; 237 - } 238 - 239 - if (vsel == tps->info[ldo]->table_len) 240 - return -EINVAL; 241 - 242 - *selector = vsel; 243 - 244 - ret = regmap_read(tps->regmap, TPS65023_REG_LDO_CTRL, &data); 245 - if (ret != 0) 246 - return ret; 247 - 248 - data &= TPS65023_LDO_CTRL_LDOx_MASK(ldo - TPS65023_LDO_1); 249 - data |= (vsel << (TPS65023_LDO_CTRL_LDOx_SHIFT(ldo - TPS65023_LDO_1))); 250 - return regmap_write(tps->regmap, TPS65023_REG_LDO_CTRL, data); 334 + return regmap_update_bits(tps->regmap, TPS65023_REG_LDO_CTRL, 335 + TPS65023_LDO_CTRL_LDOx_MASK(ldo_index), 336 + selector << TPS65023_LDO_CTRL_LDOx_SHIFT(ldo_index)); 251 337 } 252 338 253 339 static int tps65023_dcdc_list_voltage(struct regulator_dev *dev, ··· 258 398 259 399 /* Operations permitted on VDCDCx */ 260 400 static struct regulator_ops tps65023_dcdc_ops = { 261 - .is_enabled = tps65023_dcdc_is_enabled, 262 - .enable = tps65023_dcdc_enable, 263 - .disable = tps65023_dcdc_disable, 401 + .is_enabled = regulator_is_enabled_regmap, 402 + .enable = regulator_enable_regmap, 403 + .disable = regulator_disable_regmap, 264 404 .get_voltage = tps65023_dcdc_get_voltage, 265 - .set_voltage = tps65023_dcdc_set_voltage, 405 + .set_voltage_sel = tps65023_dcdc_set_voltage_sel, 266 406 .list_voltage = tps65023_dcdc_list_voltage, 267 407 }; 268 408 269 409 /* Operations permitted on LDOx */ 270 410 static struct regulator_ops tps65023_ldo_ops = { 271 - .is_enabled = tps65023_ldo_is_enabled, 272 - .enable = tps65023_ldo_enable, 273 - .disable = tps65023_ldo_disable, 411 + .is_enabled = regulator_is_enabled_regmap, 412 + .enable = regulator_enable_regmap, 413 + .disable = regulator_disable_regmap, 274 414 .get_voltage = tps65023_ldo_get_voltage, 275 - .set_voltage = tps65023_ldo_set_voltage, 415 + .set_voltage_sel = tps65023_ldo_set_voltage_sel, 276 416 .list_voltage = tps65023_ldo_list_voltage, 277 417 }; 278 418 ··· 286 426 { 287 427 const struct tps_driver_data *drv_data = (void *)id->driver_data; 288 428 const struct tps_info *info = drv_data->info; 429 + struct regulator_config config = { }; 289 430 struct regulator_init_data *init_data; 290 431 struct regulator_dev *rdev; 291 432 struct tps_pmic *tps; ··· 304 443 if (!init_data) 305 444 return -EIO; 306 445 307 - tps = kzalloc(sizeof(*tps), GFP_KERNEL); 446 + tps = devm_kzalloc(&client->dev, sizeof(*tps), GFP_KERNEL); 308 447 if (!tps) 309 448 return -ENOMEM; 310 449 311 - tps->regmap = regmap_init_i2c(client, &tps65023_regmap_config); 450 + tps->regmap = devm_regmap_init_i2c(client, &tps65023_regmap_config); 312 451 if (IS_ERR(tps->regmap)) { 313 452 error = PTR_ERR(tps->regmap); 314 453 dev_err(&client->dev, "Failed to allocate register map: %d\n", 315 454 error); 316 - goto fail_alloc; 455 + return error; 317 456 } 318 457 319 458 /* common for all regulators */ 320 - tps->client = client; 321 459 tps->core_regulator = drv_data->core_regulator; 322 460 323 461 for (i = 0; i < TPS65023_NUM_REGULATOR; i++, info++, init_data++) { ··· 331 471 tps->desc[i].type = REGULATOR_VOLTAGE; 332 472 tps->desc[i].owner = THIS_MODULE; 333 473 474 + tps->desc[i].enable_reg = TPS65023_REG_REG_CTRL; 475 + if (i == TPS65023_LDO_1) 476 + tps->desc[i].enable_mask = 1 << 1; 477 + else if (i == TPS65023_LDO_2) 478 + tps->desc[i].enable_mask = 1 << 2; 479 + else /* DCDCx */ 480 + tps->desc[i].enable_mask = 481 + 1 << (TPS65023_NUM_REGULATOR - i); 482 + 483 + config.dev = &client->dev; 484 + config.init_data = init_data; 485 + config.driver_data = tps; 486 + config.regmap = tps->regmap; 487 + 334 488 /* Register the regulators */ 335 - rdev = regulator_register(&tps->desc[i], &client->dev, 336 - init_data, tps, NULL); 489 + rdev = regulator_register(&tps->desc[i], &config); 337 490 if (IS_ERR(rdev)) { 338 491 dev_err(&client->dev, "failed to register %s\n", 339 492 id->name); ··· 369 496 fail: 370 497 while (--i >= 0) 371 498 regulator_unregister(tps->rdev[i]); 372 - 373 - regmap_exit(tps->regmap); 374 - fail_alloc: 375 - kfree(tps); 376 499 return error; 377 500 } 378 501 379 - /** 380 - * tps_65023_remove - TPS65023 driver i2c remove handler 381 - * @client: i2c driver client device structure 382 - * 383 - * Unregister TPS driver as an i2c client device driver 384 - */ 385 502 static int __devexit tps_65023_remove(struct i2c_client *client) 386 503 { 387 504 struct tps_pmic *tps = i2c_get_clientdata(client); ··· 379 516 380 517 for (i = 0; i < TPS65023_NUM_REGULATOR; i++) 381 518 regulator_unregister(tps->rdev[i]); 382 - 383 - regmap_exit(tps->regmap); 384 - kfree(tps); 385 - 386 519 return 0; 387 520 } 388 521 ··· 497 638 }; 498 639 499 640 static struct tps_driver_data tps65021_drv_data = { 500 - .info = tps65021_regs, 501 - .core_regulator = TPS65023_DCDC_3, 641 + .info = tps65021_regs, 642 + .core_regulator = TPS65023_DCDC_3, 502 643 }; 503 644 504 645 static struct tps_driver_data tps65023_drv_data = { 505 - .info = tps65023_regs, 506 - .core_regulator = TPS65023_DCDC_1, 646 + .info = tps65023_regs, 647 + .core_regulator = TPS65023_DCDC_1, 507 648 }; 508 649 509 650 static const struct i2c_device_id tps_65023_id[] = { ··· 528 669 .id_table = tps_65023_id, 529 670 }; 530 671 531 - /** 532 - * tps_65023_init 533 - * 534 - * Module init function 535 - */ 536 672 static int __init tps_65023_init(void) 537 673 { 538 674 return i2c_add_driver(&tps_65023_i2c_driver); 539 675 } 540 676 subsys_initcall(tps_65023_init); 541 677 542 - /** 543 - * tps_65023_cleanup 544 - * 545 - * Module exit function 546 - */ 547 678 static void __exit tps_65023_cleanup(void) 548 679 { 549 680 i2c_del_driver(&tps_65023_i2c_driver);
+7 -8
drivers/regulator/tps6507x-regulator.c
··· 404 404 { 405 405 struct tps6507x_dev *tps6507x_dev = dev_get_drvdata(pdev->dev.parent); 406 406 struct tps_info *info = &tps6507x_pmic_regs[0]; 407 + struct regulator_config config = { }; 407 408 struct regulator_init_data *init_data; 408 409 struct regulator_dev *rdev; 409 410 struct tps6507x_pmic *tps; ··· 429 428 if (!init_data) 430 429 return -EINVAL; 431 430 432 - tps = kzalloc(sizeof(*tps), GFP_KERNEL); 431 + tps = devm_kzalloc(&pdev->dev, sizeof(*tps), GFP_KERNEL); 433 432 if (!tps) 434 433 return -ENOMEM; 435 434 ··· 454 453 tps->desc[i].type = REGULATOR_VOLTAGE; 455 454 tps->desc[i].owner = THIS_MODULE; 456 455 457 - rdev = regulator_register(&tps->desc[i], 458 - tps6507x_dev->dev, init_data, tps, NULL); 456 + config.dev = tps6507x_dev->dev; 457 + config.init_data = init_data; 458 + config.driver_data = tps; 459 + 460 + rdev = regulator_register(&tps->desc[i], &config); 459 461 if (IS_ERR(rdev)) { 460 462 dev_err(tps6507x_dev->dev, 461 463 "failed to register %s regulator\n", ··· 479 475 fail: 480 476 while (--i >= 0) 481 477 regulator_unregister(tps->rdev[i]); 482 - 483 - kfree(tps); 484 478 return error; 485 479 } 486 480 ··· 490 488 491 489 for (i = 0; i < TPS6507X_NUM_REGULATOR; i++) 492 490 regulator_unregister(tps->rdev[i]); 493 - 494 - kfree(tps); 495 - 496 491 return 0; 497 492 } 498 493
+151
drivers/regulator/tps65090-regulator.c
··· 1 + /* 2 + * Regulator driver for tps65090 power management chip. 3 + * 4 + * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved. 5 + 6 + * This program is free software; you can redistribute it and/or modify it 7 + * under the terms and conditions of the GNU General Public License, 8 + * version 2, as published by the Free Software Foundation. 9 + 10 + * This program is distributed in the hope it will be useful, but WITHOUT 11 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 + * more details. 14 + 15 + * You should have received a copy of the GNU General Public License 16 + * along with this program. If not, see <http://www.gnu.org/licenses/> 17 + */ 18 + 19 + #include <linux/module.h> 20 + #include <linux/delay.h> 21 + #include <linux/init.h> 22 + #include <linux/slab.h> 23 + #include <linux/err.h> 24 + #include <linux/platform_device.h> 25 + #include <linux/regulator/driver.h> 26 + #include <linux/regulator/machine.h> 27 + #include <linux/mfd/tps65090.h> 28 + #include <linux/regulator/tps65090-regulator.h> 29 + 30 + struct tps65090_regulator { 31 + int id; 32 + /* used by regulator core */ 33 + struct regulator_desc desc; 34 + 35 + /* Device */ 36 + struct device *dev; 37 + }; 38 + 39 + static struct regulator_ops tps65090_ops = { 40 + .enable = regulator_enable_regmap, 41 + .disable = regulator_disable_regmap, 42 + .is_enabled = regulator_is_enabled_regmap, 43 + }; 44 + 45 + #define tps65090_REG(_id) \ 46 + { \ 47 + .id = TPS65090_ID_##_id, \ 48 + .desc = { \ 49 + .name = tps65090_rails(_id), \ 50 + .id = TPS65090_ID_##_id, \ 51 + .ops = &tps65090_ops, \ 52 + .type = REGULATOR_VOLTAGE, \ 53 + .owner = THIS_MODULE, \ 54 + .enable_reg = (TPS65090_ID_##_id) + 12, \ 55 + .enable_mask = BIT(0), \ 56 + }, \ 57 + } 58 + 59 + static struct tps65090_regulator TPS65090_regulator[] = { 60 + tps65090_REG(DCDC1), 61 + tps65090_REG(DCDC2), 62 + tps65090_REG(DCDC3), 63 + tps65090_REG(FET1), 64 + tps65090_REG(FET2), 65 + tps65090_REG(FET3), 66 + tps65090_REG(FET4), 67 + tps65090_REG(FET5), 68 + tps65090_REG(FET6), 69 + tps65090_REG(FET7), 70 + }; 71 + 72 + static inline struct tps65090_regulator *find_regulator_info(int id) 73 + { 74 + struct tps65090_regulator *ri; 75 + int i; 76 + 77 + for (i = 0; i < ARRAY_SIZE(TPS65090_regulator); i++) { 78 + ri = &TPS65090_regulator[i]; 79 + if (ri->desc.id == id) 80 + return ri; 81 + } 82 + return NULL; 83 + } 84 + 85 + static int __devinit tps65090_regulator_probe(struct platform_device *pdev) 86 + { 87 + struct tps65090 *tps65090_mfd = dev_get_drvdata(pdev->dev.parent); 88 + struct tps65090_regulator *ri = NULL; 89 + struct regulator_config config = { }; 90 + struct regulator_dev *rdev; 91 + struct tps65090_regulator_platform_data *tps_pdata; 92 + int id = pdev->id; 93 + 94 + dev_dbg(&pdev->dev, "Probing regulator %d\n", id); 95 + 96 + ri = find_regulator_info(id); 97 + if (ri == NULL) { 98 + dev_err(&pdev->dev, "invalid regulator ID specified\n"); 99 + return -EINVAL; 100 + } 101 + tps_pdata = pdev->dev.platform_data; 102 + ri->dev = &pdev->dev; 103 + 104 + config.dev = &pdev->dev; 105 + config.init_data = &tps_pdata->regulator; 106 + config.driver_data = ri; 107 + config.regmap = tps65090_mfd->rmap; 108 + 109 + rdev = regulator_register(&ri->desc, &config); 110 + if (IS_ERR(rdev)) { 111 + dev_err(&pdev->dev, "failed to register regulator %s\n", 112 + ri->desc.name); 113 + return PTR_ERR(rdev); 114 + } 115 + 116 + platform_set_drvdata(pdev, rdev); 117 + return 0; 118 + } 119 + 120 + static int __devexit tps65090_regulator_remove(struct platform_device *pdev) 121 + { 122 + struct regulator_dev *rdev = platform_get_drvdata(pdev); 123 + 124 + regulator_unregister(rdev); 125 + return 0; 126 + } 127 + 128 + static struct platform_driver tps65090_regulator_driver = { 129 + .driver = { 130 + .name = "tps65090-regulator", 131 + .owner = THIS_MODULE, 132 + }, 133 + .probe = tps65090_regulator_probe, 134 + .remove = __devexit_p(tps65090_regulator_remove), 135 + }; 136 + 137 + static int __init tps65090_regulator_init(void) 138 + { 139 + return platform_driver_register(&tps65090_regulator_driver); 140 + } 141 + subsys_initcall(tps65090_regulator_init); 142 + 143 + static void __exit tps65090_regulator_exit(void) 144 + { 145 + platform_driver_unregister(&tps65090_regulator_driver); 146 + } 147 + module_exit(tps65090_regulator_exit); 148 + 149 + MODULE_DESCRIPTION("tps65090 regulator driver"); 150 + MODULE_AUTHOR("Venu Byravarasu <vbyravarasu@nvidia.com>"); 151 + MODULE_LICENSE("GPL v2");
+7 -3
drivers/regulator/tps65217-regulator.c
··· 312 312 .list_voltage = tps65217_pmic_list_voltage, 313 313 }; 314 314 315 - static struct regulator_desc regulators[] = { 315 + static const struct regulator_desc regulators[] = { 316 316 TPS65217_REGULATOR("DCDC1", TPS65217_DCDC_1, tps65217_pmic_ops, 64), 317 317 TPS65217_REGULATOR("DCDC2", TPS65217_DCDC_2, tps65217_pmic_ops, 64), 318 318 TPS65217_REGULATOR("DCDC3", TPS65217_DCDC_3, tps65217_pmic_ops, 64), ··· 327 327 struct regulator_dev *rdev; 328 328 struct tps65217 *tps; 329 329 struct tps_info *info = &tps65217_pmic_regs[pdev->id]; 330 + struct regulator_config config = { }; 330 331 331 332 /* Already set by core driver */ 332 333 tps = dev_to_tps65217(pdev->dev.parent); 333 334 tps->info[pdev->id] = info; 334 335 335 - rdev = regulator_register(&regulators[pdev->id], &pdev->dev, 336 - pdev->dev.platform_data, tps, NULL); 336 + config.dev = &pdev->dev; 337 + config.init_data = pdev->dev.platform_data; 338 + config.driver_data = tps; 339 + 340 + rdev = regulator_register(&regulators[pdev->id], &config); 337 341 if (IS_ERR(rdev)) 338 342 return PTR_ERR(rdev); 339 343
+14 -33
drivers/regulator/tps6524x-regulator.c
··· 458 458 info->voltages[selector] : -EINVAL); 459 459 } 460 460 461 - static int set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV, 462 - unsigned *selector) 461 + static int set_voltage_sel(struct regulator_dev *rdev, unsigned selector) 463 462 { 464 463 const struct supply_info *info; 465 464 struct tps6524x *hw; 466 - unsigned i; 467 465 468 466 hw = rdev_get_drvdata(rdev); 469 467 info = &supply_info[rdev_get_id(rdev)]; ··· 469 471 if (info->flags & FIXED_VOLTAGE) 470 472 return -EINVAL; 471 473 472 - for (i = 0; i < info->n_voltages; i++) 473 - if (min_uV <= info->voltages[i] && 474 - max_uV >= info->voltages[i]) 475 - break; 476 - 477 - if (i >= info->n_voltages) 478 - i = info->n_voltages - 1; 479 - 480 - *selector = i; 481 - 482 - return write_field(hw, &info->voltage, i); 474 + return write_field(hw, &info->voltage, selector); 483 475 } 484 476 485 - static int get_voltage(struct regulator_dev *rdev) 477 + static int get_voltage_sel(struct regulator_dev *rdev) 486 478 { 487 479 const struct supply_info *info; 488 480 struct tps6524x *hw; ··· 490 502 if (WARN_ON(ret >= info->n_voltages)) 491 503 return -EIO; 492 504 493 - return info->voltages[ret]; 505 + return ret; 494 506 } 495 507 496 508 static int set_current_limit(struct regulator_dev *rdev, int min_uA, ··· 575 587 .is_enabled = is_supply_enabled, 576 588 .enable = enable_supply, 577 589 .disable = disable_supply, 578 - .get_voltage = get_voltage, 579 - .set_voltage = set_voltage, 590 + .get_voltage_sel = get_voltage_sel, 591 + .set_voltage_sel = set_voltage_sel, 580 592 .list_voltage = list_voltage, 581 593 .set_current_limit = set_current_limit, 582 594 .get_current_limit = get_current_limit, ··· 595 607 hw->rdev[i] = NULL; 596 608 } 597 609 spi_set_drvdata(spi, NULL); 598 - kfree(hw); 599 610 return 0; 600 611 } 601 612 ··· 604 617 struct device *dev = &spi->dev; 605 618 const struct supply_info *info = supply_info; 606 619 struct regulator_init_data *init_data; 620 + struct regulator_config config = { }; 607 621 int ret = 0, i; 608 622 609 623 init_data = dev->platform_data; ··· 613 625 return -EINVAL; 614 626 } 615 627 616 - hw = kzalloc(sizeof(struct tps6524x), GFP_KERNEL); 628 + hw = devm_kzalloc(&spi->dev, sizeof(struct tps6524x), GFP_KERNEL); 617 629 if (!hw) { 618 630 dev_err(dev, "cannot allocate regulator private data\n"); 619 631 return -ENOMEM; ··· 636 648 if (info->flags & FIXED_VOLTAGE) 637 649 hw->desc[i].n_voltages = 1; 638 650 639 - hw->rdev[i] = regulator_register(&hw->desc[i], dev, 640 - init_data, hw, NULL); 651 + config.dev = dev; 652 + config.init_data = init_data; 653 + config.driver_data = hw; 654 + 655 + hw->rdev[i] = regulator_register(&hw->desc[i], &config); 641 656 if (IS_ERR(hw->rdev[i])) { 642 657 ret = PTR_ERR(hw->rdev[i]); 643 658 hw->rdev[i] = NULL; ··· 664 673 }, 665 674 }; 666 675 667 - static int __init pmic_driver_init(void) 668 - { 669 - return spi_register_driver(&pmic_driver); 670 - } 671 - module_init(pmic_driver_init); 672 - 673 - static void __exit pmic_driver_exit(void) 674 - { 675 - spi_unregister_driver(&pmic_driver); 676 - } 677 - module_exit(pmic_driver_exit); 676 + module_spi_driver(pmic_driver); 678 677 679 678 MODULE_DESCRIPTION("TPS6524X PMIC Driver"); 680 679 MODULE_AUTHOR("Cyril Chemparathy");
+38 -73
drivers/regulator/tps6586x-regulator.c
··· 75 75 return rdev_get_dev(rdev)->parent->parent; 76 76 } 77 77 78 - static int tps6586x_ldo_list_voltage(struct regulator_dev *rdev, 79 - unsigned selector) 78 + static int tps6586x_list_voltage(struct regulator_dev *rdev, unsigned selector) 80 79 { 81 80 struct tps6586x_regulator *info = rdev_get_drvdata(rdev); 82 81 int rid = rdev_get_id(rdev); ··· 88 89 } 89 90 90 91 91 - static int __tps6586x_ldo_set_voltage(struct device *parent, 92 - struct tps6586x_regulator *ri, 93 - int min_uV, int max_uV, 94 - unsigned *selector) 95 - { 96 - int val, uV; 97 - uint8_t mask; 98 - 99 - for (val = 0; val < ri->desc.n_voltages; val++) { 100 - uV = ri->voltages[val] * 1000; 101 - 102 - /* LDO0 has minimal voltage 1.2 rather than 1.25 */ 103 - if (ri->desc.id == TPS6586X_ID_LDO_0 && val == 0) 104 - uV -= 50 * 1000; 105 - 106 - /* use the first in-range value */ 107 - if (min_uV <= uV && uV <= max_uV) { 108 - 109 - *selector = val; 110 - 111 - val <<= ri->volt_shift; 112 - mask = ((1 << ri->volt_nbits) - 1) << ri->volt_shift; 113 - 114 - return tps6586x_update(parent, ri->volt_reg, val, mask); 115 - } 116 - } 117 - 118 - return -EINVAL; 119 - } 120 - 121 - static int tps6586x_ldo_set_voltage(struct regulator_dev *rdev, 122 - int min_uV, int max_uV, unsigned *selector) 92 + static int tps6586x_set_voltage_sel(struct regulator_dev *rdev, 93 + unsigned selector) 123 94 { 124 95 struct tps6586x_regulator *ri = rdev_get_drvdata(rdev); 125 96 struct device *parent = to_tps6586x_dev(rdev); 97 + int ret, val, rid = rdev_get_id(rdev); 98 + uint8_t mask; 126 99 127 - return __tps6586x_ldo_set_voltage(parent, ri, min_uV, max_uV, 128 - selector); 100 + val = selector << ri->volt_shift; 101 + mask = ((1 << ri->volt_nbits) - 1) << ri->volt_shift; 102 + 103 + ret = tps6586x_update(parent, ri->volt_reg, val, mask); 104 + if (ret) 105 + return ret; 106 + 107 + /* Update go bit for DVM regulators */ 108 + switch (rid) { 109 + case TPS6586X_ID_LDO_2: 110 + case TPS6586X_ID_LDO_4: 111 + case TPS6586X_ID_SM_0: 112 + case TPS6586X_ID_SM_1: 113 + ret = tps6586x_set_bits(parent, ri->go_reg, 1 << ri->go_bit); 114 + break; 115 + } 116 + return ret; 129 117 } 130 118 131 - static int tps6586x_ldo_get_voltage(struct regulator_dev *rdev) 119 + static int tps6586x_get_voltage_sel(struct regulator_dev *rdev) 132 120 { 133 121 struct tps6586x_regulator *ri = rdev_get_drvdata(rdev); 134 122 struct device *parent = to_tps6586x_dev(rdev); ··· 132 146 if (val >= ri->desc.n_voltages) 133 147 BUG(); 134 148 135 - return ri->voltages[val] * 1000; 136 - } 137 - 138 - static int tps6586x_dvm_set_voltage(struct regulator_dev *rdev, 139 - int min_uV, int max_uV, unsigned *selector) 140 - { 141 - struct tps6586x_regulator *ri = rdev_get_drvdata(rdev); 142 - struct device *parent = to_tps6586x_dev(rdev); 143 - int ret; 144 - 145 - ret = __tps6586x_ldo_set_voltage(parent, ri, min_uV, max_uV, 146 - selector); 147 - if (ret) 148 - return ret; 149 - 150 - return tps6586x_set_bits(parent, ri->go_reg, 1 << ri->go_bit); 149 + return val; 151 150 } 152 151 153 152 static int tps6586x_regulator_enable(struct regulator_dev *rdev) ··· 167 196 return !!(reg_val & (1 << ri->enable_bit[0])); 168 197 } 169 198 170 - static struct regulator_ops tps6586x_regulator_ldo_ops = { 171 - .list_voltage = tps6586x_ldo_list_voltage, 172 - .get_voltage = tps6586x_ldo_get_voltage, 173 - .set_voltage = tps6586x_ldo_set_voltage, 174 - 175 - .is_enabled = tps6586x_regulator_is_enabled, 176 - .enable = tps6586x_regulator_enable, 177 - .disable = tps6586x_regulator_disable, 178 - }; 179 - 180 - static struct regulator_ops tps6586x_regulator_dvm_ops = { 181 - .list_voltage = tps6586x_ldo_list_voltage, 182 - .get_voltage = tps6586x_ldo_get_voltage, 183 - .set_voltage = tps6586x_dvm_set_voltage, 199 + static struct regulator_ops tps6586x_regulator_ops = { 200 + .list_voltage = tps6586x_list_voltage, 201 + .get_voltage_sel = tps6586x_get_voltage_sel, 202 + .set_voltage_sel = tps6586x_set_voltage_sel, 184 203 185 204 .is_enabled = tps6586x_regulator_is_enabled, 186 205 .enable = tps6586x_regulator_enable, ··· 202 241 1325, 1350, 1375, 1400, 1425, 1450, 1475, 1500, 203 242 }; 204 243 205 - #define TPS6586X_REGULATOR(_id, vdata, _ops, vreg, shift, nbits, \ 244 + #define TPS6586X_REGULATOR(_id, vdata, vreg, shift, nbits, \ 206 245 ereg0, ebit0, ereg1, ebit1) \ 207 246 .desc = { \ 208 247 .name = "REG-" #_id, \ 209 - .ops = &tps6586x_regulator_##_ops, \ 248 + .ops = &tps6586x_regulator_ops, \ 210 249 .type = REGULATOR_VOLTAGE, \ 211 250 .id = TPS6586X_ID_##_id, \ 212 251 .n_voltages = ARRAY_SIZE(tps6586x_##vdata##_voltages), \ ··· 228 267 #define TPS6586X_LDO(_id, vdata, vreg, shift, nbits, \ 229 268 ereg0, ebit0, ereg1, ebit1) \ 230 269 { \ 231 - TPS6586X_REGULATOR(_id, vdata, ldo_ops, vreg, shift, nbits, \ 270 + TPS6586X_REGULATOR(_id, vdata, vreg, shift, nbits, \ 232 271 ereg0, ebit0, ereg1, ebit1) \ 233 272 } 234 273 235 274 #define TPS6586X_DVM(_id, vdata, vreg, shift, nbits, \ 236 275 ereg0, ebit0, ereg1, ebit1, goreg, gobit) \ 237 276 { \ 238 - TPS6586X_REGULATOR(_id, vdata, dvm_ops, vreg, shift, nbits, \ 277 + TPS6586X_REGULATOR(_id, vdata, vreg, shift, nbits, \ 239 278 ereg0, ebit0, ereg1, ebit1) \ 240 279 TPS6586X_REGULATOR_DVM_GOREG(goreg, gobit) \ 241 280 } ··· 345 384 static int __devinit tps6586x_regulator_probe(struct platform_device *pdev) 346 385 { 347 386 struct tps6586x_regulator *ri = NULL; 387 + struct regulator_config config = { }; 348 388 struct regulator_dev *rdev; 349 389 int id = pdev->id; 350 390 int err; ··· 362 400 if (err) 363 401 return err; 364 402 365 - rdev = regulator_register(&ri->desc, &pdev->dev, 366 - pdev->dev.platform_data, ri, NULL); 403 + config.dev = &pdev->dev; 404 + config.init_data = pdev->dev.platform_data; 405 + config.driver_data = ri; 406 + 407 + rdev = regulator_register(&ri->desc, &config); 367 408 if (IS_ERR(rdev)) { 368 409 dev_err(&pdev->dev, "failed to register regulator %s\n", 369 410 ri->desc.name);
+24 -62
drivers/regulator/tps65910-regulator.c
··· 467 467 } 468 468 } 469 469 470 - static int tps65910_is_enabled(struct regulator_dev *dev) 471 - { 472 - struct tps65910_reg *pmic = rdev_get_drvdata(dev); 473 - int reg, value, id = rdev_get_id(dev); 474 - 475 - reg = pmic->get_ctrl_reg(id); 476 - if (reg < 0) 477 - return reg; 478 - 479 - value = tps65910_reg_read(pmic, reg); 480 - if (value < 0) 481 - return value; 482 - 483 - return value & TPS65910_SUPPLY_STATE_ENABLED; 484 - } 485 - 486 - static int tps65910_enable(struct regulator_dev *dev) 487 - { 488 - struct tps65910_reg *pmic = rdev_get_drvdata(dev); 489 - struct tps65910 *mfd = pmic->mfd; 490 - int reg, id = rdev_get_id(dev); 491 - 492 - reg = pmic->get_ctrl_reg(id); 493 - if (reg < 0) 494 - return reg; 495 - 496 - return tps65910_set_bits(mfd, reg, TPS65910_SUPPLY_STATE_ENABLED); 497 - } 498 - 499 - static int tps65910_disable(struct regulator_dev *dev) 500 - { 501 - struct tps65910_reg *pmic = rdev_get_drvdata(dev); 502 - struct tps65910 *mfd = pmic->mfd; 503 - int reg, id = rdev_get_id(dev); 504 - 505 - reg = pmic->get_ctrl_reg(id); 506 - if (reg < 0) 507 - return reg; 508 - 509 - return tps65910_clear_bits(mfd, reg, TPS65910_SUPPLY_STATE_ENABLED); 510 - } 511 - 512 470 static int tps65910_enable_time(struct regulator_dev *dev) 513 471 { 514 472 struct tps65910_reg *pmic = rdev_get_drvdata(dev); ··· 872 914 873 915 /* Regulator ops (except VRTC) */ 874 916 static struct regulator_ops tps65910_ops_dcdc = { 875 - .is_enabled = tps65910_is_enabled, 876 - .enable = tps65910_enable, 877 - .disable = tps65910_disable, 917 + .is_enabled = regulator_is_enabled_regmap, 918 + .enable = regulator_enable_regmap, 919 + .disable = regulator_disable_regmap, 878 920 .enable_time = tps65910_enable_time, 879 921 .set_mode = tps65910_set_mode, 880 922 .get_mode = tps65910_get_mode, ··· 885 927 }; 886 928 887 929 static struct regulator_ops tps65910_ops_vdd3 = { 888 - .is_enabled = tps65910_is_enabled, 889 - .enable = tps65910_enable, 890 - .disable = tps65910_disable, 930 + .is_enabled = regulator_is_enabled_regmap, 931 + .enable = regulator_enable_regmap, 932 + .disable = regulator_disable_regmap, 891 933 .enable_time = tps65910_enable_time, 892 934 .set_mode = tps65910_set_mode, 893 935 .get_mode = tps65910_get_mode, ··· 896 938 }; 897 939 898 940 static struct regulator_ops tps65910_ops = { 899 - .is_enabled = tps65910_is_enabled, 900 - .enable = tps65910_enable, 901 - .disable = tps65910_disable, 941 + .is_enabled = regulator_is_enabled_regmap, 942 + .enable = regulator_enable_regmap, 943 + .disable = regulator_disable_regmap, 902 944 .enable_time = tps65910_enable_time, 903 945 .set_mode = tps65910_set_mode, 904 946 .get_mode = tps65910_get_mode, ··· 908 950 }; 909 951 910 952 static struct regulator_ops tps65911_ops = { 911 - .is_enabled = tps65910_is_enabled, 912 - .enable = tps65910_enable, 913 - .disable = tps65910_disable, 953 + .is_enabled = regulator_is_enabled_regmap, 954 + .enable = regulator_enable_regmap, 955 + .disable = regulator_disable_regmap, 914 956 .enable_time = tps65910_enable_time, 915 957 .set_mode = tps65910_set_mode, 916 958 .get_mode = tps65910_get_mode, ··· 1055 1097 static __devinit int tps65910_probe(struct platform_device *pdev) 1056 1098 { 1057 1099 struct tps65910 *tps65910 = dev_get_drvdata(pdev->dev.parent); 1100 + struct regulator_config config = { }; 1058 1101 struct tps_info *info; 1059 1102 struct regulator_init_data *reg_data; 1060 1103 struct regulator_dev *rdev; ··· 1067 1108 if (!pmic_plat_data) 1068 1109 return -EINVAL; 1069 1110 1070 - pmic = kzalloc(sizeof(*pmic), GFP_KERNEL); 1111 + pmic = devm_kzalloc(&pdev->dev, sizeof(*pmic), GFP_KERNEL); 1071 1112 if (!pmic) 1072 1113 return -ENOMEM; 1073 1114 ··· 1094 1135 break; 1095 1136 default: 1096 1137 pr_err("Invalid tps chip version\n"); 1097 - kfree(pmic); 1098 1138 return -ENODEV; 1099 1139 } 1100 1140 ··· 1101 1143 sizeof(struct regulator_desc), GFP_KERNEL); 1102 1144 if (!pmic->desc) { 1103 1145 err = -ENOMEM; 1104 - goto err_free_pmic; 1146 + goto err_out; 1105 1147 } 1106 1148 1107 1149 pmic->info = kcalloc(pmic->num_regulators, ··· 1163 1205 1164 1206 pmic->desc[i].type = REGULATOR_VOLTAGE; 1165 1207 pmic->desc[i].owner = THIS_MODULE; 1208 + pmic->desc[i].enable_reg = pmic->get_ctrl_reg(i); 1209 + pmic->desc[i].enable_mask = TPS65910_SUPPLY_STATE_ENABLED; 1166 1210 1167 - rdev = regulator_register(&pmic->desc[i], 1168 - tps65910->dev, reg_data, pmic, NULL); 1211 + config.dev = tps65910->dev; 1212 + config.init_data = reg_data; 1213 + config.driver_data = pmic; 1214 + config.regmap = tps65910->regmap; 1215 + 1216 + rdev = regulator_register(&pmic->desc[i], &config); 1169 1217 if (IS_ERR(rdev)) { 1170 1218 dev_err(tps65910->dev, 1171 1219 "failed to register %s regulator\n", ··· 1193 1229 kfree(pmic->info); 1194 1230 err_free_desc: 1195 1231 kfree(pmic->desc); 1196 - err_free_pmic: 1197 - kfree(pmic); 1232 + err_out: 1198 1233 return err; 1199 1234 } 1200 1235 ··· 1208 1245 kfree(pmic->rdev); 1209 1246 kfree(pmic->info); 1210 1247 kfree(pmic->desc); 1211 - kfree(pmic); 1212 1248 return 0; 1213 1249 } 1214 1250
+18 -41
drivers/regulator/tps65912-regulator.c
··· 372 372 return mode; 373 373 } 374 374 375 - static int tps65912_list_voltage_dcdc(struct regulator_dev *dev, 376 - unsigned selector) 375 + static int tps65912_list_voltage(struct regulator_dev *dev, unsigned selector) 377 376 { 378 377 struct tps65912_reg *pmic = rdev_get_drvdata(dev); 379 378 int range, voltage = 0, id = rdev_get_id(dev); 379 + 380 + if (id >= TPS65912_REG_LDO1 && id <= TPS65912_REG_LDO10) 381 + return tps65912_vsel_to_uv_ldo(selector); 380 382 381 383 if (id > TPS65912_REG_DCDC4) 382 384 return -EINVAL; ··· 406 404 return voltage; 407 405 } 408 406 409 - static int tps65912_get_voltage_dcdc(struct regulator_dev *dev) 407 + static int tps65912_get_voltage(struct regulator_dev *dev) 410 408 { 411 409 struct tps65912_reg *pmic = rdev_get_drvdata(dev); 412 410 struct tps65912 *mfd = pmic->mfd; ··· 420 418 vsel = tps65912_reg_read(mfd, reg); 421 419 vsel &= 0x3F; 422 420 423 - return tps65912_list_voltage_dcdc(dev, vsel); 421 + return tps65912_list_voltage(dev, vsel); 424 422 } 425 423 426 424 static int tps65912_set_voltage_sel(struct regulator_dev *dev, ··· 438 436 return tps65912_reg_write(mfd, reg, selector | value); 439 437 } 440 438 441 - static int tps65912_get_voltage_ldo(struct regulator_dev *dev) 442 - { 443 - struct tps65912_reg *pmic = rdev_get_drvdata(dev); 444 - struct tps65912 *mfd = pmic->mfd; 445 - int id = rdev_get_id(dev); 446 - int vsel = 0; 447 - u8 reg; 448 - 449 - reg = tps65912_get_sel_register(pmic, id); 450 - vsel = tps65912_reg_read(mfd, reg); 451 - vsel &= 0x3F; 452 - 453 - return tps65912_vsel_to_uv_ldo(vsel); 454 - } 455 - 456 - static int tps65912_list_voltage_ldo(struct regulator_dev *dev, 457 - unsigned selector) 458 - { 459 - int ldo = rdev_get_id(dev); 460 - 461 - if (ldo < TPS65912_REG_LDO1 || ldo > TPS65912_REG_LDO10) 462 - return -EINVAL; 463 - 464 - return tps65912_vsel_to_uv_ldo(selector); 465 - } 466 - 467 439 /* Operations permitted on DCDCx */ 468 440 static struct regulator_ops tps65912_ops_dcdc = { 469 441 .is_enabled = tps65912_reg_is_enabled, ··· 445 469 .disable = tps65912_reg_disable, 446 470 .set_mode = tps65912_set_mode, 447 471 .get_mode = tps65912_get_mode, 448 - .get_voltage = tps65912_get_voltage_dcdc, 472 + .get_voltage = tps65912_get_voltage, 449 473 .set_voltage_sel = tps65912_set_voltage_sel, 450 - .list_voltage = tps65912_list_voltage_dcdc, 474 + .list_voltage = tps65912_list_voltage, 451 475 }; 452 476 453 477 /* Operations permitted on LDOx */ ··· 455 479 .is_enabled = tps65912_reg_is_enabled, 456 480 .enable = tps65912_reg_enable, 457 481 .disable = tps65912_reg_disable, 458 - .get_voltage = tps65912_get_voltage_ldo, 482 + .get_voltage = tps65912_get_voltage, 459 483 .set_voltage_sel = tps65912_set_voltage_sel, 460 - .list_voltage = tps65912_list_voltage_ldo, 484 + .list_voltage = tps65912_list_voltage, 461 485 }; 462 486 463 487 static __devinit int tps65912_probe(struct platform_device *pdev) 464 488 { 465 489 struct tps65912 *tps65912 = dev_get_drvdata(pdev->dev.parent); 490 + struct regulator_config config = { }; 466 491 struct tps_info *info; 467 492 struct regulator_init_data *reg_data; 468 493 struct regulator_dev *rdev; ··· 477 500 478 501 reg_data = pmic_plat_data->tps65912_pmic_init_data; 479 502 480 - pmic = kzalloc(sizeof(*pmic), GFP_KERNEL); 503 + pmic = devm_kzalloc(&pdev->dev, sizeof(*pmic), GFP_KERNEL); 481 504 if (!pmic) 482 505 return -ENOMEM; 483 506 ··· 501 524 pmic->desc[i].type = REGULATOR_VOLTAGE; 502 525 pmic->desc[i].owner = THIS_MODULE; 503 526 range = tps65912_get_range(pmic, i); 504 - rdev = regulator_register(&pmic->desc[i], 505 - tps65912->dev, reg_data, pmic, NULL); 527 + 528 + config.dev = tps65912->dev; 529 + config.init_data = reg_data; 530 + config.driver_data = pmic; 531 + 532 + rdev = regulator_register(&pmic->desc[i], &config); 506 533 if (IS_ERR(rdev)) { 507 534 dev_err(tps65912->dev, 508 535 "failed to register %s regulator\n", ··· 523 542 err: 524 543 while (--i >= 0) 525 544 regulator_unregister(pmic->rdev[i]); 526 - 527 - kfree(pmic); 528 545 return err; 529 546 } 530 547 ··· 533 554 534 555 for (i = 0; i < TPS65912_NUM_REGULATOR; i++) 535 556 regulator_unregister(tps65912_reg->rdev[i]); 536 - 537 - kfree(tps65912_reg); 538 557 return 0; 539 558 } 540 559
+54 -64
drivers/regulator/twl-regulator.c
··· 175 175 struct twlreg_info *info = rdev_get_drvdata(rdev); 176 176 int grp = 0, val; 177 177 178 - if (!(twl_class_is_6030() && (info->features & TWL6025_SUBCLASS))) 179 - grp = twlreg_read(info, TWL_MODULE_PM_RECEIVER, VREG_GRP); 180 - if (grp < 0) 181 - return grp; 182 - 183 - if (!(twl_class_is_6030() && (info->features & TWL6025_SUBCLASS))) 178 + if (!(twl_class_is_6030() && (info->features & TWL6025_SUBCLASS))) { 179 + grp = twlreg_grp(rdev); 180 + if (grp < 0) 181 + return grp; 184 182 grp &= P1_GRP_6030; 185 - else 183 + } else { 186 184 grp = 1; 185 + } 187 186 188 187 val = twlreg_read(info, TWL_MODULE_PM_RECEIVER, VREG_STATE); 189 188 val = TWL6030_CFG_STATE_APP(val); ··· 196 197 int grp; 197 198 int ret; 198 199 199 - grp = twlreg_read(info, TWL_MODULE_PM_RECEIVER, VREG_GRP); 200 + grp = twlreg_grp(rdev); 200 201 if (grp < 0) 201 202 return grp; 202 203 203 204 grp |= P1_GRP_4030; 204 205 205 206 ret = twlreg_write(info, TWL_MODULE_PM_RECEIVER, VREG_GRP, grp); 206 - 207 - udelay(info->delay); 208 207 209 208 return ret; 210 209 } ··· 214 217 int ret; 215 218 216 219 if (!(twl_class_is_6030() && (info->features & TWL6025_SUBCLASS))) 217 - grp = twlreg_read(info, TWL_MODULE_PM_RECEIVER, VREG_GRP); 220 + grp = twlreg_grp(rdev); 218 221 if (grp < 0) 219 222 return grp; 220 223 221 224 ret = twlreg_write(info, TWL_MODULE_PM_RECEIVER, VREG_STATE, 222 225 grp << TWL6030_CFG_STATE_GRP_SHIFT | 223 226 TWL6030_CFG_STATE_ON); 224 - 225 - udelay(info->delay); 226 - 227 227 return ret; 228 + } 229 + 230 + static int twl4030reg_enable_time(struct regulator_dev *rdev) 231 + { 232 + struct twlreg_info *info = rdev_get_drvdata(rdev); 233 + 234 + return info->delay; 235 + } 236 + 237 + static int twl6030reg_enable_time(struct regulator_dev *rdev) 238 + { 239 + struct twlreg_info *info = rdev_get_drvdata(rdev); 240 + 241 + return info->delay; 228 242 } 229 243 230 244 static int twl4030reg_disable(struct regulator_dev *rdev) ··· 244 236 int grp; 245 237 int ret; 246 238 247 - grp = twlreg_read(info, TWL_MODULE_PM_RECEIVER, VREG_GRP); 239 + grp = twlreg_grp(rdev); 248 240 if (grp < 0) 249 241 return grp; 250 242 ··· 356 348 int val; 357 349 358 350 if (!(twl_class_is_6030() && (info->features & TWL6025_SUBCLASS))) 359 - grp = twlreg_read(info, TWL_MODULE_PM_RECEIVER, VREG_GRP); 351 + grp = twlreg_grp(rdev); 360 352 361 353 if (grp < 0) 362 354 return grp; ··· 481 473 } 482 474 483 475 static int 484 - twl4030ldo_set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV, 485 - unsigned *selector) 476 + twl4030ldo_set_voltage_sel(struct regulator_dev *rdev, unsigned selector) 486 477 { 487 478 struct twlreg_info *info = rdev_get_drvdata(rdev); 488 - int vsel; 489 479 490 - for (vsel = 0; vsel < info->table_len; vsel++) { 491 - int mV = info->table[vsel]; 492 - int uV; 493 - 494 - if (IS_UNSUP(mV)) 495 - continue; 496 - uV = LDO_MV(mV) * 1000; 497 - 498 - /* REVISIT for VAUX2, first match may not be best/lowest */ 499 - 500 - /* use the first in-range value */ 501 - if (min_uV <= uV && uV <= max_uV) { 502 - *selector = vsel; 503 - return twlreg_write(info, TWL_MODULE_PM_RECEIVER, 504 - VREG_VOLTAGE, vsel); 505 - } 506 - } 507 - 508 - return -EDOM; 480 + return twlreg_write(info, TWL_MODULE_PM_RECEIVER, VREG_VOLTAGE, 481 + selector); 509 482 } 510 483 511 484 static int twl4030ldo_get_voltage(struct regulator_dev *rdev) ··· 505 516 static struct regulator_ops twl4030ldo_ops = { 506 517 .list_voltage = twl4030ldo_list_voltage, 507 518 508 - .set_voltage = twl4030ldo_set_voltage, 519 + .set_voltage_sel = twl4030ldo_set_voltage_sel, 509 520 .get_voltage = twl4030ldo_get_voltage, 510 521 511 522 .enable = twl4030reg_enable, 512 523 .disable = twl4030reg_disable, 513 524 .is_enabled = twl4030reg_is_enabled, 525 + .enable_time = twl4030reg_enable_time, 514 526 515 527 .set_mode = twl4030reg_set_mode, 516 528 ··· 632 642 .enable = twl6030reg_enable, 633 643 .disable = twl6030reg_disable, 634 644 .is_enabled = twl6030reg_is_enabled, 645 + .enable_time = twl6030reg_enable_time, 635 646 636 647 .set_mode = twl6030reg_set_mode, 637 648 ··· 666 675 .enable = twl4030reg_enable, 667 676 .disable = twl4030reg_disable, 668 677 .is_enabled = twl4030reg_is_enabled, 678 + .enable_time = twl4030reg_enable_time, 669 679 670 680 .set_mode = twl4030reg_set_mode, 671 681 ··· 681 689 .enable = twl6030reg_enable, 682 690 .disable = twl6030reg_disable, 683 691 .is_enabled = twl6030reg_is_enabled, 692 + .enable_time = twl6030reg_enable_time, 684 693 685 694 .set_mode = twl6030reg_set_mode, 686 695 ··· 692 699 .enable = twl6030reg_enable, 693 700 .disable = twl6030reg_disable, 694 701 .is_enabled = twl6030reg_is_enabled, 702 + .enable_time = twl6030reg_enable_time, 695 703 .get_status = twl6030reg_get_status, 696 704 }; 697 705 ··· 800 806 vsel = 0; 801 807 else if ((min_uV >= 600000) && (min_uV <= 1300000)) { 802 808 int calc_uV; 803 - vsel = (min_uV - 600000) / 125; 804 - if (vsel % 100) 805 - vsel += 100; 806 - vsel /= 100; 809 + vsel = DIV_ROUND_UP(min_uV - 600000, 12500); 807 810 vsel++; 808 811 calc_uV = twl6030smps_list_voltage(rdev, vsel); 809 812 if (calc_uV > max_uV) ··· 827 836 vsel = 0; 828 837 else if ((min_uV >= 700000) && (min_uV <= 1420000)) { 829 838 int calc_uV; 830 - vsel = (min_uV - 700000) / 125; 831 - if (vsel % 100) 832 - vsel += 100; 833 - vsel /= 100; 839 + vsel = DIV_ROUND_UP(min_uV - 700000, 12500); 834 840 vsel++; 835 841 calc_uV = twl6030smps_list_voltage(rdev, vsel); 836 842 if (calc_uV > max_uV) ··· 850 862 return -EINVAL; 851 863 break; 852 864 case SMPS_EXTENDED_EN: 853 - if (min_uV == 0) 865 + if (min_uV == 0) { 854 866 vsel = 0; 855 - else if ((min_uV >= 1852000) && (max_uV <= 4013600)) { 856 - vsel = (min_uV - 1852000) / 386; 857 - if (vsel % 100) 858 - vsel += 100; 859 - vsel /= 100; 867 + } else if ((min_uV >= 1852000) && (max_uV <= 4013600)) { 868 + vsel = DIV_ROUND_UP(min_uV - 1852000, 38600); 860 869 vsel++; 861 870 } 862 871 break; 863 872 case SMPS_OFFSET_EN|SMPS_EXTENDED_EN: 864 - if (min_uV == 0) 873 + if (min_uV == 0) { 865 874 vsel = 0; 866 - else if ((min_uV >= 2161000) && (max_uV <= 4321000)) { 867 - vsel = (min_uV - 2161000) / 386; 868 - if (vsel % 100) 869 - vsel += 100; 870 - vsel /= 100; 875 + } else if ((min_uV >= 2161000) && (max_uV <= 4321000)) { 876 + vsel = DIV_ROUND_UP(min_uV - 2161000, 38600); 871 877 vsel++; 872 878 } 873 879 break; ··· 889 907 .enable = twl6030reg_enable, 890 908 .disable = twl6030reg_disable, 891 909 .is_enabled = twl6030reg_is_enabled, 910 + .enable_time = twl6030reg_enable_time, 892 911 893 912 .set_mode = twl6030reg_set_mode, 894 913 ··· 1177 1194 struct regulator_dev *rdev; 1178 1195 struct twl_regulator_driver_data *drvdata; 1179 1196 const struct of_device_id *match; 1197 + struct regulator_config config = { }; 1180 1198 1181 1199 match = of_match_device(twl_of_match, &pdev->dev); 1182 1200 if (match) { ··· 1191 1207 initdata = pdev->dev.platform_data; 1192 1208 for (i = 0, info = NULL; i < ARRAY_SIZE(twl_of_match); i++) { 1193 1209 info = twl_of_match[i].data; 1194 - if (!info || info->desc.id != id) 1195 - continue; 1196 - break; 1210 + if (info && info->desc.id == id) 1211 + break; 1197 1212 } 1213 + if (i == ARRAY_SIZE(twl_of_match)) 1214 + return -ENODEV; 1215 + 1198 1216 drvdata = initdata->driver_data; 1199 1217 if (!drvdata) 1200 1218 return -EINVAL; ··· 1259 1273 break; 1260 1274 } 1261 1275 1262 - rdev = regulator_register(&info->desc, &pdev->dev, initdata, info, 1263 - pdev->dev.of_node); 1276 + config.dev = &pdev->dev; 1277 + config.init_data = initdata; 1278 + config.driver_data = info; 1279 + config.of_node = pdev->dev.of_node; 1280 + 1281 + rdev = regulator_register(&info->desc, &config); 1264 1282 if (IS_ERR(rdev)) { 1265 1283 dev_err(&pdev->dev, "can't register %s, %ld\n", 1266 1284 info->desc.name, PTR_ERR(rdev));
+56 -86
drivers/regulator/wm831x-dcdc.c
··· 60 60 int dvs_vsel; 61 61 }; 62 62 63 - static int wm831x_dcdc_is_enabled(struct regulator_dev *rdev) 64 - { 65 - struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev); 66 - struct wm831x *wm831x = dcdc->wm831x; 67 - int mask = 1 << rdev_get_id(rdev); 68 - int reg; 69 - 70 - reg = wm831x_reg_read(wm831x, WM831X_DCDC_ENABLE); 71 - if (reg < 0) 72 - return reg; 73 - 74 - if (reg & mask) 75 - return 1; 76 - else 77 - return 0; 78 - } 79 - 80 - static int wm831x_dcdc_enable(struct regulator_dev *rdev) 81 - { 82 - struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev); 83 - struct wm831x *wm831x = dcdc->wm831x; 84 - int mask = 1 << rdev_get_id(rdev); 85 - 86 - return wm831x_set_bits(wm831x, WM831X_DCDC_ENABLE, mask, mask); 87 - } 88 - 89 - static int wm831x_dcdc_disable(struct regulator_dev *rdev) 90 - { 91 - struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev); 92 - struct wm831x *wm831x = dcdc->wm831x; 93 - int mask = 1 << rdev_get_id(rdev); 94 - 95 - return wm831x_set_bits(wm831x, WM831X_DCDC_ENABLE, mask, 0); 96 - } 97 - 98 63 static unsigned int wm831x_dcdc_get_mode(struct regulator_dev *rdev) 99 64 100 65 { ··· 379 414 .set_current_limit = wm831x_buckv_set_current_limit, 380 415 .get_current_limit = wm831x_buckv_get_current_limit, 381 416 382 - .is_enabled = wm831x_dcdc_is_enabled, 383 - .enable = wm831x_dcdc_enable, 384 - .disable = wm831x_dcdc_disable, 417 + .is_enabled = regulator_is_enabled_regmap, 418 + .enable = regulator_enable_regmap, 419 + .disable = regulator_disable_regmap, 385 420 .get_status = wm831x_dcdc_get_status, 386 421 .get_mode = wm831x_dcdc_get_mode, 387 422 .set_mode = wm831x_dcdc_set_mode, ··· 463 498 { 464 499 struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent); 465 500 struct wm831x_pdata *pdata = wm831x->dev->platform_data; 501 + struct regulator_config config = { }; 466 502 int id; 467 503 struct wm831x_dcdc *dcdc; 468 504 struct resource *res; ··· 476 510 id = pdev->id - id; 477 511 478 512 dev_dbg(&pdev->dev, "Probing DCDC%d\n", id + 1); 479 - 480 - if (pdata == NULL || pdata->dcdc[id] == NULL) 481 - return -ENODEV; 482 513 483 514 dcdc = devm_kzalloc(&pdev->dev, sizeof(struct wm831x_dcdc), 484 515 GFP_KERNEL); ··· 501 538 dcdc->desc.n_voltages = WM831X_BUCKV_MAX_SELECTOR + 1; 502 539 dcdc->desc.ops = &wm831x_buckv_ops; 503 540 dcdc->desc.owner = THIS_MODULE; 541 + dcdc->desc.enable_reg = WM831X_DCDC_ENABLE; 542 + dcdc->desc.enable_mask = 1 << id; 504 543 505 544 ret = wm831x_reg_read(wm831x, dcdc->base + WM831X_DCDC_ON_CONFIG); 506 545 if (ret < 0) { ··· 521 556 if (pdata->dcdc[id]) 522 557 wm831x_buckv_dvs_init(dcdc, pdata->dcdc[id]->driver_data); 523 558 524 - dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev, 525 - pdata->dcdc[id], dcdc, NULL); 559 + config.dev = pdev->dev.parent; 560 + if (pdata) 561 + config.init_data = pdata->dcdc[id]; 562 + config.driver_data = dcdc; 563 + config.regmap = wm831x->regmap; 564 + 565 + dcdc->regulator = regulator_register(&dcdc->desc, &config); 526 566 if (IS_ERR(dcdc->regulator)) { 527 567 ret = PTR_ERR(dcdc->regulator); 528 568 dev_err(wm831x->dev, "Failed to register DCDC%d: %d\n", ··· 645 675 return wm831x_buckp_set_voltage_int(rdev, reg, uV, uV, &selector); 646 676 } 647 677 648 - static int wm831x_buckp_get_voltage_sel(struct regulator_dev *rdev) 649 - { 650 - struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev); 651 - struct wm831x *wm831x = dcdc->wm831x; 652 - u16 reg = dcdc->base + WM831X_DCDC_ON_CONFIG; 653 - int val; 654 - 655 - val = wm831x_reg_read(wm831x, reg); 656 - if (val < 0) 657 - return val; 658 - 659 - return val & WM831X_DC3_ON_VSEL_MASK; 660 - } 661 - 662 678 static struct regulator_ops wm831x_buckp_ops = { 663 679 .set_voltage = wm831x_buckp_set_voltage, 664 - .get_voltage_sel = wm831x_buckp_get_voltage_sel, 680 + .get_voltage_sel = regulator_get_voltage_sel_regmap, 665 681 .list_voltage = wm831x_buckp_list_voltage, 666 682 .set_suspend_voltage = wm831x_buckp_set_suspend_voltage, 667 683 668 - .is_enabled = wm831x_dcdc_is_enabled, 669 - .enable = wm831x_dcdc_enable, 670 - .disable = wm831x_dcdc_disable, 684 + .is_enabled = regulator_is_enabled_regmap, 685 + .enable = regulator_enable_regmap, 686 + .disable = regulator_disable_regmap, 671 687 .get_status = wm831x_dcdc_get_status, 672 688 .get_mode = wm831x_dcdc_get_mode, 673 689 .set_mode = wm831x_dcdc_set_mode, ··· 664 708 { 665 709 struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent); 666 710 struct wm831x_pdata *pdata = wm831x->dev->platform_data; 711 + struct regulator_config config = { }; 667 712 int id; 668 713 struct wm831x_dcdc *dcdc; 669 714 struct resource *res; ··· 677 720 id = pdev->id - id; 678 721 679 722 dev_dbg(&pdev->dev, "Probing DCDC%d\n", id + 1); 680 - 681 - if (pdata == NULL || pdata->dcdc[id] == NULL) 682 - return -ENODEV; 683 723 684 724 dcdc = devm_kzalloc(&pdev->dev, sizeof(struct wm831x_dcdc), 685 725 GFP_KERNEL); ··· 702 748 dcdc->desc.n_voltages = WM831X_BUCKP_MAX_SELECTOR + 1; 703 749 dcdc->desc.ops = &wm831x_buckp_ops; 704 750 dcdc->desc.owner = THIS_MODULE; 751 + dcdc->desc.vsel_reg = dcdc->base + WM831X_DCDC_ON_CONFIG; 752 + dcdc->desc.vsel_mask = WM831X_DC3_ON_VSEL_MASK; 753 + dcdc->desc.enable_reg = WM831X_DCDC_ENABLE; 754 + dcdc->desc.enable_mask = 1 << id; 705 755 706 - dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev, 707 - pdata->dcdc[id], dcdc, NULL); 756 + config.dev = pdev->dev.parent; 757 + if (pdata) 758 + config.init_data = pdata->dcdc[id]; 759 + config.driver_data = dcdc; 760 + config.regmap = wm831x->regmap; 761 + 762 + dcdc->regulator = regulator_register(&dcdc->desc, &config); 708 763 if (IS_ERR(dcdc->regulator)) { 709 764 ret = PTR_ERR(dcdc->regulator); 710 765 dev_err(wm831x->dev, "Failed to register DCDC%d: %d\n", ··· 795 832 static struct regulator_ops wm831x_boostp_ops = { 796 833 .get_status = wm831x_boostp_get_status, 797 834 798 - .is_enabled = wm831x_dcdc_is_enabled, 799 - .enable = wm831x_dcdc_enable, 800 - .disable = wm831x_dcdc_disable, 835 + .is_enabled = regulator_is_enabled_regmap, 836 + .enable = regulator_enable_regmap, 837 + .disable = regulator_disable_regmap, 801 838 }; 802 839 803 840 static __devinit int wm831x_boostp_probe(struct platform_device *pdev) 804 841 { 805 842 struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent); 806 843 struct wm831x_pdata *pdata = wm831x->dev->platform_data; 844 + struct regulator_config config = { }; 807 845 int id = pdev->id % ARRAY_SIZE(pdata->dcdc); 808 846 struct wm831x_dcdc *dcdc; 809 847 struct resource *res; ··· 815 851 if (pdata == NULL || pdata->dcdc[id] == NULL) 816 852 return -ENODEV; 817 853 818 - dcdc = kzalloc(sizeof(struct wm831x_dcdc), GFP_KERNEL); 854 + dcdc = devm_kzalloc(&pdev->dev, sizeof(struct wm831x_dcdc), GFP_KERNEL); 819 855 if (dcdc == NULL) { 820 856 dev_err(&pdev->dev, "Unable to allocate private data\n"); 821 857 return -ENOMEM; ··· 837 873 dcdc->desc.type = REGULATOR_VOLTAGE; 838 874 dcdc->desc.ops = &wm831x_boostp_ops; 839 875 dcdc->desc.owner = THIS_MODULE; 876 + dcdc->desc.enable_reg = WM831X_DCDC_ENABLE; 877 + dcdc->desc.enable_mask = 1 << id; 840 878 841 - dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev, 842 - pdata->dcdc[id], dcdc, NULL); 879 + config.dev = pdev->dev.parent; 880 + config.init_data = pdata->dcdc[id]; 881 + config.driver_data = dcdc; 882 + config.regmap = wm831x->regmap; 883 + 884 + dcdc->regulator = regulator_register(&dcdc->desc, &config); 843 885 if (IS_ERR(dcdc->regulator)) { 844 886 ret = PTR_ERR(dcdc->regulator); 845 887 dev_err(wm831x->dev, "Failed to register DCDC%d: %d\n", ··· 870 900 err_regulator: 871 901 regulator_unregister(dcdc->regulator); 872 902 err: 873 - kfree(dcdc); 874 903 return ret; 875 904 } 876 905 ··· 881 912 882 913 free_irq(platform_get_irq_byname(pdev, "UV"), dcdc); 883 914 regulator_unregister(dcdc->regulator); 884 - kfree(dcdc); 885 915 886 916 return 0; 887 917 } ··· 904 936 #define WM831X_EPE_BASE 6 905 937 906 938 static struct regulator_ops wm831x_epe_ops = { 907 - .is_enabled = wm831x_dcdc_is_enabled, 908 - .enable = wm831x_dcdc_enable, 909 - .disable = wm831x_dcdc_disable, 939 + .is_enabled = regulator_is_enabled_regmap, 940 + .enable = regulator_enable_regmap, 941 + .disable = regulator_disable_regmap, 910 942 .get_status = wm831x_dcdc_get_status, 911 943 }; 912 944 ··· 914 946 { 915 947 struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent); 916 948 struct wm831x_pdata *pdata = wm831x->dev->platform_data; 949 + struct regulator_config config = { }; 917 950 int id = pdev->id % ARRAY_SIZE(pdata->epe); 918 951 struct wm831x_dcdc *dcdc; 919 952 int ret; 920 953 921 954 dev_dbg(&pdev->dev, "Probing EPE%d\n", id + 1); 922 955 923 - if (pdata == NULL || pdata->epe[id] == NULL) 924 - return -ENODEV; 925 - 926 - dcdc = kzalloc(sizeof(struct wm831x_dcdc), GFP_KERNEL); 956 + dcdc = devm_kzalloc(&pdev->dev, sizeof(struct wm831x_dcdc), GFP_KERNEL); 927 957 if (dcdc == NULL) { 928 958 dev_err(&pdev->dev, "Unable to allocate private data\n"); 929 959 return -ENOMEM; ··· 938 972 dcdc->desc.ops = &wm831x_epe_ops; 939 973 dcdc->desc.type = REGULATOR_VOLTAGE; 940 974 dcdc->desc.owner = THIS_MODULE; 975 + dcdc->desc.enable_reg = WM831X_DCDC_ENABLE; 976 + dcdc->desc.enable_mask = 1 << dcdc->desc.id; 941 977 942 - dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev, 943 - pdata->epe[id], dcdc, NULL); 978 + config.dev = pdev->dev.parent; 979 + if (pdata) 980 + config.init_data = pdata->epe[id]; 981 + config.driver_data = dcdc; 982 + config.regmap = wm831x->regmap; 983 + 984 + dcdc->regulator = regulator_register(&dcdc->desc, &config); 944 985 if (IS_ERR(dcdc->regulator)) { 945 986 ret = PTR_ERR(dcdc->regulator); 946 987 dev_err(wm831x->dev, "Failed to register EPE%d: %d\n", ··· 960 987 return 0; 961 988 962 989 err: 963 - kfree(dcdc); 964 990 return ret; 965 991 } 966 992 ··· 968 996 struct wm831x_dcdc *dcdc = platform_get_drvdata(pdev); 969 997 970 998 platform_set_drvdata(pdev, NULL); 971 - 972 999 regulator_unregister(dcdc->regulator); 973 - kfree(dcdc); 974 1000 975 1001 return 0; 976 1002 }
+6 -2
drivers/regulator/wm831x-isink.c
··· 154 154 struct wm831x_pdata *pdata = wm831x->dev->platform_data; 155 155 struct wm831x_isink *isink; 156 156 int id = pdev->id % ARRAY_SIZE(pdata->isink); 157 + struct regulator_config config = { }; 157 158 struct resource *res; 158 159 int ret, irq; 159 160 ··· 190 189 isink->desc.type = REGULATOR_CURRENT; 191 190 isink->desc.owner = THIS_MODULE; 192 191 193 - isink->regulator = regulator_register(&isink->desc, &pdev->dev, 194 - pdata->isink[id], isink, NULL); 192 + config.dev = pdev->dev.parent; 193 + config.init_data = pdata->isink[id]; 194 + config.driver_data = isink; 195 + 196 + isink->regulator = regulator_register(&isink->desc, &config); 195 197 if (IS_ERR(isink->regulator)) { 196 198 ret = PTR_ERR(isink->regulator); 197 199 dev_err(wm831x->dev, "Failed to register ISINK%d: %d\n",
+50 -112
drivers/regulator/wm831x-ldo.c
··· 46 46 * Shared 47 47 */ 48 48 49 - static int wm831x_ldo_is_enabled(struct regulator_dev *rdev) 50 - { 51 - struct wm831x_ldo *ldo = rdev_get_drvdata(rdev); 52 - struct wm831x *wm831x = ldo->wm831x; 53 - int mask = 1 << rdev_get_id(rdev); 54 - int reg; 55 - 56 - reg = wm831x_reg_read(wm831x, WM831X_LDO_ENABLE); 57 - if (reg < 0) 58 - return reg; 59 - 60 - if (reg & mask) 61 - return 1; 62 - else 63 - return 0; 64 - } 65 - 66 - static int wm831x_ldo_enable(struct regulator_dev *rdev) 67 - { 68 - struct wm831x_ldo *ldo = rdev_get_drvdata(rdev); 69 - struct wm831x *wm831x = ldo->wm831x; 70 - int mask = 1 << rdev_get_id(rdev); 71 - 72 - return wm831x_set_bits(wm831x, WM831X_LDO_ENABLE, mask, mask); 73 - } 74 - 75 - static int wm831x_ldo_disable(struct regulator_dev *rdev) 76 - { 77 - struct wm831x_ldo *ldo = rdev_get_drvdata(rdev); 78 - struct wm831x *wm831x = ldo->wm831x; 79 - int mask = 1 << rdev_get_id(rdev); 80 - 81 - return wm831x_set_bits(wm831x, WM831X_LDO_ENABLE, mask, 0); 82 - } 83 - 84 49 static irqreturn_t wm831x_ldo_uv_irq(int irq, void *data) 85 50 { 86 51 struct wm831x_ldo *ldo = data; ··· 70 105 /* 0.9-1.6V in 50mV steps */ 71 106 if (selector <= WM831X_GP_LDO_SELECTOR_LOW) 72 107 return 900000 + (selector * 50000); 73 - /* 1.7-3.3V in 50mV steps */ 108 + /* 1.7-3.3V in 100mV steps */ 74 109 if (selector <= WM831X_GP_LDO_MAX_SELECTOR) 75 110 return 1600000 + ((selector - WM831X_GP_LDO_SELECTOR_LOW) 76 111 * 100000); ··· 123 158 unsigned int selector; 124 159 125 160 return wm831x_gp_ldo_set_voltage_int(rdev, reg, uV, uV, &selector); 126 - } 127 - 128 - static int wm831x_gp_ldo_get_voltage_sel(struct regulator_dev *rdev) 129 - { 130 - struct wm831x_ldo *ldo = rdev_get_drvdata(rdev); 131 - struct wm831x *wm831x = ldo->wm831x; 132 - int reg = ldo->base + WM831X_LDO_ON_CONTROL; 133 - int ret; 134 - 135 - ret = wm831x_reg_read(wm831x, reg); 136 - if (ret < 0) 137 - return ret; 138 - 139 - ret &= WM831X_LDO1_ON_VSEL_MASK; 140 - 141 - return ret; 142 161 } 143 162 144 163 static unsigned int wm831x_gp_ldo_get_mode(struct regulator_dev *rdev) ··· 242 293 243 294 static struct regulator_ops wm831x_gp_ldo_ops = { 244 295 .list_voltage = wm831x_gp_ldo_list_voltage, 245 - .get_voltage_sel = wm831x_gp_ldo_get_voltage_sel, 296 + .get_voltage_sel = regulator_get_voltage_sel_regmap, 246 297 .set_voltage = wm831x_gp_ldo_set_voltage, 247 298 .set_suspend_voltage = wm831x_gp_ldo_set_suspend_voltage, 248 299 .get_mode = wm831x_gp_ldo_get_mode, ··· 250 301 .get_status = wm831x_gp_ldo_get_status, 251 302 .get_optimum_mode = wm831x_gp_ldo_get_optimum_mode, 252 303 253 - .is_enabled = wm831x_ldo_is_enabled, 254 - .enable = wm831x_ldo_enable, 255 - .disable = wm831x_ldo_disable, 304 + .is_enabled = regulator_is_enabled_regmap, 305 + .enable = regulator_enable_regmap, 306 + .disable = regulator_disable_regmap, 256 307 }; 257 308 258 309 static __devinit int wm831x_gp_ldo_probe(struct platform_device *pdev) 259 310 { 260 311 struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent); 261 312 struct wm831x_pdata *pdata = wm831x->dev->platform_data; 313 + struct regulator_config config = { }; 262 314 int id; 263 315 struct wm831x_ldo *ldo; 264 316 struct resource *res; ··· 272 322 id = pdev->id - id; 273 323 274 324 dev_dbg(&pdev->dev, "Probing LDO%d\n", id + 1); 275 - 276 - if (pdata == NULL || pdata->ldo[id] == NULL) 277 - return -ENODEV; 278 325 279 326 ldo = devm_kzalloc(&pdev->dev, sizeof(struct wm831x_ldo), GFP_KERNEL); 280 327 if (ldo == NULL) { ··· 296 349 ldo->desc.n_voltages = WM831X_GP_LDO_MAX_SELECTOR + 1; 297 350 ldo->desc.ops = &wm831x_gp_ldo_ops; 298 351 ldo->desc.owner = THIS_MODULE; 352 + ldo->desc.vsel_reg = ldo->base + WM831X_LDO_ON_CONTROL; 353 + ldo->desc.vsel_mask = WM831X_LDO1_ON_VSEL_MASK; 354 + ldo->desc.enable_reg = WM831X_LDO_ENABLE; 355 + ldo->desc.enable_mask = 1 << id; 299 356 300 - ldo->regulator = regulator_register(&ldo->desc, &pdev->dev, 301 - pdata->ldo[id], ldo, NULL); 357 + config.dev = pdev->dev.parent; 358 + if (pdata) 359 + config.init_data = pdata->ldo[id]; 360 + config.driver_data = ldo; 361 + config.regmap = wm831x->regmap; 362 + 363 + ldo->regulator = regulator_register(&ldo->desc, &config); 302 364 if (IS_ERR(ldo->regulator)) { 303 365 ret = PTR_ERR(ldo->regulator); 304 366 dev_err(wm831x->dev, "Failed to register LDO%d: %d\n", ··· 370 414 /* 1-1.6V in 50mV steps */ 371 415 if (selector <= WM831X_ALDO_SELECTOR_LOW) 372 416 return 1000000 + (selector * 50000); 373 - /* 1.7-3.5V in 50mV steps */ 417 + /* 1.7-3.5V in 100mV steps */ 374 418 if (selector <= WM831X_ALDO_MAX_SELECTOR) 375 419 return 1600000 + ((selector - WM831X_ALDO_SELECTOR_LOW) 376 420 * 100000); ··· 422 466 unsigned int selector; 423 467 424 468 return wm831x_aldo_set_voltage_int(rdev, reg, uV, uV, &selector); 425 - } 426 - 427 - static int wm831x_aldo_get_voltage_sel(struct regulator_dev *rdev) 428 - { 429 - struct wm831x_ldo *ldo = rdev_get_drvdata(rdev); 430 - struct wm831x *wm831x = ldo->wm831x; 431 - int reg = ldo->base + WM831X_LDO_ON_CONTROL; 432 - int ret; 433 - 434 - ret = wm831x_reg_read(wm831x, reg); 435 - if (ret < 0) 436 - return ret; 437 - 438 - ret &= WM831X_LDO7_ON_VSEL_MASK; 439 - 440 - return ret; 441 469 } 442 470 443 471 static unsigned int wm831x_aldo_get_mode(struct regulator_dev *rdev) ··· 499 559 500 560 static struct regulator_ops wm831x_aldo_ops = { 501 561 .list_voltage = wm831x_aldo_list_voltage, 502 - .get_voltage_sel = wm831x_aldo_get_voltage_sel, 562 + .get_voltage_sel = regulator_get_voltage_sel_regmap, 503 563 .set_voltage = wm831x_aldo_set_voltage, 504 564 .set_suspend_voltage = wm831x_aldo_set_suspend_voltage, 505 565 .get_mode = wm831x_aldo_get_mode, 506 566 .set_mode = wm831x_aldo_set_mode, 507 567 .get_status = wm831x_aldo_get_status, 508 568 509 - .is_enabled = wm831x_ldo_is_enabled, 510 - .enable = wm831x_ldo_enable, 511 - .disable = wm831x_ldo_disable, 569 + .is_enabled = regulator_is_enabled_regmap, 570 + .enable = regulator_enable_regmap, 571 + .disable = regulator_disable_regmap, 512 572 }; 513 573 514 574 static __devinit int wm831x_aldo_probe(struct platform_device *pdev) 515 575 { 516 576 struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent); 517 577 struct wm831x_pdata *pdata = wm831x->dev->platform_data; 578 + struct regulator_config config = { }; 518 579 int id; 519 580 struct wm831x_ldo *ldo; 520 581 struct resource *res; ··· 528 587 id = pdev->id - id; 529 588 530 589 dev_dbg(&pdev->dev, "Probing LDO%d\n", id + 1); 531 - 532 - if (pdata == NULL || pdata->ldo[id] == NULL) 533 - return -ENODEV; 534 590 535 591 ldo = devm_kzalloc(&pdev->dev, sizeof(struct wm831x_ldo), GFP_KERNEL); 536 592 if (ldo == NULL) { ··· 552 614 ldo->desc.n_voltages = WM831X_ALDO_MAX_SELECTOR + 1; 553 615 ldo->desc.ops = &wm831x_aldo_ops; 554 616 ldo->desc.owner = THIS_MODULE; 617 + ldo->desc.vsel_reg = ldo->base + WM831X_LDO_ON_CONTROL; 618 + ldo->desc.vsel_mask = WM831X_LDO7_ON_VSEL_MASK; 619 + ldo->desc.enable_reg = WM831X_LDO_ENABLE; 620 + ldo->desc.enable_mask = 1 << id; 555 621 556 - ldo->regulator = regulator_register(&ldo->desc, &pdev->dev, 557 - pdata->ldo[id], ldo, NULL); 622 + config.dev = pdev->dev.parent; 623 + if (pdata) 624 + config.init_data = pdata->ldo[id]; 625 + config.driver_data = ldo; 626 + config.regmap = wm831x->regmap; 627 + 628 + ldo->regulator = regulator_register(&ldo->desc, &config); 558 629 if (IS_ERR(ldo->regulator)) { 559 630 ret = PTR_ERR(ldo->regulator); 560 631 dev_err(wm831x->dev, "Failed to register LDO%d: %d\n", ··· 667 720 return wm831x_alive_ldo_set_voltage_int(rdev, reg, uV, uV, &selector); 668 721 } 669 722 670 - static int wm831x_alive_ldo_get_voltage_sel(struct regulator_dev *rdev) 671 - { 672 - struct wm831x_ldo *ldo = rdev_get_drvdata(rdev); 673 - struct wm831x *wm831x = ldo->wm831x; 674 - int reg = ldo->base + WM831X_ALIVE_LDO_ON_CONTROL; 675 - int ret; 676 - 677 - ret = wm831x_reg_read(wm831x, reg); 678 - if (ret < 0) 679 - return ret; 680 - 681 - ret &= WM831X_LDO11_ON_VSEL_MASK; 682 - 683 - return ret; 684 - } 685 - 686 723 static int wm831x_alive_ldo_get_status(struct regulator_dev *rdev) 687 724 { 688 725 struct wm831x_ldo *ldo = rdev_get_drvdata(rdev); ··· 686 755 687 756 static struct regulator_ops wm831x_alive_ldo_ops = { 688 757 .list_voltage = wm831x_alive_ldo_list_voltage, 689 - .get_voltage_sel = wm831x_alive_ldo_get_voltage_sel, 758 + .get_voltage_sel = regulator_get_voltage_sel_regmap, 690 759 .set_voltage = wm831x_alive_ldo_set_voltage, 691 760 .set_suspend_voltage = wm831x_alive_ldo_set_suspend_voltage, 692 761 .get_status = wm831x_alive_ldo_get_status, 693 762 694 - .is_enabled = wm831x_ldo_is_enabled, 695 - .enable = wm831x_ldo_enable, 696 - .disable = wm831x_ldo_disable, 763 + .is_enabled = regulator_is_enabled_regmap, 764 + .enable = regulator_enable_regmap, 765 + .disable = regulator_disable_regmap, 697 766 }; 698 767 699 768 static __devinit int wm831x_alive_ldo_probe(struct platform_device *pdev) 700 769 { 701 770 struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent); 702 771 struct wm831x_pdata *pdata = wm831x->dev->platform_data; 772 + struct regulator_config config = { }; 703 773 int id; 704 774 struct wm831x_ldo *ldo; 705 775 struct resource *res; ··· 714 782 715 783 716 784 dev_dbg(&pdev->dev, "Probing LDO%d\n", id + 1); 717 - 718 - if (pdata == NULL || pdata->ldo[id] == NULL) 719 - return -ENODEV; 720 785 721 786 ldo = devm_kzalloc(&pdev->dev, sizeof(struct wm831x_ldo), GFP_KERNEL); 722 787 if (ldo == NULL) { ··· 738 809 ldo->desc.n_voltages = WM831X_ALIVE_LDO_MAX_SELECTOR + 1; 739 810 ldo->desc.ops = &wm831x_alive_ldo_ops; 740 811 ldo->desc.owner = THIS_MODULE; 812 + ldo->desc.vsel_reg = ldo->base + WM831X_ALIVE_LDO_ON_CONTROL; 813 + ldo->desc.vsel_mask = WM831X_LDO11_ON_VSEL_MASK; 814 + ldo->desc.enable_reg = WM831X_LDO_ENABLE; 815 + ldo->desc.enable_mask = 1 << id; 741 816 742 - ldo->regulator = regulator_register(&ldo->desc, &pdev->dev, 743 - pdata->ldo[id], ldo, NULL); 817 + config.dev = pdev->dev.parent; 818 + if (pdata) 819 + config.init_data = pdata->ldo[id]; 820 + config.driver_data = ldo; 821 + config.regmap = wm831x->regmap; 822 + 823 + ldo->regulator = regulator_register(&ldo->desc, &config); 744 824 if (IS_ERR(ldo->regulator)) { 745 825 ret = PTR_ERR(ldo->regulator); 746 826 dev_err(wm831x->dev, "Failed to register LDO%d: %d\n",
+7 -4
drivers/regulator/wm8350-regulator.c
··· 1269 1269 .enable_time = wm8350_isink_enable_time, 1270 1270 }; 1271 1271 1272 - static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { 1272 + static const struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { 1273 1273 { 1274 1274 .name = "DCDC1", 1275 1275 .id = WM8350_DCDC_1, ··· 1398 1398 static int wm8350_regulator_probe(struct platform_device *pdev) 1399 1399 { 1400 1400 struct wm8350 *wm8350 = dev_get_drvdata(&pdev->dev); 1401 + struct regulator_config config = { }; 1401 1402 struct regulator_dev *rdev; 1402 1403 int ret; 1403 1404 u16 val; ··· 1426 1425 break; 1427 1426 } 1428 1427 1428 + config.dev = &pdev->dev; 1429 + config.init_data = pdev->dev.platform_data; 1430 + config.driver_data = dev_get_drvdata(&pdev->dev); 1431 + 1429 1432 /* register regulator */ 1430 - rdev = regulator_register(&wm8350_reg[pdev->id], &pdev->dev, 1431 - pdev->dev.platform_data, 1432 - dev_get_drvdata(&pdev->dev), NULL); 1433 + rdev = regulator_register(&wm8350_reg[pdev->id], &config); 1433 1434 if (IS_ERR(rdev)) { 1434 1435 dev_err(&pdev->dev, "failed to register %s\n", 1435 1436 wm8350_reg[pdev->id].name);
+5 -2
drivers/regulator/wm8400-regulator.c
··· 323 323 static int __devinit wm8400_regulator_probe(struct platform_device *pdev) 324 324 { 325 325 struct wm8400 *wm8400 = container_of(pdev, struct wm8400, regulators[pdev->id]); 326 + struct regulator_config config = { }; 326 327 struct regulator_dev *rdev; 327 328 328 - rdev = regulator_register(&regulators[pdev->id], &pdev->dev, 329 - pdev->dev.platform_data, wm8400, NULL); 329 + config.dev = &pdev->dev; 330 + config.init_data = pdev->dev.platform_data; 331 + config.driver_data = wm8400; 330 332 333 + rdev = regulator_register(&regulators[pdev->id], &config); 331 334 if (IS_ERR(rdev)) 332 335 return PTR_ERR(rdev); 333 336
+16 -82
drivers/regulator/wm8994-regulator.c
··· 86 86 return (selector * 100000) + 2400000; 87 87 } 88 88 89 - static int wm8994_ldo1_get_voltage_sel(struct regulator_dev *rdev) 90 - { 91 - struct wm8994_ldo *ldo = rdev_get_drvdata(rdev); 92 - int val; 93 - 94 - val = wm8994_reg_read(ldo->wm8994, WM8994_LDO_1); 95 - if (val < 0) 96 - return val; 97 - 98 - return (val & WM8994_LDO1_VSEL_MASK) >> WM8994_LDO1_VSEL_SHIFT; 99 - } 100 - 101 - static int wm8994_ldo1_set_voltage(struct regulator_dev *rdev, 102 - int min_uV, int max_uV, unsigned *s) 103 - { 104 - struct wm8994_ldo *ldo = rdev_get_drvdata(rdev); 105 - int selector, v; 106 - 107 - selector = (min_uV - 2400000) / 100000; 108 - v = wm8994_ldo1_list_voltage(rdev, selector); 109 - if (v < 0 || v > max_uV) 110 - return -EINVAL; 111 - 112 - *s = selector; 113 - selector <<= WM8994_LDO1_VSEL_SHIFT; 114 - 115 - return wm8994_set_bits(ldo->wm8994, WM8994_LDO_1, 116 - WM8994_LDO1_VSEL_MASK, selector); 117 - } 118 - 119 89 static struct regulator_ops wm8994_ldo1_ops = { 120 90 .enable = wm8994_ldo_enable, 121 91 .disable = wm8994_ldo_disable, ··· 93 123 .enable_time = wm8994_ldo_enable_time, 94 124 95 125 .list_voltage = wm8994_ldo1_list_voltage, 96 - .get_voltage_sel = wm8994_ldo1_get_voltage_sel, 97 - .set_voltage = wm8994_ldo1_set_voltage, 126 + .get_voltage_sel = regulator_get_voltage_sel_regmap, 127 + .set_voltage_sel = regulator_set_voltage_sel_regmap, 98 128 }; 99 129 100 130 static int wm8994_ldo2_list_voltage(struct regulator_dev *rdev, ··· 123 153 } 124 154 } 125 155 126 - static int wm8994_ldo2_get_voltage_sel(struct regulator_dev *rdev) 127 - { 128 - struct wm8994_ldo *ldo = rdev_get_drvdata(rdev); 129 - int val; 130 - 131 - val = wm8994_reg_read(ldo->wm8994, WM8994_LDO_2); 132 - if (val < 0) 133 - return val; 134 - 135 - return (val & WM8994_LDO2_VSEL_MASK) >> WM8994_LDO2_VSEL_SHIFT; 136 - } 137 - 138 - static int wm8994_ldo2_set_voltage(struct regulator_dev *rdev, 139 - int min_uV, int max_uV, unsigned *s) 140 - { 141 - struct wm8994_ldo *ldo = rdev_get_drvdata(rdev); 142 - int selector, v; 143 - 144 - switch (ldo->wm8994->type) { 145 - case WM8994: 146 - selector = (min_uV - 900000) / 100000; 147 - break; 148 - case WM8958: 149 - selector = (min_uV - 1000000) / 100000; 150 - break; 151 - case WM1811: 152 - selector = (min_uV - 950000) / 100000; 153 - if (selector == 0) 154 - selector = 1; 155 - break; 156 - default: 157 - return -EINVAL; 158 - } 159 - 160 - v = wm8994_ldo2_list_voltage(rdev, selector); 161 - if (v < 0 || v > max_uV) 162 - return -EINVAL; 163 - 164 - *s = selector; 165 - selector <<= WM8994_LDO2_VSEL_SHIFT; 166 - 167 - return wm8994_set_bits(ldo->wm8994, WM8994_LDO_2, 168 - WM8994_LDO2_VSEL_MASK, selector); 169 - } 170 - 171 156 static struct regulator_ops wm8994_ldo2_ops = { 172 157 .enable = wm8994_ldo_enable, 173 158 .disable = wm8994_ldo_disable, ··· 130 205 .enable_time = wm8994_ldo_enable_time, 131 206 132 207 .list_voltage = wm8994_ldo2_list_voltage, 133 - .get_voltage_sel = wm8994_ldo2_get_voltage_sel, 134 - .set_voltage = wm8994_ldo2_set_voltage, 208 + .get_voltage_sel = regulator_get_voltage_sel_regmap, 209 + .set_voltage_sel = regulator_set_voltage_sel_regmap, 135 210 }; 136 211 137 - static struct regulator_desc wm8994_ldo_desc[] = { 212 + static const struct regulator_desc wm8994_ldo_desc[] = { 138 213 { 139 214 .name = "LDO1", 140 215 .id = 1, 141 216 .type = REGULATOR_VOLTAGE, 142 217 .n_voltages = WM8994_LDO1_MAX_SELECTOR + 1, 218 + .vsel_reg = WM8994_LDO_1, 219 + .vsel_mask = WM8994_LDO1_VSEL_MASK, 143 220 .ops = &wm8994_ldo1_ops, 144 221 .owner = THIS_MODULE, 145 222 }, ··· 150 223 .id = 2, 151 224 .type = REGULATOR_VOLTAGE, 152 225 .n_voltages = WM8994_LDO2_MAX_SELECTOR + 1, 226 + .vsel_reg = WM8994_LDO_2, 227 + .vsel_mask = WM8994_LDO2_VSEL_MASK, 153 228 .ops = &wm8994_ldo2_ops, 154 229 .owner = THIS_MODULE, 155 230 }, ··· 162 233 struct wm8994 *wm8994 = dev_get_drvdata(pdev->dev.parent); 163 234 struct wm8994_pdata *pdata = wm8994->dev->platform_data; 164 235 int id = pdev->id % ARRAY_SIZE(pdata->ldo); 236 + struct regulator_config config = { }; 165 237 struct wm8994_ldo *ldo; 166 238 int ret; 167 239 ··· 198 268 } else 199 269 ldo->is_enabled = true; 200 270 201 - ldo->regulator = regulator_register(&wm8994_ldo_desc[id], &pdev->dev, 202 - pdata->ldo[id].init_data, ldo, NULL); 271 + config.dev = &pdev->dev; 272 + config.init_data = pdata->ldo[id].init_data; 273 + config.driver_data = ldo; 274 + config.regmap = wm8994->regmap; 275 + 276 + ldo->regulator = regulator_register(&wm8994_ldo_desc[id], &config); 203 277 if (IS_ERR(ldo->regulator)) { 204 278 ret = PTR_ERR(ldo->regulator); 205 279 dev_err(wm8994->dev, "Failed to register LDO%d: %d\n",
+29
include/linux/mfd/rc5t583.h
··· 250 250 RC5T583_EXT_PWRREQ2_CONTROL = 0x2, 251 251 }; 252 252 253 + enum { 254 + RC5T583_REGULATOR_DC0, 255 + RC5T583_REGULATOR_DC1, 256 + RC5T583_REGULATOR_DC2, 257 + RC5T583_REGULATOR_DC3, 258 + RC5T583_REGULATOR_LDO0, 259 + RC5T583_REGULATOR_LDO1, 260 + RC5T583_REGULATOR_LDO2, 261 + RC5T583_REGULATOR_LDO3, 262 + RC5T583_REGULATOR_LDO4, 263 + RC5T583_REGULATOR_LDO5, 264 + RC5T583_REGULATOR_LDO6, 265 + RC5T583_REGULATOR_LDO7, 266 + RC5T583_REGULATOR_LDO8, 267 + RC5T583_REGULATOR_LDO9, 268 + 269 + /* Should be last entry */ 270 + RC5T583_REGULATOR_MAX, 271 + }; 272 + 253 273 struct rc5t583 { 254 274 struct device *dev; 255 275 struct regmap *regmap; ··· 293 273 * The board specific data is provided through this structure. 294 274 * @irq_base: Irq base number on which this device registers their interrupts. 295 275 * @enable_shutdown: Enable shutdown through the input pin "shutdown". 276 + * @regulator_deepsleep_slot: The slot number on which device goes to sleep 277 + * in device sleep mode. 278 + * @regulator_ext_pwr_control: External power request regulator control. The 279 + * regulator output enable/disable is controlled by the external 280 + * power request input state. 281 + * @reg_init_data: Regulator init data. 296 282 */ 297 283 298 284 struct rc5t583_platform_data { 299 285 int irq_base; 300 286 bool enable_shutdown; 287 + int regulator_deepsleep_slot[RC5T583_REGULATOR_MAX]; 288 + unsigned long regulator_ext_pwr_control[RC5T583_REGULATOR_MAX]; 289 + struct regulator_init_data *reg_init_data[RC5T583_REGULATOR_MAX]; 301 290 }; 302 291 303 292 static inline int rc5t583_write(struct device *dev, uint8_t reg, uint8_t val)
+1
include/linux/mfd/s5m87xx/s5m-core.h
··· 335 335 336 336 struct s5m_platform_data { 337 337 struct s5m_regulator_data *regulators; 338 + struct s5m_opmode_data *opmode; 338 339 int device_type; 339 340 int num_regulators; 340 341
+29
include/linux/mfd/s5m87xx/s5m-pmic.h
··· 58 58 S5M8767_REG_MAX, 59 59 }; 60 60 61 + #define S5M8767_ENCTRL_SHIFT 6 62 + 61 63 /* S5M8763 regulator ids */ 62 64 enum s5m8763_regulators { 63 65 S5M8763_LDO1, ··· 97 95 struct s5m_regulator_data { 98 96 int id; 99 97 struct regulator_init_data *initdata; 98 + }; 99 + 100 + /* 101 + * s5m_opmode_data - regulator operation mode data 102 + * @id: regulator id 103 + * @mode: regulator operation mode 104 + */ 105 + struct s5m_opmode_data { 106 + int id; 107 + int mode; 108 + }; 109 + 110 + /* 111 + * s5m regulator operation mode 112 + * S5M_OPMODE_OFF Regulator always OFF 113 + * S5M_OPMODE_ON Regulator always ON 114 + * S5M_OPMODE_LOWPOWER Regulator is on in low-power mode 115 + * S5M_OPMODE_SUSPEND Regulator is changed by PWREN pin 116 + * If PWREN is high, regulator is on 117 + * If PWREN is low, regulator is off 118 + */ 119 + 120 + enum s5m_opmode { 121 + S5M_OPMODE_OFF, 122 + S5M_OPMODE_ON, 123 + S5M_OPMODE_LOWPOWER, 124 + S5M_OPMODE_SUSPEND, 100 125 }; 101 126 102 127 #endif /* __LINUX_MFD_S5M_PMIC_H */
+13
include/linux/mfd/tps65090.h
··· 22 22 #ifndef __LINUX_MFD_TPS65090_H 23 23 #define __LINUX_MFD_TPS65090_H 24 24 25 + #include <linux/irq.h> 26 + 27 + struct tps65090 { 28 + struct mutex lock; 29 + struct device *dev; 30 + struct i2c_client *client; 31 + struct regmap *rmap; 32 + struct irq_chip irq_chip; 33 + struct mutex irq_lock; 34 + int irq_base; 35 + unsigned int id; 36 + }; 37 + 25 38 struct tps65090_subdev_info { 26 39 int id; 27 40 const char *name;
+49 -7
include/linux/regulator/driver.h
··· 19 19 #include <linux/notifier.h> 20 20 #include <linux/regulator/consumer.h> 21 21 22 + struct regmap; 22 23 struct regulator_dev; 23 24 struct regulator_init_data; 24 25 ··· 149 148 }; 150 149 151 150 /** 152 - * struct regulator_desc - Regulator descriptor 151 + * struct regulator_desc - Static regulator descriptor 153 152 * 154 - * Each regulator registered with the core is described with a structure of 155 - * this type. 153 + * Each regulator registered with the core is described with a 154 + * structure of this type and a struct regulator_config. This 155 + * structure contains the non-varying parts of the regulator 156 + * description. 156 157 * 157 158 * @name: Identifying name for the regulator. 158 159 * @supply_name: Identifying the regulator supply ··· 164 161 * @irq: Interrupt number for the regulator. 165 162 * @type: Indicates if the regulator is a voltage or current regulator. 166 163 * @owner: Module providing the regulator, used for refcounting. 164 + 165 + * @vsel_reg: Register for selector when using regulator_regmap_X_voltage_ 166 + * @vsel_mask: Mask for register bitfield used for selector 167 + * @enable_reg: Register for control when using regmap enable/disable ops 168 + * @enable_mask: Mask for control when using regmap enable/disable ops 167 169 */ 168 170 struct regulator_desc { 169 171 const char *name; ··· 179 171 int irq; 180 172 enum regulator_type type; 181 173 struct module *owner; 174 + 175 + unsigned int vsel_reg; 176 + unsigned int vsel_mask; 177 + unsigned int enable_reg; 178 + unsigned int enable_mask; 179 + }; 180 + 181 + /** 182 + * struct regulator_config - Dynamic regulator descriptor 183 + * 184 + * Each regulator registered with the core is described with a 185 + * structure of this type and a struct regulator_desc. This structure 186 + * contains the runtime variable parts of the regulator description. 187 + * 188 + * @dev: struct device for the regulator 189 + * @init_data: platform provided init data, passed through by driver 190 + * @driver_data: private regulator data 191 + * @of_node: OpenFirmware node to parse for device tree bindings (may be 192 + * NULL). 193 + * @regmap: regmap to use for core regmap helpers 194 + */ 195 + struct regulator_config { 196 + struct device *dev; 197 + const struct regulator_init_data *init_data; 198 + void *driver_data; 199 + struct device_node *of_node; 200 + struct regmap *regmap; 182 201 }; 183 202 184 203 /* ··· 219 184 * no other direct access). 220 185 */ 221 186 struct regulator_dev { 222 - struct regulator_desc *desc; 187 + const struct regulator_desc *desc; 223 188 int exclusive; 224 189 u32 use_count; 225 190 u32 open_count; ··· 236 201 struct device dev; 237 202 struct regulation_constraints *constraints; 238 203 struct regulator *supply; /* for tree */ 204 + struct regmap *regmap; 239 205 240 206 struct delayed_work disable_work; 241 207 int deferred_disables; ··· 246 210 struct dentry *debugfs; 247 211 }; 248 212 249 - struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc, 250 - struct device *dev, const struct regulator_init_data *init_data, 251 - void *driver_data, struct device_node *of_node); 213 + struct regulator_dev * 214 + regulator_register(const struct regulator_desc *regulator_desc, 215 + const struct regulator_config *config); 252 216 void regulator_unregister(struct regulator_dev *rdev); 253 217 254 218 int regulator_notifier_call_chain(struct regulator_dev *rdev, ··· 259 223 int rdev_get_id(struct regulator_dev *rdev); 260 224 261 225 int regulator_mode_to_status(unsigned int); 226 + 227 + int regulator_get_voltage_sel_regmap(struct regulator_dev *rdev); 228 + int regulator_set_voltage_sel_regmap(struct regulator_dev *rdev, unsigned sel); 229 + int regulator_is_enabled_regmap(struct regulator_dev *rdev); 230 + int regulator_enable_regmap(struct regulator_dev *rdev); 231 + int regulator_disable_regmap(struct regulator_dev *rdev); 262 232 263 233 void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data); 264 234
+7
include/linux/regulator/fixed.h
··· 26 26 * @gpio: GPIO to use for enable control 27 27 * set to -EINVAL if not used 28 28 * @startup_delay: Start-up time in microseconds 29 + * @gpio_is_open_drain: Gpio pin is open drain or normal type. 30 + * If it is open drain type then HIGH will be set 31 + * through PULL-UP with setting gpio as input 32 + * and low will be set as gpio-output with driven 33 + * to low. For non-open-drain case, the gpio will 34 + * will be in output and drive to low/high accordingly. 29 35 * @enable_high: Polarity of enable GPIO 30 36 * 1 = Active high, 0 = Active low 31 37 * @enabled_at_boot: Whether regulator has been enabled at ··· 49 43 int microvolts; 50 44 int gpio; 51 45 unsigned startup_delay; 46 + unsigned gpio_is_open_drain:1; 52 47 unsigned enable_high:1; 53 48 unsigned enabled_at_boot:1; 54 49 struct regulator_init_data *init_data;
+50
include/linux/regulator/tps65090-regulator.h
··· 1 + /* 2 + * Regulator driver interface for TI TPS65090 PMIC family 3 + * 4 + * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved. 5 + 6 + * This program is free software; you can redistribute it and/or modify it 7 + * under the terms and conditions of the GNU General Public License, 8 + * version 2, as published by the Free Software Foundation. 9 + 10 + * This program is distributed in the hope it will be useful, but WITHOUT 11 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 + * more details. 14 + 15 + * You should have received a copy of the GNU General Public License 16 + * along with this program. If not, see <http://www.gnu.org/licenses/>. 17 + */ 18 + 19 + #ifndef __REGULATOR_TPS65090_H 20 + #define __REGULATOR_TPS65090_H 21 + 22 + #include <linux/regulator/machine.h> 23 + 24 + #define tps65090_rails(_name) "tps65090_"#_name 25 + 26 + enum { 27 + TPS65090_ID_DCDC1, 28 + TPS65090_ID_DCDC2, 29 + TPS65090_ID_DCDC3, 30 + TPS65090_ID_FET1, 31 + TPS65090_ID_FET2, 32 + TPS65090_ID_FET3, 33 + TPS65090_ID_FET4, 34 + TPS65090_ID_FET5, 35 + TPS65090_ID_FET6, 36 + TPS65090_ID_FET7, 37 + }; 38 + 39 + /* 40 + * struct tps65090_regulator_platform_data 41 + * 42 + * @regulator: The regulator init data. 43 + * @slew_rate_uV_per_us: Slew rate microvolt per microsec. 44 + */ 45 + 46 + struct tps65090_regulator_platform_data { 47 + struct regulator_init_data regulator; 48 + }; 49 + 50 + #endif /* __REGULATOR_TPS65090_H */
+6 -2
sound/soc/codecs/sgtl5000.c
··· 809 809 { 810 810 struct ldo_regulator *ldo; 811 811 struct sgtl5000_priv *sgtl5000 = snd_soc_codec_get_drvdata(codec); 812 + struct regulator_config config = { }; 812 813 813 814 ldo = kzalloc(sizeof(struct ldo_regulator), GFP_KERNEL); 814 815 ··· 833 832 ldo->codec_data = codec; 834 833 ldo->voltage = voltage; 835 834 836 - ldo->dev = regulator_register(&ldo->desc, codec->dev, 837 - init_data, ldo, NULL); 835 + config.dev = codec->dev; 836 + config.driver_data = ldo; 837 + config.init_data = init_data; 838 + 839 + ldo->dev = regulator_register(&ldo->desc, &config); 838 840 if (IS_ERR(ldo->dev)) { 839 841 int ret = PTR_ERR(ldo->dev); 840 842