[alsa-devel] [Intel-gfx] [RFC][PATCH] ELD routines and proc interface
Takashi Iwai
tiwai at suse.de
Fri Nov 21 08:44:18 CET 2008
At Fri, 21 Nov 2008 11:41:50 +0800,
Wu Fengguang wrote:
>
> On Thu, Nov 20, 2008 at 05:46:49PM -0800, Shane W wrote:
> > On Fri, Nov 21, 2008 at 09:36:55AM +0800, Wu Fengguang wrote:
>
> > > Yes it's unexpected. Do you know its real speaker numbers and
> > > allocations? Does it provide some number of line-out ports?
> >
> > There are six speakers connected, fl, ct, fr, rl, rr and lfe.
>
> Hi Shane,
>
> Apply this patch and run "echo speakers f > /proc/asound/card0/eld\#3".
> That will make the ELD "speakers" field right.
>
> Thanks,
> Fengguang
> ---
> support writing to the ELD proc file
>
> Allow users to fix quicks of ELD ROMs by writing new values to the ELD proc
> interface. The format is one or more lines of "name hex_value".
>
> Users can add/remove/modify up to 32 SAD(Short Audio Descriptor) entries.
>
> Signed-off-by: Wu Fengguang <wfg at linux.intel.com>
This is a nice feature, so I applied now as is.
Please give an incremental patch if you need more fixes.
thanks,
Takashi
> ---
> sound/pci/hda/hda_eld.c | 56 ++++++++++++++++++++++++++++++++++++++
> 1 file changed, 56 insertions(+)
>
> --- sound-2.6.orig/sound/pci/hda/hda_eld.c
> +++ sound-2.6/sound/pci/hda/hda_eld.c
> @@ -500,6 +500,59 @@ static void hdmi_print_eld_info(struct s
> hdmi_print_sad_info(i, e->sad + i, buffer);
> }
>
> +static void hdmi_write_eld_item(struct snd_info_entry *entry,
> + struct snd_info_buffer *buffer)
> +{
> + struct hdmi_eld *e = entry->private_data;
> + char line[64];
> + char name[64];
> + char *sname;
> + long long val;
> + int n;
> +
> + while (!snd_info_get_line(buffer, line, sizeof(line))) {
> + if (sscanf(line, "%s %llx", name, &val) != 2)
> + continue;
> + if (!strcmp(name, "connection_type"))
> + e->conn_type = val;
> + else if (!strcmp(name, "port_id"))
> + e->port_id = val;
> + else if (!strcmp(name, "support_hdcp"))
> + e->support_hdcp = val;
> + else if (!strcmp(name, "support_ai"))
> + e->support_ai = val;
> + else if (!strcmp(name, "audio_sync_delay"))
> + e->aud_synch_delay = val;
> + else if (!strcmp(name, "speakers"))
> + e->spk_alloc = val;
> + else if (!strcmp(name, "sad_count"))
> + e->sad_count = val;
> + else if (!strncmp(name, "sad", 3)) {
> + sname = name + 4;
> + n = name[3] - '0';
> + if (name[4] >= '0' && name[4] <= '9') {
> + sname++;
> + n = 10 * n + name[4] - '0';
> + }
> + if (n < 0 || n > 31) /* double the CEA limit */
> + continue;
> + if (!strcmp(sname, "_coding_type"))
> + e->sad[n].format = val;
> + else if (!strcmp(sname, "_channels"))
> + e->sad[n].channels = val;
> + else if (!strcmp(sname, "_rates"))
> + e->sad[n].rates = val;
> + else if (!strcmp(sname, "_bits"))
> + e->sad[n].sample_bits = val;
> + else if (!strcmp(sname, "_max_bitrate"))
> + e->sad[n].max_bitrate = val;
> + if (n >= e->sad_count)
> + e->sad_count = n + 1;
> + }
> + }
> +}
> +
> +
> int snd_hda_eld_proc_new(struct hda_codec *codec, struct hdmi_eld *eld)
> {
> char name[32];
> @@ -512,6 +565,9 @@ int snd_hda_eld_proc_new(struct hda_code
> return err;
>
> snd_info_set_text_ops(entry, eld, hdmi_print_eld_info);
> + entry->c.text.write = hdmi_write_eld_item;
> + entry->mode |= S_IWUSR;
> +
> return 0;
> }
>
>
More information about the Alsa-devel
mailing list