Lines Matching +full:buck +full:-
1 // SPDX-License-Identifier: GPL-2.0+
110 (const struct rtq2208_regulator_desc *)rdev->desc; in rtq2208_set_mode()
121 return -EINVAL; in rtq2208_set_mode()
124 shift = ffs(rdesc->mode_mask) - 1; in rtq2208_set_mode()
125 return regmap_update_bits(rdev->regmap, rdesc->mode_reg, in rtq2208_set_mode()
126 rdesc->mode_mask, val << shift); in rtq2208_set_mode()
132 (const struct rtq2208_regulator_desc *)rdev->desc; in rtq2208_get_mode()
136 ret = regmap_read(rdev->regmap, rdesc->mode_reg, &mode_val); in rtq2208_get_mode()
140 return (mode_val & rdesc->mode_mask) ? REGULATOR_MODE_FAST : REGULATOR_MODE_NORMAL; in rtq2208_get_mode()
145 const struct regulator_desc *desc = rdev->desc; in rtq2208_set_ramp_delay()
154 * fls(ramp_delay) - 1: doing LSB shift, let it starts from 0 in rtq2208_set_ramp_delay()
156 * RTQ2208_BUCK_RAMP_SEL_MASK - sel: doing descending order shifting. in rtq2208_set_ramp_delay()
164 * For example, if I would like to select 16mv, the fls(ramp_delay) - 1 will be 0b010, in rtq2208_set_ramp_delay()
165 * and I need to use 0b111 - sel to do the shifting in rtq2208_set_ramp_delay()
168 sel = fls(ramp_delay) - 1; in rtq2208_set_ramp_delay()
169 sel = RTQ2208_BUCK_RAMP_SEL_MASK - sel; in rtq2208_set_ramp_delay()
173 return regmap_update_bits(rdev->regmap, desc->ramp_reg, in rtq2208_set_ramp_delay()
180 (const struct rtq2208_regulator_desc *)rdev->desc; in rtq2208_set_suspend_enable()
182 return regmap_set_bits(rdev->regmap, rdesc->suspend_config_reg, rdesc->suspend_enable_mask); in rtq2208_set_suspend_enable()
188 (const struct rtq2208_regulator_desc *)rdev->desc; in rtq2208_set_suspend_disable()
190 return regmap_update_bits(rdev->regmap, rdesc->suspend_config_reg, rdesc->suspend_enable_mask, 0); in rtq2208_set_suspend_disable()
196 (const struct rtq2208_regulator_desc *)rdev->desc; in rtq2208_set_suspend_mode()
207 return -EINVAL; in rtq2208_set_suspend_mode()
210 shift = ffs(rdesc->suspend_mode_mask) - 1; in rtq2208_set_suspend_mode()
212 return regmap_update_bits(rdev->regmap, rdesc->suspend_config_reg, in rtq2208_set_suspend_mode()
213 rdesc->suspend_mode_mask, val << shift); in rtq2208_set_suspend_mode()
276 /* write clear all buck irq once */ in rtq2208_init_irq_mask()
277 ret = regmap_bulk_write(rdev_map->regmap, RTQ2208_REG_FLT_RECORDBUCK_CB, buck_clr_masks, 5); in rtq2208_init_irq_mask()
279 return dev_err_probe(rdev_map->dev, ret, "Failed to clr buck irqs\n"); in rtq2208_init_irq_mask()
282 ret = regmap_bulk_write(rdev_map->regmap, RTQ2208_REG_GLOBAL_INT1, sts_clr_masks, 2); in rtq2208_init_irq_mask()
284 return dev_err_probe(rdev_map->dev, ret, "Failed to clr general irqs\n"); in rtq2208_init_irq_mask()
286 /* unmask buck ov/uv irq */ in rtq2208_init_irq_mask()
287 ret = regmap_bulk_write(rdev_map->regmap, RTQ2208_REG_FLT_MASKBUCK_CB, buck_masks, 5); in rtq2208_init_irq_mask()
289 return dev_err_probe(rdev_map->dev, ret, "Failed to unmask buck irqs\n"); in rtq2208_init_irq_mask()
292 return regmap_bulk_write(rdev_map->regmap, RTQ2208_REG_GLOBAL_INT1_MASK, sts_masks, 2); in rtq2208_init_irq_mask()
306 ret = regmap_bulk_read(rdev_map->regmap, RTQ2208_REG_FLT_RECORDBUCK_CB, in rtq2208_irq_handler()
311 ret = regmap_bulk_read(rdev_map->regmap, RTQ2208_REG_GLOBAL_INT1, in rtq2208_irq_handler()
317 ret = regmap_bulk_write(rdev_map->regmap, RTQ2208_REG_FLT_RECORDBUCK_CB, in rtq2208_irq_handler()
322 ret = regmap_bulk_write(rdev_map->regmap, RTQ2208_REG_GLOBAL_INT1, in rtq2208_irq_handler()
328 if (!rdev_map->rdev[i]) in rtq2208_irq_handler()
331 rdev = rdev_map->rdev[i]; in rtq2208_irq_handler()
393 BUCK_INFO("buck-b", B), in rtq2208_init_regulator_desc()
394 BUCK_INFO("buck-c", C), in rtq2208_init_regulator_desc()
395 BUCK_INFO("buck-d", D), in rtq2208_init_regulator_desc()
396 BUCK_INFO("buck-a", A), in rtq2208_init_regulator_desc()
397 BUCK_INFO("buck-f", F), in rtq2208_init_regulator_desc()
398 BUCK_INFO("buck-g", G), in rtq2208_init_regulator_desc()
399 BUCK_INFO("buck-h", H), in rtq2208_init_regulator_desc()
400 BUCK_INFO("buck-e", E), in rtq2208_init_regulator_desc()
406 desc = &rdesc->desc; in rtq2208_init_regulator_desc()
407 desc->name = curr_info->name; in rtq2208_init_regulator_desc()
408 desc->of_match = of_match_ptr(curr_info->name); in rtq2208_init_regulator_desc()
409 desc->regulators_node = of_match_ptr("regulators"); in rtq2208_init_regulator_desc()
410 desc->id = idx; in rtq2208_init_regulator_desc()
411 desc->owner = THIS_MODULE; in rtq2208_init_regulator_desc()
412 desc->type = REGULATOR_VOLTAGE; in rtq2208_init_regulator_desc()
413 desc->enable_mask = mtp_sel ? MTP_SEL_MASK(1) : MTP_SEL_MASK(0); in rtq2208_init_regulator_desc()
414 desc->enable_reg = curr_info->enable_reg; in rtq2208_init_regulator_desc()
415 desc->active_discharge_off = 0; in rtq2208_init_regulator_desc()
417 rdesc->mode_mask = RTQ2208_BUCK_NRMODE_MASK; in rtq2208_init_regulator_desc()
421 /* init buck desc */ in rtq2208_init_regulator_desc()
422 desc->ops = &rtq2208_regulator_buck_ops; in rtq2208_init_regulator_desc()
423 desc->vsel_reg = curr_info->base + VSEL_SHIFT(mtp_sel); in rtq2208_init_regulator_desc()
424 desc->vsel_mask = RTQ2208_BUCK_NR_MTP_SEL_MASK; in rtq2208_init_regulator_desc()
425 desc->n_voltages = RTQ2208_VOUT_MAXNUM; in rtq2208_init_regulator_desc()
426 desc->linear_ranges = rtq2208_vout_range; in rtq2208_init_regulator_desc()
427 desc->n_linear_ranges = ARRAY_SIZE(rtq2208_vout_range); in rtq2208_init_regulator_desc()
428 desc->ramp_reg = BUCK_RG_SHIFT(curr_info->base, 5); in rtq2208_init_regulator_desc()
429 desc->of_map_mode = rtq2208_of_map_mode; in rtq2208_init_regulator_desc()
430 desc->active_discharge_reg = curr_info->dis_reg; in rtq2208_init_regulator_desc()
431 desc->active_discharge_on = RTQ2208_EN_DIS_MASK; in rtq2208_init_regulator_desc()
432 desc->active_discharge_mask = RTQ2208_EN_DIS_MASK; in rtq2208_init_regulator_desc()
434 rdesc->mode_reg = BUCK_RG_SHIFT(curr_info->base, 2); in rtq2208_init_regulator_desc()
435 rdesc->suspend_config_reg = BUCK_RG_SHIFT(curr_info->base, 4); in rtq2208_init_regulator_desc()
436 rdesc->suspend_enable_mask = RTQ2208_BUCK_EN_STR_MASK; in rtq2208_init_regulator_desc()
437 rdesc->suspend_mode_mask = RTQ2208_BUCK_STRMODE_MASK; in rtq2208_init_regulator_desc()
442 desc->n_voltages = 1; in rtq2208_init_regulator_desc()
443 desc->fixed_uV = fixed_uV; in rtq2208_init_regulator_desc()
444 desc->ops = &rtq2208_regulator_ldo_fix_ops; in rtq2208_init_regulator_desc()
446 desc->n_voltages = ARRAY_SIZE(rtq2208_ldo_volt_table); in rtq2208_init_regulator_desc()
447 desc->volt_table = rtq2208_ldo_volt_table; in rtq2208_init_regulator_desc()
448 desc->ops = &rtq2208_regulator_ldo_adj_ops; in rtq2208_init_regulator_desc()
452 desc->active_discharge_reg = RTQ2208_REG_LDO_DVS_CTRL; in rtq2208_init_regulator_desc()
453 desc->active_discharge_on = curr_info->dis_on; in rtq2208_init_regulator_desc()
454 desc->active_discharge_mask = curr_info->dis_mask; in rtq2208_init_regulator_desc()
455 desc->vsel_reg = RTQ2208_REG_LDO_DVS_CTRL; in rtq2208_init_regulator_desc()
456 desc->vsel_mask = curr_info->vsel_mask; in rtq2208_init_regulator_desc()
458 rdesc->suspend_config_reg = curr_info->base; in rtq2208_init_regulator_desc()
459 rdesc->suspend_enable_mask = RTQ2208_LDO_EN_STR_MASK; in rtq2208_init_regulator_desc()
471 mtp_sel = device_property_read_bool(dev, "richtek,mtp-sel-high"); in rtq2208_parse_regulator_dt_data()
478 return -ENOMEM; in rtq2208_parse_regulator_dt_data()
504 return dev_err_probe(dev, ret, "Failed to read buck phase configuration\n"); in rtq2208_regulator_check()
518 dev_info(dev, "BUCK Phase 0x%x\n", buck_phase); in rtq2208_regulator_check()
520 * Use buck phase configuration to assign used table mask in rtq2208_regulator_check()
522 * 0 -> 2P + 2P BC FG in rtq2208_regulator_check()
523 * 1 -> 2P + 1P + 1P BCA FGE in rtq2208_regulator_check()
524 * 2 -> 1P + 1P + 1P + 1P BCDA FGHE in rtq2208_regulator_check()
525 * 3 -> 3P + 1P BC FG in rtq2208_regulator_check()
526 * others -> 4P C G in rtq2208_regulator_check()
594 struct device *dev = &i2c->dev; in rtq2208_probe()
607 return -ENOMEM; in rtq2208_probe()
619 rdev_map->regmap = regmap; in rtq2208_probe()
620 rdev_map->dev = dev; in rtq2208_probe()
634 rdev = devm_regulator_register(dev, &rdesc[i]->desc, &cfg); in rtq2208_probe()
638 rdev_map->rdev[idx] = rdev; in rtq2208_probe()
647 return devm_request_threaded_irq(dev, i2c->irq, NULL, rtq2208_irq_handler, in rtq2208_probe()