summaryrefslogtreecommitdiff
path: root/sound/firewire
diff options
context:
space:
mode:
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>2015-10-12 19:10:24 +0900
committerTakashi Iwai <tiwai@suse.de>2015-10-12 14:16:19 +0200
commite65e2cb99e44704f63b76e4395092b0533bef88b (patch)
treeb09144d2b84fabb0adb84c0bf5e90debb4d96447 /sound/firewire
parent0db18e7eec40a4331214185b37b0440856856775 (diff)
downloadlinux-next-e65e2cb99e44704f63b76e4395092b0533bef88b.tar.gz
ALSA: firewire-tascam: Turn on/off FireWire LED
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>
Diffstat (limited to 'sound/firewire')
-rw-r--r--sound/firewire/tascam/tascam-transaction.c14
-rw-r--r--sound/firewire/tascam/tascam.h2
2 files changed, 16 insertions, 0 deletions
diff --git a/sound/firewire/tascam/tascam-transaction.c b/sound/firewire/tascam/tascam-transaction.c
index 6b74fb5e5fd7..1c9a88be55c8 100644
--- a/sound/firewire/tascam/tascam-transaction.c
+++ b/sound/firewire/tascam/tascam-transaction.c
@@ -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,
diff --git a/sound/firewire/tascam/tascam.h b/sound/firewire/tascam/tascam.h
index b86bb7f4f01d..2d028d2bd3bd 100644
--- a/sound/firewire/tascam/tascam.h
+++ b/sound/firewire/tascam/tascam.h
@@ -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 {