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: Mengdong Lin <mengdong.lin@intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
0dd76f36ef
commit
d4b7b13e19
@ -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 @@ out_err:
|
|||||||
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 {
|
|||||||
|
|
||||||
/* 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
|
||||||
|
Loading…
Reference in New Issue
Block a user