162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * ff-proc.c - a part of driver for RME Fireface series
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (c) 2015-2017 Takashi Sakamoto
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#include "./ff.h"
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ciconst char *snd_ff_proc_get_clk_label(enum snd_ff_clock_src src)
1162306a36Sopenharmony_ci{
1262306a36Sopenharmony_ci	static const char *const labels[] = {
1362306a36Sopenharmony_ci		"Internal",
1462306a36Sopenharmony_ci		"S/PDIF",
1562306a36Sopenharmony_ci		"ADAT1",
1662306a36Sopenharmony_ci		"ADAT2",
1762306a36Sopenharmony_ci		"Word",
1862306a36Sopenharmony_ci		"LTC",
1962306a36Sopenharmony_ci	};
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci	if (src >= ARRAY_SIZE(labels))
2262306a36Sopenharmony_ci		return NULL;
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci	return labels[src];
2562306a36Sopenharmony_ci}
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_cistatic void proc_dump_status(struct snd_info_entry *entry,
2862306a36Sopenharmony_ci			     struct snd_info_buffer *buffer)
2962306a36Sopenharmony_ci{
3062306a36Sopenharmony_ci	struct snd_ff *ff = entry->private_data;
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci	ff->spec->protocol->dump_status(ff, buffer);
3362306a36Sopenharmony_ci}
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_cistatic void add_node(struct snd_ff *ff, struct snd_info_entry *root,
3662306a36Sopenharmony_ci		     const char *name,
3762306a36Sopenharmony_ci		     void (*op)(struct snd_info_entry *e,
3862306a36Sopenharmony_ci				struct snd_info_buffer *b))
3962306a36Sopenharmony_ci{
4062306a36Sopenharmony_ci	struct snd_info_entry *entry;
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci	entry = snd_info_create_card_entry(ff->card, name, root);
4362306a36Sopenharmony_ci	if (entry)
4462306a36Sopenharmony_ci		snd_info_set_text_ops(entry, ff, op);
4562306a36Sopenharmony_ci}
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_civoid snd_ff_proc_init(struct snd_ff *ff)
4862306a36Sopenharmony_ci{
4962306a36Sopenharmony_ci	struct snd_info_entry *root;
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci	/*
5262306a36Sopenharmony_ci	 * All nodes are automatically removed at snd_card_disconnect(),
5362306a36Sopenharmony_ci	 * by following to link list.
5462306a36Sopenharmony_ci	 */
5562306a36Sopenharmony_ci	root = snd_info_create_card_entry(ff->card, "firewire",
5662306a36Sopenharmony_ci					  ff->card->proc_root);
5762306a36Sopenharmony_ci	if (root == NULL)
5862306a36Sopenharmony_ci		return;
5962306a36Sopenharmony_ci	root->mode = S_IFDIR | 0555;
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci	add_node(ff, root, "status", proc_dump_status);
6262306a36Sopenharmony_ci}
63