xref: /openbmc/linux/sound/firewire/fireface/ff-proc.c (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
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