Index: tools/configure =================================================================== --- tools/configure (revision 17285) +++ tools/configure (working copy) @@ -2108,7 +2108,7 @@ manual *.pdf *.a credits.raw @OUTPUT@ bitmaps pluginbitmaps \ @ARCHOSROM@ @FLASHFILE@ UI256.bmp rockbox-full.zip \ html txt rockbox-manual*.zip sysfont.h rockbox-info.txt \ - voicefontids *.wav *.mp3 *.voice max_language_size.h + voicefontids *.wav *.mp3 *.voice max_language_size.h dsp-image.h tools: \$(SILENT)\$(MAKE) -C \$(TOOLSDIR) CC=\$(HOSTCC) AR=\$(HOSTAR) @TOOLSET@ Index: apps/debug_menu.c =================================================================== --- apps/debug_menu.c (revision 17285) +++ apps/debug_menu.c (working copy) @@ -2396,7 +2396,55 @@ } #endif +#if CONFIG_USBOTG == USBOTG_ISP1583 +extern int dbg_usb_num_items(void); +extern char* dbg_usb_item(int selected_item, void *data, char *buffer, size_t buffer_len); +static int isp1583_action_callback(int action, struct gui_synclist *lists) +{ + (void)lists; + if (action == ACTION_NONE) + action = ACTION_REDRAW; + return action; +} + +static bool dbg_isp1583(void) +{ + struct simplelist_info isp1583; + simplelist_info_init(&isp1583, "ISP1583", dbg_usb_num_items(), NULL); + isp1583.timeout = HZ/100; + isp1583.hide_selection = true; + isp1583.get_name = dbg_usb_item; + isp1583.action_callback = isp1583_action_callback; + return simplelist_show_list(&isp1583); +} +#endif + +#ifdef DM320 +extern int dsp_dbg_num_items(void); +extern char* dsp_dbg_item(int selected_item, void *data, char *buffer, size_t buffer_len); + +static int dsp_action_callback(int action, struct gui_synclist *lists) +{ + (void)lists; + if (action == ACTION_NONE) + action = ACTION_REDRAW; + return action; +} + +static bool dbg_dsp(void) +{ + struct simplelist_info dsp; + simplelist_info_init(&dsp, "DM320 DSP", dsp_dbg_num_items(), NULL); + dsp.timeout = HZ/100; + dsp.hide_selection = true; + dsp.get_name = dsp_dbg_item; + dsp.action_callback = dsp_action_callback; + return simplelist_show_list(&dsp); +} +#endif + + /****** The menu *********/ struct the_menu_item { unsigned char *desc; /* string or ID */ @@ -2472,6 +2520,12 @@ #if defined(HAVE_EEPROM) && !defined(HAVE_EEPROM_SETTINGS) { "Write back EEPROM", dbg_write_eeprom }, #endif +#if CONFIG_USBOTG == USBOTG_ISP1583 + { "View ISP1583 info", dbg_isp1583 }, +#endif +#ifdef DM320 + { "View DSP info", dbg_dsp }, +#endif #ifdef ROCKBOX_HAS_LOGF {"logf", logfdisplay }, {"logfdump", logfdump }, Index: apps/keymaps/keymap-creativezvm.c =================================================================== --- apps/keymaps/keymap-creativezvm.c (revision 17285) +++ apps/keymaps/keymap-creativezvm.c (working copy) @@ -43,31 +43,56 @@ */ -#define BUTTON_VOL_UP BUTTON_NONE -#define BUTTON_VOL_DOWN BUTTON_NONE - static const struct button_mapping button_context_standard[] = { { ACTION_STD_PREV, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_STD_NEXT, BUTTON_DOWN|BUTTON_REL, BUTTON_NONE }, { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE }, + { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE }, - { ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT,BUTTON_SELECT }, + { ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT }, - { ACTION_STD_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, - { ACTION_STD_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, + { ACTION_STD_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, + { ACTION_STD_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, - { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, - { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, + { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE }, LAST_ITEM_IN_LIST }; /* button_context_standard */ static const struct button_mapping button_context_wps[] = { + { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, + { ACTION_WPS_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE }, + + { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, + { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, + + { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, + { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, + + //{ ACTION_WPS_ABSETB_NEXTDIR,BUTTON_RIGHT, BUTTON_CUSTOM }, + //{ ACTION_WPS_ABSETA_PREVDIR,BUTTON_LEFT, BUTTON_CUSTOM }, + //{ ACTION_WPS_ABRESET, BUTTON_CUSTOM|BUTTON_REPEAT, BUTTON_NONE }, + + { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE }, + + { ACTION_WPS_PITCHSCREEN, BUTTON_BACK|BUTTON_REPEAT, BUTTON_BACK }, + + { ACTION_WPS_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, + { ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, + { ACTION_WPS_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT }, + + { ACTION_WPS_ID3SCREEN, BUTTON_BACK|BUTTON_REL, BUTTON_NONE }, + { ACTION_WPS_BROWSE, BUTTON_SELECT|BUTTON_REL, BUTTON_BACK }, LAST_ITEM_IN_LIST }; /* button_context_wps */ Index: firmware/export/dm320.h =================================================================== --- firmware/export/dm320.h (revision 17285) +++ firmware/export/dm320.h (working copy) @@ -411,9 +411,9 @@ #define IO_CLK_LPCTL0 DM320_REG(0x089E) #define IO_CLK_LPCTL1 DM320_REG(0x08A0) #define IO_CLK_OSEL DM320_REG(0x08A2) -#define IO_CLK_00DIV DM320_REG(0x08A4) +#define IO_CLK_O0DIV DM320_REG(0x08A4) #define IO_CLK_O1DIV DM320_REG(0x08A6) -#define IO_CLK_02DIV DM320_REG(0x08A8) +#define IO_CLK_O2DIV DM320_REG(0x08A8) #define IO_CLK_PWM0C DM320_REG(0x08AA) #define IO_CLK_PWM0H DM320_REG(0x08AC) #define IO_CLK_PWM1C DM320_REG(0x08AE) Index: firmware/export/logf.h =================================================================== --- firmware/export/logf.h (revision 17285) +++ firmware/export/logf.h (working copy) @@ -27,7 +27,7 @@ #ifndef __PCTOOL__ #define MAX_LOGF_LINES 1000 -#define MAX_LOGF_ENTRY 30 +#define MAX_LOGF_ENTRY 80 #define MAX_LOGF_DATASIZE (MAX_LOGF_ENTRY*MAX_LOGF_LINES) extern unsigned char logfbuffer[MAX_LOGF_LINES][MAX_LOGF_ENTRY]; Index: firmware/export/config-creativezvm.h =================================================================== --- firmware/export/config-creativezvm.h (revision 17285) +++ firmware/export/config-creativezvm.h (working copy) @@ -48,7 +48,7 @@ #define HAVE_TAGCACHE /* define this if the target has volume keys which can be used in the lists */ -#define HAVE_VOLUME_IN_LIST +//#define HAVE_VOLUME_IN_LIST /* LCD dimensions */ #define CONFIG_LCD LCD_CREATIVEZVM @@ -99,16 +99,18 @@ /* The number of bytes reserved for loadable plugins */ #define PLUGIN_BUFFER_SIZE 0x100000 -/* Define this if you have the TLV320 audio codec */ -//#define HAVE_TLV320 +/* Define this if you have the TLV320 audio codec -> controlled by the DSP */ +#define HAVE_TLV320 +#define CONFIG_I2C I2C_DM320 + /* TLV320 has no tone controls, so we use the software ones */ //#define HAVE_SW_TONE_CONTROLS /*#define HW_SAMPR_CAPS (SAMPR_CAP_88 | SAMPR_CAP_44 | SAMPR_CAP_22 | \ SAMPR_CAP_11)*/ -#define BATTERY_CAPACITY_DEFAULT 1100 /* default battery capacity */ +#define BATTERY_CAPACITY_DEFAULT 1250 /* default battery capacity */ #define BATTERY_CAPACITY_MIN 500 /* min. capacity selectable */ #define BATTERY_CAPACITY_MAX 2500 /* max. capacity selectable */ #define BATTERY_CAPACITY_INC 100 /* capacity increment */ @@ -125,8 +127,6 @@ /* Define this if you have a Texas Instruments TSC2100 touch screen */ //#define HAVE_TSC2100 -#define CONFIG_USBOTG USBOTG_ISP1583 - /* define this if the hardware can be powered off while charging */ #define HAVE_POWEROFF_WHILE_CHARGING @@ -158,12 +158,11 @@ #define BOOTFILE "rockbox." BOOTFILE_EXT #define BOOTDIR "/.rockbox" +#define CONFIG_USBOTG USBOTG_ISP1583 #define HAVE_USBSTACK #define USB_VENDOR_ID 0x041e #define USB_PRODUCT_ID 0x4133 -#define USB_SERIAL - //DEBUGGING! #ifdef BOOTLOADER #define THREAD_EXTRA_CHECKS 1 @@ -174,7 +173,9 @@ #define DO_THREAD_TEST #endif +#define LOGF_ENABLE + //Uncomment next line to make this build Zen Vision compatible //#define ZEN_VISION #endif Index: firmware/Makefile =================================================================== --- firmware/Makefile (revision 17285) +++ firmware/Makefile (working copy) @@ -24,7 +24,7 @@ all: $(OUTPUT) $(EXTRA_TARGETS) -$(DEPFILE): $(BUILDDIR)/sysfont.h +$(DEPFILE): $(BUILDDIR)/sysfont.h $(BUILDDIR)/dsp-image.h dep: $(DEPFILE) @@ -49,4 +49,7 @@ $(call PRINTS,CONVBDF)$(TOOLSDIR)/convbdf -c -o $(OBJDIR)/sysfont.c $< $(call PRINTS,CC sysfont.c)$(CC) $(CFLAGS) -c $(OBJDIR)/sysfont.c -o $@ +$(BUILDDIR)/dsp-image.h: target/arm/tms320dm320/dsp/arm.c target/arm/tms320dm320/dsp/arm.h target/arm/tms320dm320/dsp/ipc.h target/arm/tms320dm320/dsp/main.c target/arm/tms320dm320/dsp/registers.h target/arm/tms320dm320/dsp/vectors.asm target/arm/tms320dm320/dsp/linker.cmd + $(call PRINTS,MAKE in target/arm/tms320dm320/dsp)$(MAKE) -C target/arm/tms320dm320/dsp OBJDIR=$(OBJDIR)/target/arm/tms320dm320/dsp + -include $(DEPFILE) Index: firmware/SOURCES =================================================================== --- firmware/SOURCES (revision 17285) +++ firmware/SOURCES (working copy) @@ -101,7 +101,9 @@ drivers/led.c drivers/button.c #ifndef SIMULATOR +#ifdef HAVE_DAC3550A drivers/dac.c +#endif drivers/serial.c #endif /* SIMULATOR */ @@ -716,7 +718,6 @@ target/arm/lcd-as-memframe.S target/arm/mmu-arm.c target/arm/tms320dm320/creative-zvm/adc-creativezvm.c -target/arm/tms320dm320/creative-zvm/audio-creativezvm.c target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c target/arm/tms320dm320/creative-zvm/ata-creativezvm.c target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c Index: firmware/target/arm/tms320dm320/dsp-dm320.c =================================================================== --- firmware/target/arm/tms320dm320/dsp-dm320.c (revision 17285) +++ firmware/target/arm/tms320dm320/dsp-dm320.c (working copy) @@ -22,7 +22,12 @@ #include "debug.h" #include "string.h" #include "dsp-target.h" +#include "dsp/ipc.h" +#include "file.h" +#include "logf.h" +#define DEBUGF logf + /* A "DSP image" is an array of these, terminated by raw_data_size_half = 0. */ struct dsp_section { const unsigned short *raw_data; @@ -31,43 +36,73 @@ }; /* Must define struct dsp_section before including the image. */ -#include "dsp_image_helloworld.h" +#include "dsp-image.h" -#ifdef DEBUG -static void dsp_status(void) +#define dsp_message (*(volatile struct ipc_message *)&DSP_(_status)) + +int dsp_dbg_num_items(void) { - unsigned short hpib_ctl = IO_DSPC_HPIB_CONTROL; - unsigned short hpib_stat = IO_DSPC_HPIB_STATUS; - char buffer1[80], buffer2[80]; - - DEBUGF("dsp_status(): clkc_hpib=%u clkc_dsp=%u", - !!(IO_CLK_MOD0 & (1 << 11)), !!(IO_CLK_MOD0 & (1 << 10))); - - DEBUGF("dsp_status(): irq_dsphint=%u 7fff=%04x scratch_status=%04x" - " acked=%04x", - (IO_INTC_IRQ0 >> IRQ_DSPHINT) & 1, DSP_(0x7fff), DSP_(_status), - DSP_(_acked)); -#define B(f,w,b,m) if ((w & (1 << b)) == 0) \ - strcat(f, "!"); \ - strcat(f, #m "|"); - strcpy(buffer1, ""); - B(buffer1, hpib_ctl, 0, EN); - B(buffer1, hpib_ctl, 3, NMI); - B(buffer1, hpib_ctl, 5, EXCHG); - B(buffer1, hpib_ctl, 7, DINT0); - B(buffer1, hpib_ctl, 8, DRST); - B(buffer1, hpib_ctl, 9, DHOLD); - B(buffer1, hpib_ctl, 10, BIO); - - strcpy(buffer2, ""); - B(buffer2, hpib_stat, 8, HOLDA); - B(buffer2, hpib_stat, 12, DXF); - - DEBUGF("dsp_status(): hpib: ctl=%s stat=%s", buffer1, buffer2); -#undef B + return 13; } -#endif +static bool inited = false; + +char* dsp_dbg_item(int selected_item, void *data, char *buffer, size_t buffer_len) +{ + strcpy(buffer, ""); + switch(selected_item) + { + case 0: + snprintf(buffer, buffer_len, "dsp_status(): clkc_hpib=%u clkc_dsp=%u", + !!(IO_CLK_MOD0 & (1 << 11)), !!(IO_CLK_MOD0 & (1 << 10))); + return buffer; + case 1: + snprintf(buffer, buffer_len, "dsp_status(): irq_dsphint=%u 7fff=%04x", + (IO_INTC_IRQ0 >> IRQ_DSPHINT) & 1, DSP_(0x7fff)); + return buffer; + case 2: + snprintf(buffer, buffer_len, "scratch_status=%04x acked=%04x", DSP_(_status), DSP_(_acked)); + return buffer; + #define B(w,b,m) snprintf(buffer, buffer_len, "%s: %s %s", #w, ((w & (1 << b)) == 0 ? "X" : "O"), #m); + #define HPIB_CTL (unsigned short)IO_DSPC_HPIB_CONTROL + #define HPIB_STAT (unsigned short)IO_DSPC_HPIB_STATUS + case 3: + B(HPIB_CTL, 0, EN); + return buffer; + case 4: + B(HPIB_CTL, 3, NMI); + return buffer; + case 5: + B(HPIB_CTL, 5, EXCHG); + return buffer; + case 6: + B(HPIB_CTL, 7, DINT0) + return buffer; + case 7: + B(HPIB_CTL, 8, DRST); + return buffer; + case 8: + B(HPIB_CTL, 9, DHOLD); + return buffer; + case 9: + B(HPIB_CTL, 10, BIO); + return buffer; + case 10: + B(HPIB_STAT, 8, HOLDA); + return buffer; + case 11: + B(HPIB_STAT, 12, DXF); + return buffer; + #undef B + } + if(!inited) + { + dsp_wake(); + inited = true; + } + return NULL; +} + static void dsp_reset(void) { DSP_(0x7fff) = 0xdead; @@ -98,11 +133,13 @@ static void dsp_load(const struct dsp_section *im) { + unsigned int i; + while (im->raw_data_size_half) { volatile unsigned short *data_ptr = &DSP_(im->physical_addr); - unsigned int i; - /* Use 16-bit writes. */ + /* Use 16-bit writes. + TODO: Do this using HPIB DMAC. */ if (im->raw_data) { DEBUGF("dsp_load(): loading %u words at 0x%04x (0x%08lx)", im->raw_data_size_half, im->physical_addr, @@ -123,33 +160,186 @@ im++; } + +#ifdef REMAP_VECTORS + /* Copy relocated vectors (0x3f80) to where the ROM loader expects them + (0x7f80). + TODO: Un-hardcode 0x3f80. */ + for (i = 0; i < 0x80; i++) { + DSP_(0x7f80 + i) = DSP_(0x3f80 + i); + } +#endif } -void dsp_init(void) +static signed short *the_rover = (signed short *)0x1900000; +static unsigned int index_rover = 0; +static signed short __attribute__((aligned (16))) pcm_buffer[PCM_SIZE / 2]; + +void dsp_init() { - IO_INTC_IRQ0 = 1 << 11; - IO_INTC_EINT0 |= 1 << 11; + unsigned long sdem_addr; + int fd; + int bytes; + IO_INTC_IRQ0 = INTR_IRQ0_IMGBUF; + IO_INTC_EINT0 |= INTR_EINT0_IMGBUF; + + IO_CLK_MOD0 |= (CLK_MOD0_HPIB | CLK_MOD0_DSP); + IO_DSPC_HPIB_CONTROL = 1 << 10 | 1 << 9 | 1 << 8 | 1 << 7 | 1 << 3 | 1 << 0; dsp_reset(); - dsp_load(dsp_image_helloworld); + dsp_load(dsp_image); + + /* Initialize codec. */ + sdem_addr = (unsigned long)pcm_buffer - CONFIG_SDRAM_START; + DEBUGF("pcm_sdram at 0x%08lx, sdem_addr 0x%08lx", + (unsigned long)pcm_buffer, (unsigned long)sdem_addr); + DSP_(_sdem_addrl) = sdem_addr & 0xffff; + DSP_(_sdem_addrh) = sdem_addr >> 16; + + fd = open("/rover.raw", O_RDONLY); + bytes = read(fd, the_rover, 4*1024*1024); + close(fd); + + DEBUGF("read %d rover bytes", bytes); + + #if 0 + { + unsigned int i; + memset(pcm_buffer, 0x80, PCM_SIZE); + for (i = 0; i < 8192; i++) { + signed short val = 0; + /*if (i < PCM_SIZE/4/2) { + val = 128*(i%256); + } else { + val = 2*128*128-128*(i%256); + }*/ + val = 128*(i%256); + pcm_buffer[2*i] = pcm_buffer[2*i+1] = val; + } + clean_dcache(); + + + { + unsigned int i; + volatile signed short *pdata = &DSP_(_data); + DEBUGF("dsp__data at %08x", pdata); + for (i = 0; i < 4096; i++) { + pdata[2*i]=pdata[2*i+1]=(i&1)*32767; + } + for (i = 4096; i < 8192; i++) { + pdata[2*i]=pdata[2*i+1]=0; + } + } + #endif + +#ifdef IPC_SIZES + DEBUGF("dsp_message at 0x%08x", &dsp_message); + DEBUGF("sizeof(ipc_message)=%uB offset(ipc_message.payload)=%uB", + sizeof(struct ipc_message), (int)&((struct ipc_message*)0)->payload); +#endif + +#ifdef INIT_MSG + /* Prepare init message. */ + + /* DSP accesses MUST be done a word at a time. */ + dsp_message.msg = MSG_INIT; + + sdem_addr = (unsigned long)pcm_sdram - CONFIG_SDRAM_START; + DEBUGF("pcm_sdram at 0x%08x, sdem_addr 0x%08x", pcm_sdram, sdem_addr); + dsp_message.payload.init.sdem_addrl = sdem_addr & 0xffff; + dsp_message.payload.init.sdem_addrh = sdem_addr >> 16; + + DEBUGF("dsp_message: %04x %04x %04x %04x", + ((unsigned short *)&dsp_message)[0], + ((unsigned short *)&dsp_message)[1], + ((unsigned short *)&dsp_message)[2], + ((unsigned short *)&dsp_message)[3]); +#endif } void DSPHINT(void) { unsigned int i; char buffer[80]; + static unsigned short level = 2; - IO_INTC_IRQ0 = 1 << 11; + unsigned short *pcm_topbottom, *pcm_topbottom_end; + + IO_INTC_IRQ0 = INTR_IRQ0_IMGBUF; - /* DSP stores one character per word. */ - for (i = 0; i < sizeof(buffer); i++) { - buffer[i] = (&DSP_(_status))[i]; + switch (dsp_message.msg) { + case MSG_DEBUGF: + /* DSP stores one character per word. */ + for (i = 0; i < sizeof(buffer); i++) { + buffer[i] = dsp_message.payload.debugf.buffer[i]; + } + + /* Release shared area to DSP. */ + dsp_wake(); + + DEBUGF("DSP: %s", buffer); + break; + case MSG_REFILL: + DEBUGF("DSP: DMA0 with topbottom=%u (fill at %04lx)", + dsp_message.payload.refill.topbottom, + (unsigned long)pcm_buffer + + dsp_message.payload.refill.topbottom); + pcm_topbottom = pcm_buffer + dsp_message.payload.refill.topbottom / 2; + + /* + i = 0; + while (i < PCM_SIZE/4) { + unsigned int j; + for (j = 0; j < level; j++) { + pcm_topbottom[i+j] = -32768; + } + for (j = level; j < 2*level; j++) { + pcm_topbottom[i+j] = 32767; + } + i += 2*level; + } + + level += 2; + if (level > 256) { + level = 2; + }*/ + + memcpy(pcm_topbottom, the_rover + index_rover, PCM_SIZE/2); + index_rover += PCM_SIZE/4; + if (index_rover >= 2*1024*1024) { + index_rover = 0; + } + + /* + pcm_topbottom = &p_pcm_sdram[dsp_message.payload.refill.topbottom/2]; + DEBUGF("DSP: tofill begins: %04x %04x %04x %04x", + pcm_topbottom[0], + pcm_topbottom[1], + pcm_topbottom[2], + pcm_topbottom[3] + ); + pcm_topbottom_end = &p_pcm_sdram[(dsp_message.payload.refill.topbottom+PCM_SIZE/2)/2]; + DEBUGF("DSP: tofill ends: %04x %04x %04x %04x", + pcm_topbottom_end[-4], + pcm_topbottom_end[-3], + pcm_topbottom_end[-2], + pcm_topbottom_end[-1] + ); + */ + + /* + DEBUGF("DSP: DMA0: SD %04x:%04x -> DSP %04x:%04x, TRG %04x", + dsp_message.payload.refill._SDEM_ADDRH, + dsp_message.payload.refill._SDEM_ADDRL, + dsp_message.payload.refill._DSP_ADDRH, + dsp_message.payload.refill._DSP_ADDRL, + dsp_message.payload.refill._DMA_TRG); + */ + break; + default: + DEBUGF("DSP: unknown msg 0x%04x", dsp_message.msg); + break; } - - /* Release shared area to DSP. */ - dsp_wake(); - - DEBUGF("DSP: %s", buffer); } Index: firmware/target/arm/tms320dm320/dsp_image_helloworld.h =================================================================== --- firmware/target/arm/tms320dm320/dsp_image_helloworld.h (revision 17285) +++ firmware/target/arm/tms320dm320/dsp_image_helloworld.h (working copy) @@ -1,31 +0,0 @@ -#ifndef DSP_IMAGE_HELLOWORLD -#define DSP_IMAGE_HELLOWORLD -/* - * This is just a dummy DSP image so that dsp-dm320.c compiles. - * - * 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 program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - */ - -static const struct dsp_section dsp_image_helloworld[] = { - {NULL, 0, 0} -}; - -/* Symbol table, usable with the DSP_() macro (see dsp-target.h). */ -#define _status 0x0000 -#define _acked 0x0000 - -#endif Index: firmware/target/arm/tms320dm320/creative-zvm/audio-creativezvm.c =================================================================== --- firmware/target/arm/tms320dm320/creative-zvm/audio-creativezvm.c (revision 17285) +++ firmware/target/arm/tms320dm320/creative-zvm/audio-creativezvm.c (working copy) @@ -1,44 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id: audio-c200_e200.c 14624 2007-09-06 03:01:41Z lowlight $ - * - * Copyright (C) 2007 by Michael Sevakis - * - * 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 "cpu.h" -#include "kernel.h" -#include "sound.h" - -const struct sound_settings_info audiohw_settings[] = { - [SOUND_VOLUME] = {"dB", 0, 1, -74, 6, -25}, - [SOUND_BASS] = {"dB", 1, 15, -60, 90, 0}, - [SOUND_TREBLE] = {"dB", 1, 15, -60, 90, 0}, - [SOUND_BALANCE] = {"%", 0, 1,-100, 100, 0}, - [SOUND_CHANNELS] = {"", 0, 1, 0, 5, 0}, - [SOUND_STEREO_WIDTH] = {"%", 0, 5, 0, 250, 100}, -}; - - -void audiohw_init(void) -{ -} - -void audiohw_close(void) -{ -} - -void audiohw_mute(bool mute) -{ - (void) mute; -} Index: firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c =================================================================== --- firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c (revision 17285) +++ firmware/target/arm/tms320dm320/creative-zvm/pcm-creativezvm.c (working copy) @@ -22,21 +22,57 @@ #include "audio.h" #include "sound.h" #include "file.h" +#include "dm320.h" +#include "audiohw.h" +#include "dsp-target.h" -void pcm_postinit(void) +void pcm_play_dma_init(void) { + IO_CLK_O1DIV = 3; + /* Set GIO25 to CLKOUT1A */ + IO_GIO_FSEL2 |= 3; + sleep(5); + audiohw_init(); + + audiohw_set_frequency(1); + + /* init DSP */ + dsp_init(); } -const void * pcm_play_dma_get_peak_buffer(int *count) +void pcm_postinit(void) { - (void) count; - return 0; + audiohw_postinit(); } -void pcm_play_dma_init(void) +/* set frequency used by the audio hardware */ +void pcm_set_frequency(unsigned int frequency) { + int index; + switch(frequency) + { + case SAMPR_11: + case SAMPR_22: + index = 0; + break; + default: + case SAMPR_44: + index = 1; + break; + case SAMPR_88: + index = 2; + break; + } + + audiohw_set_frequency(index); +} /* pcm_set_frequency */ + +const void * pcm_play_dma_get_peak_buffer(int *count) +{ + (void) count; + return 0; } void pcm_apply_settings(void) @@ -44,11 +80,6 @@ } -void pcm_set_frequency(unsigned int frequency) -{ - (void) frequency; -} - void pcm_play_dma_start(const void *addr, size_t size) { (void) addr; Index: firmware/drivers/audio/tlv320.c =================================================================== --- firmware/drivers/audio/tlv320.c (revision 17285) +++ firmware/drivers/audio/tlv320.c (working copy) @@ -16,12 +16,17 @@ * KIND, either express or implied. * ****************************************************************************/ +#include "config.h" #include "logf.h" #include "system.h" #include "string.h" #include "audio.h" +#if CONFIG_I2C == I2C_COLDFIRE #include "i2c-coldfire.h" +#elif CONFIG_I2C == I2C_DM320 +#include "i2c-dm320.h" +#endif #include "audiohw.h" const struct sound_settings_info audiohw_settings[] = { @@ -43,7 +48,7 @@ /* +6 to -73dB 1dB steps (plus mute == 80levels) 7bits */ /* 1111111 == +6dB (0x7f) */ /* 1111001 == 0dB (0x79) */ - /* 0110000 == -73dB (0x30 */ + /* 0110000 == -73dB (0x30) */ /* 0101111 == mute (0x2f) */ if (db < VOLUME_MIN) { @@ -54,7 +59,11 @@ } /* local functions and definations */ +#ifndef CREATIVE_ZVM #define TLV320_ADDR 0x34 +#else +#define TLV320_ADDR 0x1A +#endif struct tlv320_info { @@ -73,7 +82,13 @@ data[0] = (reg << 1) | ((value >> 8) & 1); data[1] = value; +#if CONFIG_I2C == I2C_COLDFIRE if (i2c_write(I2C_IFACE_0, TLV320_ADDR, data, 2) != 2) +#elif CONFIG_I2C == I2C_DM320 + if (i2c_write(TLV320_ADDR, data, 2) != 0) +#else + #error Unknown I²C config! +#endif { logf("tlv320 error reg=0x%x", reg); return; Index: firmware/drivers/isp1583.c =================================================================== --- firmware/drivers/isp1583.c (revision 17285) +++ firmware/drivers/isp1583.c (working copy) @@ -26,6 +26,7 @@ #include "isp1583.h" #include "thread.h" #include "logf.h" +#include #define DIR_RX 0 #define DIR_TX 1 @@ -149,7 +150,7 @@ endpoints[epidx_n(idx)].enabled[epidx_dir(idx)] = 1; } - +/* static void usb_disable_endpoint(int idx, bool set_struct) { usb_select_endpoint(idx); @@ -159,7 +160,7 @@ if(set_struct) endpoints[epidx_n(idx)].enabled[epidx_dir(idx)] = 0; } - +*/ static int usb_get_packet(unsigned char *buf, int max_len) { int len, i; @@ -712,6 +713,53 @@ usb_status_ack(0, DIR_TX); } +int dbg_usb_num_items(void) +{ + return 2+NUM_ENDPOINTS*2; +} + +char* dbg_usb_item(int selected_item, void *data, char *buffer, size_t buffer_len) +{ + if(selected_item < 2) + { + switch(selected_item) + { + case 0: + snprintf(buffer, buffer_len, "USB connected: %s", (usb_drv_connected() ? "Yes" : "No")); + return buffer; + case 1: + snprintf(buffer, buffer_len, "HS mode: %s", (high_speed_mode ? "Yes" : "No")); + return buffer; + } + } + else + { + int n = ep_index((selected_item - 2) / 2, (selected_item - 2) % 2); + if(endpoints[n].enabled == false) + snprintf(buffer, buffer_len, "EP%d[%s]: DISABLED", epidx_n(n), (epidx_dir(n) ? "TX" : "RX")); + else + { + if(epidx_dir(n)) + { + if(endpoints[n].out_in_progress) + snprintf(buffer, buffer_len, "EP%d[TX]: TRANSFERRING DATA -> %d bytes/%d bytes", epidx_n(n), (endpoints[n].out_len - endpoints[n].out_ptr), endpoints[n].out_len); + else + snprintf(buffer, buffer_len, "EP%d[TX]: STANDBY", epidx_n(n)); + } + else + { + if(endpoints[n].in_buf && !endpoints[n].in_ack) + snprintf(buffer, buffer_len, "EP%d[RX]: RECEIVING DATA -> %d bytes/%d bytes", epidx_n(n), endpoints[n].in_ptr, endpoints[n].in_max_len); + else + snprintf(buffer, buffer_len, "EP%d[RX]: STANDBY", epidx_n(n)); + } + } + return buffer; + } + return NULL; + (void)data; +} + void usb_drv_set_test_mode(int mode) { logf("usb_drv_set_test_mode(%d)", mode);