0001
0002
0003
0004
0005
0006
0007
0008 #include "./tascam.h"
0009
0010 static void proc_read_firmware(struct snd_info_entry *entry,
0011 struct snd_info_buffer *buffer)
0012 {
0013 struct snd_tscm *tscm = entry->private_data;
0014 __be32 data;
0015 unsigned int reg, fpga, arm, hw;
0016 int err;
0017
0018 err = snd_fw_transaction(tscm->unit, TCODE_READ_QUADLET_REQUEST,
0019 TSCM_ADDR_BASE + TSCM_OFFSET_FIRMWARE_REGISTER,
0020 &data, sizeof(data), 0);
0021 if (err < 0)
0022 return;
0023 reg = be32_to_cpu(data);
0024
0025 err = snd_fw_transaction(tscm->unit, TCODE_READ_QUADLET_REQUEST,
0026 TSCM_ADDR_BASE + TSCM_OFFSET_FIRMWARE_FPGA,
0027 &data, sizeof(data), 0);
0028 if (err < 0)
0029 return;
0030 fpga = be32_to_cpu(data);
0031
0032 err = snd_fw_transaction(tscm->unit, TCODE_READ_QUADLET_REQUEST,
0033 TSCM_ADDR_BASE + TSCM_OFFSET_FIRMWARE_ARM,
0034 &data, sizeof(data), 0);
0035 if (err < 0)
0036 return;
0037 arm = be32_to_cpu(data);
0038
0039 err = snd_fw_transaction(tscm->unit, TCODE_READ_QUADLET_REQUEST,
0040 TSCM_ADDR_BASE + TSCM_OFFSET_FIRMWARE_HW,
0041 &data, sizeof(data), 0);
0042 if (err < 0)
0043 return;
0044 hw = be32_to_cpu(data);
0045
0046 snd_iprintf(buffer, "Register: %d (0x%08x)\n", reg & 0xffff, reg);
0047 snd_iprintf(buffer, "FPGA: %d (0x%08x)\n", fpga & 0xffff, fpga);
0048 snd_iprintf(buffer, "ARM: %d (0x%08x)\n", arm & 0xffff, arm);
0049 snd_iprintf(buffer, "Hardware: %d (0x%08x)\n", hw >> 16, hw);
0050 }
0051
0052 static void add_node(struct snd_tscm *tscm, struct snd_info_entry *root,
0053 const char *name,
0054 void (*op)(struct snd_info_entry *e,
0055 struct snd_info_buffer *b))
0056 {
0057 struct snd_info_entry *entry;
0058
0059 entry = snd_info_create_card_entry(tscm->card, name, root);
0060 if (entry)
0061 snd_info_set_text_ops(entry, tscm, op);
0062 }
0063
0064 void snd_tscm_proc_init(struct snd_tscm *tscm)
0065 {
0066 struct snd_info_entry *root;
0067
0068
0069
0070
0071
0072 root = snd_info_create_card_entry(tscm->card, "firewire",
0073 tscm->card->proc_root);
0074 if (root == NULL)
0075 return;
0076 root->mode = S_IFDIR | 0555;
0077
0078 add_node(tscm, root, "firmware", proc_read_firmware);
0079 }