Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -42,10 +42,15 @@ int hda_display_power(struct hda_intel *hda, bool enable)

	dev_dbg(&hda->chip.pci->dev, "display power %s\n",
		enable ? "enable" : "disable");
	if (enable)

	if (enable) {
		if (!hda->i915_power_refcount++)
			acomp->ops->get_power(acomp->dev);
	else
	} else {
		WARN_ON(!hda->i915_power_refcount);
		if (!--hda->i915_power_refcount)
			acomp->ops->put_power(acomp->dev);
	}

	return 0;
}
@@ -183,6 +188,11 @@ int hda_i915_init(struct hda_intel *hda)
int hda_i915_exit(struct hda_intel *hda)
{
	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);

+1 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ struct hda_intel {

	/* i915 component interface */
	struct i915_audio_component audio_component;
	int i915_power_refcount;
};

#ifdef CONFIG_SND_HDA_I915