From d3feb78e4053d287755a4f8404c3a9ce1a491e93 Mon Sep 17 00:00:00 2001 From: Jens Arnold Date: Thu, 30 Mar 2006 17:29:21 +0000 Subject: Initial support for iPod mini 2G: Rockbox boots, LCD driver is working. No sound, no buttons, and hangs at the boot screen. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9363 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/wormlet.c | 4 ++ firmware/drivers/lcd-ipod.c | 27 ++++++---- firmware/export/config-ipodmini.h | 2 +- firmware/export/config-ipodmini2g.h | 99 +++++++++++++++++++++++++++++++++++++ firmware/export/config.h | 2 + tools/configure | 24 ++++++++- tools/scramble.c | 2 + 7 files changed, 148 insertions(+), 12 deletions(-) create mode 100755 firmware/export/config-ipodmini2g.h diff --git a/apps/plugins/wormlet.c b/apps/plugins/wormlet.c index 04a29a5414..d6929f2bd7 100644 --- a/apps/plugins/wormlet.c +++ b/apps/plugins/wormlet.c @@ -109,6 +109,10 @@ PLUGIN_HEADER #define FOOD_SIZE 3 #define ARGH_SIZE 4 #define SPEED 14 +#elif (LCD_WIDTH == 138) && (LCD_HEIGHT == 110) +#define FOOD_SIZE 4 +#define ARGH_SIZE 5 +#define SPEED 10 #elif (LCD_WIDTH == 160) && (LCD_HEIGHT == 128) #define FOOD_SIZE 4 #define ARGH_SIZE 5 diff --git a/firmware/drivers/lcd-ipod.c b/firmware/drivers/lcd-ipod.c index 2d190d3d70..8936dad912 100644 --- a/firmware/drivers/lcd-ipod.c +++ b/firmware/drivers/lcd-ipod.c @@ -76,20 +76,28 @@ static void lcd_wait_write(void) static void lcd_send_data(int data_lo, int data_hi) { lcd_wait_write(); - outl(data_lo, IPOD_LCD_BASE + LCD_DATA); - lcd_wait_write(); - outl(data_hi, IPOD_LCD_BASE + LCD_DATA); +#ifdef IPOD_MINI2G + outl((inl(IPOD_LCD_BASE) & ~0x1f00000) | 0x1700000, IPOD_LCD_BASE); + outl(data_hi | (data_lo << 8) | 0x760000, IPOD_LCD_BASE+8); +#else + outl(data_lo, IPOD_LCD_BASE + LCD_DATA); + lcd_wait_write(); + outl(data_hi, IPOD_LCD_BASE + LCD_DATA); +#endif } /* send LCD command */ static void lcd_prepare_cmd(int cmd) { lcd_wait_write(); - - outl(0x0, IPOD_LCD_BASE + LCD_CMD); - lcd_wait_write(); - outl(cmd, IPOD_LCD_BASE + LCD_CMD); - +#ifdef IPOD_MINI2G + outl((inl(IPOD_LCD_BASE) & ~0x1f00000) | 0x1700000, IPOD_LCD_BASE); + outl(cmd | 0x740000, IPOD_LCD_BASE+8); +#else + outl(0x0, IPOD_LCD_BASE + LCD_CMD); + lcd_wait_write(); + outl(cmd, IPOD_LCD_BASE + LCD_CMD); +#endif } /* send LCD command and data */ @@ -105,7 +113,8 @@ static void lcd_cmd_and_data(int cmd, int data_lo, int data_hi) * LCD init **/ void lcd_init_device(void){ -#ifdef APPLE_IPODMINI +#if defined(IPOD_MINI) || defined(IPOD_MINI2G) + /* driver output control - 160x112 (ipod mini) */ lcd_cmd_and_data(0x1, 0x0, 0xd); #else /* driver output control - 160x128 */ diff --git a/firmware/export/config-ipodmini.h b/firmware/export/config-ipodmini.h index 5ac97545d4..ea3f4e5c41 100644 --- a/firmware/export/config-ipodmini.h +++ b/firmware/export/config-ipodmini.h @@ -1,5 +1,5 @@ /* - * This config file is for the Apple iPod Mini (1st & 2nd Gen) + * This config file is for the Apple iPod Mini (1st Gen) */ #define APPLE_IPODMINI 1 diff --git a/firmware/export/config-ipodmini2g.h b/firmware/export/config-ipodmini2g.h new file mode 100755 index 0000000000..60d812f8d7 --- /dev/null +++ b/firmware/export/config-ipodmini2g.h @@ -0,0 +1,99 @@ +/* + * This config file is for the Apple iPod Mini 2nd Gen + */ +#define APPLE_IPODMINI 1 + +#define IPOD_ARCH 1 + +/* For Rolo and boot loader */ +#define MODEL_NUMBER 11 + +/* define this if you have recording possibility */ +/*#define HAVE_RECORDING 1*/ + +/* define this if you have a bitmap LCD display */ +#define HAVE_LCD_BITMAP 1 + +/* LCD dimensions */ +#define LCD_WIDTH 138 +#define LCD_HEIGHT 110 +#define LCD_DEPTH 2 /* 4 colours - 2bpp */ + +#define LCD_PIXELFORMAT HORIZONTAL_PACKING + +#define CONFIG_KEYPAD IPOD_4G_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_PCF50605 +#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_WM8975 + +/* Define this for LCD backlight available */ +#define CONFIG_BACKLIGHT BL_IPODMINI /* port controlled */ + +#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_LIPOL1300 + +#define BATTERY_SCALE_FACTOR 16665 /* FIX: this value is picked at random */ + +/* Define this if the platform can charge batteries */ +//#define HAVE_CHARGING 1 + +/* define this if the hardware can be powered off while charging */ +//#define HAVE_POWEROFF_WHILE_CHARGING + +/* The start address index for ROM builds */ +#define ROM_START 0x00000000 + +/* Define this to the CPU frequency */ +#define CPU_FREQ 11289600 + +#define CONFIG_LCD LCD_IPOD2BPP + +/* 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 "ipod" +#define BOOTFILE "rockbox." BOOTFILE_EXT + +#endif diff --git a/firmware/export/config.h b/firmware/export/config.h index 4ef4bd63fc..de89dfe99e 100644 --- a/firmware/export/config.h +++ b/firmware/export/config.h @@ -170,6 +170,8 @@ #include "config-gigabeat.h" #elif defined(IPOD_MINI) #include "config-ipodmini.h" +#elif defined(IPOD_MINI2G) +#include "config-ipodmini2g.h" #else /* no known platform */ #endif diff --git a/tools/configure b/tools/configure index c9f7f83c10..17bec94891 100755 --- a/tools/configure +++ b/tools/configure @@ -465,9 +465,10 @@ toolsdir='\$(ROOTDIR)/tools' echo "15 - iPod Video" echo "16 - iPod 3G" echo "17 - iPod 4G (Grayscale)" - echo "18 - iPod Mini (1G/2G)" + echo "18 - iPod Mini (1G)" echo "19 - iriver iFP-790" echo "20 - Toshiba Gigabeat F" + echo "21 - iPod Mini 2G" target_id=`input`; @@ -870,6 +871,25 @@ toolsdir='\$(ROOTDIR)/tools' toolset=$gigabeatbitmaptools ;; + 21) + archos="ipodmini2g" + target="-DIPOD_MINI2G" + memory=32 # always + arm7tdmicc + tool="$rootdir/tools/scramble -add=mn2g" + bmp2rb_mono="$rootdir/tools/bmp2rb -f 0" + bmp2rb_native="$rootdir/tools/bmp2rb -f 6" + output="rockbox.ipod" + appextra="recorder:gui" + archosrom="" + flash="" + plugins="yes" + codecs="libmad liba52 libffmpegFLAC libTremor libwavpack dumb libmusepack libalac libfaad libm4a" + # toolset is the tools within the tools directory that we build for + # this particular target. + toolset=$ipodbitmaptools + ;; + *) echo "Please select an actual target platform!" exit @@ -925,7 +945,7 @@ fi case $option in [Bb]) case $archos in - h100|h120|h300|x5|ipodcolor|ipodnano|ipodvideo|ipod3g|ipod4g|ipodmini) + h100|h120|h300|x5|ipodcolor|ipodnano|ipodvideo|ipod3g|ipod4g|ipodmini|ipodmini2g) extradefines="-DBOOTLOADER" # for target makefile symbol EXTRA_DEFINES appsdir='\$(ROOTDIR)/bootloader' apps="bootloader" diff --git a/tools/scramble.c b/tools/scramble.c index cb3630ea5a..8bab41596a 100644 --- a/tools/scramble.c +++ b/tools/scramble.c @@ -183,6 +183,8 @@ int main (int argc, char** argv) modelnum = 9; else if(!strcmp(&argv[1][5], "iax5")) modelnum = 10; + else if(!strcmp(&argv[1][5], "mn2g")) + modelnum = 11; else { fprintf(stderr, "unsupported model: %s\n", &argv[1][5]); return 2; -- cgit v1.2.3