mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 19:56:18 +00:00
ALSA: hda - Add reboot notifier to each codec
Add reboot notifier to each codec so that it can do some workarounds needed for reboot. So far, patch_sigmatel.c calls its shutup routine for avoiding noises at reboot on some HP machines. References: Novell bnc#544779 http://bugzilla.novell.com/show_bug.cgi?id=544779 Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
167eae5a17
commit
fb8d1a344d
4 changed files with 21 additions and 0 deletions
|
@ -3404,6 +3404,23 @@ static void cleanup_dig_out_stream(struct hda_codec *codec, hda_nid_t nid)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* call each reboot notifier */
|
||||||
|
void snd_hda_bus_reboot_notify(struct hda_bus *bus)
|
||||||
|
{
|
||||||
|
struct hda_codec *codec;
|
||||||
|
|
||||||
|
if (!bus)
|
||||||
|
return;
|
||||||
|
list_for_each_entry(codec, &bus->codec_list, list) {
|
||||||
|
#ifdef CONFIG_SND_HDA_POWER_SAVE
|
||||||
|
if (!codec->power_on)
|
||||||
|
continue;
|
||||||
|
#endif
|
||||||
|
if (codec->patch_ops.reboot_notify)
|
||||||
|
codec->patch_ops.reboot_notify(codec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* open the digital out in the exclusive mode
|
* open the digital out in the exclusive mode
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -674,6 +674,7 @@ struct hda_codec_ops {
|
||||||
#ifdef CONFIG_SND_HDA_POWER_SAVE
|
#ifdef CONFIG_SND_HDA_POWER_SAVE
|
||||||
int (*check_power_status)(struct hda_codec *codec, hda_nid_t nid);
|
int (*check_power_status)(struct hda_codec *codec, hda_nid_t nid);
|
||||||
#endif
|
#endif
|
||||||
|
void (*reboot_notify)(struct hda_codec *codec);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* record for amp information cache */
|
/* record for amp information cache */
|
||||||
|
@ -910,6 +911,7 @@ int snd_hda_is_supported_format(struct hda_codec *codec, hda_nid_t nid,
|
||||||
* Misc
|
* Misc
|
||||||
*/
|
*/
|
||||||
void snd_hda_get_codec_name(struct hda_codec *codec, char *name, int namelen);
|
void snd_hda_get_codec_name(struct hda_codec *codec, char *name, int namelen);
|
||||||
|
void snd_hda_bus_reboot_notify(struct hda_bus *bus);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* power management
|
* power management
|
||||||
|
|
|
@ -2150,6 +2150,7 @@ static int azx_resume(struct pci_dev *pci)
|
||||||
static int azx_halt(struct notifier_block *nb, unsigned long event, void *buf)
|
static int azx_halt(struct notifier_block *nb, unsigned long event, void *buf)
|
||||||
{
|
{
|
||||||
struct azx *chip = container_of(nb, struct azx, reboot_notifier);
|
struct azx *chip = container_of(nb, struct azx, reboot_notifier);
|
||||||
|
snd_hda_bus_reboot_notify(chip->bus);
|
||||||
azx_stop_chip(chip);
|
azx_stop_chip(chip);
|
||||||
return NOTIFY_OK;
|
return NOTIFY_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4831,6 +4831,7 @@ static struct hda_codec_ops stac92xx_patch_ops = {
|
||||||
.suspend = stac92xx_suspend,
|
.suspend = stac92xx_suspend,
|
||||||
.resume = stac92xx_resume,
|
.resume = stac92xx_resume,
|
||||||
#endif
|
#endif
|
||||||
|
.reboot_notify = stac92xx_shutup,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int patch_stac9200(struct hda_codec *codec)
|
static int patch_stac9200(struct hda_codec *codec)
|
||||||
|
|
Loading…
Reference in a new issue