}
EXPORT_SYMBOL_GPL(regulator_set_optimum_mode);
+/**
+ * regulator_set_vsel_volatile - set voltage selector access mode
+ *
+ * @regulator: regulator source.
+ * @is_volatile: voltage selector volatile attribute to set.
+ *
+ * Set regulator voltage selector access attribute as volatile or cached.
+ *
+ * Returns 0 on success, an errno on failure.
+ */
+int regulator_set_vsel_volatile(struct regulator *regulator, bool is_volatile)
+{
+ int ret = -ENOSYS;
+ struct regulator_dev *rdev = regulator->rdev;
+
+ mutex_lock(&rdev->mutex);
+ if (rdev->desc->ops->set_vsel_volatile)
+ /* Use driver callback if provided */
+ ret = rdev->desc->ops->set_vsel_volatile(rdev, is_volatile);
+ else if (rdev->regmap) {
+ /* No callback, but regmap user - set regmap cache directly */
+ ret = regcache_volatile_set(rdev->regmap, rdev->desc->vsel_reg,
+ is_volatile);
+ }
+ mutex_unlock(&rdev->mutex);
+ return ret;
+}
+EXPORT_SYMBOL_GPL(regulator_set_vsel_volatile);
+
/**
* regulator_set_bypass_regmap - Default set_bypass() using regmap
*
unsigned int regulator_get_mode(struct regulator *regulator);
int regulator_set_optimum_mode(struct regulator *regulator, int load_uA);
+int regulator_set_vsel_volatile(struct regulator *regulator, bool is_volatile);
+
int regulator_allow_bypass(struct regulator *regulator, bool allow);
int regulator_set_control_mode(struct regulator *regulator, unsigned int mode);
return REGULATOR_MODE_NORMAL;
}
+static inline int regulator_set_vsel_volatile(struct regulator *regulator,
+ bool is_volatile)
+{
+ return 0;
+}
+
static inline int regulator_allow_bypass(struct regulator *regulator,
bool allow)
{
unsigned int (*get_optimum_mode) (struct regulator_dev *, int input_uV,
int output_uV, int load_uA);
+ /* set regulator voltage selector access as volatile or cached */
+ int (*set_vsel_volatile) (struct regulator_dev *, bool is_volatile);
+
/* control and report on bypass mode */
int (*set_bypass)(struct regulator_dev *dev, bool enable);
int (*get_bypass)(struct regulator_dev *dev, bool *enable);