Lines Matching refs:vreg
624 static inline int spmi_vreg_read(struct spmi_regulator *vreg, u16 addr, u8 *buf,
627 return regmap_bulk_read(vreg->regmap, vreg->base + addr, buf, len);
630 static inline int spmi_vreg_write(struct spmi_regulator *vreg, u16 addr,
633 return regmap_bulk_write(vreg->regmap, vreg->base + addr, buf, len);
636 static int spmi_vreg_update_bits(struct spmi_regulator *vreg, u16 addr, u8 val,
639 return regmap_update_bits(vreg->regmap, vreg->base + addr, mask, val);
644 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
646 if (vreg->ocp_irq) {
647 vreg->ocp_count = 0;
648 vreg->vs_enable_time = ktime_get();
657 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
663 return spmi_vreg_write(vreg, SPMI_VS_REG_OCP, ®, 1);
666 static int spmi_regulator_select_voltage(struct spmi_regulator *vreg,
675 lim_min_uV = vreg->set_points->range[0].set_point_min_uV;
677 vreg->set_points->range[vreg->set_points->count - 1].set_point_max_uV;
683 dev_err(vreg->dev,
690 for (i = vreg->set_points->count - 1; i > 0; i--) {
691 range_max_uV = vreg->set_points->range[i - 1].set_point_max_uV;
697 range = &vreg->set_points->range[range_id];
707 dev_err(vreg->dev,
716 selector += vreg->set_points->range[i].n_voltages;
722 static int spmi_sw_selector_to_hw(struct spmi_regulator *vreg,
729 range = vreg->set_points->range;
730 end = range + vreg->set_points->count;
751 static int spmi_hw_selector_to_sw(struct spmi_regulator *vreg, u8 hw_sel,
756 const struct spmi_voltage_range *r = vreg->set_points->range;
757 const struct spmi_voltage_range *end = r + vreg->set_points->count;
786 spmi_regulator_find_range(struct spmi_regulator *vreg)
791 range = vreg->set_points->range;
792 end = range + vreg->set_points->count;
794 spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, &range_sel, 1);
803 static int spmi_regulator_select_voltage_same_range(struct spmi_regulator *vreg,
810 range = spmi_regulator_find_range(vreg);
838 for (i = 0; i < vreg->set_points->count; i++) {
839 if (uV >= vreg->set_points->range[i].set_point_min_uV
840 && uV <= vreg->set_points->range[i].set_point_max_uV) {
842 (uV - vreg->set_points->range[i].set_point_min_uV)
843 / vreg->set_points->range[i].step_uV;
847 selector += vreg->set_points->range[i].n_voltages;
850 if (selector >= vreg->set_points->n_voltages)
856 return spmi_regulator_select_voltage(vreg, min_uV, max_uV);
862 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
868 return spmi_regulator_select_voltage_same_range(vreg, min_uV, max_uV);
874 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
879 ret = spmi_sw_selector_to_hw(vreg, selector, &range_sel, &voltage_sel);
885 return spmi_vreg_write(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, buf, 2);
894 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
902 return spmi_vreg_write(vreg, SPMI_FTSMPS426_REG_VOLTAGE_LSB, buf, 2);
908 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
914 return DIV_ROUND_UP(diff_uV, vreg->slew_rate);
919 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
923 spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &voltage_sel, 1);
925 range = spmi_regulator_find_range(vreg);
929 return spmi_hw_selector_to_sw(vreg, voltage_sel, range);
934 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
939 spmi_vreg_read(vreg, SPMI_FTSMPS426_REG_VOLTAGE_LSB, buf, 2);
942 range = vreg->set_points->range;
950 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
952 return spmi_regulator_select_voltage(vreg, min_uV, max_uV);
958 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
965 return spmi_vreg_write(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &sel, 1);
970 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
974 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &selector, 1);
984 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
988 ret = spmi_sw_selector_to_hw(vreg, selector, &range_sel, &voltage_sel);
1002 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_VOLTAGE_SET,
1008 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
1012 spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &voltage_sel, 1);
1014 range = spmi_regulator_find_range(vreg);
1021 return spmi_hw_selector_to_sw(vreg, voltage_sel, range);
1027 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
1031 if (selector >= vreg->set_points->n_voltages)
1034 for (i = 0; i < vreg->set_points->count; i++) {
1035 if (selector < vreg->set_points->range[i].n_voltages) {
1036 uV = selector * vreg->set_points->range[i].step_uV
1037 + vreg->set_points->range[i].set_point_min_uV;
1041 selector -= vreg->set_points->range[i].n_voltages;
1050 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
1057 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask);
1063 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
1067 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, &val, 1);
1075 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
1078 spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, ®, 1);
1094 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
1097 spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, ®, 1);
1111 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
1114 spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, ®, 1);
1129 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
1145 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask);
1151 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
1169 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask);
1175 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
1187 val = vreg->logical_type ==
1196 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask);
1202 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
1205 if (load_uA >= vreg->hpm_min_load)
1215 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
1218 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_PULL_DOWN,
1224 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
1227 return spmi_vreg_update_bits(vreg, SPMI_HFSMPS_REG_PULL_DOWN,
1233 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
1236 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_SOFT_START,
1242 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
1243 enum spmi_regulator_logical_type type = vreg->logical_type;
1261 return spmi_vreg_update_bits(vreg, current_reg, reg, mask);
1264 static int spmi_regulator_vs_clear_ocp(struct spmi_regulator *vreg)
1268 ret = spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_ENABLE,
1271 vreg->vs_enable_time = ktime_get();
1273 ret = spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_ENABLE,
1282 struct spmi_regulator *vreg
1285 spmi_regulator_vs_clear_ocp(vreg);
1290 struct spmi_regulator *vreg = data;
1296 vreg->vs_enable_time);
1304 vreg->ocp_count = 0;
1309 vreg->ocp_count++;
1311 if (vreg->ocp_count == 1) {
1313 spmi_regulator_vs_clear_ocp(vreg);
1314 } else if (vreg->ocp_count <= vreg->ocp_max_retries) {
1316 schedule_delayed_work(&vreg->ocp_work,
1317 msecs_to_jiffies(vreg->ocp_retry_delay_ms) + 1);
1319 dev_err(vreg->dev,
1321 vreg->ocp_count);
1389 struct spmi_regulator *vreg = rdev_get_drvdata(rdev);
1393 ret = spmi_sw_selector_to_hw(vreg, selector, &range_sel, &voltage_sel);
1693 static int spmi_regulator_match(struct spmi_regulator *vreg, u16 force_type)
1701 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_DIG_MAJOR_REV, version,
1704 dev_dbg(vreg->dev, "could not read version registers\n");
1728 dev_err(vreg->dev,
1730 vreg->desc.name, type, subtype, dig_major_rev);
1735 vreg->logical_type = mapping->logical_type;
1736 vreg->set_points = mapping->set_points;
1737 vreg->hpm_min_load = mapping->hpm_min_load;
1738 vreg->desc.ops = mapping->ops;
1743 vreg->desc.n_voltages = mapping->set_points->n_voltages;
1749 static int spmi_regulator_init_slew_rate(struct spmi_regulator *vreg)
1756 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_STEP_CTRL, ®, 1);
1758 dev_err(vreg->dev, "spmi read failed, ret=%d\n", ret);
1762 range = spmi_regulator_find_range(vreg);
1766 switch (vreg->logical_type) {
1788 vreg->slew_rate = max(slew_rate, 1);
1793 static int spmi_regulator_init_slew_rate_ftsmps426(struct spmi_regulator *vreg,
1799 const struct spmi_voltage_range *range = &vreg->set_points->range[0];
1801 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_STEP_CTRL, ®, 1);
1803 dev_err(vreg->dev, "spmi read failed, ret=%d\n", ret);
1817 vreg->slew_rate = max(slew_rate, 1);
1822 static int spmi_regulator_init_slew_rate_hfsmps(struct spmi_regulator *vreg)
1828 ret = spmi_vreg_read(vreg, SPMI_HFSMPS_REG_STEP_CTRL, ®, 1);
1830 dev_err(vreg->dev, "spmi read failed, ret=%d\n", ret);
1837 vreg->slew_rate = SPMI_HFSMPS_SLEW_RATE_38p4 >> delay;
1842 static int spmi_regulator_init_registers(struct spmi_regulator *vreg,
1849 type = vreg->logical_type;
1851 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, ctrl_reg, 8);
1896 ret = spmi_vreg_write(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, ctrl_reg, 8);
1907 return spmi_vreg_update_bits(vreg,
1916 static void spmi_regulator_get_dt_config(struct spmi_regulator *vreg,
1929 &vreg->ocp_max_retries);
1931 &vreg->ocp_retry_delay_ms);
1954 struct spmi_regulator *vreg = config->driver_data;
1958 spmi_regulator_get_dt_config(vreg, node, &data);
1960 if (!vreg->ocp_max_retries)
1961 vreg->ocp_max_retries = SPMI_VS_OCP_DEFAULT_MAX_RETRIES;
1962 if (!vreg->ocp_retry_delay_ms)
1963 vreg->ocp_retry_delay_ms = SPMI_VS_OCP_DEFAULT_RETRY_DELAY_MS;
1965 ret = spmi_regulator_init_registers(vreg, &data);
1971 switch (vreg->logical_type) {
1976 ret = spmi_regulator_init_slew_rate(vreg);
1981 ret = spmi_regulator_init_slew_rate_ftsmps426(vreg,
1987 ret = spmi_regulator_init_slew_rate_ftsmps426(vreg,
1994 ret = spmi_regulator_init_slew_rate_hfsmps(vreg);
2002 if (vreg->logical_type != SPMI_REGULATOR_LOGICAL_TYPE_VS)
2003 vreg->ocp_irq = 0;
2005 if (vreg->ocp_irq) {
2006 ret = devm_request_irq(dev, vreg->ocp_irq,
2008 vreg);
2011 vreg->ocp_irq, ret);
2015 ret = devm_delayed_work_autocancel(dev, &vreg->ocp_work,
2378 struct spmi_regulator *vreg;
2421 vreg = devm_kzalloc(dev, sizeof(*vreg), GFP_KERNEL);
2422 if (!vreg)
2425 vreg->dev = dev;
2426 vreg->base = reg->base;
2427 vreg->regmap = regmap;
2429 vreg->ocp_irq = platform_get_irq_byname(pdev, reg->ocp);
2430 if (vreg->ocp_irq < 0)
2431 return vreg->ocp_irq;
2433 vreg->desc.id = -1;
2434 vreg->desc.owner = THIS_MODULE;
2435 vreg->desc.type = REGULATOR_VOLTAGE;
2436 vreg->desc.enable_reg = reg->base + SPMI_COMMON_REG_ENABLE;
2437 vreg->desc.enable_mask = SPMI_COMMON_ENABLE_MASK;
2438 vreg->desc.enable_val = SPMI_COMMON_ENABLE;
2439 vreg->desc.name = name = reg->name;
2440 vreg->desc.supply_name = reg->supply;
2441 vreg->desc.of_match = reg->name;
2442 vreg->desc.of_parse_cb = spmi_regulator_of_parse;
2443 vreg->desc.of_map_mode = spmi_regulator_of_map_mode;
2445 ret = spmi_regulator_match(vreg, reg->force_type);
2455 spmi_saw_ops = *(vreg->desc.ops);
2458 vreg->desc.ops = &spmi_saw_ops;
2462 if (vreg->set_points && vreg->set_points->count == 1) {
2464 range = vreg->set_points->range;
2465 vreg->desc.uV_step = range->step_uV;
2469 config.driver_data = vreg;
2471 rdev = devm_regulator_register(dev, &vreg->desc, &config);
2477 INIT_LIST_HEAD(&vreg->node);
2478 list_add(&vreg->node, vreg_list);