Как обработать ошибку с помощью devm_regulator_get - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь обработать случай, когда devm_regulator_get не может найти подходящий регулятор.Я программирую на ядре 4.9.30

Из исходников ядра Linux мы можем видеть следующее описание [ drivers / regulator / devres.c / drivers / regulator / core.c]

драйверы / регулятор / devres.c

/**
 * devm_regulator_get - Resource managed regulator_get()
 * @dev: device for regulator "consumer"
 * @id: Supply name or regulator ID.
 *
 * Managed regulator_get(). Regulators returned from this function are
 * automatically regulator_put() on driver detach. See regulator_get() for more
 * information.
 */
struct regulator *devm_regulator_get(struct device *dev, const char *id)
{
    return _devm_regulator_get(dev, id, NORMAL_GET);
}
EXPORT_SYMBOL_GPL(devm_regulator_get);

драйверы / регулятор / core.c

/**
 * regulator_get - lookup and obtain a reference to a regulator.
 * @dev: device for regulator "consumer"
 * @id: Supply name or regulator ID.
 *
 * Returns a struct regulator corresponding to the regulator producer,
 * or IS_ERR() condition containing errno.
 *
 * Use of supply names configured via regulator_set_device_supply() is
 * strongly encouraged.  It is recommended that the supply name used
 * should match the name used for the supply and/or the relevant
 * device pins in the datasheet.
 */
struct regulator *regulator_get(struct device *dev, const char *id)
{
    return _regulator_get(dev, id, false, true);
}
EXPORT_SYMBOL_GPL(regulator_get);

Вот мой код

struct regulator *power_regulator = devm_regulator_get(&pdev->dev, "zdfhkfgv");
if(IS_ERR(power_regulator))
{
    ERROR("Invalid power regulator\r\n");
    return -EINVAL;
}

Однако я никогда не попаду в ошибку, даже если регулятор не найден.

Вот вывод ядра:

# insmod mod.ko 
module : Init driver
module : Device allocated and initialized
module supply zdfhkfgv not found, using dummy regulator
module : device is not powered
[...]

Итак, я вижу, что devm_regulator_get не удалось найти регулятор, но я не попадаю в ошибку.Это очень раздражает, потому что, когда регулятор не установлен, я вернусь.Вместо этого код продолжает работать с устройством, которое не подключено.

Что я здесь не так делаю?

1 Ответ

0 голосов
/ 01 сентября 2018

Это devm_regulator_get_optional (), который вы должны использовать, если не хотите использовать фиктивный регулятор.Вместо этого он вернет -ENODEV.

...