• Home
  • Raw
  • Download

Lines Matching +full:primary +full:- +full:pmic

2  * Motorola CPCAP PMIC regulator driver
4 * Based on cpcap-regulator.c from Motorola Linux kernel tree
5 * Copyright (C) 2009-2011 Motorola, Inc.
28 #include <linux/mfd/motorola-cpcap.h>
35 /* CPCAP_REG_ASSIGN2 bits - Resource Assignment 2 */
46 /* CPCAP_REG_ASSIGN3 bits - Resource Assignment 3 */
64 /* CPCAP_REG_ASSIGN4 bits - Resource Assignment 4 */
88 * primary when the regulator is turned on.
96 * The assign_reg and assign_mask seem to allow toggling between primary
178 if (rdev->desc->enable_val & CPCAP_REG_OFF_MODE_SEC) { in cpcap_regulator_enable()
179 error = regmap_update_bits(rdev->regmap, regulator->assign_reg, in cpcap_regulator_enable()
180 regulator->assign_mask, in cpcap_regulator_enable()
181 regulator->assign_mask); in cpcap_regulator_enable()
198 if (rdev->desc->enable_val & CPCAP_REG_OFF_MODE_SEC) { in cpcap_regulator_disable()
199 error = regmap_update_bits(rdev->regmap, regulator->assign_reg, in cpcap_regulator_disable()
200 regulator->assign_mask, 0); in cpcap_regulator_disable()
206 if (error && (rdev->desc->enable_val & CPCAP_REG_OFF_MODE_SEC)) { in cpcap_regulator_disable()
207 regmap_update_bits(rdev->regmap, regulator->assign_reg, in cpcap_regulator_disable()
208 regulator->assign_mask, in cpcap_regulator_disable()
209 regulator->assign_mask); in cpcap_regulator_disable()
231 regmap_read(rdev->regmap, rdev->desc->enable_reg, &value); in cpcap_regulator_get_mode()
252 return -EINVAL; in cpcap_regulator_set_mode()
255 return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg, in cpcap_regulator_set_mode()
491 .compatible = "motorola,cpcap-regulator",
494 .compatible = "motorola,mapphone-cpcap-regulator",
498 .compatible = "motorola,xoom-cpcap-regulator",
512 match_data = of_device_get_match_data(&pdev->dev); in cpcap_regulator_probe()
514 dev_err(&pdev->dev, "no configuration data found\n"); in cpcap_regulator_probe()
516 return -ENODEV; in cpcap_regulator_probe()
519 ddata = devm_kzalloc(&pdev->dev, sizeof(*ddata), GFP_KERNEL); in cpcap_regulator_probe()
521 return -ENOMEM; in cpcap_regulator_probe()
523 ddata->reg = dev_get_regmap(pdev->dev.parent, NULL); in cpcap_regulator_probe()
524 if (!ddata->reg) in cpcap_regulator_probe()
525 return -ENODEV; in cpcap_regulator_probe()
527 ddata->dev = &pdev->dev; in cpcap_regulator_probe()
528 ddata->soc = match_data; in cpcap_regulator_probe()
532 config.dev = &pdev->dev; in cpcap_regulator_probe()
533 config.regmap = ddata->reg; in cpcap_regulator_probe()
536 const struct cpcap_regulator *regulator = &ddata->soc[i]; in cpcap_regulator_probe()
539 if (!regulator->rdesc.name) in cpcap_regulator_probe()
542 if (regulator->rdesc.volt_table == unknown_val_tbl) in cpcap_regulator_probe()
546 rdev = devm_regulator_register(&pdev->dev, in cpcap_regulator_probe()
547 &regulator->rdesc, in cpcap_regulator_probe()
550 dev_err(&pdev->dev, "failed to register regulator %s\n", in cpcap_regulator_probe()
551 regulator->rdesc.name); in cpcap_regulator_probe()
563 .name = "cpcap-regulator",
570 MODULE_ALIAS("platform:cpcap-regulator");