summaryrefslogtreecommitdiff
path: root/firmware/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers')
-rw-r--r--firmware/drivers/adc-as3514.c32
1 files changed, 5 insertions, 27 deletions
diff --git a/firmware/drivers/adc-as3514.c b/firmware/drivers/adc-as3514.c
index 8c661eb..3b411a3 100644
--- a/firmware/drivers/adc-as3514.c
+++ b/firmware/drivers/adc-as3514.c
@@ -26,40 +26,18 @@
/* Read 10-bit channel data */
unsigned short adc_read(int channel)
{
- unsigned short data = 0;
-
- if ((unsigned)channel >= NUM_ADC_CHANNELS)
- return 0;
+ unsigned char buf[2];
ascodec_lock();
/* Select channel */
- if (ascodec_write(AS3514_ADC_0, (channel << 4)) >= 0)
- {
- unsigned char buf[2];
-
- /*
- * The AS3514 ADC will trigger an interrupt when the conversion
- * is finished, if the corresponding enable bit in IRQ_ENRD2
- * is set.
- * Previously the code did not wait and this apparently did
- * not pose any problems, but this should be more correct.
- * Without the wait the data read back may be completely or
- * partially (first one of the two bytes) stale.
- */
- ascodec_wait_adc_finished();
+ ascodec_write(AS3514_ADC_0, (channel << 4));
-
- /* Read data */
- if (ascodec_readbytes(AS3514_ADC_0, 2, buf) >= 0)
- {
- data = (((buf[0] & 0x3) << 8) | buf[1]);
- }
- }
+ ascodec_readbytes(AS3514_ADC_0, 2, buf);
ascodec_unlock();
-
- return data;
+
+ return (((buf[0] & 0x3) << 8) | buf[1]);
}
void adc_init(void)