Lines Matching refs:vreg

535 static inline int spmi_vreg_read(struct spmi_regulator *vreg, u16 addr, u8 *buf,  in spmi_vreg_read()  argument
538 return regmap_bulk_read(vreg->regmap, vreg->base + addr, buf, len); in spmi_vreg_read()
541 static inline int spmi_vreg_write(struct spmi_regulator *vreg, u16 addr, in spmi_vreg_write() argument
544 return regmap_bulk_write(vreg->regmap, vreg->base + addr, buf, len); in spmi_vreg_write()
547 static int spmi_vreg_update_bits(struct spmi_regulator *vreg, u16 addr, u8 val, in spmi_vreg_update_bits() argument
550 return regmap_update_bits(vreg->regmap, vreg->base + addr, mask, val); in spmi_vreg_update_bits()
555 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_vs_enable() local
557 if (vreg->ocp_irq) { in spmi_regulator_vs_enable()
558 vreg->ocp_count = 0; in spmi_regulator_vs_enable()
559 vreg->vs_enable_time = ktime_get(); in spmi_regulator_vs_enable()
567 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_vs_ocp() local
570 return spmi_vreg_write(vreg, SPMI_VS_REG_OCP, &reg, 1); in spmi_regulator_vs_ocp()
573 static int spmi_regulator_select_voltage(struct spmi_regulator *vreg, in spmi_regulator_select_voltage() argument
582 lim_min_uV = vreg->set_points->range[0].set_point_min_uV; in spmi_regulator_select_voltage()
584 vreg->set_points->range[vreg->set_points->count - 1].set_point_max_uV; in spmi_regulator_select_voltage()
590 dev_err(vreg->dev, in spmi_regulator_select_voltage()
597 for (i = vreg->set_points->count - 1; i > 0; i--) { in spmi_regulator_select_voltage()
598 range_max_uV = vreg->set_points->range[i - 1].set_point_max_uV; in spmi_regulator_select_voltage()
604 range = &vreg->set_points->range[range_id]; in spmi_regulator_select_voltage()
614 dev_err(vreg->dev, in spmi_regulator_select_voltage()
623 selector += vreg->set_points->range[i].n_voltages; in spmi_regulator_select_voltage()
629 static int spmi_sw_selector_to_hw(struct spmi_regulator *vreg, in spmi_sw_selector_to_hw() argument
636 range = vreg->set_points->range; in spmi_sw_selector_to_hw()
637 end = range + vreg->set_points->count; in spmi_sw_selector_to_hw()
658 static int spmi_hw_selector_to_sw(struct spmi_regulator *vreg, u8 hw_sel, in spmi_hw_selector_to_sw() argument
663 const struct spmi_voltage_range *r = vreg->set_points->range; in spmi_hw_selector_to_sw()
664 const struct spmi_voltage_range *end = r + vreg->set_points->count; in spmi_hw_selector_to_sw()
693 spmi_regulator_find_range(struct spmi_regulator *vreg) in spmi_regulator_find_range() argument
698 range = vreg->set_points->range; in spmi_regulator_find_range()
699 end = range + vreg->set_points->count; in spmi_regulator_find_range()
701 spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, &range_sel, 1); in spmi_regulator_find_range()
710 static int spmi_regulator_select_voltage_same_range(struct spmi_regulator *vreg, in spmi_regulator_select_voltage_same_range() argument
717 range = spmi_regulator_find_range(vreg); in spmi_regulator_select_voltage_same_range()
745 for (i = 0; i < vreg->set_points->count; i++) { in spmi_regulator_select_voltage_same_range()
746 if (uV >= vreg->set_points->range[i].set_point_min_uV in spmi_regulator_select_voltage_same_range()
747 && uV <= vreg->set_points->range[i].set_point_max_uV) { in spmi_regulator_select_voltage_same_range()
749 (uV - vreg->set_points->range[i].set_point_min_uV) in spmi_regulator_select_voltage_same_range()
750 / vreg->set_points->range[i].step_uV; in spmi_regulator_select_voltage_same_range()
754 selector += vreg->set_points->range[i].n_voltages; in spmi_regulator_select_voltage_same_range()
757 if (selector >= vreg->set_points->n_voltages) in spmi_regulator_select_voltage_same_range()
763 return spmi_regulator_select_voltage(vreg, min_uV, max_uV); in spmi_regulator_select_voltage_same_range()
769 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_map_voltage() local
775 return spmi_regulator_select_voltage_same_range(vreg, min_uV, max_uV); in spmi_regulator_common_map_voltage()
781 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_voltage() local
786 ret = spmi_sw_selector_to_hw(vreg, selector, &range_sel, &voltage_sel); in spmi_regulator_common_set_voltage()
792 return spmi_vreg_write(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, buf, 2); in spmi_regulator_common_set_voltage()
801 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ftsmps426_set_voltage() local
809 return spmi_vreg_write(vreg, SPMI_FTSMPS426_REG_VOLTAGE_LSB, buf, 2); in spmi_regulator_ftsmps426_set_voltage()
815 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_set_voltage_time_sel() local
821 return DIV_ROUND_UP(diff_uV, vreg->slew_rate); in spmi_regulator_set_voltage_time_sel()
826 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_get_voltage() local
830 spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &voltage_sel, 1); in spmi_regulator_common_get_voltage()
832 range = spmi_regulator_find_range(vreg); in spmi_regulator_common_get_voltage()
836 return spmi_hw_selector_to_sw(vreg, voltage_sel, range); in spmi_regulator_common_get_voltage()
841 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ftsmps426_get_voltage() local
846 spmi_vreg_read(vreg, SPMI_FTSMPS426_REG_VOLTAGE_LSB, buf, 2); in spmi_regulator_ftsmps426_get_voltage()
849 range = vreg->set_points->range; in spmi_regulator_ftsmps426_get_voltage()
857 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_single_map_voltage() local
859 return spmi_regulator_select_voltage(vreg, min_uV, max_uV); in spmi_regulator_single_map_voltage()
865 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_single_range_set_voltage() local
872 return spmi_vreg_write(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &sel, 1); in spmi_regulator_single_range_set_voltage()
877 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_single_range_get_voltage() local
881 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &selector, 1); in spmi_regulator_single_range_get_voltage()
891 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ult_lo_smps_set_voltage() local
895 ret = spmi_sw_selector_to_hw(vreg, selector, &range_sel, &voltage_sel); in spmi_regulator_ult_lo_smps_set_voltage()
909 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_VOLTAGE_SET, in spmi_regulator_ult_lo_smps_set_voltage()
915 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ult_lo_smps_get_voltage() local
919 spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &voltage_sel, 1); in spmi_regulator_ult_lo_smps_get_voltage()
921 range = spmi_regulator_find_range(vreg); in spmi_regulator_ult_lo_smps_get_voltage()
928 return spmi_hw_selector_to_sw(vreg, voltage_sel, range); in spmi_regulator_ult_lo_smps_get_voltage()
934 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_list_voltage() local
938 if (selector >= vreg->set_points->n_voltages) in spmi_regulator_common_list_voltage()
941 for (i = 0; i < vreg->set_points->count; i++) { in spmi_regulator_common_list_voltage()
942 if (selector < vreg->set_points->range[i].n_voltages) { in spmi_regulator_common_list_voltage()
943 uV = selector * vreg->set_points->range[i].step_uV in spmi_regulator_common_list_voltage()
944 + vreg->set_points->range[i].set_point_min_uV; in spmi_regulator_common_list_voltage()
948 selector -= vreg->set_points->range[i].n_voltages; in spmi_regulator_common_list_voltage()
957 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_bypass() local
964 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask); in spmi_regulator_common_set_bypass()
970 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_get_bypass() local
974 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, &val, 1); in spmi_regulator_common_get_bypass()
982 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_get_mode() local
985 spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, &reg, 1); in spmi_regulator_common_get_mode()
1001 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ftsmps426_get_mode() local
1004 spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, &reg, 1); in spmi_regulator_ftsmps426_get_mode()
1019 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_mode() local
1035 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask); in spmi_regulator_common_set_mode()
1041 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ftsmps426_set_mode() local
1059 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask); in spmi_regulator_ftsmps426_set_mode()
1065 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_load() local
1068 if (load_uA >= vreg->hpm_min_load) in spmi_regulator_common_set_load()
1078 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_pull_down() local
1081 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_PULL_DOWN, in spmi_regulator_common_set_pull_down()
1087 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_soft_start() local
1090 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_SOFT_START, in spmi_regulator_common_set_soft_start()
1096 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_set_ilim() local
1097 enum spmi_regulator_logical_type type = vreg->logical_type; in spmi_regulator_set_ilim()
1115 return spmi_vreg_update_bits(vreg, current_reg, reg, mask); in spmi_regulator_set_ilim()
1118 static int spmi_regulator_vs_clear_ocp(struct spmi_regulator *vreg) in spmi_regulator_vs_clear_ocp() argument
1122 ret = spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_ENABLE, in spmi_regulator_vs_clear_ocp()
1125 vreg->vs_enable_time = ktime_get(); in spmi_regulator_vs_clear_ocp()
1127 ret = spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_ENABLE, in spmi_regulator_vs_clear_ocp()
1136 struct spmi_regulator *vreg in spmi_regulator_vs_ocp_work() local
1139 spmi_regulator_vs_clear_ocp(vreg); in spmi_regulator_vs_ocp_work()
1144 struct spmi_regulator *vreg = data; in spmi_regulator_vs_ocp_isr() local
1150 vreg->vs_enable_time); in spmi_regulator_vs_ocp_isr()
1158 vreg->ocp_count = 0; in spmi_regulator_vs_ocp_isr()
1163 vreg->ocp_count++; in spmi_regulator_vs_ocp_isr()
1165 if (vreg->ocp_count == 1) { in spmi_regulator_vs_ocp_isr()
1167 spmi_regulator_vs_clear_ocp(vreg); in spmi_regulator_vs_ocp_isr()
1168 } else if (vreg->ocp_count <= vreg->ocp_max_retries) { in spmi_regulator_vs_ocp_isr()
1170 schedule_delayed_work(&vreg->ocp_work, in spmi_regulator_vs_ocp_isr()
1171 msecs_to_jiffies(vreg->ocp_retry_delay_ms) + 1); in spmi_regulator_vs_ocp_isr()
1173 dev_err(vreg->dev, in spmi_regulator_vs_ocp_isr()
1175 vreg->ocp_count); in spmi_regulator_vs_ocp_isr()
1243 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_saw_set_voltage() local
1247 ret = spmi_sw_selector_to_hw(vreg, selector, &range_sel, &voltage_sel); in spmi_regulator_saw_set_voltage()
1493 static int spmi_regulator_match(struct spmi_regulator *vreg, u16 force_type) in spmi_regulator_match() argument
1501 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_DIG_MAJOR_REV, version, in spmi_regulator_match()
1504 dev_dbg(vreg->dev, "could not read version registers\n"); in spmi_regulator_match()
1528 dev_err(vreg->dev, in spmi_regulator_match()
1530 vreg->desc.name, type, subtype, dig_major_rev); in spmi_regulator_match()
1535 vreg->logical_type = mapping->logical_type; in spmi_regulator_match()
1536 vreg->set_points = mapping->set_points; in spmi_regulator_match()
1537 vreg->hpm_min_load = mapping->hpm_min_load; in spmi_regulator_match()
1538 vreg->desc.ops = mapping->ops; in spmi_regulator_match()
1543 vreg->desc.n_voltages = mapping->set_points->n_voltages; in spmi_regulator_match()
1549 static int spmi_regulator_init_slew_rate(struct spmi_regulator *vreg) in spmi_regulator_init_slew_rate() argument
1556 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_STEP_CTRL, &reg, 1); in spmi_regulator_init_slew_rate()
1558 dev_err(vreg->dev, "spmi read failed, ret=%d\n", ret); in spmi_regulator_init_slew_rate()
1562 range = spmi_regulator_find_range(vreg); in spmi_regulator_init_slew_rate()
1566 switch (vreg->logical_type) { in spmi_regulator_init_slew_rate()
1588 vreg->slew_rate = max(slew_rate, 1); in spmi_regulator_init_slew_rate()
1593 static int spmi_regulator_init_slew_rate_ftsmps426(struct spmi_regulator *vreg, in spmi_regulator_init_slew_rate_ftsmps426() argument
1599 const struct spmi_voltage_range *range = &vreg->set_points->range[0]; in spmi_regulator_init_slew_rate_ftsmps426()
1601 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_STEP_CTRL, &reg, 1); in spmi_regulator_init_slew_rate_ftsmps426()
1603 dev_err(vreg->dev, "spmi read failed, ret=%d\n", ret); in spmi_regulator_init_slew_rate_ftsmps426()
1617 vreg->slew_rate = max(slew_rate, 1); in spmi_regulator_init_slew_rate_ftsmps426()
1622 static int spmi_regulator_init_registers(struct spmi_regulator *vreg, in spmi_regulator_init_registers() argument
1629 type = vreg->logical_type; in spmi_regulator_init_registers()
1631 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, ctrl_reg, 8); in spmi_regulator_init_registers()
1678 ret = spmi_vreg_write(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, ctrl_reg, 8); in spmi_regulator_init_registers()
1689 return spmi_vreg_update_bits(vreg, in spmi_regulator_init_registers()
1698 static void spmi_regulator_get_dt_config(struct spmi_regulator *vreg, in spmi_regulator_get_dt_config() argument
1711 &vreg->ocp_max_retries); in spmi_regulator_get_dt_config()
1713 &vreg->ocp_retry_delay_ms); in spmi_regulator_get_dt_config()
1736 struct spmi_regulator *vreg = config->driver_data; in spmi_regulator_of_parse() local
1740 spmi_regulator_get_dt_config(vreg, node, &data); in spmi_regulator_of_parse()
1742 if (!vreg->ocp_max_retries) in spmi_regulator_of_parse()
1743 vreg->ocp_max_retries = SPMI_VS_OCP_DEFAULT_MAX_RETRIES; in spmi_regulator_of_parse()
1744 if (!vreg->ocp_retry_delay_ms) in spmi_regulator_of_parse()
1745 vreg->ocp_retry_delay_ms = SPMI_VS_OCP_DEFAULT_RETRY_DELAY_MS; in spmi_regulator_of_parse()
1747 ret = spmi_regulator_init_registers(vreg, &data); in spmi_regulator_of_parse()
1753 switch (vreg->logical_type) { in spmi_regulator_of_parse()
1758 ret = spmi_regulator_init_slew_rate(vreg); in spmi_regulator_of_parse()
1763 ret = spmi_regulator_init_slew_rate_ftsmps426(vreg, in spmi_regulator_of_parse()
1769 ret = spmi_regulator_init_slew_rate_ftsmps426(vreg, in spmi_regulator_of_parse()
1778 if (vreg->logical_type != SPMI_REGULATOR_LOGICAL_TYPE_VS) in spmi_regulator_of_parse()
1779 vreg->ocp_irq = 0; in spmi_regulator_of_parse()
1781 if (vreg->ocp_irq) { in spmi_regulator_of_parse()
1782 ret = devm_request_irq(dev, vreg->ocp_irq, in spmi_regulator_of_parse()
1784 vreg); in spmi_regulator_of_parse()
1787 vreg->ocp_irq, ret); in spmi_regulator_of_parse()
1791 INIT_DELAYED_WORK(&vreg->ocp_work, spmi_regulator_vs_ocp_work); in spmi_regulator_of_parse()
1962 struct spmi_regulator *vreg; in qcom_spmi_regulator_probe() local
2005 vreg = devm_kzalloc(dev, sizeof(*vreg), GFP_KERNEL); in qcom_spmi_regulator_probe()
2006 if (!vreg) in qcom_spmi_regulator_probe()
2009 vreg->dev = dev; in qcom_spmi_regulator_probe()
2010 vreg->base = reg->base; in qcom_spmi_regulator_probe()
2011 vreg->regmap = regmap; in qcom_spmi_regulator_probe()
2013 vreg->ocp_irq = platform_get_irq_byname(pdev, reg->ocp); in qcom_spmi_regulator_probe()
2014 if (vreg->ocp_irq < 0) { in qcom_spmi_regulator_probe()
2015 ret = vreg->ocp_irq; in qcom_spmi_regulator_probe()
2019 vreg->desc.id = -1; in qcom_spmi_regulator_probe()
2020 vreg->desc.owner = THIS_MODULE; in qcom_spmi_regulator_probe()
2021 vreg->desc.type = REGULATOR_VOLTAGE; in qcom_spmi_regulator_probe()
2022 vreg->desc.enable_reg = reg->base + SPMI_COMMON_REG_ENABLE; in qcom_spmi_regulator_probe()
2023 vreg->desc.enable_mask = SPMI_COMMON_ENABLE_MASK; in qcom_spmi_regulator_probe()
2024 vreg->desc.enable_val = SPMI_COMMON_ENABLE; in qcom_spmi_regulator_probe()
2025 vreg->desc.name = name = reg->name; in qcom_spmi_regulator_probe()
2026 vreg->desc.supply_name = reg->supply; in qcom_spmi_regulator_probe()
2027 vreg->desc.of_match = reg->name; in qcom_spmi_regulator_probe()
2028 vreg->desc.of_parse_cb = spmi_regulator_of_parse; in qcom_spmi_regulator_probe()
2029 vreg->desc.of_map_mode = spmi_regulator_of_map_mode; in qcom_spmi_regulator_probe()
2031 ret = spmi_regulator_match(vreg, reg->force_type); in qcom_spmi_regulator_probe()
2041 spmi_saw_ops = *(vreg->desc.ops); in qcom_spmi_regulator_probe()
2044 vreg->desc.ops = &spmi_saw_ops; in qcom_spmi_regulator_probe()
2048 if (vreg->set_points && vreg->set_points->count == 1) { in qcom_spmi_regulator_probe()
2050 range = vreg->set_points->range; in qcom_spmi_regulator_probe()
2051 vreg->desc.uV_step = range->step_uV; in qcom_spmi_regulator_probe()
2055 config.driver_data = vreg; in qcom_spmi_regulator_probe()
2057 rdev = devm_regulator_register(dev, &vreg->desc, &config); in qcom_spmi_regulator_probe()
2064 INIT_LIST_HEAD(&vreg->node); in qcom_spmi_regulator_probe()
2065 list_add(&vreg->node, vreg_list); in qcom_spmi_regulator_probe()
2071 list_for_each_entry(vreg, vreg_list, node) in qcom_spmi_regulator_probe()
2072 if (vreg->ocp_irq) in qcom_spmi_regulator_probe()
2073 cancel_delayed_work_sync(&vreg->ocp_work); in qcom_spmi_regulator_probe()
2079 struct spmi_regulator *vreg; in qcom_spmi_regulator_remove() local
2082 list_for_each_entry(vreg, vreg_list, node) in qcom_spmi_regulator_remove()
2083 if (vreg->ocp_irq) in qcom_spmi_regulator_remove()
2084 cancel_delayed_work_sync(&vreg->ocp_work); in qcom_spmi_regulator_remove()