diff options
author | Bertrik Sikken <bertrik@sikken.nl> | 2009-07-09 20:17:47 +0000 |
---|---|---|
committer | Bertrik Sikken <bertrik@sikken.nl> | 2009-07-09 20:17:47 +0000 |
commit | 9ecde3d75c2986b566a46d55b5271f7298b4658d (patch) | |
tree | c50753d5255c48dbfde156a96d87a6a45cf959b4 /firmware | |
parent | 402b8ebeae49b498d725f85262a02e718c8c2f11 (diff) |
S5L8700: Implement ADC driver
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21734 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/export/config.h | 3 | ||||
-rw-r--r-- | firmware/target/arm/s5l8700/adc-s5l8700.c | 94 | ||||
-rw-r--r-- | firmware/target/arm/s5l8700/adc-target.h (renamed from firmware/target/arm/s5l8700/meizu-m3/adc-target.h) | 10 | ||||
-rw-r--r-- | firmware/target/arm/s5l8700/meizu-m6sl/adc-target.h | 35 | ||||
-rw-r--r-- | firmware/target/arm/s5l8700/meizu-m6sp/adc-target.h | 35 |
5 files changed, 100 insertions, 77 deletions
diff --git a/firmware/export/config.h b/firmware/export/config.h index 5148096a30..6e4f9d05c9 100644 --- a/firmware/export/config.h +++ b/firmware/export/config.h @@ -554,7 +554,8 @@ Lyre prototype 1*/ #endif /* BOOTLOADER */ #if defined(HAVE_USBSTACK) || (CONFIG_CPU == JZ4732) \ - || (CONFIG_CPU == AS3525) || (CONFIG_CPU == S3C2440) + || (CONFIG_CPU == AS3525) || (CONFIG_CPU == S3C2440) \ + || (CONFIG_CPU == S5L8700) #define HAVE_WAKEUP_OBJECTS #endif diff --git a/firmware/target/arm/s5l8700/adc-s5l8700.c b/firmware/target/arm/s5l8700/adc-s5l8700.c new file mode 100644 index 0000000000..4407334099 --- /dev/null +++ b/firmware/target/arm/s5l8700/adc-s5l8700.c @@ -0,0 +1,94 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2009 by Bertrik Sikken + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include "config.h" + +#include "inttypes.h" +#include "s5l8700.h" +#include "adc.h" +#include "adc-target.h" +#include "kernel.h" + +/* Driver for the built-in ADC of the s5l8700 + + The ADC is put into standby mode after each conversion. + */ + +#define ADC_PRESCALER 100 /* 1MHz ADC clock, assuming 100 MHz PCLK */ +#define ADC_DEFAULT (1<<14) | /* prescale enable */ \ + ((ADC_PRESCALER-1)<<6) | /* prescaler */ \ + (0<<3) | /* sel_mux */ \ + (0<<2) | /* stdbm */ \ + (0<<1) | /* read_start */ \ + (0<<0) /* enable start */ \ + + +static struct mutex adc_mtx; +static struct wakeup adc_wakeup; + +void INT_ADC(void) +{ + wakeup_signal(&adc_wakeup); +} + +unsigned short adc_read(int channel) +{ + unsigned short data; + + mutex_lock(&adc_mtx); + + /* set channel and start conversion */ + ADCCON = ADC_DEFAULT | + (channel << 3) | + (1 << 0); /* enable start */ + + /* wait for conversion */ + wakeup_wait(&adc_wakeup, TIMEOUT_BLOCK); + + /* get the converted data */ + data = ADCDAT0; + + /* put ADC back into standby */ + ADCCON |= (1 << 2); + + mutex_unlock(&adc_mtx); + + return data; +} + +void adc_init(void) +{ + mutex_init(&adc_mtx); + wakeup_init(&adc_wakeup); + + /* enable clock to ADC */ + PWRCON &= ~(1 << 10); + + /* configure ADC and put in standby */ + ADCCON = ADC_DEFAULT | (1 << 2); + + /* configure conversion delay (use default) */ + ADCDLY = 0xFF; + + /* enable interrupt */ + INTMSK |= (1 << 31); +} + diff --git a/firmware/target/arm/s5l8700/meizu-m3/adc-target.h b/firmware/target/arm/s5l8700/adc-target.h index d21d401735..b54d1bf4cc 100644 --- a/firmware/target/arm/s5l8700/meizu-m3/adc-target.h +++ b/firmware/target/arm/s5l8700/adc-target.h @@ -21,15 +21,13 @@ #ifndef _ADC_TARGET_H_ #define _ADC_TARGET_H_ -/* only two channels used by the Gigabeat */ -#define NUM_ADC_CHANNELS 1 +#define NUM_ADC_CHANNELS 4 -#define ADC_UNKNOWN_1 0 -#define ADC_UNKNOWN_2 1 +#define ADC_UNKNOWN_0 0 +#define ADC_UNKNOWN_1 1 #define ADC_BATTERY 2 -#define ADC_UNKNOWN_4 3 +#define ADC_UNKNOWN_3 3 #define ADC_UNREG_POWER ADC_BATTERY /* For compatibility */ -#define ADC_READ_ERROR 0xFFFF #endif diff --git a/firmware/target/arm/s5l8700/meizu-m6sl/adc-target.h b/firmware/target/arm/s5l8700/meizu-m6sl/adc-target.h deleted file mode 100644 index d21d401735..0000000000 --- a/firmware/target/arm/s5l8700/meizu-m6sl/adc-target.h +++ /dev/null @@ -1,35 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 by Barry Wardell - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ -#ifndef _ADC_TARGET_H_ -#define _ADC_TARGET_H_ - -/* only two channels used by the Gigabeat */ -#define NUM_ADC_CHANNELS 1 - -#define ADC_UNKNOWN_1 0 -#define ADC_UNKNOWN_2 1 -#define ADC_BATTERY 2 -#define ADC_UNKNOWN_4 3 - -#define ADC_UNREG_POWER ADC_BATTERY /* For compatibility */ -#define ADC_READ_ERROR 0xFFFF - -#endif diff --git a/firmware/target/arm/s5l8700/meizu-m6sp/adc-target.h b/firmware/target/arm/s5l8700/meizu-m6sp/adc-target.h deleted file mode 100644 index d21d401735..0000000000 --- a/firmware/target/arm/s5l8700/meizu-m6sp/adc-target.h +++ /dev/null @@ -1,35 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 by Barry Wardell - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ -#ifndef _ADC_TARGET_H_ -#define _ADC_TARGET_H_ - -/* only two channels used by the Gigabeat */ -#define NUM_ADC_CHANNELS 1 - -#define ADC_UNKNOWN_1 0 -#define ADC_UNKNOWN_2 1 -#define ADC_BATTERY 2 -#define ADC_UNKNOWN_4 3 - -#define ADC_UNREG_POWER ADC_BATTERY /* For compatibility */ -#define ADC_READ_ERROR 0xFFFF - -#endif |