diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/pci/hda/hda_codec.c | 16 | ||||
-rw-r--r-- | sound/pci/hda/hda_codec.h | 2 | ||||
-rw-r--r-- | sound/pci/hda/hda_intel.c | 6 |
3 files changed, 13 insertions, 11 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index f84874445b50..052a898a63ba 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c | |||
@@ -33,14 +33,6 @@ | |||
33 | #include <sound/hda_hwdep.h> | 33 | #include <sound/hda_hwdep.h> |
34 | #include "hda_patch.h" /* codec presets */ | 34 | #include "hda_patch.h" /* codec presets */ |
35 | 35 | ||
36 | #ifdef CONFIG_SND_HDA_POWER_SAVE | ||
37 | /* define this option here to hide as static */ | ||
38 | static int power_save = CONFIG_SND_HDA_POWER_SAVE_DEFAULT; | ||
39 | module_param(power_save, int, 0644); | ||
40 | MODULE_PARM_DESC(power_save, "Automatic power-saving timeout " | ||
41 | "(in second, 0 = disable)."); | ||
42 | #endif | ||
43 | |||
44 | /* | 36 | /* |
45 | * vendor / preset table | 37 | * vendor / preset table |
46 | */ | 38 | */ |
@@ -519,6 +511,7 @@ int __devinit snd_hda_bus_new(struct snd_card *card, | |||
519 | bus->private_data = temp->private_data; | 511 | bus->private_data = temp->private_data; |
520 | bus->pci = temp->pci; | 512 | bus->pci = temp->pci; |
521 | bus->modelname = temp->modelname; | 513 | bus->modelname = temp->modelname; |
514 | bus->power_save = temp->power_save; | ||
522 | bus->ops = temp->ops; | 515 | bus->ops = temp->ops; |
523 | 516 | ||
524 | mutex_init(&bus->cmd_mutex); | 517 | mutex_init(&bus->cmd_mutex); |
@@ -2694,15 +2687,18 @@ void snd_hda_power_up(struct hda_codec *codec) | |||
2694 | codec->power_transition = 0; | 2687 | codec->power_transition = 0; |
2695 | } | 2688 | } |
2696 | 2689 | ||
2690 | #define power_save(codec) \ | ||
2691 | ((codec)->bus->power_save ? *(codec)->bus->power_save : 0) | ||
2692 | |||
2697 | void snd_hda_power_down(struct hda_codec *codec) | 2693 | void snd_hda_power_down(struct hda_codec *codec) |
2698 | { | 2694 | { |
2699 | --codec->power_count; | 2695 | --codec->power_count; |
2700 | if (!codec->power_on || codec->power_count || codec->power_transition) | 2696 | if (!codec->power_on || codec->power_count || codec->power_transition) |
2701 | return; | 2697 | return; |
2702 | if (power_save) { | 2698 | if (power_save(codec)) { |
2703 | codec->power_transition = 1; /* avoid reentrance */ | 2699 | codec->power_transition = 1; /* avoid reentrance */ |
2704 | schedule_delayed_work(&codec->power_work, | 2700 | schedule_delayed_work(&codec->power_work, |
2705 | msecs_to_jiffies(power_save * 1000)); | 2701 | msecs_to_jiffies(power_save(codec) * 1000)); |
2706 | } | 2702 | } |
2707 | } | 2703 | } |
2708 | 2704 | ||
diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h index e1077df5e882..4034625b5997 100644 --- a/sound/pci/hda/hda_codec.h +++ b/sound/pci/hda/hda_codec.h | |||
@@ -585,6 +585,7 @@ struct hda_bus_template { | |||
585 | void *private_data; | 585 | void *private_data; |
586 | struct pci_dev *pci; | 586 | struct pci_dev *pci; |
587 | const char *modelname; | 587 | const char *modelname; |
588 | int *power_save; | ||
588 | struct hda_bus_ops ops; | 589 | struct hda_bus_ops ops; |
589 | }; | 590 | }; |
590 | 591 | ||
@@ -601,6 +602,7 @@ struct hda_bus { | |||
601 | void *private_data; | 602 | void *private_data; |
602 | struct pci_dev *pci; | 603 | struct pci_dev *pci; |
603 | const char *modelname; | 604 | const char *modelname; |
605 | int *power_save; | ||
604 | struct hda_bus_ops ops; | 606 | struct hda_bus_ops ops; |
605 | 607 | ||
606 | /* codec linked list */ | 608 | /* codec linked list */ |
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index f13ec4c71f8a..f17ccd513350 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -83,7 +83,10 @@ module_param(enable_msi, int, 0444); | |||
83 | MODULE_PARM_DESC(enable_msi, "Enable Message Signaled Interrupt (MSI)"); | 83 | MODULE_PARM_DESC(enable_msi, "Enable Message Signaled Interrupt (MSI)"); |
84 | 84 | ||
85 | #ifdef CONFIG_SND_HDA_POWER_SAVE | 85 | #ifdef CONFIG_SND_HDA_POWER_SAVE |
86 | /* power_save option is defined in hda_codec.c */ | 86 | static int power_save = CONFIG_SND_HDA_POWER_SAVE_DEFAULT; |
87 | module_param(power_save, int, 0644); | ||
88 | MODULE_PARM_DESC(power_save, "Automatic power-saving timeout " | ||
89 | "(in second, 0 = disable)."); | ||
87 | 90 | ||
88 | /* reset the HD-audio controller in power save mode. | 91 | /* reset the HD-audio controller in power save mode. |
89 | * this may give more power-saving, but will take longer time to | 92 | * this may give more power-saving, but will take longer time to |
@@ -1230,6 +1233,7 @@ static int __devinit azx_codec_create(struct azx *chip, const char *model, | |||
1230 | memset(&bus_temp, 0, sizeof(bus_temp)); | 1233 | memset(&bus_temp, 0, sizeof(bus_temp)); |
1231 | bus_temp.private_data = chip; | 1234 | bus_temp.private_data = chip; |
1232 | bus_temp.modelname = model; | 1235 | bus_temp.modelname = model; |
1236 | bus_temp.power_save = &power_save; | ||
1233 | bus_temp.pci = chip->pci; | 1237 | bus_temp.pci = chip->pci; |
1234 | bus_temp.ops.command = azx_send_cmd; | 1238 | bus_temp.ops.command = azx_send_cmd; |
1235 | bus_temp.ops.get_response = azx_get_response; | 1239 | bus_temp.ops.get_response = azx_get_response; |