summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcin Bukat <marcin.bukat@gmail.com>2012-08-27 23:32:23 +0200
committerMarcin Bukat <marcin.bukat@gmail.com>2012-08-27 23:32:23 +0200
commit2b6886d107e5d6adf70bdf217960a5a3fc47a251 (patch)
tree30498d6ab53131882a4b3babfc71f3f6b25dc44d
parentae27c331e10fbdc4cb5516afce5eeb53eacb3962 (diff)
downloadrockbox-2b6886d107e5d6adf70bdf217960a5a3fc47a251.zip
rockbox-2b6886d107e5d6adf70bdf217960a5a3fc47a251.tar.gz
rockbox-2b6886d107e5d6adf70bdf217960a5a3fc47a251.tar.bz2
rockbox-2b6886d107e5d6adf70bdf217960a5a3fc47a251.tar.xz
rk27xx: Turn off lsadc clock when not in use
Change-Id: Ic3f29e75aa5b894f17e289263a370fac13e2f1d8
-rw-r--r--firmware/target/arm/rk27xx/adc-rk27xx.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/firmware/target/arm/rk27xx/adc-rk27xx.c b/firmware/target/arm/rk27xx/adc-rk27xx.c
index 3a2f797..48fab39 100644
--- a/firmware/target/arm/rk27xx/adc-rk27xx.c
+++ b/firmware/target/arm/rk27xx/adc-rk27xx.c
@@ -28,6 +28,14 @@
unsigned short adc_read(int channel)
{
+ unsigned short result;
+
+ /* ungate lsadc clocks */
+ SCU_CLKCFG &= ~(3<<23);
+
+ /* wait a bit for clock to stabilize */
+ udelay(10);
+
ADC_CTRL = (1<<4)|(1<<3) | (channel & (NUM_ADC_CHANNELS - 1));
/* Wait for conversion ready.
@@ -38,16 +46,18 @@ unsigned short adc_read(int channel)
* ~10us should be enough so we wait 20us to be on the safe side
*/
udelay(20);
-
+
/* 10bits result */
- return (ADC_DATA & 0x3ff);
+ result = (ADC_DATA & 0x3ff);
+
+ /* turn off lsadc clock when not in use */
+ SCU_CLKCFG |= (3<<23);
+
+ return result;
}
void adc_init(void)
{
/* ADC clock divider to reach max 1MHz */
SCU_DIVCON1 = (SCU_DIVCON1 & ~(0xff<<10)) | (49<<10);
-
- /* enable clocks for ADC */
- SCU_CLKCFG &= ~(3<<23);
}