Commit 0c3ee078251b85812e585b5cf5d1635afd73f4e2

Authored by Ramax Lo
Committed by Ben Dooks
1 parent f8c8ac8109

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