mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-04 18:19:28 +09:00
iio: adc: fix warning in Qualcomm PM8xxx HK/XOADC driver
[ Upstream commite0f0ae838a] 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 commit79a4e91d1b("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: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
e1b85487f7
commit
a5c4c0909a
@@ -423,18 +423,14 @@ static irqreturn_t pm8xxx_eoc_irq(int irq, void *d)
|
||||
static struct pm8xxx_chan_info *
|
||||
pm8xxx_get_channel(struct pm8xxx_xoadc *adc, u8 chan)
|
||||
{
|
||||
struct pm8xxx_chan_info *ch;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < adc->nchans; i++) {
|
||||
ch = &adc->chans[i];
|
||||
struct pm8xxx_chan_info *ch = &adc->chans[i];
|
||||
if (ch->hwchan->amux_channel == chan)
|
||||
break;
|
||||
return ch;
|
||||
}
|
||||
if (i == adc->nchans)
|
||||
return NULL;
|
||||
|
||||
return ch;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int pm8xxx_read_channel_rsv(struct pm8xxx_xoadc *adc,
|
||||
|
||||
Reference in New Issue
Block a user