adc-as3514.c: cosmetics
[kugel-rb.git] / firmware / target / arm / adc-as3514.c
blob8c661eb133dd05ef6fc9c873423ca96b79c85eed
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2006 by Barry Wardell
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
21 #include "adc.h"
22 #include "kernel.h"
23 #include "ascodec.h"
24 #include "as3514.h"
26 /* Read 10-bit channel data */
27 unsigned short adc_read(int channel)
29 unsigned short data = 0;
31 if ((unsigned)channel >= NUM_ADC_CHANNELS)
32 return 0;
34 ascodec_lock();
36 /* Select channel */
37 if (ascodec_write(AS3514_ADC_0, (channel << 4)) >= 0)
39 unsigned char buf[2];
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.
50 ascodec_wait_adc_finished();
53 /* Read data */
54 if (ascodec_readbytes(AS3514_ADC_0, 2, buf) >= 0)
56 data = (((buf[0] & 0x3) << 8) | buf[1]);
60 ascodec_unlock();
62 return data;
65 void adc_init(void)