• Home
  • Raw
  • Download

Lines Matching +full:suspend +full:- +full:mode

34 	REG_FIELD(_reg, __builtin_ffs((int)_mask) - 1, \
35 sizeof(unsigned int) * 8 - __builtin_clz((_mask)) - 1)
46 struct reg_field mode; /* buck mode of operation */ member
47 struct reg_field suspend; member
64 .desc.n_voltages = (((max_mV) - (min_mV))/(step_mV) + 1 \
82 .desc.n_voltages = ((max_mV) - (min_mV))/(step_mV) + 1, \
95 .mode = BFIELD(DA9063_REG_##regl_name##_CFG, DA9063_BUCK_MODE_MASK)
111 struct regmap_field *mode; member
112 struct regmap_field *suspend; member
167 const struct da9063_regulator_info *rinfo = regl->info; in da9063_set_current_limit()
170 for (n = 0; n < rinfo->n_current_limits; n++) { in da9063_set_current_limit()
171 tval = rinfo->current_limits[n]; in da9063_set_current_limit()
173 return regmap_field_write(regl->ilimit, n); in da9063_set_current_limit()
176 return -EINVAL; in da9063_set_current_limit()
182 const struct da9063_regulator_info *rinfo = regl->info; in da9063_get_current_limit()
186 ret = regmap_field_read(regl->ilimit, &sel); in da9063_get_current_limit()
190 if (sel >= rinfo->n_current_limits) in da9063_get_current_limit()
191 sel = rinfo->n_current_limits - 1; in da9063_get_current_limit()
193 return rinfo->current_limits[sel]; in da9063_get_current_limit()
196 static int da9063_buck_set_mode(struct regulator_dev *rdev, unsigned mode) in da9063_buck_set_mode() argument
201 switch (mode) { in da9063_buck_set_mode()
212 return -EINVAL; in da9063_buck_set_mode()
215 return regmap_field_write(regl->mode, val); in da9063_buck_set_mode()
219 * Bucks use single mode register field for normal operation
220 * and suspend state.
228 unsigned int val, mode = 0; in da9063_buck_get_mode() local
231 ret = regmap_field_read(regl->mode, &val); in da9063_buck_get_mode()
238 mode = REGULATOR_MODE_FAST | REGULATOR_MODE_STANDBY; in da9063_buck_get_mode()
239 /* Sleep flag bit decides the mode */ in da9063_buck_get_mode()
250 ret = regmap_field_read(regl->suspend, &val); in da9063_buck_get_mode()
254 /* Read regulator mode from proper register, depending on state */ in da9063_buck_get_mode()
256 field = regl->suspend_sleep; in da9063_buck_get_mode()
258 field = regl->sleep; in da9063_buck_get_mode()
265 mode &= REGULATOR_MODE_STANDBY; in da9063_buck_get_mode()
267 mode &= REGULATOR_MODE_NORMAL | REGULATOR_MODE_FAST; in da9063_buck_get_mode()
269 return mode; in da9063_buck_get_mode()
273 * LDOs use sleep flags - one for normal and one for suspend state.
277 static int da9063_ldo_set_mode(struct regulator_dev *rdev, unsigned mode) in da9063_ldo_set_mode() argument
282 switch (mode) { in da9063_ldo_set_mode()
290 return -EINVAL; in da9063_ldo_set_mode()
293 return regmap_field_write(regl->sleep, val); in da9063_ldo_set_mode()
303 ret = regmap_field_read(regl->suspend, &val); in da9063_ldo_get_mode()
307 /* Read regulator mode from proper register, depending on state */ in da9063_ldo_get_mode()
309 field = regl->suspend_sleep; in da9063_ldo_get_mode()
311 field = regl->sleep; in da9063_ldo_get_mode()
334 ret = -EIO; in da9063_buck_get_status()
351 ret = -EIO; in da9063_ldo_get_status()
360 const struct da9063_regulator_info *rinfo = regl->info; in da9063_set_suspend_voltage()
367 sel <<= ffs(rdev->desc->vsel_mask) - 1; in da9063_set_suspend_voltage()
369 ret = regmap_update_bits(regl->hw->regmap, rinfo->suspend_vsel_reg, in da9063_set_suspend_voltage()
370 rdev->desc->vsel_mask, sel); in da9063_set_suspend_voltage()
379 return regmap_field_write(regl->suspend, 1); in da9063_suspend_enable()
386 return regmap_field_write(regl->suspend, 0); in da9063_suspend_disable()
389 static int da9063_buck_set_suspend_mode(struct regulator_dev *rdev, unsigned mode) in da9063_buck_set_suspend_mode() argument
394 switch (mode) { in da9063_buck_set_suspend_mode()
405 return -EINVAL; in da9063_buck_set_suspend_mode()
408 return regmap_field_write(regl->mode, val); in da9063_buck_set_suspend_mode()
411 static int da9063_ldo_set_suspend_mode(struct regulator_dev *rdev, unsigned mode) in da9063_ldo_set_suspend_mode() argument
416 switch (mode) { in da9063_ldo_set_suspend_mode()
424 return -EINVAL; in da9063_ldo_set_suspend_mode()
427 return regmap_field_write(regl->suspend_sleep, val); in da9063_ldo_set_suspend_mode()
470 .suspend = BFIELD(DA9063_REG_DVC_1, DA9063_VBCORE1_SEL),
478 .suspend = BFIELD(DA9063_REG_DVC_1, DA9063_VBCORE2_SEL),
486 .suspend = BFIELD(DA9063_REG_DVC_1, DA9063_VBPRO_SEL),
494 .suspend = BFIELD(DA9063_REG_DVC_1, DA9063_VBMEM_SEL),
502 .suspend = BFIELD(DA9063_REG_DVC_2, DA9063_VBIO_SEL),
510 .suspend = BFIELD(DA9063_REG_DVC_1, DA9063_VBPERI_SEL),
519 .suspend = BFIELD(DA9063_REG_DVC_1, DA9063_VBCORE1_SEL),
528 .suspend = BFIELD(DA9063_REG_DVC_1, DA9063_VBMEM_SEL),
534 .suspend = BFIELD(DA9063_REG_DVC_1, DA9063_VLDO3_SEL),
539 .suspend = BFIELD(DA9063_REG_LDO7_CONT, DA9063_VLDO7_SEL),
544 .suspend = BFIELD(DA9063_REG_LDO8_CONT, DA9063_VLDO8_SEL),
549 .suspend = BFIELD(DA9063_REG_LDO9_CONT, DA9063_VLDO9_SEL),
553 .suspend = BFIELD(DA9063_REG_LDO11_CONT, DA9063_VLDO11_SEL),
560 .suspend = BFIELD(DA9063_REG_DVC_1, DA9063_VLDO1_SEL),
564 .suspend = BFIELD(DA9063_REG_DVC_1, DA9063_VLDO2_SEL),
568 .suspend = BFIELD(DA9063_REG_DVC_2, DA9063_VLDO4_SEL),
573 .suspend = BFIELD(DA9063_REG_LDO5_CONT, DA9063_VLDO5_SEL),
577 .suspend = BFIELD(DA9063_REG_LDO6_CONT, DA9063_VLDO6_SEL),
582 .suspend = BFIELD(DA9063_REG_LDO10_CONT, DA9063_VLDO10_SEL),
595 .n_regulators = ARRAY_SIZE(da9063_regulator_info) - 6,
605 struct da9063 *hw = regulators->regulator[0].hw; in da9063_ldo_lim_event()
609 ret = regmap_read(hw->regmap, DA9063_REG_STATUS_D, &bits); in da9063_ldo_lim_event()
613 for (i = regulators->n_regulators - 1; i >= 0; i--) { in da9063_ldo_lim_event()
614 regl = &regulators->regulator[i]; in da9063_ldo_lim_event()
615 if (regl->info->oc_event.reg != DA9063_REG_STATUS_D) in da9063_ldo_lim_event()
618 if (BIT(regl->info->oc_event.lsb) & bits) in da9063_ldo_lim_event()
619 regulator_notifier_call_chain(regl->rdev, in da9063_ldo_lim_event()
634 for (i = 0; i < regl_pdata->n_regulators; i++) { in da9063_get_regulator_initdata()
635 if (id == regl_pdata->regulator_data[i].id) in da9063_get_regulator_initdata()
636 return regl_pdata->regulator_data[i].initdata; in da9063_get_regulator_initdata()
650 [DA9063_ID_BCORES_MERGED] = { .name = "bcores-merged" },
651 [DA9063_ID_BMEM_BIO_MERGED] = { .name = "bmem-bio-merged", },
670 struct da9063 *da9063 = dev_get_drvdata(pdev->dev.parent); in da9063_parse_regulators_dt()
677 if (da9063->type == PMIC_TYPE_DA9063L) in da9063_parse_regulators_dt()
678 da9063_matches_len -= 6; in da9063_parse_regulators_dt()
680 node = of_get_child_by_name(pdev->dev.parent->of_node, "regulators"); in da9063_parse_regulators_dt()
682 dev_err(&pdev->dev, "Regulators device node not found\n"); in da9063_parse_regulators_dt()
683 return ERR_PTR(-ENODEV); in da9063_parse_regulators_dt()
686 num = of_regulator_match(&pdev->dev, node, da9063_matches, in da9063_parse_regulators_dt()
690 dev_err(&pdev->dev, "Failed to match regulators\n"); in da9063_parse_regulators_dt()
691 return ERR_PTR(-EINVAL); in da9063_parse_regulators_dt()
694 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); in da9063_parse_regulators_dt()
696 return ERR_PTR(-ENOMEM); in da9063_parse_regulators_dt()
698 pdata->regulator_data = devm_kcalloc(&pdev->dev, in da9063_parse_regulators_dt()
699 num, sizeof(*pdata->regulator_data), in da9063_parse_regulators_dt()
701 if (!pdata->regulator_data) in da9063_parse_regulators_dt()
702 return ERR_PTR(-ENOMEM); in da9063_parse_regulators_dt()
703 pdata->n_regulators = num; in da9063_parse_regulators_dt()
710 rdata = &pdata->regulator_data[n]; in da9063_parse_regulators_dt()
711 rdata->id = i; in da9063_parse_regulators_dt()
712 rdata->initdata = da9063_matches[i].init_data; in da9063_parse_regulators_dt()
726 return ERR_PTR(-ENODEV); in da9063_parse_regulators_dt()
732 struct da9063 *da9063 = dev_get_drvdata(pdev->dev.parent); in da9063_regulator_probe()
733 struct da9063_pdata *da9063_pdata = dev_get_platdata(da9063->dev); in da9063_regulator_probe()
744 regl_pdata = da9063_pdata ? da9063_pdata->regulators_pdata : NULL; in da9063_regulator_probe()
750 if (IS_ERR(regl_pdata) || regl_pdata->n_regulators == 0) { in da9063_regulator_probe()
751 dev_err(&pdev->dev, in da9063_regulator_probe()
753 return -ENODEV; in da9063_regulator_probe()
757 for (model = regulators_models; model->regulator_info; model++) { in da9063_regulator_probe()
758 if (model->type == da9063->type) in da9063_regulator_probe()
761 if (!model->regulator_info) { in da9063_regulator_probe()
762 dev_err(&pdev->dev, "Chip model not recognised (%u)\n", in da9063_regulator_probe()
763 da9063->type); in da9063_regulator_probe()
764 return -ENODEV; in da9063_regulator_probe()
767 ret = regmap_read(da9063->regmap, DA9063_REG_CONFIG_H, &val); in da9063_regulator_probe()
769 dev_err(&pdev->dev, in da9063_regulator_probe()
776 n_regulators = model->n_regulators; in da9063_regulator_probe()
778 n_regulators -= 2; /* remove BCORE1, BCORE2 */ in da9063_regulator_probe()
780 n_regulators--; /* remove BCORES_MERGED */ in da9063_regulator_probe()
782 n_regulators -= 2; /* remove BMEM, BIO */ in da9063_regulator_probe()
784 n_regulators--; /* remove BMEM_BIO_MERGED */ in da9063_regulator_probe()
789 regulators = devm_kzalloc(&pdev->dev, size, GFP_KERNEL); in da9063_regulator_probe()
791 return -ENOMEM; in da9063_regulator_probe()
793 regulators->n_regulators = n_regulators; in da9063_regulator_probe()
799 while (n < regulators->n_regulators) { in da9063_regulator_probe()
800 /* Skip regulator IDs depending on merge mode configuration */ in da9063_regulator_probe()
831 regl = &regulators->regulator[n]; in da9063_regulator_probe()
832 regl->hw = da9063; in da9063_regulator_probe()
833 regl->info = &model->regulator_info[id]; in da9063_regulator_probe()
834 regl->desc = regl->info->desc; in da9063_regulator_probe()
835 regl->desc.type = REGULATOR_VOLTAGE; in da9063_regulator_probe()
836 regl->desc.owner = THIS_MODULE; in da9063_regulator_probe()
838 if (regl->info->mode.reg) in da9063_regulator_probe()
839 regl->mode = devm_regmap_field_alloc(&pdev->dev, in da9063_regulator_probe()
840 da9063->regmap, regl->info->mode); in da9063_regulator_probe()
841 if (regl->info->suspend.reg) in da9063_regulator_probe()
842 regl->suspend = devm_regmap_field_alloc(&pdev->dev, in da9063_regulator_probe()
843 da9063->regmap, regl->info->suspend); in da9063_regulator_probe()
844 if (regl->info->sleep.reg) in da9063_regulator_probe()
845 regl->sleep = devm_regmap_field_alloc(&pdev->dev, in da9063_regulator_probe()
846 da9063->regmap, regl->info->sleep); in da9063_regulator_probe()
847 if (regl->info->suspend_sleep.reg) in da9063_regulator_probe()
848 regl->suspend_sleep = devm_regmap_field_alloc(&pdev->dev, in da9063_regulator_probe()
849 da9063->regmap, regl->info->suspend_sleep); in da9063_regulator_probe()
850 if (regl->info->ilimit.reg) in da9063_regulator_probe()
851 regl->ilimit = devm_regmap_field_alloc(&pdev->dev, in da9063_regulator_probe()
852 da9063->regmap, regl->info->ilimit); in da9063_regulator_probe()
856 config.dev = &pdev->dev; in da9063_regulator_probe()
861 config.regmap = da9063->regmap; in da9063_regulator_probe()
862 regl->rdev = devm_regulator_register(&pdev->dev, &regl->desc, in da9063_regulator_probe()
864 if (IS_ERR(regl->rdev)) { in da9063_regulator_probe()
865 dev_err(&pdev->dev, in da9063_regulator_probe()
867 regl->desc.name); in da9063_regulator_probe()
868 return PTR_ERR(regl->rdev); in da9063_regulator_probe()
877 dev_err(&pdev->dev, "Failed to get IRQ.\n"); in da9063_regulator_probe()
881 ret = devm_request_threaded_irq(&pdev->dev, irq, in da9063_regulator_probe()
886 dev_err(&pdev->dev, "Failed to request LDO_LIM IRQ.\n"); in da9063_regulator_probe()