diff options
author | Ramax Lo <ramaxlo@gmail.com> | 2009-04-14 11:56:18 -0400 |
---|---|---|
committer | Ben Dooks <ben-linux@fluff.org> | 2009-04-17 07:46:36 -0400 |
commit | 0c3ee078251b85812e585b5cf5d1635afd73f4e2 (patch) | |
tree | cbf8ed548280cc99d66e1d3b8a1375fe1f908e37 /arch/arm/plat-s3c24xx | |
parent | f8c8ac8109ecdd3583b0ac9fd3adf058678a802e (diff) |
[ARM] S3C24XX: ADC: Check pending queue before freeing adc client
Check pending queue and remove the adc client being released.
Signed-off-by: Ramax Lo <ramaxlo@gmail.com>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Diffstat (limited to 'arch/arm/plat-s3c24xx')
-rw-r--r-- | arch/arm/plat-s3c24xx/adc.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/arch/arm/plat-s3c24xx/adc.c b/arch/arm/plat-s3c24xx/adc.c index bc6f6a14dd12..91adfa71c172 100644 --- a/arch/arm/plat-s3c24xx/adc.c +++ b/arch/arm/plat-s3c24xx/adc.c | |||
@@ -190,6 +190,23 @@ EXPORT_SYMBOL_GPL(s3c_adc_register); | |||
190 | void s3c_adc_release(struct s3c_adc_client *client) | 190 | void s3c_adc_release(struct s3c_adc_client *client) |
191 | { | 191 | { |
192 | /* We should really check that nothing is in progress. */ | 192 | /* We should really check that nothing is in progress. */ |
193 | if (adc_dev->cur == client) | ||
194 | adc_dev->cur = NULL; | ||
195 | if (adc_dev->ts_pend == client) | ||
196 | adc_dev->ts_pend = NULL; | ||
197 | else { | ||
198 | struct list_head *p, *n; | ||
199 | struct s3c_adc_client *tmp; | ||
200 | |||
201 | list_for_each_safe(p, n, &adc_pending) { | ||
202 | tmp = list_entry(p, struct s3c_adc_client, pend); | ||
203 | if (tmp == client) | ||
204 | list_del(&tmp->pend); | ||
205 | } | ||
206 | } | ||
207 | |||
208 | if (adc_dev->cur == NULL) | ||
209 | s3c_adc_try(adc_dev); | ||
193 | kfree(client); | 210 | kfree(client); |
194 | } | 211 | } |
195 | EXPORT_SYMBOL_GPL(s3c_adc_release); | 212 | EXPORT_SYMBOL_GPL(s3c_adc_release); |