blob: f1f07ba0de21e278638fc6599c945415e8425025 [file] [log] [blame]
#ifndef _AAI_HW_STRUCT_H_
#define _AAI_HW_STRUCT_H_
#define DFLT_BUFFER_BYTES_MAX (128*1024)
#define DFLT_PERIOD_BYTES_MAX (32*1024)
#define DFLT_PERIOD_MIN (2)
#define DFLT_PERIOD_MAX (PAGE_SIZE / 16)
static const struct snd_pcm_hardware aai_pcm_hw_music_stereo_rx = {
.info = SNDRV_PCM_INFO_MMAP |
SNDRV_PCM_INFO_MMAP_VALID |
SNDRV_PCM_INFO_INTERLEAVED |
SNDRV_PCM_INFO_BLOCK_TRANSFER |
SNDRV_PCM_INFO_RESUME,
.formats = SNDRV_PCM_FMTBIT_S24_LE,
.rates = SNDRV_PCM_RATE_48000,
.rate_max = 48000,
.rate_min = 48000,
.channels_min = 2,
.channels_max = 2,
.buffer_bytes_max = DFLT_BUFFER_BYTES_MAX,
.period_bytes_min = 64,
.period_bytes_max = DFLT_PERIOD_BYTES_MAX,
.periods_min = DFLT_PERIOD_MIN,
.periods_max = DFLT_PERIOD_MAX,
};
static const struct snd_pcm_hardware aai_pcm_hw_music_stereo_tx = {
.info = SNDRV_PCM_INFO_MMAP |
SNDRV_PCM_INFO_MMAP_VALID |
SNDRV_PCM_INFO_INTERLEAVED |
SNDRV_PCM_INFO_BLOCK_TRANSFER |
SNDRV_PCM_INFO_RESUME,
.formats = SNDRV_PCM_FMTBIT_S32_LE,
.rates = SNDRV_PCM_RATE_48000,
.rate_max = 48000,
.rate_min = 48000,
.channels_min = 2,
.channels_max = 2,
.buffer_bytes_max = DFLT_BUFFER_BYTES_MAX,
.period_bytes_min = 64,
.period_bytes_max = DFLT_PERIOD_BYTES_MAX,
.periods_min = DFLT_PERIOD_MIN,
.periods_max = DFLT_PERIOD_MAX,
};
static const struct snd_pcm_hardware aai_pcm_hw_music = {
.info = SNDRV_PCM_INFO_MMAP |
SNDRV_PCM_INFO_MMAP_VALID |
SNDRV_PCM_INFO_INTERLEAVED |
SNDRV_PCM_INFO_BLOCK_TRANSFER |
SNDRV_PCM_INFO_RESUME,
.formats = SNDRV_PCM_FMTBIT_S32_LE,
.rates = SNDRV_PCM_RATE_48000,
.rate_max = 48000,
.rate_min = 48000,
.channels_min = 1,
.channels_max = 8,
.buffer_bytes_max = DFLT_BUFFER_BYTES_MAX,
.period_bytes_min = 64,
.period_bytes_max = DFLT_PERIOD_BYTES_MAX,
.periods_min = DFLT_PERIOD_MIN,
.periods_max = DFLT_PERIOD_MAX,
};
static const struct snd_pcm_hardware aai_pcm_hw_music_96k = {
.info = SNDRV_PCM_INFO_MMAP |
SNDRV_PCM_INFO_MMAP_VALID |
SNDRV_PCM_INFO_INTERLEAVED |
SNDRV_PCM_INFO_BLOCK_TRANSFER |
SNDRV_PCM_INFO_RESUME,
.formats = SNDRV_PCM_FMTBIT_S24_LE,
.rates = SNDRV_PCM_RATE_96000,
.rate_max = 96000,
.rate_min = 96000,
.channels_min = 1,
.channels_max = 8,
.buffer_bytes_max = DFLT_BUFFER_BYTES_MAX,
.period_bytes_min = 64,
.period_bytes_max = DFLT_PERIOD_BYTES_MAX,
.periods_min = DFLT_PERIOD_MIN,
.periods_max = DFLT_PERIOD_MAX,
};
static const struct snd_pcm_hardware aai_pcm_hw_voice = {
.info = SNDRV_PCM_INFO_MMAP |
SNDRV_PCM_INFO_MMAP_VALID |
SNDRV_PCM_INFO_INTERLEAVED |
SNDRV_PCM_INFO_BLOCK_TRANSFER |
SNDRV_PCM_INFO_RESUME,
.formats = SNDRV_PCM_FMTBIT_S24_LE,
.rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000,
.rate_max = 16000,
.rate_min = 8000,
.channels_min = 2,
.channels_max = 2,
.buffer_bytes_max = DFLT_BUFFER_BYTES_MAX,
.period_bytes_min = 8,
.period_bytes_max = DFLT_PERIOD_BYTES_MAX,
.periods_min = DFLT_PERIOD_MIN,
.periods_max = DFLT_PERIOD_MAX,
};
static const struct snd_pcm_hardware aai_pcm_hw_pcm = {
.info = SNDRV_PCM_INFO_MMAP |
SNDRV_PCM_INFO_MMAP_VALID |
SNDRV_PCM_INFO_INTERLEAVED |
SNDRV_PCM_INFO_BLOCK_TRANSFER |
SNDRV_PCM_INFO_RESUME,
/*
* for pcm the real format is 16 bits in 32 bits due to hardware
* bug (16 bits dma not working).
*/
.formats = SNDRV_PCM_FMTBIT_S32_LE,
.rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000,
.rate_max = 16000,
.rate_min = 8000,
.channels_min = 1,
.channels_max = 1,
.buffer_bytes_max = DFLT_BUFFER_BYTES_MAX,
.period_bytes_min = 8,
.period_bytes_max = DFLT_PERIOD_BYTES_MAX,
.periods_min = DFLT_PERIOD_MIN,
.periods_max = DFLT_PERIOD_MAX,
};
static const struct snd_pcm_hardware aai_pcm_hw_ram2ram = {
.info = SNDRV_PCM_INFO_MMAP |
SNDRV_PCM_INFO_MMAP_VALID |
SNDRV_PCM_INFO_INTERLEAVED |
SNDRV_PCM_INFO_BLOCK_TRANSFER |
SNDRV_PCM_INFO_RESUME,
.formats = SNDRV_PCM_FMTBIT_S24_LE,
.rates = SNDRV_PCM_RATE_192000 | SNDRV_PCM_RATE_16000,
.rate_max = 192000,
.rate_min = 44100,
.channels_min = 1,
.channels_max = 8,
.buffer_bytes_max = DFLT_BUFFER_BYTES_MAX,
.period_bytes_min = 8,
.period_bytes_max = DFLT_PERIOD_BYTES_MAX,
.periods_min = DFLT_PERIOD_MIN,
.periods_max = DFLT_PERIOD_MAX,
};
static const struct snd_pcm_hardware aai_pcm_hw_iec958 = {
.info = SNDRV_PCM_INFO_MMAP |
SNDRV_PCM_INFO_MMAP_VALID |
SNDRV_PCM_INFO_INTERLEAVED |
SNDRV_PCM_INFO_BLOCK_TRANSFER |
SNDRV_PCM_INFO_RESUME,
.formats = SNDRV_PCM_FMTBIT_IEC958_SUBFRAME |
SNDRV_PCM_FMTBIT_S32_LE,
.rates = SNDRV_PCM_RATE_44100 |
SNDRV_PCM_RATE_48000 |
SNDRV_PCM_RATE_88200 |
SNDRV_PCM_RATE_96000,
.rate_min = 44100,
.rate_max = 96000,
.channels_min = 1,
.channels_max = 8,
.buffer_bytes_max = DFLT_BUFFER_BYTES_MAX,
.period_bytes_min = 512,
.period_bytes_max = DFLT_PERIOD_BYTES_MAX,
.periods_min = DFLT_PERIOD_MIN,
.periods_max = DFLT_PERIOD_MAX,
};
/* List of AAI internal audio channels RX */
static struct aai_audio_chan_t aai_internal_audio_chans_rx[] = {
{.id = 0, .name = "2ram-0", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(0)},
{.id = 1, .name = "2ram-1", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(1)},
{.id = 2, .name = "2ram-2", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(2)},
{.id = 3, .name = "2ram-3", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(3)},
{.id = 4, .name = "2ram-4", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(4)},
{.id = 5, .name = "2ram-5", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(5)},
{.id = 6, .name = "2ram-6", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(6)},
{.id = 7, .name = "2ram-7", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(7)},
{.id = 8, .name = "pcm-in-0", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(8)},
{.id = 9, .name = "pcm-in-1", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(9)},
{.id = 10, .name = "pcm-in-2", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(10)},
{.id = 11, .name = "pcm-in-3", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(11)},
{.id = 12, .name = "mus-in-0", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(12)},
{.id = 13, .name = "mus-in-1", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(13)},
{.id = 14, .name = "mus-in-2", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(14)},
{.id = 15, .name = "mus-in-3", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(15)},
{.id = 16, .name = "mus-in-4", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(16)},
{.id = 17, .name = "mus-in-5", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(17)},
{.id = 18, .name = "mus-in-6", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(18)},
{.id = 19, .name = "mus-in-7", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(19)},
{.id = 20, .name = "micfs-0", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(20)},
{.id = 21, .name = "micfs-1", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(21)},
{.id = 22, .name = "micfs-2", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(22)},
{.id = 23, .name = "micfs-3", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(23)},
{.id = 24, .name = "micfs-4", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(24)},
{.id = 25, .name = "micfs-5", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(25)},
{.id = 26, .name = "micfs-6", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(26)},
{.id = 27, .name = "micfs-7", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(27)},
{.id = 28, .name = "michs-0", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(28)},
{.id = 29, .name = "michs-1", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(29)},
{.id = 30, .name = "michs-2", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(30)},
{.id = 31, .name = "michs-3", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(31)},
{.id = 32, .name = "michs-4", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(32)},
{.id = 33, .name = "michs-5", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(33)},
{.id = 34, .name = "michs-6", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(34)},
{.id = 35, .name = "michs-7", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(35)},
{.id = 36, .name = "binary-in", .fifo_sel_reg = AAI_FIFOCFG_SEL_RX(36)}
};
/* List of AAI internal audio channels TX */
static struct aai_audio_chan_t aai_internal_audio_chans_tx[] = {
{.id = 0, .name = "2ram-0", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(0)},
{.id = 1, .name = "2ram-1", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(1)},
{.id = 2, .name = "2ram-2", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(2)},
{.id = 3, .name = "2ram-3", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(3)},
{.id = 4, .name = "2ram-4", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(4)},
{.id = 5, .name = "2ram-5", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(5)},
{.id = 6, .name = "2ram-6", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(6)},
{.id = 7, .name = "2ram-7", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(7)},
{.id = 8, .name = "pcm-out-0", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(8)},
{.id = 9, .name = "pcm-out-1", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(9)},
{.id = 10, .name = "pcm-out-2", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(10)},
{.id = 11, .name = "pcm-out-3", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(11)},
{.id = 12, .name = "spk-0", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(12)},
{.id = 13, .name = "spk-1", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(13)},
{.id = 14, .name = "spk-2", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(14)},
{.id = 15, .name = "spk-3", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(15)},
{.id = 16, .name = "spk-4", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(16)},
{.id = 17, .name = "spk-5", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(17)},
{.id = 18, .name = "spk-6", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(18)},
{.id = 19, .name = "spk-7", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(19)},
{.id = 20, .name = "voice-0", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(20)},
{.id = 21, .name = "voice-1", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(21)},
{.id = 22, .name = "binary-out", .fifo_sel_reg = AAI_FIFOCFG_SEL_TX(22)}
};
#endif