assorted HDMI cleanups
cover assorted HDMI cleanups
Hi Takashi,
Here are 5 HDMI cleanup patches, some renames the code and others renames the user visible output messages. The new output goes like:
dmesg
[ 5742.169578] detected monitor <9d><80>t connection type Display Port [ 5742.169580] available speakers: FL/FR LFE FLC/FRC [ 5742.169582] supports coding type MLP (Dolby TrueHD): channels = 7, rates = 48000 176400 [ 5742.169585] supports coding type AC-3: channels = 1, rates = 48000 88200 192000, max bitrate = 1208000 [ 5742.169588] supports coding type AC-3: channels = 2, rates = 48000 384000, max bitrate = 960000 [ 5742.169591] supports coding type ATRAC: channels = 5, rates = 48000 88200 384000, max bitrate = 224000
/proc/asound/card0/eld\#3
monitor name ��� connection_type Display Port eld_version [0xb] reserved edid_version [0x3] CEA-861-B, C or D manufacture_id 0xee5a product_id 0x923c port_id 0x18b263a03e17d1b5 support_hdcp 1 support_ai 1 audio_sync_delay 216 speakers [0x23] FL/FR LFE FLC/FRC sad_count 4 sad0_coding_type [0xc] MLP (Dolby TrueHD) sad0_channels 7 sad0_rates [0x240] 48000 176400 sad1_coding_type [0x2] AC-3 sad1_channels 1 sad1_rates [0x4c0] 48000 88200 192000 sad1_max_bitrate 1208000 sad2_coding_type [0x2] AC-3 sad2_channels 2 sad2_rates [0x1840] 48000 384000 sad2_max_bitrate 960000 sad3_coding_type [0x8] ATRAC sad3_channels 5 sad3_rates [0x8c0] 48000 88200 384000 sad3_max_bitrate 224000
Thanks,
Fengguang
_______________________________________________
Alsa-devel mailing list
[email protected]
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
PATCH 1/5 hda: minor code cleanups
Some minor code cleanups.
--- sound/pci/hda/hda_eld.c | 2 +- sound/pci/hda/patch_intelhdmi.c | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-)
sound/pci/hda/patch_intelhdmi.c +9 -9
@@ -85,7 +85,7 @@ struct hdmi_audio_infoframe {u8 CXT04 ;u8 CA ;u8 LFEPBL01_LSV36_DM_INH7 ; -u8 reserved[5 ];/* PB6 - PB10 */ +u8 reserved[5 ];/* PB6 - PB10 */ };/*
@@ -160,7 +160,7 @@ static struct cea_channel_speaker_alloca { .ca_index = 0x00, .speakers = { 0, 0, 0, 0, 0, 0, FR, FL } },/* 2.1 */ { .ca_index = 0x01, .speakers = { 0, 0, 0, 0, 0, LFE, FR, FL } }, -/* dolby surround */ +/* Dolby Surround */ { .ca_index = 0x02, .speakers = { 0, 0, 0, 0, FC, 0, FR, FL } }, { .ca_index = 0x03, .speakers = { 0, 0, 0, 0, FC, LFE, FR, FL } }, { .ca_index = 0x04, .speakers = { 0, 0, 0, RC, 0, 0, FR, FL } },
@@ -287,7 +287,7 @@ static void hdmi_set_channel_count(strucif (chs !=hdmi_get_channel_count (codec))snd_printd (KERN_INFO "Channel count expect=%d, real=%d\n" , - chs,hdmi_get_channel_count (codec)); + chs,hdmi_get_channel_count (codec)); }static void hdmi_debug_channel_mapping (struct hda_codec *codec)
@@ -300,7 +300,7 @@ static void hdmi_debug_channel_mapping(s slot =snd_hda_codec_read (codec,CVT_NID ,0 ,AC_VERB_GET_HDMI_CHAN_SLOT , i);printk (KERN_DEBUG "ASP channel %d => slot %d\n" , - slot >> 4, slot & 0x7); + slot >> 4, slot & 0x7); }#endif }
@@ -316,7 +316,7 @@ static void hdmi_parse_eld(struct hda_co/* -* Audio Infoframe routines +* Audio InfoFrame routines */ static void hdmi_debug_dip_size (struct hda_codec *codec)
@@ -547,8 +547,8 @@ static void intel_hdmi_unsol_event(struc*/ static int intel_hdmi_playback_pcm_open (struct hda_pcm_stream *hinfo, -struct hda_codec *codec, -struct snd_pcm_substream *substream) +struct hda_codec *codec, +struct snd_pcm_substream *substream) {struct intel_hdmi_spec *spec = codec->spec;
@@ -556,8 +556,8 @@ static int intel_hdmi_playback_pcm_open( }static int intel_hdmi_playback_pcm_close (struct hda_pcm_stream *hinfo, -struct hda_codec *codec, -struct snd_pcm_substream *substream) +struct hda_codec *codec, +struct snd_pcm_substream *substream) {struct intel_hdmi_spec *spec = codec->spec;
sound/pci/hda/hda_eld.c +1 -1
@@ -132,7 +132,7 @@ static char *cea_audio_coding_type_names/* * The following two lists are shared between * - HDMI audio InfoFrame (source to sink) -* - CEA E-EDID extension (sink to source) +* - CEA E-EDID Extension (sink to source) */ /*
PATCH 2/5 hda: rename sink_eld to hdmi_eld
In reply to Wu FengguangRename struct sink_eld to hdmi_eld.
--- sound/pci/hda/hda_eld.c | 14 +++++++------- sound/pci/hda/hda_local.h | 10 +++++----- sound/pci/hda/patch_intelhdmi.c | 8 ++++---- 3 files changed, 16 insertions(+), 16 deletions(-)
sound/pci/hda/hda_eld.c +7 -7
@@ -267,8 +267,8 @@ static void hdmi_update_short_audio_desc/* * Be careful, ELD buf could be totally rubbish! */ -static int hdmi_update_sink_eld (struct sink_eld *e, -const unsigned char *buf,int size) +static int hdmi_update_eld (struct hdmi_eld *e, +const unsigned char *buf,int size) {int mnl;int i;
@@ -351,7 +351,7 @@ int snd_hdmi_get_eld_size(struct hda_cod AC_DIPSIZE_ELD_BUF); } -int snd_hdmi_get_eld (struct sink_eld *eld, +int snd_hdmi_get_eld (struct hdmi_eld *eld,struct hda_codec *codec,hda_nid_t nid) {int i;
@@ -380,7 +380,7 @@ int snd_hdmi_get_eld(struct sink_eld *elfor (i =0 ; i < size; i++) buf[i] =hdmi_get_eld_byte (codec, nid, i); - ret =hdmi_update_sink_eld (eld, buf, size); + ret =hdmi_update_eld (eld, buf, size);kfree (buf);return ret;
@@ -421,7 +421,7 @@ void snd_print_channel_allocation(int sp buf[j] ='\0' ;/* necessary when j == 0 */ } -void snd_hdmi_show_eld (struct sink_eld *e) +void snd_hdmi_show_eld (struct hdmi_eld *e) {int i;char buf[SND_PRINT_CHANNEL_ALLOCATION_ADVISED_BUFSIZE ];
@@ -482,7 +482,7 @@ static void hdmi_print_sad_info(int i, sstatic void hdmi_print_eld_info (struct snd_info_entry *entry,struct snd_info_buffer *buffer) { -struct sink_eld *e = entry->private_data; +struct hdmi_eld *e = entry->private_data;char buf[SND_PRINT_CHANNEL_ALLOCATION_ADVISED_BUFSIZE ];int i;
@@ -509,7 +509,7 @@ static void hdmi_print_eld_info(struct shdmi_print_sad_info (i, e->sad + i, buffer); } -int snd_hda_eld_proc_new (struct hda_codec *codec,struct sink_eld *eld) +int snd_hda_eld_proc_new (struct hda_codec *codec,struct hdmi_eld *eld) {char name[32 ];struct snd_info_entry *entry;
sound/pci/hda/hda_local.h +5 -5
@@ -462,7 +462,7 @@ struct cea_sad {/* * ELD: EDID Like Data */ -struct sink_eld { +struct hdmi_eld {int eld_size;int baseline_len;int eld_ver;/* (eld_ver == 0) indicates invalid ELD */
@@ -481,13 +481,13 @@ struct sink_eld { };int snd_hdmi_get_eld_size (struct hda_codec *codec,hda_nid_t nid); -int snd_hdmi_get_eld (struct sink_eld *,struct hda_codec *,hda_nid_t ); -void snd_hdmi_show_eld (struct sink_eld *eld); +int snd_hdmi_get_eld (struct hdmi_eld *,struct hda_codec *,hda_nid_t ); +void snd_hdmi_show_eld (struct hdmi_eld *eld);#ifdef CONFIG_PROC_FS -int snd_hda_eld_proc_new (struct hda_codec *codec,struct sink_eld *eld); +int snd_hda_eld_proc_new (struct hda_codec *codec,struct hdmi_eld *eld);#else -inline int snd_hda_eld_proc_new (struct hda_codec *codec,struct sink_eld *eld) +inline int snd_hda_eld_proc_new (struct hda_codec *codec,struct hdmi_eld *eld) {return 0 ; }
sound/pci/hda/patch_intelhdmi.c +4 -4
@@ -42,7 +42,7 @@struct intel_hdmi_spec {struct hda_multi_out multiout;struct hda_pcm pcm_rec; -struct sink_eld sink; +struct hdmi_eld sink_eld; };static struct hda_verb pinout_enable_verb[] = {
@@ -308,7 +308,7 @@ static void hdmi_debug_channel_mapping(sstatic void hdmi_parse_eld (struct hda_codec *codec) {struct intel_hdmi_spec *spec = codec->spec; -struct sink_eld *eld = &spec->sink; +struct hdmi_eld *eld = &spec->sink_eld;if (!snd_hdmi_get_eld (eld, codec,PIN_NID ))snd_hdmi_show_eld (eld);
@@ -411,7 +411,7 @@ static int hdmi_setup_channel_allocation struct hdmi_audio_infoframe *ai) {struct intel_hdmi_spec *spec = codec->spec; -struct sink_eld *eld = &spec->sink; +struct hdmi_eld *eld = &spec->sink_eld;int i;int spk_mask =0 ;int channels =1 + (ai->CC02_CT47 &0x7 );
@@ -663,7 +663,7 @@ static int patch_intel_hdmi(struct hda_c codec->spec = spec; codec->patch_ops = intel_hdmi_patch_ops; -snd_hda_eld_proc_new (codec, &spec->sink); +snd_hda_eld_proc_new (codec, &spec->sink_eld);init_channel_allocations ();
PATCH 3/5 hda: minor output message cleanups
In reply to Wu FengguangSome minor user visible message cleanups.
--- sound/pci/hda/hda_eld.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-)
sound/pci/hda/hda_eld.c +6 -9
@@ -118,7 +118,7 @@ static char *cea_audio_coding_type_names/* 6 */ "AAC-LC" ,/* 7 */ "DTS" ,/* 8 */ "ATRAC" , -/* 9 */ "DSD (1-bit audio)" , +/* 9 */ "DSD (One Bit Audio)" ,/* 10 */ "E-AC-3/DD+ (Dolby Digital Plus)" ,/* 11 */ "DTS-HD" , /* 12 */ "MLP (Dolby TrueHD)",
@@ -395,7 +395,7 @@ static void hdmi_show_short_audio_desc(sprintk (KERN_INFO "channels: %d\n" , a->channels);snd_print_pcm_rates (a->rates, buf,sizeof (buf)); -printk (KERN_INFO "sampling frequencies: %s\n" , buf); +printk (KERN_INFO "sampling rates: %s\n" , buf);if (a->format ==AUDIO_CODING_TYPE_LPCM )printk (KERN_INFO "sample bits: 0x%x\n" , a->sample_bits);
@@ -413,11 +413,9 @@ void snd_print_channel_allocation(int spfor (i =0 , j =0 ; i <ARRAY_SIZE (cea_speaker_allocation_names); i++) {if (spk_alloc & (1 << i)) - j +=snprintf (buf + j, buflen - j,"%s " , + j +=snprintf (buf + j, buflen - j," %s" , cea_speaker_allocation_names[i]); } -if (j) - j--;/* skip last space */ buf[j] ='\0' ;/* necessary when j == 0 */ }
@@ -464,11 +462,10 @@ static void hdmi_print_sad_info(int i, ssnd_iprintf (buffer,"sad%d_channels\t\t%d\n" , i, a->channels);snd_print_pcm_rates (a->rates, buf,sizeof (buf)); -snd_iprintf (buffer,"sad%d_sampling_rates\t[0x%x] %s\n" , - i, a->rates, buf); +snd_iprintf (buffer,"sad%d_rates\t\t[0x%x]%s\n" , i, a->rates, buf);if (a->format ==AUDIO_CODING_TYPE_LPCM ) -snd_iprintf (buffer,"sad%d_sample_bits\t0x%x\n" , +snd_iprintf (buffer,"sad%d_bits\t\t0x%x\n" , i, a->sample_bits);if (a->max_bitrate)
@@ -501,7 +498,7 @@ static void hdmi_print_eld_info(struct ssnd_iprintf (buffer,"audio_sync_delay\t%d\n" , e->aud_synch_delay);snd_print_channel_allocation (e->spk_alloc, buf,sizeof (buf)); -snd_iprintf (buffer,"speakers\t\t[0x%x] %s\n" , e->spk_alloc, buf); +snd_iprintf (buffer,"speakers\t\t[0x%x]%s\n" , e->spk_alloc, buf);snd_iprintf (buffer,"sad_count\t\t%d\n" , e->sad_count);
PATCH 4/5 hda: make global snd_print_pcm_bits()
In reply to Wu FengguangIntroduce a global function snd_print_pcm_bits() and use it in the ELD code.
--- sound/pci/hda/hda_eld.c | 10 ++++++---- sound/pci/hda/hda_local.h | 3 +++ sound/pci/hda/hda_proc.c | 22 ++++++++++++++++------ 3 files changed, 25 insertions(+), 10 deletions(-)
sound/pci/hda/hda_proc.c +16 -6
@@ -107,23 +107,33 @@ void snd_print_pcm_rates(int pcm, char *static void print_pcm_rates (struct snd_info_buffer *buffer,unsigned int pcm) {char buf[SND_PRINT_RATES_ADVISED_BUFSIZE ]; + pcm &=AC_SUPPCM_RATES ;snd_iprintf (buffer," rates [0x%x]:" , pcm);snd_print_pcm_rates (pcm, buf,sizeof (buf));snd_iprintf (buffer,"%s\n" , buf); } -static void print_pcm_bits (struct snd_info_buffer *buffer,unsigned int pcm) +void snd_print_pcm_bits (int pcm,char *buf,int buflen) {static unsigned int bits[] = {8 ,16 ,20 ,24 ,32 }; -int i; +int i, j; + +for (i =0 , j =0 ; i <ARRAY_SIZE (bits); i++) +if (pcm & (1 << i)) + j +=snprintf (buf + j, buflen - j," %d" , bits[i]); + + buf[j] ='\0' ;/* necessary when j == 0 */ +} + +static void print_pcm_bits (struct snd_info_buffer *buffer,unsigned int pcm) +{ +char buf[SND_PRINT_BITS_ADVISED_BUFSIZE ]; pcm = (pcm >>16 ) &0xff ;snd_iprintf (buffer," bits [0x%x]:" , pcm); -for (i =0 ; i <ARRAY_SIZE (bits); i++) -if (pcm & (1 << i)) -snd_iprintf (buffer," %d" , bits[i]); -snd_iprintf (buffer,"\n" ); +snd_print_pcm_bits (pcm, buf,sizeof (buf)); +snd_iprintf (buffer,"%s\n" , buf); } static void print_pcm_formats(struct snd_info_buffer *buffer,
sound/pci/hda/hda_eld.c +6 -4
@@ -455,7 +455,7 @@ void snd_hdmi_show_eld(struct hdmi_eld *static void hdmi_print_sad_info (int i,struct cea_sad *a,struct snd_info_buffer *buffer) { -char buf[80 ]; +char buf[SND_PRINT_RATES_ADVISED_BUFSIZE ];snd_iprintf (buffer,"sad%d_coding_type\t[0x%x] %s\n" , i, a->format, cea_audio_coding_type_names[a->format]);
@@ -464,9 +464,11 @@ static void hdmi_print_sad_info(int i, ssnd_print_pcm_rates (a->rates, buf,sizeof (buf));snd_iprintf (buffer,"sad%d_rates\t\t[0x%x]%s\n" , i, a->rates, buf); -if (a->format ==AUDIO_CODING_TYPE_LPCM ) -snd_iprintf (buffer,"sad%d_bits\t\t0x%x\n" , - i, a->sample_bits); +if (a->format ==AUDIO_CODING_TYPE_LPCM ) { +snd_print_pcm_bits (a->sample_bits, buf,sizeof (buf)); +snd_iprintf (buffer,"sad%d_bits\t\t[0x%x]%s\n" , + i, a->sample_bits, buf); + }if (a->max_bitrate) snd_iprintf(buffer, "sad%d_max_bitrate\t%d\n",
sound/pci/hda/hda_local.h +3 -0
@@ -287,6 +287,9 @@ static inline int snd_hda_codec_proc_new#define SND_PRINT_RATES_ADVISED_BUFSIZE 80void snd_print_pcm_rates (int pcm,char *buf,int buflen); +#define SND_PRINT_BITS_ADVISED_BUFSIZE 16 +void snd_print_pcm_bits (int pcm,char *buf,int buflen); +/* * Misc */
PATCH 5/5 hda: compact ELD output messages
In reply to Wu FengguangStrip out some ELD printk messages that end user won't care, and make the output compact.
--- sound/pci/hda/hda_eld.c | 58 ++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 33 deletions(-)
sound/pci/hda/hda_eld.c +25 -33
@@ -389,22 +389,27 @@ int snd_hdmi_get_eld(struct hdmi_eld *elstatic void hdmi_show_short_audio_desc (struct cea_sad *a) {char buf[SND_PRINT_RATES_ADVISED_BUFSIZE ]; +char buf2[8 +SND_PRINT_BITS_ADVISED_BUFSIZE ] =", bits =" ; -printk (KERN_INFO "coding type: %s\n" , - cea_audio_coding_type_names[a->format]); -printk (KERN_INFO "channels: %d\n" , a->channels); +if (!a->format) +return ;snd_print_pcm_rates (a->rates, buf,sizeof (buf)); -printk (KERN_INFO "sampling rates: %s\n" , buf);if (a->format ==AUDIO_CODING_TYPE_LPCM ) -printk (KERN_INFO "sample bits: 0x%x\n" , a->sample_bits); - -if (a->max_bitrate) -printk (KERN_INFO "max bitrate: %d\n" , a->max_bitrate); - -if (a->profile) -printk (KERN_INFO "profile: %d\n" , a->profile); +snd_print_pcm_rates (a->sample_bits, buf2 +8 ,sizeof (buf2 -8 )); +else if (a->max_bitrate) +snprintf (buf2,sizeof (buf2), +", max bitrate = %d" , a->max_bitrate); +else + buf2[0 ] ='\0' ; + +printk (KERN_INFO "supports coding type %s:" +" channels = %d, rates =%s%s\n" , + cea_audio_coding_type_names[a->format], + a->channels, + buf, + buf2); }void snd_print_channel_allocation (int spk_alloc,char *buf,int buflen)
@@ -422,29 +427,16 @@ void snd_print_channel_allocation(int spvoid snd_hdmi_show_eld (struct hdmi_eld *e) {int i; -char buf[SND_PRINT_CHANNEL_ALLOCATION_ADVISED_BUFSIZE ]; -printk (KERN_INFO "ELD buffer size is %d\n" , e->eld_size); -printk (KERN_INFO "ELD baseline len is %d*4\n" , e->baseline_len); -printk (KERN_INFO "vendor block len is %d\n" , - e->eld_size - e->baseline_len *4 -4 ); -printk (KERN_INFO "ELD version is %s\n" , - eld_versoin_names[e->eld_ver]); -printk (KERN_INFO "CEA EDID version is %s\n" , - cea_edid_version_names[e->cea_edid_ver]); -printk (KERN_INFO "manufacture id is 0x%x\n" , e->manufacture_id); -printk (KERN_INFO "product id is 0x%x\n" , e->product_id); -printk (KERN_INFO "port id is 0x%llx\n" , (long long )e->port_id); -printk (KERN_INFO "HDCP support is %d\n" , e->support_hdcp); -printk (KERN_INFO "AI support is %d\n" , e->support_ai); -printk (KERN_INFO "SAD count is %d\n" , e->sad_count); -printk (KERN_INFO "audio sync delay is %x\n" , e->aud_synch_delay); -printk (KERN_INFO "connection type is %s\n" , - eld_connection_type_names[e->conn_type]); -printk (KERN_INFO "monitor name is %s\n" , e->monitor_name); - -snd_print_channel_allocation (e->spk_alloc, buf,sizeof (buf)); -printk (KERN_INFO "speaker allocations: (0x%x)%s\n" , e->spk_alloc, buf); +printk (KERN_INFO "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 "available speakers:%s\n" , buf); + }for (i =0 ; i < e->sad_count; i++)hdmi_show_short_audio_desc (e->sad + i);
At Wed, 19 Nov 2008 15:13:58 +0800,
Quoted 37 lines · Wu Fengguang
Hi Takashi,
Here are 5 HDMI cleanup patches, some renames the code and others renames the user visible output messages. The new output goes like:
dmesg
[ 5742.169578] detected monitor <9d><80>t connection type Display Port [ 5742.169580] available speakers: FL/FR LFE FLC/FRC [ 5742.169582] supports coding type MLP (Dolby TrueHD): channels = 7, rates = 48000 176400 [ 5742.169585] supports coding type AC-3: channels = 1, rates = 48000 88200 192000, max bitrate = 1208000 [ 5742.169588] supports coding type AC-3: channels = 2, rates = 48000 384000, max bitrate = 960000 [ 5742.169591] supports coding type ATRAC: channels = 5, rates = 48000 88200 384000, max bitrate = 224000/proc/asound/card0/eld\#3
monitor name ��� connection_type Display Port eld_version [0xb] reserved edid_version [0x3] CEA-861-B, C or D manufacture_id 0xee5a product_id 0x923c port_id 0x18b263a03e17d1b5 support_hdcp 1 support_ai 1 audio_sync_delay 216 speakers [0x23] FL/FR LFE FLC/FRC sad_count 4 sad0_coding_type [0xc] MLP (Dolby TrueHD) sad0_channels 7 sad0_rates [0x240] 48000 176400 sad1_coding_type [0x2] AC-3 sad1_channels 1 sad1_rates [0x4c0] 48000 88200 192000 sad1_max_bitrate 1208000
Quoted 8 lines
sad2_coding_type [0x2] AC-3 sad2_channels 2 sad2_rates [0x1840] 48000 384000 sad2_max_bitrate 960000 sad3_coding_type [0x8] ATRAC sad3_channels 5 sad3_rates [0x8c0] 48000 88200 384000 sad3_max_bitrate 224000
Looks good. Applied now.
Thanks!
Takashi
_______________________________________________
Alsa-devel mailing list
[email protected]
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel