From 5f655c93f931236c173700f54e4b329bf709e7cc Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Thu, 13 Jul 2006 07:40:30 +0000 Subject: [PATCH] Patch #5639 by Ulrich Pegelow, inits the M5636 USBOTG chip on the X5 to reduce the battery consumption. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10208 a1c6a512-1295-4272-9138-f99709370657 --- apps/main.c | 6 +++ docs/CREDITS | 1 + firmware/SOURCES | 5 +- firmware/drivers/m5636.c | 45 +++++++++++++++++ firmware/export/config-iaudiox5.h | 3 ++ firmware/export/config.h | 1 + firmware/export/m5636.h | 25 ++++++++++ .../target/coldfire/iaudio/x5/m5636-target.h | 37 ++++++++++++++ firmware/target/coldfire/iaudio/x5/m5636-x5.c | 50 +++++++++++++++++++ 9 files changed, 172 insertions(+), 1 deletion(-) create mode 100755 firmware/drivers/m5636.c create mode 100755 firmware/export/m5636.h create mode 100755 firmware/target/coldfire/iaudio/x5/m5636-target.h create mode 100755 firmware/target/coldfire/iaudio/x5/m5636-x5.c diff --git a/apps/main.c b/apps/main.c index d6e3c342c9..4f31cdb58a 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 63bb2df1a5..6566d5962b 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 d6765ef627..5d59a6bd1e 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 0000000000..e7b7a174df --- /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 b16a142a28..d224b3b45e 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 6c2580c360..3768d857cb 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 0000000000..33846c57d5 --- /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 0000000000..51cb933c07 --- /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 0000000000..d30ff360d6 --- /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); +}