summaryrefslogtreecommitdiffstats
path: root/firmware/target/arm
diff options
context:
space:
mode:
authorBertrik Sikken <bertrik@sikken.nl>2009-07-09 20:17:47 +0000
committerBertrik Sikken <bertrik@sikken.nl>2009-07-09 20:17:47 +0000
commit9ecde3d75c2986b566a46d55b5271f7298b4658d (patch)
treec50753d5255c48dbfde156a96d87a6a45cf959b4 /firmware/target/arm
parent402b8ebeae49b498d725f85262a02e718c8c2f11 (diff)
downloadrockbox-9ecde3d75c2986b566a46d55b5271f7298b4658d.tar.gz
rockbox-9ecde3d75c2986b566a46d55b5271f7298b4658d.zip
S5L8700: Implement ADC driver
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21734 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm')
-rw-r--r--firmware/target/arm/s5l8700/adc-s5l8700.c94
-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.h35
-rw-r--r--firmware/target/arm/s5l8700/meizu-m6sp/adc-target.h35
4 files changed, 98 insertions, 76 deletions
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