提交 703c759f 编写于 作者: T Takashi Iwai

ALSA: hda - Use common reboot notifier

The very same notifier code is used in both hda_intel.c and
hda_tegra.c.  Move it to the generic code.
Signed-off-by: NTakashi Iwai <tiwai@suse.de>
上级 9a34af4a
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/reboot.h>
#include <sound/core.h> #include <sound/core.h>
#include <sound/initval.h> #include <sound/initval.h>
#include "hda_priv.h" #include "hda_priv.h"
...@@ -1946,5 +1947,30 @@ int azx_init_stream(struct azx *chip) ...@@ -1946,5 +1947,30 @@ int azx_init_stream(struct azx *chip)
} }
EXPORT_SYMBOL_GPL(azx_init_stream); EXPORT_SYMBOL_GPL(azx_init_stream);
/*
* reboot notifier for hang-up problem at power-down
*/
static int azx_halt(struct notifier_block *nb, unsigned long event, void *buf)
{
struct azx *chip = container_of(nb, struct azx, reboot_notifier);
snd_hda_bus_reboot_notify(chip->bus);
azx_stop_chip(chip);
return NOTIFY_OK;
}
void azx_notifier_register(struct azx *chip)
{
chip->reboot_notifier.notifier_call = azx_halt;
register_reboot_notifier(&chip->reboot_notifier);
}
EXPORT_SYMBOL_GPL(azx_notifier_register);
void azx_notifier_unregister(struct azx *chip)
{
if (chip->reboot_notifier.notifier_call)
unregister_reboot_notifier(&chip->reboot_notifier);
}
EXPORT_SYMBOL_GPL(azx_notifier_unregister);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Common HDA driver funcitons"); MODULE_DESCRIPTION("Common HDA driver funcitons");
...@@ -50,4 +50,7 @@ int azx_codec_configure(struct azx *chip); ...@@ -50,4 +50,7 @@ int azx_codec_configure(struct azx *chip);
int azx_mixer_create(struct azx *chip); int azx_mixer_create(struct azx *chip);
int azx_init_stream(struct azx *chip); int azx_init_stream(struct azx *chip);
void azx_notifier_register(struct azx *chip);
void azx_notifier_unregister(struct azx *chip);
#endif /* __SOUND_HDA_CONTROLLER_H */ #endif /* __SOUND_HDA_CONTROLLER_H */
...@@ -44,7 +44,6 @@ ...@@ -44,7 +44,6 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/reboot.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include <linux/clocksource.h> #include <linux/clocksource.h>
...@@ -952,29 +951,6 @@ static const struct dev_pm_ops azx_pm = { ...@@ -952,29 +951,6 @@ static const struct dev_pm_ops azx_pm = {
#endif /* CONFIG_PM */ #endif /* CONFIG_PM */
/*
* reboot notifier for hang-up problem at power-down
*/
static int azx_halt(struct notifier_block *nb, unsigned long event, void *buf)
{
struct azx *chip = container_of(nb, struct azx, reboot_notifier);
snd_hda_bus_reboot_notify(chip->bus);
azx_stop_chip(chip);
return NOTIFY_OK;
}
static void azx_notifier_register(struct azx *chip)
{
chip->reboot_notifier.notifier_call = azx_halt;
register_reboot_notifier(&chip->reboot_notifier);
}
static void azx_notifier_unregister(struct azx *chip)
{
if (chip->reboot_notifier.notifier_call)
unregister_reboot_notifier(&chip->reboot_notifier);
}
static int azx_probe_continue(struct azx *chip); static int azx_probe_continue(struct azx *chip);
#ifdef SUPPORT_VGA_SWITCHEROO #ifdef SUPPORT_VGA_SWITCHEROO
......
...@@ -29,7 +29,6 @@ ...@@ -29,7 +29,6 @@
#include <linux/moduleparam.h> #include <linux/moduleparam.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/of_device.h> #include <linux/of_device.h>
#include <linux/reboot.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/time.h> #include <linux/time.h>
...@@ -294,30 +293,6 @@ static const struct dev_pm_ops hda_tegra_pm = { ...@@ -294,30 +293,6 @@ static const struct dev_pm_ops hda_tegra_pm = {
SET_SYSTEM_SLEEP_PM_OPS(hda_tegra_suspend, hda_tegra_resume) SET_SYSTEM_SLEEP_PM_OPS(hda_tegra_suspend, hda_tegra_resume)
}; };
/*
* reboot notifier for hang-up problem at power-down
*/
static int hda_tegra_halt(struct notifier_block *nb, unsigned long event,
void *buf)
{
struct azx *chip = container_of(nb, struct azx, reboot_notifier);
snd_hda_bus_reboot_notify(chip->bus);
azx_stop_chip(chip);
return NOTIFY_OK;
}
static void hda_tegra_notifier_register(struct azx *chip)
{
chip->reboot_notifier.notifier_call = hda_tegra_halt;
register_reboot_notifier(&chip->reboot_notifier);
}
static void hda_tegra_notifier_unregister(struct azx *chip)
{
if (chip->reboot_notifier.notifier_call)
unregister_reboot_notifier(&chip->reboot_notifier);
}
/* /*
* destructor * destructor
*/ */
...@@ -326,7 +301,7 @@ static int hda_tegra_dev_free(struct snd_device *device) ...@@ -326,7 +301,7 @@ static int hda_tegra_dev_free(struct snd_device *device)
int i; int i;
struct azx *chip = device->device_data; struct azx *chip = device->device_data;
hda_tegra_notifier_unregister(chip); azx_notifier_unregister(chip);
if (chip->initialized) { if (chip->initialized) {
for (i = 0; i < chip->num_streams; i++) for (i = 0; i < chip->num_streams; i++)
...@@ -557,7 +532,7 @@ static int hda_tegra_probe(struct platform_device *pdev) ...@@ -557,7 +532,7 @@ static int hda_tegra_probe(struct platform_device *pdev)
chip->running = 1; chip->running = 1;
power_down_all_codecs(chip); power_down_all_codecs(chip);
hda_tegra_notifier_register(chip); azx_notifier_register(chip);
return 0; return 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册