Commit 0c3ee078251b85812e585b5cf5d1635afd73f4e2
Committed by
Ben Dooks
1 parent
f8c8ac8109
Exists in
master
and in
39 other branches
[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>
Showing 1 changed file with 17 additions and 0 deletions Side-by-side Diff
arch/arm/plat-s3c24xx/adc.c
... | ... | @@ -190,6 +190,23 @@ |
190 | 190 | void s3c_adc_release(struct s3c_adc_client *client) |
191 | 191 | { |
192 | 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 | 210 | kfree(client); |
194 | 211 | } |
195 | 212 | EXPORT_SYMBOL_GPL(s3c_adc_release); |