Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 82fbb4f7 authored by Clemens Ladisch's avatar Clemens Ladisch
Browse files

ALSA: add DICE driver



As a start point for further development, this is an incomplete driver
for DICE devices:
- only playback (so no clock source except the bus clock)
- only 44.1 kHz
- no MIDI
- recovery after bus reset is slow
- hwdep device is created, but not actually implemented

Contains compilation fixes by Stefan Richter.

Signed-off-by: default avatarClemens Ladisch <clemens@ladisch.de>
parent 6e466452
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -138,6 +138,7 @@ Code Seq#(hex) Include File Comments
'H'	C0-DF	net/bluetooth/cmtp/cmtp.h	conflict!
'H'	C0-DF	net/bluetooth/bnep/bnep.h	conflict!
'H'	F1	linux/hid-roccat.h	<mailto:erazor_de@users.sourceforge.net>
'H'	F8-FA	sound/firewire.h
'I'	all	linux/isdn.h		conflict!
'I'	00-0F	drivers/isdn/divert/isdn_divert.h	conflict!
'I'	40-4F	linux/mISDNif.h		conflict!
+1 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ header-y += asound_fm.h
header-y += compress_offload.h
header-y += compress_params.h
header-y += emu10k1.h
header-y += firewire.h
header-y += hdsp.h
header-y += hdspm.h
header-y += sb16_csp.h
+2 −1
Original line number Diff line number Diff line
@@ -93,9 +93,10 @@ enum {
	SNDRV_HWDEP_IFACE_SB_RC,	/* SB Extigy/Audigy2NX remote control */
	SNDRV_HWDEP_IFACE_HDA,		/* HD-audio */
	SNDRV_HWDEP_IFACE_USB_STREAM,	/* direct access to usb stream */
	SNDRV_HWDEP_IFACE_FW_DICE,	/* TC DICE FireWire device */

	/* Don't forget to change the following: */
	SNDRV_HWDEP_IFACE_LAST = SNDRV_HWDEP_IFACE_USB_STREAM
	SNDRV_HWDEP_IFACE_LAST = SNDRV_HWDEP_IFACE_FW_DICE
};

struct snd_hwdep_info {
+51 −0
Original line number Diff line number Diff line
#ifndef UAPI_SOUND_FIREWIRE_H_INCLUDED
#define UAPI_SOUND_FIREWIRE_H_INCLUDED

#include <linux/ioctl.h>

/* events can be read() from the hwdep device */

#define SNDRV_FIREWIRE_EVENT_LOCK_STATUS	0x000010cc
#define SNDRV_FIREWIRE_EVENT_DICE_NOTIFICATION	0xd1ce004e

struct snd_firewire_event_common {
	unsigned int type; /* SNDRV_FIREWIRE_EVENT_xxx */
};

struct snd_firewire_event_lock_status {
	unsigned int type;
	unsigned int status; /* 0/1 = unlocked/locked */
};

struct snd_firewire_event_dice_notification {
	unsigned int type;
	unsigned int notification; /* DICE-specific bits */
};

union snd_firewire_event {
	struct snd_firewire_event_common            common;
	struct snd_firewire_event_lock_status       lock_status;
	struct snd_firewire_event_dice_notification dice_notification;
};


#define SNDRV_FIREWIRE_IOCTL_GET_INFO _IOR('H', 0xf8, struct snd_firewire_get_info)
#define SNDRV_FIREWIRE_IOCTL_LOCK      _IO('H', 0xf9)
#define SNDRV_FIREWIRE_IOCTL_UNLOCK    _IO('H', 0xfa)

#define SNDRV_FIREWIRE_TYPE_DICE	1
/* Fireworks, AV/C, RME, MOTU, ... */

struct snd_firewire_get_info {
	unsigned int type; /* SNDRV_FIREWIRE_TYPE_xxx */
	unsigned int card; /* same as fw_cdev_get_info.card */
	unsigned char guid[8];
	char device_name[16]; /* device node in /dev */
};

/*
 * SNDRV_FIREWIRE_IOCTL_LOCK prevents the driver from streaming.
 * Returns -EBUSY if the driver is already streaming.
 */

#endif
+13 −0
Original line number Diff line number Diff line
@@ -11,6 +11,19 @@ config SND_FIREWIRE_LIB
	tristate
	depends on SND_PCM

config SND_DICE
	tristate "DICE devices (EXPERIMENTAL)"
	select SND_HWDEP
	select SND_PCM
	select SND_FIREWIRE_LIB
	help
	  Say Y here to include support for many FireWire audio interfaces
	  based on the DICE chip family (DICE-II/Jr/Mini) from TC Applied
	  Technologies.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-dice.

config SND_FIREWIRE_SPEAKERS
	tristate "FireWire speakers"
	select SND_PCM
Loading