Timofei V. Bondarenko wrote:
Hi.
Enable capturing of raw 32bit IEC958_SUBFRAME.
The 24-bits PCM data can be obtained using iec958 plugin.
Known problem: captured stream may begin with either left or right
subframe. Since the iec958 plugin doesn't decode preamble it may swap
the channels sometime.
Sorry, i've forgot to attach the patch...
Signed-off-by: Timofei Bondarenko <tim@xxxxxxxxx>
--- alsa-driver-hg20071107/alsa-kernel/pci/cmipci.c 2007-11-01 04:00:07.000000000 +0300
+++ alsa-driver/alsa-kernel/pci/cmipci.c 2007-11-07 14:55:05.000000000 +0300
@@ -1400,6 +1407,11 @@ static int snd_cmipci_capture_spdif_prep
else
snd_cmipci_clear_bit(cm, CM_REG_CHFORMAT, CM_DBLSPDS);
}
+ if (snd_pcm_format_width(substream->runtime->format) > 16)
+ snd_cmipci_set_bit(cm, CM_REG_MISC_CTRL, CM_SPD32SEL);
+ else
+ snd_cmipci_clear_bit(cm, CM_REG_MISC_CTRL, CM_SPD32SEL);
+
spin_unlock_irq(&cm->reg_lock);
return snd_cmipci_pcm_prepare(cm, &cm->channel[CM_CH_CAPT], substream);
@@ -1411,6 +1423,7 @@ static int snd_cmipci_capture_spdif_hw_f
spin_lock_irq(&cm->reg_lock);
snd_cmipci_clear_bit(cm, CM_REG_FUNCTRL1, CM_CAPTURE_SPDF);
+ snd_cmipci_clear_bit(cm, CM_REG_MISC_CTRL, CM_SPD32SEL);
spin_unlock_irq(&cm->reg_lock);
return snd_cmipci_hw_free(subs);
@@ -1562,7 +1575,8 @@ static struct snd_pcm_hardware snd_cmipc
.info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_PAUSE |
SNDRV_PCM_INFO_RESUME | SNDRV_PCM_INFO_MMAP_VALID),
- .formats = SNDRV_PCM_FMTBIT_S16_LE,
+ .formats = SNDRV_PCM_FMTBIT_S16_LE |
+ SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE,
.rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
.rate_min = 44100,
.rate_max = 48000,
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel