Message ID | 1413310179-29570-1-git-send-email-sarvatt@ubuntu.com |
---|---|
State | New |
Headers | show |
Ack. This will enable a DKMS solution for an Ubuntu customer, so needs to get into Trusty asap. It (or a future better API) is likely to land in 3.13-stable in the future. -Kamal On Tue, 2014-10-14 at 14:09 -0400, Robert Hooker wrote: > From: Jani Nikula <jani.nikula@intel.com> > > For Haswell and Broadwell, if the display power well has been disabled, > the display audio controller divider values EM4 M VALUE and EM5 N VALUE > will have been lost. The CDCLK frequency is required for reprogramming them > to generate 24MHz HD-A link BCLK. So provide a private interface for the > audio driver to query CDCLK. > > This is a stopgap solution until a more generic interface between audio > and display drivers has been implemented. > > Signed-off-by: Jani Nikula <jani.nikula@intel.com> > Reviewed-by: Damien Lespiau <damien.lespiau@intel.com> > Signed-off-by: Mengdong Lin <mengdong.lin@intel.com> > Cc: <stable@vger.kernel.org> > Signed-off-by: Takashi Iwai <tiwai@suse.de> > (backported from commit c149dcb5c60bfea8871f16dfcc0690255eeb825f) > BugLink: http://bugs.launchpad.net/bugs/1381168 > Signed-off-by: David Henningsson <david.henningsson@canonical.com> > --- > drivers/gpu/drm/i915/intel_pm.c | 21 +++++++++++++++++++++ > include/drm/i915_powerwell.h | 1 + > 2 files changed, 22 insertions(+) > > diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c > index 1218c44..7b6bf30 100644 > --- a/drivers/gpu/drm/i915/intel_pm.c > +++ b/drivers/gpu/drm/i915/intel_pm.c > @@ -5882,6 +5882,27 @@ void i915_release_power_well(void) > } > EXPORT_SYMBOL_GPL(i915_release_power_well); > > +/* > + * Private interface for the audio driver to get CDCLK in kHz. > + * > + * Caller must request power well using i915_request_power_well() prior to > + * making the call. > + */ > +int i915_get_cdclk_freq(void) > +{ > + struct drm_i915_private *dev_priv; > + > + if (!hsw_pwr) > + return -ENODEV; > + > + dev_priv = container_of(hsw_pwr, struct drm_i915_private, > + power_domains); > + > + return intel_ddi_get_cdclk_freq(dev_priv); > +} > +EXPORT_SYMBOL_GPL(i915_get_cdclk_freq); > + > + > int intel_power_domains_init(struct drm_device *dev) > { > struct drm_i915_private *dev_priv = dev->dev_private; > diff --git a/include/drm/i915_powerwell.h b/include/drm/i915_powerwell.h > index cfdc884..d715ca1 100644 > --- a/include/drm/i915_powerwell.h > +++ b/include/drm/i915_powerwell.h > @@ -32,5 +32,6 @@ > /* For use by hda_i915 driver */ > extern void i915_request_power_well(void); > extern void i915_release_power_well(void); > +extern int i915_get_cdclk_freq(void); > > #endif /* _I915_POWERWELL_H_ */ > -- > 1.9.1 > >
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c index 1218c44..7b6bf30 100644 --- a/drivers/gpu/drm/i915/intel_pm.c +++ b/drivers/gpu/drm/i915/intel_pm.c @@ -5882,6 +5882,27 @@ void i915_release_power_well(void) } EXPORT_SYMBOL_GPL(i915_release_power_well); +/* + * Private interface for the audio driver to get CDCLK in kHz. + * + * Caller must request power well using i915_request_power_well() prior to + * making the call. + */ +int i915_get_cdclk_freq(void) +{ + struct drm_i915_private *dev_priv; + + if (!hsw_pwr) + return -ENODEV; + + dev_priv = container_of(hsw_pwr, struct drm_i915_private, + power_domains); + + return intel_ddi_get_cdclk_freq(dev_priv); +} +EXPORT_SYMBOL_GPL(i915_get_cdclk_freq); + + int intel_power_domains_init(struct drm_device *dev) { struct drm_i915_private *dev_priv = dev->dev_private; diff --git a/include/drm/i915_powerwell.h b/include/drm/i915_powerwell.h index cfdc884..d715ca1 100644 --- a/include/drm/i915_powerwell.h +++ b/include/drm/i915_powerwell.h @@ -32,5 +32,6 @@ /* For use by hda_i915 driver */ extern void i915_request_power_well(void); extern void i915_release_power_well(void); +extern int i915_get_cdclk_freq(void); #endif /* _I915_POWERWELL_H_ */