linux/sound/pci
Hector Martin 3b315d70b0 ALSA: hda - Acer Aspire 8930G support
Short story: this laptop has 5.1 built-in speakers which you *really*
want to use (the not-so-"sub" woofer is what makes the audio above
average for a laptop), so 6-channel support is important (plus a decent
asound.conf to upmix stereo). It also has the 3 typical jacks that ought
to have a selectable mode. And it's based on ALC889, which sucks.

Rationale/explanations:

The const_channel_count stuff was added because, for a laptop like this,
you always have 6 channels available (internal speakers) but still need
to set the mode for the 3 external jacks. Therefore, the device always
needs to be in 6-channel mode but there still needs to be a mixer
control for the jack mode. You could use line/mic-in at the same time as
the 6 internal speakers, for example. You might be tempted to make it
even smarter by dynamically switching the max channel count when
headphones are plugged in (therefore muting the internal speakers and
reducing the physical channel count to the jack channel mode), but as a
user I consider this to be harmful because I want the audio to blow up
to 6 channels / upmixed as soon as I unplug the headphones, and having
opened the device while in 2-channel mode would prevent this from
working (and always making 6-channel mode available doesn't do any harm).

The hardware needs EAPD turned on and the DACs routed to the internal
speaker pins, so the patch adds those verbs.

The ALC889 CLFE and subsequent (side/aux, here unused) DACs do NOT work
by default, at least here. I wasted much time trying to talk to
Realtek/pshou about this, but they just kept sending me useless updates
to patch_realtek.c that did nothing relevant. In the end I gave up and
brute forced the issue by trying to flip every bit in the proprietary
coefficient registers, and eventually found the two magic registers that
need to be cleared to enable all DACs. I have only heard Acer users
complain, but that might be because ALC889 is pretty new and using 5.1
(and noticing the missing center/lfe channels) might not be that common.
If this is a generalized issue with all ALC889 systems then those verbs
should probably be moved to a common verb array.

The internal mic is untested and probably doesn't work.

These settings will probably work for other Acer Gemstone laptops with
the same 5.1 speaker config. When identified, those should be added to
the PCI subsystem ID list.

Signed-off-by: Hector Martin <hector@marcansoft.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-06-02 10:58:37 +02:00
..
ac97 Merge branch 'topic/intel8x0' into for-linus 2009-03-24 00:36:13 +01:00
ali5451 dma-mapping: replace all DMA_31BIT_MASK macro with DMA_BIT_MASK(31) 2009-04-07 08:31:11 -07:00
au88x0 dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
aw2 dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
ca0106 dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
cs46xx Merge branch 'topic/misc' into for-linus 2009-03-24 00:35:50 +01:00
cs5535audio dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
echoaudio Merge branch 'topic/echoaudio' into for-linus 2009-03-24 00:36:07 +01:00
emu10k1 ALSA: sound/pci: use memdup_user() 2009-04-14 12:39:46 +02:00
hda ALSA: hda - Acer Aspire 8930G support 2009-06-02 10:58:37 +02:00
ice1712 dma-mapping: replace all DMA_28BIT_MASK macro with DMA_BIT_MASK(28) 2009-04-07 08:31:12 -07:00
korg1212 ALSA: Convert to snd_card_create() in sound/pci/* 2009-01-12 15:20:55 +01:00
mixart dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
nm256 ALSA: Convert to snd_card_create() in sound/pci/* 2009-01-12 15:20:55 +01:00
oxygen Merge branch 'topic/snd_card_new-err' into for-linus 2009-03-24 00:35:35 +01:00
pcxhr dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
riptide ALSA: Convert to snd_card_create() in sound/pci/* 2009-01-12 15:20:55 +01:00
rme9652 Merge branch 'topic/hwdep-cleanup' into for-linus 2009-03-24 00:35:41 +01:00
trident dma-mapping: replace all DMA_30BIT_MASK macro with DMA_BIT_MASK(30) 2009-04-07 08:31:11 -07:00
vx222 Merge branch 'topic/misc' into for-linus 2009-03-24 00:35:50 +01:00
ymfpci Merge branch 'topic/misc' into for-linus 2009-03-24 00:35:50 +01:00
ad1889.c dma-mapping: replace all DMA_32BIT_MASK macro with DMA_BIT_MASK(32) 2009-04-07 08:31:11 -07:00
ad1889.h
ak4531_codec.c ALSA: Fix missing KERN_* prefix to printk in sound/pci 2009-02-05 16:11:31 +01:00
als300.c dma-mapping: replace all DMA_28BIT_MASK macro with DMA_BIT_MASK(28) 2009-04-07 08:31:12 -07:00
als4000.c dma-mapping: replace all DMA_24BIT_MASK macro with DMA_BIT_MASK(24) 2009-04-07 08:31:12 -07:00
atiixp_modem.c ALSA: Convert to snd_card_create() in sound/pci/* 2009-01-12 15:20:55 +01:00
atiixp.c ALSA: Convert to snd_card_create() in sound/pci/* 2009-01-12 15:20:55 +01:00
azt3328.c dma-mapping: replace all DMA_24BIT_MASK macro with DMA_BIT_MASK(24) 2009-04-07 08:31:12 -07:00
azt3328.h ALSA: sound/pci/azt3328.h: no variables for enums 2008-07-27 10:22:25 +02:00
bt87x.c ALSA: Convert to snd_card_create() in sound/pci/* 2009-01-12 15:20:55 +01:00
cmipci.c ALSA: Convert to snd_card_create() in sound/pci/* 2009-01-12 15:20:55 +01:00
cs4281.c Merge branch 'topic/misc' into for-linus 2009-03-24 00:35:50 +01:00
cs5530.c ALSA: Convert to snd_card_create() in sound/pci/* 2009-01-12 15:20:55 +01:00
ens1370.c Merge branch 'topic/misc' into for-linus 2009-03-24 00:35:50 +01:00
ens1371.c
es1938.c dma-mapping: replace all DMA_24BIT_MASK macro with DMA_BIT_MASK(24) 2009-04-07 08:31:12 -07:00
es1968.c dma-mapping: replace all DMA_28BIT_MASK macro with DMA_BIT_MASK(28) 2009-04-07 08:31:12 -07:00
fm801.c ALSA: Convert to snd_card_create() in sound/pci/* 2009-01-12 15:20:55 +01:00
intel8x0.c [ALSA] intel8x0: add one retry to the ac97_clock measurement routine 2009-04-15 10:16:24 +02:00
intel8x0m.c Merge branch 'topic/intel8x0' into for-linus 2009-03-24 00:36:13 +01:00
Kconfig V4L/DVB (10771): tea575x-tuner: convert it to V4L2 API 2009-03-30 12:43:02 -03:00
maestro3.c dma-mapping: replace all DMA_28BIT_MASK macro with DMA_BIT_MASK(28) 2009-04-07 08:31:12 -07:00
Makefile [ALSA] Make ak4531 local to ens1370 driver 2008-05-30 09:26:09 +02:00
rme32.c ALSA: Convert to snd_card_create() in sound/pci/* 2009-01-12 15:20:55 +01:00
rme96.c ALSA: Convert to snd_card_create() in sound/pci/* 2009-01-12 15:20:55 +01:00
sis7019.c dma-mapping: replace all DMA_30BIT_MASK macro with DMA_BIT_MASK(30) 2009-04-07 08:31:11 -07:00
sis7019.h [ALSA] sis7019: support the SiS 7019 Audio Accelerator 2008-01-31 17:29:36 +01:00
sonicvibes.c dma-mapping: replace all DMA_24BIT_MASK macro with DMA_BIT_MASK(24) 2009-04-07 08:31:12 -07:00
via82xx_modem.c Merge branch 'topic/misc' into for-linus 2009-03-24 00:35:50 +01:00
via82xx.c Merge branch 'topic/misc' into for-linus 2009-03-24 00:35:50 +01:00