aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iio
diff options
context:
space:
mode:
authorKim, Milo <Milo.Kim@ti.com>2012-09-18 00:55:00 -0400
committerJonathan Cameron <jic23@kernel.org>2012-09-22 05:13:32 -0400
commit801c4b5ca373c4cfe78912616d68e1f7fd84110c (patch)
tree244211834122938571cf145b324d8d80af004a92 /drivers/iio
parent369d0e20138c774e4c0c07ca1572e412207bc3fc (diff)
iio: inkern: put the IIO device when it fails to allocate memory
The reference count of the IIO device is increased if the IIO map has matched consumer name. After then, it tries to allocate the iio_channel which is used by the consumer. If it fails to allocate memory, the reference count should be decreased. This patch enables restoring the reference count of the IIO device. Signed-off-by: Milo(Woogyom) Kim <milo.kim@ti.com> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers/iio')
-rw-r--r--drivers/iio/inkern.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c
index 25b00761005a..e38f41464fe4 100644
--- a/drivers/iio/inkern.c
+++ b/drivers/iio/inkern.c
@@ -132,7 +132,7 @@ struct iio_channel *iio_channel_get(const char *name, const char *channel_name)
132 132
133 channel = kzalloc(sizeof(*channel), GFP_KERNEL); 133 channel = kzalloc(sizeof(*channel), GFP_KERNEL);
134 if (channel == NULL) 134 if (channel == NULL)
135 return ERR_PTR(-ENOMEM); 135 goto error_no_mem;
136 136
137 channel->indio_dev = c->indio_dev; 137 channel->indio_dev = c->indio_dev;
138 138
@@ -151,6 +151,9 @@ error_no_chan:
151 iio_device_put(c->indio_dev); 151 iio_device_put(c->indio_dev);
152 kfree(channel); 152 kfree(channel);
153 return ERR_PTR(-EINVAL); 153 return ERR_PTR(-EINVAL);
154error_no_mem:
155 iio_device_put(c->indio_dev);
156 return ERR_PTR(-ENOMEM);
154} 157}
155EXPORT_SYMBOL_GPL(iio_channel_get); 158EXPORT_SYMBOL_GPL(iio_channel_get);
156 159