ALSA: HDA: Virtual master gets wrong dB values on some Realtek codecs
| 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.
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>
Signed-off-by: Takashi Iwai <email address hidden>
(backported from commit fde48a1f808e2bb
Conflicts:
sound/
BugLink: https:/
---
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.
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/
1 files changed, 19 insertions(+), 23 deletions(-)
diff --git a/sound/
index 13fa5f2..91e767a 100644
--- a/sound/
+++ b/sound/
@@ -2937,6 +2937,8 @@ static int alc_auto_
static int alc_auto_
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 */
static int alc_auto_
@@ -3037,6 +3039,11 @@ static int alc_auto_
}
}
+ if (cfg->line_
+ 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)
+ if (board_config != ALC_MODEL_AUTO) {
+ spec->vmaster_nid = 0x0c;
setup_
+ }
if (!spec->no_analog && !spec->adc_nids) {
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)
+ if (board_config != ALC_MODEL_AUTO) {
setup_
+ spec->vmaster_nid = 0x08;
+ }
if (!spec->no_analog && !spec->adc_nids) {
alc_
@@ -4150,8 +4159,6 @@ static int patch_alc260(struct hda_codec *codec)
alc_apply_
- spec->vmaster_nid = 0x08;
-
codec->patch_ops = alc_patch_ops;
if (board_config == ALC_MODEL_AUTO)
...
+ ALSA: HDA: Virtual master gets wrong dB
+ ALSA: HDA: Virtual master gets wrong dB values on some Realtek codecs
On Thu, 2012年04月05日 at 13:56 +0200, David Henningsson wrote:
> 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>
> Signed-off-by: Takashi Iwai <email address hidden>
> (backported from commit fde48a1f808e2bb
> Conflicts:
> sound/pci/
>
> BugLink: https:/
Patch is upstream and tested.
Acked-by: Leann Ogasawara <email address hidden>
> ---
>
> 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.
> 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/
> 1 files changed, 19 insertions(+), 23 deletions(-)
>
> diff --git a/sound/
> index 13fa5f2..91e767a 100644
> --- a/sound/
> +++ b/sound/
> @@ -2937,6 +2937,8 @@ static int alc_auto_
>
> static int alc_auto_
> 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 */
> static int alc_auto_
> @@ -3037,6 +3039,11 @@ static int alc_auto_
> }
> }
>
> + if (cfg->line_
> + 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)
> + if (board_config != ALC_MODEL_AUTO) {
> + spec->vmaster_nid = 0x0c;
> setup_preset(codec, &alc880_
> + }
>
> if (!spec->no_analog && !spec->adc_nids) {
> alc_auto_
> @@ -4019,8 +4028,6 @@ static int patch_alc880(struct hda_codec *codec)
> set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT);
> }
>
> - 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)
> + if (board_config != ALC_MODEL_AUTO) {
> setup_preset(codec, &alc260_
> + spec->vmaster_nid = 0x08;...
On Thu, Apr 05, 2012 at 01:56:28PM +0200, David Henningsson wrote:
> 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>
> Signed-off-by: Takashi Iwai <email address hidden>
> (backported from commit fde48a1f808e2bb
> Conflicts:
> sound/pci/
>
> BugLink: https:/
> ---
>
> 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.
> 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/
> 1 files changed, 19 insertions(+), 23 deletions(-)
>
> diff --git a/sound/
> index 13fa5f2..91e767a 100644
> --- a/sound/
> +++ b/sound/
> @@ -2937,6 +2937,8 @@ static int alc_auto_
>
> static int alc_auto_
> 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 */
> static int alc_auto_
> @@ -3037,6 +3039,11 @@ static int alc_auto_
> }
> }
>
> + if (cfg->line_
> + 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)
> + if (board_config != ALC_MODEL_AUTO) {
> + spec->vmaster_nid = 0x0c;
> setup_preset(codec, &alc880_
> + }
>
> if (!spec->no_analog && !spec->adc_nids) {
> alc_auto_
> @@ -4019,8 +4028,6 @@ static int patch_alc880(struct hda_codec *codec)
> set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT);
> }
>
> - 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)
> + if (board_config != ALC_MODEL_AUTO) {
> setup_preset(codec, &alc260_
> + spec->vmaster_nid = 0x08;
> + }
>
> if (!spec->no_analog && !spec->adc_nids) {
> alc_auto_
Applied to Precise master-next.
Thanks,
Leann
On Thu, 2012年04月05日 at 13:56 +0200, David Henningsson wrote:
> 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>
> Signed-off-by: Takashi Iwai <email address hidden>
> (backported from commit fde48a1f808e2bb
> Conflicts:
> sound/pci/
>
> BugLink: https:/
> ---
>
> 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.
> 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/
> 1 files changed, 19 insertions(+), 23 deletions(-)
>
> diff --git a/sound/
> index 13fa5f2..91e767a 100644
> --- a/sound/
> +++ b/sound/
> @@ -2937,6 +2937,8 @@ static int alc_auto_
>
> static int alc_auto_
> 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 */
> static int alc_auto_
> @@ -3037,6 +3039,11 @@ static int alc_auto_
> }
> }
>
> + if (cfg->line_
> + 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)
> + if (board_config != ALC_MODEL_AUTO) {
> + spec->vmaster_nid = 0x0c;
> setup_preset(codec, &alc880_
> + }
>
> if (!spec->no_analog && !spec->adc_nids) {
> alc_auto_
> @@ -4019,8 +4028,6 @@ static int patch_alc880(struct hda_codec *codec)
> set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT);
> }
>
> - 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)
> + if (board_config != ALC_MODEL_AUTO) {
> setup_preset(codec, &alc260_
> + spec->vmaster_nid = 0x08;
> + }
>
> if (!spec->no_analog && !spe...
This bug was fixed in the package linux - 3.2.0-23.36
---------------
linux (3.2.0-23.36) precise-proposed; urgency=low
[ Andy Whitcroft ]
* tools/hv: add basic Makefile
- LP: #977246
* tools/hv: add basic manual pages
- LP: #977246
* Hyper-V KVP daemon -- add to the tools package
- LP: #977246
[ David Henningsson ]
* SAUCE: (drop after 3.3) ALSA: HDA: Remove quirk for Gigabyte
GA-H61M-S2PV
- LP: #948360
[ Leann Ogasawara ]
* d-i: Add dm-mirror and dm-raid to md-modules
- LP: #919281
[ Tim Gardner ]
* [Config] Fix invalid linux-headers link
- LP: #974403
* Remove headers asm symlink entirely
- LP: #974403
[ Upstream Kernel Changes ]
* Revert "x86/ioapic: Add register level checks to detect bogus io-apic
entries"
- LP: #974982
* ALSA: HDA: Realtek: Take vmaster dac from multiout dac list
- LP: #974090
* kexec: remove KMSG_DUMP_KEXEC
- LP: #944772
* kmsg_dump: don't run on non-error paths by default
- LP: #944772
* pstore: Introduce get_reason_str() to pstore
- LP: #944772
-- Leann Ogasawara <email address hidden> 2012年4月10日 08:16:09 -0700
They kill with wars, alcohol and abortions. Save us!!!