ret = of_property_read_u32(np, prop, &uv); if (ret) { if (ret != -EINVAL) return ret; return 0;
} /* If voltage is set to 0 => disable */ if (uv == 0) { if (omask) return regmap_update_bits(regmap, oreg, omask, 0);
} /* Some setups don't allow setting own voltage but do allow enabling */ if (!mask) { if (omask) return regmap_update_bits(regmap, oreg, omask, omask);
return -EINVAL;
} for (i = 0; i < desc->n_voltages; i++) { /* NOTE to next hacker - Does not support pickable ranges */ if (desc->linear_range_selectors_bitfield) return -EINVAL; if (desc->n_linear_ranges)
ret = regulator_desc_list_voltage_linear_range(desc, i); else
ret = regulator_desc_list_voltage_linear(desc, i); if (ret < 0) continue; if (ret == uv) {
i <<= ffs(desc->vsel_mask) - 1;
ret = regmap_update_bits(regmap, reg, mask, i); if (omask && !ret)
ret = regmap_update_bits(regmap, oreg, omask,
omask); break;
}
} if (i == desc->n_voltages)
pr_warn("Unsupported %s voltage %u\n", prop, uv);
return ret;
}
int rohm_regulator_set_dvs_levels(conststruct rohm_dvs_config *dvs, struct device_node *np, conststruct regulator_desc *desc, struct regmap *regmap)
{ int i, ret = 0; char *prop; unsignedint reg, mask, omask, oreg = desc->enable_reg;
for (i = 0; i < ROHM_DVS_LEVEL_VALID_AMOUNT && !ret; i++) { int bit;
/* * Few ROHM PMIC ICs have constrains on voltage changing: * BD71837 - only buck 1-4 voltages can be changed when they are enabled. * Other bucks and all LDOs must be disabled when voltage is changed. * BD96801 - LDO voltage levels can be changed when LDOs are disabled.
*/ int rohm_regulator_set_voltage_sel_restricted(struct regulator_dev *rdev, unsignedint sel)
{ if (rdev->desc->ops->is_enabled(rdev)) return -EBUSY;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.