1*da607e19SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
2d3fc7aacSTakashi Sakamoto /*
3d3fc7aacSTakashi Sakamoto * ff-proc.c - a part of driver for RME Fireface series
4d3fc7aacSTakashi Sakamoto *
5d3fc7aacSTakashi Sakamoto * Copyright (c) 2015-2017 Takashi Sakamoto
6d3fc7aacSTakashi Sakamoto */
7d3fc7aacSTakashi Sakamoto
8d3fc7aacSTakashi Sakamoto #include "./ff.h"
9d3fc7aacSTakashi Sakamoto
snd_ff_proc_get_clk_label(enum snd_ff_clock_src src)104c4871a8STakashi Sakamoto const char *snd_ff_proc_get_clk_label(enum snd_ff_clock_src src)
114c4871a8STakashi Sakamoto {
124c4871a8STakashi Sakamoto static const char *const labels[] = {
134c4871a8STakashi Sakamoto "Internal",
144c4871a8STakashi Sakamoto "S/PDIF",
154c4871a8STakashi Sakamoto "ADAT1",
164c4871a8STakashi Sakamoto "ADAT2",
174c4871a8STakashi Sakamoto "Word",
184c4871a8STakashi Sakamoto "LTC",
194c4871a8STakashi Sakamoto };
204c4871a8STakashi Sakamoto
214c4871a8STakashi Sakamoto if (src >= ARRAY_SIZE(labels))
224c4871a8STakashi Sakamoto return NULL;
234c4871a8STakashi Sakamoto
244c4871a8STakashi Sakamoto return labels[src];
254c4871a8STakashi Sakamoto }
264c4871a8STakashi Sakamoto
proc_dump_status(struct snd_info_entry * entry,struct snd_info_buffer * buffer)272f8af5b3STakashi Sakamoto static void proc_dump_status(struct snd_info_entry *entry,
282f8af5b3STakashi Sakamoto struct snd_info_buffer *buffer)
292f8af5b3STakashi Sakamoto {
302f8af5b3STakashi Sakamoto struct snd_ff *ff = entry->private_data;
312f8af5b3STakashi Sakamoto
32e9e29cf8STakashi Sakamoto ff->spec->protocol->dump_status(ff, buffer);
332f8af5b3STakashi Sakamoto }
342f8af5b3STakashi Sakamoto
add_node(struct snd_ff * ff,struct snd_info_entry * root,const char * name,void (* op)(struct snd_info_entry * e,struct snd_info_buffer * b))35d3fc7aacSTakashi Sakamoto static void add_node(struct snd_ff *ff, struct snd_info_entry *root,
36d3fc7aacSTakashi Sakamoto const char *name,
37d3fc7aacSTakashi Sakamoto void (*op)(struct snd_info_entry *e,
38d3fc7aacSTakashi Sakamoto struct snd_info_buffer *b))
39d3fc7aacSTakashi Sakamoto {
40d3fc7aacSTakashi Sakamoto struct snd_info_entry *entry;
41d3fc7aacSTakashi Sakamoto
42d3fc7aacSTakashi Sakamoto entry = snd_info_create_card_entry(ff->card, name, root);
430c298bdcSTakashi Iwai if (entry)
44d3fc7aacSTakashi Sakamoto snd_info_set_text_ops(entry, ff, op);
45d3fc7aacSTakashi Sakamoto }
46d3fc7aacSTakashi Sakamoto
snd_ff_proc_init(struct snd_ff * ff)47d3fc7aacSTakashi Sakamoto void snd_ff_proc_init(struct snd_ff *ff)
48d3fc7aacSTakashi Sakamoto {
49d3fc7aacSTakashi Sakamoto struct snd_info_entry *root;
50d3fc7aacSTakashi Sakamoto
51d3fc7aacSTakashi Sakamoto /*
52d3fc7aacSTakashi Sakamoto * All nodes are automatically removed at snd_card_disconnect(),
53d3fc7aacSTakashi Sakamoto * by following to link list.
54d3fc7aacSTakashi Sakamoto */
55d3fc7aacSTakashi Sakamoto root = snd_info_create_card_entry(ff->card, "firewire",
56d3fc7aacSTakashi Sakamoto ff->card->proc_root);
57d3fc7aacSTakashi Sakamoto if (root == NULL)
58d3fc7aacSTakashi Sakamoto return;
596a73cf46SJoe Perches root->mode = S_IFDIR | 0555;
60d3fc7aacSTakashi Sakamoto
612f8af5b3STakashi Sakamoto add_node(ff, root, "status", proc_dump_status);
62d3fc7aacSTakashi Sakamoto }
63