diff options
author | Takashi Iwai <tiwai@suse.de> | 2005-07-29 05:54:32 -0400 |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2005-08-30 02:43:09 -0400 |
commit | cb8e2f83851ff17b1b361644e82420a923fbc318 (patch) | |
tree | 09eafd6c0b6f9e7a156d33a919265fdac2bd9502 /sound/pci/hda/hda_codec.c | |
parent | 3998b70fd0ab40a276147a0f55816d383fcbeb54 (diff) |
[ALSA] hda-codec - Fix reordering of surround channels
HDA Codec driver
- Fixed the reordering of surround channels.
Originally reported by Nicolas GRAZIANO <nicolas.graziano@wanadoo.fr>.
- Show the selected ssid when debug option is set.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/hda/hda_codec.c')
-rw-r--r-- | sound/pci/hda/hda_codec.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index e2cf02387289..d3ac7530ec89 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c | |||
@@ -1541,8 +1541,11 @@ int snd_hda_check_board_config(struct hda_codec *codec, const struct hda_board_c | |||
1541 | for (c = tbl; c->modelname || c->pci_subvendor; c++) { | 1541 | for (c = tbl; c->modelname || c->pci_subvendor; c++) { |
1542 | if (c->pci_subvendor == subsystem_vendor && | 1542 | if (c->pci_subvendor == subsystem_vendor && |
1543 | (! c->pci_subdevice /* all match */|| | 1543 | (! c->pci_subdevice /* all match */|| |
1544 | (c->pci_subdevice == subsystem_device))) | 1544 | (c->pci_subdevice == subsystem_device))) { |
1545 | snd_printdd(KERN_INFO "hda_codec: PCI %x:%x, codec config %d is selected\n", | ||
1546 | subsystem_vendor, subsystem_device, c->config); | ||
1545 | return c->config; | 1547 | return c->config; |
1548 | } | ||
1546 | } | 1549 | } |
1547 | } | 1550 | } |
1548 | return -1; | 1551 | return -1; |
@@ -1803,11 +1806,25 @@ int snd_hda_parse_pin_def_config(struct hda_codec *codec, struct auto_pin_cfg *c | |||
1803 | cfg->line_out_pins[j] = nid; | 1806 | cfg->line_out_pins[j] = nid; |
1804 | } | 1807 | } |
1805 | 1808 | ||
1806 | /* Swap surround and CLFE: the association order is front/CLFE/surr/back */ | 1809 | /* Reorder the surround channels |
1807 | if (cfg->line_outs >= 3) { | 1810 | * ALSA sequence is front/surr/clfe/side |
1811 | * HDA sequence is: | ||
1812 | * 4-ch: front/surr => OK as it is | ||
1813 | * 6-ch: front/clfe/surr | ||
1814 | * 8-ch: front/clfe/side/surr | ||
1815 | */ | ||
1816 | switch (cfg->line_outs) { | ||
1817 | case 3: | ||
1808 | nid = cfg->line_out_pins[1]; | 1818 | nid = cfg->line_out_pins[1]; |
1809 | cfg->line_out_pins[1] = cfg->line_out_pins[2]; | 1819 | cfg->line_out_pins[1] = cfg->line_out_pins[2]; |
1810 | cfg->line_out_pins[2] = nid; | 1820 | cfg->line_out_pins[2] = nid; |
1821 | break; | ||
1822 | case 4: | ||
1823 | nid = cfg->line_out_pins[1]; | ||
1824 | cfg->line_out_pins[1] = cfg->line_out_pins[3]; | ||
1825 | cfg->line_out_pins[3] = cfg->line_out_pins[2]; | ||
1826 | cfg->line_out_pins[2] = nid; | ||
1827 | break; | ||
1811 | } | 1828 | } |
1812 | 1829 | ||
1813 | return 0; | 1830 | return 0; |