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
This commit is contained in:
Linus Nielsen Feltzing 2006-07-13 07:40:30 +00:00
parent ac13e52522
commit 5f655c93f9
9 changed files with 172 additions and 1 deletions

View file

@ -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();

View file

@ -210,3 +210,4 @@ Ioannis Koutoulakis
Alistair Marshall
Karl Ove Hufthammer
Víctor Zabalza
Ulrich Pegelow

View file

@ -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

45
firmware/drivers/m5636.c Executable file
View file

@ -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; /* ???? */
}

View file

@ -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

View file

@ -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)

25
firmware/export/m5636.h Executable file
View file

@ -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

View file

@ -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

View file

@ -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);
}