[ALSA] emu10k1 - EMU 1212 with 16 capture channels
* adding 8 more 32-bit capture channels (total of 16) for emu1010 cards * adding some code comments and card details description Signed-off-by: Pavel Hofman <dustin@seznam.cz> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
This commit is contained in:
@@ -1233,24 +1233,26 @@ static int snd_emu10k1_capture_efx_open(struct snd_pcm_substream *substream)
|
||||
runtime->hw.rate_min = runtime->hw.rate_max = 48000;
|
||||
spin_lock_irq(&emu->reg_lock);
|
||||
if (emu->card_capabilities->emu1010) {
|
||||
/* TODO
|
||||
/* Nb. of channels has been increased to 16 */
|
||||
/* TODO
|
||||
* SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE
|
||||
* SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 |
|
||||
* SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 |
|
||||
* SNDRV_PCM_RATE_176400 | SNDRV_PCM_RATE_192000
|
||||
* rate_min = 44100,
|
||||
* rate_max = 192000,
|
||||
* channels_min = 8,
|
||||
* channels_max = 8,
|
||||
* channels_min = 16,
|
||||
* channels_max = 16,
|
||||
* Need to add mixer control to fix sample rate
|
||||
*
|
||||
* There are 16 mono channels of 16bits each.
|
||||
* There are 32 mono channels of 16bits each.
|
||||
* 24bit Audio uses 2x channels over 16bit
|
||||
* 96kHz uses 2x channels over 48kHz
|
||||
* 192kHz uses 4x channels over 48kHz
|
||||
* So, for 48kHz 24bit, one has 8 channels
|
||||
* for 96kHz 24bit, one has 4 channels
|
||||
* for 192kHz 24bit, one has 2 channels
|
||||
* So, for 48kHz 24bit, one has 16 channels
|
||||
* for 96kHz 24bit, one has 8 channels
|
||||
* for 192kHz 24bit, one has 4 channels
|
||||
*
|
||||
*/
|
||||
#if 1
|
||||
switch (emu->emu1010.internal_clock) {
|
||||
@@ -1258,13 +1260,15 @@ static int snd_emu10k1_capture_efx_open(struct snd_pcm_substream *substream)
|
||||
/* For 44.1kHz */
|
||||
runtime->hw.rates = SNDRV_PCM_RATE_44100;
|
||||
runtime->hw.rate_min = runtime->hw.rate_max = 44100;
|
||||
runtime->hw.channels_min = runtime->hw.channels_max = 8;
|
||||
runtime->hw.channels_min =
|
||||
runtime->hw.channels_max = 16;
|
||||
break;
|
||||
case 1:
|
||||
/* For 48kHz */
|
||||
runtime->hw.rates = SNDRV_PCM_RATE_48000;
|
||||
runtime->hw.rate_min = runtime->hw.rate_max = 48000;
|
||||
runtime->hw.channels_min = runtime->hw.channels_max = 8;
|
||||
runtime->hw.channels_min =
|
||||
runtime->hw.channels_max = 16;
|
||||
break;
|
||||
};
|
||||
#endif
|
||||
@@ -1282,7 +1286,7 @@ static int snd_emu10k1_capture_efx_open(struct snd_pcm_substream *substream)
|
||||
#endif
|
||||
runtime->hw.formats = SNDRV_PCM_FMTBIT_S32_LE;
|
||||
/* efx_voices_mask[0] is expected to be zero
|
||||
* efx_voices_mask[1] is expected to have 16bits set
|
||||
* efx_voices_mask[1] is expected to have 32bits set
|
||||
*/
|
||||
} else {
|
||||
runtime->hw.channels_min = runtime->hw.channels_max = 0;
|
||||
@@ -1787,11 +1791,24 @@ int __devinit snd_emu10k1_pcm_efx(struct snd_emu10k1 * emu, int device, struct s
|
||||
/* emu->efx_voices_mask[0] = FXWC_DEFAULTROUTE_C | FXWC_DEFAULTROUTE_A; */
|
||||
if (emu->audigy) {
|
||||
emu->efx_voices_mask[0] = 0;
|
||||
emu->efx_voices_mask[1] = 0xffff;
|
||||
if (emu->card_capabilities->emu1010)
|
||||
/* Pavel Hofman - 32 voices will be used for
|
||||
* capture (write mode) -
|
||||
* each bit = corresponding voice
|
||||
*/
|
||||
emu->efx_voices_mask[1] = 0xffffffff;
|
||||
else
|
||||
emu->efx_voices_mask[1] = 0xffff;
|
||||
} else {
|
||||
emu->efx_voices_mask[0] = 0xffff0000;
|
||||
emu->efx_voices_mask[1] = 0;
|
||||
}
|
||||
/* For emu1010, the control has to set 32 upper bits (voices)
|
||||
* out of the 64 bits (voices) to true for the 16-channels capture
|
||||
* to work correctly. Correct A_FXWC2 initial value (0xffffffff)
|
||||
* is already defined but the snd_emu10k1_pcm_efx_voices_mask
|
||||
* control can override this register's value.
|
||||
*/
|
||||
kctl = snd_ctl_new1(&snd_emu10k1_pcm_efx_voices_mask, emu);
|
||||
if (!kctl)
|
||||
return -ENOMEM;
|
||||
|
Reference in New Issue
Block a user