diff options
author | Mihail Zenkov <mihail.zenkov@gmail.com> | 2016-02-20 03:36:26 +0000 |
---|---|---|
committer | Mihail Zenkov <mihail.zenkov@gmail.com> | 2016-04-05 01:55:38 +0000 |
commit | c7daef36c5c75b8541d38cec4793826ab085d5ad (patch) | |
tree | 7a690b321d942ad4f12a88682a0689d253c4eb7c /firmware/drivers/adc-as3514.c | |
parent | ce90c0481a6c7a5a455791e4e7366c589e52b68c (diff) | |
download | rockbox-c7daef36c5c75b8541d38cec4793826ab085d5ad.tar.gz rockbox-c7daef36c5c75b8541d38cec4793826ab085d5ad.zip |
as3525: reverting I2C2 to non-interrupts version
Interrupts version is cause of freeze on USB extraction.
Also non-interrupts version much simpler and faster.
Change-Id: I30a2993cdcaa85abfba77ca06bfacd5b6b4353e2
Diffstat (limited to 'firmware/drivers/adc-as3514.c')
-rw-r--r-- | firmware/drivers/adc-as3514.c | 32 |
1 files changed, 5 insertions, 27 deletions
diff --git a/firmware/drivers/adc-as3514.c b/firmware/drivers/adc-as3514.c index 8c661eb133..3b411a379d 100644 --- a/firmware/drivers/adc-as3514.c +++ b/firmware/drivers/adc-as3514.c | |||
@@ -26,40 +26,18 @@ | |||
26 | /* Read 10-bit channel data */ | 26 | /* Read 10-bit channel data */ |
27 | unsigned short adc_read(int channel) | 27 | unsigned short adc_read(int channel) |
28 | { | 28 | { |
29 | unsigned short data = 0; | 29 | unsigned char buf[2]; |
30 | |||
31 | if ((unsigned)channel >= NUM_ADC_CHANNELS) | ||
32 | return 0; | ||
33 | 30 | ||
34 | ascodec_lock(); | 31 | ascodec_lock(); |
35 | 32 | ||
36 | /* Select channel */ | 33 | /* Select channel */ |
37 | if (ascodec_write(AS3514_ADC_0, (channel << 4)) >= 0) | 34 | ascodec_write(AS3514_ADC_0, (channel << 4)); |
38 | { | ||
39 | unsigned char buf[2]; | ||
40 | |||
41 | /* | ||
42 | * The AS3514 ADC will trigger an interrupt when the conversion | ||
43 | * is finished, if the corresponding enable bit in IRQ_ENRD2 | ||
44 | * is set. | ||
45 | * Previously the code did not wait and this apparently did | ||
46 | * not pose any problems, but this should be more correct. | ||
47 | * Without the wait the data read back may be completely or | ||
48 | * partially (first one of the two bytes) stale. | ||
49 | */ | ||
50 | ascodec_wait_adc_finished(); | ||
51 | 35 | ||
52 | 36 | ascodec_readbytes(AS3514_ADC_0, 2, buf); | |
53 | /* Read data */ | ||
54 | if (ascodec_readbytes(AS3514_ADC_0, 2, buf) >= 0) | ||
55 | { | ||
56 | data = (((buf[0] & 0x3) << 8) | buf[1]); | ||
57 | } | ||
58 | } | ||
59 | 37 | ||
60 | ascodec_unlock(); | 38 | ascodec_unlock(); |
61 | 39 | ||
62 | return data; | 40 | return (((buf[0] & 0x3) << 8) | buf[1]); |
63 | } | 41 | } |
64 | 42 | ||
65 | void adc_init(void) | 43 | void adc_init(void) |