|
@@ -1381,22 +1381,14 @@ struct regulator *regulator_get_exclusive(struct device *dev, const char *id)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(regulator_get_exclusive);
|
|
|
|
|
|
-/**
|
|
|
- * regulator_put - "free" the regulator source
|
|
|
- * @regulator: regulator source
|
|
|
- *
|
|
|
- * Note: drivers must ensure that all regulator_enable calls made on this
|
|
|
- * regulator source are balanced by regulator_disable calls prior to calling
|
|
|
- * this function.
|
|
|
- */
|
|
|
-void regulator_put(struct regulator *regulator)
|
|
|
+/* Locks held by regulator_put() */
|
|
|
+static void _regulator_put(struct regulator *regulator)
|
|
|
{
|
|
|
struct regulator_dev *rdev;
|
|
|
|
|
|
if (regulator == NULL || IS_ERR(regulator))
|
|
|
return;
|
|
|
|
|
|
- mutex_lock(®ulator_list_mutex);
|
|
|
rdev = regulator->rdev;
|
|
|
|
|
|
debugfs_remove_recursive(regulator->debugfs);
|
|
@@ -1412,6 +1404,20 @@ void regulator_put(struct regulator *regulator)
|
|
|
rdev->exclusive = 0;
|
|
|
|
|
|
module_put(rdev->owner);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * regulator_put - "free" the regulator source
|
|
|
+ * @regulator: regulator source
|
|
|
+ *
|
|
|
+ * Note: drivers must ensure that all regulator_enable calls made on this
|
|
|
+ * regulator source are balanced by regulator_disable calls prior to calling
|
|
|
+ * this function.
|
|
|
+ */
|
|
|
+void regulator_put(struct regulator *regulator)
|
|
|
+{
|
|
|
+ mutex_lock(®ulator_list_mutex);
|
|
|
+ _regulator_put(regulator);
|
|
|
mutex_unlock(®ulator_list_mutex);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(regulator_put);
|
|
@@ -1974,7 +1980,7 @@ int regulator_is_supported_voltage(struct regulator *regulator,
|
|
|
if (!(rdev->constraints->valid_ops_mask & REGULATOR_CHANGE_VOLTAGE)) {
|
|
|
ret = regulator_get_voltage(regulator);
|
|
|
if (ret >= 0)
|
|
|
- return (min_uV >= ret && ret <= max_uV);
|
|
|
+ return (min_uV <= ret && ret <= max_uV);
|
|
|
else
|
|
|
return ret;
|
|
|
}
|
|
@@ -3365,7 +3371,7 @@ regulator_register(const struct regulator_desc *regulator_desc,
|
|
|
if (ret != 0) {
|
|
|
rdev_err(rdev, "Failed to request enable GPIO%d: %d\n",
|
|
|
config->ena_gpio, ret);
|
|
|
- goto clean;
|
|
|
+ goto wash;
|
|
|
}
|
|
|
|
|
|
rdev->ena_gpio = config->ena_gpio;
|
|
@@ -3445,10 +3451,11 @@ unset_supplies:
|
|
|
|
|
|
scrub:
|
|
|
if (rdev->supply)
|
|
|
- regulator_put(rdev->supply);
|
|
|
+ _regulator_put(rdev->supply);
|
|
|
if (rdev->ena_gpio)
|
|
|
gpio_free(rdev->ena_gpio);
|
|
|
kfree(rdev->constraints);
|
|
|
+wash:
|
|
|
device_unregister(&rdev->dev);
|
|
|
/* device core frees rdev */
|
|
|
rdev = ERR_PTR(ret);
|