ALSA: HDA: Virtual master gets wrong dB values on some Realtek codecs
Bug #974090 reported by
David Henningsson
This bug affects 2 people
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
linux (Ubuntu) |
Fix Released
|
Medium
|
David Henningsson |
Bug Description
Please do not triage this bug, it's being used for tracking purposes.
What's happening here is that the wrong node is being used as a template when the vmaster ("Master" alsa mixer control) is created. This patch makes the parser use the mixer nid that the auto-parser has detected instead.
Changed in linux (Ubuntu): | |
assignee: | nobody → David Henningsson (diwic) |
status: | New → In Progress |
summary: |
- ALSA: HDA: some fixed vmaster nodes for realtek are wrong + ALSA: HDA: Virtual master gets wrong dB |
description: | updated |
summary: |
- ALSA: HDA: Virtual master gets wrong dB + ALSA: HDA: Virtual master gets wrong dB values on some Realtek codecs |
Changed in linux (Ubuntu): | |
importance: | Undecided → Medium |
Changed in linux (Ubuntu): | |
status: | In Progress → Fix Committed |
To post a comment you must log in.
With the auto-parser we can choose the dac nid for vmaster from
the DACs we already know, instead of hard-coding it. This is more
future-proof and was actually wrong on one machine.
Signed-off-by: David Henningsson <email address hidden> 6aaad5709d2470d 814a157c86 pci/hda/ patch_realtek. c)
Signed-off-by: Takashi Iwai <email address hidden>
(backported from commit fde48a1f808e2bb
Conflicts:
sound/
BugLink: https:/ /bugs.launchpad .net/bugs/ 974090
---
After a quick chat with apw, I hope this patch can be committed. Feel free to
grab me on IRC if you have more questions - I know I'm late, sorry for that.
I wrote the patch a while back, but it did not make it into 3.2 (it is
in 3.3).
It fixes a volume slider problem for a machine we want to certify. people. canonical. com/~diwic/ temp/alsa- hda-dkms- vmaster- realtek_ 0.1_all. deb
It has been tested on the actual hardware, and I've done a regression test
on one Realtek machine I have here.
Should you wish to do more regression tests, there is a ready-made DKMS package
here:
http://
sound/ pci/hda/ patch_realtek. c | 42 +++++++ +++++++ ++++--- ------- ------- -----
1 files changed, 19 insertions(+), 23 deletions(-)
diff --git a/sound/ pci/hda/ patch_realtek. c b/sound/ pci/hda/ patch_realtek. c pci/hda/ patch_realtek. c pci/hda/ patch_realtek. c fill_extra_ dacs(struct hda_codec *codec, int num_outs,
index 13fa5f2..91e767a 100644
--- a/sound/
+++ b/sound/
@@ -2937,6 +2937,8 @@ static int alc_auto_
static int alc_auto_ fill_multi_ ios(struct hda_codec *codec, for_out_ vol_nid( struct hda_codec *codec,
unsigned int location);
+static hda_nid_t alc_look_
+ hda_nid_t pin, hda_nid_t dac);
/* fill in the dac_nids table from the parsed pin configuration */ fill_dac_ nids(struct hda_codec *codec) fill_dac_ nids(struct hda_codec *codec)
static int alc_auto_
@@ -3037,6 +3039,11 @@ static int alc_auto_
}
}
+ if (cfg->line_ out_pins[ 0]) for_out_ vol_nid( codec, cfg->line_ out_pins[ 0], dac_nids[ 0]);
+ spec->vmaster_nid =
+ alc_look_
+ spec->multiout.
+
return 0;
}
@@ -4000,8 +4007,10 @@ static int patch_alc880(struct hda_codec *codec)
#endif
}
- if (board_config != ALC_MODEL_AUTO) preset( codec, &alc880_ presets[ board_config] );
+ if (board_config != ALC_MODEL_AUTO) {
+ spec->vmaster_nid = 0x0c;
setup_
+ }
if (!spec->no_analog && !spec->adc_nids) { auto_fill_ adc_caps( codec); beep_amp( spec, 0x0b, 0x05, HDA_INPUT);
alc_
@@ -4019,8 +4028,6 @@ static int patch_alc880(struct hda_codec *codec)
set_
}
- spec->vmaster_nid = 0x0c;
-
codec->patch_ops = alc_patch_ops;
if (board_config == ALC_MODEL_AUTO)
spec->init_hook = alc_auto_init_std;
@@ -4129,8 +4136,10 @@ static int patch_alc260(struct hda_codec *codec)
#endif
}
- if (board_config != ALC_MODEL_AUTO) preset( codec, &alc260_ presets[ board_config] );
+ if (board_config != ALC_MODEL_AUTO) {
setup_
+ spec->vmaster_nid = 0x08;
+ }
if (!spec->no_analog && !spec->adc_nids) { auto_fill_ adc_caps( codec);
alc_
@@ -4150,8 +4159,6 @@ static int patch_alc260(struct hda_codec *codec)
alc_apply_ fixup(codec, ALC_FIXUP_ ACT_PROBE) ;
- spec->vmaster_nid = 0x08;
-
codec->patch_ops = alc_patch_ops;
if (board_config == ALC_MODEL_AUTO)
...