diff options
-rw-r--r-- | sound/pci/hda/hda_eld.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/sound/pci/hda/hda_eld.c b/sound/pci/hda/hda_eld.c index 248cddf0ee80..d2b7ccca3bb3 100644 --- a/sound/pci/hda/hda_eld.c +++ b/sound/pci/hda/hda_eld.c | |||
@@ -500,6 +500,59 @@ static void hdmi_print_eld_info(struct snd_info_entry *entry, | |||
500 | hdmi_print_sad_info(i, e->sad + i, buffer); | 500 | hdmi_print_sad_info(i, e->sad + i, buffer); |
501 | } | 501 | } |
502 | 502 | ||
503 | static void hdmi_write_eld_item(struct snd_info_entry *entry, | ||
504 | struct snd_info_buffer *buffer) | ||
505 | { | ||
506 | struct hdmi_eld *e = entry->private_data; | ||
507 | char line[64]; | ||
508 | char name[64]; | ||
509 | char *sname; | ||
510 | long long val; | ||
511 | int n; | ||
512 | |||
513 | while (!snd_info_get_line(buffer, line, sizeof(line))) { | ||
514 | if (sscanf(line, "%s %llx", name, &val) != 2) | ||
515 | continue; | ||
516 | if (!strcmp(name, "connection_type")) | ||
517 | e->conn_type = val; | ||
518 | else if (!strcmp(name, "port_id")) | ||
519 | e->port_id = val; | ||
520 | else if (!strcmp(name, "support_hdcp")) | ||
521 | e->support_hdcp = val; | ||
522 | else if (!strcmp(name, "support_ai")) | ||
523 | e->support_ai = val; | ||
524 | else if (!strcmp(name, "audio_sync_delay")) | ||
525 | e->aud_synch_delay = val; | ||
526 | else if (!strcmp(name, "speakers")) | ||
527 | e->spk_alloc = val; | ||
528 | else if (!strcmp(name, "sad_count")) | ||
529 | e->sad_count = val; | ||
530 | else if (!strncmp(name, "sad", 3)) { | ||
531 | sname = name + 4; | ||
532 | n = name[3] - '0'; | ||
533 | if (name[4] >= '0' && name[4] <= '9') { | ||
534 | sname++; | ||
535 | n = 10 * n + name[4] - '0'; | ||
536 | } | ||
537 | if (n < 0 || n > 31) /* double the CEA limit */ | ||
538 | continue; | ||
539 | if (!strcmp(sname, "_coding_type")) | ||
540 | e->sad[n].format = val; | ||
541 | else if (!strcmp(sname, "_channels")) | ||
542 | e->sad[n].channels = val; | ||
543 | else if (!strcmp(sname, "_rates")) | ||
544 | e->sad[n].rates = val; | ||
545 | else if (!strcmp(sname, "_bits")) | ||
546 | e->sad[n].sample_bits = val; | ||
547 | else if (!strcmp(sname, "_max_bitrate")) | ||
548 | e->sad[n].max_bitrate = val; | ||
549 | if (n >= e->sad_count) | ||
550 | e->sad_count = n + 1; | ||
551 | } | ||
552 | } | ||
553 | } | ||
554 | |||
555 | |||
503 | int snd_hda_eld_proc_new(struct hda_codec *codec, struct hdmi_eld *eld) | 556 | int snd_hda_eld_proc_new(struct hda_codec *codec, struct hdmi_eld *eld) |
504 | { | 557 | { |
505 | char name[32]; | 558 | char name[32]; |
@@ -512,6 +565,9 @@ int snd_hda_eld_proc_new(struct hda_codec *codec, struct hdmi_eld *eld) | |||
512 | return err; | 565 | return err; |
513 | 566 | ||
514 | snd_info_set_text_ops(entry, eld, hdmi_print_eld_info); | 567 | snd_info_set_text_ops(entry, eld, hdmi_print_eld_info); |
568 | entry->c.text.write = hdmi_write_eld_item; | ||
569 | entry->mode |= S_IWUSR; | ||
570 | |||
515 | return 0; | 571 | return 0; |
516 | } | 572 | } |
517 | 573 | ||