From f64a3fe149830e54e75a9847337b08c73e827b2a Mon Sep 17 00:00:00 2001 From: Rafaël Carré Date: Sun, 1 Nov 2009 23:35:34 +0000 Subject: Sansa AMS PCM: remove runtime sanity checks Unaligned memory ops will cause a data abort anyway Make the check for samplerate at buildtime git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23480 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/arm/as3525/clock-target.h | 14 ++++++++++++++ firmware/target/arm/as3525/pcm-as3525.c | 9 +-------- 2 files changed, 15 insertions(+), 8 deletions(-) (limited to 'firmware') diff --git a/firmware/target/arm/as3525/clock-target.h b/firmware/target/arm/as3525/clock-target.h index 560e067510..81926c1884 100644 --- a/firmware/target/arm/as3525/clock-target.h +++ b/firmware/target/arm/as3525/clock-target.h @@ -132,21 +132,35 @@ #if (CLK_DIV(AS3525_PLLA_FREQ, AS3525_PCLK_FREQ) - 1) >= (1<<4) /* 4 bits */ #error PCLK frequency is too low : clock divider will not fit ! #endif + /* AS3525_DBOP_FREQ */ #if (CLK_DIV(AS3525_PCLK_FREQ, AS3525_DBOP_FREQ) - 1) >= (1<<3) /* 3 bits */ #error DBOP frequency is too low : clock divider will not fit ! #endif + /* AS3525_IDE_FREQ */ #if (CLK_DIV(AS3525_PLLA_FREQ, AS3525_IDE_FREQ) - 1) >= (1<<4) /* 4 bits */ #error IDE frequency is too low : clock divider will not fit ! #endif + /* AS3525_I2C_FREQ */ #if (CLK_DIV(AS3525_PCLK_FREQ, AS3525_I2C_FREQ)) >= (1<<10) /* 2+8 bits */ #error I2C frequency is too low : clock divider will not fit ! #endif + /* AS3525_SD_IDENT_FREQ */ #if ((CLK_DIV(AS3525_PCLK_FREQ, AS3525_SD_IDENT_FREQ) / 2) - 1) >= (1<<8) /* 8 bits */ #error SD IDENTIFICATION frequency is too low : clock divider will not fit ! #endif +/* I2SIN / I2SOUT frequencies */ +/* low samplerate */ +#if ((AS3525_PLLA_FREQ/(128*8000))) > 512 /* 8kHz = lowest frequency */ +#error PLLA frequency is too low for 8kHz samplerate ! +#endif +/* high samplerate */ +#if ((AS3525_PLLA_FREQ/(128*96000))) < 1 /* 96kHz = highest frequency */ +#error PLLA frequency is too high for 96kHz samplerate ! +#endif + #endif /* CLOCK_TARGET_H */ diff --git a/firmware/target/arm/as3525/pcm-as3525.c b/firmware/target/arm/as3525/pcm-as3525.c index f648908474..26e018c82f 100644 --- a/firmware/target/arm/as3525/pcm-as3525.c +++ b/firmware/target/arm/as3525/pcm-as3525.c @@ -61,9 +61,6 @@ static void play_start_pcm(void) if(size > MAX_TRANSFER) size = MAX_TRANSFER; - if((unsigned int)dma_start_addr & 3) - panicf("unaligned pointer!"); - dma_size -= size; dma_start_addr += size; @@ -148,9 +145,8 @@ void pcm_dma_apply_settings(void) { unsigned long frequency = pcm_sampr; + /* TODO : use a table ? */ const int divider = (((AS3525_PLLA_FREQ/128) + (frequency/2)) / frequency) - 1; - if(divider < 0 || divider > 511) - panicf("unsupported frequency %ld", frequency); int cgu_audio = CGU_AUDIO; /* read register */ cgu_audio &= ~(511 << 2); /* clear i2sout divider */ @@ -266,9 +262,6 @@ void pcm_rec_dma_start(void *addr, size_t size) rec_start_addr = addr; rec_size = size; - if((unsigned int)addr & 3) - panicf("unaligned pointer!"); - CGU_PERI |= CGU_I2SIN_APB_CLOCK_ENABLE|CGU_I2SOUT_APB_CLOCK_ENABLE; CGU_AUDIO |= ((1<<23)|(1<<11)); -- cgit v1.2.3