Lines Matching +full:static +full:- +full:enable

7  * zyw <zyw@rock-chips.com>
9 * SPDX-License-Identifier: GPL-2.0+
24 #define NA -1
44 #define RK817_BUCK_ON_VSEL(n) (0xbb + 3 * (n - 1))
45 #define RK817_BUCK_SLP_VSEL(n) (0xbc + 3 * (n - 1))
50 #define RK817_LDO_ON_VSEL(n) (0xcc + 2 * (n - 1))
51 #define RK817_LDO_SLP_VSEL(n) (0xcd + 2 * (n - 1))
54 /* RK817 ENABLE */
95 static const struct rk8xx_reg_info rk808_buck[] = {
102 static const struct rk8xx_reg_info rk816_buck[] = {
117 static const struct rk8xx_reg_info rk809_buck5[] = {
125 static const struct rk8xx_reg_info rk817_buck[] = {
144 static const struct rk8xx_reg_info rk818_buck[] = {
152 static const struct rk8xx_reg_info rk808_ldo[] = {
163 static const struct rk8xx_reg_info rk816_ldo[] = {
172 static const struct rk8xx_reg_info rk817_ldo[] = {
202 static const struct rk8xx_reg_info rk818_ldo[] = {
214 static const u16 rk818_chrg_cur_input_array[] = {
218 static const uint rk818_chrg_shutdown_vsel_array[] = {
222 static const struct rk8xx_reg_info *get_buck_reg(struct udevice *pmic, in get_buck_reg()
227 switch (priv->variant) { in get_buck_reg()
278 static int _buck_set_value(struct udevice *pmic, int buck, int uvolt) in _buck_set_value()
282 int mask = info->vsel_mask; in _buck_set_value()
285 if (info->vsel_reg == NA) in _buck_set_value()
286 return -ENOSYS; in _buck_set_value()
288 if (info->step_uv == 0) /* Fixed voltage */ in _buck_set_value()
289 val = info->min_sel; in _buck_set_value()
291 val = ((uvolt - info->min_uv) / info->step_uv) + info->min_sel; in _buck_set_value()
294 __func__, uvolt, buck+1, info->vsel_reg, mask, val); in _buck_set_value()
296 if (priv->variant == RK816_ID) { in _buck_set_value()
297 pmic_clrsetbits(pmic, info->vsel_reg, mask, val); in _buck_set_value()
300 return pmic_clrsetbits(pmic, info->vsel_reg, mask, val); in _buck_set_value()
304 static int _buck_set_enable(struct udevice *pmic, int buck, bool enable) in _buck_set_enable() argument
310 switch (priv->variant) { in _buck_set_enable()
314 buck -= 4; in _buck_set_enable()
319 if (enable) in _buck_set_enable()
329 if (enable) { in _buck_set_enable()
336 enable ? mask : 0); in _buck_set_enable()
341 if (enable) in _buck_set_enable()
348 if (enable) in _buck_set_enable()
356 ret = -EINVAL; in _buck_set_enable()
363 static int _buck_set_suspend_value(struct udevice *pmic, int buck, int uvolt) in _buck_set_suspend_value()
366 int mask = info->vsel_mask; in _buck_set_suspend_value()
369 if (info->vsel_sleep_reg == NA) in _buck_set_suspend_value()
370 return -ENOSYS; in _buck_set_suspend_value()
372 if (info->step_uv == 0) in _buck_set_suspend_value()
373 val = info->min_sel; in _buck_set_suspend_value()
375 val = ((uvolt - info->min_uv) / info->step_uv) + info->min_sel; in _buck_set_suspend_value()
378 __func__, uvolt, buck+1, info->vsel_sleep_reg, mask, val); in _buck_set_suspend_value()
380 return pmic_clrsetbits(pmic, info->vsel_sleep_reg, mask, val); in _buck_set_suspend_value()
383 static int _buck_get_enable(struct udevice *pmic, int buck) in _buck_get_enable()
389 switch (priv->variant) { in _buck_get_enable()
393 mask = 1 << (buck - 4); in _buck_get_enable()
426 static int _buck_set_ramp_delay(struct udevice *pmic, int buck, u32 ramp_delay) in _buck_set_ramp_delay()
432 if (info->config_reg == NA) in _buck_set_ramp_delay()
433 return -ENOSYS; in _buck_set_ramp_delay()
435 switch (priv->variant) { in _buck_set_ramp_delay()
503 return -EINVAL; in _buck_set_ramp_delay()
506 return pmic_clrsetbits(pmic, info->config_reg, ramp_mask, ramp_value); in _buck_set_ramp_delay()
509 static int _buck_set_suspend_enable(struct udevice *pmic, int buck, bool enable) in _buck_set_suspend_enable() argument
515 switch (priv->variant) { in _buck_set_suspend_enable()
520 enable ? mask : 0); in _buck_set_suspend_enable()
526 enable ? 0 : mask); in _buck_set_suspend_enable()
535 enable ? mask : 0); in _buck_set_suspend_enable()
538 ret = -EINVAL; in _buck_set_suspend_enable()
544 static int _buck_get_suspend_enable(struct udevice *pmic, int buck) in _buck_get_suspend_enable()
550 switch (priv->variant) { in _buck_get_suspend_enable()
580 ret = -EINVAL; in _buck_get_suspend_enable()
586 static const struct rk8xx_reg_info *get_ldo_reg(struct udevice *pmic, in get_ldo_reg()
591 switch (priv->variant) { in get_ldo_reg()
608 static int _ldo_get_enable(struct udevice *pmic, int ldo) in _ldo_get_enable()
614 switch (priv->variant) { in _ldo_get_enable()
618 mask = 1 << (ldo - 4); in _ldo_get_enable()
638 mask = 1 << (ldo - 4); in _ldo_get_enable()
655 static int _ldo_set_enable(struct udevice *pmic, int ldo, bool enable) in _ldo_set_enable() argument
661 switch (priv->variant) { in _ldo_set_enable()
665 ldo -= 4; in _ldo_set_enable()
670 if (enable) in _ldo_set_enable()
681 enable ? mask : 0); in _ldo_set_enable()
688 ldo -= 4; in _ldo_set_enable()
694 return -EINVAL; in _ldo_set_enable()
696 if (enable) in _ldo_set_enable()
707 static int _ldo_set_suspend_enable(struct udevice *pmic, int ldo, bool enable) in _ldo_set_suspend_enable() argument
713 switch (priv->variant) { in _ldo_set_suspend_enable()
718 enable ? mask : 0); in _ldo_set_suspend_enable()
724 enable ? 0 : mask); in _ldo_set_suspend_enable()
731 enable ? mask : 0); in _ldo_set_suspend_enable()
735 enable ? mask : 0); in _ldo_set_suspend_enable()
743 static int _ldo_get_suspend_enable(struct udevice *pmic, int ldo) in _ldo_get_suspend_enable()
749 switch (priv->variant) { in _ldo_get_suspend_enable()
787 static int buck_get_value(struct udevice *dev) in buck_get_value()
789 int buck = dev->driver_data - 1; in buck_get_value()
790 const struct rk8xx_reg_info *info = get_buck_reg(dev->parent, buck, 0); in buck_get_value()
791 int mask = info->vsel_mask; in buck_get_value()
794 if (info->vsel_reg == NA) in buck_get_value()
795 return -ENOSYS; in buck_get_value()
797 ret = pmic_reg_read(dev->parent, info->vsel_reg); in buck_get_value()
802 if (val >= info->min_sel && val <= info->max_sel) in buck_get_value()
806 for (i = 1; i < info->range_num; i++) { in buck_get_value()
808 if (val <= info->max_sel && val >= info->min_sel) in buck_get_value()
813 return info->min_uv + (val - info->min_sel) * info->step_uv; in buck_get_value()
816 static int buck_set_value(struct udevice *dev, int uvolt) in buck_set_value()
818 int buck = dev->driver_data - 1; in buck_set_value()
820 return _buck_set_value(dev->parent, buck, uvolt); in buck_set_value()
823 static int buck_get_suspend_value(struct udevice *dev) in buck_get_suspend_value()
825 int buck = dev->driver_data - 1; in buck_get_suspend_value()
826 const struct rk8xx_reg_info *info = get_buck_reg(dev->parent, buck, 0); in buck_get_suspend_value()
827 int mask = info->vsel_mask; in buck_get_suspend_value()
830 if (info->vsel_sleep_reg == NA) in buck_get_suspend_value()
831 return -ENOSYS; in buck_get_suspend_value()
833 ret = pmic_reg_read(dev->parent, info->vsel_sleep_reg); in buck_get_suspend_value()
838 if (val <= info->max_sel && val >= info->min_sel) in buck_get_suspend_value()
842 for (i = 1; i < info->range_num; i++) { in buck_get_suspend_value()
844 if (val <= info->max_sel && val >= info->min_sel) in buck_get_suspend_value()
849 return info->min_uv + (val - info->min_sel) * info->step_uv; in buck_get_suspend_value()
852 static int buck_set_suspend_value(struct udevice *dev, int uvolt) in buck_set_suspend_value()
854 int buck = dev->driver_data - 1; in buck_set_suspend_value()
856 return _buck_set_suspend_value(dev->parent, buck, uvolt); in buck_set_suspend_value()
859 static int buck_set_enable(struct udevice *dev, bool enable) in buck_set_enable() argument
861 int buck = dev->driver_data - 1; in buck_set_enable()
863 return _buck_set_enable(dev->parent, buck, enable); in buck_set_enable()
866 static int buck_set_suspend_enable(struct udevice *dev, bool enable) in buck_set_suspend_enable() argument
868 int buck = dev->driver_data - 1; in buck_set_suspend_enable()
870 return _buck_set_suspend_enable(dev->parent, buck, enable); in buck_set_suspend_enable()
873 static int buck_get_suspend_enable(struct udevice *dev) in buck_get_suspend_enable()
875 int buck = dev->driver_data - 1; in buck_get_suspend_enable()
877 return _buck_get_suspend_enable(dev->parent, buck); in buck_get_suspend_enable()
880 static int buck_set_ramp_delay(struct udevice *dev, u32 ramp_delay) in buck_set_ramp_delay()
882 int buck = dev->driver_data - 1; in buck_set_ramp_delay()
884 return _buck_set_ramp_delay(dev->parent, buck, ramp_delay); in buck_set_ramp_delay()
887 static int buck_get_enable(struct udevice *dev) in buck_get_enable()
889 int buck = dev->driver_data - 1; in buck_get_enable()
891 return _buck_get_enable(dev->parent, buck); in buck_get_enable()
894 static int ldo_get_value(struct udevice *dev) in ldo_get_value()
896 int ldo = dev->driver_data - 1; in ldo_get_value()
897 const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo, 0); in ldo_get_value()
898 int mask = info->vsel_mask; in ldo_get_value()
901 if (info->vsel_reg == NA) in ldo_get_value()
902 return -ENOSYS; in ldo_get_value()
903 ret = pmic_reg_read(dev->parent, info->vsel_reg); in ldo_get_value()
908 return info->min_uv + val * info->step_uv; in ldo_get_value()
911 static int ldo_set_value(struct udevice *dev, int uvolt) in ldo_set_value()
913 int ldo = dev->driver_data - 1; in ldo_set_value()
914 const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo, uvolt); in ldo_set_value()
915 int mask = info->vsel_mask; in ldo_set_value()
918 if (info->vsel_reg == NA) in ldo_set_value()
919 return -ENOSYS; in ldo_set_value()
921 if (info->step_uv == 0) in ldo_set_value()
922 val = info->min_sel; in ldo_set_value()
924 val = ((uvolt - info->min_uv) / info->step_uv) + info->min_sel; in ldo_set_value()
927 __func__, uvolt, ldo+1, info->vsel_reg, mask, val); in ldo_set_value()
929 return pmic_clrsetbits(dev->parent, info->vsel_reg, mask, val); in ldo_set_value()
932 static int ldo_set_suspend_value(struct udevice *dev, int uvolt) in ldo_set_suspend_value()
934 int ldo = dev->driver_data - 1; in ldo_set_suspend_value()
935 const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo, uvolt); in ldo_set_suspend_value()
936 int mask = info->vsel_mask; in ldo_set_suspend_value()
939 if (info->vsel_sleep_reg == NA) in ldo_set_suspend_value()
940 return -ENOSYS; in ldo_set_suspend_value()
942 if (info->step_uv == 0) in ldo_set_suspend_value()
943 val = info->min_sel; in ldo_set_suspend_value()
945 val = ((uvolt - info->min_uv) / info->step_uv) + info->min_sel; in ldo_set_suspend_value()
948 __func__, uvolt, ldo+1, info->vsel_sleep_reg, mask, val); in ldo_set_suspend_value()
950 return pmic_clrsetbits(dev->parent, info->vsel_sleep_reg, mask, val); in ldo_set_suspend_value()
953 static int ldo_get_suspend_value(struct udevice *dev) in ldo_get_suspend_value()
955 int ldo = dev->driver_data - 1; in ldo_get_suspend_value()
956 const struct rk8xx_reg_info *info = get_ldo_reg(dev->parent, ldo, 0); in ldo_get_suspend_value()
957 int mask = info->vsel_mask; in ldo_get_suspend_value()
960 if (info->vsel_sleep_reg == NA) in ldo_get_suspend_value()
961 return -ENOSYS; in ldo_get_suspend_value()
963 ret = pmic_reg_read(dev->parent, info->vsel_sleep_reg); in ldo_get_suspend_value()
969 return info->min_uv + val * info->step_uv; in ldo_get_suspend_value()
972 static int ldo_set_enable(struct udevice *dev, bool enable) in ldo_set_enable() argument
974 int ldo = dev->driver_data - 1; in ldo_set_enable()
976 return _ldo_set_enable(dev->parent, ldo, enable); in ldo_set_enable()
979 static int ldo_set_suspend_enable(struct udevice *dev, bool enable) in ldo_set_suspend_enable() argument
981 int ldo = dev->driver_data - 1; in ldo_set_suspend_enable()
983 return _ldo_set_suspend_enable(dev->parent, ldo, enable); in ldo_set_suspend_enable()
986 static int ldo_get_suspend_enable(struct udevice *dev) in ldo_get_suspend_enable()
988 int ldo = dev->driver_data - 1; in ldo_get_suspend_enable()
990 return _ldo_get_suspend_enable(dev->parent, ldo); in ldo_get_suspend_enable()
993 static int ldo_get_enable(struct udevice *dev) in ldo_get_enable()
995 int ldo = dev->driver_data - 1; in ldo_get_enable()
997 return _ldo_get_enable(dev->parent, ldo); in ldo_get_enable()
1000 static int switch_set_enable(struct udevice *dev, bool enable) in switch_set_enable() argument
1002 struct rk8xx_priv *priv = dev_get_priv(dev->parent); in switch_set_enable()
1003 int ret = 0, sw = dev->driver_data - 1; in switch_set_enable()
1006 switch (priv->variant) { in switch_set_enable()
1009 ret = pmic_clrsetbits(dev->parent, REG_DCDC_EN, mask, in switch_set_enable()
1010 enable ? mask : 0); in switch_set_enable()
1014 ret = pmic_clrsetbits(dev->parent, RK817_POWER_EN(3), mask, in switch_set_enable()
1015 enable ? mask : (1 << (sw + 6))); in switch_set_enable()
1019 ret = pmic_clrsetbits(dev->parent, REG_DCDC_EN, mask, in switch_set_enable()
1020 enable ? mask : 0); in switch_set_enable()
1024 debug("%s: switch%d, enable=%d, mask=0x%x\n", in switch_set_enable()
1025 __func__, sw + 1, enable, mask); in switch_set_enable()
1030 static int switch_get_enable(struct udevice *dev) in switch_get_enable()
1032 struct rk8xx_priv *priv = dev_get_priv(dev->parent); in switch_get_enable()
1033 int ret = 0, sw = dev->driver_data - 1; in switch_get_enable()
1036 switch (priv->variant) { in switch_get_enable()
1039 ret = pmic_reg_read(dev->parent, REG_DCDC_EN); in switch_get_enable()
1043 ret = pmic_reg_read(dev->parent, RK817_POWER_EN(3)); in switch_get_enable()
1047 ret = pmic_reg_read(dev->parent, REG_DCDC_EN); in switch_get_enable()
1057 static int switch_set_suspend_value(struct udevice *dev, int uvolt) in switch_set_suspend_value()
1062 static int switch_get_suspend_value(struct udevice *dev) in switch_get_suspend_value()
1067 static int switch_set_suspend_enable(struct udevice *dev, bool enable) in switch_set_suspend_enable() argument
1069 struct rk8xx_priv *priv = dev_get_priv(dev->parent); in switch_set_suspend_enable()
1070 int ret = 0, sw = dev->driver_data - 1; in switch_set_suspend_enable()
1073 switch (priv->variant) { in switch_set_suspend_enable()
1076 ret = pmic_clrsetbits(dev->parent, REG_SLEEP_SET_OFF1, mask, in switch_set_suspend_enable()
1077 enable ? 0 : mask); in switch_set_suspend_enable()
1081 ret = pmic_clrsetbits(dev->parent, RK817_POWER_SLP_EN(0), mask, in switch_set_suspend_enable()
1082 enable ? mask : 0); in switch_set_suspend_enable()
1086 ret = pmic_clrsetbits(dev->parent, REG_SLEEP_SET_OFF1, mask, in switch_set_suspend_enable()
1087 enable ? 0 : mask); in switch_set_suspend_enable()
1091 debug("%s: switch%d, enable=%d, mask=0x%x\n", in switch_set_suspend_enable()
1092 __func__, sw + 1, enable, mask); in switch_set_suspend_enable()
1097 static int switch_get_suspend_enable(struct udevice *dev) in switch_get_suspend_enable()
1099 struct rk8xx_priv *priv = dev_get_priv(dev->parent); in switch_get_suspend_enable()
1100 int val, ret = 0, sw = dev->driver_data - 1; in switch_get_suspend_enable()
1103 switch (priv->variant) { in switch_get_suspend_enable()
1106 val = pmic_reg_read(dev->parent, REG_SLEEP_SET_OFF1); in switch_get_suspend_enable()
1113 val = pmic_reg_read(dev->parent, RK817_POWER_SLP_EN(0)); in switch_get_suspend_enable()
1120 val = pmic_reg_read(dev->parent, REG_SLEEP_SET_OFF1); in switch_get_suspend_enable()
1132 * but if dts set regulator-min-microvolt/regulator-max-microvolt,
1133 * will cause regulator set value fail and not to enable this switch.
1136 static int switch_get_value(struct udevice *dev) in switch_get_value()
1138 const char *supply_name[] = { "vcc9-supply", "vcc8-supply", }; in switch_get_value()
1139 struct rk8xx_priv *priv = dev_get_priv(dev->parent); in switch_get_value()
1141 int id = dev->driver_data - 1; in switch_get_value()
1147 if ((priv->variant == RK809_ID) || (priv->variant == RK817_ID)) { in switch_get_value()
1158 static int switch_set_value(struct udevice *dev, int uvolt) in switch_set_value()
1163 static int rk8xx_buck_probe(struct udevice *dev) in rk8xx_buck_probe()
1169 uc_pdata->type = REGULATOR_TYPE_BUCK; in rk8xx_buck_probe()
1170 uc_pdata->mode_count = 0; in rk8xx_buck_probe()
1175 static int rk8xx_ldo_probe(struct udevice *dev) in rk8xx_ldo_probe()
1181 uc_pdata->type = REGULATOR_TYPE_LDO; in rk8xx_ldo_probe()
1182 uc_pdata->mode_count = 0; in rk8xx_ldo_probe()
1187 static int rk8xx_switch_probe(struct udevice *dev) in rk8xx_switch_probe()
1193 uc_pdata->type = REGULATOR_TYPE_FIXED; in rk8xx_switch_probe()
1194 uc_pdata->mode_count = 0; in rk8xx_switch_probe()
1199 static const struct dm_regulator_ops rk8xx_buck_ops = {
1211 static const struct dm_regulator_ops rk8xx_ldo_ops = {
1222 static const struct dm_regulator_ops rk8xx_switch_ops = {