ALSA: hda - allow codecs to access the i915 pin/ELD callback
authorDavid Henningsson <david.henningsson@canonical.com>
Wed, 19 Aug 2015 08:48:57 +0000 (10:48 +0200)
committerTakashi Iwai <tiwai@suse.de>
Wed, 2 Sep 2015 10:23:55 +0000 (12:23 +0200)
This lets the interested codec be notified when an i915 pin/ELD
event happens.

[tiwai: Fixed a trivial build error for CONFIG_SND_HDA_I915=n]

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/sound/hda_i915.h
sound/hda/hdac_i915.c

index adb5ba5..a5b5cae 100644 (file)
@@ -4,12 +4,15 @@
 #ifndef __SOUND_HDA_I915_H
 #define __SOUND_HDA_I915_H
 
+#include <drm/i915_component.h>
+
 #ifdef CONFIG_SND_HDA_I915
 int snd_hdac_set_codec_wakeup(struct hdac_bus *bus, bool enable);
 int snd_hdac_display_power(struct hdac_bus *bus, bool enable);
 int snd_hdac_get_display_clk(struct hdac_bus *bus);
 int snd_hdac_i915_init(struct hdac_bus *bus);
 int snd_hdac_i915_exit(struct hdac_bus *bus);
+int snd_hdac_i915_register_notifier(const struct i915_audio_component_audio_ops *);
 #else
 static int snd_hdac_set_codec_wakeup(struct hdac_bus *bus, bool enable)
 {
@@ -31,6 +34,10 @@ static inline int snd_hdac_i915_exit(struct hdac_bus *bus)
 {
        return 0;
 }
+static inline int snd_hdac_i915_register_notifier(const struct i915_audio_component_audio_ops *ops)
+{
+       return -ENODEV;
+}
 #endif
 
 #endif /* __SOUND_HDA_I915_H */
index 5676b84..55c3df4 100644 (file)
@@ -134,6 +134,16 @@ static int hdac_component_master_match(struct device *dev, void *data)
        return !strcmp(dev->driver->name, "i915");
 }
 
+int snd_hdac_i915_register_notifier(const struct i915_audio_component_audio_ops *aops)
+{
+       if (WARN_ON(!hdac_acomp))
+               return -ENODEV;
+
+       hdac_acomp->audio_ops = aops;
+       return 0;
+}
+EXPORT_SYMBOL_GPL(snd_hdac_i915_register_notifier);
+
 int snd_hdac_i915_init(struct hdac_bus *bus)
 {
        struct component_match *match = NULL;