Re: [alsa-devel] hda-intel: no soundcard with current linus' git tree
Hi,
I understand why this happens.
Your sound card has a single "headphone" output, and since it is single, it is called "Master" the stac you have also has a real master volume control, that controls all the DACs, not just the headphones.
I added support for it, thus two controls collided.
The following patch will rename the "Master" output to "Headphone" Note that on the stac 9205/9204, the only one that has no master volume (the volume knob) but has a "Master Volume" amplifier widget, this will probably rename the "Master Volume" to Headphones.
This chip is quite different, thus I think this should be handled in its patch function. I see what I can do later. Meanwhile the rename from "Master" to Headphones" is the only regression.
Best regards, Maxim Levitsky
PS: I reply to this mail with the patch.
From 0824b077b75c19253b45c5a455775c331acd54ee Mon Sep 17 00:00:00 2001 From: Maxim Levitsky maximlevitsky@gmail.com Date: Thu, 18 Oct 2007 03:35:37 +0200 Subject: [PATCH] [HDA] [STAC] Since there is now a master volume control, don't call the headphone output "Master", it isn't strictly correct anyway
Signed-off-by: Maxim Levitsky maximlevitsky@gmail.com --- pci/hda/patch_sigmatel.c | 7 +------ 1 files changed, 1 insertions(+), 6 deletions(-)
diff --git a/pci/hda/patch_sigmatel.c b/pci/hda/patch_sigmatel.c index 6dffa54..7f157a6 100644 --- a/pci/hda/patch_sigmatel.c +++ b/pci/hda/patch_sigmatel.c @@ -1907,12 +1907,7 @@ static int stac92xx_auto_create_hp_ctls(struct hda_codec *codec, return err; } if (spec->multiout.hp_nid) { - const char *pfx; - if (old_num_dacs == spec->multiout.num_dacs) - pfx = "Master"; - else - pfx = "Headphone"; - err = create_controls(spec, pfx, spec->multiout.hp_nid, 3); + err = create_controls(spec, "Headphone", spec->multiout.hp_nid, 3); if (err < 0) return err; }
At Thu, 18 Oct 2007 03:53:08 +0200, Maxim Levitsky wrote:
From 0824b077b75c19253b45c5a455775c331acd54ee Mon Sep 17 00:00:00 2001 From: Maxim Levitsky maximlevitsky@gmail.com Date: Thu, 18 Oct 2007 03:35:37 +0200 Subject: [PATCH] [HDA] [STAC] Since there is now a master volume control, don't call the headphone output "Master", it isn't strictly correct anyway
I thought stac925x has no volume knob, so "Master" should be still applied for this codec?
Takashi
Signed-off-by: Maxim Levitsky maximlevitsky@gmail.com
pci/hda/patch_sigmatel.c | 7 +------ 1 files changed, 1 insertions(+), 6 deletions(-)
diff --git a/pci/hda/patch_sigmatel.c b/pci/hda/patch_sigmatel.c index 6dffa54..7f157a6 100644 --- a/pci/hda/patch_sigmatel.c +++ b/pci/hda/patch_sigmatel.c @@ -1907,12 +1907,7 @@ static int stac92xx_auto_create_hp_ctls(struct hda_codec *codec, return err; } if (spec->multiout.hp_nid) {
const char *pfx;
if (old_num_dacs == spec->multiout.num_dacs)
pfx = "Master";
else
pfx = "Headphone";
err = create_controls(spec, pfx, spec->multiout.hp_nid, 3);
if (err < 0) return err; }err = create_controls(spec, "Headphone", spec->multiout.hp_nid, 3);
-- 1.5.3.4
On Thursday 18 October 2007 07:57:27 Takashi Iwai wrote:
At Thu, 18 Oct 2007 03:53:08 +0200, Maxim Levitsky wrote:
From 0824b077b75c19253b45c5a455775c331acd54ee Mon Sep 17 00:00:00 2001 From: Maxim Levitsky maximlevitsky@gmail.com Date: Thu, 18 Oct 2007 03:35:37 +0200 Subject: [PATCH] [HDA] [STAC] Since there is now a master volume control, don't call the headphone output "Master", it isn't strictly correct anyway
I thought stac925x has no volume knob, so "Master" should be still applied for this codec?
Yes, you are right, but stac925x has only one DAC, and thus if it is connected to any line-out, it will be 'Front', but if it is connected to 'headphones' only, then why not to call it 'Headphone'
STAC 9200 has no volumeknob too, but it is handled seperartly STAC 9202 and 9250 has no volumeknob too, but as I said they have just one DAC again
Best regards, Maxim Levitsky
Takashi
Signed-off-by: Maxim Levitsky maximlevitsky@gmail.com
pci/hda/patch_sigmatel.c | 7 +------ 1 files changed, 1 insertions(+), 6 deletions(-)
diff --git a/pci/hda/patch_sigmatel.c b/pci/hda/patch_sigmatel.c index 6dffa54..7f157a6 100644 --- a/pci/hda/patch_sigmatel.c +++ b/pci/hda/patch_sigmatel.c @@ -1907,12 +1907,7 @@ static int stac92xx_auto_create_hp_ctls(struct hda_codec *codec, return err; } if (spec->multiout.hp_nid) {
const char *pfx;
if (old_num_dacs == spec->multiout.num_dacs)
pfx = "Master";
else
pfx = "Headphone";
err = create_controls(spec, pfx, spec->multiout.hp_nid, 3);
if (err < 0) return err; }err = create_controls(spec, "Headphone", spec->multiout.hp_nid, 3);
-- 1.5.3.4
At Thu, 18 Oct 2007 16:21:59 +0200, Maxim Levitsky wrote:
On Thursday 18 October 2007 07:57:27 Takashi Iwai wrote:
At Thu, 18 Oct 2007 03:53:08 +0200, Maxim Levitsky wrote:
From 0824b077b75c19253b45c5a455775c331acd54ee Mon Sep 17 00:00:00 2001 From: Maxim Levitsky maximlevitsky@gmail.com Date: Thu, 18 Oct 2007 03:35:37 +0200 Subject: [PATCH] [HDA] [STAC] Since there is now a master volume control, don't call the headphone output "Master", it isn't strictly correct anyway
I thought stac925x has no volume knob, so "Master" should be still applied for this codec?
Yes, you are right, but stac925x has only one DAC, and thus if it is connected to any line-out, it will be 'Front', but if it is connected to 'headphones' only, then why not to call it 'Headphone'
The point is that apps usually require a "Master" volume. If it's the single volume control, it's better to call it master for convenience.
STAC 9200 has no volumeknob too, but it is handled seperartly
Yes, 9200 doesn't call stac92xx_auto_create_hp_ctls(), so it's not affected.
STAC 9202 and 9250 has no volumeknob too, but as I said they have just one DAC again
Both are handled as patch_stac925x. That's what I meant. With your patch, there will be no master any more.
So, how about the patch below?
Takashi
diff -r fb9512ce24e0 pci/hda/patch_sigmatel.c --- a/pci/hda/patch_sigmatel.c Thu Oct 18 10:48:43 2007 +0200 +++ b/pci/hda/patch_sigmatel.c Thu Oct 18 16:36:35 2007 +0200 @@ -111,6 +111,7 @@ struct sigmatel_spec { unsigned int alt_switch: 1; unsigned int hp_detect: 1; unsigned int gpio_mute: 1; + unsigned int no_vol_knob :1;
unsigned int gpio_mask, gpio_data;
@@ -1930,7 +1931,8 @@ static int stac92xx_auto_create_hp_ctls( } if (spec->multiout.hp_nid) { const char *pfx; - if (old_num_dacs == spec->multiout.num_dacs) + if (old_num_dacs == spec->multiout.num_dacs && + spec->no_vol_knob) pfx = "Master"; else pfx = "Headphone"; @@ -2487,6 +2489,7 @@ static int patch_stac9200(struct hda_cod codec->spec = spec; spec->num_pins = ARRAY_SIZE(stac9200_pin_nids); spec->pin_nids = stac9200_pin_nids; + spec->no_vol_knob = 1; spec->board_config = snd_hda_check_board_config(codec, STAC_9200_MODELS, stac9200_models, stac9200_cfg_tbl); @@ -2541,6 +2544,7 @@ static int patch_stac925x(struct hda_cod codec->spec = spec; spec->num_pins = ARRAY_SIZE(stac925x_pin_nids); spec->pin_nids = stac925x_pin_nids; + spec->no_vol_knob = 1; spec->board_config = snd_hda_check_board_config(codec, STAC_925x_MODELS, stac925x_models,
On Thursday 18 October 2007 15:49:22 Takashi Iwai wrote:
At Thu, 18 Oct 2007 16:21:59 +0200, Maxim Levitsky wrote:
On Thursday 18 October 2007 07:57:27 Takashi Iwai wrote:
At Thu, 18 Oct 2007 03:53:08 +0200, Maxim Levitsky wrote:
From 0824b077b75c19253b45c5a455775c331acd54ee Mon Sep 17 00:00:00 2001 From: Maxim Levitsky maximlevitsky@gmail.com Date: Thu, 18 Oct 2007 03:35:37 +0200 Subject: [PATCH] [HDA] [STAC] Since there is now a master volume control, don't call the headphone output "Master", it isn't strictly correct anyway
I thought stac925x has no volume knob, so "Master" should be still applied for this codec?
Yes, you are right, but stac925x has only one DAC, and thus if it is connected to any line-out, it will be 'Front', but if it is connected to 'headphones' only, then why not to call it 'Headphone'
The point is that apps usually require a "Master" volume. If it's the single volume control, it's better to call it master for convenience.
And most STACs didn't have one till I added this volumeknob...
STAC 9200 has no volumeknob too, but it is handled seperartly
Yes, 9200 doesn't call stac92xx_auto_create_hp_ctls(), so it's not affected.
STAC 9202 and 9250 has no volumeknob too, but as I said they have just one DAC again
Both are handled as patch_stac925x. That's what I meant. With your patch, there will be no master any more.
So, how about the patch below?
Takashi
diff -r fb9512ce24e0 pci/hda/patch_sigmatel.c --- a/pci/hda/patch_sigmatel.c Thu Oct 18 10:48:43 2007 +0200 +++ b/pci/hda/patch_sigmatel.c Thu Oct 18 16:36:35 2007 +0200 @@ -111,6 +111,7 @@ struct sigmatel_spec { unsigned int alt_switch: 1; unsigned int hp_detect: 1; unsigned int gpio_mute: 1;
unsigned int no_vol_knob :1;
unsigned int gpio_mask, gpio_data;
@@ -1930,7 +1931,8 @@ static int stac92xx_auto_create_hp_ctls( } if (spec->multiout.hp_nid) { const char *pfx;
if (old_num_dacs == spec->multiout.num_dacs)
if (old_num_dacs == spec->multiout.num_dacs &&
else pfx = "Headphone";spec->no_vol_knob) pfx = "Master";
@@ -2487,6 +2489,7 @@ static int patch_stac9200(struct hda_cod codec->spec = spec; spec->num_pins = ARRAY_SIZE(stac9200_pin_nids); spec->pin_nids = stac9200_pin_nids;
- spec->no_vol_knob = 1; spec->board_config = snd_hda_check_board_config(codec, STAC_9200_MODELS, stac9200_models, stac9200_cfg_tbl);
@@ -2541,6 +2544,7 @@ static int patch_stac925x(struct hda_cod codec->spec = spec; spec->num_pins = ARRAY_SIZE(stac925x_pin_nids); spec->pin_nids = stac925x_pin_nids;
- spec->no_vol_knob = 1; spec->board_config = snd_hda_check_board_config(codec, STAC_925x_MODELS, stac925x_models,
Perfect. This will ensure the same behavior, as was without the volumeknob.
Best regards, Maxim Levitsky
At Thu, 18 Oct 2007 17:24:46 +0200, Maxim Levitsky wrote:
On Thursday 18 October 2007 15:49:22 Takashi Iwai wrote:
At Thu, 18 Oct 2007 16:21:59 +0200, Maxim Levitsky wrote:
On Thursday 18 October 2007 07:57:27 Takashi Iwai wrote:
At Thu, 18 Oct 2007 03:53:08 +0200, Maxim Levitsky wrote:
From 0824b077b75c19253b45c5a455775c331acd54ee Mon Sep 17 00:00:00 2001 From: Maxim Levitsky maximlevitsky@gmail.com Date: Thu, 18 Oct 2007 03:35:37 +0200 Subject: [PATCH] [HDA] [STAC] Since there is now a master volume control, don't call the headphone output "Master", it isn't strictly correct anyway
I thought stac925x has no volume knob, so "Master" should be still applied for this codec?
Yes, you are right, but stac925x has only one DAC, and thus if it is connected to any line-out, it will be 'Front', but if it is connected to 'headphones' only, then why not to call it 'Headphone'
The point is that apps usually require a "Master" volume. If it's the single volume control, it's better to call it master for convenience.
And most STACs didn't have one till I added this volumeknob...
Yep, but there were some with master already :)
STAC 9200 has no volumeknob too, but it is handled seperartly
Yes, 9200 doesn't call stac92xx_auto_create_hp_ctls(), so it's not affected.
STAC 9202 and 9250 has no volumeknob too, but as I said they have just one DAC again
Both are handled as patch_stac925x. That's what I meant. With your patch, there will be no master any more.
So, how about the patch below?
Takashi
diff -r fb9512ce24e0 pci/hda/patch_sigmatel.c --- a/pci/hda/patch_sigmatel.c Thu Oct 18 10:48:43 2007 +0200 +++ b/pci/hda/patch_sigmatel.c Thu Oct 18 16:36:35 2007 +0200 @@ -111,6 +111,7 @@ struct sigmatel_spec { unsigned int alt_switch: 1; unsigned int hp_detect: 1; unsigned int gpio_mute: 1;
unsigned int no_vol_knob :1;
unsigned int gpio_mask, gpio_data;
@@ -1930,7 +1931,8 @@ static int stac92xx_auto_create_hp_ctls( } if (spec->multiout.hp_nid) { const char *pfx;
if (old_num_dacs == spec->multiout.num_dacs)
if (old_num_dacs == spec->multiout.num_dacs &&
else pfx = "Headphone";spec->no_vol_knob) pfx = "Master";
@@ -2487,6 +2489,7 @@ static int patch_stac9200(struct hda_cod codec->spec = spec; spec->num_pins = ARRAY_SIZE(stac9200_pin_nids); spec->pin_nids = stac9200_pin_nids;
- spec->no_vol_knob = 1; spec->board_config = snd_hda_check_board_config(codec, STAC_9200_MODELS, stac9200_models, stac9200_cfg_tbl);
@@ -2541,6 +2544,7 @@ static int patch_stac925x(struct hda_cod codec->spec = spec; spec->num_pins = ARRAY_SIZE(stac925x_pin_nids); spec->pin_nids = stac925x_pin_nids;
- spec->no_vol_knob = 1; spec->board_config = snd_hda_check_board_config(codec, STAC_925x_MODELS, stac925x_models,
Perfect. This will ensure the same behavior, as was without the volumeknob.
OK, now I committed to ALSA tree.
Takashi
Takashi Iwai schrieb:
Both are handled as patch_stac925x. That's what I meant. With your patch, there will be no master any more.
So, how about the patch below?
Takashi
diff -r fb9512ce24e0 pci/hda/patch_sigmatel.c --- a/pci/hda/patch_sigmatel.c Thu Oct 18 10:48:43 2007 +0200 +++ b/pci/hda/patch_sigmatel.c Thu Oct 18 16:36:35 2007 +0200 @@ -111,6 +111,7 @@ struct sigmatel_spec { unsigned int alt_switch: 1; unsigned int hp_detect: 1; unsigned int gpio_mute: 1;
unsigned int no_vol_knob :1;
unsigned int gpio_mask, gpio_data;
@@ -1930,7 +1931,8 @@ static int stac92xx_auto_create_hp_ctls( } if (spec->multiout.hp_nid) { const char *pfx;
if (old_num_dacs == spec->multiout.num_dacs)
if (old_num_dacs == spec->multiout.num_dacs &&
else pfx = "Headphone";spec->no_vol_knob) pfx = "Master";
@@ -2487,6 +2489,7 @@ static int patch_stac9200(struct hda_cod codec->spec = spec; spec->num_pins = ARRAY_SIZE(stac9200_pin_nids); spec->pin_nids = stac9200_pin_nids;
- spec->no_vol_knob = 1; spec->board_config = snd_hda_check_board_config(codec, STAC_9200_MODELS, stac9200_models, stac9200_cfg_tbl);
@@ -2541,6 +2544,7 @@ static int patch_stac925x(struct hda_cod codec->spec = spec; spec->num_pins = ARRAY_SIZE(stac925x_pin_nids); spec->pin_nids = stac925x_pin_nids;
- spec->no_vol_knob = 1; spec->board_config = snd_hda_check_board_config(codec, STAC_925x_MODELS, stac925x_models,
Thanks. Soundcard is back and my "multimedia" keys for configuring the master volume are working again with alsa 1.0.15 and above patch.
mfg thomas
participants (3)
-
Maxim Levitsky
-
Takashi Iwai
-
Thomas Meyer