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

Commit 2a5b95b4 authored by Abhay Kumar's avatar Abhay Kumar Committed by Jani Nikula
Browse files

drm/i915/audio: set minimum CD clock to twice the BCLK



In GLK when the device boots with only 1366x768 panel without audio, HDA
codec doesn't come up. In this case, the CDCLK is less than twice the
BCLK. Even though audio isn't being enabled, having a too low CDCLK
leads to audio probe failing altogether.

Require CDCLK to be at least twice the BLCK regardless of audio. This is
a minimal fix to improve things. Unfortunately, this a) leads to too
high CDCLK being used when audio is not used, and b) is still not enough
to fix audio probe when no outputs are connected at probe time.

The proper fix would be to increase CDCLK dynamically from the audio
component hooks.

v2:
    - Address comment (Jani)
    - New design approach
v3: - Typo fix on top of v1

v4 by Jani: rewrite commit message, add comment in code

Cc: stable@vger.kernel.org
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Dhinakaran Pandiyan <dhinakaran.pandiyan@gmail.com>
Cc: Wenkai Du <wenkai.du@intel.com>
Reviewed-by: default avatarWenkai Du <wenkai.du@intel.com>
Tested-by: default avatarWenkai Du <wenkai.du@intel.com>
Acked-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102937


Signed-off-by: default avatarAbhay Kumar <abhay.kumar@intel.com>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180418103707.14645-1-jani.nikula@intel.com
parent b7268c5e
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -2140,10 +2140,22 @@ int intel_crtc_compute_min_cdclk(const struct intel_crtc_state *crtc_state)
		}
	}

	/* According to BSpec, "The CD clock frequency must be at least twice
	/*
	 * According to BSpec, "The CD clock frequency must be at least twice
	 * the frequency of the Azalia BCLK." and BCLK is 96 MHz by default.
	 *
	 * FIXME: Check the actual, not default, BCLK being used.
	 *
	 * FIXME: This does not depend on ->has_audio because the higher CDCLK
	 * is required for audio probe, also when there are no audio capable
	 * displays connected at probe time. This leads to unnecessarily high
	 * CDCLK when audio is not required.
	 *
	 * FIXME: This limit is only applied when there are displays connected
	 * at probe time. If we probe without displays, we'll still end up using
	 * the platform minimum CDCLK, failing audio probe.
	 */
	if (crtc_state->has_audio && INTEL_GEN(dev_priv) >= 9)
	if (INTEL_GEN(dev_priv) >= 9)
		min_cdclk = max(2 * 96000, min_cdclk);

	/*