diff options
author | Kim, Milo <Milo.Kim@ti.com> | 2012-09-17 04:44:00 -0400 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2012-09-17 14:16:42 -0400 |
commit | b2b79ffa40d7ae40115631660ff8b6da3cf989b6 (patch) | |
tree | 89471ce2b1f1d5fb24dd55f4d91fb64058818348 /drivers/iio/inkern.c | |
parent | 2cc412b513f70ce914a3554a34917f7585a16f04 (diff) |
iio: inkern: add error case in iio_channel_get()
The datasheet name is defined in the IIO driver.
On the other hand, the adc_channel_label is configured in
the platform side.
If the datasheet name is not matched with any adc_channel_label,
the iio_channel_get() should be returned as error for preventing
invalid channel data access.
This can be handled either way.
(a) checking null data when using it : in the xxx_read_raw()
or
(b) error returns when the channel is requested : this patch
The IIO consumer can't use the channel with invalid channel spec.
Therefore case (b) is more reasonable.
Signed-off-by: Milo(Woogyom) Kim <milo.kim@ti.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
Diffstat (limited to 'drivers/iio/inkern.c')
-rw-r--r-- | drivers/iio/inkern.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c index 028c657f8da3..d539e1e297ba 100644 --- a/drivers/iio/inkern.c +++ b/drivers/iio/inkern.c | |||
@@ -136,12 +136,21 @@ struct iio_channel *iio_channel_get(const char *name, const char *channel_name) | |||
136 | 136 | ||
137 | channel->indio_dev = c->indio_dev; | 137 | channel->indio_dev = c->indio_dev; |
138 | 138 | ||
139 | if (c->map->adc_channel_label) | 139 | if (c->map->adc_channel_label) { |
140 | channel->channel = | 140 | channel->channel = |
141 | iio_chan_spec_from_name(channel->indio_dev, | 141 | iio_chan_spec_from_name(channel->indio_dev, |
142 | c->map->adc_channel_label); | 142 | c->map->adc_channel_label); |
143 | 143 | ||
144 | if (channel->channel == NULL) | ||
145 | goto error_no_chan; | ||
146 | } | ||
147 | |||
144 | return channel; | 148 | return channel; |
149 | |||
150 | error_no_chan: | ||
151 | iio_device_put(c->indio_dev); | ||
152 | kfree(channel); | ||
153 | return ERR_PTR(-EINVAL); | ||
145 | } | 154 | } |
146 | EXPORT_SYMBOL_GPL(iio_channel_get); | 155 | EXPORT_SYMBOL_GPL(iio_channel_get); |
147 | 156 | ||