Skip to contentSkip to conversation

alsa: hide HDMI/ELD printks unless in debug kernels

PATCH In review Fengguang Wu 3 participants 5 messages Apr 9, 2012 – Apr 10, 2012 Sound

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 alsa: hide HDMI/ELD printks unless in debug kernels

These trivial messages will show up repeatedly on hot plug as well as video mode changes, which could be annoying.

---
 sound/pci/hda/hda_eld.c    |    6 +++---
 sound/pci/hda/patch_hdmi.c |    4 ++--
 2 files changed, 5 insertions(+), 5 deletions(-)
sound/pci/hda/hda_eld.c +3 -3
@@ -410,7 +410,7 @@ static void hdmi_show_short_audio_desc(s
 	else
 		buf2[0] = '\0';
 
-	printk(KERN_INFO "HDMI: supports coding type %s:"
+	snd_printdd("HDMI: supports coding type %s:"
 			" channels = %d, rates =%s%s\n",
 			cea_audio_coding_type_names[a->format],
 			a->channels,
@@ -434,14 +434,14 @@ void snd_hdmi_show_eld(struct hdmi_eld *
 {
 	int i;
 
-	printk(KERN_INFO "HDMI: detected monitor %s at connection type %s\n",
+	snd_printdd("HDMI: detected monitor %s at connection type %s\n",
 			e->monitor_name,
 			eld_connection_type_names[e->conn_type]);
 
 	if (e->spk_alloc) {
 		char buf[SND_PRINT_CHANNEL_ALLOCATION_ADVISED_BUFSIZE];
 		snd_print_channel_allocation(e->spk_alloc, buf, sizeof(buf));
-		printk(KERN_INFO "HDMI: available speakers:%s\n", buf);
+		snd_printdd("HDMI: available speakers:%s\n", buf);
 	}
 
 	for (i = 0; i < e->sad_count; i++)
sound/pci/hda/patch_hdmi.c +2 -2
@@ -757,7 +757,7 @@ static void hdmi_intrinsic_event(struct 
 	int pin_idx;
 	struct hdmi_eld *eld;
 
-	printk(KERN_INFO
+	snd_printdd(
 		"HDMI hot plug event: Codec=%d Pin=%d Presence_Detect=%d ELD_Valid=%d\n",
 		codec->addr, pin_nid, pd, eldv);
 
@@ -989,7 +989,7 @@ static void hdmi_present_sense(struct hd
 	else
 		eld->eld_valid	= 0;
 
-	printk(KERN_INFO
+	snd_printdd(
 		"HDMI status: Codec=%d Pin=%d Presence_Detect=%d ELD_Valid=%d\n",
 		codec->addr, pin_nid, eld->monitor_present, eld->eld_valid);
 
#1 lore raw
Quoted 4 lines · Fengguang Wu

These trivial messages will show up repeatedly on hot plug as well as video mode changes, which could be annoying.

Those messages are very useful for end-users to diagnose problems with HDMI audio. Is there a way to make the messages dynamic, so users can get them if they want, without recompiling their kernel?

#2 lore raw

At Mon, 09 Apr 2012 09:12:44 -0600,

Quoted 10 lines · Stephen Warren
Quoted 4 lines · Fengguang Wu

These trivial messages will show up repeatedly on hot plug as well as video mode changes, which could be annoying.

Those messages are very useful for end-users to diagnose problems with HDMI audio. Is there a way to make the messages dynamic, so users can get them if they want, without recompiling their kernel?

We can define a new macro like below, add call like _snd_printd(2, ....) instead of snd_printd().
(Yes, the number 2 can be replaced better in an enum, too.)

In future, we should move to the standard dynamic_printk, but a patch like this would be a good compromise for merging to 3.4 kernel, IMO.

Takashi

---

include/sound/core.h +3 -0
index b6e0f57..442f822 100644
@@ -354,6 +354,8 @@ void __snd_printk(unsigned int level, const char *file, int line,
  */
 #define snd_printd(fmt, args...) \
 	__snd_printk(1, __FILE__, __LINE__, fmt, ##args)
+#define _snd_printd(level, fmt, args...) \
+	__snd_printk(level, __FILE__, __LINE__, fmt, ##args)
 
 /**
  * snd_BUG - give a BUG warning message and stack trace
@@ -383,6 +385,7 @@ void __snd_printk(unsigned int level, const char *file, int line,
 #else /* !CONFIG_SND_DEBUG */
 
 #define snd_printd(fmt, args...)	do { } while (0)
+#define _snd_printd(level, fmt, args...) do { } while (0)
 #define snd_BUG()			do { } while (0)
 static inline int __snd_bug_on(int cond)
 {
#3 lore raw
Quoted 13 lines · Takashi Iwai

At Mon, 09 Apr 2012 09:12:44 -0600,

Quoted 10 lines · Stephen Warren
Quoted 4 lines · Fengguang Wu

These trivial messages will show up repeatedly on hot plug as well as video mode changes, which could be annoying.

Those messages are very useful for end-users to diagnose problems with HDMI audio. Is there a way to make the messages dynamic, so users can get them if they want, without recompiling their kernel?

Quoted 6 lines

We can define a new macro like below, add call like _snd_printd(2, ....) instead of snd_printd().
(Yes, the number 2 can be replaced better in an enum, too.)

In future, we should move to the standard dynamic_printk, but a patch like this would be a good compromise for merging to 3.4 kernel, IMO.

OK. How about this?

Subject: alsa: hide HDMI/ELD printks unless snd.debug=2
Date: Fri Nov 11 19:09:36 CST 2011

Also remove two warnings when CONFIG_SND_DEBUG is not set:

sound/pci/hda/patch_hdmi.c: In function ‘hdmi_intrinsic_event’:
sound/pci/hda/patch_hdmi.c:761:6: warning: unused variable ‘eldv’ [-Wunused-variable] sound/pci/hda/patch_hdmi.c:760:6: warning: unused variable ‘pd’ [-Wunused-variable]

---
 include/sound/core.h       |   10 ++++++++++
 sound/pci/hda/hda_eld.c    |    6 +++---
 sound/pci/hda/patch_hdmi.c |    9 ++++-----
 3 files changed, 17 insertions(+), 8 deletions(-)
sound/pci/hda/hda_eld.c +3 -3
@@ -418,7 +418,7 @@ static void hdmi_show_short_audio_desc(s
 	else
 		buf2[0] = '\0';
 
-	printk(KERN_INFO "HDMI: supports coding type %s:"
+	_snd_printd(SND_PR_VERBOSE, "HDMI: supports coding type %s:"
 			" channels = %d, rates =%s%s\n",
 			cea_audio_coding_type_names[a->format],
 			a->channels,
@@ -442,14 +442,14 @@ void snd_hdmi_show_eld(struct hdmi_eld *
 {
 	int i;
 
-	printk(KERN_INFO "HDMI: detected monitor %s at connection type %s\n",
+	_snd_printd(SND_PR_VERBOSE, "HDMI: detected monitor %s at connection type %s\n",
 			e->monitor_name,
 			eld_connection_type_names[e->conn_type]);
 
 	if (e->spk_alloc) {
 		char buf[SND_PRINT_CHANNEL_ALLOCATION_ADVISED_BUFSIZE];
 		snd_print_channel_allocation(e->spk_alloc, buf, sizeof(buf));
-		printk(KERN_INFO "HDMI: available speakers:%s\n", buf);
+		_snd_printd(SND_PR_VERBOSE, "HDMI: available speakers:%s\n", buf);
 	}
 
 	for (i = 0; i < e->sad_count; i++)
sound/pci/hda/patch_hdmi.c +4 -5
@@ -757,8 +757,6 @@ static void hdmi_intrinsic_event(struct
 	struct hdmi_spec *spec = codec->spec;
 	int tag = res >> AC_UNSOL_RES_TAG_SHIFT;
 	int pin_nid;
-	int pd = !!(res & AC_UNSOL_RES_PD);
-	int eldv = !!(res & AC_UNSOL_RES_ELDV);
 	int pin_idx;
 	struct hda_jack_tbl *jack;
 
@@ -768,9 +766,10 @@ static void hdmi_intrinsic_event(struct
 	pin_nid = jack->nid;
 	jack->jack_dirty = 1;
 
-	printk(KERN_INFO
+	_snd_printd(SND_PR_VERBOSE,
 		"HDMI hot plug event: Codec=%d Pin=%d Presence_Detect=%d ELD_Valid=%d\n",
-		codec->addr, pin_nid, pd, eldv);
+		codec->addr, pin_nid,
+		!!(res & AC_UNSOL_RES_PD), !!(res & AC_UNSOL_RES_ELDV));
 
 	pin_idx = pin_nid_to_pin_index(spec, pin_nid);
 	if (pin_idx < 0)
@@ -992,7 +991,7 @@ static void hdmi_present_sense(struct hd
 	if (eld->monitor_present)
 		eld_valid	= !!(present & AC_PINSENSE_ELDV);
 
-	printk(KERN_INFO
+	_snd_printd(SND_PR_VERBOSE,
 		"HDMI status: Codec=%d Pin=%d Presence_Detect=%d ELD_Valid=%d\n",
 		codec->addr, pin_nid, eld->monitor_present, eld_valid);
 
include/sound/core.h +10 -0
@@ -325,6 +325,13 @@ void release_and_free_resource(struct re
 
 /* --- */
 
+/* sound printk debug levels */
+enum {
+	SND_PR_ALWAYS,
+	SND_PR_DEBUG,
+	SND_PR_VERBOSE,
+};
+
 #if defined(CONFIG_SND_DEBUG) || defined(CONFIG_SND_VERBOSE_PRINTK)
 __printf(4, 5)
 void __snd_printk(unsigned int level, const char *file, int line,
@@ -354,6 +361,8 @@ void __snd_printk(unsigned int level, co
  */
 #define snd_printd(fmt, args...) \
 	__snd_printk(1, __FILE__, __LINE__, fmt, ##args)
+#define _snd_printd(level, fmt, args...) \
+	__snd_printk(level, __FILE__, __LINE__, fmt, ##args)
 
 /**
  * snd_BUG - give a BUG warning message and stack trace
@@ -383,6 +392,7 @@ void __snd_printk(unsigned int level, co
 #else /* !CONFIG_SND_DEBUG */
 
 #define snd_printd(fmt, args...)	do { } while (0)
+#define _snd_printd(level, fmt, args...) do { } while (0)
 #define snd_BUG()			do { } while (0)
 static inline int __snd_bug_on(int cond)
 {
#4 lore raw

At Tue, 10 Apr 2012 17:00:35 +0800,

Quoted 19 lines · Fengguang Wu
Quoted 17 lines · Takashi Iwai

At Mon, 09 Apr 2012 09:12:44 -0600,

Quoted 10 lines · Stephen Warren
Quoted 4 lines · Fengguang Wu

These trivial messages will show up repeatedly on hot plug as well as video mode changes, which could be annoying.

Those messages are very useful for end-users to diagnose problems with HDMI audio. Is there a way to make the messages dynamic, so users can get them if they want, without recompiling their kernel?

We can define a new macro like below, add call like _snd_printd(2, ....) instead of snd_printd().
(Yes, the number 2 can be replaced better in an enum, too.)

Quoted 7 lines
Quoted 2 lines

In future, we should move to the standard dynamic_printk, but a patch like this would be a good compromise for merging to 3.4 kernel, IMO.

OK. How about this?

Subject: alsa: hide HDMI/ELD printks unless snd.debug=2
Date: Fri Nov 11 19:09:36 CST 2011

Looks good to me. Applied it now.
Thanks!

Takashi

Quoted 102 lines

Also remove two warnings when CONFIG_SND_DEBUG is not set:

sound/pci/hda/patch_hdmi.c: In function ‘hdmi_intrinsic_event’:
sound/pci/hda/patch_hdmi.c:761:6: warning: unused variable ‘eldv’ [-Wunused-variable] sound/pci/hda/patch_hdmi.c:760:6: warning: unused variable ‘pd’ [-Wunused-variable]

---
 include/sound/core.h       |   10 ++++++++++
 sound/pci/hda/hda_eld.c    |    6 +++---
 sound/pci/hda/patch_hdmi.c |    9 ++++-----
 3 files changed, 17 insertions(+), 8 deletions(-)
sound/pci/hda/hda_eld.c +3 -3
@@ -418,7 +418,7 @@ static void hdmi_show_short_audio_desc(s
 	else
 		buf2[0] = '\0';
 
-	printk(KERN_INFO "HDMI: supports coding type %s:"
+	_snd_printd(SND_PR_VERBOSE, "HDMI: supports coding type %s:"
 			" channels = %d, rates =%s%s\n",
 			cea_audio_coding_type_names[a->format],
 			a->channels,
@@ -442,14 +442,14 @@ void snd_hdmi_show_eld(struct hdmi_eld *
 {
 	int i;
 
-	printk(KERN_INFO "HDMI: detected monitor %s at connection type %s\n",
+	_snd_printd(SND_PR_VERBOSE, "HDMI: detected monitor %s at connection type %s\n",
 			e->monitor_name,
 			eld_connection_type_names[e->conn_type]);
 
 	if (e->spk_alloc) {
 		char buf[SND_PRINT_CHANNEL_ALLOCATION_ADVISED_BUFSIZE];
 		snd_print_channel_allocation(e->spk_alloc, buf, sizeof(buf));
-		printk(KERN_INFO "HDMI: available speakers:%s\n", buf);
+		_snd_printd(SND_PR_VERBOSE, "HDMI: available speakers:%s\n", buf);
 	}
 
 	for (i = 0; i < e->sad_count; i++)
sound/pci/hda/patch_hdmi.c +4 -5
@@ -757,8 +757,6 @@ static void hdmi_intrinsic_event(struct
 	struct hdmi_spec *spec = codec->spec;
 	int tag = res >> AC_UNSOL_RES_TAG_SHIFT;
 	int pin_nid;
-	int pd = !!(res & AC_UNSOL_RES_PD);
-	int eldv = !!(res & AC_UNSOL_RES_ELDV);
 	int pin_idx;
 	struct hda_jack_tbl *jack;
 
@@ -768,9 +766,10 @@ static void hdmi_intrinsic_event(struct
 	pin_nid = jack->nid;
 	jack->jack_dirty = 1;
 
-	printk(KERN_INFO
+	_snd_printd(SND_PR_VERBOSE,
 		"HDMI hot plug event: Codec=%d Pin=%d Presence_Detect=%d ELD_Valid=%d\n",
-		codec->addr, pin_nid, pd, eldv);
+		codec->addr, pin_nid,
+		!!(res & AC_UNSOL_RES_PD), !!(res & AC_UNSOL_RES_ELDV));
 
 	pin_idx = pin_nid_to_pin_index(spec, pin_nid);
 	if (pin_idx < 0)
@@ -992,7 +991,7 @@ static void hdmi_present_sense(struct hd
 	if (eld->monitor_present)
 		eld_valid	= !!(present & AC_PINSENSE_ELDV);
 
-	printk(KERN_INFO
+	_snd_printd(SND_PR_VERBOSE,
 		"HDMI status: Codec=%d Pin=%d Presence_Detect=%d ELD_Valid=%d\n",
 		codec->addr, pin_nid, eld->monitor_present, eld_valid);
 
include/sound/core.h +9 -0
@@ -325,6 +325,13 @@ void release_and_free_resource(struct re
 
 /* --- */
 
+/* sound printk debug levels */
+enum {
+	SND_PR_ALWAYS,
+	SND_PR_DEBUG,
+	SND_PR_VERBOSE,
+};
+
 #if defined(CONFIG_SND_DEBUG) || defined(CONFIG_SND_VERBOSE_PRINTK)
 __printf(4, 5)
 void __snd_printk(unsigned int level, const char *file, int line,
@@ -354,6 +361,8 @@ void __snd_printk(unsigned int level, co
  */
 #define snd_printd(fmt, args...) \
 	__snd_printk(1, __FILE__, __LINE__, fmt, ##args)
+#define _snd_printd(level, fmt, args...) \
+	__snd_printk(level, __FILE__, __LINE__, fmt, ##args)
 
 /**
  * snd_BUG - give a BUG warning message and stack trace

include/sound/core.h void __snd_printk(unsigned int level, co · line 398

Quoted 7 lines
include/sound/core.h +1 -0
@@ -383,6 +392,7 @@ void __snd_printk(unsigned int level, co
 #else /* !CONFIG_SND_DEBUG */
 
 #define snd_printd(fmt, args...)	do { } while (0)
+#define _snd_printd(level, fmt, args...) do { } while (0)
 #define snd_BUG()			do { } while (0)
 static inline int __snd_bug_on(int cond)
 {

_______________________________________________
Alsa-devel mailing list
[email protected]
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel