return reg1->rdev == reg2->rdev;
 }
 EXPORT_SYMBOL_GPL(regulator_is_equal);
+
+static int find_closest_bigger(unsigned int target, const unsigned int *table,
+                              unsigned int num_sel, unsigned int *sel)
+{
+       unsigned int s, tmp, max, maxsel = 0;
+       bool found = false;
+
+       max = table[0];
+
+       for (s = 0; s < num_sel; s++) {
+               if (table[s] > max) {
+                       max = table[s];
+                       maxsel = s;
+               }
+               if (table[s] >= target) {
+                       if (!found || table[s] - target < tmp - target) {
+                               tmp = table[s];
+                               *sel = s;
+                               found = true;
+                               if (tmp == target)
+                                       break;
+                       }
+               }
+       }
+
+       if (!found) {
+               *sel = maxsel;
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+/**
+ * regulator_set_ramp_delay_regmap - set_ramp_delay() helper
+ *
+ * @rdev: regulator to operate on
+ *
+ * Regulators that use regmap for their register I/O can set the ramp_reg
+ * and ramp_mask fields in their descriptor and then use this as their
+ * set_ramp_delay operation, saving some code.
+ */
+int regulator_set_ramp_delay_regmap(struct regulator_dev *rdev, int ramp_delay)
+{
+       int ret;
+       unsigned int sel;
+
+       if (!rdev->desc->n_ramp_values)
+               return -EINVAL;
+
+       ret = find_closest_bigger(ramp_delay, rdev->desc->ramp_delay_table,
+                                 rdev->desc->n_ramp_values, &sel);
+
+       if (ret) {
+               dev_warn(rdev_get_dev(rdev),
+                        "Can't set ramp-delay %u, setting %u\n", ramp_delay,
+                        rdev->desc->ramp_delay_table[sel]);
+       }
+
+       sel <<= ffs(rdev->desc->ramp_mask) - 1;
+
+       return regmap_update_bits(rdev->regmap, rdev->desc->ramp_reg,
+                                 rdev->desc->ramp_mask, sel);
+}
+EXPORT_SYMBOL_GPL(regulator_set_ramp_delay_regmap);
 
        unsigned int pull_down_reg;
        unsigned int pull_down_mask;
        unsigned int pull_down_val_on;
+       unsigned int ramp_reg;
+       unsigned int ramp_mask;
+       const unsigned int *ramp_delay_table;
+       unsigned int n_ramp_values;
 
        unsigned int enable_time;
 
                                       int min_uA, int max_uA);
 int regulator_get_current_limit_regmap(struct regulator_dev *rdev);
 void *regulator_get_init_drvdata(struct regulator_init_data *reg_init_data);
+int regulator_set_ramp_delay_regmap(struct regulator_dev *rdev, int ramp_delay);
 
 /*
  * Helper functions intended to be used by regulator drivers prior registering