^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * ff-proc.c - a part of driver for RME Fireface series
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright (c) 2015-2017 Takashi Sakamoto
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include "./ff.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) const char *snd_ff_proc_get_clk_label(enum snd_ff_clock_src src)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) static const char *const labels[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) "Internal",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) "S/PDIF",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) "ADAT1",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) "ADAT2",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) "Word",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) "LTC",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) if (src >= ARRAY_SIZE(labels))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) return labels[src];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) static void proc_dump_status(struct snd_info_entry *entry,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) struct snd_info_buffer *buffer)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) struct snd_ff *ff = entry->private_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) ff->spec->protocol->dump_status(ff, buffer);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) static void add_node(struct snd_ff *ff, struct snd_info_entry *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) const char *name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) void (*op)(struct snd_info_entry *e,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) struct snd_info_buffer *b))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) struct snd_info_entry *entry;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) entry = snd_info_create_card_entry(ff->card, name, root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) if (entry)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) snd_info_set_text_ops(entry, ff, op);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) void snd_ff_proc_init(struct snd_ff *ff)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) struct snd_info_entry *root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) * All nodes are automatically removed at snd_card_disconnect(),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) * by following to link list.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) root = snd_info_create_card_entry(ff->card, "firewire",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) ff->card->proc_root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) if (root == NULL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) root->mode = S_IFDIR | 0555;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) add_node(ff, root, "status", proc_dump_status);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) }