Commit 9c0d6ccd authored by Sean Nyekjaer's avatar Sean Nyekjaer Committed by Jonathan Cameron

iio: adc: stm32-adc: skip adc-diff-channels setup if none is present

If no adc differential channels are defined driver will fail with EINVAL:
stm32-adc: probe of 48003000.adc:adc@0 failed with error -22

Fix this by skipping the initialization if no channels are defined.

This applies only to the legacy way of initializing adc channels.

Fixes: d7705f35 ("iio: adc: stm32-adc: convert to device properties")
Signed-off-by: default avatarSean Nyekjaer <sean@geanix.com>
Link: https://lore.kernel.org/r/20230503162029.3654093-1-sean@geanix.com
Cc: <Stable@vger.kernel.org>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent e55245d1
...@@ -2006,9 +2006,7 @@ static int stm32_adc_get_legacy_chan_count(struct iio_dev *indio_dev, struct stm ...@@ -2006,9 +2006,7 @@ static int stm32_adc_get_legacy_chan_count(struct iio_dev *indio_dev, struct stm
* to get the *real* number of channels. * to get the *real* number of channels.
*/ */
ret = device_property_count_u32(dev, "st,adc-diff-channels"); ret = device_property_count_u32(dev, "st,adc-diff-channels");
if (ret < 0) if (ret > 0) {
return ret;
ret /= (int)(sizeof(struct stm32_adc_diff_channel) / sizeof(u32)); ret /= (int)(sizeof(struct stm32_adc_diff_channel) / sizeof(u32));
if (ret > adc_info->max_channels) { if (ret > adc_info->max_channels) {
dev_err(&indio_dev->dev, "Bad st,adc-diff-channels?\n"); dev_err(&indio_dev->dev, "Bad st,adc-diff-channels?\n");
...@@ -2017,6 +2015,7 @@ static int stm32_adc_get_legacy_chan_count(struct iio_dev *indio_dev, struct stm ...@@ -2017,6 +2015,7 @@ static int stm32_adc_get_legacy_chan_count(struct iio_dev *indio_dev, struct stm
adc->num_diff = ret; adc->num_diff = ret;
num_channels += ret; num_channels += ret;
} }
}
/* Optional sample time is provided either for each, or all channels */ /* Optional sample time is provided either for each, or all channels */
adc->nsmps = device_property_count_u32(dev, "st,min-sample-time-nsecs"); adc->nsmps = device_property_count_u32(dev, "st,min-sample-time-nsecs");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment