summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/main.c6
-rw-r--r--docs/CREDITS1
-rw-r--r--firmware/SOURCES5
-rwxr-xr-xfirmware/drivers/m5636.c45
-rw-r--r--firmware/export/config-iaudiox5.h3
-rw-r--r--firmware/export/config.h1
-rwxr-xr-xfirmware/export/m5636.h25
-rwxr-xr-xfirmware/target/coldfire/iaudio/x5/m5636-target.h37
-rwxr-xr-xfirmware/target/coldfire/iaudio/x5/m5636-x5.c50
9 files changed, 172 insertions, 1 deletions
diff --git a/apps/main.c b/apps/main.c
index d6e3c34..4f31cdb 100644
--- a/apps/main.c
+++ b/apps/main.c
@@ -92,6 +92,10 @@
#include "isp1362.h"
#endif
+#if CONFIG_USBOTG == USBOTG_M5636
+#include "m5636.h"
+#endif
+
/*#define AUTOROCK*/ /* define this to check for "autostart.rock" on boot */
const char appsversion[]=APPSVERSION;
@@ -282,6 +286,8 @@ void init(void)
usb_init();
#if CONFIG_USBOTG == USBOTG_ISP1362
isp1362_init();
+#elif CONFIG_USBOTG == USBOTG_M5636
+ m5636_init();
#endif
backlight_init();
diff --git a/docs/CREDITS b/docs/CREDITS
index 63bb2df..6566d59 100644
--- a/docs/CREDITS
+++ b/docs/CREDITS
@@ -210,3 +210,4 @@ Ioannis Koutoulakis
Alistair Marshall
Karl Ove Hufthammer
VĂ­ctor Zabalza
+Ulrich Pegelow
diff --git a/firmware/SOURCES b/firmware/SOURCES
index d6765ef..5d59a6b 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -206,7 +206,9 @@ usb_serial.c
#if CONFIG_USBOTG == USBOTG_ISP1362
drivers/isp1362.c
#endif
-
+#if CONFIG_USBOTG == USBOTG_M5636
+drivers/m5636.c
+#endif
#ifndef SIMULATOR
#ifdef IAUDIO_X5
@@ -219,5 +221,6 @@ target/coldfire/iaudio/x5/ata-x5.c
target/coldfire/iaudio/x5/system-x5.c
target/coldfire/iaudio/x5/usb-x5.c
target/coldfire/iaudio/x5/backlight-x5.c
+target/coldfire/iaudio/x5/m5636-x5.c
#endif
#endif
diff --git a/firmware/drivers/m5636.c b/firmware/drivers/m5636.c
new file mode 100755
index 0000000..e7b7a17
--- /dev/null
+++ b/firmware/drivers/m5636.c
@@ -0,0 +1,45 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 Ulrich Pegelow
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include "system.h"
+#include "kernel.h"
+#include "logf.h"
+#include "m5636.h"
+#include "m5636-target.h"
+
+/* Disclaimer: This code had to be developed without any documentation for the
+ M5636 USBOTG chip, due to the restrictive information policy of
+ its manufacturer.
+ The development is solely based on reverse engineering.
+ Malfunctioning (with the risk of possible damage to the
+ hardware) can not be fully excluded.
+ USE THIS CODE AT YOUR OWN RISK!
+*/
+
+/* Init: This currently just puts the M5636 into sleep mode */
+
+void m5636_init(void)
+{
+ m5636_device_init();
+
+ M5636_4068 |= 0x0003; /* ???? */
+ M5636_4068 |= 0x0080; /* ???? */
+ M5636_4078 |= 0x0001; /* ???? */
+}
+
diff --git a/firmware/export/config-iaudiox5.h b/firmware/export/config-iaudiox5.h
index b16a142..d224b3b 100644
--- a/firmware/export/config-iaudiox5.h
+++ b/firmware/export/config-iaudiox5.h
@@ -102,6 +102,9 @@
#define USB_X5STYLE
+/* USB On-the-go */
+#define CONFIG_USBOTG USBOTG_M5636
+
/* Define this if you have adjustable CPU frequency */
#define HAVE_ADJUSTABLE_CPU_FREQ
diff --git a/firmware/export/config.h b/firmware/export/config.h
index 6c2580c..3768d85 100644
--- a/firmware/export/config.h
+++ b/firmware/export/config.h
@@ -135,6 +135,7 @@
/* USB On-the-go */
#define USBOTG_ISP1362 1362
+#define USBOTG_M5636 5636
/* now go and pick yours */
#if defined(ARCHOS_PLAYER)
diff --git a/firmware/export/m5636.h b/firmware/export/m5636.h
new file mode 100755
index 0000000..33846c5
--- /dev/null
+++ b/firmware/export/m5636.h
@@ -0,0 +1,25 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 Ulrich Pegelow
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#ifndef M5636_H
+#define M5636_H
+
+void m5636_init(void);
+void m5636_dump_regs(void);
+
+#endif
diff --git a/firmware/target/coldfire/iaudio/x5/m5636-target.h b/firmware/target/coldfire/iaudio/x5/m5636-target.h
new file mode 100755
index 0000000..51cb933
--- /dev/null
+++ b/firmware/target/coldfire/iaudio/x5/m5636-target.h
@@ -0,0 +1,37 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 Ulrich Pegelow
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#ifndef M5636_TARGET_H
+#define M5636_TARGET_H
+
+#define M5636_BASE 0xf0004000L /* Rockbox: 0xf0004000; OF: 0x20004000 */
+
+/* We are currently lacking a datasheet for the M5636. No mnemonics available.
+ The registers are named according to their respective hexadecimal offsets.
+*/
+
+#define M5636_4064 (*(volatile unsigned short *)(M5636_BASE + 0x64L))
+#define M5636_4068 (*(volatile unsigned short *)(M5636_BASE + 0x68L))
+#define M5636_4078 (*(volatile unsigned short *)(M5636_BASE + 0x78L))
+
+extern void m5636_device_init(void);
+
+/* for debugging purposes only */
+extern void m5636_dump_regs(void);
+
+#endif
diff --git a/firmware/target/coldfire/iaudio/x5/m5636-x5.c b/firmware/target/coldfire/iaudio/x5/m5636-x5.c
new file mode 100755
index 0000000..d30ff36
--- /dev/null
+++ b/firmware/target/coldfire/iaudio/x5/m5636-x5.c
@@ -0,0 +1,50 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 Ulrich Pegelow
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include "config.h"
+#include "system.h"
+#include "logf.h"
+#include "m5636-target.h"
+
+void m5636_device_init(void)
+{
+ and_l(~0x00004000, &GPIO_INT_EN); /* probably redundant: disable
+ interrupt; just in case ... */
+ and_l(~0x00000004, &GPIO1_OUT); /* probably redundant: set GPIO34 low */
+ or_l( 0x00000004, &GPIO1_ENABLE); /* GPIO34 enable (see above) */
+ or_l( 0x00000004, &GPIO1_FUNCTION); /* GPIO34 function (see above) */
+}
+
+/* for debugging purposes only */
+void m5636_dump_regs(void)
+{
+ unsigned short *address;
+
+ for (address = (unsigned short *)M5636_BASE;
+ address < (unsigned short *)(M5636_BASE + 0x100);
+ address++)
+ {
+ logf("m5636 A:%08x D:%04x", address, (unsigned)*address);
+ }
+
+ logf("GPIO_INT_EN %08x", GPIO_INT_EN);
+ logf("GPIO1_OUT %08x", GPIO1_OUT);
+ logf("GPIO1_ENABLE %08x", GPIO1_ENABLE);
+ logf("GPIO1_FUNCTION %08x", GPIO1_FUNCTION);
+}