root/sound/firewire/tascam/tascam-proc.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. proc_read_firmware
  2. add_node
  3. snd_tscm_proc_init

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * tascam-proc.h - a part of driver for TASCAM FireWire series
   4  *
   5  * Copyright (c) 2015 Takashi Sakamoto
   6  */
   7 
   8 #include "./tascam.h"
   9 
  10 static void proc_read_firmware(struct snd_info_entry *entry,
  11                                struct snd_info_buffer *buffer)
  12 {
  13         struct snd_tscm *tscm = entry->private_data;
  14         __be32 data;
  15         unsigned int reg, fpga, arm, hw;
  16         int err;
  17 
  18         err = snd_fw_transaction(tscm->unit, TCODE_READ_QUADLET_REQUEST,
  19                         TSCM_ADDR_BASE + TSCM_OFFSET_FIRMWARE_REGISTER,
  20                         &data, sizeof(data), 0);
  21         if (err < 0)
  22                 return;
  23         reg = be32_to_cpu(data);
  24 
  25         err = snd_fw_transaction(tscm->unit, TCODE_READ_QUADLET_REQUEST,
  26                         TSCM_ADDR_BASE + TSCM_OFFSET_FIRMWARE_FPGA,
  27                         &data, sizeof(data), 0);
  28         if (err < 0)
  29                 return;
  30         fpga = be32_to_cpu(data);
  31 
  32         err = snd_fw_transaction(tscm->unit, TCODE_READ_QUADLET_REQUEST,
  33                         TSCM_ADDR_BASE + TSCM_OFFSET_FIRMWARE_ARM,
  34                         &data, sizeof(data), 0);
  35         if (err < 0)
  36                 return;
  37         arm = be32_to_cpu(data);
  38 
  39         err = snd_fw_transaction(tscm->unit, TCODE_READ_QUADLET_REQUEST,
  40                         TSCM_ADDR_BASE + TSCM_OFFSET_FIRMWARE_HW,
  41                         &data, sizeof(data), 0);
  42         if (err < 0)
  43                 return;
  44         hw = be32_to_cpu(data);
  45 
  46         snd_iprintf(buffer, "Register: %d (0x%08x)\n", reg & 0xffff, reg);
  47         snd_iprintf(buffer, "FPGA:     %d (0x%08x)\n", fpga & 0xffff, fpga);
  48         snd_iprintf(buffer, "ARM:      %d (0x%08x)\n", arm & 0xffff, arm);
  49         snd_iprintf(buffer, "Hardware: %d (0x%08x)\n", hw >> 16, hw);
  50 }
  51 
  52 static void add_node(struct snd_tscm *tscm, struct snd_info_entry *root,
  53                      const char *name,
  54                      void (*op)(struct snd_info_entry *e,
  55                                 struct snd_info_buffer *b))
  56 {
  57         struct snd_info_entry *entry;
  58 
  59         entry = snd_info_create_card_entry(tscm->card, name, root);
  60         if (entry)
  61                 snd_info_set_text_ops(entry, tscm, op);
  62 }
  63 
  64 void snd_tscm_proc_init(struct snd_tscm *tscm)
  65 {
  66         struct snd_info_entry *root;
  67 
  68         /*
  69          * All nodes are automatically removed at snd_card_disconnect(),
  70          * by following to link list.
  71          */
  72         root = snd_info_create_card_entry(tscm->card, "firewire",
  73                                           tscm->card->proc_root);
  74         if (root == NULL)
  75                 return;
  76         root->mode = S_IFDIR | 0555;
  77 
  78         add_node(tscm, root, "firmware", proc_read_firmware);
  79 }

/* [<][>][^][v][top][bottom][index][help] */