intel_sst: MRST can only do mono recording
authorWu Fengguang <wfg@linux.intel.com>
Tue, 3 May 2011 16:35:19 +0000 (17:35 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 10 May 2011 19:58:43 +0000 (12:58 -0700)
Fix bug

$ arecord -Dplughw -c2
Recording WAVE 'stdin' : Unsigned 8 bit, Rate 8000 Hz, Stereo
arecord: set_params:1116: Unable to install hw params:
ACCESS:  RW_INTERLEAVED
FORMAT:  U8
SUBFORMAT:  STD
SAMPLE_BITS: 8
FRAME_BITS: 16
CHANNELS: 2
[...]

Root cause is, the driver is reporting 2-channel capture capability
that is not supported by the MRST hardware. So the plughw plugin
end up requesting 2-channel capture which fails.

Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/intel_sst/intelmid.c

index 61ef4a69216feedafb4e3a213ad92c421f9441f2..0b9b1b64c9c4c006646757ed0e51691986a51040 100644 (file)
@@ -335,6 +335,13 @@ static int snd_intelmad_open(struct snd_pcm_substream *substream,
        runtime = substream->runtime;
        /* set the runtime hw parameter with local snd_pcm_hardware struct */
        runtime->hw = snd_intelmad_stream;
+       if (intelmaddata->cpu_id == CPU_CHIP_LINCROFT) {
+               /*
+                * MRST firmware currently denies stereo recording requests.
+                */
+               if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
+                       runtime->hw.channels_max = 1;
+       }
        if (intelmaddata->cpu_id == CPU_CHIP_PENWELL) {
                runtime->hw = snd_intelmad_stream;
                runtime->hw.rates = SNDRV_PCM_RATE_48000;