Lines Matching refs:vreg
477 static inline int spmi_vreg_read(struct spmi_regulator *vreg, u16 addr, u8 *buf, in spmi_vreg_read() argument
480 return regmap_bulk_read(vreg->regmap, vreg->base + addr, buf, len); in spmi_vreg_read()
483 static inline int spmi_vreg_write(struct spmi_regulator *vreg, u16 addr, in spmi_vreg_write() argument
486 return regmap_bulk_write(vreg->regmap, vreg->base + addr, buf, len); in spmi_vreg_write()
489 static int spmi_vreg_update_bits(struct spmi_regulator *vreg, u16 addr, u8 val, in spmi_vreg_update_bits() argument
492 return regmap_update_bits(vreg->regmap, vreg->base + addr, mask, val); in spmi_vreg_update_bits()
497 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_is_enabled() local
500 spmi_vreg_read(vreg, SPMI_COMMON_REG_ENABLE, ®, 1); in spmi_regulator_common_is_enabled()
507 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_enable() local
509 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_ENABLE, in spmi_regulator_common_enable()
515 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_vs_enable() local
517 if (vreg->ocp_irq) { in spmi_regulator_vs_enable()
518 vreg->ocp_count = 0; in spmi_regulator_vs_enable()
519 vreg->vs_enable_time = ktime_get(); in spmi_regulator_vs_enable()
527 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_vs_ocp() local
530 return spmi_vreg_write(vreg, SPMI_VS_REG_OCP, ®, 1); in spmi_regulator_vs_ocp()
535 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_disable() local
537 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_ENABLE, in spmi_regulator_common_disable()
541 static int spmi_regulator_select_voltage(struct spmi_regulator *vreg, in spmi_regulator_select_voltage() argument
550 lim_min_uV = vreg->set_points->range[0].set_point_min_uV; in spmi_regulator_select_voltage()
552 vreg->set_points->range[vreg->set_points->count - 1].set_point_max_uV; in spmi_regulator_select_voltage()
558 dev_err(vreg->dev, in spmi_regulator_select_voltage()
565 for (i = vreg->set_points->count - 1; i > 0; i--) { in spmi_regulator_select_voltage()
566 range_max_uV = vreg->set_points->range[i - 1].set_point_max_uV; in spmi_regulator_select_voltage()
572 range = &vreg->set_points->range[range_id]; in spmi_regulator_select_voltage()
583 dev_err(vreg->dev, in spmi_regulator_select_voltage()
592 *selector += vreg->set_points->range[i].n_voltages; in spmi_regulator_select_voltage()
599 spmi_regulator_find_range(struct spmi_regulator *vreg) in spmi_regulator_find_range() argument
604 range = vreg->set_points->range; in spmi_regulator_find_range()
605 end = range + vreg->set_points->count; in spmi_regulator_find_range()
607 spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, &range_sel, 1); in spmi_regulator_find_range()
616 static int spmi_regulator_select_voltage_same_range(struct spmi_regulator *vreg, in spmi_regulator_select_voltage_same_range() argument
624 range = spmi_regulator_find_range(vreg); in spmi_regulator_select_voltage_same_range()
652 for (i = 0; i < vreg->set_points->count; i++) { in spmi_regulator_select_voltage_same_range()
653 if (uV >= vreg->set_points->range[i].set_point_min_uV in spmi_regulator_select_voltage_same_range()
654 && uV <= vreg->set_points->range[i].set_point_max_uV) { in spmi_regulator_select_voltage_same_range()
656 (uV - vreg->set_points->range[i].set_point_min_uV) in spmi_regulator_select_voltage_same_range()
657 / vreg->set_points->range[i].step_uV; in spmi_regulator_select_voltage_same_range()
661 *selector += vreg->set_points->range[i].n_voltages; in spmi_regulator_select_voltage_same_range()
664 if (*selector >= vreg->set_points->n_voltages) in spmi_regulator_select_voltage_same_range()
670 return spmi_regulator_select_voltage(vreg, min_uV, max_uV, in spmi_regulator_select_voltage_same_range()
677 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_voltage() local
686 ret = spmi_regulator_select_voltage_same_range(vreg, min_uV, max_uV, in spmi_regulator_common_set_voltage()
693 return spmi_vreg_write(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, buf, 2); in spmi_regulator_common_set_voltage()
699 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_set_voltage_time_sel() local
703 range = spmi_regulator_find_range(vreg); in spmi_regulator_set_voltage_time_sel()
709 return DIV_ROUND_UP(diff_uV, vreg->slew_rate); in spmi_regulator_set_voltage_time_sel()
714 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_get_voltage() local
718 spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &voltage_sel, 1); in spmi_regulator_common_get_voltage()
720 range = spmi_regulator_find_range(vreg); in spmi_regulator_common_get_voltage()
730 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_single_range_set_voltage() local
734 ret = spmi_regulator_select_voltage(vreg, min_uV, max_uV, &range_sel, in spmi_regulator_single_range_set_voltage()
737 dev_err(vreg->dev, "could not set voltage, ret=%d\n", ret); in spmi_regulator_single_range_set_voltage()
745 return spmi_vreg_write(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &sel, 1); in spmi_regulator_single_range_set_voltage()
750 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_single_range_get_voltage() local
751 const struct spmi_voltage_range *range = vreg->set_points->range; in spmi_regulator_single_range_get_voltage()
754 spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &voltage_sel, 1); in spmi_regulator_single_range_get_voltage()
762 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ult_lo_smps_set_voltage() local
770 ret = spmi_regulator_select_voltage_same_range(vreg, min_uV, max_uV, in spmi_regulator_ult_lo_smps_set_voltage()
785 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_VOLTAGE_SET, in spmi_regulator_ult_lo_smps_set_voltage()
791 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ult_lo_smps_get_voltage() local
795 spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &voltage_sel, 1); in spmi_regulator_ult_lo_smps_get_voltage()
797 range = spmi_regulator_find_range(vreg); in spmi_regulator_ult_lo_smps_get_voltage()
810 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_list_voltage() local
814 if (selector >= vreg->set_points->n_voltages) in spmi_regulator_common_list_voltage()
817 for (i = 0; i < vreg->set_points->count; i++) { in spmi_regulator_common_list_voltage()
818 if (selector < vreg->set_points->range[i].n_voltages) { in spmi_regulator_common_list_voltage()
819 uV = selector * vreg->set_points->range[i].step_uV in spmi_regulator_common_list_voltage()
820 + vreg->set_points->range[i].set_point_min_uV; in spmi_regulator_common_list_voltage()
824 selector -= vreg->set_points->range[i].n_voltages; in spmi_regulator_common_list_voltage()
833 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_bypass() local
840 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask); in spmi_regulator_common_set_bypass()
846 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_get_bypass() local
850 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, &val, 1); in spmi_regulator_common_get_bypass()
858 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_get_mode() local
861 spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, ®, 1); in spmi_regulator_common_get_mode()
875 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_mode() local
884 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask); in spmi_regulator_common_set_mode()
890 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_load() local
893 if (load_uA >= vreg->hpm_min_load) in spmi_regulator_common_set_load()
903 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_pull_down() local
906 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_PULL_DOWN, in spmi_regulator_common_set_pull_down()
912 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_soft_start() local
915 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_SOFT_START, in spmi_regulator_common_set_soft_start()
921 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_set_ilim() local
922 enum spmi_regulator_logical_type type = vreg->logical_type; in spmi_regulator_set_ilim()
940 return spmi_vreg_update_bits(vreg, current_reg, reg, mask); in spmi_regulator_set_ilim()
943 static int spmi_regulator_vs_clear_ocp(struct spmi_regulator *vreg) in spmi_regulator_vs_clear_ocp() argument
947 ret = spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_ENABLE, in spmi_regulator_vs_clear_ocp()
950 vreg->vs_enable_time = ktime_get(); in spmi_regulator_vs_clear_ocp()
952 ret = spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_ENABLE, in spmi_regulator_vs_clear_ocp()
961 struct spmi_regulator *vreg in spmi_regulator_vs_ocp_work() local
964 spmi_regulator_vs_clear_ocp(vreg); in spmi_regulator_vs_ocp_work()
969 struct spmi_regulator *vreg = data; in spmi_regulator_vs_ocp_isr() local
975 vreg->vs_enable_time); in spmi_regulator_vs_ocp_isr()
983 vreg->ocp_count = 0; in spmi_regulator_vs_ocp_isr()
988 vreg->ocp_count++; in spmi_regulator_vs_ocp_isr()
990 if (vreg->ocp_count == 1) { in spmi_regulator_vs_ocp_isr()
992 spmi_regulator_vs_clear_ocp(vreg); in spmi_regulator_vs_ocp_isr()
993 } else if (vreg->ocp_count <= vreg->ocp_max_retries) { in spmi_regulator_vs_ocp_isr()
995 schedule_delayed_work(&vreg->ocp_work, in spmi_regulator_vs_ocp_isr()
996 msecs_to_jiffies(vreg->ocp_retry_delay_ms) + 1); in spmi_regulator_vs_ocp_isr()
998 dev_err(vreg->dev, in spmi_regulator_vs_ocp_isr()
1000 vreg->ocp_count); in spmi_regulator_vs_ocp_isr()
1193 static int spmi_regulator_match(struct spmi_regulator *vreg, u16 force_type) in spmi_regulator_match() argument
1201 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_DIG_MAJOR_REV, version, in spmi_regulator_match()
1204 dev_err(vreg->dev, "could not read version registers\n"); in spmi_regulator_match()
1227 dev_err(vreg->dev, in spmi_regulator_match()
1229 vreg->desc.name, type, subtype, dig_major_rev); in spmi_regulator_match()
1234 vreg->logical_type = mapping->logical_type; in spmi_regulator_match()
1235 vreg->set_points = mapping->set_points; in spmi_regulator_match()
1236 vreg->hpm_min_load = mapping->hpm_min_load; in spmi_regulator_match()
1237 vreg->desc.ops = mapping->ops; in spmi_regulator_match()
1242 vreg->desc.n_voltages = mapping->set_points->n_voltages; in spmi_regulator_match()
1248 static int spmi_regulator_ftsmps_init_slew_rate(struct spmi_regulator *vreg) in spmi_regulator_ftsmps_init_slew_rate() argument
1255 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_STEP_CTRL, ®, 1); in spmi_regulator_ftsmps_init_slew_rate()
1257 dev_err(vreg->dev, "spmi read failed, ret=%d\n", ret); in spmi_regulator_ftsmps_init_slew_rate()
1261 range = spmi_regulator_find_range(vreg); in spmi_regulator_ftsmps_init_slew_rate()
1278 vreg->slew_rate = max(slew_rate, 1); in spmi_regulator_ftsmps_init_slew_rate()
1283 static int spmi_regulator_init_registers(struct spmi_regulator *vreg, in spmi_regulator_init_registers() argument
1290 type = vreg->logical_type; in spmi_regulator_init_registers()
1292 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, ctrl_reg, 8); in spmi_regulator_init_registers()
1339 ret = spmi_vreg_write(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, ctrl_reg, 8); in spmi_regulator_init_registers()
1350 return spmi_vreg_update_bits(vreg, in spmi_regulator_init_registers()
1359 static void spmi_regulator_get_dt_config(struct spmi_regulator *vreg, in spmi_regulator_get_dt_config() argument
1372 &vreg->ocp_max_retries); in spmi_regulator_get_dt_config()
1374 &vreg->ocp_retry_delay_ms); in spmi_regulator_get_dt_config()
1397 struct spmi_regulator *vreg = config->driver_data; in spmi_regulator_of_parse() local
1401 spmi_regulator_get_dt_config(vreg, node, &data); in spmi_regulator_of_parse()
1403 if (!vreg->ocp_max_retries) in spmi_regulator_of_parse()
1404 vreg->ocp_max_retries = SPMI_VS_OCP_DEFAULT_MAX_RETRIES; in spmi_regulator_of_parse()
1405 if (!vreg->ocp_retry_delay_ms) in spmi_regulator_of_parse()
1406 vreg->ocp_retry_delay_ms = SPMI_VS_OCP_DEFAULT_RETRY_DELAY_MS; in spmi_regulator_of_parse()
1408 ret = spmi_regulator_init_registers(vreg, &data); in spmi_regulator_of_parse()
1414 if (vreg->logical_type == SPMI_REGULATOR_LOGICAL_TYPE_FTSMPS) { in spmi_regulator_of_parse()
1415 ret = spmi_regulator_ftsmps_init_slew_rate(vreg); in spmi_regulator_of_parse()
1420 if (vreg->logical_type != SPMI_REGULATOR_LOGICAL_TYPE_VS) in spmi_regulator_of_parse()
1421 vreg->ocp_irq = 0; in spmi_regulator_of_parse()
1423 if (vreg->ocp_irq) { in spmi_regulator_of_parse()
1424 ret = devm_request_irq(dev, vreg->ocp_irq, in spmi_regulator_of_parse()
1426 vreg); in spmi_regulator_of_parse()
1429 vreg->ocp_irq, ret); in spmi_regulator_of_parse()
1433 INIT_DELAYED_WORK(&vreg->ocp_work, spmi_regulator_vs_ocp_work); in spmi_regulator_of_parse()
1527 struct spmi_regulator *vreg; in qcom_spmi_regulator_probe() local
1549 vreg = devm_kzalloc(dev, sizeof(*vreg), GFP_KERNEL); in qcom_spmi_regulator_probe()
1550 if (!vreg) in qcom_spmi_regulator_probe()
1553 vreg->dev = dev; in qcom_spmi_regulator_probe()
1554 vreg->base = reg->base; in qcom_spmi_regulator_probe()
1555 vreg->regmap = regmap; in qcom_spmi_regulator_probe()
1558 vreg->ocp_irq = platform_get_irq_byname(pdev, reg->ocp); in qcom_spmi_regulator_probe()
1559 if (vreg->ocp_irq < 0) { in qcom_spmi_regulator_probe()
1560 ret = vreg->ocp_irq; in qcom_spmi_regulator_probe()
1565 vreg->desc.id = -1; in qcom_spmi_regulator_probe()
1566 vreg->desc.owner = THIS_MODULE; in qcom_spmi_regulator_probe()
1567 vreg->desc.type = REGULATOR_VOLTAGE; in qcom_spmi_regulator_probe()
1568 vreg->desc.name = name = reg->name; in qcom_spmi_regulator_probe()
1569 vreg->desc.supply_name = reg->supply; in qcom_spmi_regulator_probe()
1570 vreg->desc.of_match = reg->name; in qcom_spmi_regulator_probe()
1571 vreg->desc.of_parse_cb = spmi_regulator_of_parse; in qcom_spmi_regulator_probe()
1572 vreg->desc.of_map_mode = spmi_regulator_of_map_mode; in qcom_spmi_regulator_probe()
1574 ret = spmi_regulator_match(vreg, reg->force_type); in qcom_spmi_regulator_probe()
1579 config.driver_data = vreg; in qcom_spmi_regulator_probe()
1580 rdev = devm_regulator_register(dev, &vreg->desc, &config); in qcom_spmi_regulator_probe()
1587 INIT_LIST_HEAD(&vreg->node); in qcom_spmi_regulator_probe()
1588 list_add(&vreg->node, vreg_list); in qcom_spmi_regulator_probe()
1594 list_for_each_entry(vreg, vreg_list, node) in qcom_spmi_regulator_probe()
1595 if (vreg->ocp_irq) in qcom_spmi_regulator_probe()
1596 cancel_delayed_work_sync(&vreg->ocp_work); in qcom_spmi_regulator_probe()
1602 struct spmi_regulator *vreg; in qcom_spmi_regulator_remove() local
1605 list_for_each_entry(vreg, vreg_list, node) in qcom_spmi_regulator_remove()
1606 if (vreg->ocp_irq) in qcom_spmi_regulator_remove()
1607 cancel_delayed_work_sync(&vreg->ocp_work); in qcom_spmi_regulator_remove()