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