diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c index e38f41464fe4..f2b78d4fe457 100644 --- a/drivers/iio/inkern.c +++ b/drivers/iio/inkern.c @@ -111,6 +111,7 @@ struct iio_channel *iio_channel_get(const char *name, const char *channel_name) { struct iio_map_internal *c_i = NULL, *c = NULL; struct iio_channel *channel; + int err; if (name == NULL && channel_name == NULL) return ERR_PTR(-ENODEV); @@ -131,8 +132,10 @@ struct iio_channel *iio_channel_get(const char *name, const char *channel_name) return ERR_PTR(-ENODEV); channel = kzalloc(sizeof(*channel), GFP_KERNEL); - if (channel == NULL) + if (channel == NULL) { + err = -ENOMEM; goto error_no_mem; + } channel->indio_dev = c->indio_dev; @@ -141,19 +144,19 @@ struct iio_channel *iio_channel_get(const char *name, const char *channel_name) iio_chan_spec_from_name(channel->indio_dev, c->map->adc_channel_label); - if (channel->channel == NULL) + if (channel->channel == NULL) { + err = -EINVAL; goto error_no_chan; + } } return channel; error_no_chan: - iio_device_put(c->indio_dev); kfree(channel); - return ERR_PTR(-EINVAL); error_no_mem: iio_device_put(c->indio_dev); - return ERR_PTR(-ENOMEM); + return ERR_PTR(err); } EXPORT_SYMBOL_GPL(iio_channel_get);