diff --git a/apps/plugins/plugin.lds b/apps/plugins/plugin.lds index 57b2faf027..6fdbc2c64f 100644 --- a/apps/plugins/plugin.lds +++ b/apps/plugins/plugin.lds @@ -37,7 +37,14 @@ OUTPUT_FORMAT(elf32-littlemips) #if CONFIG_CPU==DM320 || CONFIG_CPU==IMX31L /* Give this 1 meg to allow it to align to the MMU boundary */ +#if CONFIG_CPU==DM320 +#define LCD_FUDGE LCD_NATIVE_WIDTH%32 +#define LCD_BUFFER_SIZE ((LCD_NATIVE_WIDTH+LCD_FUDGE)*LCD_NATIVE_HEIGHT*2) +#define LCD_TTB_AREA 0x100000*((LCD_BUFFER_SIZE>>19)+1) +#else #define LCD_TTB_AREA 0x100000 +#endif + #define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - PLUGIN_BUFFER_SIZE - CODEC_SIZE - LCD_TTB_AREA #elif CONFIG_CPU==S3C2440 diff --git a/firmware/drivers/m66591.c b/firmware/drivers/m66591.c index 9a93985580..4c1773e61b 100644 --- a/firmware/drivers/m66591.c +++ b/firmware/drivers/m66591.c @@ -423,29 +423,29 @@ void USB_DEVICE(void) { M66591_INTSTAT_NRDY, M66591_INTSTAT_EMP); /* VBUS (connected) interrupt */ - while ( M66591_INTSTAT_MAIN & (1<<15) ) { - M66591_INTSTAT_MAIN &= ~(1<<15); - - /* If device is not clocked, interrupt flag must be set manually */ - if ( !(M66591_TRN_CTRL & (1<<10)) ) { - M66591_INTSTAT_MAIN |= (1<<15); - } - } - - /* Resume interrupt: This is not used. Extra logic needs to be added similar - * to the VBUS interrupt incase the PHY clock is not running. - */ - if(M66591_INTSTAT_MAIN & (1<<14)) { - M66591_INTSTAT_MAIN &= ~(1<<14); - logf("mxx: RESUME"); - } - - /* Device state transition interrupt: Not used, but useful for debugging */ - if(M66591_INTSTAT_MAIN & (1<<12)) { - M66591_INTSTAT_MAIN &= ~(1<<12); - logf("mxx: DEV state CHANGE=%d", - ((M66591_INTSTAT_MAIN & (0x07<<4)) >> 4) ); - } + while ( M66591_INTSTAT_MAIN & (1<<15) ) { + M66591_INTSTAT_MAIN &= ~(1<<15); + + /* If device is not clocked, interrupt flag must be set manually */ + if ( !(M66591_TRN_CTRL & (1<<10)) ) { + M66591_INTSTAT_MAIN |= (1<<15); + } + } + + /* Resume interrupt: This is not used. Extra logic needs to be added similar + * to the VBUS interrupt incase the PHY clock is not running. + */ + if(M66591_INTSTAT_MAIN & (1<<14)) { + M66591_INTSTAT_MAIN &= ~(1<<14); + logf("mxx: RESUME"); + } + + /* Device state transition interrupt: Not used, but useful for debugging */ + if(M66591_INTSTAT_MAIN & (1<<12)) { + M66591_INTSTAT_MAIN &= ~(1<<12); + logf("mxx: DEV state CHANGE=%d", + ((M66591_INTSTAT_MAIN & (0x07<<4)) >> 4) ); + } /* Control transfer stage interrupt */ if(M66591_INTSTAT_MAIN & (1<<11)) { @@ -721,30 +721,30 @@ void usb_drv_exit(void) { * Reference Manual Rev 1.00, p. 78. */ - /* Detach notification to PC (disable D+ pull-up) */ - M66591_TRN_CTRL &= ~(1<<4); + /* Detach notification to PC (disable D+ pull-up) */ + M66591_TRN_CTRL &= ~(1<<4); - /* Software reset */ - M66591_TRN_CTRL &= ~0x01; + /* Software reset */ + M66591_TRN_CTRL &= ~0x01; - /* Disable internal clock supply */ - M66591_TRN_CTRL &= ~(1<<10); - udelay(3); + /* Disable internal clock supply */ + M66591_TRN_CTRL &= ~(1<<10); + udelay(3); - /* Disable PLL */ - M66591_TRN_CTRL &= ~(1<<11); - udelay(3); + /* Disable PLL */ + M66591_TRN_CTRL &= ~(1<<11); + udelay(3); - /* Disable internal reference clock */ - M66591_TRN_CTRL &= ~(1<<12); - udelay(3); + /* Disable internal reference clock */ + M66591_TRN_CTRL &= ~(1<<12); + udelay(3); - /* Disable oscillation buffer, reenable USB operation */ - M66591_TRN_CTRL &= ~(1<<13); - - M66591_TRN_CTRL |= 0x01; + /* Disable oscillation buffer, reenable USB operation */ + M66591_TRN_CTRL &= ~(1<<13); - logf("mxx: detached"); + M66591_TRN_CTRL |= 0x01; + + logf("mxx: detached"); } /* This function begins a transmit (on an IN endpoint), it should not block diff --git a/firmware/target/arm/tms320dm320/app.lds b/firmware/target/arm/tms320dm320/app.lds index 14b44153a6..2c74278142 100644 --- a/firmware/target/arm/tms320dm320/app.lds +++ b/firmware/target/arm/tms320dm320/app.lds @@ -118,44 +118,38 @@ SECTIONS stackend = .; } > IRAM - /* This could probably be shortened so that the audio buffer overwrites - * at the IRAM stuff (assuming that it is copied first in crt0.S), but - * leave it for now since the space is not critical at the moment. + /* This overwrites the iram (in ram), so make sure that the iram is copied + * out in crt0.s before the bss section and the rest are used. */ - .bss (NOLOAD) : + .bss (NOLOAD) : { - . = ADDR(.data) + SIZEOF(.data) + SIZEOF(.vectors) + SIZEOF(.iram); + . = ADDR(.data) + SIZEOF(.data); _edata = .; *(.bss*) *(COMMON) . = ALIGN(0x4); _end = .; } > DRAM - .audiobuf (NOLOAD) : { . = ALIGN(4); - _audiobuffer = .; audiobuffer = .; } > DRAM .audiobufend ENDAUDIOADDR (NOLOAD) : { audiobufend = .; - _audiobufend = .; } > DRAM .codec ENDAUDIOADDR (NOLOAD) : { codecbuf = .; - _codecbuf = .; . += CODEC_SIZE; } > DRAM .plugin (NOLOAD) : { - _pluginbuf = .; pluginbuf = .; . += PLUGIN_BUFFER_SIZE; } > DRAM diff --git a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c index 97945397b2..a44a482324 100644 --- a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c +++ b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c @@ -63,10 +63,8 @@ void lcd_sleep() memset16(FRAME, 0xFFFF, LCD_WIDTH*LCD_HEIGHT); sleep(HZ/5); /* Disabling these saves another ~15mA */ - IO_OSD_OSDWINMD0&= ~(0x01); - IO_VID_ENC_VMOD &= ~(0x01); - -// IO_CLK_MOD1 &= ~(0x0018); + IO_OSD_OSDWINMD0 &= ~(0x01); + IO_VID_ENC_VMOD &= ~(0x01); /* Disabling the LCD saves ~50mA */ IO_GIO_BITCLR2=1<<4; @@ -79,13 +77,11 @@ void lcd_awake(void) if (!lcd_on) { lcd_on=true; - -// IO_CLK_MOD1 |= 0x0018; - IO_OSD_OSDWINMD0|= 0x01; - IO_VID_ENC_VMOD |= 0x01; + IO_OSD_OSDWINMD0 |= 0x01; + IO_VID_ENC_VMOD |= 0x01; sleep(2); - IO_GIO_BITSET2=1<<4; + IO_GIO_BITSET2 = 1<<4; lcd_update(); @@ -113,121 +109,121 @@ void lcd_init_device(void) /* Clear the Frame */ memset16(FRAME, 0x0000, LCD_WIDTH*LCD_HEIGHT); - IO_OSD_OSDWINMD0&=~(0x0001); - IO_OSD_VIDWINMD&=~(0x0001); + IO_OSD_OSDWINMD0 &= ~(0x0001); + IO_OSD_VIDWINMD &= ~(0x0001); /* Setup the LCD controller */ - IO_VID_ENC_VMOD=0x2014; - IO_VID_ENC_VDCTL=0x2000; - IO_VID_ENC_VDPRO=0x0000; - IO_VID_ENC_SYNCTL=0x100E; - IO_VID_ENC_HSPLS=1; /* HSYNC pulse width */ - IO_VID_ENC_VSPLS=1; /* VSYNC pulse width */ + IO_VID_ENC_VMOD = 0x2014; + IO_VID_ENC_VDCTL = 0x2000; + IO_VID_ENC_VDPRO = 0x0000; + IO_VID_ENC_SYNCTL = 0x100E; + IO_VID_ENC_HSPLS = 1; /* HSYNC pulse width */ + IO_VID_ENC_VSPLS = 1; /* VSYNC pulse width */ /* These calculations support 640x480 and 320x240 (based on OF) */ - IO_VID_ENC_HINT=LCD_NATIVE_WIDTH+LCD_NATIVE_WIDTH/3; - IO_VID_ENC_HSTART=LCD_NATIVE_WIDTH/6; /* Front porch */ - IO_VID_ENC_HVALID=LCD_NATIVE_WIDTH; /* Data valid */ - IO_VID_ENC_VINT=LCD_NATIVE_HEIGHT+7; - IO_VID_ENC_VSTART=3; - IO_VID_ENC_VVALID=LCD_NATIVE_HEIGHT; + IO_VID_ENC_HINT = LCD_NATIVE_WIDTH+LCD_NATIVE_WIDTH/3; + IO_VID_ENC_HSTART = LCD_NATIVE_WIDTH/6; /* Back porch */ + IO_VID_ENC_HVALID = LCD_NATIVE_WIDTH; /* Data valid */ + IO_VID_ENC_VINT = LCD_NATIVE_HEIGHT+8; + IO_VID_ENC_VSTART = 2; + IO_VID_ENC_VVALID = LCD_NATIVE_HEIGHT; - IO_VID_ENC_HSDLY=0x0000; - IO_VID_ENC_VSDLY=0x0000; - IO_VID_ENC_YCCTL=0x0000; - IO_VID_ENC_RGBCTL=0x0000; - IO_VID_ENC_RGBCLP=0xFF00; - IO_VID_ENC_LNECTL=0x0000; - IO_VID_ENC_CULLLNE=0x0000; - IO_VID_ENC_LCDOUT=0x0000; - IO_VID_ENC_BRTS=0x0000; - IO_VID_ENC_BRTW=0x0000; - IO_VID_ENC_ACCTL=0x0000; - IO_VID_ENC_PWMP=0x0000; - IO_VID_ENC_PWMW=0x0000; + IO_VID_ENC_HSDLY = 0x0000; + IO_VID_ENC_VSDLY = 0x0000; + IO_VID_ENC_YCCTL = 0x0000; + IO_VID_ENC_RGBCTL = 0x0000; + IO_VID_ENC_RGBCLP = 0xFF00; + IO_VID_ENC_LNECTL = 0x0000; + IO_VID_ENC_CULLLNE = 0x0000; + IO_VID_ENC_LCDOUT = 0x0000; + IO_VID_ENC_BRTS = 0x0000; + IO_VID_ENC_BRTW = 0x0000; + IO_VID_ENC_ACCTL = 0x0000; + IO_VID_ENC_PWMP = 0x0000; + IO_VID_ENC_PWMW = 0x0000; - IO_VID_ENC_DCLKPTN0=0x0001; + IO_VID_ENC_DCLKPTN0 = 0x0001; /* Setup the display */ - IO_OSD_MODE=0x00ff; + IO_OSD_MODE = 0x00ff; - IO_OSD_ATRMD=0x0000; - IO_OSD_RECTCUR=0x0000; + IO_OSD_ATRMD = 0x0000; + IO_OSD_RECTCUR = 0x0000; - IO_OSD_BASEPX=IO_VID_ENC_HSTART; - IO_OSD_BASEPY=IO_VID_ENC_VSTART; + IO_OSD_BASEPX = IO_VID_ENC_HSTART; + IO_OSD_BASEPY = IO_VID_ENC_VSTART; - addr = ((int)FRAME-CONFIG_SDRAM_START) / 32; + addr = ((int)FRAME-CONFIG_SDRAM_START) / 32; /* Setup the OSD windows */ /* Used for 565 RGB */ - IO_OSD_OSDWINMD0=0x30C0; + IO_OSD_OSDWINMD0 = 0x30C0; - IO_OSD_OSDWIN0OFST=LCD_NATIVE_WIDTH / 16; + IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH / 16; - IO_OSD_OSDWINADH=addr >> 16; - IO_OSD_OSDWIN0ADL=addr & 0xFFFF; + IO_OSD_OSDWINADH = addr >> 16; + IO_OSD_OSDWIN0ADL = addr & 0xFFFF; - IO_OSD_OSDWIN0XP=0; - IO_OSD_OSDWIN0YP=0; + IO_OSD_OSDWIN0XP = 0; + IO_OSD_OSDWIN0YP = 0; /* read from OF */ - IO_OSD_OSDWIN0XL=LCD_NATIVE_WIDTH; - IO_OSD_OSDWIN0YL=LCD_NATIVE_HEIGHT; + IO_OSD_OSDWIN0XL = LCD_NATIVE_WIDTH; + IO_OSD_OSDWIN0YL = LCD_NATIVE_HEIGHT; /* Unused */ - IO_OSD_OSDWINMD1=0x10C0; + IO_OSD_OSDWINMD1 = 0x10C0; #if LCD_NATIVE_WIDTH%32!=0 - IO_OSD_OSDWIN1OFST=LCD_NATIVE_WIDTH / 32+1; + IO_OSD_OSDWIN1OFST = LCD_NATIVE_WIDTH / 32+1; #else - IO_OSD_OSDWIN1OFST=LCD_NATIVE_WIDTH / 32; + IO_OSD_OSDWIN1OFST = LCD_NATIVE_WIDTH / 32; #endif - IO_OSD_OSDWIN1ADL=addr & 0xFFFF; + IO_OSD_OSDWIN1ADL = addr & 0xFFFF; - IO_OSD_OSDWIN1XP=0; - IO_OSD_OSDWIN1YP=0; + IO_OSD_OSDWIN1XP = 0; + IO_OSD_OSDWIN1YP = 0; - IO_OSD_OSDWIN1XL=LCD_NATIVE_WIDTH; - IO_OSD_OSDWIN1YL=LCD_NATIVE_HEIGHT; + IO_OSD_OSDWIN1XL = LCD_NATIVE_WIDTH; + IO_OSD_OSDWIN1YL = LCD_NATIVE_HEIGHT; - IO_OSD_VIDWINMD=0x0002; + IO_OSD_VIDWINMD = 0x0002; - addr = ((int)FRAME2-CONFIG_SDRAM_START) / 32; + addr = ((int)FRAME2-CONFIG_SDRAM_START) / 32; /* This is a bit messy, the LCD transfers appear to happen in chunks of 32 * pixels. (based on OF) */ #if LCD_NATIVE_WIDTH%32!=0 - IO_OSD_VIDWIN0OFST=LCD_NATIVE_WIDTH / 32+1; + IO_OSD_VIDWIN0OFST = LCD_NATIVE_WIDTH / 32+1; #else - IO_OSD_VIDWIN0OFST=LCD_NATIVE_WIDTH / 32; + IO_OSD_VIDWIN0OFST = LCD_NATIVE_WIDTH / 32; #endif - IO_OSD_VIDWINADH=addr >> 16; - IO_OSD_VIDWIN0ADL=addr & 0xFFFF; + IO_OSD_VIDWINADH = addr >> 16; + IO_OSD_VIDWIN0ADL = addr & 0xFFFF; - IO_OSD_VIDWIN0XP=0; - IO_OSD_VIDWIN0YP=0; + IO_OSD_VIDWIN0XP = 0; + IO_OSD_VIDWIN0YP = 0; - IO_OSD_VIDWIN0XL=LCD_NATIVE_WIDTH; - IO_OSD_VIDWIN0YL=LCD_NATIVE_HEIGHT; + IO_OSD_VIDWIN0XL = LCD_NATIVE_WIDTH; + IO_OSD_VIDWIN0YL = LCD_NATIVE_HEIGHT; /* Set pin 36 and 35 (LCD POWER and LCD RESOLUTION) to an output */ - IO_GIO_DIR2&=!(3<<3); + IO_GIO_DIR2 &= ~(3<<3); #if LCD_NATIVE_HEIGHT > 320 /* Set LCD resolution to VGA */ - IO_GIO_BITSET2=1<<3; + IO_GIO_BITSET2 = 1<<3; #else /* Set LCD resolution to QVGA */ - IO_GIO_BITCLR2=1<<3; + IO_GIO_BITCLR2 = 1<<3; #endif - IO_OSD_OSDWINMD0|=0x01; - IO_VID_ENC_VMOD|=0x01; + IO_OSD_OSDWINMD0 |= 0x01; + IO_VID_ENC_VMOD |= 0x01; } #if defined(HAVE_LCD_MODES) @@ -236,30 +232,30 @@ void lcd_set_mode(int mode) if(mode==LCD_MODE_YUV) { /* Turn off the RGB buffer and enable the YUV buffer */ - IO_OSD_OSDWINMD0 |=0x04; - IO_OSD_VIDWINMD |=0x01; + IO_OSD_OSDWINMD0 |= 0x04; + IO_OSD_VIDWINMD |= 0x01; memset16(FRAME2, 0x0080, LCD_NATIVE_HEIGHT*(LCD_NATIVE_WIDTH+LCD_FUDGE)); } else if(mode==LCD_MODE_RGB565) { /* Turn on the RGB window, set it to 16 bit and turn YUV window off */ - IO_OSD_VIDWINMD &=~(0x01); - IO_OSD_OSDWIN0OFST=LCD_NATIVE_WIDTH / 16; - IO_OSD_OSDWINMD0 |=(1<<13); - IO_OSD_OSDWINMD0 &=~0x04; + IO_OSD_VIDWINMD &= ~(0x01); + IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH / 16; + IO_OSD_OSDWINMD0 |= (1<<13); + IO_OSD_OSDWINMD0 &= ~0x04; lcd_clear_display(); } else if(mode==LCD_MODE_PAL256) { #if LCD_NATIVE_WIDTH%32!=0 - IO_OSD_OSDWIN0OFST=LCD_NATIVE_WIDTH / 32+1; + IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH / 32+1; #else - IO_OSD_OSDWIN0OFST=LCD_NATIVE_WIDTH / 32; + IO_OSD_OSDWIN0OFST = LCD_NATIVE_WIDTH / 32; #endif - IO_OSD_VIDWINMD &=~(0x01); - IO_OSD_OSDWINMD0 &=~(1<<13); - IO_OSD_OSDWINMD0 |=0x01; + IO_OSD_VIDWINMD &= ~(0x01); + IO_OSD_OSDWINMD0 &= ~(1<<13); + IO_OSD_OSDWINMD0 |= 0x01; } } #endif @@ -346,35 +342,36 @@ void lcd_blit_pal256(unsigned char *src, int src_x, int src_y, int x, int y, #if CONFIG_ORIENTATION == SCREEN_PORTRAIT char *dst=(char *)FRAME+x+y*(LCD_NATIVE_WIDTH+LCD_FUDGE); - src=src+src_x+src_y*LCD_NATIVE_WIDTH; - while(height--); + src = src+src_x+src_y*LCD_WIDTH; + while(height--) { - memcpy ( dst, src, width); + memcpy(dst, src, width); - dst=dst+(LCD_NATIVE_WIDTH-x+LCD_FUDGE); - src+=width; + dst = dst + ((LCD_WIDTH -x +LCD_FUDGE)); + src = src + (LCD_WIDTH - x); } #else - char *dst=(char *)FRAME - + (LCD_NATIVE_WIDTH+LCD_FUDGE)*(LCD_NATIVE_HEIGHT-1) - - (LCD_NATIVE_WIDTH+LCD_FUDGE)*x + y; + char *dst=(char *)FRAME + + (LCD_NATIVE_WIDTH+LCD_FUDGE)*(LCD_NATIVE_HEIGHT-1) + - (LCD_NATIVE_WIDTH+LCD_FUDGE)*x + y; - src=src+src_x+src_y*LCD_WIDTH; - while(height--) - { - register char *c_dst=dst; - register int c_width=width; - - while (c_width--) - { - *c_dst=*src++; - c_dst=c_dst-(LCD_NATIVE_WIDTH+LCD_FUDGE); - } - - dst++; - src+=LCD_WIDTH-width; - } + src=src+src_x+src_y*LCD_WIDTH; + + while(height--) + { + register char *c_dst=dst; + register int c_width=width; + + while (c_width--) + { + *c_dst = *src++; + c_dst -= (LCD_NATIVE_WIDTH+LCD_FUDGE); + } + + dst++; + src+=LCD_WIDTH-width; + } #endif } diff --git a/uisimulator/sdl/uisdl.h b/uisimulator/sdl/uisdl.h index dae1d20393..7e5cbc5170 100644 --- a/uisimulator/sdl/uisdl.h +++ b/uisimulator/sdl/uisdl.h @@ -24,6 +24,7 @@ #include #include +#include "config.h" /* colour definitions are R, G, B */ @@ -162,6 +163,7 @@ #define UI_LCD_POSY 90 /* y position of lcd */ #elif defined(MROBE_500) +#if LCD_WIDHT==320 #define UI_TITLE "Olympus M:Robe 500" #define UI_WIDTH 450 /* width of GUI window */ #define UI_HEIGHT 350 /* height of GUI window */ @@ -169,6 +171,15 @@ #define UI_LCD_POSY 30 /* y position of lcd */ #define UI_REMOTE_POSX 50 /* x position of remote lcd */ #define UI_REMOTE_POSY 325 /* y position of remote lcd */ +#else +#define UI_TITLE "Olympus M:Robe 500" +#define UI_WIDTH 900 /* width of GUI window */ +#define UI_HEIGHT 748 /* height of GUI window */ +#define UI_LCD_POSX 131 /* x position of lcd */ +#define UI_LCD_POSY 59 /* y position of lcd */ +#define UI_REMOTE_POSX 165 /* x position of remote lcd */ +#define UI_REMOTE_POSY 718 /* y position of remote lcd */ +#endif #elif defined(IRIVER_H10) #define UI_TITLE "iriver H10 20Gb"