All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/4] i915 to call hda driver on HDMI plug/unplug
@ 2015-08-19  8:48 David Henningsson
  2015-08-19  8:48 ` [PATCH 1/4] drm/i915: Add audio pin sense / ELD callback David Henningsson
                   ` (3 more replies)
  0 siblings, 4 replies; 19+ messages in thread
From: David Henningsson @ 2015-08-19  8:48 UTC (permalink / raw)
  To: alsa-devel, intel-gfx, jani.nikula, vinod.koul, daniel.vetter,
	tiwai, libin.yang
  Cc: David Henningsson

It's been a while since the last patch set iteration, due to me
being on vacation. But here's a new set, and I still hope that it can
make it into the next merge window.

Changes since v3 (with the person suggesting that change within parantheses):
 * Valleyview now has three pins like all the others (Libin Yang)
 * Renamed a few references from "hotplug" to "pin_eld" to reduce 
   confusion with hotplug code on the i915 side (Jani Nikula)
 * Rewrote the dispatching from hda core to codec on the hda side (Takashi Iwai)

This iteration has been tested and working on one Skylake machine.

David Henningsson (4):
  drm/i915: Add audio pin sense / ELD callback
  drm/i915: Call audio pin/ELD notify function
  ALSA: hda - allow codecs to access the i915 pin/ELD callback
  ALSA: hda - Wake the codec up on pin/ELD notify events

 drivers/gpu/drm/i915/i915_drv.h    |  1 +
 drivers/gpu/drm/i915/intel_audio.c | 23 ++++++++++++++++++++---
 include/drm/i915_component.h       | 12 ++++++++++++
 include/sound/hda_i915.h           |  7 +++++++
 sound/hda/hdac_i915.c              | 10 ++++++++++
 sound/pci/hda/patch_hdmi.c         | 22 +++++++++++++++++++++-
 6 files changed, 71 insertions(+), 4 deletions(-)

-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH 1/4] drm/i915: Add audio pin sense / ELD callback
  2015-08-19  8:48 [PATCH v4 0/4] i915 to call hda driver on HDMI plug/unplug David Henningsson
@ 2015-08-19  8:48 ` David Henningsson
  2015-08-26  8:33   ` Daniel Vetter
  2015-08-28 12:55   ` Jani Nikula
  2015-08-19  8:48 ` [PATCH 2/4] drm/i915: Call audio pin/ELD notify function David Henningsson
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 19+ messages in thread
From: David Henningsson @ 2015-08-19  8:48 UTC (permalink / raw)
  To: alsa-devel, intel-gfx, jani.nikula, vinod.koul, daniel.vetter,
	tiwai, libin.yang
  Cc: David Henningsson

This callback will be called by the i915 driver to notify the hda
driver that its HDMI information needs to be refreshed, i e,
that audio output is now available (or unavailable) - usually as a
result of a monitor being plugged in (or unplugged).

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
---
 include/drm/i915_component.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/include/drm/i915_component.h b/include/drm/i915_component.h
index c9a8b64..ab5bde37 100644
--- a/include/drm/i915_component.h
+++ b/include/drm/i915_component.h
@@ -34,6 +34,18 @@ struct i915_audio_component {
 		void (*codec_wake_override)(struct device *, bool enable);
 		int (*get_cdclk_freq)(struct device *);
 	} *ops;
+
+	const struct i915_audio_component_audio_ops {
+		void *audio_ptr;
+		/**
+		 * Call from i915 driver, notifying the HDA driver that
+		 * pin sense and/or ELD information has changed.
+		 * @audio_ptr:		HDA driver object
+		 * @port:		Which port has changed (PORTA / PORTB / PORTC etc)
+		 * @port_mst_index:	Index within that port, for DisplayPort multistreaming
+		 */
+		void (*pin_eld_notify)(void *audio_ptr, int port, int port_mst_index);
+	} *audio_ops;
 };
 
 #endif /* _I915_COMPONENT_H_ */
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 2/4] drm/i915: Call audio pin/ELD notify function
  2015-08-19  8:48 [PATCH v4 0/4] i915 to call hda driver on HDMI plug/unplug David Henningsson
  2015-08-19  8:48 ` [PATCH 1/4] drm/i915: Add audio pin sense / ELD callback David Henningsson
@ 2015-08-19  8:48 ` David Henningsson
  2015-08-28 13:07   ` Jani Nikula
  2015-08-19  8:48 ` [PATCH 3/4] ALSA: hda - allow codecs to access the i915 pin/ELD callback David Henningsson
  2015-08-19  8:48 ` [PATCH 4/4] ALSA: hda - Wake the codec up on pin/ELD notify events David Henningsson
  3 siblings, 1 reply; 19+ messages in thread
From: David Henningsson @ 2015-08-19  8:48 UTC (permalink / raw)
  To: alsa-devel, intel-gfx, jani.nikula, vinod.koul, daniel.vetter,
	tiwai, libin.yang
  Cc: David Henningsson

When the audio codec is enabled or disabled, notify the audio driver.
This will enable the audio driver to get the notification at all times
(even when audio is in different powersave states).

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
---
 drivers/gpu/drm/i915/i915_drv.h    |  1 +
 drivers/gpu/drm/i915/intel_audio.c | 23 ++++++++++++++++++++---
 2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index fd1de45..1fc327d 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1809,6 +1809,7 @@ struct drm_i915_private {
 	struct drm_property *force_audio_property;
 
 	/* hda/i915 audio component */
+	struct i915_audio_component *audio_component;
 	bool audio_component_registered;
 
 	uint32_t hw_context_size;
diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
index 3da9b84..969835d 100644
--- a/drivers/gpu/drm/i915/intel_audio.c
+++ b/drivers/gpu/drm/i915/intel_audio.c
@@ -399,6 +399,9 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
 	struct drm_connector *connector;
 	struct drm_device *dev = encoder->dev;
 	struct drm_i915_private *dev_priv = dev->dev_private;
+	struct i915_audio_component *acomp = dev_priv->audio_component;
+	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
+	enum port port = intel_dig_port->port;
 
 	connector = drm_select_eld(encoder, mode);
 	if (!connector)
@@ -419,6 +422,9 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
 
 	if (dev_priv->display.audio_codec_enable)
 		dev_priv->display.audio_codec_enable(connector, intel_encoder, mode);
+
+	if (acomp && acomp->audio_ops && acomp->audio_ops->pin_eld_notify)
+		acomp->audio_ops->pin_eld_notify(acomp->audio_ops->audio_ptr, (int) port, 0);
 }
 
 /**
@@ -428,13 +434,20 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
  * The disable sequences must be performed before disabling the transcoder or
  * port.
  */
-void intel_audio_codec_disable(struct intel_encoder *encoder)
+void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
 {
-	struct drm_device *dev = encoder->base.dev;
+	struct drm_encoder *encoder = &intel_encoder->base;
+	struct drm_device *dev = encoder->dev;
 	struct drm_i915_private *dev_priv = dev->dev_private;
+	struct i915_audio_component *acomp = dev_priv->audio_component;
+	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
+	enum port port = intel_dig_port->port;
 
 	if (dev_priv->display.audio_codec_disable)
-		dev_priv->display.audio_codec_disable(encoder);
+		dev_priv->display.audio_codec_disable(intel_encoder);
+
+	if (acomp && acomp->audio_ops && acomp->audio_ops->pin_eld_notify)
+		acomp->audio_ops->pin_eld_notify(acomp->audio_ops->audio_ptr, (int) port, 0);
 }
 
 /**
@@ -525,12 +538,14 @@ static int i915_audio_component_bind(struct device *i915_dev,
 				     struct device *hda_dev, void *data)
 {
 	struct i915_audio_component *acomp = data;
+	struct drm_i915_private *dev_priv = dev_to_i915(i915_dev);
 
 	if (WARN_ON(acomp->ops || acomp->dev))
 		return -EEXIST;
 
 	acomp->ops = &i915_audio_component_ops;
 	acomp->dev = i915_dev;
+	dev_priv->audio_component = acomp;
 
 	return 0;
 }
@@ -539,9 +554,11 @@ static void i915_audio_component_unbind(struct device *i915_dev,
 					struct device *hda_dev, void *data)
 {
 	struct i915_audio_component *acomp = data;
+	struct drm_i915_private *dev_priv = dev_to_i915(i915_dev);
 
 	acomp->ops = NULL;
 	acomp->dev = NULL;
+	dev_priv->audio_component = NULL;
 }
 
 static const struct component_ops i915_audio_component_bind_ops = {
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 3/4] ALSA: hda - allow codecs to access the i915 pin/ELD callback
  2015-08-19  8:48 [PATCH v4 0/4] i915 to call hda driver on HDMI plug/unplug David Henningsson
  2015-08-19  8:48 ` [PATCH 1/4] drm/i915: Add audio pin sense / ELD callback David Henningsson
  2015-08-19  8:48 ` [PATCH 2/4] drm/i915: Call audio pin/ELD notify function David Henningsson
@ 2015-08-19  8:48 ` David Henningsson
  2015-08-19  8:48 ` [PATCH 4/4] ALSA: hda - Wake the codec up on pin/ELD notify events David Henningsson
  3 siblings, 0 replies; 19+ messages in thread
From: David Henningsson @ 2015-08-19  8:48 UTC (permalink / raw)
  To: alsa-devel, intel-gfx, jani.nikula, vinod.koul, daniel.vetter,
	tiwai, libin.yang
  Cc: David Henningsson

This lets the interested codec be notified when an i915 pin/ELD
event happens.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
---
 include/sound/hda_i915.h |  7 +++++++
 sound/hda/hdac_i915.c    | 10 ++++++++++
 2 files changed, 17 insertions(+)

diff --git a/include/sound/hda_i915.h b/include/sound/hda_i915.h
index adb5ba5..a0a1d67 100644
--- a/include/sound/hda_i915.h
+++ b/include/sound/hda_i915.h
@@ -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 *)
+{
+	return -ENODEV;
+}
 #endif
 
 #endif /* __SOUND_HDA_I915_H */
diff --git a/sound/hda/hdac_i915.c b/sound/hda/hdac_i915.c
index 5676b84..55c3df4 100644
--- a/sound/hda/hdac_i915.c
+++ b/sound/hda/hdac_i915.c
@@ -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;
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH 4/4] ALSA: hda - Wake the codec up on pin/ELD notify events
  2015-08-19  8:48 [PATCH v4 0/4] i915 to call hda driver on HDMI plug/unplug David Henningsson
                   ` (2 preceding siblings ...)
  2015-08-19  8:48 ` [PATCH 3/4] ALSA: hda - allow codecs to access the i915 pin/ELD callback David Henningsson
@ 2015-08-19  8:48 ` David Henningsson
  2015-08-20  9:28   ` Takashi Iwai
  3 siblings, 1 reply; 19+ messages in thread
From: David Henningsson @ 2015-08-19  8:48 UTC (permalink / raw)
  To: alsa-devel, intel-gfx, jani.nikula, vinod.koul, daniel.vetter,
	tiwai, libin.yang
  Cc: David Henningsson

Whenever there is an event from the i915 driver, wake the codec
and recheck plug/unplug + ELD status.

This fixes the issue with lost unsol events in power save mode,
the codec and controller can now sleep in D3 and still know when
the HDMI monitor has been connected.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
---
 sound/pci/hda/patch_hdmi.c | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
index a97db5f..932292c 100644
--- a/sound/pci/hda/patch_hdmi.c
+++ b/sound/pci/hda/patch_hdmi.c
@@ -37,6 +37,8 @@
 #include <sound/jack.h>
 #include <sound/asoundef.h>
 #include <sound/tlv.h>
+#include <sound/hdaudio.h>
+#include <sound/hda_i915.h>
 #include "hda_codec.h"
 #include "hda_local.h"
 #include "hda_jack.h"
@@ -144,6 +146,9 @@ struct hdmi_spec {
 	 */
 	struct hda_multi_out multiout;
 	struct hda_pcm_stream pcm_playback;
+
+	/* i915/powerwell (Haswell+/Valleyview+) specific */
+	struct i915_audio_component_audio_ops i915_audio_ops;
 };
 
 
@@ -2191,6 +2196,9 @@ static void generic_hdmi_free(struct hda_codec *codec)
 	struct hdmi_spec *spec = codec->spec;
 	int pin_idx;
 
+	if (is_haswell_plus(codec) || is_valleyview_plus(codec))
+		snd_hdac_i915_register_notifier(NULL);
+
 	for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) {
 		struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
 
@@ -2316,6 +2324,14 @@ static void haswell_set_power_state(struct hda_codec *codec, hda_nid_t fg,
 	snd_hda_codec_set_power_to_all(codec, fg, power_state);
 }
 
+static void intel_pin_eld_notify(void *audio_ptr, int port, int port_mst_index)
+{
+	struct hda_codec *codec = audio_ptr;
+	int pin_nid = port + 0x04;
+
+	check_presence_and_report(codec, pin_nid);
+}
+
 static int patch_generic_hdmi(struct hda_codec *codec)
 {
 	struct hdmi_spec *spec;
@@ -2342,8 +2358,12 @@ static int patch_generic_hdmi(struct hda_codec *codec)
 	if (is_valleyview_plus(codec) || is_skylake(codec))
 		codec->core.link_power_control = 1;
 
-	if (is_haswell_plus(codec) || is_valleyview_plus(codec))
+	if (is_haswell_plus(codec) || is_valleyview_plus(codec)) {
 		codec->depop_delay = 0;
+		spec->i915_audio_ops.audio_ptr = codec;
+		spec->i915_audio_ops.pin_eld_notify = intel_pin_eld_notify;
+		snd_hdac_i915_register_notifier(&spec->i915_audio_ops);
+	}
 
 	if (hdmi_parse_codec(codec) < 0) {
 		codec->spec = NULL;
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH 4/4] ALSA: hda - Wake the codec up on pin/ELD notify events
  2015-08-19  8:48 ` [PATCH 4/4] ALSA: hda - Wake the codec up on pin/ELD notify events David Henningsson
@ 2015-08-20  9:28   ` Takashi Iwai
  2015-08-20  9:41     ` David Henningsson
  0 siblings, 1 reply; 19+ messages in thread
From: Takashi Iwai @ 2015-08-20  9:28 UTC (permalink / raw)
  To: David Henningsson; +Cc: alsa-devel, vinod.koul, intel-gfx, daniel.vetter

On Wed, 19 Aug 2015 10:48:58 +0200,
David Henningsson wrote:
> 
> Whenever there is an event from the i915 driver, wake the codec
> and recheck plug/unplug + ELD status.
> 
> This fixes the issue with lost unsol events in power save mode,
> the codec and controller can now sleep in D3 and still know when
> the HDMI monitor has been connected.
> 
> Signed-off-by: David Henningsson <david.henningsson@canonical.com>

This addition looks fine, but then we'll get double notification for
the normal hotplug/unplug, one via component ops and another via unsol
event?


thanks,

Takashi

> ---
>  sound/pci/hda/patch_hdmi.c | 22 +++++++++++++++++++++-
>  1 file changed, 21 insertions(+), 1 deletion(-)
> 
> diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
> index a97db5f..932292c 100644
> --- a/sound/pci/hda/patch_hdmi.c
> +++ b/sound/pci/hda/patch_hdmi.c
> @@ -37,6 +37,8 @@
>  #include <sound/jack.h>
>  #include <sound/asoundef.h>
>  #include <sound/tlv.h>
> +#include <sound/hdaudio.h>
> +#include <sound/hda_i915.h>
>  #include "hda_codec.h"
>  #include "hda_local.h"
>  #include "hda_jack.h"
> @@ -144,6 +146,9 @@ struct hdmi_spec {
>  	 */
>  	struct hda_multi_out multiout;
>  	struct hda_pcm_stream pcm_playback;
> +
> +	/* i915/powerwell (Haswell+/Valleyview+) specific */
> +	struct i915_audio_component_audio_ops i915_audio_ops;
>  };
>  
>  
> @@ -2191,6 +2196,9 @@ static void generic_hdmi_free(struct hda_codec *codec)
>  	struct hdmi_spec *spec = codec->spec;
>  	int pin_idx;
>  
> +	if (is_haswell_plus(codec) || is_valleyview_plus(codec))
> +		snd_hdac_i915_register_notifier(NULL);
> +
>  	for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) {
>  		struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
>  
> @@ -2316,6 +2324,14 @@ static void haswell_set_power_state(struct hda_codec *codec, hda_nid_t fg,
>  	snd_hda_codec_set_power_to_all(codec, fg, power_state);
>  }
>  
> +static void intel_pin_eld_notify(void *audio_ptr, int port, int port_mst_index)
> +{
> +	struct hda_codec *codec = audio_ptr;
> +	int pin_nid = port + 0x04;
> +
> +	check_presence_and_report(codec, pin_nid);
> +}
> +
>  static int patch_generic_hdmi(struct hda_codec *codec)
>  {
>  	struct hdmi_spec *spec;
> @@ -2342,8 +2358,12 @@ static int patch_generic_hdmi(struct hda_codec *codec)
>  	if (is_valleyview_plus(codec) || is_skylake(codec))
>  		codec->core.link_power_control = 1;
>  
> -	if (is_haswell_plus(codec) || is_valleyview_plus(codec))
> +	if (is_haswell_plus(codec) || is_valleyview_plus(codec)) {
>  		codec->depop_delay = 0;
> +		spec->i915_audio_ops.audio_ptr = codec;
> +		spec->i915_audio_ops.pin_eld_notify = intel_pin_eld_notify;
> +		snd_hdac_i915_register_notifier(&spec->i915_audio_ops);
> +	}
>  
>  	if (hdmi_parse_codec(codec) < 0) {
>  		codec->spec = NULL;
> -- 
> 1.9.1
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4/4] ALSA: hda - Wake the codec up on pin/ELD notify events
  2015-08-20  9:28   ` Takashi Iwai
@ 2015-08-20  9:41     ` David Henningsson
  2015-08-20  9:46       ` Takashi Iwai
  0 siblings, 1 reply; 19+ messages in thread
From: David Henningsson @ 2015-08-20  9:41 UTC (permalink / raw)
  To: Takashi Iwai; +Cc: alsa-devel, vinod.koul, intel-gfx, daniel.vetter



On 2015-08-20 11:28, Takashi Iwai wrote:
> On Wed, 19 Aug 2015 10:48:58 +0200,
> David Henningsson wrote:
>>
>> Whenever there is an event from the i915 driver, wake the codec
>> and recheck plug/unplug + ELD status.
>>
>> This fixes the issue with lost unsol events in power save mode,
>> the codec and controller can now sleep in D3 and still know when
>> the HDMI monitor has been connected.
>>
>> Signed-off-by: David Henningsson <david.henningsson@canonical.com>
>
> This addition looks fine, but then we'll get double notification for
> the normal hotplug/unplug, one via component ops and another via unsol
> event?

Right, in case the unsol event actually works...

I would argue that the normal case would be that the controller and 
codec is in D3 which means that the unsol event never gets through - due 
to hw limitations - which is what triggered this patch set in the first 
place.

But yes, in some case we might get double notification, but this should 
not cause any trouble in practice. The unsol event could be turned off, 
but would it be okay to save that for a later patch set (so I don't miss 
the upcoming merge window)?

>
>
> thanks,
>
> Takashi
>
>> ---
>>   sound/pci/hda/patch_hdmi.c | 22 +++++++++++++++++++++-
>>   1 file changed, 21 insertions(+), 1 deletion(-)
>>
>> diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
>> index a97db5f..932292c 100644
>> --- a/sound/pci/hda/patch_hdmi.c
>> +++ b/sound/pci/hda/patch_hdmi.c
>> @@ -37,6 +37,8 @@
>>   #include <sound/jack.h>
>>   #include <sound/asoundef.h>
>>   #include <sound/tlv.h>
>> +#include <sound/hdaudio.h>
>> +#include <sound/hda_i915.h>
>>   #include "hda_codec.h"
>>   #include "hda_local.h"
>>   #include "hda_jack.h"
>> @@ -144,6 +146,9 @@ struct hdmi_spec {
>>   	 */
>>   	struct hda_multi_out multiout;
>>   	struct hda_pcm_stream pcm_playback;
>> +
>> +	/* i915/powerwell (Haswell+/Valleyview+) specific */
>> +	struct i915_audio_component_audio_ops i915_audio_ops;
>>   };
>>
>>
>> @@ -2191,6 +2196,9 @@ static void generic_hdmi_free(struct hda_codec *codec)
>>   	struct hdmi_spec *spec = codec->spec;
>>   	int pin_idx;
>>
>> +	if (is_haswell_plus(codec) || is_valleyview_plus(codec))
>> +		snd_hdac_i915_register_notifier(NULL);
>> +
>>   	for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) {
>>   		struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
>>
>> @@ -2316,6 +2324,14 @@ static void haswell_set_power_state(struct hda_codec *codec, hda_nid_t fg,
>>   	snd_hda_codec_set_power_to_all(codec, fg, power_state);
>>   }
>>
>> +static void intel_pin_eld_notify(void *audio_ptr, int port, int port_mst_index)
>> +{
>> +	struct hda_codec *codec = audio_ptr;
>> +	int pin_nid = port + 0x04;
>> +
>> +	check_presence_and_report(codec, pin_nid);
>> +}
>> +
>>   static int patch_generic_hdmi(struct hda_codec *codec)
>>   {
>>   	struct hdmi_spec *spec;
>> @@ -2342,8 +2358,12 @@ static int patch_generic_hdmi(struct hda_codec *codec)
>>   	if (is_valleyview_plus(codec) || is_skylake(codec))
>>   		codec->core.link_power_control = 1;
>>
>> -	if (is_haswell_plus(codec) || is_valleyview_plus(codec))
>> +	if (is_haswell_plus(codec) || is_valleyview_plus(codec)) {
>>   		codec->depop_delay = 0;
>> +		spec->i915_audio_ops.audio_ptr = codec;
>> +		spec->i915_audio_ops.pin_eld_notify = intel_pin_eld_notify;
>> +		snd_hdac_i915_register_notifier(&spec->i915_audio_ops);
>> +	}
>>
>>   	if (hdmi_parse_codec(codec) < 0) {
>>   		codec->spec = NULL;
>> --
>> 1.9.1
>>
>

-- 
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4/4] ALSA: hda - Wake the codec up on pin/ELD notify events
  2015-08-20  9:41     ` David Henningsson
@ 2015-08-20  9:46       ` Takashi Iwai
  2015-08-28 13:10         ` Jani Nikula
  0 siblings, 1 reply; 19+ messages in thread
From: Takashi Iwai @ 2015-08-20  9:46 UTC (permalink / raw)
  To: David Henningsson; +Cc: alsa-devel, vinod.koul, intel-gfx, daniel.vetter

On Thu, 20 Aug 2015 11:41:42 +0200,
David Henningsson wrote:
> 
> 
> 
> On 2015-08-20 11:28, Takashi Iwai wrote:
> > On Wed, 19 Aug 2015 10:48:58 +0200,
> > David Henningsson wrote:
> >>
> >> Whenever there is an event from the i915 driver, wake the codec
> >> and recheck plug/unplug + ELD status.
> >>
> >> This fixes the issue with lost unsol events in power save mode,
> >> the codec and controller can now sleep in D3 and still know when
> >> the HDMI monitor has been connected.
> >>
> >> Signed-off-by: David Henningsson <david.henningsson@canonical.com>
> >
> > This addition looks fine, but then we'll get double notification for
> > the normal hotplug/unplug, one via component ops and another via unsol
> > event?
> 
> Right, in case the unsol event actually works...
> 
> I would argue that the normal case would be that the controller and 
> codec is in D3 which means that the unsol event never gets through - due 
> to hw limitations - which is what triggered this patch set in the first 
> place.
> 
> But yes, in some case we might get double notification, but this should 
> not cause any trouble in practice. The unsol event could be turned off, 
> but would it be okay to save that for a later patch set (so I don't miss 
> the upcoming merge window)?

In that case, it should be mentioned in the changelog at least.

This series came a bit too late for the merge window, so I'm not sure
whether this can get in.  I personally find it OK, so take my ack for
ALSA parts (patch 3/4), but the rest need review and ack from i915
guys.  And we don't know who to merge this, if any.  The changes are
almost even to i915 and hda.  I don't mind either way, via drm or
sound tree.

In anyway,
   Reviewed-by: Takashi Iwai <tiwai@suse.de>


thanks,

Takashi

> >
> >
> > thanks,
> >
> > Takashi
> >
> >> ---
> >>   sound/pci/hda/patch_hdmi.c | 22 +++++++++++++++++++++-
> >>   1 file changed, 21 insertions(+), 1 deletion(-)
> >>
> >> diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
> >> index a97db5f..932292c 100644
> >> --- a/sound/pci/hda/patch_hdmi.c
> >> +++ b/sound/pci/hda/patch_hdmi.c
> >> @@ -37,6 +37,8 @@
> >>   #include <sound/jack.h>
> >>   #include <sound/asoundef.h>
> >>   #include <sound/tlv.h>
> >> +#include <sound/hdaudio.h>
> >> +#include <sound/hda_i915.h>
> >>   #include "hda_codec.h"
> >>   #include "hda_local.h"
> >>   #include "hda_jack.h"
> >> @@ -144,6 +146,9 @@ struct hdmi_spec {
> >>   	 */
> >>   	struct hda_multi_out multiout;
> >>   	struct hda_pcm_stream pcm_playback;
> >> +
> >> +	/* i915/powerwell (Haswell+/Valleyview+) specific */
> >> +	struct i915_audio_component_audio_ops i915_audio_ops;
> >>   };
> >>
> >>
> >> @@ -2191,6 +2196,9 @@ static void generic_hdmi_free(struct hda_codec *codec)
> >>   	struct hdmi_spec *spec = codec->spec;
> >>   	int pin_idx;
> >>
> >> +	if (is_haswell_plus(codec) || is_valleyview_plus(codec))
> >> +		snd_hdac_i915_register_notifier(NULL);
> >> +
> >>   	for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) {
> >>   		struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
> >>
> >> @@ -2316,6 +2324,14 @@ static void haswell_set_power_state(struct hda_codec *codec, hda_nid_t fg,
> >>   	snd_hda_codec_set_power_to_all(codec, fg, power_state);
> >>   }
> >>
> >> +static void intel_pin_eld_notify(void *audio_ptr, int port, int port_mst_index)
> >> +{
> >> +	struct hda_codec *codec = audio_ptr;
> >> +	int pin_nid = port + 0x04;
> >> +
> >> +	check_presence_and_report(codec, pin_nid);
> >> +}
> >> +
> >>   static int patch_generic_hdmi(struct hda_codec *codec)
> >>   {
> >>   	struct hdmi_spec *spec;
> >> @@ -2342,8 +2358,12 @@ static int patch_generic_hdmi(struct hda_codec *codec)
> >>   	if (is_valleyview_plus(codec) || is_skylake(codec))
> >>   		codec->core.link_power_control = 1;
> >>
> >> -	if (is_haswell_plus(codec) || is_valleyview_plus(codec))
> >> +	if (is_haswell_plus(codec) || is_valleyview_plus(codec)) {
> >>   		codec->depop_delay = 0;
> >> +		spec->i915_audio_ops.audio_ptr = codec;
> >> +		spec->i915_audio_ops.pin_eld_notify = intel_pin_eld_notify;
> >> +		snd_hdac_i915_register_notifier(&spec->i915_audio_ops);
> >> +	}
> >>
> >>   	if (hdmi_parse_codec(codec) < 0) {
> >>   		codec->spec = NULL;
> >> --
> >> 1.9.1
> >>
> >
> 
> -- 
> David Henningsson, Canonical Ltd.
> https://launchpad.net/~diwic
> 
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/4] drm/i915: Add audio pin sense / ELD callback
  2015-08-19  8:48 ` [PATCH 1/4] drm/i915: Add audio pin sense / ELD callback David Henningsson
@ 2015-08-26  8:33   ` Daniel Vetter
  2015-08-26 18:39     ` [alsa-devel] " David Henningsson
  2015-08-28 12:55   ` Jani Nikula
  1 sibling, 1 reply; 19+ messages in thread
From: Daniel Vetter @ 2015-08-26  8:33 UTC (permalink / raw)
  To: David Henningsson; +Cc: alsa-devel, vinod.koul, intel-gfx, tiwai, daniel.vetter

On Wed, Aug 19, 2015 at 10:48:55AM +0200, David Henningsson wrote:
> This callback will be called by the i915 driver to notify the hda
> driver that its HDMI information needs to be refreshed, i e,
> that audio output is now available (or unavailable) - usually as a
> result of a monitor being plugged in (or unplugged).
> 
> Signed-off-by: David Henningsson <david.henningsson@canonical.com>
> ---
>  include/drm/i915_component.h | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/include/drm/i915_component.h b/include/drm/i915_component.h
> index c9a8b64..ab5bde37 100644
> --- a/include/drm/i915_component.h
> +++ b/include/drm/i915_component.h
> @@ -34,6 +34,18 @@ struct i915_audio_component {
>  		void (*codec_wake_override)(struct device *, bool enable);
>  		int (*get_cdclk_freq)(struct device *);
>  	} *ops;
> +
> +	const struct i915_audio_component_audio_ops {
> +		void *audio_ptr;
> +		/**
> +		 * Call from i915 driver, notifying the HDA driver that
> +		 * pin sense and/or ELD information has changed.
> +		 * @audio_ptr:		HDA driver object
> +		 * @port:		Which port has changed (PORTA / PORTB / PORTC etc)
> +		 * @port_mst_index:	Index within that port, for DisplayPort multistreaming
> +		 */
> +		void (*pin_eld_notify)(void *audio_ptr, int port, int port_mst_index);
> +	} *audio_ops;

This won't work as proper kerneldoc, but you get away with it since it's
not pulled into the drm.tmpl. See my comments for the new set_audio_rate
callback.
-Daniel

>  };
>  
>  #endif /* _I915_COMPONENT_H_ */
> -- 
> 1.9.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [alsa-devel] [PATCH 1/4] drm/i915: Add audio pin sense / ELD callback
  2015-08-26  8:33   ` Daniel Vetter
@ 2015-08-26 18:39     ` David Henningsson
  2015-08-27 14:24       ` Jani Nikula
  0 siblings, 1 reply; 19+ messages in thread
From: David Henningsson @ 2015-08-26 18:39 UTC (permalink / raw)
  To: Daniel Vetter; +Cc: alsa-devel, vinod.koul, intel-gfx, tiwai, daniel.vetter



On 2015-08-26 10:33, Daniel Vetter wrote:
> On Wed, Aug 19, 2015 at 10:48:55AM +0200, David Henningsson wrote:
>> This callback will be called by the i915 driver to notify the hda
>> driver that its HDMI information needs to be refreshed, i e,
>> that audio output is now available (or unavailable) - usually as a
>> result of a monitor being plugged in (or unplugged).
>>
>> Signed-off-by: David Henningsson <david.henningsson@canonical.com>
>> ---
>>   include/drm/i915_component.h | 12 ++++++++++++
>>   1 file changed, 12 insertions(+)
>>
>> diff --git a/include/drm/i915_component.h b/include/drm/i915_component.h
>> index c9a8b64..ab5bde37 100644
>> --- a/include/drm/i915_component.h
>> +++ b/include/drm/i915_component.h
>> @@ -34,6 +34,18 @@ struct i915_audio_component {
>>   		void (*codec_wake_override)(struct device *, bool enable);
>>   		int (*get_cdclk_freq)(struct device *);
>>   	} *ops;
>> +
>> +	const struct i915_audio_component_audio_ops {
>> +		void *audio_ptr;
>> +		/**
>> +		 * Call from i915 driver, notifying the HDA driver that
>> +		 * pin sense and/or ELD information has changed.
>> +		 * @audio_ptr:		HDA driver object
>> +		 * @port:		Which port has changed (PORTA / PORTB / PORTC etc)
>> +		 * @port_mst_index:	Index within that port, for DisplayPort multistreaming
>> +		 */
>> +		void (*pin_eld_notify)(void *audio_ptr, int port, int port_mst_index);
>> +	} *audio_ops;
>
> This won't work as proper kerneldoc, but you get away with it since it's
> not pulled into the drm.tmpl. See my comments for the new set_audio_rate
> callback.

Sorry, my google failed me, so I can't find your comments for the 
set_audio_rate callback.

Apart from the kerneldoc issue, are you okay with acking the patch, at 
least the first two i915 ones, and agree with Takashi which tree this 
should go through?

-- 
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [alsa-devel] [PATCH 1/4] drm/i915: Add audio pin sense / ELD callback
  2015-08-26 18:39     ` [alsa-devel] " David Henningsson
@ 2015-08-27 14:24       ` Jani Nikula
  0 siblings, 0 replies; 19+ messages in thread
From: Jani Nikula @ 2015-08-27 14:24 UTC (permalink / raw)
  To: David Henningsson, Daniel Vetter
  Cc: alsa-devel, vinod.koul, intel-gfx, tiwai, daniel.vetter

On Wed, 26 Aug 2015, David Henningsson <david.henningsson@canonical.com> wrote:
> On 2015-08-26 10:33, Daniel Vetter wrote:
>> On Wed, Aug 19, 2015 at 10:48:55AM +0200, David Henningsson wrote:
>>> This callback will be called by the i915 driver to notify the hda
>>> driver that its HDMI information needs to be refreshed, i e,
>>> that audio output is now available (or unavailable) - usually as a
>>> result of a monitor being plugged in (or unplugged).
>>>
>>> Signed-off-by: David Henningsson <david.henningsson@canonical.com>
>>> ---
>>>   include/drm/i915_component.h | 12 ++++++++++++
>>>   1 file changed, 12 insertions(+)
>>>
>>> diff --git a/include/drm/i915_component.h b/include/drm/i915_component.h
>>> index c9a8b64..ab5bde37 100644
>>> --- a/include/drm/i915_component.h
>>> +++ b/include/drm/i915_component.h
>>> @@ -34,6 +34,18 @@ struct i915_audio_component {
>>>   		void (*codec_wake_override)(struct device *, bool enable);
>>>   		int (*get_cdclk_freq)(struct device *);
>>>   	} *ops;
>>> +
>>> +	const struct i915_audio_component_audio_ops {
>>> +		void *audio_ptr;
>>> +		/**
>>> +		 * Call from i915 driver, notifying the HDA driver that
>>> +		 * pin sense and/or ELD information has changed.
>>> +		 * @audio_ptr:		HDA driver object
>>> +		 * @port:		Which port has changed (PORTA / PORTB / PORTC etc)
>>> +		 * @port_mst_index:	Index within that port, for DisplayPort multistreaming
>>> +		 */
>>> +		void (*pin_eld_notify)(void *audio_ptr, int port, int port_mst_index);
>>> +	} *audio_ops;
>>
>> This won't work as proper kerneldoc, but you get away with it since it's
>> not pulled into the drm.tmpl. See my comments for the new set_audio_rate
>> callback.
>
> Sorry, my google failed me, so I can't find your comments for the 
> set_audio_rate callback.

It's on the related thread [1], specifically the subthread starting at
[2]. I guess there's no direct overlap between the two series, but it
would be helpful if you can look at each other's work so there's no
surprises.

BR,
Jani.


[1] http://mid.gmane.org/1439880714-40931-1-git-send-email-libin.yang@intel.com
[2] http://mid.gmane.org/20150826081735.GZ20434@phenom.ffwll.local

>
> Apart from the kerneldoc issue, are you okay with acking the patch, at 
> least the first two i915 ones, and agree with Takashi which tree this 
> should go through?
>
> -- 
> David Henningsson, Canonical Ltd.
> https://launchpad.net/~diwic

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 1/4] drm/i915: Add audio pin sense / ELD callback
  2015-08-19  8:48 ` [PATCH 1/4] drm/i915: Add audio pin sense / ELD callback David Henningsson
  2015-08-26  8:33   ` Daniel Vetter
@ 2015-08-28 12:55   ` Jani Nikula
  1 sibling, 0 replies; 19+ messages in thread
From: Jani Nikula @ 2015-08-28 12:55 UTC (permalink / raw)
  To: alsa-devel, intel-gfx, vinod.koul, daniel.vetter, tiwai, libin.yang
  Cc: David Henningsson

On Wed, 19 Aug 2015, David Henningsson <david.henningsson@canonical.com> wrote:
> This callback will be called by the i915 driver to notify the hda
> driver that its HDMI information needs to be refreshed, i e,
> that audio output is now available (or unavailable) - usually as a
> result of a monitor being plugged in (or unplugged).
>
> Signed-off-by: David Henningsson <david.henningsson@canonical.com>
> ---
>  include/drm/i915_component.h | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
>
> diff --git a/include/drm/i915_component.h b/include/drm/i915_component.h
> index c9a8b64..ab5bde37 100644
> --- a/include/drm/i915_component.h
> +++ b/include/drm/i915_component.h
> @@ -34,6 +34,18 @@ struct i915_audio_component {
>  		void (*codec_wake_override)(struct device *, bool enable);
>  		int (*get_cdclk_freq)(struct device *);
>  	} *ops;
> +
> +	const struct i915_audio_component_audio_ops {
> +		void *audio_ptr;
> +		/**
> +		 * Call from i915 driver, notifying the HDA driver that
> +		 * pin sense and/or ELD information has changed.
> +		 * @audio_ptr:		HDA driver object
> +		 * @port:		Which port has changed (PORTA / PORTB / PORTC etc)
> +		 * @port_mst_index:	Index within that port, for DisplayPort multistreaming
> +		 */
> +		void (*pin_eld_notify)(void *audio_ptr, int port, int port_mst_index);

In the HDMI sample rate notification series [1] I explicitly asked Libin
to drop a similar port_mst_index parameter since we don't use it yet,
and we are not sure what to stick there yet. Indeed not having it now
enforces us to change the API and check for each call site when enabling
MST audio.

Other than that,

Reviewed-by: Jani Nikula <jani.nikula@intel.com>



[1] http://mid.gmane.org/1439880714-40931-1-git-send-email-libin.yang@intel.com

> +	} *audio_ops;
>  };
>  
>  #endif /* _I915_COMPONENT_H_ */
> -- 
> 1.9.1
>

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 2/4] drm/i915: Call audio pin/ELD notify function
  2015-08-19  8:48 ` [PATCH 2/4] drm/i915: Call audio pin/ELD notify function David Henningsson
@ 2015-08-28 13:07   ` Jani Nikula
  2015-08-28 13:15     ` David Henningsson
  0 siblings, 1 reply; 19+ messages in thread
From: Jani Nikula @ 2015-08-28 13:07 UTC (permalink / raw)
  To: alsa-devel, intel-gfx, vinod.koul, daniel.vetter, tiwai, libin.yang
  Cc: David Henningsson

On Wed, 19 Aug 2015, David Henningsson <david.henningsson@canonical.com> wrote:
> When the audio codec is enabled or disabled, notify the audio driver.
> This will enable the audio driver to get the notification at all times
> (even when audio is in different powersave states).
>
> Signed-off-by: David Henningsson <david.henningsson@canonical.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h    |  1 +
>  drivers/gpu/drm/i915/intel_audio.c | 23 ++++++++++++++++++++---
>  2 files changed, 21 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index fd1de45..1fc327d 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1809,6 +1809,7 @@ struct drm_i915_private {
>  	struct drm_property *force_audio_property;
>  
>  	/* hda/i915 audio component */
> +	struct i915_audio_component *audio_component;
>  	bool audio_component_registered;
>  
>  	uint32_t hw_context_size;
> diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
> index 3da9b84..969835d 100644
> --- a/drivers/gpu/drm/i915/intel_audio.c
> +++ b/drivers/gpu/drm/i915/intel_audio.c
> @@ -399,6 +399,9 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
>  	struct drm_connector *connector;
>  	struct drm_device *dev = encoder->dev;
>  	struct drm_i915_private *dev_priv = dev->dev_private;
> +	struct i915_audio_component *acomp = dev_priv->audio_component;
> +	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
> +	enum port port = intel_dig_port->port;
>  
>  	connector = drm_select_eld(encoder, mode);
>  	if (!connector)
> @@ -419,6 +422,9 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
>  
>  	if (dev_priv->display.audio_codec_enable)
>  		dev_priv->display.audio_codec_enable(connector, intel_encoder, mode);
> +
> +	if (acomp && acomp->audio_ops && acomp->audio_ops->pin_eld_notify)
> +		acomp->audio_ops->pin_eld_notify(acomp->audio_ops->audio_ptr, (int) port, 0);
>  }
>  
>  /**
> @@ -428,13 +434,20 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
>   * The disable sequences must be performed before disabling the transcoder or
>   * port.
>   */
> -void intel_audio_codec_disable(struct intel_encoder *encoder)
> +void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
>  {
> -	struct drm_device *dev = encoder->base.dev;
> +	struct drm_encoder *encoder = &intel_encoder->base;
> +	struct drm_device *dev = encoder->dev;
>  	struct drm_i915_private *dev_priv = dev->dev_private;
> +	struct i915_audio_component *acomp = dev_priv->audio_component;
> +	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
> +	enum port port = intel_dig_port->port;
>  
>  	if (dev_priv->display.audio_codec_disable)
> -		dev_priv->display.audio_codec_disable(encoder);
> +		dev_priv->display.audio_codec_disable(intel_encoder);
> +
> +	if (acomp && acomp->audio_ops && acomp->audio_ops->pin_eld_notify)
> +		acomp->audio_ops->pin_eld_notify(acomp->audio_ops->audio_ptr, (int) port, 0);

AFAICT this has a race with i915_audio_component_unbind, i.e. modeset
while hda is being unloaded might crash.

What do others think, is drm_modeset_lock_all in combonent bind/unbind
overkill?

With that resolved one way or another (I'm not dismissing "we don't need
to care") this is

Reviewed-by: Jani Nikula <jani.nikula@intel.com>


>  }
>  
>  /**
> @@ -525,12 +538,14 @@ static int i915_audio_component_bind(struct device *i915_dev,
>  				     struct device *hda_dev, void *data)
>  {
>  	struct i915_audio_component *acomp = data;
> +	struct drm_i915_private *dev_priv = dev_to_i915(i915_dev);
>  
>  	if (WARN_ON(acomp->ops || acomp->dev))
>  		return -EEXIST;
>  
>  	acomp->ops = &i915_audio_component_ops;
>  	acomp->dev = i915_dev;
> +	dev_priv->audio_component = acomp;
>  
>  	return 0;
>  }
> @@ -539,9 +554,11 @@ static void i915_audio_component_unbind(struct device *i915_dev,
>  					struct device *hda_dev, void *data)
>  {
>  	struct i915_audio_component *acomp = data;
> +	struct drm_i915_private *dev_priv = dev_to_i915(i915_dev);
>  
>  	acomp->ops = NULL;
>  	acomp->dev = NULL;
> +	dev_priv->audio_component = NULL;
>  }
>  
>  static const struct component_ops i915_audio_component_bind_ops = {
> -- 
> 1.9.1
>

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4/4] ALSA: hda - Wake the codec up on pin/ELD notify events
  2015-08-20  9:46       ` Takashi Iwai
@ 2015-08-28 13:10         ` Jani Nikula
  2015-09-02  8:00           ` Daniel Vetter
  0 siblings, 1 reply; 19+ messages in thread
From: Jani Nikula @ 2015-08-28 13:10 UTC (permalink / raw)
  To: Takashi Iwai, David Henningsson
  Cc: vinod.koul, daniel.vetter, alsa-devel, intel-gfx

On Thu, 20 Aug 2015, Takashi Iwai <tiwai@suse.de> wrote:
> On Thu, 20 Aug 2015 11:41:42 +0200,
> David Henningsson wrote:
>> 
>> 
>> 
>> On 2015-08-20 11:28, Takashi Iwai wrote:
>> > On Wed, 19 Aug 2015 10:48:58 +0200,
>> > David Henningsson wrote:
>> >>
>> >> Whenever there is an event from the i915 driver, wake the codec
>> >> and recheck plug/unplug + ELD status.
>> >>
>> >> This fixes the issue with lost unsol events in power save mode,
>> >> the codec and controller can now sleep in D3 and still know when
>> >> the HDMI monitor has been connected.
>> >>
>> >> Signed-off-by: David Henningsson <david.henningsson@canonical.com>
>> >
>> > This addition looks fine, but then we'll get double notification for
>> > the normal hotplug/unplug, one via component ops and another via unsol
>> > event?
>> 
>> Right, in case the unsol event actually works...
>> 
>> I would argue that the normal case would be that the controller and 
>> codec is in D3 which means that the unsol event never gets through - due 
>> to hw limitations - which is what triggered this patch set in the first 
>> place.
>> 
>> But yes, in some case we might get double notification, but this should 
>> not cause any trouble in practice. The unsol event could be turned off, 
>> but would it be okay to save that for a later patch set (so I don't miss 
>> the upcoming merge window)?
>
> In that case, it should be mentioned in the changelog at least.
>
> This series came a bit too late for the merge window, so I'm not sure
> whether this can get in.  I personally find it OK, so take my ack for
> ALSA parts (patch 3/4), but the rest need review and ack from i915
> guys.  And we don't know who to merge this, if any.  The changes are
> almost even to i915 and hda.  I don't mind either way, via drm or
> sound tree.

Personally I'm fine with this still going for v4.3 since to me it looks
like any regressions this might cause will be on your side. *grin*.

BR,
Jani.


>
> In anyway,
>    Reviewed-by: Takashi Iwai <tiwai@suse.de>
>
>
> thanks,
>
> Takashi
>
>> >
>> >
>> > thanks,
>> >
>> > Takashi
>> >
>> >> ---
>> >>   sound/pci/hda/patch_hdmi.c | 22 +++++++++++++++++++++-
>> >>   1 file changed, 21 insertions(+), 1 deletion(-)
>> >>
>> >> diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
>> >> index a97db5f..932292c 100644
>> >> --- a/sound/pci/hda/patch_hdmi.c
>> >> +++ b/sound/pci/hda/patch_hdmi.c
>> >> @@ -37,6 +37,8 @@
>> >>   #include <sound/jack.h>
>> >>   #include <sound/asoundef.h>
>> >>   #include <sound/tlv.h>
>> >> +#include <sound/hdaudio.h>
>> >> +#include <sound/hda_i915.h>
>> >>   #include "hda_codec.h"
>> >>   #include "hda_local.h"
>> >>   #include "hda_jack.h"
>> >> @@ -144,6 +146,9 @@ struct hdmi_spec {
>> >>   	 */
>> >>   	struct hda_multi_out multiout;
>> >>   	struct hda_pcm_stream pcm_playback;
>> >> +
>> >> +	/* i915/powerwell (Haswell+/Valleyview+) specific */
>> >> +	struct i915_audio_component_audio_ops i915_audio_ops;
>> >>   };
>> >>
>> >>
>> >> @@ -2191,6 +2196,9 @@ static void generic_hdmi_free(struct hda_codec *codec)
>> >>   	struct hdmi_spec *spec = codec->spec;
>> >>   	int pin_idx;
>> >>
>> >> +	if (is_haswell_plus(codec) || is_valleyview_plus(codec))
>> >> +		snd_hdac_i915_register_notifier(NULL);
>> >> +
>> >>   	for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) {
>> >>   		struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
>> >>
>> >> @@ -2316,6 +2324,14 @@ static void haswell_set_power_state(struct hda_codec *codec, hda_nid_t fg,
>> >>   	snd_hda_codec_set_power_to_all(codec, fg, power_state);
>> >>   }
>> >>
>> >> +static void intel_pin_eld_notify(void *audio_ptr, int port, int port_mst_index)
>> >> +{
>> >> +	struct hda_codec *codec = audio_ptr;
>> >> +	int pin_nid = port + 0x04;
>> >> +
>> >> +	check_presence_and_report(codec, pin_nid);
>> >> +}
>> >> +
>> >>   static int patch_generic_hdmi(struct hda_codec *codec)
>> >>   {
>> >>   	struct hdmi_spec *spec;
>> >> @@ -2342,8 +2358,12 @@ static int patch_generic_hdmi(struct hda_codec *codec)
>> >>   	if (is_valleyview_plus(codec) || is_skylake(codec))
>> >>   		codec->core.link_power_control = 1;
>> >>
>> >> -	if (is_haswell_plus(codec) || is_valleyview_plus(codec))
>> >> +	if (is_haswell_plus(codec) || is_valleyview_plus(codec)) {
>> >>   		codec->depop_delay = 0;
>> >> +		spec->i915_audio_ops.audio_ptr = codec;
>> >> +		spec->i915_audio_ops.pin_eld_notify = intel_pin_eld_notify;
>> >> +		snd_hdac_i915_register_notifier(&spec->i915_audio_ops);
>> >> +	}
>> >>
>> >>   	if (hdmi_parse_codec(codec) < 0) {
>> >>   		codec->spec = NULL;
>> >> --
>> >> 1.9.1
>> >>
>> >
>> 
>> -- 
>> David Henningsson, Canonical Ltd.
>> https://launchpad.net/~diwic
>> 

-- 
Jani Nikula, Intel Open Source Technology Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 2/4] drm/i915: Call audio pin/ELD notify function
  2015-08-28 13:07   ` Jani Nikula
@ 2015-08-28 13:15     ` David Henningsson
  0 siblings, 0 replies; 19+ messages in thread
From: David Henningsson @ 2015-08-28 13:15 UTC (permalink / raw)
  To: Jani Nikula, alsa-devel, intel-gfx, vinod.koul, daniel.vetter,
	tiwai, libin.yang



On 2015-08-28 15:07, Jani Nikula wrote:
> On Wed, 19 Aug 2015, David Henningsson <david.henningsson@canonical.com> wrote:
>> When the audio codec is enabled or disabled, notify the audio driver.
>> This will enable the audio driver to get the notification at all times
>> (even when audio is in different powersave states).
>>
>> Signed-off-by: David Henningsson <david.henningsson@canonical.com>
>> ---
>>   drivers/gpu/drm/i915/i915_drv.h    |  1 +
>>   drivers/gpu/drm/i915/intel_audio.c | 23 ++++++++++++++++++++---
>>   2 files changed, 21 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
>> index fd1de45..1fc327d 100644
>> --- a/drivers/gpu/drm/i915/i915_drv.h
>> +++ b/drivers/gpu/drm/i915/i915_drv.h
>> @@ -1809,6 +1809,7 @@ struct drm_i915_private {
>>   	struct drm_property *force_audio_property;
>>
>>   	/* hda/i915 audio component */
>> +	struct i915_audio_component *audio_component;
>>   	bool audio_component_registered;
>>
>>   	uint32_t hw_context_size;
>> diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
>> index 3da9b84..969835d 100644
>> --- a/drivers/gpu/drm/i915/intel_audio.c
>> +++ b/drivers/gpu/drm/i915/intel_audio.c
>> @@ -399,6 +399,9 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
>>   	struct drm_connector *connector;
>>   	struct drm_device *dev = encoder->dev;
>>   	struct drm_i915_private *dev_priv = dev->dev_private;
>> +	struct i915_audio_component *acomp = dev_priv->audio_component;
>> +	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
>> +	enum port port = intel_dig_port->port;
>>
>>   	connector = drm_select_eld(encoder, mode);
>>   	if (!connector)
>> @@ -419,6 +422,9 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
>>
>>   	if (dev_priv->display.audio_codec_enable)
>>   		dev_priv->display.audio_codec_enable(connector, intel_encoder, mode);
>> +
>> +	if (acomp && acomp->audio_ops && acomp->audio_ops->pin_eld_notify)
>> +		acomp->audio_ops->pin_eld_notify(acomp->audio_ops->audio_ptr, (int) port, 0);
>>   }
>>
>>   /**
>> @@ -428,13 +434,20 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder)
>>    * The disable sequences must be performed before disabling the transcoder or
>>    * port.
>>    */
>> -void intel_audio_codec_disable(struct intel_encoder *encoder)
>> +void intel_audio_codec_disable(struct intel_encoder *intel_encoder)
>>   {
>> -	struct drm_device *dev = encoder->base.dev;
>> +	struct drm_encoder *encoder = &intel_encoder->base;
>> +	struct drm_device *dev = encoder->dev;
>>   	struct drm_i915_private *dev_priv = dev->dev_private;
>> +	struct i915_audio_component *acomp = dev_priv->audio_component;
>> +	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
>> +	enum port port = intel_dig_port->port;
>>
>>   	if (dev_priv->display.audio_codec_disable)
>> -		dev_priv->display.audio_codec_disable(encoder);
>> +		dev_priv->display.audio_codec_disable(intel_encoder);
>> +
>> +	if (acomp && acomp->audio_ops && acomp->audio_ops->pin_eld_notify)
>> +		acomp->audio_ops->pin_eld_notify(acomp->audio_ops->audio_ptr, (int) port, 0);
>
> AFAICT this has a race with i915_audio_component_unbind, i.e. modeset
> while hda is being unloaded might crash.
>
> What do others think, is drm_modeset_lock_all in combonent bind/unbind
> overkill?

Thanks for the review(s). I'm happy to add a 
drm_modeset_lock_all/drm_modeset_unlock_all - I'm not that familiar with 
the graphics side, really, so, is there another option...?

>
> With that resolved one way or another (I'm not dismissing "we don't need
> to care") this is
>
> Reviewed-by: Jani Nikula <jani.nikula@intel.com>
>
>
>>   }
>>
>>   /**
>> @@ -525,12 +538,14 @@ static int i915_audio_component_bind(struct device *i915_dev,
>>   				     struct device *hda_dev, void *data)
>>   {
>>   	struct i915_audio_component *acomp = data;
>> +	struct drm_i915_private *dev_priv = dev_to_i915(i915_dev);
>>
>>   	if (WARN_ON(acomp->ops || acomp->dev))
>>   		return -EEXIST;
>>
>>   	acomp->ops = &i915_audio_component_ops;
>>   	acomp->dev = i915_dev;
>> +	dev_priv->audio_component = acomp;
>>
>>   	return 0;
>>   }
>> @@ -539,9 +554,11 @@ static void i915_audio_component_unbind(struct device *i915_dev,
>>   					struct device *hda_dev, void *data)
>>   {
>>   	struct i915_audio_component *acomp = data;
>> +	struct drm_i915_private *dev_priv = dev_to_i915(i915_dev);
>>
>>   	acomp->ops = NULL;
>>   	acomp->dev = NULL;
>> +	dev_priv->audio_component = NULL;
>>   }
>>
>>   static const struct component_ops i915_audio_component_bind_ops = {
>> --
>> 1.9.1
>>
>

-- 
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4/4] ALSA: hda - Wake the codec up on pin/ELD notify events
  2015-08-28 13:10         ` Jani Nikula
@ 2015-09-02  8:00           ` Daniel Vetter
  2015-09-02  8:03             ` Takashi Iwai
  0 siblings, 1 reply; 19+ messages in thread
From: Daniel Vetter @ 2015-09-02  8:00 UTC (permalink / raw)
  To: Jani Nikula
  Cc: alsa-devel, Takashi Iwai, intel-gfx, vinod.koul, daniel.vetter,
	David Henningsson

On Fri, Aug 28, 2015 at 04:10:36PM +0300, Jani Nikula wrote:
> On Thu, 20 Aug 2015, Takashi Iwai <tiwai@suse.de> wrote:
> > On Thu, 20 Aug 2015 11:41:42 +0200,
> > David Henningsson wrote:
> >> 
> >> 
> >> 
> >> On 2015-08-20 11:28, Takashi Iwai wrote:
> >> > On Wed, 19 Aug 2015 10:48:58 +0200,
> >> > David Henningsson wrote:
> >> >>
> >> >> Whenever there is an event from the i915 driver, wake the codec
> >> >> and recheck plug/unplug + ELD status.
> >> >>
> >> >> This fixes the issue with lost unsol events in power save mode,
> >> >> the codec and controller can now sleep in D3 and still know when
> >> >> the HDMI monitor has been connected.
> >> >>
> >> >> Signed-off-by: David Henningsson <david.henningsson@canonical.com>
> >> >
> >> > This addition looks fine, but then we'll get double notification for
> >> > the normal hotplug/unplug, one via component ops and another via unsol
> >> > event?
> >> 
> >> Right, in case the unsol event actually works...
> >> 
> >> I would argue that the normal case would be that the controller and 
> >> codec is in D3 which means that the unsol event never gets through - due 
> >> to hw limitations - which is what triggered this patch set in the first 
> >> place.
> >> 
> >> But yes, in some case we might get double notification, but this should 
> >> not cause any trouble in practice. The unsol event could be turned off, 
> >> but would it be okay to save that for a later patch set (so I don't miss 
> >> the upcoming merge window)?
> >
> > In that case, it should be mentioned in the changelog at least.
> >
> > This series came a bit too late for the merge window, so I'm not sure
> > whether this can get in.  I personally find it OK, so take my ack for
> > ALSA parts (patch 3/4), but the rest need review and ack from i915
> > guys.  And we don't know who to merge this, if any.  The changes are
> > almost even to i915 and hda.  I don't mind either way, via drm or
> > sound tree.
> 
> Personally I'm fine with this still going for v4.3 since to me it looks
> like any regressions this might cause will be on your side. *grin*.

The only bit I want is some decent kerneldoc for the ad-hoc growing
i915/hda-intel interfaces. But that can be done in follow-up patches and
needs to be coordinated with the audio rate handling series anyway. So ack
from my side for all getting merged through alsa trees too.
-Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4/4] ALSA: hda - Wake the codec up on pin/ELD notify events
  2015-09-02  8:00           ` Daniel Vetter
@ 2015-09-02  8:03             ` Takashi Iwai
  2015-09-02  8:32               ` Daniel Vetter
  0 siblings, 1 reply; 19+ messages in thread
From: Takashi Iwai @ 2015-09-02  8:03 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: alsa-devel, vinod.koul, intel-gfx, daniel.vetter, David Henningsson

On Wed, 02 Sep 2015 10:00:44 +0200,
Daniel Vetter wrote:
> 
> On Fri, Aug 28, 2015 at 04:10:36PM +0300, Jani Nikula wrote:
> > On Thu, 20 Aug 2015, Takashi Iwai <tiwai@suse.de> wrote:
> > > On Thu, 20 Aug 2015 11:41:42 +0200,
> > > David Henningsson wrote:
> > >> 
> > >> 
> > >> 
> > >> On 2015-08-20 11:28, Takashi Iwai wrote:
> > >> > On Wed, 19 Aug 2015 10:48:58 +0200,
> > >> > David Henningsson wrote:
> > >> >>
> > >> >> Whenever there is an event from the i915 driver, wake the codec
> > >> >> and recheck plug/unplug + ELD status.
> > >> >>
> > >> >> This fixes the issue with lost unsol events in power save mode,
> > >> >> the codec and controller can now sleep in D3 and still know when
> > >> >> the HDMI monitor has been connected.
> > >> >>
> > >> >> Signed-off-by: David Henningsson <david.henningsson@canonical.com>
> > >> >
> > >> > This addition looks fine, but then we'll get double notification for
> > >> > the normal hotplug/unplug, one via component ops and another via unsol
> > >> > event?
> > >> 
> > >> Right, in case the unsol event actually works...
> > >> 
> > >> I would argue that the normal case would be that the controller and 
> > >> codec is in D3 which means that the unsol event never gets through - due 
> > >> to hw limitations - which is what triggered this patch set in the first 
> > >> place.
> > >> 
> > >> But yes, in some case we might get double notification, but this should 
> > >> not cause any trouble in practice. The unsol event could be turned off, 
> > >> but would it be okay to save that for a later patch set (so I don't miss 
> > >> the upcoming merge window)?
> > >
> > > In that case, it should be mentioned in the changelog at least.
> > >
> > > This series came a bit too late for the merge window, so I'm not sure
> > > whether this can get in.  I personally find it OK, so take my ack for
> > > ALSA parts (patch 3/4), but the rest need review and ack from i915
> > > guys.  And we don't know who to merge this, if any.  The changes are
> > > almost even to i915 and hda.  I don't mind either way, via drm or
> > > sound tree.
> > 
> > Personally I'm fine with this still going for v4.3 since to me it looks
> > like any regressions this might cause will be on your side. *grin*.
> 
> The only bit I want is some decent kerneldoc for the ad-hoc growing
> i915/hda-intel interfaces. But that can be done in follow-up patches and
> needs to be coordinated with the audio rate handling series anyway. So ack
> from my side for all getting merged through alsa trees too.

Are you going to merge Libin's patchset?  If yes, it's better to align
both patchsets through a single tree.  It'll make merges easier, as
both touch the similar place.


thanks,

Takashi
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4/4] ALSA: hda - Wake the codec up on pin/ELD notify events
  2015-09-02  8:03             ` Takashi Iwai
@ 2015-09-02  8:32               ` Daniel Vetter
  2015-09-02  9:39                 ` Takashi Iwai
  0 siblings, 1 reply; 19+ messages in thread
From: Daniel Vetter @ 2015-09-02  8:32 UTC (permalink / raw)
  To: Takashi Iwai
  Cc: alsa-devel, vinod.koul, intel-gfx, daniel.vetter, David Henningsson

On Wed, Sep 02, 2015 at 10:03:55AM +0200, Takashi Iwai wrote:
> On Wed, 02 Sep 2015 10:00:44 +0200,
> Daniel Vetter wrote:
> > 
> > On Fri, Aug 28, 2015 at 04:10:36PM +0300, Jani Nikula wrote:
> > > On Thu, 20 Aug 2015, Takashi Iwai <tiwai@suse.de> wrote:
> > > > On Thu, 20 Aug 2015 11:41:42 +0200,
> > > > David Henningsson wrote:
> > > >> 
> > > >> 
> > > >> 
> > > >> On 2015-08-20 11:28, Takashi Iwai wrote:
> > > >> > On Wed, 19 Aug 2015 10:48:58 +0200,
> > > >> > David Henningsson wrote:
> > > >> >>
> > > >> >> Whenever there is an event from the i915 driver, wake the codec
> > > >> >> and recheck plug/unplug + ELD status.
> > > >> >>
> > > >> >> This fixes the issue with lost unsol events in power save mode,
> > > >> >> the codec and controller can now sleep in D3 and still know when
> > > >> >> the HDMI monitor has been connected.
> > > >> >>
> > > >> >> Signed-off-by: David Henningsson <david.henningsson@canonical.com>
> > > >> >
> > > >> > This addition looks fine, but then we'll get double notification for
> > > >> > the normal hotplug/unplug, one via component ops and another via unsol
> > > >> > event?
> > > >> 
> > > >> Right, in case the unsol event actually works...
> > > >> 
> > > >> I would argue that the normal case would be that the controller and 
> > > >> codec is in D3 which means that the unsol event never gets through - due 
> > > >> to hw limitations - which is what triggered this patch set in the first 
> > > >> place.
> > > >> 
> > > >> But yes, in some case we might get double notification, but this should 
> > > >> not cause any trouble in practice. The unsol event could be turned off, 
> > > >> but would it be okay to save that for a later patch set (so I don't miss 
> > > >> the upcoming merge window)?
> > > >
> > > > In that case, it should be mentioned in the changelog at least.
> > > >
> > > > This series came a bit too late for the merge window, so I'm not sure
> > > > whether this can get in.  I personally find it OK, so take my ack for
> > > > ALSA parts (patch 3/4), but the rest need review and ack from i915
> > > > guys.  And we don't know who to merge this, if any.  The changes are
> > > > almost even to i915 and hda.  I don't mind either way, via drm or
> > > > sound tree.
> > > 
> > > Personally I'm fine with this still going for v4.3 since to me it looks
> > > like any regressions this might cause will be on your side. *grin*.
> > 
> > The only bit I want is some decent kerneldoc for the ad-hoc growing
> > i915/hda-intel interfaces. But that can be done in follow-up patches and
> > needs to be coordinated with the audio rate handling series anyway. So ack
> > from my side for all getting merged through alsa trees too.
> 
> Are you going to merge Libin's patchset?  If yes, it's better to align
> both patchsets through a single tree.  It'll make merges easier, as
> both touch the similar place.

Oh that was an ack for merging it all through your tree. If you punt it to
4.4 I might ask you for a stable tree to pull in in case I get conflicts.
-Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH 4/4] ALSA: hda - Wake the codec up on pin/ELD notify events
  2015-09-02  8:32               ` Daniel Vetter
@ 2015-09-02  9:39                 ` Takashi Iwai
  0 siblings, 0 replies; 19+ messages in thread
From: Takashi Iwai @ 2015-09-02  9:39 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: alsa-devel, vinod.koul, intel-gfx, daniel.vetter, David Henningsson

On Wed, 02 Sep 2015 10:32:34 +0200,
Daniel Vetter wrote:
> 
> On Wed, Sep 02, 2015 at 10:03:55AM +0200, Takashi Iwai wrote:
> > On Wed, 02 Sep 2015 10:00:44 +0200,
> > Daniel Vetter wrote:
> > > 
> > > On Fri, Aug 28, 2015 at 04:10:36PM +0300, Jani Nikula wrote:
> > > > On Thu, 20 Aug 2015, Takashi Iwai <tiwai@suse.de> wrote:
> > > > > On Thu, 20 Aug 2015 11:41:42 +0200,
> > > > > David Henningsson wrote:
> > > > >> 
> > > > >> 
> > > > >> 
> > > > >> On 2015-08-20 11:28, Takashi Iwai wrote:
> > > > >> > On Wed, 19 Aug 2015 10:48:58 +0200,
> > > > >> > David Henningsson wrote:
> > > > >> >>
> > > > >> >> Whenever there is an event from the i915 driver, wake the codec
> > > > >> >> and recheck plug/unplug + ELD status.
> > > > >> >>
> > > > >> >> This fixes the issue with lost unsol events in power save mode,
> > > > >> >> the codec and controller can now sleep in D3 and still know when
> > > > >> >> the HDMI monitor has been connected.
> > > > >> >>
> > > > >> >> Signed-off-by: David Henningsson <david.henningsson@canonical.com>
> > > > >> >
> > > > >> > This addition looks fine, but then we'll get double notification for
> > > > >> > the normal hotplug/unplug, one via component ops and another via unsol
> > > > >> > event?
> > > > >> 
> > > > >> Right, in case the unsol event actually works...
> > > > >> 
> > > > >> I would argue that the normal case would be that the controller and 
> > > > >> codec is in D3 which means that the unsol event never gets through - due 
> > > > >> to hw limitations - which is what triggered this patch set in the first 
> > > > >> place.
> > > > >> 
> > > > >> But yes, in some case we might get double notification, but this should 
> > > > >> not cause any trouble in practice. The unsol event could be turned off, 
> > > > >> but would it be okay to save that for a later patch set (so I don't miss 
> > > > >> the upcoming merge window)?
> > > > >
> > > > > In that case, it should be mentioned in the changelog at least.
> > > > >
> > > > > This series came a bit too late for the merge window, so I'm not sure
> > > > > whether this can get in.  I personally find it OK, so take my ack for
> > > > > ALSA parts (patch 3/4), but the rest need review and ack from i915
> > > > > guys.  And we don't know who to merge this, if any.  The changes are
> > > > > almost even to i915 and hda.  I don't mind either way, via drm or
> > > > > sound tree.
> > > > 
> > > > Personally I'm fine with this still going for v4.3 since to me it looks
> > > > like any regressions this might cause will be on your side. *grin*.
> > > 
> > > The only bit I want is some decent kerneldoc for the ad-hoc growing
> > > i915/hda-intel interfaces. But that can be done in follow-up patches and
> > > needs to be coordinated with the audio rate handling series anyway. So ack
> > > from my side for all getting merged through alsa trees too.
> > 
> > Are you going to merge Libin's patchset?  If yes, it's better to align
> > both patchsets through a single tree.  It'll make merges easier, as
> > both touch the similar place.
> 
> Oh that was an ack for merging it all through your tree. If you punt it to
> 4.4 I might ask you for a stable tree to pull in in case I get conflicts.

OK, then I'll merge David's patchset now for the upcoming pull request
for 4.3-rc1.


thanks,

Takashi
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2015-09-02  9:39 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-19  8:48 [PATCH v4 0/4] i915 to call hda driver on HDMI plug/unplug David Henningsson
2015-08-19  8:48 ` [PATCH 1/4] drm/i915: Add audio pin sense / ELD callback David Henningsson
2015-08-26  8:33   ` Daniel Vetter
2015-08-26 18:39     ` [alsa-devel] " David Henningsson
2015-08-27 14:24       ` Jani Nikula
2015-08-28 12:55   ` Jani Nikula
2015-08-19  8:48 ` [PATCH 2/4] drm/i915: Call audio pin/ELD notify function David Henningsson
2015-08-28 13:07   ` Jani Nikula
2015-08-28 13:15     ` David Henningsson
2015-08-19  8:48 ` [PATCH 3/4] ALSA: hda - allow codecs to access the i915 pin/ELD callback David Henningsson
2015-08-19  8:48 ` [PATCH 4/4] ALSA: hda - Wake the codec up on pin/ELD notify events David Henningsson
2015-08-20  9:28   ` Takashi Iwai
2015-08-20  9:41     ` David Henningsson
2015-08-20  9:46       ` Takashi Iwai
2015-08-28 13:10         ` Jani Nikula
2015-09-02  8:00           ` Daniel Vetter
2015-09-02  8:03             ` Takashi Iwai
2015-09-02  8:32               ` Daniel Vetter
2015-09-02  9:39                 ` Takashi Iwai

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.