2 nit-picks that I missed in previous versions of this patch, sorry:
diff --git a/sound/pci/hda/Kconfig b/sound/pci/hda/Kconfig index 7ba542e45a3d..8804808410b3 100644 --- a/sound/pci/hda/Kconfig +++ b/sound/pci/hda/Kconfig @@ -232,4 +232,20 @@ config SND_HDA_POWER_SAVE_DEFAULT
endif
+config SND_HDA_INTEL_HDMI_SILENT_STREAM
- bool "Enable Silent Stream always for HDMI"
- depends on SND_HDA
nit-pick: should this be 'depends on SND_HDA_INTEL'? if not, this 'depends on SND_HDA' is redundant, already within an 'if SND_HDA' block
ack.
- help
Intel hardware has a feature called 'silent stream', thatkeeps external HDMI receiver's analog circuitry powered onavoiding 2-3 sec silence during playback start. This mechanismrelies on an info packet and preventing the codec from going toD3. (increasing the platform static power consumption when aHDMI receiver is plugged-in). 2-3 sec silence at the playbackstart is expected whenever there is format change. (default is2 channel format).Say Y to enable Silent Stream feature.+endif
[...]
/* update ELD and jack state via audio component */ static void sync_eld_via_acomp(struct hda_codec *codec, struct hdmi_spec_per_pin *per_pin) { struct hdmi_spec *spec = codec->spec; struct hdmi_eld *eld = &spec->temp_eld;
bool monitor_prev, monitor_next;
mutex_lock(&per_pin->lock); eld->monitor_present = false;
monitor_prev = per_pin->sink_eld.monitor_present; eld->eld_size = snd_hdac_acomp_get_eld(&codec->core, per_pin-
pin_nid, per_pin->dev_id, &eld->monitor_present, eld->eld_buffer, ELD_MAX_SIZE); eld->eld_valid = (eld->eld_size > 0); update_eld(codec, per_pin, eld, 0);
- monitor_next = per_pin->sink_eld.monitor_present; mutex_unlock(&per_pin->lock);
- /*
* Power-up will call hdmi_present_sense, so the PM calls* have to be done without mutex held.*/- if (enable_silent_stream) {
if (!monitor_prev && monitor_next) {snd_hda_power_up_pm(codec);nit-pick: is there a need to test the return value? I see this in patch_hdmi.c
Since this parent function returns void, I could probably add a print stating the failure.
ret = snd_hda_power_up_pm(codec); if (ret < 0 && pm_runtime_suspended(hda_codec_dev(codec))) goto out;
silent_stream_enable(codec, per_pin);} else if (monitor_prev && !monitor_next)snd_hda_power_down_pm(codec);} }
static void hdmi_present_sense(struct hdmi_spec_per_pin *per_pin,
int repoll)