summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPandiyan, Dhinakaran <dhinakaran.pandiyan@intel.com>2016-09-21 16:02:48 -0400
committerRodrigo Vivi <rodrigo.vivi@intel.com>2016-09-22 12:01:55 -0400
commitf931894194b9395313d1c34f95ceb8d91f49790d (patch)
tree0747492467f70d2f611576e53bc1f59e09698f79
parentefab0698f94dd71fac5d946ad664a280441daedb (diff)
drm/i915/dp: DP audio API changes for MST
DP MST provides the capability to send multiple video and audio streams through a single port. This requires the API's between i915 and audio drivers to distinguish between multiple audio capable displays that can be connected to a port. Currently only the port identity is shared in the APIs. This patch adds support for MST with an additional parameter 'int pipe'. The existing parameter 'port' does not change it's meaning. pipe = MST : display pipe that the stream originates from Non-MST : -1 Affected APIs: struct i915_audio_component_ops - int (*sync_audio_rate)(struct device *, int port, int rate); + int (*sync_audio_rate)(struct device *, int port, int pipe, + int rate); - int (*get_eld)(struct device *, int port, bool *enabled, - unsigned char *buf, int max_bytes); + int (*get_eld)(struct device *, int port, int pipe, + bool *enabled, unsigned char *buf, int max_bytes); struct i915_audio_component_audio_ops - void (*pin_eld_notify)(void *audio_ptr, int port); + void (*pin_eld_notify)(void *audio_ptr, int port, int pipe); This patch makes dummy changes in the audio drivers (thanks Libin) for build to succeed. The audio side drivers will send the right 'pipe' values for MST in patches that will follow. v2: Renamed the new API parameter from 'dev_id' to 'pipe'. (Jim, Ville) Included Asoc driver API compatibility changes from Jeeja. Added WARN_ON() for invalid pipe in get_saved_encoder(). (Takashi) Added comment for av_enc_map[] definition. (Takashi) v3: Fixed logic error introduced while renaming 'dev_id' as 'pipe' (Ville) Renamed get_saved_encoder() to get_saved_enc() to reduce line length v4: Rebased. Parameter check for pipe < -1 values in get_saved_enc() (Ville) Switched to for_each_pipe() in get_saved_enc() (Ville) Renamed 'pipe' to 'dev_id' in audio side code (Takashi) v5: Included a comment for the dev_id arg. (Libin) Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com> Reviewed-by: Takashi Iwai <tiwai@suse.de> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1474488168-2343-1-git-send-email-dhinakaran.pandiyan@intel.com
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h3
-rw-r--r--drivers/gpu/drm/i915/intel_audio.c94
-rw-r--r--include/drm/i915_component.h6
-rw-r--r--include/sound/hda_i915.h11
-rw-r--r--sound/hda/hdac_i915.c18
-rw-r--r--sound/pci/hda/patch_hdmi.c7
-rw-r--r--sound/soc/codecs/hdac_hdmi.c2
7 files changed, 94 insertions, 47 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 98f52dab27d4..e76dc41f683c 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2080,7 +2080,8 @@ struct drm_i915_private {
2080 /* perform PHY state sanity checks? */ 2080 /* perform PHY state sanity checks? */
2081 bool chv_phy_assert[2]; 2081 bool chv_phy_assert[2];
2082 2082
2083 struct intel_encoder *dig_port_map[I915_MAX_PORTS]; 2083 /* Used to save the pipe-to-encoder mapping for audio */
2084 struct intel_encoder *av_enc_map[I915_MAX_PIPES];
2084 2085
2085 /* 2086 /*
2086 * NOTE: This is the dri1/ums dungeon, don't add stuff here. Your patch 2087 * NOTE: This is the dri1/ums dungeon, don't add stuff here. Your patch
diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
index fb22a2bc85e6..1f168e27af10 100644
--- a/drivers/gpu/drm/i915/intel_audio.c
+++ b/drivers/gpu/drm/i915/intel_audio.c
@@ -491,6 +491,7 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
491 struct drm_i915_private *dev_priv = to_i915(encoder->dev); 491 struct drm_i915_private *dev_priv = to_i915(encoder->dev);
492 struct i915_audio_component *acomp = dev_priv->audio_component; 492 struct i915_audio_component *acomp = dev_priv->audio_component;
493 enum port port = intel_encoder->port; 493 enum port port = intel_encoder->port;
494 enum pipe pipe = crtc->pipe;
494 495
495 connector = drm_select_eld(encoder); 496 connector = drm_select_eld(encoder);
496 if (!connector) 497 if (!connector)
@@ -515,12 +516,18 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
515 516
516 mutex_lock(&dev_priv->av_mutex); 517 mutex_lock(&dev_priv->av_mutex);
517 intel_encoder->audio_connector = connector; 518 intel_encoder->audio_connector = connector;
519
518 /* referred in audio callbacks */ 520 /* referred in audio callbacks */
519 dev_priv->dig_port_map[port] = intel_encoder; 521 dev_priv->av_enc_map[pipe] = intel_encoder;
520 mutex_unlock(&dev_priv->av_mutex); 522 mutex_unlock(&dev_priv->av_mutex);
521 523
524 /* audio drivers expect pipe = -1 to indicate Non-MST cases */
525 if (intel_encoder->type != INTEL_OUTPUT_DP_MST)
526 pipe = -1;
527
522 if (acomp && acomp->audio_ops && acomp->audio_ops->pin_eld_notify) 528 if (acomp && acomp->audio_ops && acomp->audio_ops->pin_eld_notify)
523 acomp->audio_ops->pin_eld_notify(acomp->audio_ops->audio_ptr, (int) port); 529 acomp->audio_ops->pin_eld_notify(acomp->audio_ops->audio_ptr,
530 (int) port, (int) pipe);
524} 531}
525 532
526/** 533/**
@@ -536,17 +543,24 @@ void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
536 struct drm_i915_private *dev_priv = to_i915(encoder->dev); 543 struct drm_i915_private *dev_priv = to_i915(encoder->dev);
537 struct i915_audio_component *acomp = dev_priv->audio_component; 544 struct i915_audio_component *acomp = dev_priv->audio_component;
538 enum port port = intel_encoder->port; 545 enum port port = intel_encoder->port;
546 struct intel_crtc *crtc = to_intel_crtc(encoder->crtc);
547 enum pipe pipe = crtc->pipe;
539 548
540 if (dev_priv->display.audio_codec_disable) 549 if (dev_priv->display.audio_codec_disable)
541 dev_priv->display.audio_codec_disable(intel_encoder); 550 dev_priv->display.audio_codec_disable(intel_encoder);
542 551
543 mutex_lock(&dev_priv->av_mutex); 552 mutex_lock(&dev_priv->av_mutex);
544 intel_encoder->audio_connector = NULL; 553 intel_encoder->audio_connector = NULL;
545 dev_priv->dig_port_map[port] = NULL; 554 dev_priv->av_enc_map[pipe] = NULL;
546 mutex_unlock(&dev_priv->av_mutex); 555 mutex_unlock(&dev_priv->av_mutex);
547 556
557 /* audio drivers expect pipe = -1 to indicate Non-MST cases */
558 if (intel_encoder->type != INTEL_OUTPUT_DP_MST)
559 pipe = -1;
560
548 if (acomp && acomp->audio_ops && acomp->audio_ops->pin_eld_notify) 561 if (acomp && acomp->audio_ops && acomp->audio_ops->pin_eld_notify)
549 acomp->audio_ops->pin_eld_notify(acomp->audio_ops->audio_ptr, (int) port); 562 acomp->audio_ops->pin_eld_notify(acomp->audio_ops->audio_ptr,
563 (int) port, (int) pipe);
550} 564}
551 565
552/** 566/**
@@ -621,15 +635,40 @@ static int i915_audio_component_get_cdclk_freq(struct device *kdev)
621 return dev_priv->cdclk_freq; 635 return dev_priv->cdclk_freq;
622} 636}
623 637
624static int i915_audio_component_sync_audio_rate(struct device *kdev, 638static struct intel_encoder *get_saved_enc(struct drm_i915_private *dev_priv,
625 int port, int rate) 639 int port, int pipe)
640{
641
642 if (WARN_ON(pipe >= I915_MAX_PIPES))
643 return NULL;
644
645 /* MST */
646 if (pipe >= 0)
647 return dev_priv->av_enc_map[pipe];
648
649 /* Non-MST */
650 for_each_pipe(dev_priv, pipe) {
651 struct intel_encoder *encoder;
652
653 encoder = dev_priv->av_enc_map[pipe];
654 if (encoder == NULL)
655 continue;
656
657 if (port == encoder->port)
658 return encoder;
659 }
660
661 return NULL;
662}
663
664static int i915_audio_component_sync_audio_rate(struct device *kdev, int port,
665 int pipe, int rate)
626{ 666{
627 struct drm_i915_private *dev_priv = kdev_to_i915(kdev); 667 struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
628 struct intel_encoder *intel_encoder; 668 struct intel_encoder *intel_encoder;
629 struct intel_crtc *crtc; 669 struct intel_crtc *crtc;
630 struct drm_display_mode *mode; 670 struct drm_display_mode *mode;
631 struct i915_audio_component *acomp = dev_priv->audio_component; 671 struct i915_audio_component *acomp = dev_priv->audio_component;
632 enum pipe pipe = INVALID_PIPE;
633 u32 tmp; 672 u32 tmp;
634 int n; 673 int n;
635 int err = 0; 674 int err = 0;
@@ -643,25 +682,20 @@ static int i915_audio_component_sync_audio_rate(struct device *kdev,
643 682
644 i915_audio_component_get_power(kdev); 683 i915_audio_component_get_power(kdev);
645 mutex_lock(&dev_priv->av_mutex); 684 mutex_lock(&dev_priv->av_mutex);
685
646 /* 1. get the pipe */ 686 /* 1. get the pipe */
647 intel_encoder = dev_priv->dig_port_map[port]; 687 intel_encoder = get_saved_enc(dev_priv, port, pipe);
648 /* intel_encoder might be NULL for DP MST */
649 if (!intel_encoder || !intel_encoder->base.crtc || 688 if (!intel_encoder || !intel_encoder->base.crtc ||
650 intel_encoder->type != INTEL_OUTPUT_HDMI) { 689 intel_encoder->type != INTEL_OUTPUT_HDMI) {
651 DRM_DEBUG_KMS("no valid port %c\n", port_name(port)); 690 DRM_DEBUG_KMS("Not valid for port %c\n", port_name(port));
652 err = -ENODEV; 691 err = -ENODEV;
653 goto unlock; 692 goto unlock;
654 } 693 }
694
695 /* pipe passed from the audio driver will be -1 for Non-MST case */
655 crtc = to_intel_crtc(intel_encoder->base.crtc); 696 crtc = to_intel_crtc(intel_encoder->base.crtc);
656 pipe = crtc->pipe; 697 pipe = crtc->pipe;
657 if (pipe == INVALID_PIPE) {
658 DRM_DEBUG_KMS("no pipe for the port %c\n", port_name(port));
659 err = -ENODEV;
660 goto unlock;
661 }
662 698
663 DRM_DEBUG_KMS("pipe %c connects port %c\n",
664 pipe_name(pipe), port_name(port));
665 mode = &crtc->config->base.adjusted_mode; 699 mode = &crtc->config->base.adjusted_mode;
666 700
667 /* port must be valid now, otherwise the pipe will be invalid */ 701 /* port must be valid now, otherwise the pipe will be invalid */
@@ -697,7 +731,7 @@ static int i915_audio_component_sync_audio_rate(struct device *kdev,
697} 731}
698 732
699static int i915_audio_component_get_eld(struct device *kdev, int port, 733static int i915_audio_component_get_eld(struct device *kdev, int port,
700 bool *enabled, 734 int pipe, bool *enabled,
701 unsigned char *buf, int max_bytes) 735 unsigned char *buf, int max_bytes)
702{ 736{
703 struct drm_i915_private *dev_priv = kdev_to_i915(kdev); 737 struct drm_i915_private *dev_priv = kdev_to_i915(kdev);
@@ -706,16 +740,20 @@ static int i915_audio_component_get_eld(struct device *kdev, int port,
706 int ret = -EINVAL; 740 int ret = -EINVAL;
707 741
708 mutex_lock(&dev_priv->av_mutex); 742 mutex_lock(&dev_priv->av_mutex);
709 intel_encoder = dev_priv->dig_port_map[port]; 743
710 /* intel_encoder might be NULL for DP MST */ 744 intel_encoder = get_saved_enc(dev_priv, port, pipe);
711 if (intel_encoder) { 745 if (!intel_encoder) {
712 ret = 0; 746 DRM_DEBUG_KMS("Not valid for port %c\n", port_name(port));
713 *enabled = intel_encoder->audio_connector != NULL; 747 mutex_unlock(&dev_priv->av_mutex);
714 if (*enabled) { 748 return ret;
715 eld = intel_encoder->audio_connector->eld; 749 }
716 ret = drm_eld_size(eld); 750
717 memcpy(buf, eld, min(max_bytes, ret)); 751 ret = 0;
718 } 752 *enabled = intel_encoder->audio_connector != NULL;
753 if (*enabled) {
754 eld = intel_encoder->audio_connector->eld;
755 ret = drm_eld_size(eld);
756 memcpy(buf, eld, min(max_bytes, ret));
719 } 757 }
720 758
721 mutex_unlock(&dev_priv->av_mutex); 759 mutex_unlock(&dev_priv->av_mutex);
diff --git a/include/drm/i915_component.h b/include/drm/i915_component.h
index b46fa0ef3005..545c6e0fea7d 100644
--- a/include/drm/i915_component.h
+++ b/include/drm/i915_component.h
@@ -64,7 +64,7 @@ struct i915_audio_component_ops {
64 * Called from audio driver. After audio driver sets the 64 * Called from audio driver. After audio driver sets the
65 * sample rate, it will call this function to set n/cts 65 * sample rate, it will call this function to set n/cts
66 */ 66 */
67 int (*sync_audio_rate)(struct device *, int port, int rate); 67 int (*sync_audio_rate)(struct device *, int port, int pipe, int rate);
68 /** 68 /**
69 * @get_eld: fill the audio state and ELD bytes for the given port 69 * @get_eld: fill the audio state and ELD bytes for the given port
70 * 70 *
@@ -77,7 +77,7 @@ struct i915_audio_component_ops {
77 * Note that the returned size may be over @max_bytes. Then it 77 * Note that the returned size may be over @max_bytes. Then it
78 * implies that only a part of ELD has been copied to the buffer. 78 * implies that only a part of ELD has been copied to the buffer.
79 */ 79 */
80 int (*get_eld)(struct device *, int port, bool *enabled, 80 int (*get_eld)(struct device *, int port, int pipe, bool *enabled,
81 unsigned char *buf, int max_bytes); 81 unsigned char *buf, int max_bytes);
82}; 82};
83 83
@@ -97,7 +97,7 @@ struct i915_audio_component_audio_ops {
97 * status accordingly (even when the HDA controller is in power save 97 * status accordingly (even when the HDA controller is in power save
98 * mode). 98 * mode).
99 */ 99 */
100 void (*pin_eld_notify)(void *audio_ptr, int port); 100 void (*pin_eld_notify)(void *audio_ptr, int port, int pipe);
101}; 101};
102 102
103/** 103/**
diff --git a/include/sound/hda_i915.h b/include/sound/hda_i915.h
index 796cabf6be5e..5ab972e116ec 100644
--- a/include/sound/hda_i915.h
+++ b/include/sound/hda_i915.h
@@ -10,8 +10,9 @@
10int snd_hdac_set_codec_wakeup(struct hdac_bus *bus, bool enable); 10int snd_hdac_set_codec_wakeup(struct hdac_bus *bus, bool enable);
11int snd_hdac_display_power(struct hdac_bus *bus, bool enable); 11int snd_hdac_display_power(struct hdac_bus *bus, bool enable);
12void snd_hdac_i915_set_bclk(struct hdac_bus *bus); 12void snd_hdac_i915_set_bclk(struct hdac_bus *bus);
13int snd_hdac_sync_audio_rate(struct hdac_device *codec, hda_nid_t nid, int rate); 13int snd_hdac_sync_audio_rate(struct hdac_device *codec, hda_nid_t nid,
14int snd_hdac_acomp_get_eld(struct hdac_device *codec, hda_nid_t nid, 14 int dev_id, int rate);
15int snd_hdac_acomp_get_eld(struct hdac_device *codec, hda_nid_t nid, int dev_id,
15 bool *audio_enabled, char *buffer, int max_bytes); 16 bool *audio_enabled, char *buffer, int max_bytes);
16int snd_hdac_i915_init(struct hdac_bus *bus); 17int snd_hdac_i915_init(struct hdac_bus *bus);
17int snd_hdac_i915_exit(struct hdac_bus *bus); 18int snd_hdac_i915_exit(struct hdac_bus *bus);
@@ -29,13 +30,13 @@ static inline void snd_hdac_i915_set_bclk(struct hdac_bus *bus)
29{ 30{
30} 31}
31static inline int snd_hdac_sync_audio_rate(struct hdac_device *codec, 32static inline int snd_hdac_sync_audio_rate(struct hdac_device *codec,
32 hda_nid_t nid, int rate) 33 hda_nid_t nid, int dev_id, int rate)
33{ 34{
34 return 0; 35 return 0;
35} 36}
36static inline int snd_hdac_acomp_get_eld(struct hdac_device *codec, hda_nid_t nid, 37static inline int snd_hdac_acomp_get_eld(struct hdac_device *codec, hda_nid_t nid,
37 bool *audio_enabled, char *buffer, 38 int dev_id, bool *audio_enabled,
38 int max_bytes) 39 char *buffer, int max_bytes)
39{ 40{
40 return -ENODEV; 41 return -ENODEV;
41} 42}
diff --git a/sound/hda/hdac_i915.c b/sound/hda/hdac_i915.c
index c9af022676c2..0659bf389489 100644
--- a/sound/hda/hdac_i915.c
+++ b/sound/hda/hdac_i915.c
@@ -193,6 +193,7 @@ static int pin2port(struct hdac_device *codec, hda_nid_t pin_nid)
193 * snd_hdac_sync_audio_rate - Set N/CTS based on the sample rate 193 * snd_hdac_sync_audio_rate - Set N/CTS based on the sample rate
194 * @codec: HDA codec 194 * @codec: HDA codec
195 * @nid: the pin widget NID 195 * @nid: the pin widget NID
196 * @dev_id: device identifier
196 * @rate: the sample rate to set 197 * @rate: the sample rate to set
197 * 198 *
198 * This function is supposed to be used only by a HD-audio controller 199 * This function is supposed to be used only by a HD-audio controller
@@ -201,18 +202,20 @@ static int pin2port(struct hdac_device *codec, hda_nid_t pin_nid)
201 * This function sets N/CTS value based on the given sample rate. 202 * This function sets N/CTS value based on the given sample rate.
202 * Returns zero for success, or a negative error code. 203 * Returns zero for success, or a negative error code.
203 */ 204 */
204int snd_hdac_sync_audio_rate(struct hdac_device *codec, hda_nid_t nid, int rate) 205int snd_hdac_sync_audio_rate(struct hdac_device *codec, hda_nid_t nid,
206 int dev_id, int rate)
205{ 207{
206 struct hdac_bus *bus = codec->bus; 208 struct hdac_bus *bus = codec->bus;
207 struct i915_audio_component *acomp = bus->audio_component; 209 struct i915_audio_component *acomp = bus->audio_component;
208 int port; 210 int port, pipe;
209 211
210 if (!acomp || !acomp->ops || !acomp->ops->sync_audio_rate) 212 if (!acomp || !acomp->ops || !acomp->ops->sync_audio_rate)
211 return -ENODEV; 213 return -ENODEV;
212 port = pin2port(codec, nid); 214 port = pin2port(codec, nid);
213 if (port < 0) 215 if (port < 0)
214 return -EINVAL; 216 return -EINVAL;
215 return acomp->ops->sync_audio_rate(acomp->dev, port, rate); 217 pipe = dev_id;
218 return acomp->ops->sync_audio_rate(acomp->dev, port, pipe, rate);
216} 219}
217EXPORT_SYMBOL_GPL(snd_hdac_sync_audio_rate); 220EXPORT_SYMBOL_GPL(snd_hdac_sync_audio_rate);
218 221
@@ -220,6 +223,7 @@ EXPORT_SYMBOL_GPL(snd_hdac_sync_audio_rate);
220 * snd_hdac_acomp_get_eld - Get the audio state and ELD via component 223 * snd_hdac_acomp_get_eld - Get the audio state and ELD via component
221 * @codec: HDA codec 224 * @codec: HDA codec
222 * @nid: the pin widget NID 225 * @nid: the pin widget NID
226 * @dev_id: device identifier
223 * @audio_enabled: the pointer to store the current audio state 227 * @audio_enabled: the pointer to store the current audio state
224 * @buffer: the buffer pointer to store ELD bytes 228 * @buffer: the buffer pointer to store ELD bytes
225 * @max_bytes: the max bytes to be stored on @buffer 229 * @max_bytes: the max bytes to be stored on @buffer
@@ -236,12 +240,12 @@ EXPORT_SYMBOL_GPL(snd_hdac_sync_audio_rate);
236 * thus it may be over @max_bytes. If it's over @max_bytes, it implies 240 * thus it may be over @max_bytes. If it's over @max_bytes, it implies
237 * that only a part of ELD bytes have been fetched. 241 * that only a part of ELD bytes have been fetched.
238 */ 242 */
239int snd_hdac_acomp_get_eld(struct hdac_device *codec, hda_nid_t nid, 243int snd_hdac_acomp_get_eld(struct hdac_device *codec, hda_nid_t nid, int dev_id,
240 bool *audio_enabled, char *buffer, int max_bytes) 244 bool *audio_enabled, char *buffer, int max_bytes)
241{ 245{
242 struct hdac_bus *bus = codec->bus; 246 struct hdac_bus *bus = codec->bus;
243 struct i915_audio_component *acomp = bus->audio_component; 247 struct i915_audio_component *acomp = bus->audio_component;
244 int port; 248 int port, pipe;
245 249
246 if (!acomp || !acomp->ops || !acomp->ops->get_eld) 250 if (!acomp || !acomp->ops || !acomp->ops->get_eld)
247 return -ENODEV; 251 return -ENODEV;
@@ -249,7 +253,9 @@ int snd_hdac_acomp_get_eld(struct hdac_device *codec, hda_nid_t nid,
249 port = pin2port(codec, nid); 253 port = pin2port(codec, nid);
250 if (port < 0) 254 if (port < 0)
251 return -EINVAL; 255 return -EINVAL;
252 return acomp->ops->get_eld(acomp->dev, port, audio_enabled, 256
257 pipe = dev_id;
258 return acomp->ops->get_eld(acomp->dev, port, pipe, audio_enabled,
253 buffer, max_bytes); 259 buffer, max_bytes);
254} 260}
255EXPORT_SYMBOL_GPL(snd_hdac_acomp_get_eld); 261EXPORT_SYMBOL_GPL(snd_hdac_acomp_get_eld);
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
index 56e5204ac9c1..cf9bc042fe96 100644
--- a/sound/pci/hda/patch_hdmi.c
+++ b/sound/pci/hda/patch_hdmi.c
@@ -1485,7 +1485,7 @@ static void sync_eld_via_acomp(struct hda_codec *codec,
1485 1485
1486 mutex_lock(&per_pin->lock); 1486 mutex_lock(&per_pin->lock);
1487 eld->monitor_present = false; 1487 eld->monitor_present = false;
1488 size = snd_hdac_acomp_get_eld(&codec->core, per_pin->pin_nid, 1488 size = snd_hdac_acomp_get_eld(&codec->core, per_pin->pin_nid, -1,
1489 &eld->monitor_present, eld->eld_buffer, 1489 &eld->monitor_present, eld->eld_buffer,
1490 ELD_MAX_SIZE); 1490 ELD_MAX_SIZE);
1491 if (size > 0) { 1491 if (size > 0) {
@@ -1744,7 +1744,8 @@ static int generic_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
1744 /* Call sync_audio_rate to set the N/CTS/M manually if necessary */ 1744 /* Call sync_audio_rate to set the N/CTS/M manually if necessary */
1745 /* Todo: add DP1.2 MST audio support later */ 1745 /* Todo: add DP1.2 MST audio support later */
1746 if (codec_has_acomp(codec)) 1746 if (codec_has_acomp(codec))
1747 snd_hdac_sync_audio_rate(&codec->core, pin_nid, runtime->rate); 1747 snd_hdac_sync_audio_rate(&codec->core, pin_nid, -1,
1748 runtime->rate);
1748 1749
1749 non_pcm = check_non_pcm_per_cvt(codec, cvt_nid); 1750 non_pcm = check_non_pcm_per_cvt(codec, cvt_nid);
1750 mutex_lock(&per_pin->lock); 1751 mutex_lock(&per_pin->lock);
@@ -2290,7 +2291,7 @@ static void haswell_set_power_state(struct hda_codec *codec, hda_nid_t fg,
2290 snd_hda_codec_set_power_to_all(codec, fg, power_state); 2291 snd_hda_codec_set_power_to_all(codec, fg, power_state);
2291} 2292}
2292 2293
2293static void intel_pin_eld_notify(void *audio_ptr, int port) 2294static void intel_pin_eld_notify(void *audio_ptr, int port, int pipe)
2294{ 2295{
2295 struct hda_codec *codec = audio_ptr; 2296 struct hda_codec *codec = audio_ptr;
2296 int pin_nid; 2297 int pin_nid;
diff --git a/sound/soc/codecs/hdac_hdmi.c b/sound/soc/codecs/hdac_hdmi.c
index 4e181b270d95..dc0129b75a4b 100644
--- a/sound/soc/codecs/hdac_hdmi.c
+++ b/sound/soc/codecs/hdac_hdmi.c
@@ -1368,7 +1368,7 @@ static int hdac_hdmi_parse_and_map_nid(struct hdac_ext_device *edev,
1368 return hdac_hdmi_init_dai_map(edev); 1368 return hdac_hdmi_init_dai_map(edev);
1369} 1369}
1370 1370
1371static void hdac_hdmi_eld_notify_cb(void *aptr, int port) 1371static void hdac_hdmi_eld_notify_cb(void *aptr, int port, int pipe)
1372{ 1372{
1373 struct hdac_ext_device *edev = aptr; 1373 struct hdac_ext_device *edev = aptr;
1374 struct hdac_hdmi_priv *hdmi = edev->private_data; 1374 struct hdac_hdmi_priv *hdmi = edev->private_data;