diff options
| author | Dave Chapman <dave@dchapman.com> | 2009-07-12 22:16:51 +0000 |
|---|---|---|
| committer | Dave Chapman <dave@dchapman.com> | 2009-07-12 22:16:51 +0000 |
| commit | afe43d3fcba11eadf9960d48ae461f6e429b9a88 (patch) | |
| tree | 29539ce2330baa72ea767bb26dbc13b9171a6dab | |
| parent | 40c6e7d28256e98bd4ffefd13d369f8d36058bc0 (diff) | |
| download | rockbox-afe43d3fcba11eadf9960d48ae461f6e429b9a88.zip rockbox-afe43d3fcba11eadf9960d48ae461f6e429b9a88.tar.gz rockbox-afe43d3fcba11eadf9960d48ae461f6e429b9a88.tar.bz2 rockbox-afe43d3fcba11eadf9960d48ae461f6e429b9a88.tar.xz | |
Basic changes to add nano 2g to the build system, based on the Meizu M3 port. The bootloader builds, but does nothing due to lack of any drivers.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21828 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | bootloader/SOURCES | 2 | ||||
| -rw-r--r-- | bootloader/ipodnano2g.c | 54 | ||||
| -rw-r--r-- | firmware/SOURCES | 4 | ||||
| -rw-r--r-- | firmware/export/config-ipodnano2g.h | 184 | ||||
| -rw-r--r-- | firmware/export/config.h | 2 | ||||
| -rw-r--r-- | firmware/target/arm/s5l8700/boot.lds | 19 | ||||
| -rw-r--r-- | firmware/target/arm/s5l8700/ipodnano2g/button-target.h | 78 | ||||
| -rw-r--r-- | firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c | 142 | ||||
| -rwxr-xr-x | tools/configure | 74 |
9 files changed, 533 insertions, 26 deletions
diff --git a/bootloader/SOURCES b/bootloader/SOURCES index 942467a..f748403 100644 --- a/bootloader/SOURCES +++ b/bootloader/SOURCES @@ -51,4 +51,6 @@ show_logo.c #elif defined(LYRE_PROTO1) lyre_proto1.c show_logo.c +#elif defined(IPOD_NANO2G) +ipodnano2g.c #endif diff --git a/bootloader/ipodnano2g.c b/bootloader/ipodnano2g.c new file mode 100644 index 0000000..637d405 --- /dev/null +++ b/bootloader/ipodnano2g.c @@ -0,0 +1,54 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2009 by ???? [to be completed by first author] + * + * 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 <stdlib.h> +#include <stdio.h> +#include <stdarg.h> +#include <string.h> + +#include "config.h" + +#include "inttypes.h" +#include "cpu.h" +#include "system.h" +#include "lcd.h" +#include "kernel.h" +#include "thread.h" +#include "storage.h" +#include "fat.h" +#include "disk.h" +#include "font.h" +#include "backlight.h" +#include "backlight-target.h" +#include "button.h" +#include "panic.h" +#include "power.h" +#include "file.h" +#include "common.h" + +char version[] = APPSVERSION; + +void main(void) +{ + /* Do nothing... */ + while(1); +} + diff --git a/firmware/SOURCES b/firmware/SOURCES index 7c1a17f..0ad0d5e 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES @@ -1272,6 +1272,10 @@ target/arm/s5l8700/udacodec-meizu.c #endif /* SIMULATOR */ #endif /* MEIZU_M3 */ +#ifdef IPOD_NANO2G +target/arm/s5l8700/ipodnano2g/lcd-nano2g.c +#endif + #ifndef SIMULATOR #if CONFIG_CPU == JZ4732 target/mips/ingenic_jz47xx/ata-nand-jz4740.c diff --git a/firmware/export/config-ipodnano2g.h b/firmware/export/config-ipodnano2g.h new file mode 100644 index 0000000..3931519 --- /dev/null +++ b/firmware/export/config-ipodnano2g.h @@ -0,0 +1,184 @@ +/* + * This config file is for iPod Nano 2nd Generation + */ +#define TARGET_TREE /* this target is using the target tree system */ + +/* For Rolo and boot loader */ +#define MODEL_NUMBER 62 + +#define MODEL_NAME "Apple iPod Nano 2g" + +/* define this if you have recording possibility */ +//#define HAVE_RECORDING + +/* Define bitmask of input sources - recordable bitmask can be defined + explicitly if different */ +#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_LINEIN | SRC_CAP_FMRADIO) + +/* define the bitmask of hardware sample rates */ +#define HW_SAMPR_CAPS (SAMPR_CAP_88 | SAMPR_CAP_44 | SAMPR_CAP_22 | SAMPR_CAP_11) + +/* define the bitmask of recording sample rates */ +#define REC_SAMPR_CAPS (SAMPR_CAP_88 | SAMPR_CAP_44 | SAMPR_CAP_22 | SAMPR_CAP_11) + +/* define this if you have a bitmap LCD display */ +#define HAVE_LCD_BITMAP + +/* define this if you can flip your LCD */ +//#define HAVE_LCD_FLIP + +/* define this if you have a colour LCD */ +#define HAVE_LCD_COLOR + +/* define this if you want album art for this target */ +#define HAVE_ALBUMART + +/* define this to enable bitmap scaling */ +#define HAVE_BMP_SCALING + +/* define this to enable JPEG decoding */ +#define HAVE_JPEG + +/* define this if you can invert the colours on your LCD */ +//#define HAVE_LCD_INVERT + +/* define this if you have access to the quickscreen */ +#define HAVE_QUICKSCREEN + +/* define this if you have access to the pitchscreen */ +#define HAVE_PITCHSCREEN + +/* define this if you would like tagcache to build on this target */ +#define HAVE_TAGCACHE + +/* define this if you have a flash memory storage */ +#define HAVE_FLASH_STORAGE + +#define CONFIG_STORAGE STORAGE_NAND + +#define CONFIG_NAND NAND_SAMSUNG + +/* LCD dimensions */ +#define LCD_WIDTH 176 +#define LCD_HEIGHT 132 +#define LCD_DEPTH 16 /* pseudo 262.144 colors */ +#define LCD_PIXELFORMAT RGB565 /* rgb565 */ + +/* Define this if your LCD can be enabled/disabled */ +//#define HAVE_LCD_ENABLE + +/* Define this if your LCD can be put to sleep. HAVE_LCD_ENABLE + should be defined as well. */ +//#define HAVE_LCD_SLEEP + +#define CONFIG_KEYPAD IPOD_4G_PAD + +//#define AB_REPEAT_ENABLE 1 +//#define ACTION_WPSAB_SINGLE ACTION_WPS_BROWSE + +/* Define this if you do software codec */ +#define CONFIG_CODEC SWCODEC + +/* define this if you have a real-time clock */ +//#define CONFIG_RTC RTC_S5L8700 +#define CONFIG_RTC RTC_S35390A + +#define CONFIG_LCD LCD_NANO2G + +/* Define the type of audio codec */ +#define HAVE_UDA1380 + +/* Define this for LCD backlight available */ +#define HAVE_BACKLIGHT +#define HAVE_BACKLIGHT_BRIGHTNESS + +/* Define this if you have a software controlled poweroff */ +#define HAVE_SW_POWEROFF + +/* The number of bytes reserved for loadable codecs */ +#define CODEC_SIZE 0x100000 + +/* The number of bytes reserved for loadable plugins */ +#define PLUGIN_BUFFER_SIZE 0x80000 + +/* FM Tuner */ +#define CONFIG_TUNER TEA5760 +#define CONFIG_TUNER_XTAL 32768 + +//#define HAVE_TLV320 + +/* TLV320 has no tone controls, so we use the software ones */ +#define HAVE_SW_TONE_CONTROLS + +#define BATTERY_CAPACITY_DEFAULT 700 /* default battery capacity */ +#define BATTERY_CAPACITY_MIN 500 /* min. capacity selectable */ +#define BATTERY_CAPACITY_MAX 2250 /* max. capacity selectable */ +#define BATTERY_CAPACITY_INC 50 /* capacity increment */ +#define BATTERY_TYPES_COUNT 1 /* only one type */ + +/* Hardware controlled charging? FIXME */ +#define CONFIG_CHARGING CHARGING_SIMPLE + +#ifndef SIMULATOR + +/* Define this if your LCD can set contrast */ +//#define HAVE_LCD_CONTRAST + +/* Define this if you have a Motorola SCF5250 */ +#define CONFIG_CPU S5L8700 + +/* Define this if you want to use coldfire's i2c interface */ +#define CONFIG_I2C I2C_S5L8700 + +/* define this if the hardware can be powered off while charging */ +#define HAVE_POWEROFF_WHILE_CHARGING + +/* The size of the flash ROM */ +#define FLASH_SIZE 0x400000 + +/* Define this to the CPU frequency */ +#define CPU_FREQ 11289600 + +/* Define this if you have ATA power-off control */ +//#define HAVE_ATA_POWER_OFF + +/* Virtual LED (icon) */ +#define CONFIG_LED LED_VIRTUAL + +/* 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 + +/* USB On-the-go */ +//#define CONFIG_USBOTG USBOTG_M5636 + +/* Define this if you have adjustable CPU frequency */ +#define HAVE_ADJUSTABLE_CPU_FREQ + +#define BOOTFILE_EXT "ipod" +#define BOOTFILE "rockbox." BOOTFILE_EXT +#define BOOTDIR "/.rockbox" + +#define BOOTLOADER_ENTRYPOINT 0x001F0000 +#define FLASH_ENTRYPOINT 0x00001000 +#define FLASH_MAGIC 0xfbfbfbf1 + +#endif /* SIMULATOR */ + +/* Define this for FM radio input available */ +#define HAVE_FMRADIO_IN + +/** Port-specific settings **/ + +/* Main LCD contrast range and defaults */ +#define MIN_CONTRAST_SETTING 1 +#define MAX_CONTRAST_SETTING 30 +#define DEFAULT_CONTRAST_SETTING 19 /* Match boot contrast */ + +/* Main LCD backlight brightness range and defaults */ +#define MIN_BRIGHTNESS_SETTING 0 +#define MAX_BRIGHTNESS_SETTING 15 +#define DEFAULT_BRIGHTNESS_SETTING 10 + diff --git a/firmware/export/config.h b/firmware/export/config.h index 6e4f9d0..22d7090 100644 --- a/firmware/export/config.h +++ b/firmware/export/config.h @@ -302,6 +302,8 @@ Lyre prototype 1*/ #include "config-ipod3g.h" #elif defined(IPOD_4G) #include "config-ipod4g.h" +#elif defined(IPOD_NANO2G) +#include "config-ipodnano2g.h" #elif defined(IRIVER_IFP7XX) #include "config-ifp7xx.h" #elif defined(GIGABEAT_F) diff --git a/firmware/target/arm/s5l8700/boot.lds b/firmware/target/arm/s5l8700/boot.lds index 317e40b..2827182 100644 --- a/firmware/target/arm/s5l8700/boot.lds +++ b/firmware/target/arm/s5l8700/boot.lds @@ -1,7 +1,11 @@ #include "config.h" ENTRY(_start) +#ifdef ROCKBOX_LITTLE_ENDIAN +OUTPUT_FORMAT(elf32-littlearm) +#else OUTPUT_FORMAT(elf32-bigarm) +#endif OUTPUT_ARCH(arm) STARTUP(target/arm/s5l8700/crt0.o) @@ -28,7 +32,12 @@ MEMORY IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE FLASH : ORIGIN = FLASHORIG, LENGTH = FLASHSIZE } - + +#ifdef IPOD_NANO2G +#define LOAD_AREA IRAM +#else +#define LOAD_AREA FLASH +#endif SECTIONS { @@ -36,19 +45,19 @@ SECTIONS _intvectstart = . ; *(.intvect) _intvectend = _newstart ; - } >IRAM AT> FLASH + } >IRAM AT> LOAD_AREA _intvectcopy = LOADADDR(.intvect) ; .text : { *(.init.text) *(.text*) *(.glue_7*) - } > FLASH + } > LOAD_AREA .rodata : { *(.rodata*) . = ALIGN(0x4); - } > FLASH + } > LOAD_AREA .data : { _datastart = . ; @@ -59,7 +68,7 @@ SECTIONS *(.ncdata*); . = ALIGN(0x4); _dataend = . ; - } > IRAM AT> FLASH + } > IRAM AT> LOAD_AREA _datacopy = LOADADDR(.data) ; .stack : diff --git a/firmware/target/arm/s5l8700/ipodnano2g/button-target.h b/firmware/target/arm/s5l8700/ipodnano2g/button-target.h new file mode 100644 index 0000000..67bdc72 --- /dev/null +++ b/firmware/target/arm/s5l8700/ipodnano2g/button-target.h @@ -0,0 +1,78 @@ +/*************************************************************************** + * __________ __ ___. + * 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 _BUTTON_TARGET_H_ +#define _BUTTON_TARGET_H_ + +#include <stdbool.h> +#include "config.h" + +#define HAS_BUTTON_HOLD + +bool button_hold(void); +void button_init_device(void); +int button_read_device(void); + +void ipod_mini_button_int(void); +void ipod_3g_button_int(void); +void ipod_4g_button_int(void); + +/* iPod specific button codes */ + +#define BUTTON_SELECT 0x00000001 +#define BUTTON_MENU 0x00000002 + +#define BUTTON_LEFT 0x00000004 +#define BUTTON_RIGHT 0x00000008 +#define BUTTON_SCROLL_FWD 0x00000010 +#define BUTTON_SCROLL_BACK 0x00000020 + +#define BUTTON_PLAY 0x00000040 + +#define BUTTON_MAIN (BUTTON_SELECT|BUTTON_MENU\ + |BUTTON_LEFT|BUTTON_RIGHT|BUTTON_SCROLL_FWD\ + |BUTTON_SCROLL_BACK|BUTTON_PLAY) + + /* Remote control's buttons */ +#ifdef IPOD_ACCESSORY_PROTOCOL +#define BUTTON_RC_PLAY 0x00100000 +#define BUTTON_RC_STOP 0x00080000 + +#define BUTTON_RC_LEFT 0x00040000 +#define BUTTON_RC_RIGHT 0x00020000 +#define BUTTON_RC_VOL_UP 0x00010000 +#define BUTTON_RC_VOL_DOWN 0x00008000 + +#define BUTTON_REMOTE (BUTTON_RC_PLAY|BUTTON_RC_STOP\ + |BUTTON_RC_LEFT|BUTTON_RC_RIGHT\ + |BUTTON_RC_VOL_UP|BUTTON_RC_VOL_DOWN) +#else +#define BUTTON_REMOTE 0 +#endif + +/* This is for later +#define BUTTON_SCROLL_TOUCH 0x00000200 +*/ + + +#define POWEROFF_BUTTON BUTTON_PLAY +#define POWEROFF_COUNT 40 + +#endif /* _BUTTON_TARGET_H_ */ diff --git a/firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c b/firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c new file mode 100644 index 0000000..daf8869 --- /dev/null +++ b/firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c @@ -0,0 +1,142 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2009 by ???? + * + * 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 "hwcompat.h" +#include "kernel.h" +#include "lcd.h" +#include "system.h" +#include "cpu.h" + +/** globals **/ + +static int xoffset; /* needed for flip */ + +/*** hardware configuration ***/ + +int lcd_default_contrast(void) +{ + return 0x1f; +} + +void lcd_set_contrast(int val) +{ +} + +void lcd_set_invert_display(bool yesno) +{ +} + +/* turn the display upside down (call lcd_update() afterwards) */ +void lcd_set_flip(bool yesno) +{ + /* TODO: flip mode isn't working. The commands in the else part of + this function are how the original firmware inits the LCD */ + + if (yesno) + { + xoffset = 132 - LCD_WIDTH; /* 132 colums minus the 128 we have */ + } + else + { + xoffset = 0; + } +} + + + +void lcd_off(void) +{ +} + +void lcd_on(void) +{ +} + +/* LCD init */ +void lcd_init_device(void) +{ +} + + +/*** Update functions ***/ + +/* Performance function that works with an external buffer + note that by and bheight are in 8-pixel units! */ +void lcd_blit_mono(const unsigned char *data, int x, int by, int width, + int bheight, int stride) +{ + /* Copy display bitmap to hardware */ + while (bheight--) + { + } +} + + +/* Performance function that works with an external buffer + note that by and bheight are in 8-pixel units! */ +void lcd_blit_grey_phase_blit(unsigned char *values, unsigned char *phases, + int x, int by, int width, int bheight, int stride) +{ + (void)values; + (void)phases; + (void)x; + (void)by; + (void)width; + (void)bheight; + (void)stride; +} + +/* Update the display. + This must be called after all other LCD functions that change the display. */ +void lcd_update(void) ICODE_ATTR; +void lcd_update(void) +{ + int y; + + /* Copy display bitmap to hardware */ + for (y = 0; y < LCD_FBHEIGHT; y++) + { + } +} + +/* Update a fraction of the display. */ +void lcd_update_rect(int, int, int, int) ICODE_ATTR; +void lcd_update_rect(int x, int y, int width, int height) +{ + int ymax; + + /* The Y coordinates have to work on even 8 pixel rows */ + ymax = (y + height-1) >> 3; + y >>= 3; + + if(x + width > LCD_WIDTH) + width = LCD_WIDTH - x; + if (width <= 0) + return; /* nothing left to do, 0 is harmful to lcd_write_data() */ + if(ymax >= LCD_FBHEIGHT) + ymax = LCD_FBHEIGHT-1; + + /* Copy specified rectange bitmap to hardware */ + for (; y <= ymax; y++) + { + } +} diff --git a/tools/configure b/tools/configure index e543919..42854fb 100755 --- a/tools/configure +++ b/tools/configure @@ -275,6 +275,14 @@ arm940tbecc () { gccchoice="4.0.3" } +arm940tcc () { + prefixtools arm-elf- + GCCOPTS="$CCOPTS -mcpu=arm940t -mlong-calls" + GCCOPTIMIZE="-fomit-frame-pointer" + endian="little" + gccchoice="4.0.3" +} + arm946cc () { prefixtools arm-elf- GCCOPTS="$CCOPTS -mcpu=arm9e -mlong-calls" @@ -769,27 +777,27 @@ cat <<EOF 5) Ondio FM 15) H10 5/6Gb 25) Mini 1G 6) AV300 26) Mini 2G ==Toshiba== 27) 1G, 2G - ==Cowon/iAudio== 40) Gigabeat F - 30) X5/X5V/X5L 41) Gigabeat S ==SanDisk== - 31) M5/M5L 50) Sansa e200 - 32) 7 ==Olympus= 51) Sansa e200R - 33) D2 70) M:Robe 500 52) Sansa c200 - 34) M3/M3L 71) M:Robe 100 53) Sansa m200 - 54) Sansa c100 - ==Creative== ==Philips== 55) Sansa Clip - 90) Zen Vision:M 30GB 100) GoGear SA9200 56) Sansa e200v2 - 91) Zen Vision:M 60GB 101) GoGear HDD1630/ 57) Sansa m200v4 - 92) Zen Vision HDD1830 58) Sansa Fuze - 59) Sansa c200v2 - ==Onda== ==Meizu== 60) Sansa Clipv2 - 120) VX747 110) M6SL - 121) VX767 111) M6SP ==Logik== - 122) VX747+ 112) M3 80) DAX 1GB MP3/DAB - 123) VX777 - - ==Samsung== ==Tatung== ==Lyre project== - 140) YH-820 150) Elio TPJ-1022 130) Lyre proto 1 - 141) YH-920 + ==Cowon/iAudio== 40) Gigabeat F 28) Nano 2G + 30) X5/X5V/X5L 41) Gigabeat S + 31) M5/M5L ==SanDisk== + 32) 7 ==Olympus= 50) Sansa e200 + 33) D2 70) M:Robe 500 51) Sansa e200R + 34) M3/M3L 71) M:Robe 100 52) Sansa c200 + 53) Sansa m200 + ==Creative== ==Philips== 54) Sansa c100 + 90) Zen Vision:M 30GB 100) GoGear SA9200 55) Sansa Clip + 91) Zen Vision:M 60GB 101) GoGear HDD1630/ 56) Sansa e200v2 + 92) Zen Vision HDD1830 57) Sansa m200v4 + 58) Sansa Fuze + ==Onda== ==Meizu== 59) Sansa c200v2 + 120) VX747 110) M6SL 60) Sansa Clipv2 + 121) VX767 111) M6SP + 122) VX747+ 112) M3 ==Logik== + 123) VX777 80) DAX 1GB MP3/DAB + + ==Samsung== ==Tatung== + 140) YH-820 150) Elio TPJ-1022 ==Lyre project== + 141) YH-920 130) Lyre proto 1 142) YH-925 EOF @@ -1329,6 +1337,30 @@ fi t_model="1g2g" ;; + 28|ipodnano2g) + target_id=62 + modelname="ipodnano2g" + target="-DIPOD_NANO2G" + memory=32 # always + arm940tcc + tool="$rootdir/tools/scramble -add=nn2g" + bmp2rb_mono="$rootdir/tools/bmp2rb -f 0" + bmp2rb_native="$rootdir/tools/bmp2rb -f 6" + output="rockbox.ipod" + appextra="recorder:gui" + plugins="yes" + swcodec="yes" + boottool="cp" + bootoutput="bootloader-$modelname.bin" + # toolset is the tools within the tools directory that we build for + # this particular target. + toolset=$ipodbitmaptools + # architecture, manufacturer and model for the target-tree build + t_cpu="arm" + t_manufacturer="s5l8700" + t_model="ipodnano2g" + ;; + 30|x5) target_id=12 modelname="x5" |