[Intel-gfx] [PATCH-V3 1/2] drm/i915/audio: add codec wakeup override enabled/disable callback

Jani Nikula jani.nikula at intel.com
Mon May 4 00:49:15 PDT 2015


On Mon, 04 May 2015, "Lu, Han" <han.lu at intel.com> wrote:
> Hi Takashi,
>
> Our target is to apply the patches into intel-drm-nightly tree, It
> will be great if you can help merge the patches into your
> tree. However I get a negative test result on BYT platform auto test,
> I'll confirm if it's caused by my patches, so please do not merge now
> and I'll give you feedback ASAP. Thanks.

The automated test failure looks like noise from the test system, can be
ignored.

> Is it OK to merge both patches onto Takashi's tree? In case you may
> would like to merge the patches also, I'm not sure if there will be
> conflict or something...

I think it's okay to merge through Takashi's tree.

However drm-intel-nightly (a mashup of all our branches and some others)
currently doesn't incorporate Takashi's for-next branch because of
[1]. We can add it back once that gets resolved.

BR,
Jani.


[1] http://mid.gmane.org/87fv7i9bgu.fsf@intel.com



>
> BR,
> Han Lu
>
>> -----Original Message-----
>> From: Takashi Iwai [mailto:tiwai at suse.de]
>> Sent: Thursday, April 30, 2015 10:21 PM
>> To: Lu, Han
>> Cc: Vetter, Daniel; Nikula, Jani; Yang, Libin; Lin, Mengdong; intel-
>> gfx at lists.freedesktop.org
>> Subject: Re: [PATCH-V3 1/2] drm/i915/audio: add codec wakeup override
>> enabled/disable callback
>> 
>> At Wed, 29 Apr 2015 17:49:25 +0800,
>> han.lu at intel.com wrote:
>> >
>> > From: "Lu, Han" <han.lu at intel.com>
>> >
>> > Add support for enabling codec wakeup override signal to allow
>> > re-enumeration of the controller on SKL after resume from low power
>> state.
>> >
>> > v3 by Jani: Simplify to only support toggling the appropriate chicken bit.
>> >
>> > Signed-off-by: Lu, Han <han.lu at intel.com>
>> > Signed-off-by: Jani Nikula <jani.nikula at intel.com>
>> 
>> The patch series look OK to me.
>> But who will merge these?
>> 
>> I can merge these two patches to a branch so that it can be shared between
>> sound and i915 trees.  Of course, only when I get ack about the first patch.
>> 
>> 
>> thanks,
>> 
>> Takashi
>> 
>> >
>> > diff --git a/drivers/gpu/drm/i915/i915_reg.h
>> > b/drivers/gpu/drm/i915/i915_reg.h index 36805b6..435c372 100644
>> > --- a/drivers/gpu/drm/i915/i915_reg.h
>> > +++ b/drivers/gpu/drm/i915/i915_reg.h
>> > @@ -6881,6 +6881,9 @@ enum skl_disp_power_wells {
>> >  #define   AUDIO_CP_READY(trans)		((1 << 1) << ((trans) * 4))
>> >  #define   AUDIO_ELD_VALID(trans)	((1 << 0) << ((trans) * 4))
>> >
>> > +#define HSW_AUD_CHICKENBIT			0x65f10
>> > +#define   SKL_AUD_CODEC_WAKE_SIGNAL		(1 << 15)
>> > +
>> >  /* HSW Power Wells */
>> >  #define HSW_PWR_WELL_BIOS			0x45400 /* CTL1 */
>> >  #define HSW_PWR_WELL_DRIVER			0x45404 /* CTL2 */
>> > diff --git a/drivers/gpu/drm/i915/intel_audio.c
>> > b/drivers/gpu/drm/i915/intel_audio.c
>> > index f72e93a..ceb2328 100644
>> > --- a/drivers/gpu/drm/i915/intel_audio.c
>> > +++ b/drivers/gpu/drm/i915/intel_audio.c
>> > @@ -474,6 +474,32 @@ static void
>> i915_audio_component_put_power(struct device *dev)
>> >  	intel_display_power_put(dev_to_i915(dev),
>> POWER_DOMAIN_AUDIO);  }
>> >
>> > +static void i915_audio_component_codec_wake_override(struct device
>> *dev,
>> > +						     bool enable)
>> > +{
>> > +	struct drm_i915_private *dev_priv = dev_to_i915(dev);
>> > +	u32 tmp;
>> > +
>> > +	if (!IS_SKYLAKE(dev_priv))
>> > +		return;
>> > +
>> > +	/*
>> > +	 * Enable/disable generating the codec wake signal, overriding the
>> > +	 * internal logic to generate the codec wake to controller.
>> > +	 */
>> > +	tmp = I915_READ(HSW_AUD_CHICKENBIT);
>> > +	tmp &= ~SKL_AUD_CODEC_WAKE_SIGNAL;
>> > +	I915_WRITE(HSW_AUD_CHICKENBIT, tmp);
>> > +	usleep_range(1000, 1500);
>> > +
>> > +	if (enable) {
>> > +		tmp = I915_READ(HSW_AUD_CHICKENBIT);
>> > +		tmp |= SKL_AUD_CODEC_WAKE_SIGNAL;
>> > +		I915_WRITE(HSW_AUD_CHICKENBIT, tmp);
>> > +		usleep_range(1000, 1500);
>> > +	}
>> > +}
>> > +
>> >  /* Get CDCLK in kHz  */
>> >  static int i915_audio_component_get_cdclk_freq(struct device *dev)  {
>> > @@ -495,6 +521,7 @@ static const struct i915_audio_component_ops
>> i915_audio_component_ops = {
>> >  	.owner		= THIS_MODULE,
>> >  	.get_power	= i915_audio_component_get_power,
>> >  	.put_power	= i915_audio_component_put_power,
>> > +	.codec_wake_override =
>> i915_audio_component_codec_wake_override,
>> >  	.get_cdclk_freq	= i915_audio_component_get_cdclk_freq,
>> >  };
>> >
>> > diff --git a/include/drm/i915_component.h
>> > b/include/drm/i915_component.h index 3e2f22e..c9a8b64 100644
>> > --- a/include/drm/i915_component.h
>> > +++ b/include/drm/i915_component.h
>> > @@ -31,6 +31,7 @@ struct i915_audio_component {
>> >  		struct module *owner;
>> >  		void (*get_power)(struct device *);
>> >  		void (*put_power)(struct device *);
>> > +		void (*codec_wake_override)(struct device *, bool enable);
>> >  		int (*get_cdclk_freq)(struct device *);
>> >  	} *ops;
>> >  };
>> > --
>> > 1.9.1
>> >

-- 
Jani Nikula, Intel Open Source Technology Center


More information about the Intel-gfx mailing list