Lines Matching refs:vreg

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