diff options
| author | Michael Sevakis <jethead71@rockbox.org> | 2008-12-12 11:01:07 +0000 |
|---|---|---|
| committer | Michael Sevakis <jethead71@rockbox.org> | 2008-12-12 11:01:07 +0000 |
| commit | e69d567d9ebf7d236ff9663b11ac396cc71dcd75 (patch) | |
| tree | 093b9d1bc979d79be1fcd0daac1d8daf8ac55503 /firmware/export | |
| parent | 0ad97d13fc52b28de566dc0ddaf7245583eec2cc (diff) | |
| download | rockbox-e69d567d9ebf7d236ff9663b11ac396cc71dcd75.zip rockbox-e69d567d9ebf7d236ff9663b11ac396cc71dcd75.tar.gz rockbox-e69d567d9ebf7d236ff9663b11ac396cc71dcd75.tar.bz2 rockbox-e69d567d9ebf7d236ff9663b11ac396cc71dcd75.tar.xz | |
Bring consistency to pcm implementation and samplerate handling. Less low-level duplication. A small test_sampr fix so it works on coldfire again.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19400 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/export')
| -rw-r--r-- | firmware/export/as3514.h | 2 | ||||
| -rw-r--r-- | firmware/export/config-gigabeat.h | 6 | ||||
| -rw-r--r-- | firmware/export/config-mrobe100.h | 1 | ||||
| -rw-r--r-- | firmware/export/pcm.h | 6 | ||||
| -rw-r--r-- | firmware/export/pp5002.h | 56 | ||||
| -rw-r--r-- | firmware/export/pp5020.h | 3 | ||||
| -rw-r--r-- | firmware/export/tlv320.h | 2 | ||||
| -rw-r--r-- | firmware/export/uda1380.h | 4 | ||||
| -rw-r--r-- | firmware/export/wm8731.h | 2 | ||||
| -rw-r--r-- | firmware/export/wm8758.h | 2 | ||||
| -rw-r--r-- | firmware/export/wm8975.h | 2 | ||||
| -rw-r--r-- | firmware/export/wm8978.h | 2 |
12 files changed, 75 insertions, 13 deletions
diff --git a/firmware/export/as3514.h b/firmware/export/as3514.h index af4615a..07aa0eb 100644 --- a/firmware/export/as3514.h +++ b/firmware/export/as3514.h @@ -26,7 +26,7 @@ extern int tenthdb2master(int db); extern void audiohw_set_master_vol(int vol_l, int vol_r); extern void audiohw_set_lineout_vol(int vol_l, int vol_r); -extern void audiohw_set_sample_rate(int sampling_control); +extern void audiohw_set_frequency(int fsel); /* Register Descriptions */ #define AS3514_LINE_OUT_R 0x00 diff --git a/firmware/export/config-gigabeat.h b/firmware/export/config-gigabeat.h index 664befd..708c17f 100644 --- a/firmware/export/config-gigabeat.h +++ b/firmware/export/config-gigabeat.h @@ -105,6 +105,12 @@ #define HW_SAMPR_CAPS (SAMPR_CAP_88 | SAMPR_CAP_44 | SAMPR_CAP_22 | \ SAMPR_CAP_11) +/* All exact rates for 16.9344MHz clock */ +#define CODEC_SRCTRL_11025HZ (0x19 << 1) +#define CODEC_SRCTRL_22050HZ (0x1b << 1) +#define CODEC_SRCTRL_44100HZ (0x11 << 1) +#define CODEC_SRCTRL_88200HZ (0x1f << 1) + #define HAVE_HEADPHONE_DETECTION #define BATTERY_CAPACITY_DEFAULT 2000 /* default battery capacity */ diff --git a/firmware/export/config-mrobe100.h b/firmware/export/config-mrobe100.h index 051f158..4ade179 100644 --- a/firmware/export/config-mrobe100.h +++ b/firmware/export/config-mrobe100.h @@ -58,6 +58,7 @@ /* Wolfsom audio codec */ #define HAVE_WM8751 +#define CODEC_SRCTRL_44100HZ (0x40|(0x11 << 1)|1) #define AB_REPEAT_ENABLE 1 diff --git a/firmware/export/pcm.h b/firmware/export/pcm.h index 1660f06..ac8ddb1 100644 --- a/firmware/export/pcm.h +++ b/firmware/export/pcm.h @@ -57,7 +57,7 @@ typedef int (*pcm_more_callback_type2)(int status); /* set the pcm frequency - use values in hw_sampr_list * use -1 for the default frequency */ -void pcm_set_frequency(unsigned int frequency); +void pcm_set_frequency(unsigned int samplerate); /* apply settings to hardware immediately */ void pcm_apply_settings(void); @@ -87,6 +87,8 @@ bool pcm_is_playing(void); specific portion **/ extern unsigned long pcm_curr_sampr; +extern unsigned long pcm_sampr; +extern int pcm_fsel; /* the registered callback function to ask for more mp3 data */ extern volatile pcm_more_callback_type pcm_callback_for_more; @@ -102,6 +104,8 @@ void pcm_play_dma_pause(bool pause); void pcm_play_dma_stopped_callback(void); const void * pcm_play_dma_get_peak_buffer(int *count); +void pcm_dma_apply_settings(void); + #ifdef HAVE_RECORDING /** RAW PCM recording routines **/ diff --git a/firmware/export/pp5002.h b/firmware/export/pp5002.h index b235a21..9fab86b 100644 --- a/firmware/export/pp5002.h +++ b/firmware/export/pp5002.h @@ -34,19 +34,64 @@ #define LCD1_BUSY_MASK 0x8000 /* I2S controller */ + +/* FIFO slot bits 7-0 are not implemented and so use of packed samples + * appears to be impossible. */ #define IISCONFIG (*(volatile unsigned long *)(0xc0002500)) #define IISFIFO_CFG (*(volatile unsigned long *)(0xc000251c)) #define IISFIFO_WR (*(volatile unsigned long *)(0xc0002540)) #define IISFIFO_RD (*(volatile unsigned long *)(0xc0002580)) -/* IISCONFIG bits: */ +/** + * IISCONFIG bits: + * | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | + * | | | | | | | | | + * | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | + * | | | | | | | | | + * | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | + * | | | | | | | | | + * | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | + * | rw | rw | rw | MS | rw |TXFENB# | rw | ENB | + * + * # No effect observed on iPod 3g + */ +#define IIS_ENABLE (1 << 0) #define IIS_TXFIFOEN (1 << 2) -#define IIS_TX_FREE_MASK (0xf << 23) +#define IIS_MASTER (1 << 4) + +/** + * IISFIFO_CFG bits: + * | 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | + * | | RXFull[3:0]$ | TXFree[3:1] > + * | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | + * >TXFre[0]| | | | | | RXCLR | TXCLR | + * | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | + * | rw | rw | rw | rw | rw | rw | IRQTX | rw | + * | 7* | 6* | 5* | 4* | 3 | 2 | 1 | 0 | + * |RXEMPTY | RXSAFE | RXDNGR | RXFULL | TXFULL | TXSAFE | TXDNGR |TXEMPTY | + * + * $Could be RXFree + * *Meaning isn't certain yet. + * More concerted recording work will reveal. + */ +#define IIS_IRQTX_REG IISFIFO_CFG +#define IIS_IRQRX_REG IISFIFO_CFG + +#define IIS_RX_FULL_MASK (0xf << 27) +#define IIS_RX_FULL_COUNT ((IISFIFO_CFG & IIS_RX_FULL_MASK) >> 27) +#define IIS_TX_FREE_MASK (0xf << 23) /* 0xf = 16 or 15 free */ #define IIS_TX_FREE_COUNT ((IISFIFO_CFG & IIS_TX_FREE_MASK) >> 23) +#define IIS_TX_IS_EMPTY ((IISFIFO_CFG & IIS_TXEMPTY) != 0) + +#define IIS_RXCLR (1 << 17) /* Resets *could* be reversed */ +#define IIS_TXCLR (1 << 16) +#define IIS_IRQTX (1 << 9) +#define IIS_TXFULL (1 << 3) /* All slots occupied */ +#define IIS_TXSAFE (1 << 2) /* FIFO >= 3/4 full */ +#define IIS_TXDANGER (1 << 1) /* FIFO <= 1/4 full */ +#define IIS_TXEMPTY (1 << 0) /* No samples in FIFO */ -/* IISFIFO_CFG bits: */ -#define IIS_IRQTX_REG IISFIFO_CFG -#define IIS_IRQTX (1 << 9) +#define IIS_RXEMPTY (1 << 4) /* FIFO is empty */ #define IDE_BASE 0xc0003000 @@ -184,6 +229,7 @@ #define DEV_RS (*(volatile unsigned long *)(0xcf005030)) #define DEV_I2C (1<<8) +#define DEV_I2S (1<<7) #define DEV_USB 0x400000 #define CLOCK_ENABLE (*(volatile unsigned long *)(0xcf005008)) diff --git a/firmware/export/pp5020.h b/firmware/export/pp5020.h index 908fed0..b4919a2 100644 --- a/firmware/export/pp5020.h +++ b/firmware/export/pp5020.h @@ -431,6 +431,9 @@ #define IIS_TX_FREE_COUNT \ ((IISFIFO_CFG & IIS_TX_FREE_MASK) >> 16) +#define IIS_TX_IS_EMPTY \ + ((IISFIFO_CFG & IIS_TX_FREE_MASK) >= (16 << 16)) + #define IIS_RXCLR (1 << 12) #define IIS_TXCLR (1 << 8) /* Number of slots */ diff --git a/firmware/export/tlv320.h b/firmware/export/tlv320.h index 91c4a67..171223f 100644 --- a/firmware/export/tlv320.h +++ b/firmware/export/tlv320.h @@ -38,7 +38,7 @@ extern int tenthdb2master(int db); * 44100: 1 = MCLK MCLK SCLK, LRCK: Audio Clk / 4 (default) * 88200: 2 = MCLK*2 MCLK SCLK, LRCK: Audio Clk / 2 */ -extern void audiohw_set_frequency(unsigned fsel); +extern void audiohw_set_frequency(int fsel); extern void audiohw_set_headphone_vol(int vol_l, int vol_r); #define HEADPHONE_MUTE 0x30 /* 0110000 = -73db */ diff --git a/firmware/export/uda1380.h b/firmware/export/uda1380.h index 26b13a9..af2b579 100644 --- a/firmware/export/uda1380.h +++ b/firmware/export/uda1380.h @@ -36,6 +36,8 @@ extern void audiohw_set_mixer_vol(int channel1, int channel2); /** * Sets frequency settings for DAC and ADC relative to MCLK + * For Coldfire IIS dividers, 11.2896MHz, codec as slave with + * PLL enabled. * * Selection for frequency ranges: * Fs: range: with: @@ -44,7 +46,7 @@ extern void audiohw_set_mixer_vol(int channel1, int channel2); * 44100: 2 = 25 to 50 SCLK, LRCK: Audio Clk / 4 (default) * 88200: 3 = 50 to 100 SCLK, LRCK: Audio Clk / 2 */ -extern void audiohw_set_frequency(unsigned fsel); +extern void audiohw_set_frequency(int fsel); #define UDA1380_ADDR 0x30 diff --git a/firmware/export/wm8731.h b/firmware/export/wm8731.h index 9d5b618..512ef9f 100644 --- a/firmware/export/wm8731.h +++ b/firmware/export/wm8731.h @@ -31,7 +31,7 @@ extern int tenthdb2master(int db); extern void audiohw_set_master_vol(int vol_l, int vol_r); -extern void audiohw_set_sample_rate(int sampling_control); +extern void audiohw_set_frequency(int fsel); /* Common register bits */ #ifdef HAVE_WM8731 diff --git a/firmware/export/wm8758.h b/firmware/export/wm8758.h index c094b12..493d18b 100644 --- a/firmware/export/wm8758.h +++ b/firmware/export/wm8758.h @@ -34,7 +34,7 @@ extern int tenthdb2mixer(int db); extern void audiohw_set_master_vol(int vol_l, int vol_r); extern void audiohw_set_lineout_vol(int vol_l, int vol_r); extern void audiohw_set_mixer_vol(int channel1, int channel2); -extern void audiohw_set_sample_rate(int sampling_control); +extern void audiohw_set_frequency(int fsel); #define RESET 0x00 #define RESET_RESET 0x0 diff --git a/firmware/export/wm8975.h b/firmware/export/wm8975.h index e2e4432..aeec33e 100644 --- a/firmware/export/wm8975.h +++ b/firmware/export/wm8975.h @@ -32,7 +32,7 @@ extern int tenthdb2master(int db); extern void audiohw_set_master_vol(int vol_l, int vol_r); extern void audiohw_set_lineout_vol(int vol_l, int vol_r); -extern void audiohw_set_sample_rate(int sampling_control); +extern void audiohw_set_frequency(int fsel); /* Register addresses and bits */ diff --git a/firmware/export/wm8978.h b/firmware/export/wm8978.h index 9c54ae3..f444c96 100644 --- a/firmware/export/wm8978.h +++ b/firmware/export/wm8978.h @@ -28,7 +28,7 @@ int tenthdb2master(int db); void audiohw_set_headphone_vol(int vol_l, int vol_r); -void audiohw_set_frequency(int sampling_control); +void audiohw_set_frequency(int fsel); void wmc_set(unsigned int reg, unsigned int bits); void wmc_clear(unsigned int reg, unsigned int bits); |