Skip to content

Commit

Permalink
ALSA: fireface: add proc node to help debugging
Browse files Browse the repository at this point in the history
Drivers can retrieve the state and configuration of clock by read
transactions.

This commit allows protocol abstraction layer to to dump the
information for debugging, via proc interface.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
Takashi Sakamoto authored and Takashi Iwai committed Apr 5, 2017
1 parent ff2c293 commit d3fc7aa
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 1 deletion.
2 changes: 1 addition & 1 deletion sound/firewire/fireface/Makefile
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
snd-fireface-objs := ff.o ff-transaction.o ff-midi.o
snd-fireface-objs := ff.o ff-transaction.o ff-midi.o ff-proc.o
obj-$(CONFIG_SND_FIREFACE) += snd-fireface.o
63 changes: 63 additions & 0 deletions sound/firewire/fireface/ff-proc.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/*
* ff-proc.c - a part of driver for RME Fireface series
*
* Copyright (c) 2015-2017 Takashi Sakamoto
*
* Licensed under the terms of the GNU General Public License, version 2.
*/

#include "./ff.h"

static void proc_dump_clock_config(struct snd_info_entry *entry,
struct snd_info_buffer *buffer)
{
struct snd_ff *ff = entry->private_data;

ff->spec->protocol->dump_clock_config(ff, buffer);
}

static void proc_dump_sync_status(struct snd_info_entry *entry,
struct snd_info_buffer *buffer)
{
struct snd_ff *ff = entry->private_data;

ff->spec->protocol->dump_sync_status(ff, buffer);
}

static void 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))
{
struct snd_info_entry *entry;

entry = snd_info_create_card_entry(ff->card, name, root);
if (entry == NULL)
return;

snd_info_set_text_ops(entry, ff, op);
if (snd_info_register(entry) < 0)
snd_info_free_entry(entry);
}

void snd_ff_proc_init(struct snd_ff *ff)
{
struct snd_info_entry *root;

/*
* All nodes are automatically removed at snd_card_disconnect(),
* by following to link list.
*/
root = snd_info_create_card_entry(ff->card, "firewire",
ff->card->proc_root);
if (root == NULL)
return;
root->mode = S_IFDIR | S_IRUGO | S_IXUGO;
if (snd_info_register(root) < 0) {
snd_info_free_entry(root);
return;
}

add_node(ff, root, "clock-config", proc_dump_clock_config);
add_node(ff, root, "sync-status", proc_dump_sync_status);
}
2 changes: 2 additions & 0 deletions sound/firewire/fireface/ff.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ static void do_registration(struct work_struct *work)

name_card(ff);

snd_ff_proc_init(ff);

err = snd_ff_create_midi_devices(ff);
if (err < 0)
goto error;
Expand Down
2 changes: 2 additions & 0 deletions sound/firewire/fireface/ff.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ int snd_ff_transaction_register(struct snd_ff *ff);
int snd_ff_transaction_reregister(struct snd_ff *ff);
void snd_ff_transaction_unregister(struct snd_ff *ff);

void snd_ff_proc_init(struct snd_ff *ff);

int snd_ff_create_midi_devices(struct snd_ff *ff);

#endif

0 comments on commit d3fc7aa

Please sign in to comment.