From c7daef36c5c75b8541d38cec4793826ab085d5ad Mon Sep 17 00:00:00 2001 From: Mihail Zenkov Date: Sat, 20 Feb 2016 03:36:26 +0000 Subject: 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 --- firmware/drivers/adc-as3514.c | 32 +++++--------------------------- 1 file changed, 5 insertions(+), 27 deletions(-) (limited to 'firmware/drivers/adc-as3514.c') 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 @@ /* 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) -- cgit v1.2.3