• Eva Rachel Retuya's avatar
    staging: iio: rework regulator handling · 3925ff0f
    Eva Rachel Retuya authored
    Currently, the affected drivers ignore all errors from regulator_get().
    The way it is now, it also breaks probe deferral (EPROBE_DEFER). The
    correct behavior is to propagate the error to the upper layers so they
    can handle it accordingly.
    
    Rework the regulator handling so that it matches the standard behavior.
    If the specific design uses a static always-on regulator and does not
    explicitly specify it, regulator_get() will return the dummy regulator.
    
    The following semantic patch was used to apply the change:
    @r1@
    expression reg, dev, en, volt;
    @@
    
    reg = \(devm_regulator_get\|regulator_get\)(dev, ...);
    if (
    - !
       IS_ERR(reg))
    +	return PTR_ERR(reg);
    (
    - {	en = regulator_enable(reg);
    -	if (en) return en; }
    +
    +	en = regulator_enable(reg);
    +	if (en) {
    +		dev_err(dev, "Failed to enable specified supply\n");
    +		return en; }
    |
    +
    - {	en = regulator_enable(reg);
    -	if (en)	return en;
    -	volt = regulator_get_voltage(reg); }
    +	en = regulator_enable(reg);
    +	if (en) {
    +		dev_err(dev, "Failed to enable specified supply\n");
    +		return en;
    +	}
    +	volt = regulator_get_voltage(reg);
    )
    
    @r2@
    expression arg;
    @@
    
    -	if (!IS_ERR(arg)) regulator_disable(arg);
    +	regulator_disable(arg);
    
    Hand-edit the debugging prints with the supply name to become more
    specific.
    Suggested-by: default avatarLars-Peter Clausen <lars@metafoo.de>
    Signed-off-by: default avatarEva Rachel Retuya <eraretuya@gmail.com>
    Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
    3925ff0f
ad7780.c 5.88 KB