[alsa-devel] [PATCH v2 3/3] ALSA: hda - implement a refcount for i915 power well switch
Lin, Mengdong
mengdong.lin at intel.com
Tue Apr 28 17:09:23 CEST 2015
> -----Original Message-----
> From: Takashi Iwai [mailto:tiwai at suse.de]
> Sent: Tuesday, April 28, 2015 9:01 PM
> > This is to check the refcount of audio driver and reduce calling to i915.
>
> This has to be implemented before patch 1 & 2, I suppose.
You're right. I'll change the patch order.
> But, you don't mention about the new mutex at all. Why do you need it?
I'll remove the mutex.
Actually we need not this mutex for legacy HD-A at all. I'm not sure about the new SKL driver and so add a mutex.
But since the HW power dependency is same no matter which driver is used on SKL, we could assume the new driver will also request/release power in probe and codec runtime PM ops.
Thanks
Mengdong
>
> Takashi
>
> >
> > Signed-off-by: Mengdong Lin <mengdong.lin at intel.com>
> >
> > diff --git a/sound/pci/hda/hda_i915.c b/sound/pci/hda/hda_i915.c index
> > 52a85d8..e831691 100644
> > --- a/sound/pci/hda/hda_i915.c
> > +++ b/sound/pci/hda/hda_i915.c
> > @@ -42,11 +42,16 @@ 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)
> > - acomp->ops->get_power(acomp->dev);
> > - else
> > - acomp->ops->put_power(acomp->dev);
> > -
> > + mutex_lock(&hda->display_power.lock);
> > + if (enable) {
> > + if (!hda->display_power.use_count++)
> > + acomp->ops->get_power(acomp->dev);
> > + } else {
> > + WARN_ON(!hda->display_power.use_count);
> > + if (!--hda->display_power.use_count)
> > + acomp->ops->put_power(acomp->dev);
> > + }
> > + mutex_unlock(&hda->display_power.lock);
> > return 0;
> > }
> >
> > @@ -171,6 +176,8 @@ int hda_i915_init(struct hda_intel *hda)
> >
> > dev_dbg(dev, "bound to i915 component master\n");
> >
> > + mutex_init(&hda->display_power.lock);
> > +
> > return 0;
> > out_master_del:
> > component_master_del(dev, &hda_component_master_ops); diff --git
> > a/sound/pci/hda/hda_intel.h b/sound/pci/hda/hda_intel.h index
> > 2069898..3ca000a 100644
> > --- a/sound/pci/hda/hda_intel.h
> > +++ b/sound/pci/hda/hda_intel.h
> > @@ -19,6 +19,11 @@
> > #include <drm/i915_component.h>
> > #include "hda_controller.h"
> >
> > +struct i915_display_power {
> > + struct mutex lock;
> > + int use_count;
> > +};
> > +
> > struct hda_intel {
> > struct azx chip;
> >
> > @@ -46,6 +51,7 @@ struct hda_intel {
> >
> > /* i915 component interface */
> > struct i915_audio_component audio_component;
> > + struct i915_display_power display_power;
> > };
> >
> > #ifdef CONFIG_SND_HDA_I915
> > --
> > 1.9.1
> >
More information about the Alsa-devel
mailing list