Commit d4b7b13e authored by Mengdong Lin's avatar Mengdong Lin Committed by Takashi Iwai

ALSA: hda - implement a refcount for i915 power well switch

This is to check the refcount of audio driver and reduce calling to i915.
Signed-off-by: default avatarMengdong Lin <mengdong.lin@intel.com>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 0dd76f36
...@@ -42,10 +42,15 @@ int hda_display_power(struct hda_intel *hda, bool enable) ...@@ -42,10 +42,15 @@ int hda_display_power(struct hda_intel *hda, bool enable)
dev_dbg(&hda->chip.pci->dev, "display power %s\n", dev_dbg(&hda->chip.pci->dev, "display power %s\n",
enable ? "enable" : "disable"); enable ? "enable" : "disable");
if (enable)
acomp->ops->get_power(acomp->dev); if (enable) {
else if (!hda->i915_power_refcount++)
acomp->ops->put_power(acomp->dev); acomp->ops->get_power(acomp->dev);
} else {
WARN_ON(!hda->i915_power_refcount);
if (!--hda->i915_power_refcount)
acomp->ops->put_power(acomp->dev);
}
return 0; return 0;
} }
...@@ -183,6 +188,11 @@ int hda_i915_init(struct hda_intel *hda) ...@@ -183,6 +188,11 @@ int hda_i915_init(struct hda_intel *hda)
int hda_i915_exit(struct hda_intel *hda) int hda_i915_exit(struct hda_intel *hda)
{ {
struct device *dev = &hda->chip.pci->dev; struct device *dev = &hda->chip.pci->dev;
struct i915_audio_component *acomp = &hda->audio_component;
WARN_ON(hda->i915_power_refcount);
if (hda->i915_power_refcount > 0 && acomp->ops)
acomp->ops->put_power(acomp->dev);
component_master_del(dev, &hda_component_master_ops); component_master_del(dev, &hda_component_master_ops);
......
...@@ -46,6 +46,7 @@ struct hda_intel { ...@@ -46,6 +46,7 @@ struct hda_intel {
/* i915 component interface */ /* i915 component interface */
struct i915_audio_component audio_component; struct i915_audio_component audio_component;
int i915_power_refcount;
}; };
#ifdef CONFIG_SND_HDA_I915 #ifdef CONFIG_SND_HDA_I915
......
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