• Linus Torvalds's avatar
    iio: adc: fix warning in Qualcomm PM8xxx HK/XOADC driver · a5c4c090
    Linus Torvalds authored
    [ Upstream commit e0f0ae83 ]
    
    The pm8xxx_get_channel() implementation is unclear, and causes gcc to
    suddenly generate odd warnings.  The trigger for the warning (at least
    for me) was the entirely unrelated commit 79a4e91d ("device.h: Add
    __cold to dev_<level> logging functions"), which apparently changes gcc
    code generation in the caller function enough to cause this:
    
      drivers/iio/adc/qcom-pm8xxx-xoadc.c: In function ‘pm8xxx_xoadc_probe’:
      drivers/iio/adc/qcom-pm8xxx-xoadc.c:633:8: warning: ‘ch’ may be used uninitialized in this function [-Wmaybe-uninitialized]
        ret = pm8xxx_read_channel_rsv(adc, ch, AMUX_RSV4,
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                 &read_nomux_rsv4, true);
                 ~~~~~~~~~~~~~~~~~~~~~~~
      drivers/iio/adc/qcom-pm8xxx-xoadc.c:426:27: note: ‘ch’ was declared here
        struct pm8xxx_chan_info *ch;
                                 ^~
    
    because gcc for some reason then isn't able to see that the termination
    condition for the "for( )" loop in that function is also the condition
    for returning NULL.
    
    So it's not _actually_ uninitialized, but the function is admittedly
    just unnecessarily oddly written.
    
    Simplify and clarify the function, making gcc also see that it always
    returns a valid initialized value.
    
    Cc: Joe Perches <joe@perches.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Andy Gross <andy.gross@linaro.org>
    Cc: David Brown <david.brown@linaro.org>
    Cc: Jonathan Cameron <jic23@kernel.org>
    Cc: Hartmut Knaack <knaack.h@gmx.de>
    Cc: Lars-Peter Clausen <lars@metafoo.de>
    Cc: Peter Meerwald-Stadler <pmeerw@pmeerw.net>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    a5c4c090
qcom-pm8xxx-xoadc.c 34 KB