static int twl4030reg_disable(struct regulator_dev *rdev) { struct twlreg_info *info = rdev_get_drvdata(rdev); int grp; grp = twl4030reg_read(info, VREG_GRP); if (grp < 0) return grp; grp &= ~P1_GRP; return twl4030reg_write(info, VREG_GRP, grp); }
static int twl4030reg_enable(struct regulator_dev *rdev) { struct twlreg_info *info = rdev_get_drvdata(rdev); int grp, status; unsigned message; grp = twl4030reg_read(info, VREG_GRP); if (grp < 0) return grp; grp |= P1_GRP; status = twl4030reg_write(info, VREG_GRP, grp); if (status < 0) return status; message = MSG_SINGULAR(DEV_GRP_P1, info->id, RES_STATE_ACTIVE); return twl4030_send_pb_msg(message); }
static int twl4030ldo_set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV) { struct twlreg_info *info = rdev_get_drvdata(rdev); int vsel; for (vsel = 0; vsel < info->table_len; vsel++) { int mV = info->table[vsel]; int uV; if (IS_UNSUP(mV)) continue; uV = LDO_MV(mV) * 1000; /* use the first in-range value */ if (min_uV <= uV && uV <= max_uV) return twl4030reg_write(info, VREG_DEDICATED, vsel); } return -EDOM; }