summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/iio/inkern.c13
1 files changed, 8 insertions, 5 deletions
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);