Lines Matching refs:vreg
567 static inline int spmi_vreg_read(struct spmi_regulator *vreg, u16 addr, u8 *buf, in spmi_vreg_read() argument
570 return regmap_bulk_read(vreg->regmap, vreg->base + addr, buf, len); in spmi_vreg_read()
573 static inline int spmi_vreg_write(struct spmi_regulator *vreg, u16 addr, in spmi_vreg_write() argument
576 return regmap_bulk_write(vreg->regmap, vreg->base + addr, buf, len); in spmi_vreg_write()
579 static int spmi_vreg_update_bits(struct spmi_regulator *vreg, u16 addr, u8 val, in spmi_vreg_update_bits() argument
582 return regmap_update_bits(vreg->regmap, vreg->base + addr, mask, val); in spmi_vreg_update_bits()
587 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_vs_enable() local
589 if (vreg->ocp_irq) { in spmi_regulator_vs_enable()
590 vreg->ocp_count = 0; in spmi_regulator_vs_enable()
591 vreg->vs_enable_time = ktime_get(); in spmi_regulator_vs_enable()
599 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_vs_ocp() local
602 return spmi_vreg_write(vreg, SPMI_VS_REG_OCP, ®, 1); in spmi_regulator_vs_ocp()
605 static int spmi_regulator_select_voltage(struct spmi_regulator *vreg, in spmi_regulator_select_voltage() argument
614 lim_min_uV = vreg->set_points->range[0].set_point_min_uV; in spmi_regulator_select_voltage()
616 vreg->set_points->range[vreg->set_points->count - 1].set_point_max_uV; in spmi_regulator_select_voltage()
622 dev_err(vreg->dev, in spmi_regulator_select_voltage()
629 for (i = vreg->set_points->count - 1; i > 0; i--) { in spmi_regulator_select_voltage()
630 range_max_uV = vreg->set_points->range[i - 1].set_point_max_uV; in spmi_regulator_select_voltage()
636 range = &vreg->set_points->range[range_id]; in spmi_regulator_select_voltage()
646 dev_err(vreg->dev, in spmi_regulator_select_voltage()
655 selector += vreg->set_points->range[i].n_voltages; in spmi_regulator_select_voltage()
661 static int spmi_sw_selector_to_hw(struct spmi_regulator *vreg, in spmi_sw_selector_to_hw() argument
668 range = vreg->set_points->range; in spmi_sw_selector_to_hw()
669 end = range + vreg->set_points->count; in spmi_sw_selector_to_hw()
690 static int spmi_hw_selector_to_sw(struct spmi_regulator *vreg, u8 hw_sel, in spmi_hw_selector_to_sw() argument
695 const struct spmi_voltage_range *r = vreg->set_points->range; in spmi_hw_selector_to_sw()
696 const struct spmi_voltage_range *end = r + vreg->set_points->count; in spmi_hw_selector_to_sw()
725 spmi_regulator_find_range(struct spmi_regulator *vreg) in spmi_regulator_find_range() argument
730 range = vreg->set_points->range; in spmi_regulator_find_range()
731 end = range + vreg->set_points->count; in spmi_regulator_find_range()
733 spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, &range_sel, 1); in spmi_regulator_find_range()
742 static int spmi_regulator_select_voltage_same_range(struct spmi_regulator *vreg, in spmi_regulator_select_voltage_same_range() argument
749 range = spmi_regulator_find_range(vreg); in spmi_regulator_select_voltage_same_range()
777 for (i = 0; i < vreg->set_points->count; i++) { in spmi_regulator_select_voltage_same_range()
778 if (uV >= vreg->set_points->range[i].set_point_min_uV in spmi_regulator_select_voltage_same_range()
779 && uV <= vreg->set_points->range[i].set_point_max_uV) { in spmi_regulator_select_voltage_same_range()
781 (uV - vreg->set_points->range[i].set_point_min_uV) in spmi_regulator_select_voltage_same_range()
782 / vreg->set_points->range[i].step_uV; in spmi_regulator_select_voltage_same_range()
786 selector += vreg->set_points->range[i].n_voltages; in spmi_regulator_select_voltage_same_range()
789 if (selector >= vreg->set_points->n_voltages) in spmi_regulator_select_voltage_same_range()
795 return spmi_regulator_select_voltage(vreg, min_uV, max_uV); in spmi_regulator_select_voltage_same_range()
801 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_map_voltage() local
807 return spmi_regulator_select_voltage_same_range(vreg, min_uV, max_uV); in spmi_regulator_common_map_voltage()
813 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_voltage() local
818 ret = spmi_sw_selector_to_hw(vreg, selector, &range_sel, &voltage_sel); in spmi_regulator_common_set_voltage()
824 return spmi_vreg_write(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, buf, 2); in spmi_regulator_common_set_voltage()
833 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ftsmps426_set_voltage() local
841 return spmi_vreg_write(vreg, SPMI_FTSMPS426_REG_VOLTAGE_LSB, buf, 2); in spmi_regulator_ftsmps426_set_voltage()
847 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_set_voltage_time_sel() local
853 return DIV_ROUND_UP(diff_uV, vreg->slew_rate); in spmi_regulator_set_voltage_time_sel()
858 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_get_voltage() local
862 spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &voltage_sel, 1); in spmi_regulator_common_get_voltage()
864 range = spmi_regulator_find_range(vreg); in spmi_regulator_common_get_voltage()
868 return spmi_hw_selector_to_sw(vreg, voltage_sel, range); in spmi_regulator_common_get_voltage()
873 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ftsmps426_get_voltage() local
878 spmi_vreg_read(vreg, SPMI_FTSMPS426_REG_VOLTAGE_LSB, buf, 2); in spmi_regulator_ftsmps426_get_voltage()
881 range = vreg->set_points->range; in spmi_regulator_ftsmps426_get_voltage()
889 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_single_map_voltage() local
891 return spmi_regulator_select_voltage(vreg, min_uV, max_uV); in spmi_regulator_single_map_voltage()
897 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_single_range_set_voltage() local
904 return spmi_vreg_write(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &sel, 1); in spmi_regulator_single_range_set_voltage()
909 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_single_range_get_voltage() local
913 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &selector, 1); in spmi_regulator_single_range_get_voltage()
923 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ult_lo_smps_set_voltage() local
927 ret = spmi_sw_selector_to_hw(vreg, selector, &range_sel, &voltage_sel); in spmi_regulator_ult_lo_smps_set_voltage()
941 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_VOLTAGE_SET, in spmi_regulator_ult_lo_smps_set_voltage()
947 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ult_lo_smps_get_voltage() local
951 spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &voltage_sel, 1); in spmi_regulator_ult_lo_smps_get_voltage()
953 range = spmi_regulator_find_range(vreg); in spmi_regulator_ult_lo_smps_get_voltage()
960 return spmi_hw_selector_to_sw(vreg, voltage_sel, range); in spmi_regulator_ult_lo_smps_get_voltage()
966 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_list_voltage() local
970 if (selector >= vreg->set_points->n_voltages) in spmi_regulator_common_list_voltage()
973 for (i = 0; i < vreg->set_points->count; i++) { in spmi_regulator_common_list_voltage()
974 if (selector < vreg->set_points->range[i].n_voltages) { in spmi_regulator_common_list_voltage()
975 uV = selector * vreg->set_points->range[i].step_uV in spmi_regulator_common_list_voltage()
976 + vreg->set_points->range[i].set_point_min_uV; in spmi_regulator_common_list_voltage()
980 selector -= vreg->set_points->range[i].n_voltages; in spmi_regulator_common_list_voltage()
989 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_bypass() local
996 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask); in spmi_regulator_common_set_bypass()
1002 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_get_bypass() local
1006 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, &val, 1); in spmi_regulator_common_get_bypass()
1014 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_get_mode() local
1017 spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, ®, 1); in spmi_regulator_common_get_mode()
1033 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ftsmps426_get_mode() local
1036 spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, ®, 1); in spmi_regulator_ftsmps426_get_mode()
1051 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_mode() local
1067 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask); in spmi_regulator_common_set_mode()
1073 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ftsmps426_set_mode() local
1091 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask); in spmi_regulator_ftsmps426_set_mode()
1097 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_load() local
1100 if (load_uA >= vreg->hpm_min_load) in spmi_regulator_common_set_load()
1110 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_pull_down() local
1113 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_PULL_DOWN, in spmi_regulator_common_set_pull_down()
1119 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_soft_start() local
1122 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_SOFT_START, in spmi_regulator_common_set_soft_start()
1128 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_set_ilim() local
1129 enum spmi_regulator_logical_type type = vreg->logical_type; in spmi_regulator_set_ilim()
1147 return spmi_vreg_update_bits(vreg, current_reg, reg, mask); in spmi_regulator_set_ilim()
1150 static int spmi_regulator_vs_clear_ocp(struct spmi_regulator *vreg) in spmi_regulator_vs_clear_ocp() argument
1154 ret = spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_ENABLE, in spmi_regulator_vs_clear_ocp()
1157 vreg->vs_enable_time = ktime_get(); in spmi_regulator_vs_clear_ocp()
1159 ret = spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_ENABLE, in spmi_regulator_vs_clear_ocp()
1168 struct spmi_regulator *vreg in spmi_regulator_vs_ocp_work() local
1171 spmi_regulator_vs_clear_ocp(vreg); in spmi_regulator_vs_ocp_work()
1176 struct spmi_regulator *vreg = data; in spmi_regulator_vs_ocp_isr() local
1182 vreg->vs_enable_time); in spmi_regulator_vs_ocp_isr()
1190 vreg->ocp_count = 0; in spmi_regulator_vs_ocp_isr()
1195 vreg->ocp_count++; in spmi_regulator_vs_ocp_isr()
1197 if (vreg->ocp_count == 1) { in spmi_regulator_vs_ocp_isr()
1199 spmi_regulator_vs_clear_ocp(vreg); in spmi_regulator_vs_ocp_isr()
1200 } else if (vreg->ocp_count <= vreg->ocp_max_retries) { in spmi_regulator_vs_ocp_isr()
1202 schedule_delayed_work(&vreg->ocp_work, in spmi_regulator_vs_ocp_isr()
1203 msecs_to_jiffies(vreg->ocp_retry_delay_ms) + 1); in spmi_regulator_vs_ocp_isr()
1205 dev_err(vreg->dev, in spmi_regulator_vs_ocp_isr()
1207 vreg->ocp_count); in spmi_regulator_vs_ocp_isr()
1275 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_saw_set_voltage() local
1279 ret = spmi_sw_selector_to_hw(vreg, selector, &range_sel, &voltage_sel); in spmi_regulator_saw_set_voltage()
1549 static int spmi_regulator_match(struct spmi_regulator *vreg, u16 force_type) in spmi_regulator_match() argument
1557 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_DIG_MAJOR_REV, version, in spmi_regulator_match()
1560 dev_dbg(vreg->dev, "could not read version registers\n"); in spmi_regulator_match()
1584 dev_err(vreg->dev, in spmi_regulator_match()
1586 vreg->desc.name, type, subtype, dig_major_rev); in spmi_regulator_match()
1591 vreg->logical_type = mapping->logical_type; in spmi_regulator_match()
1592 vreg->set_points = mapping->set_points; in spmi_regulator_match()
1593 vreg->hpm_min_load = mapping->hpm_min_load; in spmi_regulator_match()
1594 vreg->desc.ops = mapping->ops; in spmi_regulator_match()
1599 vreg->desc.n_voltages = mapping->set_points->n_voltages; in spmi_regulator_match()
1605 static int spmi_regulator_init_slew_rate(struct spmi_regulator *vreg) in spmi_regulator_init_slew_rate() argument
1612 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_STEP_CTRL, ®, 1); in spmi_regulator_init_slew_rate()
1614 dev_err(vreg->dev, "spmi read failed, ret=%d\n", ret); in spmi_regulator_init_slew_rate()
1618 range = spmi_regulator_find_range(vreg); in spmi_regulator_init_slew_rate()
1622 switch (vreg->logical_type) { in spmi_regulator_init_slew_rate()
1644 vreg->slew_rate = max(slew_rate, 1); in spmi_regulator_init_slew_rate()
1649 static int spmi_regulator_init_slew_rate_ftsmps426(struct spmi_regulator *vreg, in spmi_regulator_init_slew_rate_ftsmps426() argument
1655 const struct spmi_voltage_range *range = &vreg->set_points->range[0]; in spmi_regulator_init_slew_rate_ftsmps426()
1657 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_STEP_CTRL, ®, 1); in spmi_regulator_init_slew_rate_ftsmps426()
1659 dev_err(vreg->dev, "spmi read failed, ret=%d\n", ret); in spmi_regulator_init_slew_rate_ftsmps426()
1673 vreg->slew_rate = max(slew_rate, 1); in spmi_regulator_init_slew_rate_ftsmps426()
1678 static int spmi_regulator_init_registers(struct spmi_regulator *vreg, in spmi_regulator_init_registers() argument
1685 type = vreg->logical_type; in spmi_regulator_init_registers()
1687 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, ctrl_reg, 8); in spmi_regulator_init_registers()
1732 ret = spmi_vreg_write(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, ctrl_reg, 8); in spmi_regulator_init_registers()
1743 return spmi_vreg_update_bits(vreg, in spmi_regulator_init_registers()
1752 static void spmi_regulator_get_dt_config(struct spmi_regulator *vreg, in spmi_regulator_get_dt_config() argument
1765 &vreg->ocp_max_retries); in spmi_regulator_get_dt_config()
1767 &vreg->ocp_retry_delay_ms); in spmi_regulator_get_dt_config()
1790 struct spmi_regulator *vreg = config->driver_data; in spmi_regulator_of_parse() local
1794 spmi_regulator_get_dt_config(vreg, node, &data); in spmi_regulator_of_parse()
1796 if (!vreg->ocp_max_retries) in spmi_regulator_of_parse()
1797 vreg->ocp_max_retries = SPMI_VS_OCP_DEFAULT_MAX_RETRIES; in spmi_regulator_of_parse()
1798 if (!vreg->ocp_retry_delay_ms) in spmi_regulator_of_parse()
1799 vreg->ocp_retry_delay_ms = SPMI_VS_OCP_DEFAULT_RETRY_DELAY_MS; in spmi_regulator_of_parse()
1801 ret = spmi_regulator_init_registers(vreg, &data); in spmi_regulator_of_parse()
1807 switch (vreg->logical_type) { in spmi_regulator_of_parse()
1812 ret = spmi_regulator_init_slew_rate(vreg); in spmi_regulator_of_parse()
1817 ret = spmi_regulator_init_slew_rate_ftsmps426(vreg, in spmi_regulator_of_parse()
1823 ret = spmi_regulator_init_slew_rate_ftsmps426(vreg, in spmi_regulator_of_parse()
1832 if (vreg->logical_type != SPMI_REGULATOR_LOGICAL_TYPE_VS) in spmi_regulator_of_parse()
1833 vreg->ocp_irq = 0; in spmi_regulator_of_parse()
1835 if (vreg->ocp_irq) { in spmi_regulator_of_parse()
1836 ret = devm_request_irq(dev, vreg->ocp_irq, in spmi_regulator_of_parse()
1838 vreg); in spmi_regulator_of_parse()
1841 vreg->ocp_irq, ret); in spmi_regulator_of_parse()
1845 INIT_DELAYED_WORK(&vreg->ocp_work, spmi_regulator_vs_ocp_work); in spmi_regulator_of_parse()
2108 struct spmi_regulator *vreg; in qcom_spmi_regulator_probe() local
2151 vreg = devm_kzalloc(dev, sizeof(*vreg), GFP_KERNEL); in qcom_spmi_regulator_probe()
2152 if (!vreg) in qcom_spmi_regulator_probe()
2155 vreg->dev = dev; in qcom_spmi_regulator_probe()
2156 vreg->base = reg->base; in qcom_spmi_regulator_probe()
2157 vreg->regmap = regmap; in qcom_spmi_regulator_probe()
2159 vreg->ocp_irq = platform_get_irq_byname(pdev, reg->ocp); in qcom_spmi_regulator_probe()
2160 if (vreg->ocp_irq < 0) { in qcom_spmi_regulator_probe()
2161 ret = vreg->ocp_irq; in qcom_spmi_regulator_probe()
2165 vreg->desc.id = -1; in qcom_spmi_regulator_probe()
2166 vreg->desc.owner = THIS_MODULE; in qcom_spmi_regulator_probe()
2167 vreg->desc.type = REGULATOR_VOLTAGE; in qcom_spmi_regulator_probe()
2168 vreg->desc.enable_reg = reg->base + SPMI_COMMON_REG_ENABLE; in qcom_spmi_regulator_probe()
2169 vreg->desc.enable_mask = SPMI_COMMON_ENABLE_MASK; in qcom_spmi_regulator_probe()
2170 vreg->desc.enable_val = SPMI_COMMON_ENABLE; in qcom_spmi_regulator_probe()
2171 vreg->desc.name = name = reg->name; in qcom_spmi_regulator_probe()
2172 vreg->desc.supply_name = reg->supply; in qcom_spmi_regulator_probe()
2173 vreg->desc.of_match = reg->name; in qcom_spmi_regulator_probe()
2174 vreg->desc.of_parse_cb = spmi_regulator_of_parse; in qcom_spmi_regulator_probe()
2175 vreg->desc.of_map_mode = spmi_regulator_of_map_mode; in qcom_spmi_regulator_probe()
2177 ret = spmi_regulator_match(vreg, reg->force_type); in qcom_spmi_regulator_probe()
2187 spmi_saw_ops = *(vreg->desc.ops); in qcom_spmi_regulator_probe()
2190 vreg->desc.ops = &spmi_saw_ops; in qcom_spmi_regulator_probe()
2194 if (vreg->set_points && vreg->set_points->count == 1) { in qcom_spmi_regulator_probe()
2196 range = vreg->set_points->range; in qcom_spmi_regulator_probe()
2197 vreg->desc.uV_step = range->step_uV; in qcom_spmi_regulator_probe()
2201 config.driver_data = vreg; in qcom_spmi_regulator_probe()
2203 rdev = devm_regulator_register(dev, &vreg->desc, &config); in qcom_spmi_regulator_probe()
2210 INIT_LIST_HEAD(&vreg->node); in qcom_spmi_regulator_probe()
2211 list_add(&vreg->node, vreg_list); in qcom_spmi_regulator_probe()
2217 list_for_each_entry(vreg, vreg_list, node) in qcom_spmi_regulator_probe()
2218 if (vreg->ocp_irq) in qcom_spmi_regulator_probe()
2219 cancel_delayed_work_sync(&vreg->ocp_work); in qcom_spmi_regulator_probe()
2225 struct spmi_regulator *vreg; in qcom_spmi_regulator_remove() local
2228 list_for_each_entry(vreg, vreg_list, node) in qcom_spmi_regulator_remove()
2229 if (vreg->ocp_irq) in qcom_spmi_regulator_remove()
2230 cancel_delayed_work_sync(&vreg->ocp_work); in qcom_spmi_regulator_remove()