blob: 41482a40a9f2f8888fc7b7d98b5fb99100281a1e [file] [log] [blame]
#include "aai.h"
#include "aai_hw.h"
#include "aai_hw_struct.h"
#include "aai_rules.h"
/*
* Static list of audio devices
* - 11 fifo tx
* - 18 fifo rx
* - total internal memory size 4096 * 32bits
*/
struct aai_device_t aai_pcm_devices[] = {
/* music output channels */
{
.name = "music-out-stereo0",
.direction = AAI_TX,
.fifo_size = 0x100,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_music_stereo_tx,
.fifo = {
.chan_nb = AAI_FORMAT_STEREO,
.chan_list = {
&aai_internal_audio_chans_tx[12],
&aai_internal_audio_chans_tx[13]
},
.mode = FIFO_MODE_32,
},
.rules = {RULE_END},
},
{
.name = "music-out-stereo1",
.direction = AAI_TX,
.fifo_size = 0x100,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_music_stereo_tx,
.fifo = {
.chan_nb = AAI_FORMAT_STEREO,
.chan_list = {
&aai_internal_audio_chans_tx[14],
&aai_internal_audio_chans_tx[15]
},
.mode = FIFO_MODE_32,
},
.rules = {RULE_END},
},
{
.name = "music-out-stereo2",
.direction = AAI_TX,
.fifo_size = 0x100,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_music_stereo_tx,
.fifo = {
.chan_nb = AAI_FORMAT_STEREO,
.chan_list = {
&aai_internal_audio_chans_tx[16],
&aai_internal_audio_chans_tx[17]
},
.mode = FIFO_MODE_32,
},
.rules = {RULE_END},
},
{
.name = "music-out-stereo3",
.direction = AAI_TX,
.fifo_size = 0x100,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_music_stereo_tx,
.fifo = {
.chan_nb = AAI_FORMAT_STEREO,
.chan_list = {
&aai_internal_audio_chans_tx[18],
&aai_internal_audio_chans_tx[19]
},
.mode = FIFO_MODE_32,
},
.rules = {RULE_END},
},
/* voice output channels */
{
.name = "voice-out-stereo",
.direction = AAI_TX,
.fifo_size = 0x40,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_voice,
.fifo = {
.chan_nb = AAI_FORMAT_STEREO,
.chan_list = {
&aai_internal_audio_chans_tx[20],
&aai_internal_audio_chans_tx[21]
},
.mode = FIFO_MODE_32,
},
.aai_hw_ops = {
.hw_params = aai_hw_params_voice,
.close = aai_close_voice,
},
},
/* pcm output channels */
{
.name = "pcm0-out",
.direction = AAI_TX,
.fifo_size = 0x40,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_pcm,
.fifo = {
.chan_nb = AAI_FORMAT_MONO,
.chan_list = {
&aai_internal_audio_chans_tx[8],
},
.mode = FIFO_MODE_32,
},
.rules = {RULE_END},
.aai_hw_ops = {
.hw_params = aai_hw_params_pcm0,
.close = aai_close_pcm,
},
},
{
.name = "pcm1-out",
.direction = AAI_TX,
.fifo_size = 0x40,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_pcm,
.fifo = {
.chan_nb = AAI_FORMAT_MONO,
.chan_list = {
&aai_internal_audio_chans_tx[9],
},
.mode = FIFO_MODE_32,
},
.rules = {RULE_END},
.aai_hw_ops = {
.hw_params = aai_hw_params_pcm1,
.close = aai_close_pcm,
},
},
/* music input channels */
{
.name = "music-in-stereo0",
.direction = AAI_RX,
.fifo_size = 0x100,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_music_stereo_rx,
.fifo = {
.chan_nb = AAI_FORMAT_STEREO,
.chan_list = {
&aai_internal_audio_chans_rx[12],
&aai_internal_audio_chans_rx[13]
},
.mode = FIFO_MODE_32,
},
.rules = {RULE_END},
},
{
.name = "music-in-stereo1",
.direction = AAI_RX,
.fifo_size = 0x100,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_music_stereo_rx,
.fifo = {
.chan_nb = AAI_FORMAT_STEREO,
.chan_list = {
&aai_internal_audio_chans_rx[14],
&aai_internal_audio_chans_rx[15]
},
.mode = FIFO_MODE_32,
},
.rules = {RULE_END},
},
{
.name = "music-in-stereo2",
.direction = AAI_RX,
.fifo_size = 0x100,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_music_stereo_rx,
.fifo = {
.chan_nb = AAI_FORMAT_STEREO,
.chan_list = {
&aai_internal_audio_chans_rx[16],
&aai_internal_audio_chans_rx[17]
},
.mode = FIFO_MODE_32,
},
.rules = {RULE_END},
},
{
.name = "music-in-stereo3",
.direction = AAI_RX,
.fifo_size = 0x100,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_music_stereo_rx,
.fifo = {
.chan_nb = AAI_FORMAT_STEREO,
.chan_list = {
&aai_internal_audio_chans_rx[18],
&aai_internal_audio_chans_rx[19]
},
.mode = FIFO_MODE_32,
},
.rules = {RULE_END},
},
/* voice input channels */
{
.name = "mic0-8k",
.direction = AAI_RX,
.fifo_size = 0x20,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_voice,
.fifo = {
.chan_nb = AAI_FORMAT_STEREO,
.chan_list = {
&aai_internal_audio_chans_rx[28],
&aai_internal_audio_chans_rx[29]
},
.mode = FIFO_MODE_32,
},
.rules = {
RULE_VOICEL0_INPUT_8K,
RULE_VOICER0_INPUT_8K,
RULE_END
},
},
{
.name = "mic1-8k",
.direction = AAI_RX,
.fifo_size = 0x20,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_voice,
.fifo = {
.chan_nb = AAI_FORMAT_STEREO,
.chan_list = {
&aai_internal_audio_chans_rx[30],
&aai_internal_audio_chans_rx[31]
},
.mode = FIFO_MODE_32,
},
.rules = {
RULE_VOICEL1_INPUT_8K,
RULE_VOICER1_INPUT_8K,
RULE_END
},
},
{
.name = "mic0-16k",
.direction = AAI_RX,
.fifo_size = 0x20,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_voice,
.fifo = {
.chan_nb = AAI_FORMAT_STEREO,
.chan_list = {
&aai_internal_audio_chans_rx[20],
&aai_internal_audio_chans_rx[21]
},
.mode = FIFO_MODE_32,
},
.rules = {RULE_END},
},
{
.name = "mic1-16k",
.direction = AAI_RX,
.fifo_size = 0x20,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_voice,
.fifo = {
.chan_nb = AAI_FORMAT_STEREO,
.chan_list = {
&aai_internal_audio_chans_rx[22],
&aai_internal_audio_chans_rx[23]
},
.mode = FIFO_MODE_32,
},
.rules = {RULE_END},
},
/* pcm input channels */
{
.name = "pcm0-in",
.direction = AAI_RX,
.fifo_size = 0x40,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_pcm,
.fifo = {
.chan_nb = AAI_FORMAT_MONO,
.chan_list = {
&aai_internal_audio_chans_rx[8],
},
.mode = FIFO_MODE_32,
},
.rules = {RULE_END},
.aai_hw_ops = {
.hw_params = aai_hw_params_pcm0,
.close = aai_close_pcm,
},
},
{
.name = "pcm1-in",
.direction = AAI_RX,
.fifo_size = 0x40,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_pcm,
.fifo = {
.chan_nb = AAI_FORMAT_MONO,
.chan_list = {
&aai_internal_audio_chans_rx[9],
},
.mode = FIFO_MODE_32,
},
.rules = {RULE_END},
.aai_hw_ops = {
.hw_params = aai_hw_params_pcm1,
.close = aai_close_pcm,
},
},
/* spdif channels */
{
.name = "spdif-out",
.direction = AAI_TX,
.fifo_size = 0x200,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_iec958,
.fifo = {
.chan_nb = AAI_FORMAT_MONO,
.chan_list = {
&aai_internal_audio_chans_tx[22],
},
.mode = FIFO_MODE_32,
},
.rules = {RULE_SPDIF_OUT, RULE_END},
},
{
.name = "spdif-in",
.direction = AAI_RX,
.fifo_size = 0x200,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_iec958,
.fifo = {
.chan_nb = AAI_FORMAT_MONO,
.chan_list = {
&aai_internal_audio_chans_rx[36],
},
.mode = FIFO_MODE_32,
},
.rules = {RULE_END},
},
/* music complex output channels */
{
.name = "music-out-octo",
.direction = AAI_TX,
.fifo_size = 0x100,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_music,
.fifo = {
.chan_nb = AAI_FORMAT_OCTO,
.chan_list = {
&aai_internal_audio_chans_tx[12],
&aai_internal_audio_chans_tx[13],
&aai_internal_audio_chans_tx[14],
&aai_internal_audio_chans_tx[15],
&aai_internal_audio_chans_tx[16],
&aai_internal_audio_chans_tx[17],
&aai_internal_audio_chans_tx[18],
&aai_internal_audio_chans_tx[19]
},
.mode = FIFO_MODE_32,
},
.rules = {
RULE_TDM_OUT_OCTO,
RULE_END
},
},
{
.name = "music-out-quad0",
.direction = AAI_TX,
.fifo_size = 0x100,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_music,
.fifo = {
.chan_nb = AAI_FORMAT_QUAD,
.chan_list = {
&aai_internal_audio_chans_tx[12],
&aai_internal_audio_chans_tx[13],
&aai_internal_audio_chans_tx[14],
&aai_internal_audio_chans_tx[15],
},
.mode = FIFO_MODE_32,
},
.rules = {
RULE_TDM_OUT_QUAD,
RULE_END
},
},
{
.name = "music-out-quad1",
.direction = AAI_TX,
.fifo_size = 0x100,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_music,
.fifo = {
.chan_nb = AAI_FORMAT_QUAD,
.chan_list = {
&aai_internal_audio_chans_tx[16],
&aai_internal_audio_chans_tx[17],
&aai_internal_audio_chans_tx[18],
&aai_internal_audio_chans_tx[19],
},
.mode = FIFO_MODE_32,
},
.rules = {
RULE_TDM_OUT_QUAD,
RULE_END
},
},
/* music complex input channels */
{
.name = "music-in-octo",
.direction = AAI_RX,
.fifo_size = 0x100,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_music,
.fifo = {
.chan_nb = AAI_FORMAT_OCTO,
.chan_list = {
&aai_internal_audio_chans_rx[12],
&aai_internal_audio_chans_rx[13],
&aai_internal_audio_chans_rx[14],
&aai_internal_audio_chans_rx[15],
&aai_internal_audio_chans_rx[16],
&aai_internal_audio_chans_rx[17],
&aai_internal_audio_chans_rx[18],
&aai_internal_audio_chans_rx[19]
},
.mode = FIFO_MODE_32,
},
.rules = {
RULE_TDM_IN_OCTO,
RULE_TDM_IN0,
RULE_TDM_IN1,
RULE_TDM_IN2,
RULE_TDM_IN3,
RULE_END
},
},
{
.name = "music-in-quad0",
.direction = AAI_RX,
.fifo_size = 0x100,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_music,
.fifo = {
.chan_nb = AAI_FORMAT_QUAD,
.chan_list = {
&aai_internal_audio_chans_rx[12],
&aai_internal_audio_chans_rx[13],
&aai_internal_audio_chans_rx[14],
&aai_internal_audio_chans_rx[15],
},
.mode = FIFO_MODE_32,
},
.rules = {
RULE_TDM_IN_QUAD,
RULE_TDM_IN0,
RULE_TDM_IN1,
RULE_END
},
},
{
.name = "music-in-quad1",
.direction = AAI_RX,
.fifo_size = 0x100,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_music_stereo_rx,
.fifo = {
.chan_nb = AAI_FORMAT_QUAD,
.chan_list = {
&aai_internal_audio_chans_rx[16],
&aai_internal_audio_chans_rx[17],
&aai_internal_audio_chans_rx[18],
&aai_internal_audio_chans_rx[19],
},
.mode = FIFO_MODE_32,
},
.rules = {
RULE_TDM_IN_QUAD,
RULE_TDM_IN0,
RULE_TDM_IN1,
RULE_END
},
},
/* loopbacks channels */
{
.name = "loopback-8k",
.direction = AAI_RX,
.fifo_size = 0x40,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_voice,
.fifo = {
.chan_nb = AAI_FORMAT_STEREO,
.chan_list = {
&aai_internal_audio_chans_rx[32],
&aai_internal_audio_chans_rx[33]
},
.mode = FIFO_MODE_32,
},
.rules = {
RULE_LOOPBACK_2,
RULE_LOOPBACK2_I2S0,
RULE_VOICEL2_INPUT_8K,
RULE_VOICER2_INPUT_8K,
RULE_END
},
},
{
.name = "loopback-16k",
.direction = AAI_RX,
.fifo_size = 0x40,
.ops = &aai_pcm_ops,
.hw = &aai_pcm_hw_voice,
.fifo = {
.chan_nb = AAI_FORMAT_STEREO,
.chan_list = {
&aai_internal_audio_chans_rx[24],
&aai_internal_audio_chans_rx[25]
},
.mode = FIFO_MODE_32,
},
.rules = {
RULE_LOOPBACK_2,
RULE_LOOPBACK2_I2S0,
RULE_END
},
},
};