added mostly dummy changes to allow building of a Sansa e200 bootloader
without functionality git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10399 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
97cf946e4d
commit
0fc30d1174
18 changed files with 874 additions and 5 deletions
|
@ -1,5 +1,9 @@
|
|||
#if (CONFIG_CPU == PP5002) || (CONFIG_CPU == PP5020)
|
||||
ipod.c
|
||||
#elif defined(SANSA_E200)
|
||||
e200.c
|
||||
#elif defined(IRIVER_H10)
|
||||
h10.c
|
||||
#else
|
||||
main.c
|
||||
#endif
|
||||
|
|
353
bootloader/e200.c
Normal file
353
bootloader/e200.c
Normal file
|
@ -0,0 +1,353 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2005 by Dave Chapman
|
||||
*
|
||||
* Based on ipod.c by Dave Chapman
|
||||
* Based on Rockbox iriver bootloader by Linus Nielsen Feltzing
|
||||
* and the ipodlinux bootloader by Daniel Palffy and Bernard Leach
|
||||
*
|
||||
* 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 <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "cpu.h"
|
||||
#include "system.h"
|
||||
#include "lcd.h"
|
||||
#include "kernel.h"
|
||||
#include "thread.h"
|
||||
#include "ata.h"
|
||||
#include "fat.h"
|
||||
#include "disk.h"
|
||||
#include "font.h"
|
||||
#include "adc.h"
|
||||
#include "backlight.h"
|
||||
#include "panic.h"
|
||||
#include "power.h"
|
||||
#include "file.h"
|
||||
|
||||
#define XSC(X) #X
|
||||
#define SC(X) XSC(X)
|
||||
|
||||
#define DRAM_START 0x10000000
|
||||
|
||||
#define BUTTON_LEFT 1
|
||||
#define BUTTON_MENU 2
|
||||
#define BUTTON_RIGHT 3
|
||||
#define BUTTON_PLAY 4
|
||||
#define BUTTON_HOLD 5
|
||||
|
||||
/* Size of the buffer to store the loaded Rockbox/Linux image */
|
||||
#define MAX_LOADSIZE (4*1024*1024)
|
||||
|
||||
char version[] = APPSVERSION;
|
||||
|
||||
typedef struct _image {
|
||||
unsigned type; /* '' */
|
||||
unsigned id; /* */
|
||||
unsigned pad1; /* 0000 0000 */
|
||||
unsigned devOffset; /* byte offset of start of image code */
|
||||
unsigned len; /* length in bytes of image */
|
||||
void *addr; /* load address */
|
||||
unsigned entryOffset; /* execution start within image */
|
||||
unsigned chksum; /* checksum for image */
|
||||
unsigned vers; /* image version */
|
||||
unsigned loadAddr; /* load address for image */
|
||||
} image_t;
|
||||
|
||||
extern image_t boot_table[];
|
||||
|
||||
int line=0;
|
||||
|
||||
static void memmove16(void *dest, const void *src, unsigned count)
|
||||
{
|
||||
struct bufstr {
|
||||
unsigned _buf[4];
|
||||
} *d, *s;
|
||||
|
||||
if (src >= dest) {
|
||||
count = (count + 15) >> 4;
|
||||
d = (struct bufstr *) dest;
|
||||
s = (struct bufstr *) src;
|
||||
while (count--)
|
||||
*d++ = *s++;
|
||||
} else {
|
||||
count = (count + 15) >> 4;
|
||||
d = (struct bufstr *)(dest + (count <<4));
|
||||
s = (struct bufstr *)(src + (count <<4));
|
||||
while (count--)
|
||||
*--d = *--s;
|
||||
}
|
||||
}
|
||||
|
||||
#if CONFIG_KEYPAD == IPOD_4G_PAD && !defined(IPOD_MINI)
|
||||
/* check if number of seconds has past */
|
||||
int timer_check(int clock_start, unsigned int usecs)
|
||||
{
|
||||
if ((USEC_TIMER - clock_start) >= usecs) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void ser_opto_keypad_cfg(int val)
|
||||
{
|
||||
int start_time;
|
||||
|
||||
outl(inl(0x6000d004) & ~0x80, 0x6000d004);
|
||||
|
||||
outl(inl(0x7000c104) | 0xc000000, 0x7000c104);
|
||||
outl(val, 0x7000c120);
|
||||
outl(inl(0x7000c100) | 0x80000000, 0x7000c100);
|
||||
|
||||
outl(inl(0x6000d024) & ~0x10, 0x6000d024);
|
||||
outl(inl(0x6000d014) | 0x10, 0x6000d014);
|
||||
|
||||
start_time = USEC_TIMER;
|
||||
do {
|
||||
if ((inl(0x7000c104) & 0x80000000) == 0) {
|
||||
break;
|
||||
}
|
||||
} while (timer_check(start_time, 1500) != 0);
|
||||
|
||||
outl(inl(0x7000c100) & ~0x80000000, 0x7000c100);
|
||||
|
||||
outl(inl(0x6000d004) | 0x80, 0x6000d004);
|
||||
outl(inl(0x6000d024) | 0x10, 0x6000d024);
|
||||
outl(inl(0x6000d014) & ~0x10, 0x6000d014);
|
||||
|
||||
outl(inl(0x7000c104) | 0xc000000, 0x7000c104);
|
||||
outl(inl(0x7000c100) | 0x60000000, 0x7000c100);
|
||||
}
|
||||
|
||||
int opto_keypad_read(void)
|
||||
{
|
||||
int loop_cnt, had_io = 0;
|
||||
|
||||
for (loop_cnt = 5; loop_cnt != 0;)
|
||||
{
|
||||
int key_pressed = 0;
|
||||
int start_time;
|
||||
unsigned int key_pad_val;
|
||||
|
||||
ser_opto_keypad_cfg(0x8000023a);
|
||||
|
||||
start_time = USEC_TIMER;
|
||||
do {
|
||||
if (inl(0x7000c104) & 0x4000000) {
|
||||
had_io = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
if (had_io != 0) {
|
||||
break;
|
||||
}
|
||||
} while (timer_check(start_time, 1500) != 0);
|
||||
|
||||
key_pad_val = inl(0x7000c140);
|
||||
if ((key_pad_val & ~0x7fff0000) != 0x8000023a) {
|
||||
loop_cnt--;
|
||||
} else {
|
||||
key_pad_val = (key_pad_val << 11) >> 27;
|
||||
key_pressed = 1;
|
||||
}
|
||||
|
||||
outl(inl(0x7000c100) | 0x60000000, 0x7000c100);
|
||||
outl(inl(0x7000c104) | 0xc000000, 0x7000c104);
|
||||
|
||||
if (key_pressed != 0) {
|
||||
return key_pad_val ^ 0x1f;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int key_pressed(void)
|
||||
{
|
||||
unsigned char state;
|
||||
|
||||
#if CONFIG_KEYPAD == IPOD_4G_PAD
|
||||
#ifdef IPOD_MINI /* mini 1G only */
|
||||
state = GPIOA_INPUT_VAL & 0x3f;
|
||||
if ((state & 0x10) == 0) return BUTTON_LEFT;
|
||||
if ((state & 0x2) == 0) return BUTTON_MENU;
|
||||
if ((state & 0x4) == 0) return BUTTON_PLAY;
|
||||
if ((state & 0x8) == 0) return BUTTON_RIGHT;
|
||||
#else
|
||||
state = opto_keypad_read();
|
||||
if ((state & 0x4) == 0) return BUTTON_LEFT;
|
||||
if ((state & 0x10) == 0) return BUTTON_MENU;
|
||||
if ((state & 0x8) == 0) return BUTTON_PLAY;
|
||||
if ((state & 0x2) == 0) return BUTTON_RIGHT;
|
||||
#endif
|
||||
#elif CONFIG_KEYPAD == IPOD_3G_PAD
|
||||
state = inb(0xcf000030);
|
||||
if (((state & 0x20) == 0)) return BUTTON_HOLD; /* hold on */
|
||||
if ((state & 0x08) == 0) return BUTTON_LEFT;
|
||||
if ((state & 0x10) == 0) return BUTTON_MENU;
|
||||
if ((state & 0x04) == 0) return BUTTON_PLAY;
|
||||
if ((state & 0x01) == 0) return BUTTON_RIGHT;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
int load_rockbox(unsigned char* buf)
|
||||
{
|
||||
int fd;
|
||||
int rc;
|
||||
int len;
|
||||
unsigned long chksum;
|
||||
char model[5];
|
||||
unsigned long sum;
|
||||
int i;
|
||||
char str[80];
|
||||
|
||||
fd = open("/.rockbox/" BOOTFILE, O_RDONLY);
|
||||
if(fd < 0)
|
||||
{
|
||||
fd = open("/" BOOTFILE, O_RDONLY);
|
||||
if(fd < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
len = filesize(fd) - 8;
|
||||
|
||||
if (len > MAX_LOADSIZE)
|
||||
return -6;
|
||||
|
||||
lseek(fd, FIRMWARE_OFFSET_FILE_CRC, SEEK_SET);
|
||||
|
||||
rc = read(fd, &chksum, 4);
|
||||
chksum=betoh32(chksum); /* Rockbox checksums are big-endian */
|
||||
if(rc < 4)
|
||||
return -2;
|
||||
|
||||
rc = read(fd, model, 4);
|
||||
if(rc < 4)
|
||||
return -3;
|
||||
|
||||
model[4] = 0;
|
||||
|
||||
snprintf(str, 80, "Model: %s", model);
|
||||
lcd_puts(0, line++, str);
|
||||
snprintf(str, 80, "Checksum: %x", chksum);
|
||||
lcd_puts(0, line++, str);
|
||||
lcd_update();
|
||||
|
||||
lseek(fd, FIRMWARE_OFFSET_FILE_DATA, SEEK_SET);
|
||||
|
||||
rc = read(fd, buf, len);
|
||||
if(rc < len)
|
||||
return -4;
|
||||
|
||||
close(fd);
|
||||
|
||||
sum = MODEL_NUMBER;
|
||||
|
||||
for(i = 0;i < len;i++) {
|
||||
sum += buf[i];
|
||||
}
|
||||
|
||||
snprintf(str, 80, "Sum: %x", sum);
|
||||
lcd_puts(0, line++, str);
|
||||
lcd_update();
|
||||
|
||||
if(sum != chksum)
|
||||
return -5;
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
|
||||
/* A buffer to load the Linux kernel or Rockbox into */
|
||||
unsigned char loadbuffer[MAX_LOADSIZE];
|
||||
|
||||
void* main(void)
|
||||
{
|
||||
char buf[256];
|
||||
int imageno=0;
|
||||
int i;
|
||||
int rc;
|
||||
int padding = 0x4400;
|
||||
image_t *tblp = boot_table;
|
||||
void* entry;
|
||||
struct partinfo* pinfo;
|
||||
unsigned short* identify_info;
|
||||
|
||||
/* Turn on the backlight */
|
||||
|
||||
#if CONFIG_BACKLIGHT==BL_IPOD4G
|
||||
/* brightness full */
|
||||
outl(0x80000000 | (0xff << 16), 0x7000a010);
|
||||
|
||||
/* set port B03 on */
|
||||
outl(((0x100 | 1) << 3), 0x6000d824);
|
||||
|
||||
#elif CONFIG_BACKLIGHT==BL_IPODMINI
|
||||
/* set port B03 on */
|
||||
outl(((0x100 | 1) << 3), 0x6000d824);
|
||||
|
||||
#elif CONFIG_BACKLIGHT==BL_IPODNANO
|
||||
|
||||
/* set port B03 on */
|
||||
outl(((0x100 | 1) << 3), 0x6000d824);
|
||||
|
||||
/* set port L07 on */
|
||||
outl(((0x100 | 1) << 7), 0x6000d12c);
|
||||
#elif CONFIG_BACKLIGHT==BL_IPOD3G
|
||||
outl(inl(IPOD_LCD_BASE) | 0x2, IPOD_LCD_BASE);
|
||||
#endif
|
||||
|
||||
/* Return the start address in loaded image */
|
||||
return entry;
|
||||
}
|
||||
|
||||
/* These functions are present in the firmware library, but we reimplement
|
||||
them here because the originals do a lot more than we want */
|
||||
|
||||
void reset_poweroff_timer(void)
|
||||
{
|
||||
}
|
||||
|
||||
int dbg_ports(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void mpeg_stop(void)
|
||||
{
|
||||
}
|
||||
|
||||
void usb_acknowledge(void)
|
||||
{
|
||||
}
|
||||
|
||||
void usb_wait_for_disconnect(void)
|
||||
{
|
||||
}
|
||||
|
||||
void sys_poweroff(void)
|
||||
{
|
||||
}
|
||||
|
||||
void system_reboot(void)
|
||||
{
|
||||
|
||||
}
|
|
@ -16,3 +16,4 @@ target/arm/*.[chS]
|
|||
target/sh/*.[chS]
|
||||
target/coldfire/*.[chS]
|
||||
target/coldfire/iaudio/x5/*.[chS]
|
||||
target/arm/sandisk/sansa-e200/*.[chS]
|
||||
|
|
|
@ -96,12 +96,12 @@ drivers/lcd-ipodvideo.c
|
|||
#if CONFIG_LCD==LCD_H300
|
||||
drivers/lcd-h300.c
|
||||
#endif
|
||||
#ifndef IAUDIO_X5
|
||||
#ifndef TARGET_TREE
|
||||
drivers/power.c
|
||||
#endif
|
||||
drivers/led.c
|
||||
#ifndef SIMULATOR
|
||||
#ifndef IAUDIO_X5
|
||||
#ifndef TARGET_TREE
|
||||
drivers/adc.c
|
||||
#endif
|
||||
#ifdef HAVE_MMC
|
||||
|
@ -110,9 +110,11 @@ drivers/ata_mmc.c
|
|||
#ifdef HAVE_FLASH_DISK
|
||||
drivers/ata_flash.c
|
||||
#else
|
||||
#ifndef SANSA_E200
|
||||
drivers/ata.c
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
drivers/button.c
|
||||
drivers/dac.c
|
||||
drivers/fat.c
|
||||
|
@ -217,6 +219,11 @@ drivers/isp1362.c
|
|||
drivers/m5636.c
|
||||
#endif
|
||||
|
||||
#ifdef SANSA_E200
|
||||
target/arm/sandisk/sansa-e200/ata.c
|
||||
target/arm/sandisk/sansa-e200/lcd.c
|
||||
#endif
|
||||
|
||||
#ifdef IAUDIO_X5
|
||||
target/coldfire/iaudio/x5/power-x5.c
|
||||
#ifndef SIMULATOR
|
||||
|
|
|
@ -30,7 +30,8 @@
|
|||
|
||||
#if (CONFIG_CPU != MCF5249) && (CONFIG_CPU != TCC730) && \
|
||||
(CONFIG_CPU != PP5020) && (CONFIG_CPU != PNX0101) && \
|
||||
(CONFIG_CPU != PP5002) && (CONFIG_CPU != MCF5250)
|
||||
(CONFIG_CPU != PP5002) && (CONFIG_CPU != MCF5250) && \
|
||||
(CONFIG_CPU != PP5024)
|
||||
|
||||
/* FIX: this doesn't work on iRiver or Gmini or iPod yet */
|
||||
/* iFP7xx has no remote */
|
||||
|
|
121
firmware/export/config-e200.h
Normal file
121
firmware/export/config-e200.h
Normal file
|
@ -0,0 +1,121 @@
|
|||
/*
|
||||
* This config file is for the Sandisk Sansa e200
|
||||
*/
|
||||
#define TARGET_TREE /* this target is using the target tree system */
|
||||
|
||||
/* For Rolo and boot loader */
|
||||
#define MODEL_NUMBER 12
|
||||
|
||||
/* define this if you have recording possibility */
|
||||
/*#define HAVE_RECORDING 1*/ /* TODO: add support for this */
|
||||
|
||||
/* define this if you have a bitmap LCD display */
|
||||
#define HAVE_LCD_BITMAP 1
|
||||
|
||||
/* define this if you have a colour LCD */
|
||||
#define HAVE_LCD_COLOR 1
|
||||
|
||||
/* define this if you have access to the quickscreen */
|
||||
#define HAVE_QUICKSCREEN
|
||||
|
||||
/* LCD dimensions */
|
||||
#define LCD_WIDTH 176
|
||||
#define LCD_HEIGHT 220
|
||||
#define LCD_DEPTH 16 /* 65536 colours */
|
||||
#define LCD_PIXELFORMAT RGB565SWAPPED /* rgb565 byte-swapped */
|
||||
|
||||
/* #define IRAM_LCDFRAMEBUFFER IDATA_ATTR *//* put the lcd frame buffer in IRAM */
|
||||
|
||||
#define CONFIG_KEYPAD SANSA_E200_PAD
|
||||
|
||||
/* Define this if you do software codec */
|
||||
#define CONFIG_CODEC SWCODEC
|
||||
|
||||
/* define this if you have a real-time clock */
|
||||
#ifndef BOOTLOADER
|
||||
#define CONFIG_RTC RTC_E8564 /* TODO: figure this out */
|
||||
#endif
|
||||
|
||||
/* Define this if you have a software controlled poweroff */
|
||||
#define HAVE_SW_POWEROFF
|
||||
|
||||
/* The number of bytes reserved for loadable codecs */
|
||||
#define CODEC_SIZE 0x80000
|
||||
|
||||
/* The number of bytes reserved for loadable plugins */
|
||||
#define PLUGIN_BUFFER_SIZE 0x80000
|
||||
|
||||
/* Define this if you have the WM8975 audio codec */
|
||||
#define HAVE_WM8731
|
||||
|
||||
#define AB_REPEAT_ENABLE 1
|
||||
|
||||
/* FM Tuner */
|
||||
/*#define CONFIG_TUNER TEA5767
|
||||
#define CONFIG_TUNER_XTAL 32768 *//* TODO: what is this? */
|
||||
|
||||
/* Define this for LCD backlight available */
|
||||
#define CONFIG_BACKLIGHT BL_H10 /* TODO: figure this out, probably not necessary
|
||||
because of 'target' stuff */
|
||||
|
||||
#define BATTERY_CAPACITY_DEFAULT 700 /* default battery capacity
|
||||
TODO: check this, probably different
|
||||
for different models too */
|
||||
|
||||
#ifndef SIMULATOR
|
||||
|
||||
/* Define this if you have a PortalPlayer PP5024 */
|
||||
#define CONFIG_CPU PP5024
|
||||
|
||||
/* Define this if you want to use the PP5020 i2c interface */
|
||||
#define CONFIG_I2C I2C_PP5020
|
||||
|
||||
/* Type of mobile power */
|
||||
#define CONFIG_BATTERY BATT_LPCS355385
|
||||
#define BATTERY_CAPACITY_MIN 1500 /* min. capacity selectable */
|
||||
#define BATTERY_CAPACITY_MAX 1600 /* max. capacity selectable */
|
||||
#define BATTERY_CAPACITY_INC 10 /* capacity increment */
|
||||
#define BATTERY_TYPES_COUNT 1 /* only one type */
|
||||
#define BATTERY_SCALE_FACTOR 5865
|
||||
|
||||
/* Hardware controlled charging? FIXME */
|
||||
//#define CONFIG_CHARGING CHARGING_SIMPLE
|
||||
|
||||
/* define this if the hardware can be powered off while charging */
|
||||
/* TODO: should this be set for the H10? */
|
||||
//#define HAVE_POWEROFF_WHILE_CHARGING
|
||||
|
||||
/* The start address index for ROM builds */
|
||||
#define ROM_START 0x00000000
|
||||
|
||||
/* Define this to the CPU frequency */
|
||||
/* TODO: this is probably wrong */
|
||||
#define CPU_FREQ 11289600
|
||||
|
||||
/* Type of LCD TODO: hopefully the same as the x5 but check this*/
|
||||
#define CONFIG_LCD LCD_X5
|
||||
|
||||
/* Offset ( in the firmware file's header ) to the file length */
|
||||
#define FIRMWARE_OFFSET_FILE_LENGTH 0
|
||||
|
||||
/* Offset ( in the firmware file's header ) to the file CRC */
|
||||
#define FIRMWARE_OFFSET_FILE_CRC 0
|
||||
|
||||
/* Offset ( in the firmware file's header ) to the real data */
|
||||
#define FIRMWARE_OFFSET_FILE_DATA 8
|
||||
|
||||
/* #define USB_IPODSTYLE */
|
||||
|
||||
/* define this if the unit can be powered or charged via USB */
|
||||
#define HAVE_USB_POWER
|
||||
|
||||
/* Virtual LED (icon) */
|
||||
#define CONFIG_LED LED_VIRTUAL
|
||||
|
||||
/* Define this if you have adjustable CPU frequency */
|
||||
/*#define HAVE_ADJUSTABLE_CPU_FREQ Let's say we don't for now*/
|
||||
|
||||
#define BOOTFILE_EXT "e200"
|
||||
#define BOOTFILE "rockbox." BOOTFILE_EXT
|
||||
|
||||
#endif
|
120
firmware/export/config-h10.h
Normal file
120
firmware/export/config-h10.h
Normal file
|
@ -0,0 +1,120 @@
|
|||
/*
|
||||
* This config file is for the iriver H10
|
||||
*/
|
||||
|
||||
/* For Rolo and boot loader */
|
||||
#define MODEL_NUMBER 11
|
||||
|
||||
/* define this if you have recording possibility */
|
||||
/*#define HAVE_RECORDING 1*/ /* TODO: add support for this */
|
||||
|
||||
/* define this if you have a bitmap LCD display */
|
||||
#define HAVE_LCD_BITMAP 1
|
||||
|
||||
/* define this if you have a colour LCD */
|
||||
#define HAVE_LCD_COLOR 1
|
||||
|
||||
/* define this if you have access to the quickscreen */
|
||||
#define HAVE_QUICKSCREEN
|
||||
|
||||
/* LCD dimensions */
|
||||
#define LCD_WIDTH 160
|
||||
#define LCD_HEIGHT 128
|
||||
#define LCD_DEPTH 16 /* 65536 colours */
|
||||
#define LCD_PIXELFORMAT RGB565SWAPPED /* rgb565 byte-swapped */
|
||||
|
||||
/* #define IRAM_LCDFRAMEBUFFER IDATA_ATTR *//* put the lcd frame buffer in IRAM */
|
||||
|
||||
#define CONFIG_KEYPAD IRIVER_H10_PAD
|
||||
|
||||
/* Define this if you do software codec */
|
||||
#define CONFIG_CODEC SWCODEC
|
||||
|
||||
/* define this if you have a real-time clock */
|
||||
#ifndef BOOTLOADER
|
||||
#define CONFIG_RTC RTC_E8564 /* TODO: figure this out */
|
||||
#endif
|
||||
|
||||
/* Define this if you have a software controlled poweroff */
|
||||
#define HAVE_SW_POWEROFF
|
||||
|
||||
/* The number of bytes reserved for loadable codecs */
|
||||
#define CODEC_SIZE 0x80000
|
||||
|
||||
/* The number of bytes reserved for loadable plugins */
|
||||
#define PLUGIN_BUFFER_SIZE 0x80000
|
||||
|
||||
/* Define this if you have the WM8975 audio codec */
|
||||
#define HAVE_WM8731
|
||||
|
||||
#define AB_REPEAT_ENABLE 1
|
||||
|
||||
/* FM Tuner */
|
||||
/*#define CONFIG_TUNER TEA5767
|
||||
#define CONFIG_TUNER_XTAL 32768 *//* TODO: what is this? */
|
||||
|
||||
/* Define this for LCD backlight available */
|
||||
#define CONFIG_BACKLIGHT BL_H10 /* TODO: figure this out, probably not necessary
|
||||
because of 'target' stuff */
|
||||
|
||||
#define BATTERY_CAPACITY_DEFAULT 700 /* default battery capacity
|
||||
TODO: check this, probably different
|
||||
for different models too */
|
||||
|
||||
#ifndef SIMULATOR
|
||||
|
||||
/* Define this if you have a PortalPlayer PP5020 */
|
||||
#define CONFIG_CPU PP5020
|
||||
|
||||
/* Define this if you want to use the PP5020 i2c interface */
|
||||
#define CONFIG_I2C I2C_PP5020
|
||||
|
||||
/* Type of mobile power */
|
||||
#define CONFIG_BATTERY BATT_LPCS355385
|
||||
#define BATTERY_CAPACITY_MIN 1500 /* min. capacity selectable */
|
||||
#define BATTERY_CAPACITY_MAX 1600 /* max. capacity selectable */
|
||||
#define BATTERY_CAPACITY_INC 10 /* capacity increment */
|
||||
#define BATTERY_TYPES_COUNT 1 /* only one type */
|
||||
#define BATTERY_SCALE_FACTOR 5865
|
||||
|
||||
/* Hardware controlled charging? FIXME */
|
||||
//#define CONFIG_CHARGING CHARGING_SIMPLE
|
||||
|
||||
/* define this if the hardware can be powered off while charging */
|
||||
/* TODO: should this be set for the H10? */
|
||||
//#define HAVE_POWEROFF_WHILE_CHARGING
|
||||
|
||||
/* The start address index for ROM builds */
|
||||
#define ROM_START 0x00000000
|
||||
|
||||
/* Define this to the CPU frequency */
|
||||
/* TODO: this is probably wrong */
|
||||
#define CPU_FREQ 11289600
|
||||
|
||||
/* Type of LCD TODO: hopefully the same as the x5 but check this*/
|
||||
#define CONFIG_LCD LCD_X5
|
||||
|
||||
/* Offset ( in the firmware file's header ) to the file length */
|
||||
#define FIRMWARE_OFFSET_FILE_LENGTH 0
|
||||
|
||||
/* Offset ( in the firmware file's header ) to the file CRC */
|
||||
#define FIRMWARE_OFFSET_FILE_CRC 0
|
||||
|
||||
/* Offset ( in the firmware file's header ) to the real data */
|
||||
#define FIRMWARE_OFFSET_FILE_DATA 8
|
||||
|
||||
/* #define USB_IPODSTYLE */
|
||||
|
||||
/* define this if the unit can be powered or charged via USB */
|
||||
#define HAVE_USB_POWER
|
||||
|
||||
/* Virtual LED (icon) */
|
||||
#define CONFIG_LED LED_VIRTUAL
|
||||
|
||||
/* Define this if you have adjustable CPU frequency */
|
||||
#define HAVE_ADJUSTABLE_CPU_FREQ
|
||||
|
||||
#define BOOTFILE_EXT "h10"
|
||||
#define BOOTFILE "rockbox." BOOTFILE_EXT
|
||||
|
||||
#endif
|
|
@ -56,6 +56,8 @@
|
|||
#define IPOD_3G_PAD 8
|
||||
#define IRIVER_IFP7XX_PAD 9
|
||||
#define GIGABEAT_PAD 10
|
||||
#define IRIVER_H10_PAD 11
|
||||
#define SANSA_E200_PAD 12
|
||||
|
||||
/* CONFIG_REMOTE_KEYPAD */
|
||||
#define H100_REMOTE 1
|
||||
|
@ -67,6 +69,7 @@
|
|||
#define BATT_4AA_NIMH 1500
|
||||
#define BATT_3AAA 1000 /* Ondio */
|
||||
#define BATT_LIPOL1300 1300 /* the type used in iRiver h1x0 models */
|
||||
#define BATT_LPCS355385 1550 /* iriver h10 - SKC LPCS355385 */
|
||||
|
||||
/* CONFIG_CHARGING */
|
||||
#define CHARGING_SIMPLE 1 /* Simple, hardware controlled charging */
|
||||
|
@ -182,6 +185,10 @@
|
|||
#include "config-ipodmini.h"
|
||||
#elif defined(IPOD_MINI2G)
|
||||
#include "config-ipodmini2g.h"
|
||||
#elif defined(IRIVER_H10)
|
||||
#include "config-h10.h"
|
||||
#elif defined(SANSA_E200)
|
||||
#include "config-e200.h"
|
||||
#else
|
||||
/* no known platform */
|
||||
#endif
|
||||
|
@ -203,7 +210,7 @@
|
|||
#endif
|
||||
|
||||
/* define for all cpus from ARM family */
|
||||
#if (CONFIG_CPU == PP5002) || (CONFIG_CPU == PP5020) || (CONFIG_CPU == PNX0101) || (CONFIG_CPU == S3C2440)
|
||||
#if (CONFIG_CPU == PP5002) || (CONFIG_CPU == PP5020) || (CONFIG_CPU == PNX0101) || (CONFIG_CPU == S3C2440) || (CONFIG_CPU == PP5024)
|
||||
#define CPU_ARM
|
||||
#endif
|
||||
|
||||
|
|
|
@ -36,6 +36,9 @@
|
|||
#if CONFIG_CPU == PP5002
|
||||
#include "pp5002.h"
|
||||
#endif
|
||||
#if CONFIG_CPU == PP5024
|
||||
#include "pp5024.h"
|
||||
#endif
|
||||
#if CONFIG_CPU == PNX0101
|
||||
#include "pnx0101.h"
|
||||
#endif
|
||||
|
|
26
firmware/export/pp5024.h
Normal file
26
firmware/export/pp5024.h
Normal file
|
@ -0,0 +1,26 @@
|
|||
#ifndef __PP5024_H__
|
||||
#define __PP5024_H__
|
||||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2006 by Daniel Stenberg
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/* We believe is this quite similar to the 5020 and for how we just use that
|
||||
completely */
|
||||
#include "pp5020.h"
|
||||
|
||||
#endif
|
|
@ -344,7 +344,7 @@ void tick_start(unsigned int interval_in_ms)
|
|||
IMR0 |= (1<<2);
|
||||
}
|
||||
|
||||
#elif (CONFIG_CPU == PP5002) || (CONFIG_CPU == PP5020)
|
||||
#elif (CONFIG_CPU == PP5002) || (CONFIG_CPU == PP5020) || (CONFIG_CPU==PP5024)
|
||||
|
||||
#ifndef BOOTLOADER
|
||||
void TIMER1(void)
|
||||
|
|
|
@ -248,6 +248,8 @@ void pcm_init(void)
|
|||
#define FIFO_FREE_COUNT ((IISFIFO_CFG & 0x3f0000) >> 16)
|
||||
#elif CONFIG_CPU == PP5002
|
||||
#define FIFO_FREE_COUNT ((IISFIFO_CFG & 0x7800000) >> 23)
|
||||
#elif CONFIG_CPU == PP5024
|
||||
#define FIFO_FREE_COUNT 4 /* TODO: make this sensible */
|
||||
#endif
|
||||
|
||||
static int pcm_freq = 44100; /* 44.1 is default */
|
||||
|
@ -268,6 +270,7 @@ static void dma_start(const void *addr, size_t size)
|
|||
/* setup I2S interrupt for FIQ */
|
||||
outl(inl(0x6000402c) | I2S_MASK, 0x6000402c);
|
||||
outl(I2S_MASK, 0x60004024);
|
||||
#elif CONFIG_CPU == PP5024
|
||||
#else
|
||||
/* setup I2S interrupt for FIQ */
|
||||
outl(inl(0xcf00102c) | DMA_OUT_MASK, 0xcf00102c);
|
||||
|
|
1
firmware/target/arm/sandisk/sansa-e200/ata-target.h
Normal file
1
firmware/target/arm/sandisk/sansa-e200/ata-target.h
Normal file
|
@ -0,0 +1 @@
|
|||
/* nothing here yet */
|
198
firmware/target/arm/sandisk/sansa-e200/ata.c
Normal file
198
firmware/target/arm/sandisk/sansa-e200/ata.c
Normal file
|
@ -0,0 +1,198 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2006 Daniel Stenberg
|
||||
*
|
||||
* 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 "ata.h"
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
|
||||
#define SECTOR_SIZE (512)
|
||||
|
||||
static unsigned short identify_info[SECTOR_SIZE];
|
||||
int ata_spinup_time = 0;
|
||||
long last_disk_activity = -1;
|
||||
|
||||
void flash_select_chip(int no, int sel)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
unsigned char flash_read_data(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void flash_write_data(unsigned char data)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void flash_write_cmd(unsigned char cmd)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void flash_write_addr(unsigned char addr)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void flash_wait_ready(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int flash_map_sector(int sector, int* chip, int* chip_sector)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int flash_read_id(int no)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int flash_read_sector(int sector, unsigned char* buf,
|
||||
unsigned char* oob)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int flash_read_sector_oob(int sector, unsigned char* oob)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static int flash_get_n_segments(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static int flash_get_n_phblocks(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static int flash_get_n_sectors_in_block(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static int flash_phblock_to_sector(int segment, int block)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static int flash_is_bad_block(unsigned char* oob)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int flash_disk_scan(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int flash_disk_find_block(int block)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int flash_disk_read_sectors(unsigned long start,
|
||||
int count,
|
||||
void* buf)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int ata_read_sectors(IF_MV2(int drive,)
|
||||
unsigned long start,
|
||||
int incount,
|
||||
void* inbuf)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int ata_write_sectors(IF_MV2(int drive,)
|
||||
unsigned long start,
|
||||
int count,
|
||||
const void* buf)
|
||||
{
|
||||
(void)start;
|
||||
(void)count;
|
||||
(void)buf;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* schedule a single sector write, executed with the the next spinup
|
||||
(volume 0 only, used for config sector) */
|
||||
extern void ata_delayed_write(unsigned long sector, const void* buf)
|
||||
{
|
||||
(void)sector;
|
||||
(void)buf;
|
||||
}
|
||||
|
||||
/* write the delayed sector to volume 0 */
|
||||
extern void ata_flush(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void ata_spindown(int seconds)
|
||||
{
|
||||
(void)seconds;
|
||||
}
|
||||
|
||||
bool ata_disk_is_active(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ata_sleep(void)
|
||||
{
|
||||
}
|
||||
|
||||
void ata_spin(void)
|
||||
{
|
||||
}
|
||||
|
||||
/* Hardware reset protocol as specified in chapter 9.1, ATA spec draft v5 */
|
||||
int ata_hard_reset(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ata_soft_reset(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ata_enable(bool on)
|
||||
{
|
||||
(void)on;
|
||||
}
|
||||
|
||||
unsigned short* ata_get_identify(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int ata_init(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
/* nothing here yet */
|
7
firmware/target/arm/sandisk/sansa-e200/button-target.h
Normal file
7
firmware/target/arm/sandisk/sansa-e200/button-target.h
Normal file
|
@ -0,0 +1,7 @@
|
|||
|
||||
#define BUTTON_POWER 0x00000001
|
||||
#define BUTTON_LEFT 0x00000002
|
||||
#define BUTTON_RIGHT 0x00000004
|
||||
|
||||
#define POWEROFF_BUTTON BUTTON_POWER
|
||||
#define POWEROFF_COUNT 40
|
15
firmware/target/arm/sandisk/sansa-e200/lcd.c
Normal file
15
firmware/target/arm/sandisk/sansa-e200/lcd.c
Normal file
|
@ -0,0 +1,15 @@
|
|||
|
||||
void lcd_update(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void lcd_update_rect(int x, int y, int width, int height)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void lcd_init_device(void)
|
||||
{
|
||||
|
||||
}
|
1
firmware/target/arm/sandisk/sansa-e200/usb-target.h
Normal file
1
firmware/target/arm/sandisk/sansa-e200/usb-target.h
Normal file
|
@ -0,0 +1 @@
|
|||
/* nothing here yet */
|
Loading…
Reference in a new issue