/* operating mode constraint check */
 static int regulator_check_mode(struct regulator_dev *rdev, int mode)
 {
+       switch (mode) {
+       case REGULATOR_MODE_FAST:
+       case REGULATOR_MODE_NORMAL:
+       case REGULATOR_MODE_IDLE:
+       case REGULATOR_MODE_STANDBY:
+               break;
+       default:
+               return -EINVAL;
+       }
+
        if (!rdev->constraints) {
                printk(KERN_ERR "%s: no constraints for %s\n", __func__,
                       rdev->desc->name);
        mode = rdev->desc->ops->get_optimum_mode(rdev,
                                                 input_uV, output_uV,
                                                 total_uA_load);
-       if (ret <= 0) {
+       ret = regulator_check_mode(rdev, mode);
+       if (ret < 0) {
                printk(KERN_ERR "%s: failed to get optimum mode for %s @"
                        " %d uA %d -> %d uV\n", __func__, rdev->desc->name,
                        total_uA_load, input_uV, output_uV);
        }
 
        ret = rdev->desc->ops->set_mode(rdev, mode);
-       if (ret <= 0) {
+       if (ret < 0) {
                printk(KERN_ERR "%s: failed to set optimum mode %x for %s\n",
                        __func__, mode, rdev->desc->name);
                goto out;