On Thu, 2012-04-26 at 12:27 +0100, Mark Brown wrote:
On Wed, Apr 25, 2012 at 10:07:49PM +0200, Christoph Fritz wrote:
# amixer sset "Mic Select Source" 'Mic 2' Simple mixer control 'Mic Select Source',0 Capabilities: enum Items: 'Mic 1' 'Differential' 'Mic 2' 'Stereo' Item0: 'Mic 1'
Nothing springing to mind here, can you see logging for the register writes?
I added some printks into ac97_write() "sound/soc/codecs/wm9712.c" and when I do for example change "Item: Mic Boost [dB gain: 20.00] " I get this:
write eh 8000 [6808] write eh 8000 [6888]
but when I try to change "Mic Select Source" or "Item: Differential Source", nothing happens here.
And in "sound/soc/codecs/wm9712.c":
static const struct soc_enum wm9712_enum[] = { SOC_ENUM_SINGLE(AC97_PCI_SVID, 14, 4, wm9712_alc_select), SOC_ENUM_SINGLE(AC97_VIDEO, 12, 4, wm9712_alc_mux), SOC_ENUM_SINGLE(AC97_AUX, 9, 4, wm9712_out3_src), SOC_ENUM_SINGLE(AC97_AUX, 8, 2, wm9712_spk_src), SOC_ENUM_SINGLE(AC97_REC_SEL, 12, 4, wm9712_rec_adc), SOC_ENUM_SINGLE(AC97_MASTER_TONE, 15, 2, wm9712_base), SOC_ENUM_DOUBLE(AC97_REC_GAIN, 14, 6, 2, wm9712_rec_gain), SOC_ENUM_SINGLE(AC97_MIC, 5, 4, wm9712_mic), SOC_ENUM_SINGLE(AC97_REC_SEL, 8, 8, wm9712_rec_sel), SOC_ENUM_SINGLE(AC97_REC_SEL, 0, 8, wm9712_rec_sel), SOC_ENUM_SINGLE(AC97_PCI_SVID, 5, 2, wm9712_ng_type), SOC_ENUM_SINGLE(0x5c, 8, 2, wm9712_diff_sel), };
Why is wm9712_enum[0] never used?
Is "SOC_ENUM_SINGLE(0x5c, 8, 2, wm9712_diff_sel)," correct? Because of the ">> 1" shift in ac97_write() ?
Thanks, -- Christoph
When I tested arecord for line-in, the "Capture Slide" in alsamixer
was
wrongly inverted. in sound/soc/codecs/wm9712.c: SOC_DOUBLE("Capture Volume", AC97_REC_GAIN, 8, 0, 63, 1), should get: SOC_DOUBLE("Capture Volume", AC97_REC_GAIN, 8, 0, 63, 0), If you want I can send a patch in.
Yes, please. In general this is always a good thing to do if you spot an error in the code.
Since patch "ASoC: Sync initial widget state with hardware" (commitid: b66a70d5e9929f3b0df5a7177bba75652d2f4c3e) the mic capture
doesn't
work. The MICBIAS bit from the "Power Management" Register are alway
1 (disabled).
So that the captering works the active status must be set to 1, at
the right time.
That this works the stream name must be set.
This analysis seems a bit confused - how does changing the initial
state
affect the dynamic changes at runtime?
#define SND_SOC_DAPM_MICBIAS(wname, wreg, wshift, winvert) \ -{ .id = snd_soc_dapm_micbias, .name = wname, .reg = wreg, .shift =
wshift, \
+{ .id = snd_soc_dapm_micbias, .name = wname, .sname = \
- "Mic Bias HiFi Capture", .reg = wreg, .shift = wshift, \
This isn't right, the mic bias clearly shouldn't be associated with a stream as you can do capture without microphone (eg, from a line
input)
and you can have a bypass path with no capture.