ALSA: ctxfi: Implement channel maps
Assign the multi-channel map to front PCM, and other channel map to each other channel PCM. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
f49921b894
commit
8d50cdc1f5
1 changed files with 50 additions and 0 deletions
|
@ -395,12 +395,38 @@ static struct snd_pcm_ops ct_pcm_capture_ops = {
|
|||
.page = snd_pcm_sgbuf_ops_page,
|
||||
};
|
||||
|
||||
static const struct snd_pcm_chmap_elem surround_map[] = {
|
||||
{ .channels = 1,
|
||||
.map = { SNDRV_CHMAP_RC } },
|
||||
{ .channels = 2,
|
||||
.map = { SNDRV_CHMAP_RL, SNDRV_CHMAP_RR } },
|
||||
{ }
|
||||
};
|
||||
|
||||
static const struct snd_pcm_chmap_elem clfe_map[] = {
|
||||
{ .channels = 1,
|
||||
.map = { SNDRV_CHMAP_FC } },
|
||||
{ .channels = 2,
|
||||
.map = { SNDRV_CHMAP_FC, SNDRV_CHMAP_LFE } },
|
||||
{ }
|
||||
};
|
||||
|
||||
static const struct snd_pcm_chmap_elem side_map[] = {
|
||||
{ .channels = 1,
|
||||
.map = { SNDRV_CHMAP_RC } },
|
||||
{ .channels = 2,
|
||||
.map = { SNDRV_CHMAP_SL, SNDRV_CHMAP_SR } },
|
||||
{ }
|
||||
};
|
||||
|
||||
/* Create ALSA pcm device */
|
||||
int ct_alsa_pcm_create(struct ct_atc *atc,
|
||||
enum CTALSADEVS device,
|
||||
const char *device_name)
|
||||
{
|
||||
struct snd_pcm *pcm;
|
||||
const struct snd_pcm_chmap_elem *map;
|
||||
int chs;
|
||||
int err;
|
||||
int playback_count, capture_count;
|
||||
|
||||
|
@ -427,6 +453,30 @@ int ct_alsa_pcm_create(struct ct_atc *atc,
|
|||
snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG,
|
||||
snd_dma_pci_data(atc->pci), 128*1024, 128*1024);
|
||||
|
||||
chs = 2;
|
||||
switch (device) {
|
||||
case FRONT:
|
||||
chs = 8;
|
||||
map = snd_pcm_std_chmaps;
|
||||
break;
|
||||
case SURROUND:
|
||||
map = surround_map;
|
||||
break;
|
||||
case CLFE:
|
||||
map = clfe_map;
|
||||
break;
|
||||
case SIDE:
|
||||
map = side_map;
|
||||
break;
|
||||
default:
|
||||
map = snd_pcm_std_chmaps;
|
||||
break;
|
||||
}
|
||||
err = snd_pcm_add_chmap_ctls(pcm, SNDRV_PCM_STREAM_PLAYBACK, map, chs,
|
||||
0, NULL);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
atc->pcms[device] = pcm;
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue