struct gpio_desc *gpiod;
int ret;
---- gpiod = gpio_to_desc(config->ena_gpio);
++++ if (config->ena_gpiod)
++++ gpiod = config->ena_gpiod;
++++ else
++++ gpiod = gpio_to_desc(config->ena_gpio);
list_for_each_entry(pin, ®ulator_ena_gpio_list, list) {
if (pin->gpiod == gpiod) {
}
}
---- ret = gpio_request_one(config->ena_gpio,
---- GPIOF_DIR_OUT | config->ena_gpio_flags,
---- rdev_get_name(rdev));
---- if (ret)
---- return ret;
++++ if (!config->ena_gpiod) {
++++ ret = gpio_request_one(config->ena_gpio,
++++ GPIOF_DIR_OUT | config->ena_gpio_flags,
++++ rdev_get_name(rdev));
++++ if (ret)
++++ return ret;
++++ }
pin = kzalloc(sizeof(struct regulator_enable_gpio), GFP_KERNEL);
if (pin == NULL) {
---- gpio_free(config->ena_gpio);
++++ if (!config->ena_gpiod)
++++ gpio_free(config->ena_gpio);
return -ENOMEM;
}
goto clean;
}
---- if ((config->ena_gpio || config->ena_gpio_initialized) &&
---- gpio_is_valid(config->ena_gpio)) {
++++ if (config->ena_gpiod ||
++++ ((config->ena_gpio || config->ena_gpio_initialized) &&
++++ gpio_is_valid(config->ena_gpio))) {
mutex_lock(®ulator_list_mutex);
ret = regulator_ena_gpio_request(rdev, config);
mutex_unlock(®ulator_list_mutex);
return class_for_each_device(®ulator_class, NULL, &state,
_regulator_suspend_late);
}
+++ +
static int _regulator_resume_early(struct device *dev, void *data)
{
int ret = 0;
rstate = regulator_get_suspend_state(rdev, *state);
if (rstate == NULL)
---- return -EINVAL;
++++ return 0;
mutex_lock(&rdev->mutex);