Commit 2f0eaad9 authored by Takashi Iwai's avatar Takashi Iwai

ALSA: hda - Fix bogus codec address check for mixer name assignment

The recent commit [7fbe824a: ALSA: hda - Update mixer name for the
lower codec address] tried to improve the mixer chip name assignment
in the order of codec address.  However, this fix was utterly bogus;
it checks the field set in each codec, thus this value is reset at
each codec creation, of course.  For really handling this priority,
the assignment has to be remembered in the common place, namely in
hda_bus, instead of hda_codec.

Fixes: 7fbe824a ('ALSA: hda - Update mixer name for the lower codec address')
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 72409705
...@@ -62,11 +62,11 @@ int snd_hda_codec_set_name(struct hda_codec *codec, const char *name) ...@@ -62,11 +62,11 @@ int snd_hda_codec_set_name(struct hda_codec *codec, const char *name)
/* update the mixer name */ /* update the mixer name */
if (!*codec->card->mixername || if (!*codec->card->mixername ||
codec->mixer_assigned >= codec->core.addr) { codec->bus->mixer_assigned >= codec->core.addr) {
snprintf(codec->card->mixername, snprintf(codec->card->mixername,
sizeof(codec->card->mixername), "%s %s", sizeof(codec->card->mixername), "%s %s",
codec->core.vendor_name, codec->core.chip_name); codec->core.vendor_name, codec->core.chip_name);
codec->mixer_assigned = codec->core.addr; codec->bus->mixer_assigned = codec->core.addr;
} }
return 0; return 0;
......
...@@ -851,7 +851,6 @@ int snd_hda_codec_new(struct hda_bus *bus, struct snd_card *card, ...@@ -851,7 +851,6 @@ int snd_hda_codec_new(struct hda_bus *bus, struct snd_card *card,
INIT_DELAYED_WORK(&codec->jackpoll_work, hda_jackpoll_work); INIT_DELAYED_WORK(&codec->jackpoll_work, hda_jackpoll_work);
codec->depop_delay = -1; codec->depop_delay = -1;
codec->fixup_id = HDA_FIXUP_ID_NOT_SET; codec->fixup_id = HDA_FIXUP_ID_NOT_SET;
codec->mixer_assigned = -1;
#ifdef CONFIG_PM #ifdef CONFIG_PM
codec->power_jiffies = jiffies; codec->power_jiffies = jiffies;
......
...@@ -69,6 +69,7 @@ struct hda_bus { ...@@ -69,6 +69,7 @@ struct hda_bus {
unsigned int no_response_fallback:1; /* don't fallback at RIRB error */ unsigned int no_response_fallback:1; /* don't fallback at RIRB error */
int primary_dig_out_type; /* primary digital out PCM type */ int primary_dig_out_type; /* primary digital out PCM type */
unsigned int mixer_assigned; /* codec addr for mixer name */
}; };
/* from hdac_bus to hda_bus */ /* from hdac_bus to hda_bus */
...@@ -257,7 +258,6 @@ struct hda_codec { ...@@ -257,7 +258,6 @@ struct hda_codec {
unsigned long power_off_acct; unsigned long power_off_acct;
unsigned long power_jiffies; unsigned long power_jiffies;
#endif #endif
unsigned int mixer_assigned;
/* filter the requested power state per nid */ /* filter the requested power state per nid */
unsigned int (*power_filter)(struct hda_codec *codec, hda_nid_t nid, unsigned int (*power_filter)(struct hda_codec *codec, hda_nid_t nid,
......
...@@ -1045,6 +1045,7 @@ int azx_bus_init(struct azx *chip, const char *model, ...@@ -1045,6 +1045,7 @@ int azx_bus_init(struct azx *chip, const char *model,
mutex_init(&bus->prepare_mutex); mutex_init(&bus->prepare_mutex);
bus->pci = chip->pci; bus->pci = chip->pci;
bus->modelname = model; bus->modelname = model;
bus->mixer_assigned = -1;
bus->core.snoop = azx_snoop(chip); bus->core.snoop = azx_snoop(chip);
if (chip->get_position[0] != azx_get_pos_lpib || if (chip->get_position[0] != azx_get_pos_lpib ||
chip->get_position[1] != azx_get_pos_lpib) chip->get_position[1] != azx_get_pos_lpib)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment