Lines Matching refs:vreg

568 static inline int spmi_vreg_read(struct spmi_regulator *vreg, u16 addr, u8 *buf,  in spmi_vreg_read()  argument
571 return regmap_bulk_read(vreg->regmap, vreg->base + addr, buf, len); in spmi_vreg_read()
574 static inline int spmi_vreg_write(struct spmi_regulator *vreg, u16 addr, in spmi_vreg_write() argument
577 return regmap_bulk_write(vreg->regmap, vreg->base + addr, buf, len); in spmi_vreg_write()
580 static int spmi_vreg_update_bits(struct spmi_regulator *vreg, u16 addr, u8 val, in spmi_vreg_update_bits() argument
583 return regmap_update_bits(vreg->regmap, vreg->base + addr, mask, val); in spmi_vreg_update_bits()
588 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_vs_enable() local
590 if (vreg->ocp_irq) { in spmi_regulator_vs_enable()
591 vreg->ocp_count = 0; in spmi_regulator_vs_enable()
592 vreg->vs_enable_time = ktime_get(); in spmi_regulator_vs_enable()
601 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_vs_ocp() local
607 return spmi_vreg_write(vreg, SPMI_VS_REG_OCP, &reg, 1); in spmi_regulator_vs_ocp()
610 static int spmi_regulator_select_voltage(struct spmi_regulator *vreg, in spmi_regulator_select_voltage() argument
619 lim_min_uV = vreg->set_points->range[0].set_point_min_uV; in spmi_regulator_select_voltage()
621 vreg->set_points->range[vreg->set_points->count - 1].set_point_max_uV; in spmi_regulator_select_voltage()
627 dev_err(vreg->dev, in spmi_regulator_select_voltage()
634 for (i = vreg->set_points->count - 1; i > 0; i--) { in spmi_regulator_select_voltage()
635 range_max_uV = vreg->set_points->range[i - 1].set_point_max_uV; in spmi_regulator_select_voltage()
641 range = &vreg->set_points->range[range_id]; in spmi_regulator_select_voltage()
651 dev_err(vreg->dev, in spmi_regulator_select_voltage()
660 selector += vreg->set_points->range[i].n_voltages; in spmi_regulator_select_voltage()
666 static int spmi_sw_selector_to_hw(struct spmi_regulator *vreg, in spmi_sw_selector_to_hw() argument
673 range = vreg->set_points->range; in spmi_sw_selector_to_hw()
674 end = range + vreg->set_points->count; in spmi_sw_selector_to_hw()
695 static int spmi_hw_selector_to_sw(struct spmi_regulator *vreg, u8 hw_sel, in spmi_hw_selector_to_sw() argument
700 const struct spmi_voltage_range *r = vreg->set_points->range; in spmi_hw_selector_to_sw()
701 const struct spmi_voltage_range *end = r + vreg->set_points->count; in spmi_hw_selector_to_sw()
730 spmi_regulator_find_range(struct spmi_regulator *vreg) in spmi_regulator_find_range() argument
735 range = vreg->set_points->range; in spmi_regulator_find_range()
736 end = range + vreg->set_points->count; in spmi_regulator_find_range()
738 spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, &range_sel, 1); in spmi_regulator_find_range()
747 static int spmi_regulator_select_voltage_same_range(struct spmi_regulator *vreg, in spmi_regulator_select_voltage_same_range() argument
754 range = spmi_regulator_find_range(vreg); in spmi_regulator_select_voltage_same_range()
782 for (i = 0; i < vreg->set_points->count; i++) { in spmi_regulator_select_voltage_same_range()
783 if (uV >= vreg->set_points->range[i].set_point_min_uV in spmi_regulator_select_voltage_same_range()
784 && uV <= vreg->set_points->range[i].set_point_max_uV) { in spmi_regulator_select_voltage_same_range()
786 (uV - vreg->set_points->range[i].set_point_min_uV) in spmi_regulator_select_voltage_same_range()
787 / vreg->set_points->range[i].step_uV; in spmi_regulator_select_voltage_same_range()
791 selector += vreg->set_points->range[i].n_voltages; in spmi_regulator_select_voltage_same_range()
794 if (selector >= vreg->set_points->n_voltages) in spmi_regulator_select_voltage_same_range()
800 return spmi_regulator_select_voltage(vreg, min_uV, max_uV); in spmi_regulator_select_voltage_same_range()
806 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_map_voltage() local
812 return spmi_regulator_select_voltage_same_range(vreg, min_uV, max_uV); in spmi_regulator_common_map_voltage()
818 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_voltage() local
823 ret = spmi_sw_selector_to_hw(vreg, selector, &range_sel, &voltage_sel); in spmi_regulator_common_set_voltage()
829 return spmi_vreg_write(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, buf, 2); in spmi_regulator_common_set_voltage()
838 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ftsmps426_set_voltage() local
846 return spmi_vreg_write(vreg, SPMI_FTSMPS426_REG_VOLTAGE_LSB, buf, 2); in spmi_regulator_ftsmps426_set_voltage()
852 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_set_voltage_time_sel() local
858 return DIV_ROUND_UP(diff_uV, vreg->slew_rate); in spmi_regulator_set_voltage_time_sel()
863 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_get_voltage() local
867 spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &voltage_sel, 1); in spmi_regulator_common_get_voltage()
869 range = spmi_regulator_find_range(vreg); in spmi_regulator_common_get_voltage()
873 return spmi_hw_selector_to_sw(vreg, voltage_sel, range); in spmi_regulator_common_get_voltage()
878 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ftsmps426_get_voltage() local
883 spmi_vreg_read(vreg, SPMI_FTSMPS426_REG_VOLTAGE_LSB, buf, 2); in spmi_regulator_ftsmps426_get_voltage()
886 range = vreg->set_points->range; in spmi_regulator_ftsmps426_get_voltage()
894 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_single_map_voltage() local
896 return spmi_regulator_select_voltage(vreg, min_uV, max_uV); in spmi_regulator_single_map_voltage()
902 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_single_range_set_voltage() local
909 return spmi_vreg_write(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &sel, 1); in spmi_regulator_single_range_set_voltage()
914 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_single_range_get_voltage() local
918 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &selector, 1); in spmi_regulator_single_range_get_voltage()
928 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ult_lo_smps_set_voltage() local
932 ret = spmi_sw_selector_to_hw(vreg, selector, &range_sel, &voltage_sel); in spmi_regulator_ult_lo_smps_set_voltage()
946 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_VOLTAGE_SET, in spmi_regulator_ult_lo_smps_set_voltage()
952 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ult_lo_smps_get_voltage() local
956 spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_SET, &voltage_sel, 1); in spmi_regulator_ult_lo_smps_get_voltage()
958 range = spmi_regulator_find_range(vreg); in spmi_regulator_ult_lo_smps_get_voltage()
965 return spmi_hw_selector_to_sw(vreg, voltage_sel, range); in spmi_regulator_ult_lo_smps_get_voltage()
971 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_list_voltage() local
975 if (selector >= vreg->set_points->n_voltages) in spmi_regulator_common_list_voltage()
978 for (i = 0; i < vreg->set_points->count; i++) { in spmi_regulator_common_list_voltage()
979 if (selector < vreg->set_points->range[i].n_voltages) { in spmi_regulator_common_list_voltage()
980 uV = selector * vreg->set_points->range[i].step_uV in spmi_regulator_common_list_voltage()
981 + vreg->set_points->range[i].set_point_min_uV; in spmi_regulator_common_list_voltage()
985 selector -= vreg->set_points->range[i].n_voltages; in spmi_regulator_common_list_voltage()
994 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_bypass() local
1001 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask); in spmi_regulator_common_set_bypass()
1007 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_get_bypass() local
1011 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, &val, 1); in spmi_regulator_common_get_bypass()
1019 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_get_mode() local
1022 spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, &reg, 1); in spmi_regulator_common_get_mode()
1038 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ftsmps426_get_mode() local
1041 spmi_vreg_read(vreg, SPMI_COMMON_REG_MODE, &reg, 1); in spmi_regulator_ftsmps426_get_mode()
1056 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_mode() local
1072 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask); in spmi_regulator_common_set_mode()
1078 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_ftsmps426_set_mode() local
1096 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_MODE, val, mask); in spmi_regulator_ftsmps426_set_mode()
1102 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_load() local
1105 if (load_uA >= vreg->hpm_min_load) in spmi_regulator_common_set_load()
1115 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_pull_down() local
1118 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_PULL_DOWN, in spmi_regulator_common_set_pull_down()
1124 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_common_set_soft_start() local
1127 return spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_SOFT_START, in spmi_regulator_common_set_soft_start()
1133 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_set_ilim() local
1134 enum spmi_regulator_logical_type type = vreg->logical_type; in spmi_regulator_set_ilim()
1152 return spmi_vreg_update_bits(vreg, current_reg, reg, mask); in spmi_regulator_set_ilim()
1155 static int spmi_regulator_vs_clear_ocp(struct spmi_regulator *vreg) in spmi_regulator_vs_clear_ocp() argument
1159 ret = spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_ENABLE, in spmi_regulator_vs_clear_ocp()
1162 vreg->vs_enable_time = ktime_get(); in spmi_regulator_vs_clear_ocp()
1164 ret = spmi_vreg_update_bits(vreg, SPMI_COMMON_REG_ENABLE, in spmi_regulator_vs_clear_ocp()
1173 struct spmi_regulator *vreg in spmi_regulator_vs_ocp_work() local
1176 spmi_regulator_vs_clear_ocp(vreg); in spmi_regulator_vs_ocp_work()
1181 struct spmi_regulator *vreg = data; in spmi_regulator_vs_ocp_isr() local
1187 vreg->vs_enable_time); in spmi_regulator_vs_ocp_isr()
1195 vreg->ocp_count = 0; in spmi_regulator_vs_ocp_isr()
1200 vreg->ocp_count++; in spmi_regulator_vs_ocp_isr()
1202 if (vreg->ocp_count == 1) { in spmi_regulator_vs_ocp_isr()
1204 spmi_regulator_vs_clear_ocp(vreg); in spmi_regulator_vs_ocp_isr()
1205 } else if (vreg->ocp_count <= vreg->ocp_max_retries) { in spmi_regulator_vs_ocp_isr()
1207 schedule_delayed_work(&vreg->ocp_work, in spmi_regulator_vs_ocp_isr()
1208 msecs_to_jiffies(vreg->ocp_retry_delay_ms) + 1); in spmi_regulator_vs_ocp_isr()
1210 dev_err(vreg->dev, in spmi_regulator_vs_ocp_isr()
1212 vreg->ocp_count); in spmi_regulator_vs_ocp_isr()
1280 struct spmi_regulator *vreg = rdev_get_drvdata(rdev); in spmi_regulator_saw_set_voltage() local
1284 ret = spmi_sw_selector_to_hw(vreg, selector, &range_sel, &voltage_sel); in spmi_regulator_saw_set_voltage()
1556 static int spmi_regulator_match(struct spmi_regulator *vreg, u16 force_type) in spmi_regulator_match() argument
1564 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_DIG_MAJOR_REV, version, in spmi_regulator_match()
1567 dev_dbg(vreg->dev, "could not read version registers\n"); in spmi_regulator_match()
1591 dev_err(vreg->dev, in spmi_regulator_match()
1593 vreg->desc.name, type, subtype, dig_major_rev); in spmi_regulator_match()
1598 vreg->logical_type = mapping->logical_type; in spmi_regulator_match()
1599 vreg->set_points = mapping->set_points; in spmi_regulator_match()
1600 vreg->hpm_min_load = mapping->hpm_min_load; in spmi_regulator_match()
1601 vreg->desc.ops = mapping->ops; in spmi_regulator_match()
1606 vreg->desc.n_voltages = mapping->set_points->n_voltages; in spmi_regulator_match()
1612 static int spmi_regulator_init_slew_rate(struct spmi_regulator *vreg) in spmi_regulator_init_slew_rate() argument
1619 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_STEP_CTRL, &reg, 1); in spmi_regulator_init_slew_rate()
1621 dev_err(vreg->dev, "spmi read failed, ret=%d\n", ret); in spmi_regulator_init_slew_rate()
1625 range = spmi_regulator_find_range(vreg); in spmi_regulator_init_slew_rate()
1629 switch (vreg->logical_type) { in spmi_regulator_init_slew_rate()
1651 vreg->slew_rate = max(slew_rate, 1); in spmi_regulator_init_slew_rate()
1656 static int spmi_regulator_init_slew_rate_ftsmps426(struct spmi_regulator *vreg, in spmi_regulator_init_slew_rate_ftsmps426() argument
1662 const struct spmi_voltage_range *range = &vreg->set_points->range[0]; in spmi_regulator_init_slew_rate_ftsmps426()
1664 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_STEP_CTRL, &reg, 1); in spmi_regulator_init_slew_rate_ftsmps426()
1666 dev_err(vreg->dev, "spmi read failed, ret=%d\n", ret); in spmi_regulator_init_slew_rate_ftsmps426()
1680 vreg->slew_rate = max(slew_rate, 1); in spmi_regulator_init_slew_rate_ftsmps426()
1685 static int spmi_regulator_init_registers(struct spmi_regulator *vreg, in spmi_regulator_init_registers() argument
1692 type = vreg->logical_type; in spmi_regulator_init_registers()
1694 ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, ctrl_reg, 8); in spmi_regulator_init_registers()
1739 ret = spmi_vreg_write(vreg, SPMI_COMMON_REG_VOLTAGE_RANGE, ctrl_reg, 8); in spmi_regulator_init_registers()
1750 return spmi_vreg_update_bits(vreg, in spmi_regulator_init_registers()
1759 static void spmi_regulator_get_dt_config(struct spmi_regulator *vreg, in spmi_regulator_get_dt_config() argument
1772 &vreg->ocp_max_retries); in spmi_regulator_get_dt_config()
1774 &vreg->ocp_retry_delay_ms); in spmi_regulator_get_dt_config()
1797 struct spmi_regulator *vreg = config->driver_data; in spmi_regulator_of_parse() local
1801 spmi_regulator_get_dt_config(vreg, node, &data); in spmi_regulator_of_parse()
1803 if (!vreg->ocp_max_retries) in spmi_regulator_of_parse()
1804 vreg->ocp_max_retries = SPMI_VS_OCP_DEFAULT_MAX_RETRIES; in spmi_regulator_of_parse()
1805 if (!vreg->ocp_retry_delay_ms) in spmi_regulator_of_parse()
1806 vreg->ocp_retry_delay_ms = SPMI_VS_OCP_DEFAULT_RETRY_DELAY_MS; in spmi_regulator_of_parse()
1808 ret = spmi_regulator_init_registers(vreg, &data); in spmi_regulator_of_parse()
1814 switch (vreg->logical_type) { in spmi_regulator_of_parse()
1819 ret = spmi_regulator_init_slew_rate(vreg); in spmi_regulator_of_parse()
1824 ret = spmi_regulator_init_slew_rate_ftsmps426(vreg, in spmi_regulator_of_parse()
1830 ret = spmi_regulator_init_slew_rate_ftsmps426(vreg, in spmi_regulator_of_parse()
1839 if (vreg->logical_type != SPMI_REGULATOR_LOGICAL_TYPE_VS) in spmi_regulator_of_parse()
1840 vreg->ocp_irq = 0; in spmi_regulator_of_parse()
1842 if (vreg->ocp_irq) { in spmi_regulator_of_parse()
1843 ret = devm_request_irq(dev, vreg->ocp_irq, in spmi_regulator_of_parse()
1845 vreg); in spmi_regulator_of_parse()
1848 vreg->ocp_irq, ret); in spmi_regulator_of_parse()
1852 ret = devm_delayed_work_autocancel(dev, &vreg->ocp_work, in spmi_regulator_of_parse()
2118 struct spmi_regulator *vreg; in qcom_spmi_regulator_probe() local
2161 vreg = devm_kzalloc(dev, sizeof(*vreg), GFP_KERNEL); in qcom_spmi_regulator_probe()
2162 if (!vreg) in qcom_spmi_regulator_probe()
2165 vreg->dev = dev; in qcom_spmi_regulator_probe()
2166 vreg->base = reg->base; in qcom_spmi_regulator_probe()
2167 vreg->regmap = regmap; in qcom_spmi_regulator_probe()
2169 vreg->ocp_irq = platform_get_irq_byname(pdev, reg->ocp); in qcom_spmi_regulator_probe()
2170 if (vreg->ocp_irq < 0) in qcom_spmi_regulator_probe()
2171 return vreg->ocp_irq; in qcom_spmi_regulator_probe()
2173 vreg->desc.id = -1; in qcom_spmi_regulator_probe()
2174 vreg->desc.owner = THIS_MODULE; in qcom_spmi_regulator_probe()
2175 vreg->desc.type = REGULATOR_VOLTAGE; in qcom_spmi_regulator_probe()
2176 vreg->desc.enable_reg = reg->base + SPMI_COMMON_REG_ENABLE; in qcom_spmi_regulator_probe()
2177 vreg->desc.enable_mask = SPMI_COMMON_ENABLE_MASK; in qcom_spmi_regulator_probe()
2178 vreg->desc.enable_val = SPMI_COMMON_ENABLE; in qcom_spmi_regulator_probe()
2179 vreg->desc.name = name = reg->name; in qcom_spmi_regulator_probe()
2180 vreg->desc.supply_name = reg->supply; in qcom_spmi_regulator_probe()
2181 vreg->desc.of_match = reg->name; in qcom_spmi_regulator_probe()
2182 vreg->desc.of_parse_cb = spmi_regulator_of_parse; in qcom_spmi_regulator_probe()
2183 vreg->desc.of_map_mode = spmi_regulator_of_map_mode; in qcom_spmi_regulator_probe()
2185 ret = spmi_regulator_match(vreg, reg->force_type); in qcom_spmi_regulator_probe()
2195 spmi_saw_ops = *(vreg->desc.ops); in qcom_spmi_regulator_probe()
2198 vreg->desc.ops = &spmi_saw_ops; in qcom_spmi_regulator_probe()
2202 if (vreg->set_points && vreg->set_points->count == 1) { in qcom_spmi_regulator_probe()
2204 range = vreg->set_points->range; in qcom_spmi_regulator_probe()
2205 vreg->desc.uV_step = range->step_uV; in qcom_spmi_regulator_probe()
2209 config.driver_data = vreg; in qcom_spmi_regulator_probe()
2211 rdev = devm_regulator_register(dev, &vreg->desc, &config); in qcom_spmi_regulator_probe()
2217 INIT_LIST_HEAD(&vreg->node); in qcom_spmi_regulator_probe()
2218 list_add(&vreg->node, vreg_list); in qcom_spmi_regulator_probe()