diff options
| author | Marcin Bukat <marcin.bukat@gmail.com> | 2012-08-27 23:32:23 +0200 |
|---|---|---|
| committer | Marcin Bukat <marcin.bukat@gmail.com> | 2012-08-27 23:32:23 +0200 |
| commit | 2b6886d107e5d6adf70bdf217960a5a3fc47a251 (patch) | |
| tree | 30498d6ab53131882a4b3babfc71f3f6b25dc44d | |
| parent | ae27c331e10fbdc4cb5516afce5eeb53eacb3962 (diff) | |
| download | rockbox-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.c | 20 |
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); } |