]> git.karo-electronics.de Git - linux-beck.git/commitdiff
ALSA: firewire-tascam: Turn on/off FireWire LED
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Mon, 12 Oct 2015 10:10:24 +0000 (19:10 +0900)
committerTakashi Iwai <tiwai@suse.de>
Mon, 12 Oct 2015 12:16:19 +0000 (14:16 +0200)
TASCAM FireWire series has some LEDs on its surface. These LEDs can be
turned on/off by receiving asynchronous transactions to a certain
address. One of the LEDs is labels as 'FireWire'. It's better to light it
up when this driver starts to work. Besides, the LED for 'FireWire' is
turned off at bus reset.

This commit implements this idea.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/tascam/tascam-transaction.c
sound/firewire/tascam/tascam.h

index 6b74fb5e5fd7a8c87ad153777da4f558d566302b..1c9a88be55c83b2bdab066717092ba339083248d 100644 (file)
@@ -252,6 +252,14 @@ int snd_tscm_transaction_reregister(struct snd_tscm *tscm)
        return snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST,
                                  TSCM_ADDR_BASE + TSCM_OFFSET_MIDI_TX_ON,
                                  &reg, sizeof(reg), 0);
+       if (err < 0)
+               return err;
+
+       /* Turn on FireWire LED. */
+       reg = cpu_to_be32(0x0001008e);
+       return snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST,
+                                 TSCM_ADDR_BASE + TSCM_OFFSET_LED_POWER,
+                                 &reg, sizeof(reg), 0);
 }
 
 void snd_tscm_transaction_unregister(struct snd_tscm *tscm)
@@ -259,6 +267,12 @@ void snd_tscm_transaction_unregister(struct snd_tscm *tscm)
        __be32 reg;
        unsigned int i;
 
+       /* Turn off FireWire LED. */
+       reg = cpu_to_be32(0x0000008e);
+       snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST,
+                          TSCM_ADDR_BASE + TSCM_OFFSET_LED_POWER,
+                          &reg, sizeof(reg), 0);
+
        /* Turn off messaging. */
        reg = cpu_to_be32(0x00000000);
        snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST,
index b86bb7f4f01d2ebffd939f165fb7e856e43a80f8..2d028d2bd3bdcdcd8be15a184e555786726c94d8 100644 (file)
@@ -101,6 +101,8 @@ struct snd_tscm {
 #define TSCM_OFFSET_MIDI_TX_ADDR_HI    0x0304
 #define TSCM_OFFSET_MIDI_TX_ADDR_LO    0x0308
 
+#define TSCM_OFFSET_LED_POWER          0x0404
+
 #define TSCM_OFFSET_MIDI_RX_QUAD       0x4000
 
 enum snd_tscm_clock {