intel_audio.c 25.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/*
 * Copyright © 2014 Intel Corporation
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the next
 * paragraph) shall be included in all copies or substantial portions of the
 * Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */

#include <linux/kernel.h>
I
Imre Deak 已提交
25 26 27
#include <linux/component.h>
#include <drm/i915_component.h>
#include "intel_drv.h"
28 29 30 31 32

#include <drm/drmP.h>
#include <drm/drm_edid.h>
#include "i915_drv.h"

33 34 35 36 37 38 39 40 41 42 43
/**
 * DOC: High Definition Audio over HDMI and Display Port
 *
 * The graphics and audio drivers together support High Definition Audio over
 * HDMI and Display Port. The audio programming sequences are divided into audio
 * codec and controller enable and disable sequences. The graphics driver
 * handles the audio codec sequences, while the audio driver handles the audio
 * controller sequences.
 *
 * The disable sequences must be performed before disabling the transcoder or
 * port. The enable sequences may only be performed after enabling the
44 45
 * transcoder and port, and after completed link training. Therefore the audio
 * enable/disable sequences are part of the modeset sequence.
46 47 48 49 50 51 52
 *
 * The codec and controller sequences could be done either parallel or serial,
 * but generally the ELDV/PD change in the codec sequence indicates to the audio
 * driver that the controller sequence should start. Indeed, most of the
 * co-operation between the graphics and audio drivers is handled via audio
 * related registers. (The notable exception is the power management, not
 * covered here.)
53 54 55 56 57
 *
 * The struct i915_audio_component is used to interact between the graphics
 * and audio drivers. The struct i915_audio_component_ops *ops in it is
 * defined in graphics driver and called in audio driver. The
 * struct i915_audio_component_audio_ops *audio_ops is called from i915 driver.
58 59
 */

60
static const struct {
61 62 63
	int clock;
	u32 config;
} hdmi_audio_clock[] = {
64
	{ 25175, AUD_CONFIG_PIXEL_CLOCK_HDMI_25175 },
65 66
	{ 25200, AUD_CONFIG_PIXEL_CLOCK_HDMI_25200 }, /* default per bspec */
	{ 27000, AUD_CONFIG_PIXEL_CLOCK_HDMI_27000 },
67
	{ 27027, AUD_CONFIG_PIXEL_CLOCK_HDMI_27027 },
68
	{ 54000, AUD_CONFIG_PIXEL_CLOCK_HDMI_54000 },
69 70
	{ 54054, AUD_CONFIG_PIXEL_CLOCK_HDMI_54054 },
	{ 74176, AUD_CONFIG_PIXEL_CLOCK_HDMI_74176 },
71
	{ 74250, AUD_CONFIG_PIXEL_CLOCK_HDMI_74250 },
72
	{ 148352, AUD_CONFIG_PIXEL_CLOCK_HDMI_148352 },
73 74 75
	{ 148500, AUD_CONFIG_PIXEL_CLOCK_HDMI_148500 },
};

76 77
/* HDMI N/CTS table */
#define TMDS_297M 297000
78
#define TMDS_296M 296703
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
static const struct {
	int sample_rate;
	int clock;
	int n;
	int cts;
} aud_ncts[] = {
	{ 44100, TMDS_296M, 4459, 234375 },
	{ 44100, TMDS_297M, 4704, 247500 },
	{ 48000, TMDS_296M, 5824, 281250 },
	{ 48000, TMDS_297M, 5120, 247500 },
	{ 32000, TMDS_296M, 5824, 421875 },
	{ 32000, TMDS_297M, 3072, 222750 },
	{ 88200, TMDS_296M, 8918, 234375 },
	{ 88200, TMDS_297M, 9408, 247500 },
	{ 96000, TMDS_296M, 11648, 281250 },
	{ 96000, TMDS_297M, 10240, 247500 },
	{ 176400, TMDS_296M, 17836, 234375 },
	{ 176400, TMDS_297M, 18816, 247500 },
	{ 192000, TMDS_296M, 23296, 281250 },
	{ 192000, TMDS_297M, 20480, 247500 },
};

101
/* get AUD_CONFIG_PIXEL_CLOCK_HDMI_* value for mode */
102
static u32 audio_config_hdmi_pixel_clock(const struct drm_display_mode *adjusted_mode)
103 104 105 106
{
	int i;

	for (i = 0; i < ARRAY_SIZE(hdmi_audio_clock); i++) {
107
		if (adjusted_mode->crtc_clock == hdmi_audio_clock[i].clock)
108 109 110 111
			break;
	}

	if (i == ARRAY_SIZE(hdmi_audio_clock)) {
112
		DRM_DEBUG_KMS("HDMI audio pixel clock setting for %d not found, falling back to defaults\n",
113
			      adjusted_mode->crtc_clock);
114 115 116 117 118 119 120 121 122 123
		i = 1;
	}

	DRM_DEBUG_KMS("Configuring HDMI audio for pixel clock %d (0x%08x)\n",
		      hdmi_audio_clock[i].clock,
		      hdmi_audio_clock[i].config);

	return hdmi_audio_clock[i].config;
}

124 125 126 127 128 129 130 131 132 133 134 135 136
static int audio_config_get_n(const struct drm_display_mode *mode, int rate)
{
	int i;

	for (i = 0; i < ARRAY_SIZE(aud_ncts); i++) {
		if ((rate == aud_ncts[i].sample_rate) &&
			(mode->clock == aud_ncts[i].clock)) {
			return aud_ncts[i].n;
		}
	}
	return 0;
}

137 138 139 140 141 142 143 144 145 146 147 148 149 150
static uint32_t audio_config_setup_n_reg(int n, uint32_t val)
{
	int n_low, n_up;
	uint32_t tmp = val;

	n_low = n & 0xfff;
	n_up = (n >> 12) & 0xff;
	tmp &= ~(AUD_CONFIG_UPPER_N_MASK | AUD_CONFIG_LOWER_N_MASK);
	tmp |= ((n_up << AUD_CONFIG_UPPER_N_SHIFT) |
			(n_low << AUD_CONFIG_LOWER_N_SHIFT) |
			AUD_CONFIG_N_PROG_ENABLE);
	return tmp;
}

151 152
/* check whether N/CTS/M need be set manually */
static bool audio_rate_need_prog(struct intel_crtc *crtc,
153
				 const struct drm_display_mode *mode)
154 155 156
{
	if (((mode->clock == TMDS_297M) ||
		 (mode->clock == TMDS_296M)) &&
157
		intel_crtc_has_type(crtc->config, INTEL_OUTPUT_HDMI))
158 159 160 161 162
		return true;
	else
		return false;
}

163
static bool intel_eld_uptodate(struct drm_connector *connector,
164 165 166
			       i915_reg_t reg_eldv, uint32_t bits_eldv,
			       i915_reg_t reg_elda, uint32_t bits_elda,
			       i915_reg_t reg_edid)
167
{
168
	struct drm_i915_private *dev_priv = to_i915(connector->dev);
169
	uint8_t *eld = connector->eld;
170 171
	uint32_t tmp;
	int i;
172

173 174
	tmp = I915_READ(reg_eldv);
	tmp &= bits_eldv;
175

176
	if (!tmp)
177 178
		return false;

179 180 181
	tmp = I915_READ(reg_elda);
	tmp &= ~bits_elda;
	I915_WRITE(reg_elda, tmp);
182

183
	for (i = 0; i < drm_eld_size(eld) / 4; i++)
184 185 186 187 188 189
		if (I915_READ(reg_edid) != *((uint32_t *)eld + i))
			return false;

	return true;
}

190 191
static void g4x_audio_codec_disable(struct intel_encoder *encoder)
{
192
	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
	uint32_t eldv, tmp;

	DRM_DEBUG_KMS("Disable audio codec\n");

	tmp = I915_READ(G4X_AUD_VID_DID);
	if (tmp == INTEL_AUDIO_DEVBLC || tmp == INTEL_AUDIO_DEVCL)
		eldv = G4X_ELDV_DEVCL_DEVBLC;
	else
		eldv = G4X_ELDV_DEVCTG;

	/* Invalidate ELD */
	tmp = I915_READ(G4X_AUD_CNTL_ST);
	tmp &= ~eldv;
	I915_WRITE(G4X_AUD_CNTL_ST, tmp);
}

209 210
static void g4x_audio_codec_enable(struct drm_connector *connector,
				   struct intel_encoder *encoder,
211
				   const struct drm_display_mode *adjusted_mode)
212
{
213
	struct drm_i915_private *dev_priv = to_i915(connector->dev);
214 215
	uint8_t *eld = connector->eld;
	uint32_t eldv;
216 217
	uint32_t tmp;
	int len, i;
218

219 220
	DRM_DEBUG_KMS("Enable audio codec, %u bytes ELD\n", eld[2]);

221 222
	tmp = I915_READ(G4X_AUD_VID_DID);
	if (tmp == INTEL_AUDIO_DEVBLC || tmp == INTEL_AUDIO_DEVCL)
223 224 225 226 227 228
		eldv = G4X_ELDV_DEVCL_DEVBLC;
	else
		eldv = G4X_ELDV_DEVCTG;

	if (intel_eld_uptodate(connector,
			       G4X_AUD_CNTL_ST, eldv,
229
			       G4X_AUD_CNTL_ST, G4X_ELD_ADDR_MASK,
230 231 232
			       G4X_HDMIW_HDMIEDID))
		return;

233
	tmp = I915_READ(G4X_AUD_CNTL_ST);
234
	tmp &= ~(eldv | G4X_ELD_ADDR_MASK);
235 236
	len = (tmp >> 9) & 0x1f;		/* ELD buffer size */
	I915_WRITE(G4X_AUD_CNTL_ST, tmp);
237

238
	len = min(drm_eld_size(eld) / 4, len);
239 240 241 242
	DRM_DEBUG_DRIVER("ELD size %d\n", len);
	for (i = 0; i < len; i++)
		I915_WRITE(G4X_HDMIW_HDMIEDID, *((uint32_t *)eld + i));

243 244 245
	tmp = I915_READ(G4X_AUD_CNTL_ST);
	tmp |= eldv;
	I915_WRITE(G4X_AUD_CNTL_ST, tmp);
246 247
}

248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286
static void hsw_audio_config_update(struct intel_crtc *intel_crtc,
				    enum port port,
				    const struct drm_display_mode *adjusted_mode)
{
	struct drm_i915_private *dev_priv = to_i915(intel_crtc->base.dev);
	struct i915_audio_component *acomp = dev_priv->audio_component;
	enum pipe pipe = intel_crtc->pipe;
	int n, rate;
	u32 tmp;

	tmp = I915_READ(HSW_AUD_CFG(pipe));
	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
	if (intel_crtc_has_dp_encoder(intel_crtc->config))
		tmp |= AUD_CONFIG_N_VALUE_INDEX;
	else
		tmp |= audio_config_hdmi_pixel_clock(adjusted_mode);

	tmp &= ~AUD_CONFIG_N_PROG_ENABLE;
	if (audio_rate_need_prog(intel_crtc, adjusted_mode)) {
		if (!acomp)
			rate = 0;
		else if (port >= PORT_A && port <= PORT_E)
			rate = acomp->aud_sample_rate[port];
		else {
			DRM_ERROR("invalid port: %d\n", port);
			rate = 0;
		}

		n = audio_config_get_n(adjusted_mode, rate);
		if (n != 0)
			tmp = audio_config_setup_n_reg(n, tmp);
		else
			DRM_DEBUG_KMS("no suitable N value is found\n");
	}

	I915_WRITE(HSW_AUD_CFG(pipe), tmp);
}

287 288
static void hsw_audio_codec_disable(struct intel_encoder *encoder)
{
289
	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
290 291
	struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
	enum pipe pipe = intel_crtc->pipe;
292 293
	uint32_t tmp;

294 295
	DRM_DEBUG_KMS("Disable audio codec on pipe %c\n", pipe_name(pipe));

296 297
	mutex_lock(&dev_priv->av_mutex);

298 299 300 301 302 303
	/* Disable timestamps */
	tmp = I915_READ(HSW_AUD_CFG(pipe));
	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
	tmp |= AUD_CONFIG_N_PROG_ENABLE;
	tmp &= ~AUD_CONFIG_UPPER_N_MASK;
	tmp &= ~AUD_CONFIG_LOWER_N_MASK;
304
	if (intel_crtc_has_dp_encoder(intel_crtc->config))
305 306 307 308
		tmp |= AUD_CONFIG_N_VALUE_INDEX;
	I915_WRITE(HSW_AUD_CFG(pipe), tmp);

	/* Invalidate ELD */
309
	tmp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
310
	tmp &= ~AUDIO_ELD_VALID(pipe);
311
	tmp &= ~AUDIO_OUTPUT_ENABLE(pipe);
312
	I915_WRITE(HSW_AUD_PIN_ELD_CP_VLD, tmp);
313 314

	mutex_unlock(&dev_priv->av_mutex);
315 316 317
}

static void hsw_audio_codec_enable(struct drm_connector *connector,
318
				   struct intel_encoder *intel_encoder,
319
				   const struct drm_display_mode *adjusted_mode)
320
{
321
	struct drm_i915_private *dev_priv = to_i915(connector->dev);
322
	struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder->base.crtc);
323
	enum pipe pipe = intel_crtc->pipe;
324
	enum port port = intel_encoder->port;
325
	const uint8_t *eld = connector->eld;
326 327
	uint32_t tmp;
	int len, i;
328

329
	DRM_DEBUG_KMS("Enable audio codec on pipe %c, %u bytes ELD\n",
330
		      pipe_name(pipe), drm_eld_size(eld));
331

332 333
	mutex_lock(&dev_priv->av_mutex);

334 335
	/* Enable audio presence detect, invalidate ELD */
	tmp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
336 337
	tmp |= AUDIO_OUTPUT_ENABLE(pipe);
	tmp &= ~AUDIO_ELD_VALID(pipe);
338
	I915_WRITE(HSW_AUD_PIN_ELD_CP_VLD, tmp);
339

340 341 342 343 344 345
	/*
	 * FIXME: We're supposed to wait for vblank here, but we have vblanks
	 * disabled during the mode set. The proper fix would be to push the
	 * rest of the setup into a vblank work item, queued here, but the
	 * infrastructure is not there yet.
	 */
346

347 348
	/* Reset ELD write address */
	tmp = I915_READ(HSW_AUD_DIP_ELD_CTRL(pipe));
349
	tmp &= ~IBX_ELD_ADDRESS_MASK;
350
	I915_WRITE(HSW_AUD_DIP_ELD_CTRL(pipe), tmp);
351

352
	/* Up to 84 bytes of hw ELD buffer */
353 354
	len = min(drm_eld_size(eld), 84);
	for (i = 0; i < len / 4; i++)
355
		I915_WRITE(HSW_AUD_EDID_DATA(pipe), *((uint32_t *)eld + i));
356

357
	/* ELD valid */
358
	tmp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD);
359
	tmp |= AUDIO_ELD_VALID(pipe);
360
	I915_WRITE(HSW_AUD_PIN_ELD_CP_VLD, tmp);
361 362

	/* Enable timestamps */
363
	hsw_audio_config_update(intel_crtc, port, adjusted_mode);
364 365

	mutex_unlock(&dev_priv->av_mutex);
366 367
}

368
static void ilk_audio_codec_disable(struct intel_encoder *intel_encoder)
369
{
370 371
	struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev);
	struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder->base.crtc);
372
	enum pipe pipe = intel_crtc->pipe;
373
	enum port port = intel_encoder->port;
374
	uint32_t tmp, eldv;
375
	i915_reg_t aud_config, aud_cntrl_st2;
376 377 378 379

	DRM_DEBUG_KMS("Disable audio codec on port %c, pipe %c\n",
		      port_name(port), pipe_name(pipe));

380 381 382
	if (WARN_ON(port == PORT_A))
		return;

383
	if (HAS_PCH_IBX(dev_priv)) {
384 385
		aud_config = IBX_AUD_CFG(pipe);
		aud_cntrl_st2 = IBX_AUD_CNTL_ST2;
386
	} else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
387 388 389 390 391 392 393 394 395 396 397 398 399
		aud_config = VLV_AUD_CFG(pipe);
		aud_cntrl_st2 = VLV_AUD_CNTL_ST2;
	} else {
		aud_config = CPT_AUD_CFG(pipe);
		aud_cntrl_st2 = CPT_AUD_CNTRL_ST2;
	}

	/* Disable timestamps */
	tmp = I915_READ(aud_config);
	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
	tmp |= AUD_CONFIG_N_PROG_ENABLE;
	tmp &= ~AUD_CONFIG_UPPER_N_MASK;
	tmp &= ~AUD_CONFIG_LOWER_N_MASK;
400
	if (intel_crtc_has_dp_encoder(intel_crtc->config))
401 402 403
		tmp |= AUD_CONFIG_N_VALUE_INDEX;
	I915_WRITE(aud_config, tmp);

404
	eldv = IBX_ELD_VALID(port);
405 406 407 408 409 410 411

	/* Invalidate ELD */
	tmp = I915_READ(aud_cntrl_st2);
	tmp &= ~eldv;
	I915_WRITE(aud_cntrl_st2, tmp);
}

412
static void ilk_audio_codec_enable(struct drm_connector *connector,
413
				   struct intel_encoder *intel_encoder,
414
				   const struct drm_display_mode *adjusted_mode)
415
{
416
	struct drm_i915_private *dev_priv = to_i915(connector->dev);
417
	struct intel_crtc *intel_crtc = to_intel_crtc(intel_encoder->base.crtc);
418
	enum pipe pipe = intel_crtc->pipe;
419
	enum port port = intel_encoder->port;
420
	uint8_t *eld = connector->eld;
421
	uint32_t tmp, eldv;
422
	int len, i;
423
	i915_reg_t hdmiw_hdmiedid, aud_config, aud_cntl_st, aud_cntrl_st2;
424 425

	DRM_DEBUG_KMS("Enable audio codec on port %c, pipe %c, %u bytes ELD\n",
426
		      port_name(port), pipe_name(pipe), drm_eld_size(eld));
427

428 429 430
	if (WARN_ON(port == PORT_A))
		return;

431 432 433 434 435 436
	/*
	 * FIXME: We're supposed to wait for vblank here, but we have vblanks
	 * disabled during the mode set. The proper fix would be to push the
	 * rest of the setup into a vblank work item, queued here, but the
	 * infrastructure is not there yet.
	 */
437 438 439 440 441 442

	if (HAS_PCH_IBX(connector->dev)) {
		hdmiw_hdmiedid = IBX_HDMIW_HDMIEDID(pipe);
		aud_config = IBX_AUD_CFG(pipe);
		aud_cntl_st = IBX_AUD_CNTL_ST(pipe);
		aud_cntrl_st2 = IBX_AUD_CNTL_ST2;
443 444
	} else if (IS_VALLEYVIEW(connector->dev) ||
		   IS_CHERRYVIEW(connector->dev)) {
445 446 447 448 449 450 451 452 453 454 455
		hdmiw_hdmiedid = VLV_HDMIW_HDMIEDID(pipe);
		aud_config = VLV_AUD_CFG(pipe);
		aud_cntl_st = VLV_AUD_CNTL_ST(pipe);
		aud_cntrl_st2 = VLV_AUD_CNTL_ST2;
	} else {
		hdmiw_hdmiedid = CPT_HDMIW_HDMIEDID(pipe);
		aud_config = CPT_AUD_CFG(pipe);
		aud_cntl_st = CPT_AUD_CNTL_ST(pipe);
		aud_cntrl_st2 = CPT_AUD_CNTRL_ST2;
	}

456
	eldv = IBX_ELD_VALID(port);
457

458
	/* Invalidate ELD */
459 460 461
	tmp = I915_READ(aud_cntrl_st2);
	tmp &= ~eldv;
	I915_WRITE(aud_cntrl_st2, tmp);
462

463
	/* Reset ELD write address */
464
	tmp = I915_READ(aud_cntl_st);
465
	tmp &= ~IBX_ELD_ADDRESS_MASK;
466
	I915_WRITE(aud_cntl_st, tmp);
467

468
	/* Up to 84 bytes of hw ELD buffer */
469 470
	len = min(drm_eld_size(eld), 84);
	for (i = 0; i < len / 4; i++)
471 472
		I915_WRITE(hdmiw_hdmiedid, *((uint32_t *)eld + i));

473
	/* ELD valid */
474 475 476
	tmp = I915_READ(aud_cntrl_st2);
	tmp |= eldv;
	I915_WRITE(aud_cntrl_st2, tmp);
477 478 479 480 481 482

	/* Enable timestamps */
	tmp = I915_READ(aud_config);
	tmp &= ~AUD_CONFIG_N_VALUE_INDEX;
	tmp &= ~AUD_CONFIG_N_PROG_ENABLE;
	tmp &= ~AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK;
483
	if (intel_crtc_has_dp_encoder(intel_crtc->config))
484 485
		tmp |= AUD_CONFIG_N_VALUE_INDEX;
	else
486
		tmp |= audio_config_hdmi_pixel_clock(adjusted_mode);
487
	I915_WRITE(aud_config, tmp);
488 489
}

490 491 492 493 494 495 496 497
/**
 * intel_audio_codec_enable - Enable the audio codec for HD audio
 * @intel_encoder: encoder on which to enable audio
 *
 * The enable sequences may only be performed after enabling the transcoder and
 * port, and after completed link training.
 */
void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
498
{
499 500
	struct drm_encoder *encoder = &intel_encoder->base;
	struct intel_crtc *crtc = to_intel_crtc(encoder->crtc);
501
	const struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode;
502
	struct drm_connector *connector;
503
	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
504
	struct i915_audio_component *acomp = dev_priv->audio_component;
505
	enum port port = intel_encoder->port;
506
	enum pipe pipe = crtc->pipe;
507

508
	connector = drm_select_eld(encoder);
509 510 511 512 513 514 515 516 517
	if (!connector)
		return;

	DRM_DEBUG_DRIVER("ELD on [CONNECTOR:%d:%s], [ENCODER:%d:%s]\n",
			 connector->base.id,
			 connector->name,
			 connector->encoder->base.id,
			 connector->encoder->name);

518 519
	/* ELD Conn_Type */
	connector->eld[5] &= ~(3 << 2);
520
	if (intel_crtc_has_dp_encoder(crtc->config))
521 522
		connector->eld[5] |= (1 << 2);

523
	connector->eld[6] = drm_av_sync_delay(connector, adjusted_mode) / 2;
524

525
	if (dev_priv->display.audio_codec_enable)
526 527
		dev_priv->display.audio_codec_enable(connector, intel_encoder,
						     adjusted_mode);
528

529
	mutex_lock(&dev_priv->av_mutex);
530
	intel_encoder->audio_connector = connector;
531

532
	/* referred in audio callbacks */
533
	dev_priv->av_enc_map[pipe] = intel_encoder;
534 535
	mutex_unlock(&dev_priv->av_mutex);

536 537 538 539
	/* audio drivers expect pipe = -1 to indicate Non-MST cases */
	if (intel_encoder->type != INTEL_OUTPUT_DP_MST)
		pipe = -1;

540
	if (acomp && acomp->audio_ops && acomp->audio_ops->pin_eld_notify)
541 542
		acomp->audio_ops->pin_eld_notify(acomp->audio_ops->audio_ptr,
						 (int) port, (int) pipe);
543 544 545 546
}

/**
 * intel_audio_codec_disable - Disable the audio codec for HD audio
547
 * @intel_encoder: encoder on which to disable audio
548 549 550 551
 *
 * The disable sequences must be performed before disabling the transcoder or
 * port.
 */
552
void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
553
{
554
	struct drm_encoder *encoder = &intel_encoder->base;
555
	struct drm_i915_private *dev_priv = to_i915(encoder->dev);
556
	struct i915_audio_component *acomp = dev_priv->audio_component;
557
	enum port port = intel_encoder->port;
558 559
	struct intel_crtc *crtc = to_intel_crtc(encoder->crtc);
	enum pipe pipe = crtc->pipe;
560 561

	if (dev_priv->display.audio_codec_disable)
562 563
		dev_priv->display.audio_codec_disable(intel_encoder);

564
	mutex_lock(&dev_priv->av_mutex);
565
	intel_encoder->audio_connector = NULL;
566
	dev_priv->av_enc_map[pipe] = NULL;
567 568
	mutex_unlock(&dev_priv->av_mutex);

569 570 571 572
	/* audio drivers expect pipe = -1 to indicate Non-MST cases */
	if (intel_encoder->type != INTEL_OUTPUT_DP_MST)
		pipe = -1;

573
	if (acomp && acomp->audio_ops && acomp->audio_ops->pin_eld_notify)
574 575
		acomp->audio_ops->pin_eld_notify(acomp->audio_ops->audio_ptr,
						 (int) port, (int) pipe);
576 577 578
}

/**
579 580
 * intel_init_audio_hooks - Set up chip specific audio hooks
 * @dev_priv: device private
581
 */
582
void intel_init_audio_hooks(struct drm_i915_private *dev_priv)
583
{
584
	if (IS_G4X(dev_priv)) {
585
		dev_priv->display.audio_codec_enable = g4x_audio_codec_enable;
586
		dev_priv->display.audio_codec_disable = g4x_audio_codec_disable;
587
	} else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
588
		dev_priv->display.audio_codec_enable = ilk_audio_codec_enable;
589
		dev_priv->display.audio_codec_disable = ilk_audio_codec_disable;
590
	} else if (IS_HASWELL(dev_priv) || INTEL_INFO(dev_priv)->gen >= 8) {
591 592
		dev_priv->display.audio_codec_enable = hsw_audio_codec_enable;
		dev_priv->display.audio_codec_disable = hsw_audio_codec_disable;
593
	} else if (HAS_PCH_SPLIT(dev_priv)) {
594
		dev_priv->display.audio_codec_enable = ilk_audio_codec_enable;
595
		dev_priv->display.audio_codec_disable = ilk_audio_codec_disable;
596
	}
597
}
I
Imre Deak 已提交
598

599
static void i915_audio_component_get_power(struct device *kdev)
I
Imre Deak 已提交
600
{
601
	intel_display_power_get(kdev_to_i915(kdev), POWER_DOMAIN_AUDIO);
I
Imre Deak 已提交
602 603
}

604
static void i915_audio_component_put_power(struct device *kdev)
I
Imre Deak 已提交
605
{
606
	intel_display_power_put(kdev_to_i915(kdev), POWER_DOMAIN_AUDIO);
I
Imre Deak 已提交
607 608
}

609
static void i915_audio_component_codec_wake_override(struct device *kdev,
610 611
						     bool enable)
{
612
	struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
613 614
	u32 tmp;

615
	if (!IS_SKYLAKE(dev_priv) && !IS_KABYLAKE(dev_priv))
616 617
		return;

618
	i915_audio_component_get_power(kdev);
619

620 621 622 623 624 625 626 627 628 629 630 631 632 633 634
	/*
	 * 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);
	}
635

636
	i915_audio_component_put_power(kdev);
637 638
}

I
Imre Deak 已提交
639
/* Get CDCLK in kHz  */
640
static int i915_audio_component_get_cdclk_freq(struct device *kdev)
I
Imre Deak 已提交
641
{
642
	struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
I
Imre Deak 已提交
643 644 645 646

	if (WARN_ON_ONCE(!HAS_DDI(dev_priv)))
		return -ENODEV;

647
	return dev_priv->cdclk_freq;
I
Imre Deak 已提交
648 649
}

650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677
static struct intel_encoder *get_saved_enc(struct drm_i915_private *dev_priv,
					       int port, int pipe)
{

	if (WARN_ON(pipe >= I915_MAX_PIPES))
		return NULL;

	/* MST */
	if (pipe >= 0)
		return dev_priv->av_enc_map[pipe];

	/* Non-MST */
	for_each_pipe(dev_priv, pipe) {
		struct intel_encoder *encoder;

		encoder = dev_priv->av_enc_map[pipe];
		if (encoder == NULL)
			continue;

		if (port == encoder->port)
			return encoder;
	}

	return NULL;
}

static int i915_audio_component_sync_audio_rate(struct device *kdev, int port,
						int pipe, int rate)
678
{
679
	struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
680 681 682
	struct intel_encoder *intel_encoder;
	struct intel_crtc *crtc;
	struct drm_display_mode *mode;
683
	struct i915_audio_component *acomp = dev_priv->audio_component;
684
	u32 tmp;
685
	int n;
686
	int err = 0;
687

688
	/* HSW, BDW, SKL, KBL need this fix */
689
	if (!IS_SKYLAKE(dev_priv) &&
690 691 692
	    !IS_KABYLAKE(dev_priv) &&
	    !IS_BROADWELL(dev_priv) &&
	    !IS_HASWELL(dev_priv))
693 694
		return 0;

695
	i915_audio_component_get_power(kdev);
696
	mutex_lock(&dev_priv->av_mutex);
697

698
	/* 1. get the pipe */
699
	intel_encoder = get_saved_enc(dev_priv, port, pipe);
700 701
	if (!intel_encoder || !intel_encoder->base.crtc ||
	    intel_encoder->type != INTEL_OUTPUT_HDMI) {
702
		DRM_DEBUG_KMS("Not valid for port %c\n", port_name(port));
703 704
		err = -ENODEV;
		goto unlock;
705
	}
706 707

	/* pipe passed from the audio driver will be -1 for Non-MST case */
708 709 710
	crtc = to_intel_crtc(intel_encoder->base.crtc);
	pipe = crtc->pipe;

711 712
	mode = &crtc->config->base.adjusted_mode;

713 714 715
	/* port must be valid now, otherwise the pipe will be invalid */
	acomp->aud_sample_rate[port] = rate;

716 717 718 719 720
	/* 2. check whether to set the N/CTS/M manually or not */
	if (!audio_rate_need_prog(crtc, mode)) {
		tmp = I915_READ(HSW_AUD_CFG(pipe));
		tmp &= ~AUD_CONFIG_N_PROG_ENABLE;
		I915_WRITE(HSW_AUD_CFG(pipe), tmp);
721
		goto unlock;
722 723 724 725 726 727 728 729 730
	}

	n = audio_config_get_n(mode, rate);
	if (n == 0) {
		DRM_DEBUG_KMS("Using automatic mode for N value on port %c\n",
					  port_name(port));
		tmp = I915_READ(HSW_AUD_CFG(pipe));
		tmp &= ~AUD_CONFIG_N_PROG_ENABLE;
		I915_WRITE(HSW_AUD_CFG(pipe), tmp);
731
		goto unlock;
732 733
	}

734
	/* 3. set the N/CTS/M */
735
	tmp = I915_READ(HSW_AUD_CFG(pipe));
736
	tmp = audio_config_setup_n_reg(n, tmp);
737 738
	I915_WRITE(HSW_AUD_CFG(pipe), tmp);

739
 unlock:
740
	mutex_unlock(&dev_priv->av_mutex);
741
	i915_audio_component_put_power(kdev);
742
	return err;
743 744
}

745
static int i915_audio_component_get_eld(struct device *kdev, int port,
746
					int pipe, bool *enabled,
747 748
					unsigned char *buf, int max_bytes)
{
749
	struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
750 751 752 753 754
	struct intel_encoder *intel_encoder;
	const u8 *eld;
	int ret = -EINVAL;

	mutex_lock(&dev_priv->av_mutex);
755 756 757 758 759 760 761 762 763 764 765 766 767 768

	intel_encoder = get_saved_enc(dev_priv, port, pipe);
	if (!intel_encoder) {
		DRM_DEBUG_KMS("Not valid for port %c\n", port_name(port));
		mutex_unlock(&dev_priv->av_mutex);
		return ret;
	}

	ret = 0;
	*enabled = intel_encoder->audio_connector != NULL;
	if (*enabled) {
		eld = intel_encoder->audio_connector->eld;
		ret = drm_eld_size(eld);
		memcpy(buf, eld, min(max_bytes, ret));
769 770 771 772
	}

	mutex_unlock(&dev_priv->av_mutex);
	return ret;
773 774
}

I
Imre Deak 已提交
775 776 777 778
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,
779
	.codec_wake_override = i915_audio_component_codec_wake_override,
I
Imre Deak 已提交
780
	.get_cdclk_freq	= i915_audio_component_get_cdclk_freq,
781
	.sync_audio_rate = i915_audio_component_sync_audio_rate,
782
	.get_eld	= i915_audio_component_get_eld,
I
Imre Deak 已提交
783 784
};

785 786
static int i915_audio_component_bind(struct device *i915_kdev,
				     struct device *hda_kdev, void *data)
I
Imre Deak 已提交
787 788
{
	struct i915_audio_component *acomp = data;
789
	struct drm_i915_private *dev_priv = kdev_to_i915(i915_kdev);
790
	int i;
I
Imre Deak 已提交
791 792 793 794

	if (WARN_ON(acomp->ops || acomp->dev))
		return -EEXIST;

795
	drm_modeset_lock_all(&dev_priv->drm);
I
Imre Deak 已提交
796
	acomp->ops = &i915_audio_component_ops;
797
	acomp->dev = i915_kdev;
798 799 800
	BUILD_BUG_ON(MAX_PORTS != I915_MAX_PORTS);
	for (i = 0; i < ARRAY_SIZE(acomp->aud_sample_rate); i++)
		acomp->aud_sample_rate[i] = 0;
801
	dev_priv->audio_component = acomp;
802
	drm_modeset_unlock_all(&dev_priv->drm);
I
Imre Deak 已提交
803 804 805 806

	return 0;
}

807 808
static void i915_audio_component_unbind(struct device *i915_kdev,
					struct device *hda_kdev, void *data)
I
Imre Deak 已提交
809 810
{
	struct i915_audio_component *acomp = data;
811
	struct drm_i915_private *dev_priv = kdev_to_i915(i915_kdev);
I
Imre Deak 已提交
812

813
	drm_modeset_lock_all(&dev_priv->drm);
I
Imre Deak 已提交
814 815
	acomp->ops = NULL;
	acomp->dev = NULL;
816
	dev_priv->audio_component = NULL;
817
	drm_modeset_unlock_all(&dev_priv->drm);
I
Imre Deak 已提交
818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844
}

static const struct component_ops i915_audio_component_bind_ops = {
	.bind	= i915_audio_component_bind,
	.unbind	= i915_audio_component_unbind,
};

/**
 * i915_audio_component_init - initialize and register the audio component
 * @dev_priv: i915 device instance
 *
 * This will register with the component framework a child component which
 * will bind dynamically to the snd_hda_intel driver's corresponding master
 * component when the latter is registered. During binding the child
 * initializes an instance of struct i915_audio_component which it receives
 * from the master. The master can then start to use the interface defined by
 * this struct. Each side can break the binding at any point by deregistering
 * its own component after which each side's component unbind callback is
 * called.
 *
 * We ignore any error during registration and continue with reduced
 * functionality (i.e. without HDMI audio).
 */
void i915_audio_component_init(struct drm_i915_private *dev_priv)
{
	int ret;

845
	ret = component_add(dev_priv->drm.dev, &i915_audio_component_bind_ops);
I
Imre Deak 已提交
846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866
	if (ret < 0) {
		DRM_ERROR("failed to add audio component (%d)\n", ret);
		/* continue with reduced functionality */
		return;
	}

	dev_priv->audio_component_registered = true;
}

/**
 * i915_audio_component_cleanup - deregister the audio component
 * @dev_priv: i915 device instance
 *
 * Deregisters the audio component, breaking any existing binding to the
 * corresponding snd_hda_intel driver's master component.
 */
void i915_audio_component_cleanup(struct drm_i915_private *dev_priv)
{
	if (!dev_priv->audio_component_registered)
		return;

867
	component_del(dev_priv->drm.dev, &i915_audio_component_bind_ops);
I
Imre Deak 已提交
868 869
	dev_priv->audio_component_registered = false;
}