Lines Matching +full:buck +full:-
1 // SPDX-License-Identifier: GPL-2.0+
95 (const struct rtq2208_regulator_desc *)rdev->desc; in rtq2208_set_mode()
106 return -EINVAL; in rtq2208_set_mode()
109 shift = ffs(rdesc->mode_mask) - 1; in rtq2208_set_mode()
110 return regmap_update_bits(rdev->regmap, rdesc->mode_reg, in rtq2208_set_mode()
111 rdesc->mode_mask, val << shift); in rtq2208_set_mode()
117 (const struct rtq2208_regulator_desc *)rdev->desc; in rtq2208_get_mode()
121 ret = regmap_read(rdev->regmap, rdesc->mode_reg, &mode_val); in rtq2208_get_mode()
125 return (mode_val & rdesc->mode_mask) ? REGULATOR_MODE_FAST : REGULATOR_MODE_NORMAL; in rtq2208_get_mode()
130 const struct regulator_desc *desc = rdev->desc; in rtq2208_set_ramp_delay()
139 * fls(ramp_delay) - 1: doing LSB shift, let it starts from 0 in rtq2208_set_ramp_delay()
141 * RTQ2208_BUCK_RAMP_SEL_MASK - sel: doing descending order shifting. in rtq2208_set_ramp_delay()
150 * For example, if I would like to select 64mv, the fls(ramp_delay) - 1 will be 0b111, in rtq2208_set_ramp_delay()
151 * and I need to use 0b111 - sel to do the shifting in rtq2208_set_ramp_delay()
154 sel = fls(ramp_delay) - 1; in rtq2208_set_ramp_delay()
155 sel = RTQ2208_BUCK_RAMP_SEL_MASK - sel; in rtq2208_set_ramp_delay()
159 return regmap_update_bits(rdev->regmap, desc->ramp_reg, in rtq2208_set_ramp_delay()
166 (const struct rtq2208_regulator_desc *)rdev->desc; in rtq2208_set_suspend_enable()
168 return regmap_set_bits(rdev->regmap, rdesc->suspend_config_reg, rdesc->suspend_enable_mask); in rtq2208_set_suspend_enable()
174 (const struct rtq2208_regulator_desc *)rdev->desc; in rtq2208_set_suspend_disable()
176 return regmap_update_bits(rdev->regmap, rdesc->suspend_config_reg, rdesc->suspend_enable_mask, 0); in rtq2208_set_suspend_disable()
182 (const struct rtq2208_regulator_desc *)rdev->desc; in rtq2208_set_suspend_mode()
193 return -EINVAL; in rtq2208_set_suspend_mode()
196 shift = ffs(rdesc->suspend_mode_mask) - 1; in rtq2208_set_suspend_mode()
198 return regmap_update_bits(rdev->regmap, rdesc->suspend_config_reg, in rtq2208_set_suspend_mode()
199 rdesc->suspend_mode_mask, val << shift); in rtq2208_set_suspend_mode()
245 /* write clear all buck irq once */ in rtq2208_init_irq_mask()
246 ret = regmap_bulk_write(rdev_map->regmap, RTQ2208_REG_FLT_RECORDBUCK_CB, buck_clr_masks, 5); in rtq2208_init_irq_mask()
248 return dev_err_probe(rdev_map->dev, ret, "Failed to clr buck irqs\n"); in rtq2208_init_irq_mask()
251 ret = regmap_bulk_write(rdev_map->regmap, RTQ2208_REG_GLOBAL_INT1, sts_clr_masks, 2); in rtq2208_init_irq_mask()
253 return dev_err_probe(rdev_map->dev, ret, "Failed to clr general irqs\n"); in rtq2208_init_irq_mask()
255 /* unmask buck ov/uv irq */ in rtq2208_init_irq_mask()
256 ret = regmap_bulk_write(rdev_map->regmap, RTQ2208_REG_FLT_MASKBUCK_CB, buck_masks, 5); in rtq2208_init_irq_mask()
258 return dev_err_probe(rdev_map->dev, ret, "Failed to unmask buck irqs\n"); in rtq2208_init_irq_mask()
261 return regmap_bulk_write(rdev_map->regmap, RTQ2208_REG_GLOBAL_INT1_MASK, sts_masks, 2); in rtq2208_init_irq_mask()
275 ret = regmap_bulk_read(rdev_map->regmap, RTQ2208_REG_FLT_RECORDBUCK_CB, in rtq2208_irq_handler()
280 ret = regmap_bulk_read(rdev_map->regmap, RTQ2208_REG_GLOBAL_INT1, in rtq2208_irq_handler()
286 ret = regmap_bulk_write(rdev_map->regmap, RTQ2208_REG_FLT_RECORDBUCK_CB, in rtq2208_irq_handler()
291 ret = regmap_bulk_write(rdev_map->regmap, RTQ2208_REG_GLOBAL_INT1, in rtq2208_irq_handler()
297 if (!rdev_map->rdev[i]) in rtq2208_irq_handler()
300 rdev = rdev_map->rdev[i]; in rtq2208_irq_handler()
347 if (!dev->of_node) in rtq2208_of_get_fixed_voltage()
348 return -ENODEV; in rtq2208_of_get_fixed_voltage()
350 np = of_get_child_by_name(dev->of_node, "regulators"); in rtq2208_of_get_fixed_voltage()
352 np = dev->of_node; in rtq2208_of_get_fixed_voltage()
363 init_data = match->init_data; in rtq2208_of_get_fixed_voltage()
364 rdesc = (struct rtq2208_regulator_desc *)match->driver_data; in rtq2208_of_get_fixed_voltage()
369 if (init_data->constraints.min_uV == init_data->constraints.max_uV) in rtq2208_of_get_fixed_voltage()
370 rdesc->desc.fixed_uV = init_data->constraints.min_uV; in rtq2208_of_get_fixed_voltage()
384 RTQ2208_REGULATOR_INFO(buck-b, BUCK_RG_BASE(B)), in rtq2208_init_regulator_desc()
385 RTQ2208_REGULATOR_INFO(buck-c, BUCK_RG_BASE(C)), in rtq2208_init_regulator_desc()
386 RTQ2208_REGULATOR_INFO(buck-d, BUCK_RG_BASE(D)), in rtq2208_init_regulator_desc()
387 RTQ2208_REGULATOR_INFO(buck-a, BUCK_RG_BASE(A)), in rtq2208_init_regulator_desc()
388 RTQ2208_REGULATOR_INFO(buck-f, BUCK_RG_BASE(F)), in rtq2208_init_regulator_desc()
389 RTQ2208_REGULATOR_INFO(buck-g, BUCK_RG_BASE(G)), in rtq2208_init_regulator_desc()
390 RTQ2208_REGULATOR_INFO(buck-h, BUCK_RG_BASE(H)), in rtq2208_init_regulator_desc()
391 RTQ2208_REGULATOR_INFO(buck-e, BUCK_RG_BASE(E)), in rtq2208_init_regulator_desc()
397 desc = &rdesc->desc; in rtq2208_init_regulator_desc()
398 desc->name = curr_info->name; in rtq2208_init_regulator_desc()
399 desc->of_match = of_match_ptr(curr_info->name); in rtq2208_init_regulator_desc()
400 desc->regulators_node = of_match_ptr("regulators"); in rtq2208_init_regulator_desc()
401 desc->id = idx; in rtq2208_init_regulator_desc()
402 desc->owner = THIS_MODULE; in rtq2208_init_regulator_desc()
403 desc->type = REGULATOR_VOLTAGE; in rtq2208_init_regulator_desc()
404 desc->enable_mask = mtp_sel ? MTP_SEL_MASK(1) : MTP_SEL_MASK(0); in rtq2208_init_regulator_desc()
405 desc->active_discharge_on = RTQ2208_EN_DIS_MASK; in rtq2208_init_regulator_desc()
406 desc->active_discharge_off = 0; in rtq2208_init_regulator_desc()
407 desc->active_discharge_mask = RTQ2208_EN_DIS_MASK; in rtq2208_init_regulator_desc()
409 rdesc->mode_mask = RTQ2208_BUCK_NRMODE_MASK; in rtq2208_init_regulator_desc()
412 /* init buck desc */ in rtq2208_init_regulator_desc()
413 desc->enable_reg = BUCK_RG_SHIFT(curr_info->base, 2); in rtq2208_init_regulator_desc()
414 desc->ops = &rtq2208_regulator_buck_ops; in rtq2208_init_regulator_desc()
415 desc->vsel_reg = curr_info->base + VSEL_SHIFT(mtp_sel); in rtq2208_init_regulator_desc()
416 desc->vsel_mask = RTQ2208_BUCK_NR_MTP_SEL_MASK; in rtq2208_init_regulator_desc()
417 desc->n_voltages = RTQ2208_VOUT_MAXNUM; in rtq2208_init_regulator_desc()
418 desc->linear_ranges = rtq2208_vout_range; in rtq2208_init_regulator_desc()
419 desc->n_linear_ranges = ARRAY_SIZE(rtq2208_vout_range); in rtq2208_init_regulator_desc()
420 desc->ramp_reg = BUCK_RG_SHIFT(curr_info->base, 5); in rtq2208_init_regulator_desc()
421 desc->active_discharge_reg = curr_info->base; in rtq2208_init_regulator_desc()
422 desc->of_map_mode = rtq2208_of_map_mode; in rtq2208_init_regulator_desc()
424 rdesc->mode_reg = BUCK_RG_SHIFT(curr_info->base, 2); in rtq2208_init_regulator_desc()
425 rdesc->suspend_config_reg = BUCK_RG_SHIFT(curr_info->base, 4); in rtq2208_init_regulator_desc()
426 rdesc->suspend_enable_mask = RTQ2208_BUCK_EN_STR_MASK; in rtq2208_init_regulator_desc()
427 rdesc->suspend_mode_mask = RTQ2208_BUCK_STRMODE_MASK; in rtq2208_init_regulator_desc()
430 desc->enable_reg = curr_info->base; in rtq2208_init_regulator_desc()
431 desc->ops = &rtq2208_regulator_ldo_ops; in rtq2208_init_regulator_desc()
432 desc->n_voltages = 1; in rtq2208_init_regulator_desc()
433 desc->active_discharge_reg = LDO_RG_SHIFT(curr_info->base, 2); in rtq2208_init_regulator_desc()
435 rtq2208_ldo_match[*ldo_idx].name = desc->name; in rtq2208_init_regulator_desc()
439 rdesc->suspend_config_reg = curr_info->base; in rtq2208_init_regulator_desc()
440 rdesc->suspend_enable_mask = RTQ2208_LDO_EN_STR_MASK; in rtq2208_init_regulator_desc()
451 mtp_sel = device_property_read_bool(dev, "richtek,mtp-sel-high"); in rtq2208_parse_regulator_dt_data()
458 return -ENOMEM; in rtq2208_parse_regulator_dt_data()
473 * slave address 0x10: BUCK[BCA FGE]
474 * slave address 0x20: BUCK[BC FGHE]
475 * slave address 0x40: BUCK[C G]
481 /* BUCK[BCA FGE], LDO[12] */ in rtq2208_regulator_check()
483 /* BUCK[BC FGHE], LDO[12]*/ in rtq2208_regulator_check()
485 /* BUCK[C G], LDO[12] */ in rtq2208_regulator_check()
488 int i, idx = ffs(slave_addr >> 4) - 1; in rtq2208_regulator_check()
512 struct device *dev = &i2c->dev; in rtq2208_probe()
524 return -ENOMEM; in rtq2208_probe()
531 ret = rtq2208_regulator_check(i2c->addr, &n_regulator, regulator_idx_table, buck_masks); in rtq2208_probe()
535 rdev_map->regmap = regmap; in rtq2208_probe()
536 rdev_map->dev = dev; in rtq2208_probe()
549 rdev = devm_regulator_register(dev, &rdesc[i]->desc, &cfg); in rtq2208_probe()
553 rdev_map->rdev[idx] = rdev; in rtq2208_probe()
562 return devm_request_threaded_irq(dev, i2c->irq, NULL, rtq2208_irq_handler, in rtq2208_probe()