{
        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);
                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;
 
                        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);