From afe43d3fcba11eadf9960d48ae461f6e429b9a88 Mon Sep 17 00:00:00 2001 From: Dave Chapman Date: Sun, 12 Jul 2009 22:16:51 +0000 Subject: [PATCH] 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 --- bootloader/SOURCES | 2 + bootloader/ipodnano2g.c | 54 +++++ firmware/SOURCES | 4 + firmware/export/config-ipodnano2g.h | 184 ++++++++++++++++++ firmware/export/config.h | 2 + firmware/target/arm/s5l8700/boot.lds | 19 +- .../arm/s5l8700/ipodnano2g/button-target.h | 78 ++++++++ .../arm/s5l8700/ipodnano2g/lcd-nano2g.c | 142 ++++++++++++++ tools/configure | 72 +++++-- 9 files changed, 532 insertions(+), 25 deletions(-) create mode 100644 bootloader/ipodnano2g.c create mode 100644 firmware/export/config-ipodnano2g.h create mode 100644 firmware/target/arm/s5l8700/ipodnano2g/button-target.h create mode 100644 firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c diff --git a/bootloader/SOURCES b/bootloader/SOURCES index 942467af4d..f748403a85 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 0000000000..637d405f01 --- /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 +#include +#include +#include + +#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 7c1a17ff7f..0ad0d5ebfe 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 0000000000..393151961f --- /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 6e4f9d05c9..22d7090f96 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 317e40b2ca..28271822e8 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 0000000000..67bdc72955 --- /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 +#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 0000000000..daf8869c9c --- /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 e543919ca6..42854fba79 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 <