GNU Linux-libre 4.19.286-gnu1
[releases.git] / sound / firewire / fireface / ff-proc.c
1 /*
2  * ff-proc.c - a part of driver for RME Fireface series
3  *
4  * Copyright (c) 2015-2017 Takashi Sakamoto
5  *
6  * Licensed under the terms of the GNU General Public License, version 2.
7  */
8
9 #include "./ff.h"
10
11 static void proc_dump_clock_config(struct snd_info_entry *entry,
12                                    struct snd_info_buffer *buffer)
13 {
14         struct snd_ff *ff = entry->private_data;
15
16         ff->spec->protocol->dump_clock_config(ff, buffer);
17 }
18
19 static void proc_dump_sync_status(struct snd_info_entry *entry,
20                                   struct snd_info_buffer *buffer)
21 {
22         struct snd_ff *ff = entry->private_data;
23
24         ff->spec->protocol->dump_sync_status(ff, buffer);
25 }
26
27 static void add_node(struct snd_ff *ff, struct snd_info_entry *root,
28                      const char *name,
29                      void (*op)(struct snd_info_entry *e,
30                                 struct snd_info_buffer *b))
31 {
32         struct snd_info_entry *entry;
33
34         entry = snd_info_create_card_entry(ff->card, name, root);
35         if (entry == NULL)
36                 return;
37
38         snd_info_set_text_ops(entry, ff, op);
39         if (snd_info_register(entry) < 0)
40                 snd_info_free_entry(entry);
41 }
42
43 void snd_ff_proc_init(struct snd_ff *ff)
44 {
45         struct snd_info_entry *root;
46
47         /*
48          * All nodes are automatically removed at snd_card_disconnect(),
49          * by following to link list.
50          */
51         root = snd_info_create_card_entry(ff->card, "firewire",
52                                           ff->card->proc_root);
53         if (root == NULL)
54                 return;
55         root->mode = S_IFDIR | 0555;
56         if (snd_info_register(root) < 0) {
57                 snd_info_free_entry(root);
58                 return;
59         }
60
61         add_node(ff, root, "clock-config", proc_dump_clock_config);
62         add_node(ff, root, "sync-status", proc_dump_sync_status);
63 }