Lines Matching +full:- +full:pvs

1 // SPDX-License-Identifier: GPL-2.0+
3 // pv88080-regulator.c - Regulator device driver for PV88080
19 #include "pv88080-regulator.h"
69 struct pv88080_buck_regmap buck_regmap[PV88080_MAX_REGULATORS-1];
201 ret = regmap_read(rdev->regmap, info->mode_reg, &data); in pv88080_buck_get_mode()
216 return -EINVAL; in pv88080_buck_get_mode()
239 return -EINVAL; in pv88080_buck_set_mode()
242 return regmap_update_bits(rdev->regmap, info->mode_reg, in pv88080_buck_set_mode()
280 .n_voltages = ((max) - (min))/(step) + 1, \
298 .n_voltages = ((max) - (min))/(step) + 1, \
317 err = regmap_read(chip->regmap, PV88080_REG_EVENT_A, &reg_val); in pv88080_irq_handler()
323 if (chip->rdev[i] != NULL) in pv88080_irq_handler()
324 regulator_notifier_call_chain(chip->rdev[i], in pv88080_irq_handler()
329 err = regmap_write(chip->regmap, PV88080_REG_EVENT_A, in pv88080_irq_handler()
339 if (chip->rdev[i] != NULL) in pv88080_irq_handler()
340 regulator_notifier_call_chain(chip->rdev[i], in pv88080_irq_handler()
345 err = regmap_write(chip->regmap, PV88080_REG_EVENT_A, in pv88080_irq_handler()
356 dev_err(chip->dev, "I2C error : %d\n", err); in pv88080_irq_handler()
365 struct regulator_init_data *init_data = dev_get_platdata(&i2c->dev); in pv88080_i2c_probe()
372 chip = devm_kzalloc(&i2c->dev, sizeof(struct pv88080), GFP_KERNEL); in pv88080_i2c_probe()
374 return -ENOMEM; in pv88080_i2c_probe()
376 chip->dev = &i2c->dev; in pv88080_i2c_probe()
377 chip->regmap = devm_regmap_init_i2c(i2c, &pv88080_regmap_config); in pv88080_i2c_probe()
378 if (IS_ERR(chip->regmap)) { in pv88080_i2c_probe()
379 error = PTR_ERR(chip->regmap); in pv88080_i2c_probe()
380 dev_err(chip->dev, "Failed to allocate register map: %d\n", in pv88080_i2c_probe()
385 chip->regmap_config = i2c_get_match_data(i2c); in pv88080_i2c_probe()
386 if (!chip->regmap_config) in pv88080_i2c_probe()
387 return -ENODEV; in pv88080_i2c_probe()
391 if (i2c->irq != 0) { in pv88080_i2c_probe()
392 ret = regmap_write(chip->regmap, PV88080_REG_MASK_A, 0xFF); in pv88080_i2c_probe()
394 dev_err(chip->dev, in pv88080_i2c_probe()
398 ret = regmap_write(chip->regmap, PV88080_REG_MASK_B, 0xFF); in pv88080_i2c_probe()
400 dev_err(chip->dev, in pv88080_i2c_probe()
404 ret = regmap_write(chip->regmap, PV88080_REG_MASK_C, 0xFF); in pv88080_i2c_probe()
406 dev_err(chip->dev, in pv88080_i2c_probe()
411 ret = devm_request_threaded_irq(&i2c->dev, i2c->irq, NULL, in pv88080_i2c_probe()
416 dev_err(chip->dev, "Failed to request IRQ: %d\n", in pv88080_i2c_probe()
417 i2c->irq); in pv88080_i2c_probe()
421 ret = regmap_update_bits(chip->regmap, PV88080_REG_MASK_A, in pv88080_i2c_probe()
424 dev_err(chip->dev, in pv88080_i2c_probe()
429 dev_warn(chip->dev, "No IRQ configured\n"); in pv88080_i2c_probe()
432 regmap_config = chip->regmap_config; in pv88080_i2c_probe()
433 config.dev = chip->dev; in pv88080_i2c_probe()
434 config.regmap = chip->regmap; in pv88080_i2c_probe()
437 for (i = 0; i < PV88080_MAX_REGULATORS-1; i++) { in pv88080_i2c_probe()
442 = regmap_config->buck_regmap[i].buck_limit_reg; in pv88080_i2c_probe()
444 = regmap_config->buck_regmap[i].buck_limit_mask; in pv88080_i2c_probe()
446 = regmap_config->buck_regmap[i].buck_mode_reg; in pv88080_i2c_probe()
448 = regmap_config->buck_regmap[i].buck_vdac_range_reg; in pv88080_i2c_probe()
450 = regmap_config->buck_regmap[i].buck_vrange_gain_reg; in pv88080_i2c_probe()
452 = regmap_config->buck_regmap[i].buck_enable_reg; in pv88080_i2c_probe()
454 = regmap_config->buck_regmap[i].buck_enable_mask; in pv88080_i2c_probe()
456 = regmap_config->buck_regmap[i].buck_vsel_reg; in pv88080_i2c_probe()
458 = regmap_config->buck_regmap[i].buck_vsel_mask; in pv88080_i2c_probe()
460 ret = regmap_read(chip->regmap, in pv88080_i2c_probe()
467 ret = regmap_read(chip->regmap, in pv88080_i2c_probe()
480 - (pv88080_regulator_info[i].desc.min_uV)) in pv88080_i2c_probe()
484 chip->rdev[i] = devm_regulator_register(chip->dev, in pv88080_i2c_probe()
486 if (IS_ERR(chip->rdev[i])) { in pv88080_i2c_probe()
487 dev_err(chip->dev, in pv88080_i2c_probe()
489 return PTR_ERR(chip->rdev[i]); in pv88080_i2c_probe()
494 = regmap_config->hvbuck_enable_reg; in pv88080_i2c_probe()
496 = regmap_config->hvbuck_enable_mask; in pv88080_i2c_probe()
498 = regmap_config->hvbuck_vsel_reg; in pv88080_i2c_probe()
500 = regmap_config->hvbuck_vsel_mask; in pv88080_i2c_probe()
507 chip->rdev[PV88080_ID_HVBUCK] = devm_regulator_register(chip->dev, in pv88080_i2c_probe()
509 if (IS_ERR(chip->rdev[PV88080_ID_HVBUCK])) { in pv88080_i2c_probe()
510 dev_err(chip->dev, "Failed to register PV88080 regulator\n"); in pv88080_i2c_probe()
511 return PTR_ERR(chip->rdev[PV88080_ID_HVBUCK]); in pv88080_i2c_probe()
518 { .compatible = "pvs,pv88080", .data = &pv88080_aa_regs },
519 { .compatible = "pvs,pv88080-aa", .data = &pv88080_aa_regs },
520 { .compatible = "pvs,pv88080-ba", .data = &pv88080_ba_regs },
527 { "pv88080-aa", (kernel_ulong_t)&pv88080_aa_regs },
528 { "pv88080-ba", (kernel_ulong_t)&pv88080_ba_regs },