diff options
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_audio.c | 94 | ||||
-rw-r--r-- | include/drm/i915_component.h | 6 | ||||
-rw-r--r-- | include/sound/hda_i915.h | 11 | ||||
-rw-r--r-- | sound/hda/hdac_i915.c | 18 | ||||
-rw-r--r-- | sound/pci/hda/patch_hdmi.c | 7 | ||||
-rw-r--r-- | sound/soc/codecs/hdac_hdmi.c | 2 |
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 | ||
624 | static int i915_audio_component_sync_audio_rate(struct device *kdev, | 638 | static 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 | |||
664 | static 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 | ||
699 | static int i915_audio_component_get_eld(struct device *kdev, int port, | 733 | static 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 @@ | |||
10 | int snd_hdac_set_codec_wakeup(struct hdac_bus *bus, bool enable); | 10 | int snd_hdac_set_codec_wakeup(struct hdac_bus *bus, bool enable); |
11 | int snd_hdac_display_power(struct hdac_bus *bus, bool enable); | 11 | int snd_hdac_display_power(struct hdac_bus *bus, bool enable); |
12 | void snd_hdac_i915_set_bclk(struct hdac_bus *bus); | 12 | void snd_hdac_i915_set_bclk(struct hdac_bus *bus); |
13 | int snd_hdac_sync_audio_rate(struct hdac_device *codec, hda_nid_t nid, int rate); | 13 | int snd_hdac_sync_audio_rate(struct hdac_device *codec, hda_nid_t nid, |
14 | int snd_hdac_acomp_get_eld(struct hdac_device *codec, hda_nid_t nid, | 14 | int dev_id, int rate); |
15 | int 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); |
16 | int snd_hdac_i915_init(struct hdac_bus *bus); | 17 | int snd_hdac_i915_init(struct hdac_bus *bus); |
17 | int snd_hdac_i915_exit(struct hdac_bus *bus); | 18 | int 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 | } |
31 | static inline int snd_hdac_sync_audio_rate(struct hdac_device *codec, | 32 | static 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 | } |
36 | static inline int snd_hdac_acomp_get_eld(struct hdac_device *codec, hda_nid_t nid, | 37 | static 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 | */ |
204 | int snd_hdac_sync_audio_rate(struct hdac_device *codec, hda_nid_t nid, int rate) | 205 | int 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 | } |
217 | EXPORT_SYMBOL_GPL(snd_hdac_sync_audio_rate); | 220 | EXPORT_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 | */ |
239 | int snd_hdac_acomp_get_eld(struct hdac_device *codec, hda_nid_t nid, | 243 | int 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 | } |
255 | EXPORT_SYMBOL_GPL(snd_hdac_acomp_get_eld); | 261 | EXPORT_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 | ||
2293 | static void intel_pin_eld_notify(void *audio_ptr, int port) | 2294 | static 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 | ||
1371 | static void hdac_hdmi_eld_notify_cb(void *aptr, int port) | 1371 | static 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; |