New target - iPod Video.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8261 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Dave Chapman 2005-12-18 13:04:00 +00:00
parent 3f9789b45a
commit 2a7bd9fb7b
12 changed files with 334 additions and 11 deletions

View File

@ -56,11 +56,11 @@ recorder/icons.c
recorder/keyboard.c
recorder/peakmeter.c
recorder/widgets.c
#ifdef IRIVER_H300_SERIES
#if defined(IRIVER_H300_SERIES) || defined(APPLE_IPODVIDEO)
recorder/logo-h300.c
#elif APPLE_IPODCOLOR
#elif defined(APPLE_IPODCOLOR)
recorder/logo-ipod.c
#elif APPLE_IPODNANO
#elif defined(APPLE_IPODNANO)
recorder/logo-nano.c
#endif
#endif

View File

@ -103,7 +103,7 @@
#define SWAP_TIMER 30
/* use 22x22 tiles */
#if (LCD_HEIGHT == 176) && (LCD_WIDTH == 220) && \
#if (LCD_HEIGHT >= 176) && (LCD_WIDTH >= 220) && \
(LCD_PIXELFORMAT == RGB565SWAPPED)
/* size of a tile */
#define TILE_WIDTH 22
@ -616,7 +616,7 @@ static unsigned short jewel[8][484] = {
};
/* use 22x22 tiles */
#elif (LCD_HEIGHT == 176) && (LCD_WIDTH == 220) && \
#elif (LCD_HEIGHT >= 176) && (LCD_WIDTH >= 220) && \
(LCD_PIXELFORMAT == RGB565)
/* size of a tile */
#define TILE_WIDTH 22

View File

@ -381,7 +381,7 @@ static unsigned char num_inverse[10][8]= {
/* Numeral 9 */
{0x3f,0x3f,0x1b,0x15,0x15,0x23,0x3f,0x3f},
};
#elif (LCD_HEIGHT==176) && (LCD_WIDTH==220)
#elif (LCD_HEIGHT>=176) && (LCD_WIDTH>=220)
/* iriver h300 */
/* Internal dimensions of a cell */

View File

@ -81,7 +81,7 @@ extern const unsigned char bitmap_icon_disk[];
#if LCD_WIDTH == 112 || LCD_WIDTH == 128 || (defined(HAVE_REMOTE_LCD) && LCD_REMOTE_WIDTH == 128)
extern const unsigned char rockbox112x37[];
#endif
#if defined(IRIVER_H300_SERIES) || defined(APPLE_IPODCOLOR)
#if defined(IRIVER_H300_SERIES) || defined(APPLE_IPODCOLOR) || defined(APPLE_IPODVIDEO)
#define ROCKBOXLOGO_WIDTH 220
#define ROCKBOXLOGO_HEIGHT 68
extern const unsigned short rockboxlogo[];

View File

@ -61,6 +61,9 @@ drivers/lcd-16bit.c
#if CONFIG_LCD==LCD_IPODNANO || CONFIG_LCD==LCD_IPODCOLOR
drivers/lcd-ipod.c
#endif
#if CONFIG_LCD==LCD_IPODVIDEO
drivers/lcd-ipodvideo.c
#endif
#if CONFIG_LCD==LCD_H300
drivers/lcd-h300.c
#endif
@ -99,7 +102,7 @@ drivers/mas.c
#ifdef IRIVER_H300_SERIES
drivers/pcf50606.c
#endif
#if defined(APPLE_IPODCOLOR) || defined(APPLE_IPODNANO)
#if defined(APPLE_IPODCOLOR) || defined(APPLE_IPODNANO) || defined(APPLE_IPODVIDEO)
drivers/pcf50605.c
#endif
#if CONFIG_RTC == RTC_M41ST84W

View File

@ -0,0 +1,195 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2005 by Dave Chapman
*
* Rockbox driver for iPod Video LCDs
*
* Based on code from ipodlinux - http://ipodlinux.org
*
* 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 "cpu.h"
#include "lcd.h"
#include "kernel.h"
#include "system.h"
/*** hardware configuration ***/
void lcd_set_contrast(int val)
{
/* TODO: Implement lcd_set_contrast() */
(void)val;
}
void lcd_set_invert_display(bool yesno)
{
/* TODO: Implement lcd_set_invert_display() */
(void)yesno;
}
/* turn the display upside down (call lcd_update() afterwards) */
void lcd_set_flip(bool yesno)
{
/* TODO: Implement lcd_set_flip() */
(void)yesno;
}
/* Rolls up the lcd display by the specified amount of lines.
* Lines that are rolled out over the top of the screen are
* rolled in from the bottom again. This is a hardware
* remapping only and all operations on the lcd are affected.
* ->
* @param int lines - The number of lines that are rolled.
* The value must be 0 <= pixels < LCD_HEIGHT. */
void lcd_roll(int lines)
{
/* TODO: Implement lcd_roll() */
lines &= LCD_HEIGHT-1;
}
/* LCD init */
void lcd_init_device(void)
{
/* iPodLinux doesn't appear have any LCD init code for the Video */
}
/*** update functions ***/
/* Performance function that works with an external buffer
note that by and bheight are in 4-pixel units! */
void lcd_blit(const fb_data* data, int x, int by, int width,
int bheight, int stride)
{
/* TODO: Implement lcd_blit() */
(void)data;
(void)x;
(void)by;
(void)width;
(void)bheight;
(void)stride;
}
static void lcd_bcm_write32(unsigned address, unsigned value)
{
/* write out destination address as two 16bit values */
outw(address, 0x30010000);
outw((address >> 16), 0x30010000);
/* wait for it to be write ready */
while ((inw(0x30030000) & 0x2) == 0);
/* write out the value low 16, high 16 */
outw(value, 0x30000000);
outw((value >> 16), 0x30000000);
}
static void lcd_bcm_setup_rect(unsigned cmd,
unsigned start_horiz,
unsigned start_vert,
unsigned max_horiz,
unsigned max_vert,
unsigned count)
{
lcd_bcm_write32(0x1F8, 0xFFFA0005);
lcd_bcm_write32(0xE0000, cmd);
lcd_bcm_write32(0xE0004, start_horiz);
lcd_bcm_write32(0xE0008, start_vert);
lcd_bcm_write32(0xE000C, max_horiz);
lcd_bcm_write32(0xE0010, max_vert);
lcd_bcm_write32(0xE0014, count);
lcd_bcm_write32(0xE0018, count);
lcd_bcm_write32(0xE001C, 0);
}
static unsigned lcd_bcm_read32(unsigned address) {
while ((inw(0x30020000) & 1) == 0);
/* write out destination address as two 16bit values */
outw(address, 0x30020000);
outw((address >> 16), 0x30020000);
/* wait for it to be read ready */
while ((inw(0x30030000) & 0x10) == 0);
/* read the value */
return inw(0x30000000) | inw(0x30000000) << 16;
}
static void lcd_bcm_finishup(void) {
unsigned data;
outw(0x31, 0x30030000);
lcd_bcm_read32(0x1FC);
do {
data = lcd_bcm_read32(0x1F8);
} while (data == 0xFFFA0005 || data == 0xFFFF);
lcd_bcm_read32(0x1FC);
}
/* Update a fraction of the display. */
void lcd_update_rect(int x, int y, int width, int height)
{
int rect1,rect2,rect3,rect4;
int newx,newwidth;
int count;
unsigned int curpixel=0;
int c, r;
unsigned long *addr;
int p0,p1;
/* Ensure x and width are both even - so we can read 32-bit aligned
data from lcd_framebuffer */
newx=x&~1;
newwidth=width&~1;
if (newx+newwidth < x+width) { newwidth+=2; }
x=newx; width=newwidth;
/* calculate the drawing region */
rect1 = x; /* start horiz */
rect2 = y; /* start vert */
rect3 = (x + width) - 1; /* max horiz */
rect4 = (y + height) - 1; /* max vert */
/* setup the drawing region */
count=(width * height) << 1;
lcd_bcm_setup_rect(0x34, rect1, rect2, rect3, rect4, count);
addr = (unsigned long*)&lcd_framebuffer[y][x];
/* for each row */
for (r = 0; r < height; r++) {
/* for each column */
for (c = 0; c < width; c += 2) {
/* output 2 pixels */
lcd_bcm_write32(0xE0020 + (curpixel << 2), *(addr++));
curpixel++;
}
addr += (LCD_WIDTH - width)/2;
}
lcd_bcm_finishup();
}
/* Update the display.
This must be called after all other LCD functions that change the display. */
void lcd_update(void)
{
lcd_update_rect(0, 0, LCD_WIDTH, LCD_HEIGHT);
}

View File

@ -0,0 +1,96 @@
/*
* This config file is for the Apple iPod Video
*/
#define APPLE_IPODVIDEO 1
/* For Rolo and boot loader */
#define MODEL_NUMBER 5
/* 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
/* define this if you have a colour LCD */
#define HAVE_LCD_COLOR 1
/* LCD dimensions */
#define LCD_WIDTH 320
#define LCD_HEIGHT 240
#define LCD_DEPTH 16 /* 65536 colours */
#define LCD_PIXELFORMAT RGB565 /* rgb565 */
#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 */
#define CONFIG_RTC RTC_PCF50605
/* 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 0xC0000
/* Define this if you have the WM8975 audio codec */
#define HAVE_WM8975
/* Define this for LCD backlight available */
#define CONFIG_BACKLIGHT BL_IPODNANO /* port controlled */
#ifndef SIMULATOR
/* The Nano actually has a PP5021 - but it's register compatible with
the 5020 so Rockbox doesn't care. */
/* 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_IPODVIDEO
/* 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
/* 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

View File

@ -75,6 +75,7 @@
unknown at the time of this writing */
#define LCD_IPODCOLOR 6 /* as used by iPod Color/Photo */
#define LCD_IPODNANO 7 /* as used by iPod Nano */
#define LCD_IPODVIDEO 8 /* as used by iPod Video */
/* LCD_PIXELFORMAT */
#define RGB565 565
@ -87,7 +88,7 @@
#define BL_IRIVER_H100 3 /* IRiver GPIO */
#define BL_GMINI 4 /* Archos GMini */
#define BL_IPOD4G 5 /* Apple iPod 4G */
#define BL_IPODNANO 6 /* Apple iPod Nano */
#define BL_IPODNANO 6 /* Apple iPod Nano and iPod Video*/
#define BL_IRIVER_H300 7 /* IRiver PWM */
/* CONFIG_I2C */
@ -137,6 +138,8 @@
#include "config-ipodcolor.h"
#elif defined(IPOD_NANO)
#include "config-ipodnano.h"
#elif defined(IPOD_VIDEO)
#include "config-ipodvideo.h"
#else
/* no known platform */
#endif

View File

@ -34,6 +34,8 @@ extern long cpu_frequency;
#define outl(a,b) (*(volatile unsigned long *) (b) = (a))
#define inb(a) (*(volatile unsigned char *) (a))
#define outb(a,b) (*(volatile unsigned char *) (b) = (a))
#define inw(a) (*(volatile unsigned short *) (a))
#define outw(a,b) (*(volatile unsigned short *) (b) = (a))
static inline void udelay(unsigned usecs)
{
unsigned start = inl(0x60005010);

View File

@ -1126,6 +1126,9 @@ void irq(void)
static void ipod_init_cache(void)
{
/* Initialising the cache in the iPod Video bootloader prevents
Rockbox from starting */
#if !defined(BOOTLOADER) || !defined(APPLE_IPODVIDEO)
unsigned i;
/* cache init mode? */
@ -1144,6 +1147,7 @@ static void ipod_init_cache(void)
for (i = 0x10000000; i < 0x10002000; i += 16)
inb(i);
#endif
}
static void ipod_set_cpu_speed(void)

20
tools/configure vendored
View File

@ -410,6 +410,7 @@ appsdir='\$(ROOTDIR)/apps'
echo "12 - iAudio X5"
echo "13 - iPod Color/Photo"
echo "14 - iPod Nano"
echo "15 - iPod Video"
getit=`input`;
@ -659,6 +660,23 @@ appsdir='\$(ROOTDIR)/apps'
toolset=$ipodbitmaptools
;;
15)
archos="ipodvideo"
target="-DIPOD_VIDEO"
memory=32 # 30GB models have 32MB, 60GB have 64MB
arm7tdmicc
tool="$rootdir/tools/scramble -add=ipvd"
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
@ -703,7 +721,7 @@ fi
case $option in
[Bb])
case $archos in
h100|h120|h300|ipodcolor|ipodnano)
h100|h120|h300|ipodcolor|ipodnano|ipodvideo)
extradefines="-DBOOTLOADER" # for target makefile symbol EXTRA_DEFINES
appsdir='\$(ROOTDIR)/bootloader'
apps="bootloader"

View File

@ -68,7 +68,7 @@ void usage(void)
"\t-mm=X Archos Multimedia format (X values: A=JBMM, B=AV1xx, C=AV3xx)\n"
"\t-iriver iRiver format\n"
"\t-add=X Rockbox generic \"add-up\" checksum format\n"
"\t (X values: h100, h120, h140, h300, ipco, nano)\n"
"\t (X values: h100, h120, h140, h300, ipco, nano, ipvd)\n"
"\nNo option results in Archos standard player/recorder format.\n");
exit(1);
@ -166,6 +166,8 @@ int main (int argc, char** argv)
modelnum = 3;
else if(!strcmp(&argv[1][5], "nano"))
modelnum = 4;
else if(!strcmp(&argv[1][5], "ipvd"))
modelnum = 5;
else {
fprintf(stderr, "unsupported model: %s\n", &argv[1][5]);
return 2;