2 * tascam-proc.h - a part of driver for TASCAM FireWire series
4 * Copyright (c) 2015 Takashi Sakamoto
6 * Licensed under the terms of the GNU General Public License, version 2.
11 static void proc_read_firmware(struct snd_info_entry
*entry
,
12 struct snd_info_buffer
*buffer
)
14 struct snd_tscm
*tscm
= entry
->private_data
;
16 unsigned int reg
, fpga
, arm
, hw
;
19 err
= snd_fw_transaction(tscm
->unit
, TCODE_READ_QUADLET_REQUEST
,
20 TSCM_ADDR_BASE
+ TSCM_OFFSET_FIRMWARE_REGISTER
,
21 &data
, sizeof(data
), 0);
24 reg
= be32_to_cpu(data
);
26 err
= snd_fw_transaction(tscm
->unit
, TCODE_READ_QUADLET_REQUEST
,
27 TSCM_ADDR_BASE
+ TSCM_OFFSET_FIRMWARE_FPGA
,
28 &data
, sizeof(data
), 0);
31 fpga
= be32_to_cpu(data
);
33 err
= snd_fw_transaction(tscm
->unit
, TCODE_READ_QUADLET_REQUEST
,
34 TSCM_ADDR_BASE
+ TSCM_OFFSET_FIRMWARE_ARM
,
35 &data
, sizeof(data
), 0);
38 arm
= be32_to_cpu(data
);
40 err
= snd_fw_transaction(tscm
->unit
, TCODE_READ_QUADLET_REQUEST
,
41 TSCM_ADDR_BASE
+ TSCM_OFFSET_FIRMWARE_HW
,
42 &data
, sizeof(data
), 0);
45 hw
= be32_to_cpu(data
);
47 snd_iprintf(buffer
, "Register: %d (0x%08x)\n", reg
& 0xffff, reg
);
48 snd_iprintf(buffer
, "FPGA: %d (0x%08x)\n", fpga
& 0xffff, fpga
);
49 snd_iprintf(buffer
, "ARM: %d (0x%08x)\n", arm
& 0xffff, arm
);
50 snd_iprintf(buffer
, "Hardware: %d (0x%08x)\n", hw
>> 16, hw
);
53 static void add_node(struct snd_tscm
*tscm
, struct snd_info_entry
*root
,
55 void (*op
)(struct snd_info_entry
*e
,
56 struct snd_info_buffer
*b
))
58 struct snd_info_entry
*entry
;
60 entry
= snd_info_create_card_entry(tscm
->card
, name
, root
);
64 snd_info_set_text_ops(entry
, tscm
, op
);
65 if (snd_info_register(entry
) < 0)
66 snd_info_free_entry(entry
);
69 void snd_tscm_proc_init(struct snd_tscm
*tscm
)
71 struct snd_info_entry
*root
;
74 * All nodes are automatically removed at snd_card_disconnect(),
75 * by following to link list.
77 root
= snd_info_create_card_entry(tscm
->card
, "firewire",
78 tscm
->card
->proc_root
);
81 root
->mode
= S_IFDIR
| S_IRUGO
| S_IXUGO
;
82 if (snd_info_register(root
) < 0) {
83 snd_info_free_entry(root
);
87 add_node(tscm
, root
, "firmware", proc_read_firmware
);