summaryrefslogtreecommitdiffstats
path: root/meta/recipes-multimedia/alsa
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-multimedia/alsa')
-rw-r--r--meta/recipes-multimedia/alsa/alsa-lib/0001-Fix-alsa-sound-.h-for-external-programs.patch7104
-rw-r--r--meta/recipes-multimedia/alsa/alsa-lib/0001-configure.ac-remove-an-unnecessary-libtool-fix.patch50
-rw-r--r--meta/recipes-multimedia/alsa/alsa-lib/0001-uapi-Move-typedefs-from-uapi-to-sound.patch137
-rw-r--r--meta/recipes-multimedia/alsa/alsa-lib/0001-ucm-Use-strncmp-to-avoid-access-out-of-boundary.patch41
-rw-r--r--meta/recipes-multimedia/alsa/alsa-lib/0002-ucm-return-always-at-least-NULL-if-no-list-is-availa.patch45
-rw-r--r--meta/recipes-multimedia/alsa/alsa-lib/0003-namehint-correct-the-args-check.patch34
-rw-r--r--meta/recipes-multimedia/alsa/alsa-lib/0004-namehint-improve-the-previous-patch-check-the-return.patch31
-rw-r--r--meta/recipes-multimedia/alsa/alsa-lib/0005-ucm-Do-not-fail-to-parse-configs-on-cards-with-an-em.patch86
-rw-r--r--meta/recipes-multimedia/alsa/alsa-lib_1.2.2.bb (renamed from meta/recipes-multimedia/alsa/alsa-lib_1.2.1.2.bb)15
9 files changed, 3 insertions, 7540 deletions
diff --git a/meta/recipes-multimedia/alsa/alsa-lib/0001-Fix-alsa-sound-.h-for-external-programs.patch b/meta/recipes-multimedia/alsa/alsa-lib/0001-Fix-alsa-sound-.h-for-external-programs.patch
deleted file mode 100644
index 890650a772..0000000000
--- a/meta/recipes-multimedia/alsa/alsa-lib/0001-Fix-alsa-sound-.h-for-external-programs.patch
+++ /dev/null
@@ -1,7104 +0,0 @@
-From ae564665ec261cf104de499b1cdda3564070fc65 Mon Sep 17 00:00:00 2001
-From: Takashi Iwai <tiwai@suse.de>
-Date: Fri, 20 Dec 2019 15:46:48 +0100
-Subject: [PATCH] Fix alsa/sound/*.h for external programs
-
-The recent update of sound/*.h to sync with the latest Linus uapi
-files broke the build of alsa-tools programs. These files used to be
-a modified version of Linux sound/* header files, so that they could
-be built without Linux headers. The special prefix like __user and
-other things were worked around there.
-
-We may do that again, but a better approach is to fix those things in
-Linux kernel uapi side, while we keep the minimal workaround in
-alsa-lib such as the __u16 and co type definitions.
-
-This patch is such an attempt, namely:
-- Keep the original $LINUX/uapi/sound/*.h in include/sound/uapi
- directory
-- The "fixes" are applied to some uapi headers, so that they don't
- contain Linux-specific prefix and use of opaque struct like
- snd_ctl_elem_id
-- The uapi headers are included indirectly from include/sound/*.h
-- Some headers have inclusion of type_compat.h for the Linux variable
- types and prefixes
-- type_compat.h tries to use <linux/types.h> when __linux__ is
- defined, instead of the own conflicting definitions
-
-The last type might need a bit more adjustment depending on the
-compiler, but it can be fixed locally without disturbing else.
-
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-
-Upstream-Status: Backport
-
-Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
-
----
- configure.ac | 3 +-
- include/sound/Makefile.am | 6 +-
- include/sound/asequencer.h | 613 +----------------
- include/sound/asoc.h | 634 +-----------------
- include/sound/asound.h | 1039 +----------------------------
- include/sound/asound_fm.h | 136 +---
- include/sound/emu10k1.h | 383 +----------
- include/sound/hdsp.h | 113 +---
- include/sound/hdspm.h | 234 +------
- include/sound/sb16_csp.h | 124 +---
- include/sound/sscape_ioctl.h | 22 +-
- include/sound/tlv.h | 118 +---
- include/sound/type_compat.h | 13 +
- include/sound/uapi/Makefile.am | 6 +
- include/sound/uapi/asequencer.h | 612 +++++++++++++++++
- include/sound/uapi/asoc.h | 633 ++++++++++++++++++
- include/sound/uapi/asound.h | 1038 ++++++++++++++++++++++++++++
- include/sound/uapi/asound_fm.h | 135 ++++
- include/sound/uapi/emu10k1.h | 395 +++++++++++
- include/sound/uapi/hdsp.h | 109 +++
- include/sound/uapi/hdspm.h | 230 +++++++
- include/sound/uapi/sb16_csp.h | 123 ++++
- include/sound/uapi/sscape_ioctl.h | 21 +
- include/sound/uapi/tlv.h | 117 ++++
- src/topology/tplg_local.h | 3 +-
- 25 files changed, 3452 insertions(+), 3408 deletions(-)
- create mode 100644 include/sound/uapi/Makefile.am
- create mode 100644 include/sound/uapi/asequencer.h
- create mode 100644 include/sound/uapi/asoc.h
- create mode 100644 include/sound/uapi/asound.h
- create mode 100644 include/sound/uapi/asound_fm.h
- create mode 100644 include/sound/uapi/emu10k1.h
- create mode 100644 include/sound/uapi/hdsp.h
- create mode 100644 include/sound/uapi/hdspm.h
- create mode 100644 include/sound/uapi/sb16_csp.h
- create mode 100644 include/sound/uapi/sscape_ioctl.h
- create mode 100644 include/sound/uapi/tlv.h
-
-diff --git a/configure.ac b/configure.ac
-index 119ef600..886f87bc 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -707,7 +707,8 @@ if test ! -L "$srcdir"/include/alsa ; then
- fi
-
- AC_OUTPUT(Makefile doc/Makefile doc/pictures/Makefile doc/doxygen.cfg \
-- include/Makefile include/sound/Makefile src/Versions src/Makefile \
-+ include/Makefile include/sound/Makefile include/sound/uapi/Makefile \
-+ src/Versions src/Makefile \
- src/control/Makefile src/mixer/Makefile \
- src/pcm/Makefile src/pcm/scopes/Makefile \
- src/rawmidi/Makefile src/timer/Makefile \
-diff --git a/include/sound/Makefile.am b/include/sound/Makefile.am
-index 99c42211..ccc7d273 100644
---- a/include/sound/Makefile.am
-+++ b/include/sound/Makefile.am
-@@ -1,7 +1,9 @@
-+SUBDIRS = uapi
-+
- alsasoundincludedir = ${includedir}/alsa/sound
-
- alsasoundinclude_HEADERS = asound_fm.h hdsp.h hdspm.h sb16_csp.h \
-- sscape_ioctl.h emu10k1.h type_compat.h \
-- asoc.h tlv.h
-+ sscape_ioctl.h emu10k1.h asoc.h tlv.h \
-+ type_compat.h
-
- noinst_HEADERS = asound.h asequencer.h
-diff --git a/include/sound/asequencer.h b/include/sound/asequencer.h
-index a75e14ed..e539a77e 100644
---- a/include/sound/asequencer.h
-+++ b/include/sound/asequencer.h
-@@ -1,612 +1 @@
--/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
--/*
-- * Main header file for the ALSA sequencer
-- * Copyright (c) 1998-1999 by Frank van de Pol <fvdpol@coil.demon.nl>
-- * (c) 1998-1999 by Jaroslav Kysela <perex@perex.cz>
-- *
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 2 of the License, or
-- * (at your option) any later version.
-- *
-- * This program is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- * GNU General Public License for more details.
-- *
-- * You should have received a copy of the GNU General Public License
-- * along with this program; if not, write to the Free Software
-- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-- *
-- */
--#ifndef _UAPI__SOUND_ASEQUENCER_H
--#define _UAPI__SOUND_ASEQUENCER_H
--
--#include <sound/asound.h>
--
--/** version of the sequencer */
--#define SNDRV_SEQ_VERSION SNDRV_PROTOCOL_VERSION(1, 0, 2)
--
--/**
-- * definition of sequencer event types
-- */
--
--/** system messages
-- * event data type = #snd_seq_result
-- */
--#define SNDRV_SEQ_EVENT_SYSTEM 0
--#define SNDRV_SEQ_EVENT_RESULT 1
--
--/** note messages (channel specific)
-- * event data type = #snd_seq_ev_note
-- */
--#define SNDRV_SEQ_EVENT_NOTE 5
--#define SNDRV_SEQ_EVENT_NOTEON 6
--#define SNDRV_SEQ_EVENT_NOTEOFF 7
--#define SNDRV_SEQ_EVENT_KEYPRESS 8
--
--/** control messages (channel specific)
-- * event data type = #snd_seq_ev_ctrl
-- */
--#define SNDRV_SEQ_EVENT_CONTROLLER 10
--#define SNDRV_SEQ_EVENT_PGMCHANGE 11
--#define SNDRV_SEQ_EVENT_CHANPRESS 12
--#define SNDRV_SEQ_EVENT_PITCHBEND 13 /**< from -8192 to 8191 */
--#define SNDRV_SEQ_EVENT_CONTROL14 14 /**< 14 bit controller value */
--#define SNDRV_SEQ_EVENT_NONREGPARAM 15 /**< 14 bit NRPN address + 14 bit unsigned value */
--#define SNDRV_SEQ_EVENT_REGPARAM 16 /**< 14 bit RPN address + 14 bit unsigned value */
--
--/** synchronisation messages
-- * event data type = #snd_seq_ev_ctrl
-- */
--#define SNDRV_SEQ_EVENT_SONGPOS 20 /* Song Position Pointer with LSB and MSB values */
--#define SNDRV_SEQ_EVENT_SONGSEL 21 /* Song Select with song ID number */
--#define SNDRV_SEQ_EVENT_QFRAME 22 /* midi time code quarter frame */
--#define SNDRV_SEQ_EVENT_TIMESIGN 23 /* SMF Time Signature event */
--#define SNDRV_SEQ_EVENT_KEYSIGN 24 /* SMF Key Signature event */
--
--/** timer messages
-- * event data type = snd_seq_ev_queue_control
-- */
--#define SNDRV_SEQ_EVENT_START 30 /* midi Real Time Start message */
--#define SNDRV_SEQ_EVENT_CONTINUE 31 /* midi Real Time Continue message */
--#define SNDRV_SEQ_EVENT_STOP 32 /* midi Real Time Stop message */
--#define SNDRV_SEQ_EVENT_SETPOS_TICK 33 /* set tick queue position */
--#define SNDRV_SEQ_EVENT_SETPOS_TIME 34 /* set realtime queue position */
--#define SNDRV_SEQ_EVENT_TEMPO 35 /* (SMF) Tempo event */
--#define SNDRV_SEQ_EVENT_CLOCK 36 /* midi Real Time Clock message */
--#define SNDRV_SEQ_EVENT_TICK 37 /* midi Real Time Tick message */
--#define SNDRV_SEQ_EVENT_QUEUE_SKEW 38 /* skew queue tempo */
--
--/** others
-- * event data type = none
-- */
--#define SNDRV_SEQ_EVENT_TUNE_REQUEST 40 /* tune request */
--#define SNDRV_SEQ_EVENT_RESET 41 /* reset to power-on state */
--#define SNDRV_SEQ_EVENT_SENSING 42 /* "active sensing" event */
--
--/** echo back, kernel private messages
-- * event data type = any type
-- */
--#define SNDRV_SEQ_EVENT_ECHO 50 /* echo event */
--#define SNDRV_SEQ_EVENT_OSS 51 /* OSS raw event */
--
--/** system status messages (broadcast for subscribers)
-- * event data type = snd_seq_addr
-- */
--#define SNDRV_SEQ_EVENT_CLIENT_START 60 /* new client has connected */
--#define SNDRV_SEQ_EVENT_CLIENT_EXIT 61 /* client has left the system */
--#define SNDRV_SEQ_EVENT_CLIENT_CHANGE 62 /* client status/info has changed */
--#define SNDRV_SEQ_EVENT_PORT_START 63 /* new port was created */
--#define SNDRV_SEQ_EVENT_PORT_EXIT 64 /* port was deleted from system */
--#define SNDRV_SEQ_EVENT_PORT_CHANGE 65 /* port status/info has changed */
--
--/** port connection changes
-- * event data type = snd_seq_connect
-- */
--#define SNDRV_SEQ_EVENT_PORT_SUBSCRIBED 66 /* ports connected */
--#define SNDRV_SEQ_EVENT_PORT_UNSUBSCRIBED 67 /* ports disconnected */
--
--/* 70-89: synthesizer events - obsoleted */
--
--/** user-defined events with fixed length
-- * event data type = any
-- */
--#define SNDRV_SEQ_EVENT_USR0 90
--#define SNDRV_SEQ_EVENT_USR1 91
--#define SNDRV_SEQ_EVENT_USR2 92
--#define SNDRV_SEQ_EVENT_USR3 93
--#define SNDRV_SEQ_EVENT_USR4 94
--#define SNDRV_SEQ_EVENT_USR5 95
--#define SNDRV_SEQ_EVENT_USR6 96
--#define SNDRV_SEQ_EVENT_USR7 97
--#define SNDRV_SEQ_EVENT_USR8 98
--#define SNDRV_SEQ_EVENT_USR9 99
--
--/* 100-118: instrument layer - obsoleted */
--/* 119-129: reserved */
--
--/* 130-139: variable length events
-- * event data type = snd_seq_ev_ext
-- * (SNDRV_SEQ_EVENT_LENGTH_VARIABLE must be set)
-- */
--#define SNDRV_SEQ_EVENT_SYSEX 130 /* system exclusive data (variable length) */
--#define SNDRV_SEQ_EVENT_BOUNCE 131 /* error event */
--/* 132-134: reserved */
--#define SNDRV_SEQ_EVENT_USR_VAR0 135
--#define SNDRV_SEQ_EVENT_USR_VAR1 136
--#define SNDRV_SEQ_EVENT_USR_VAR2 137
--#define SNDRV_SEQ_EVENT_USR_VAR3 138
--#define SNDRV_SEQ_EVENT_USR_VAR4 139
--
--/* 150-151: kernel events with quote - DO NOT use in user clients */
--#define SNDRV_SEQ_EVENT_KERNEL_ERROR 150
--#define SNDRV_SEQ_EVENT_KERNEL_QUOTE 151 /* obsolete */
--
--/* 152-191: reserved */
--
--/* 192-254: hardware specific events */
--
--/* 255: special event */
--#define SNDRV_SEQ_EVENT_NONE 255
--
--
--typedef unsigned char snd_seq_event_type_t;
--
--/** event address */
--struct snd_seq_addr {
-- unsigned char client; /**< Client number: 0..255, 255 = broadcast to all clients */
-- unsigned char port; /**< Port within client: 0..255, 255 = broadcast to all ports */
--};
--
--/** port connection */
--struct snd_seq_connect {
-- struct snd_seq_addr sender;
-- struct snd_seq_addr dest;
--};
--
--
--#define SNDRV_SEQ_ADDRESS_UNKNOWN 253 /* unknown source */
--#define SNDRV_SEQ_ADDRESS_SUBSCRIBERS 254 /* send event to all subscribed ports */
--#define SNDRV_SEQ_ADDRESS_BROADCAST 255 /* send event to all queues/clients/ports/channels */
--#define SNDRV_SEQ_QUEUE_DIRECT 253 /* direct dispatch */
--
-- /* event mode flag - NOTE: only 8 bits available! */
--#define SNDRV_SEQ_TIME_STAMP_TICK (0<<0) /* timestamp in clock ticks */
--#define SNDRV_SEQ_TIME_STAMP_REAL (1<<0) /* timestamp in real time */
--#define SNDRV_SEQ_TIME_STAMP_MASK (1<<0)
--
--#define SNDRV_SEQ_TIME_MODE_ABS (0<<1) /* absolute timestamp */
--#define SNDRV_SEQ_TIME_MODE_REL (1<<1) /* relative to current time */
--#define SNDRV_SEQ_TIME_MODE_MASK (1<<1)
--
--#define SNDRV_SEQ_EVENT_LENGTH_FIXED (0<<2) /* fixed event size */
--#define SNDRV_SEQ_EVENT_LENGTH_VARIABLE (1<<2) /* variable event size */
--#define SNDRV_SEQ_EVENT_LENGTH_VARUSR (2<<2) /* variable event size - user memory space */
--#define SNDRV_SEQ_EVENT_LENGTH_MASK (3<<2)
--
--#define SNDRV_SEQ_PRIORITY_NORMAL (0<<4) /* normal priority */
--#define SNDRV_SEQ_PRIORITY_HIGH (1<<4) /* event should be processed before others */
--#define SNDRV_SEQ_PRIORITY_MASK (1<<4)
--
--
-- /* note event */
--struct snd_seq_ev_note {
-- unsigned char channel;
-- unsigned char note;
-- unsigned char velocity;
-- unsigned char off_velocity; /* only for SNDRV_SEQ_EVENT_NOTE */
-- unsigned int duration; /* only for SNDRV_SEQ_EVENT_NOTE */
--};
--
-- /* controller event */
--struct snd_seq_ev_ctrl {
-- unsigned char channel;
-- unsigned char unused1, unused2, unused3; /* pad */
-- unsigned int param;
-- signed int value;
--};
--
-- /* generic set of bytes (12x8 bit) */
--struct snd_seq_ev_raw8 {
-- unsigned char d[12]; /* 8 bit value */
--};
--
-- /* generic set of integers (3x32 bit) */
--struct snd_seq_ev_raw32 {
-- unsigned int d[3]; /* 32 bit value */
--};
--
-- /* external stored data */
--struct snd_seq_ev_ext {
-- unsigned int len; /* length of data */
-- void *ptr; /* pointer to data (note: maybe 64-bit) */
--} __attribute__((packed));
--
--struct snd_seq_result {
-- int event; /* processed event type */
-- int result;
--};
--
--
--struct snd_seq_real_time {
-- unsigned int tv_sec; /* seconds */
-- unsigned int tv_nsec; /* nanoseconds */
--};
--
--typedef unsigned int snd_seq_tick_time_t; /* midi ticks */
--
--union snd_seq_timestamp {
-- snd_seq_tick_time_t tick;
-- struct snd_seq_real_time time;
--};
--
--struct snd_seq_queue_skew {
-- unsigned int value;
-- unsigned int base;
--};
--
-- /* queue timer control */
--struct snd_seq_ev_queue_control {
-- unsigned char queue; /* affected queue */
-- unsigned char pad[3]; /* reserved */
-- union {
-- signed int value; /* affected value (e.g. tempo) */
-- union snd_seq_timestamp time; /* time */
-- unsigned int position; /* sync position */
-- struct snd_seq_queue_skew skew;
-- unsigned int d32[2];
-- unsigned char d8[8];
-- } param;
--};
--
-- /* quoted event - inside the kernel only */
--struct snd_seq_ev_quote {
-- struct snd_seq_addr origin; /* original sender */
-- unsigned short value; /* optional data */
-- struct snd_seq_event *event; /* quoted event */
--} __attribute__((packed));
--
--
-- /* sequencer event */
--struct snd_seq_event {
-- snd_seq_event_type_t type; /* event type */
-- unsigned char flags; /* event flags */
-- char tag;
--
-- unsigned char queue; /* schedule queue */
-- union snd_seq_timestamp time; /* schedule time */
--
--
-- struct snd_seq_addr source; /* source address */
-- struct snd_seq_addr dest; /* destination address */
--
-- union { /* event data... */
-- struct snd_seq_ev_note note;
-- struct snd_seq_ev_ctrl control;
-- struct snd_seq_ev_raw8 raw8;
-- struct snd_seq_ev_raw32 raw32;
-- struct snd_seq_ev_ext ext;
-- struct snd_seq_ev_queue_control queue;
-- union snd_seq_timestamp time;
-- struct snd_seq_addr addr;
-- struct snd_seq_connect connect;
-- struct snd_seq_result result;
-- struct snd_seq_ev_quote quote;
-- } data;
--};
--
--
--/*
-- * bounce event - stored as variable size data
-- */
--struct snd_seq_event_bounce {
-- int err;
-- struct snd_seq_event event;
-- /* external data follows here. */
--};
--
--
-- /* system information */
--struct snd_seq_system_info {
-- int queues; /* maximum queues count */
-- int clients; /* maximum clients count */
-- int ports; /* maximum ports per client */
-- int channels; /* maximum channels per port */
-- int cur_clients; /* current clients */
-- int cur_queues; /* current queues */
-- char reserved[24];
--};
--
--
-- /* system running information */
--struct snd_seq_running_info {
-- unsigned char client; /* client id */
-- unsigned char big_endian; /* 1 = big-endian */
-- unsigned char cpu_mode; /* 4 = 32bit, 8 = 64bit */
-- unsigned char pad; /* reserved */
-- unsigned char reserved[12];
--};
--
--
-- /* known client numbers */
--#define SNDRV_SEQ_CLIENT_SYSTEM 0
-- /* internal client numbers */
--#define SNDRV_SEQ_CLIENT_DUMMY 14 /* midi through */
--#define SNDRV_SEQ_CLIENT_OSS 15 /* oss sequencer emulator */
--
--
-- /* client types */
--typedef int __bitwise snd_seq_client_type_t;
--#define NO_CLIENT ((__force snd_seq_client_type_t) 0)
--#define USER_CLIENT ((__force snd_seq_client_type_t) 1)
--#define KERNEL_CLIENT ((__force snd_seq_client_type_t) 2)
--
-- /* event filter flags */
--#define SNDRV_SEQ_FILTER_BROADCAST (1<<0) /* accept broadcast messages */
--#define SNDRV_SEQ_FILTER_MULTICAST (1<<1) /* accept multicast messages */
--#define SNDRV_SEQ_FILTER_BOUNCE (1<<2) /* accept bounce event in error */
--#define SNDRV_SEQ_FILTER_USE_EVENT (1<<31) /* use event filter */
--
--struct snd_seq_client_info {
-- int client; /* client number to inquire */
-- snd_seq_client_type_t type; /* client type */
-- char name[64]; /* client name */
-- unsigned int filter; /* filter flags */
-- unsigned char multicast_filter[8]; /* multicast filter bitmap */
-- unsigned char event_filter[32]; /* event filter bitmap */
-- int num_ports; /* RO: number of ports */
-- int event_lost; /* number of lost events */
-- int card; /* RO: card number[kernel] */
-- int pid; /* RO: pid[user] */
-- char reserved[56]; /* for future use */
--};
--
--
--/* client pool size */
--struct snd_seq_client_pool {
-- int client; /* client number to inquire */
-- int output_pool; /* outgoing (write) pool size */
-- int input_pool; /* incoming (read) pool size */
-- int output_room; /* minimum free pool size for select/blocking mode */
-- int output_free; /* unused size */
-- int input_free; /* unused size */
-- char reserved[64];
--};
--
--
--/* Remove events by specified criteria */
--
--#define SNDRV_SEQ_REMOVE_INPUT (1<<0) /* Flush input queues */
--#define SNDRV_SEQ_REMOVE_OUTPUT (1<<1) /* Flush output queues */
--#define SNDRV_SEQ_REMOVE_DEST (1<<2) /* Restrict by destination q:client:port */
--#define SNDRV_SEQ_REMOVE_DEST_CHANNEL (1<<3) /* Restrict by channel */
--#define SNDRV_SEQ_REMOVE_TIME_BEFORE (1<<4) /* Restrict to before time */
--#define SNDRV_SEQ_REMOVE_TIME_AFTER (1<<5) /* Restrict to time or after */
--#define SNDRV_SEQ_REMOVE_TIME_TICK (1<<6) /* Time is in ticks */
--#define SNDRV_SEQ_REMOVE_EVENT_TYPE (1<<7) /* Restrict to event type */
--#define SNDRV_SEQ_REMOVE_IGNORE_OFF (1<<8) /* Do not flush off events */
--#define SNDRV_SEQ_REMOVE_TAG_MATCH (1<<9) /* Restrict to events with given tag */
--
--struct snd_seq_remove_events {
-- unsigned int remove_mode; /* Flags that determine what gets removed */
--
-- union snd_seq_timestamp time;
--
-- unsigned char queue; /* Queue for REMOVE_DEST */
-- struct snd_seq_addr dest; /* Address for REMOVE_DEST */
-- unsigned char channel; /* Channel for REMOVE_DEST */
--
-- int type; /* For REMOVE_EVENT_TYPE */
-- char tag; /* Tag for REMOVE_TAG */
--
-- int reserved[10]; /* To allow for future binary compatibility */
--
--};
--
--
-- /* known port numbers */
--#define SNDRV_SEQ_PORT_SYSTEM_TIMER 0
--#define SNDRV_SEQ_PORT_SYSTEM_ANNOUNCE 1
--
-- /* port capabilities (32 bits) */
--#define SNDRV_SEQ_PORT_CAP_READ (1<<0) /* readable from this port */
--#define SNDRV_SEQ_PORT_CAP_WRITE (1<<1) /* writable to this port */
--
--#define SNDRV_SEQ_PORT_CAP_SYNC_READ (1<<2)
--#define SNDRV_SEQ_PORT_CAP_SYNC_WRITE (1<<3)
--
--#define SNDRV_SEQ_PORT_CAP_DUPLEX (1<<4)
--
--#define SNDRV_SEQ_PORT_CAP_SUBS_READ (1<<5) /* allow read subscription */
--#define SNDRV_SEQ_PORT_CAP_SUBS_WRITE (1<<6) /* allow write subscription */
--#define SNDRV_SEQ_PORT_CAP_NO_EXPORT (1<<7) /* routing not allowed */
--
-- /* port type */
--#define SNDRV_SEQ_PORT_TYPE_SPECIFIC (1<<0) /* hardware specific */
--#define SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC (1<<1) /* generic MIDI device */
--#define SNDRV_SEQ_PORT_TYPE_MIDI_GM (1<<2) /* General MIDI compatible device */
--#define SNDRV_SEQ_PORT_TYPE_MIDI_GS (1<<3) /* GS compatible device */
--#define SNDRV_SEQ_PORT_TYPE_MIDI_XG (1<<4) /* XG compatible device */
--#define SNDRV_SEQ_PORT_TYPE_MIDI_MT32 (1<<5) /* MT-32 compatible device */
--#define SNDRV_SEQ_PORT_TYPE_MIDI_GM2 (1<<6) /* General MIDI 2 compatible device */
--
--/* other standards...*/
--#define SNDRV_SEQ_PORT_TYPE_SYNTH (1<<10) /* Synth device (no MIDI compatible - direct wavetable) */
--#define SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE (1<<11) /* Sampling device (support sample download) */
--#define SNDRV_SEQ_PORT_TYPE_SAMPLE (1<<12) /* Sampling device (sample can be downloaded at any time) */
--/*...*/
--#define SNDRV_SEQ_PORT_TYPE_HARDWARE (1<<16) /* driver for a hardware device */
--#define SNDRV_SEQ_PORT_TYPE_SOFTWARE (1<<17) /* implemented in software */
--#define SNDRV_SEQ_PORT_TYPE_SYNTHESIZER (1<<18) /* generates sound */
--#define SNDRV_SEQ_PORT_TYPE_PORT (1<<19) /* connects to other device(s) */
--#define SNDRV_SEQ_PORT_TYPE_APPLICATION (1<<20) /* application (sequencer/editor) */
--
--/* misc. conditioning flags */
--#define SNDRV_SEQ_PORT_FLG_GIVEN_PORT (1<<0)
--#define SNDRV_SEQ_PORT_FLG_TIMESTAMP (1<<1)
--#define SNDRV_SEQ_PORT_FLG_TIME_REAL (1<<2)
--
--struct snd_seq_port_info {
-- struct snd_seq_addr addr; /* client/port numbers */
-- char name[64]; /* port name */
--
-- unsigned int capability; /* port capability bits */
-- unsigned int type; /* port type bits */
-- int midi_channels; /* channels per MIDI port */
-- int midi_voices; /* voices per MIDI port */
-- int synth_voices; /* voices per SYNTH port */
--
-- int read_use; /* R/O: subscribers for output (from this port) */
-- int write_use; /* R/O: subscribers for input (to this port) */
--
-- void *kernel; /* reserved for kernel use (must be NULL) */
-- unsigned int flags; /* misc. conditioning */
-- unsigned char time_queue; /* queue # for timestamping */
-- char reserved[59]; /* for future use */
--};
--
--
--/* queue flags */
--#define SNDRV_SEQ_QUEUE_FLG_SYNC (1<<0) /* sync enabled */
--
--/* queue information */
--struct snd_seq_queue_info {
-- int queue; /* queue id */
--
-- /*
-- * security settings, only owner of this queue can start/stop timer
-- * etc. if the queue is locked for other clients
-- */
-- int owner; /* client id for owner of the queue */
-- unsigned locked:1; /* timing queue locked for other queues */
-- char name[64]; /* name of this queue */
-- unsigned int flags; /* flags */
-- char reserved[60]; /* for future use */
--
--};
--
--/* queue info/status */
--struct snd_seq_queue_status {
-- int queue; /* queue id */
-- int events; /* read-only - queue size */
-- snd_seq_tick_time_t tick; /* current tick */
-- struct snd_seq_real_time time; /* current time */
-- int running; /* running state of queue */
-- int flags; /* various flags */
-- char reserved[64]; /* for the future */
--};
--
--
--/* queue tempo */
--struct snd_seq_queue_tempo {
-- int queue; /* sequencer queue */
-- unsigned int tempo; /* current tempo, us/tick */
-- int ppq; /* time resolution, ticks/quarter */
-- unsigned int skew_value; /* queue skew */
-- unsigned int skew_base; /* queue skew base */
-- char reserved[24]; /* for the future */
--};
--
--
--/* sequencer timer sources */
--#define SNDRV_SEQ_TIMER_ALSA 0 /* ALSA timer */
--#define SNDRV_SEQ_TIMER_MIDI_CLOCK 1 /* Midi Clock (CLOCK event) */
--#define SNDRV_SEQ_TIMER_MIDI_TICK 2 /* Midi Timer Tick (TICK event) */
--
--/* queue timer info */
--struct snd_seq_queue_timer {
-- int queue; /* sequencer queue */
-- int type; /* source timer type */
-- union {
-- struct {
-- struct snd_timer_id id; /* ALSA's timer ID */
-- unsigned int resolution; /* resolution in Hz */
-- } alsa;
-- } u;
-- char reserved[64]; /* for the future use */
--};
--
--
--struct snd_seq_queue_client {
-- int queue; /* sequencer queue */
-- int client; /* sequencer client */
-- int used; /* queue is used with this client
-- (must be set for accepting events) */
-- /* per client watermarks */
-- char reserved[64]; /* for future use */
--};
--
--
--#define SNDRV_SEQ_PORT_SUBS_EXCLUSIVE (1<<0) /* exclusive connection */
--#define SNDRV_SEQ_PORT_SUBS_TIMESTAMP (1<<1)
--#define SNDRV_SEQ_PORT_SUBS_TIME_REAL (1<<2)
--
--struct snd_seq_port_subscribe {
-- struct snd_seq_addr sender; /* sender address */
-- struct snd_seq_addr dest; /* destination address */
-- unsigned int voices; /* number of voices to be allocated (0 = don't care) */
-- unsigned int flags; /* modes */
-- unsigned char queue; /* input time-stamp queue (optional) */
-- unsigned char pad[3]; /* reserved */
-- char reserved[64];
--};
--
--/* type of query subscription */
--#define SNDRV_SEQ_QUERY_SUBS_READ 0
--#define SNDRV_SEQ_QUERY_SUBS_WRITE 1
--
--struct snd_seq_query_subs {
-- struct snd_seq_addr root; /* client/port id to be searched */
-- int type; /* READ or WRITE */
-- int index; /* 0..N-1 */
-- int num_subs; /* R/O: number of subscriptions on this port */
-- struct snd_seq_addr addr; /* R/O: result */
-- unsigned char queue; /* R/O: result */
-- unsigned int flags; /* R/O: result */
-- char reserved[64]; /* for future use */
--};
--
--
--/*
-- * IOCTL commands
-- */
--
--#define SNDRV_SEQ_IOCTL_PVERSION _IOR ('S', 0x00, int)
--#define SNDRV_SEQ_IOCTL_CLIENT_ID _IOR ('S', 0x01, int)
--#define SNDRV_SEQ_IOCTL_SYSTEM_INFO _IOWR('S', 0x02, struct snd_seq_system_info)
--#define SNDRV_SEQ_IOCTL_RUNNING_MODE _IOWR('S', 0x03, struct snd_seq_running_info)
--
--#define SNDRV_SEQ_IOCTL_GET_CLIENT_INFO _IOWR('S', 0x10, struct snd_seq_client_info)
--#define SNDRV_SEQ_IOCTL_SET_CLIENT_INFO _IOW ('S', 0x11, struct snd_seq_client_info)
--
--#define SNDRV_SEQ_IOCTL_CREATE_PORT _IOWR('S', 0x20, struct snd_seq_port_info)
--#define SNDRV_SEQ_IOCTL_DELETE_PORT _IOW ('S', 0x21, struct snd_seq_port_info)
--#define SNDRV_SEQ_IOCTL_GET_PORT_INFO _IOWR('S', 0x22, struct snd_seq_port_info)
--#define SNDRV_SEQ_IOCTL_SET_PORT_INFO _IOW ('S', 0x23, struct snd_seq_port_info)
--
--#define SNDRV_SEQ_IOCTL_SUBSCRIBE_PORT _IOW ('S', 0x30, struct snd_seq_port_subscribe)
--#define SNDRV_SEQ_IOCTL_UNSUBSCRIBE_PORT _IOW ('S', 0x31, struct snd_seq_port_subscribe)
--
--#define SNDRV_SEQ_IOCTL_CREATE_QUEUE _IOWR('S', 0x32, struct snd_seq_queue_info)
--#define SNDRV_SEQ_IOCTL_DELETE_QUEUE _IOW ('S', 0x33, struct snd_seq_queue_info)
--#define SNDRV_SEQ_IOCTL_GET_QUEUE_INFO _IOWR('S', 0x34, struct snd_seq_queue_info)
--#define SNDRV_SEQ_IOCTL_SET_QUEUE_INFO _IOWR('S', 0x35, struct snd_seq_queue_info)
--#define SNDRV_SEQ_IOCTL_GET_NAMED_QUEUE _IOWR('S', 0x36, struct snd_seq_queue_info)
--#define SNDRV_SEQ_IOCTL_GET_QUEUE_STATUS _IOWR('S', 0x40, struct snd_seq_queue_status)
--#define SNDRV_SEQ_IOCTL_GET_QUEUE_TEMPO _IOWR('S', 0x41, struct snd_seq_queue_tempo)
--#define SNDRV_SEQ_IOCTL_SET_QUEUE_TEMPO _IOW ('S', 0x42, struct snd_seq_queue_tempo)
--#define SNDRV_SEQ_IOCTL_GET_QUEUE_TIMER _IOWR('S', 0x45, struct snd_seq_queue_timer)
--#define SNDRV_SEQ_IOCTL_SET_QUEUE_TIMER _IOW ('S', 0x46, struct snd_seq_queue_timer)
--#define SNDRV_SEQ_IOCTL_GET_QUEUE_CLIENT _IOWR('S', 0x49, struct snd_seq_queue_client)
--#define SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT _IOW ('S', 0x4a, struct snd_seq_queue_client)
--#define SNDRV_SEQ_IOCTL_GET_CLIENT_POOL _IOWR('S', 0x4b, struct snd_seq_client_pool)
--#define SNDRV_SEQ_IOCTL_SET_CLIENT_POOL _IOW ('S', 0x4c, struct snd_seq_client_pool)
--#define SNDRV_SEQ_IOCTL_REMOVE_EVENTS _IOW ('S', 0x4e, struct snd_seq_remove_events)
--#define SNDRV_SEQ_IOCTL_QUERY_SUBS _IOWR('S', 0x4f, struct snd_seq_query_subs)
--#define SNDRV_SEQ_IOCTL_GET_SUBSCRIPTION _IOWR('S', 0x50, struct snd_seq_port_subscribe)
--#define SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT _IOWR('S', 0x51, struct snd_seq_client_info)
--#define SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT _IOWR('S', 0x52, struct snd_seq_port_info)
--
--#endif /* _UAPI__SOUND_ASEQUENCER_H */
-+#include <alsa/sound/uapi/asequencer.h>
-diff --git a/include/sound/asoc.h b/include/sound/asoc.h
-index a74ca232..185bba81 100644
---- a/include/sound/asoc.h
-+++ b/include/sound/asoc.h
-@@ -1,633 +1 @@
--/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
--/*
-- * uapi/sound/asoc.h -- ALSA SoC Firmware Controls and DAPM
-- *
-- * Copyright (C) 2012 Texas Instruments Inc.
-- * Copyright (C) 2015 Intel Corporation.
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License version 2 as
-- * published by the Free Software Foundation.
-- *
-- * Simple file API to load FW that includes mixers, coefficients, DAPM graphs,
-- * algorithms, equalisers, DAIs, widgets etc.
--*/
--
--#ifndef __LINUX_UAPI_SND_ASOC_H
--#define __LINUX_UAPI_SND_ASOC_H
--
--#include <linux/types.h>
--#include <sound/asound.h>
--
--/*
-- * Maximum number of channels topology kcontrol can represent.
-- */
--#define SND_SOC_TPLG_MAX_CHAN 8
--
--/*
-- * Maximum number of PCM formats capability
-- */
--#define SND_SOC_TPLG_MAX_FORMATS 16
--
--/*
-- * Maximum number of PCM stream configs
-- */
--#define SND_SOC_TPLG_STREAM_CONFIG_MAX 8
--
--/*
-- * Maximum number of physical link's hardware configs
-- */
--#define SND_SOC_TPLG_HW_CONFIG_MAX 8
--
--/* individual kcontrol info types - can be mixed with other types */
--#define SND_SOC_TPLG_CTL_VOLSW 1
--#define SND_SOC_TPLG_CTL_VOLSW_SX 2
--#define SND_SOC_TPLG_CTL_VOLSW_XR_SX 3
--#define SND_SOC_TPLG_CTL_ENUM 4
--#define SND_SOC_TPLG_CTL_BYTES 5
--#define SND_SOC_TPLG_CTL_ENUM_VALUE 6
--#define SND_SOC_TPLG_CTL_RANGE 7
--#define SND_SOC_TPLG_CTL_STROBE 8
--
--
--/* individual widget kcontrol info types - can be mixed with other types */
--#define SND_SOC_TPLG_DAPM_CTL_VOLSW 64
--#define SND_SOC_TPLG_DAPM_CTL_ENUM_DOUBLE 65
--#define SND_SOC_TPLG_DAPM_CTL_ENUM_VIRT 66
--#define SND_SOC_TPLG_DAPM_CTL_ENUM_VALUE 67
--#define SND_SOC_TPLG_DAPM_CTL_PIN 68
--
--/* DAPM widget types - add new items to the end */
--#define SND_SOC_TPLG_DAPM_INPUT 0
--#define SND_SOC_TPLG_DAPM_OUTPUT 1
--#define SND_SOC_TPLG_DAPM_MUX 2
--#define SND_SOC_TPLG_DAPM_MIXER 3
--#define SND_SOC_TPLG_DAPM_PGA 4
--#define SND_SOC_TPLG_DAPM_OUT_DRV 5
--#define SND_SOC_TPLG_DAPM_ADC 6
--#define SND_SOC_TPLG_DAPM_DAC 7
--#define SND_SOC_TPLG_DAPM_SWITCH 8
--#define SND_SOC_TPLG_DAPM_PRE 9
--#define SND_SOC_TPLG_DAPM_POST 10
--#define SND_SOC_TPLG_DAPM_AIF_IN 11
--#define SND_SOC_TPLG_DAPM_AIF_OUT 12
--#define SND_SOC_TPLG_DAPM_DAI_IN 13
--#define SND_SOC_TPLG_DAPM_DAI_OUT 14
--#define SND_SOC_TPLG_DAPM_DAI_LINK 15
--#define SND_SOC_TPLG_DAPM_BUFFER 16
--#define SND_SOC_TPLG_DAPM_SCHEDULER 17
--#define SND_SOC_TPLG_DAPM_EFFECT 18
--#define SND_SOC_TPLG_DAPM_SIGGEN 19
--#define SND_SOC_TPLG_DAPM_SRC 20
--#define SND_SOC_TPLG_DAPM_ASRC 21
--#define SND_SOC_TPLG_DAPM_ENCODER 22
--#define SND_SOC_TPLG_DAPM_DECODER 23
--#define SND_SOC_TPLG_DAPM_LAST SND_SOC_TPLG_DAPM_DECODER
--
--/* Header magic number and string sizes */
--#define SND_SOC_TPLG_MAGIC 0x41536F43 /* ASoC */
--
--/* string sizes */
--#define SND_SOC_TPLG_NUM_TEXTS 16
--
--/* ABI version */
--#define SND_SOC_TPLG_ABI_VERSION 0x5 /* current version */
--#define SND_SOC_TPLG_ABI_VERSION_MIN 0x4 /* oldest version supported */
--
--/* Max size of TLV data */
--#define SND_SOC_TPLG_TLV_SIZE 32
--
--/*
-- * File and Block header data types.
-- * Add new generic and vendor types to end of list.
-- * Generic types are handled by the core whilst vendors types are passed
-- * to the component drivers for handling.
-- */
--#define SND_SOC_TPLG_TYPE_MIXER 1
--#define SND_SOC_TPLG_TYPE_BYTES 2
--#define SND_SOC_TPLG_TYPE_ENUM 3
--#define SND_SOC_TPLG_TYPE_DAPM_GRAPH 4
--#define SND_SOC_TPLG_TYPE_DAPM_WIDGET 5
--#define SND_SOC_TPLG_TYPE_DAI_LINK 6
--#define SND_SOC_TPLG_TYPE_PCM 7
--#define SND_SOC_TPLG_TYPE_MANIFEST 8
--#define SND_SOC_TPLG_TYPE_CODEC_LINK 9
--#define SND_SOC_TPLG_TYPE_BACKEND_LINK 10
--#define SND_SOC_TPLG_TYPE_PDATA 11
--#define SND_SOC_TPLG_TYPE_DAI 12
--#define SND_SOC_TPLG_TYPE_MAX SND_SOC_TPLG_TYPE_DAI
--
--/* vendor block IDs - please add new vendor types to end */
--#define SND_SOC_TPLG_TYPE_VENDOR_FW 1000
--#define SND_SOC_TPLG_TYPE_VENDOR_CONFIG 1001
--#define SND_SOC_TPLG_TYPE_VENDOR_COEFF 1002
--#define SND_SOC_TPLG_TYPEVENDOR_CODEC 1003
--
--#define SND_SOC_TPLG_STREAM_PLAYBACK 0
--#define SND_SOC_TPLG_STREAM_CAPTURE 1
--
--/* vendor tuple types */
--#define SND_SOC_TPLG_TUPLE_TYPE_UUID 0
--#define SND_SOC_TPLG_TUPLE_TYPE_STRING 1
--#define SND_SOC_TPLG_TUPLE_TYPE_BOOL 2
--#define SND_SOC_TPLG_TUPLE_TYPE_BYTE 3
--#define SND_SOC_TPLG_TUPLE_TYPE_WORD 4
--#define SND_SOC_TPLG_TUPLE_TYPE_SHORT 5
--
--/* DAI flags */
--#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_RATES (1 << 0)
--#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_CHANNELS (1 << 1)
--#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2)
--
--/* DAI clock gating */
--#define SND_SOC_TPLG_DAI_CLK_GATE_UNDEFINED 0
--#define SND_SOC_TPLG_DAI_CLK_GATE_GATED 1
--#define SND_SOC_TPLG_DAI_CLK_GATE_CONT 2
--
--/* DAI mclk_direction */
--#define SND_SOC_TPLG_MCLK_CO 0 /* for codec, mclk is output */
--#define SND_SOC_TPLG_MCLK_CI 1 /* for codec, mclk is input */
--
--/* DAI physical PCM data formats.
-- * Add new formats to the end of the list.
-- */
--#define SND_SOC_DAI_FORMAT_I2S 1 /* I2S mode */
--#define SND_SOC_DAI_FORMAT_RIGHT_J 2 /* Right Justified mode */
--#define SND_SOC_DAI_FORMAT_LEFT_J 3 /* Left Justified mode */
--#define SND_SOC_DAI_FORMAT_DSP_A 4 /* L data MSB after FRM LRC */
--#define SND_SOC_DAI_FORMAT_DSP_B 5 /* L data MSB during FRM LRC */
--#define SND_SOC_DAI_FORMAT_AC97 6 /* AC97 */
--#define SND_SOC_DAI_FORMAT_PDM 7 /* Pulse density modulation */
--
--/* left and right justified also known as MSB and LSB respectively */
--#define SND_SOC_DAI_FORMAT_MSB SND_SOC_DAI_FORMAT_LEFT_J
--#define SND_SOC_DAI_FORMAT_LSB SND_SOC_DAI_FORMAT_RIGHT_J
--
--/* DAI link flags */
--#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_RATES (1 << 0)
--#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_CHANNELS (1 << 1)
--#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2)
--#define SND_SOC_TPLG_LNK_FLGBIT_VOICE_WAKEUP (1 << 3)
--
--/* DAI topology BCLK parameter
-- * For the backwards capability, by default codec is bclk master
-- */
--#define SND_SOC_TPLG_BCLK_CM 0 /* codec is bclk master */
--#define SND_SOC_TPLG_BCLK_CS 1 /* codec is bclk slave */
--
--/* DAI topology FSYNC parameter
-- * For the backwards capability, by default codec is fsync master
-- */
--#define SND_SOC_TPLG_FSYNC_CM 0 /* codec is fsync master */
--#define SND_SOC_TPLG_FSYNC_CS 1 /* codec is fsync slave */
--
--/*
-- * Block Header.
-- * This header precedes all object and object arrays below.
-- */
--struct snd_soc_tplg_hdr {
-- __le32 magic; /* magic number */
-- __le32 abi; /* ABI version */
-- __le32 version; /* optional vendor specific version details */
-- __le32 type; /* SND_SOC_TPLG_TYPE_ */
-- __le32 size; /* size of this structure */
-- __le32 vendor_type; /* optional vendor specific type info */
-- __le32 payload_size; /* data bytes, excluding this header */
-- __le32 index; /* identifier for block */
-- __le32 count; /* number of elements in block */
--} __attribute__((packed));
--
--/* vendor tuple for uuid */
--struct snd_soc_tplg_vendor_uuid_elem {
-- __le32 token;
-- char uuid[16];
--} __attribute__((packed));
--
--/* vendor tuple for a bool/byte/short/word value */
--struct snd_soc_tplg_vendor_value_elem {
-- __le32 token;
-- __le32 value;
--} __attribute__((packed));
--
--/* vendor tuple for string */
--struct snd_soc_tplg_vendor_string_elem {
-- __le32 token;
-- char string[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
--} __attribute__((packed));
--
--struct snd_soc_tplg_vendor_array {
-- __le32 size; /* size in bytes of the array, including all elements */
-- __le32 type; /* SND_SOC_TPLG_TUPLE_TYPE_ */
-- __le32 num_elems; /* number of elements in array */
-- union {
-- struct snd_soc_tplg_vendor_uuid_elem uuid[0];
-- struct snd_soc_tplg_vendor_value_elem value[0];
-- struct snd_soc_tplg_vendor_string_elem string[0];
-- };
--} __attribute__((packed));
--
--/*
-- * Private data.
-- * All topology objects may have private data that can be used by the driver or
-- * firmware. Core will ignore this data.
-- */
--struct snd_soc_tplg_private {
-- __le32 size; /* in bytes of private data */
-- union {
-- char data[0];
-- struct snd_soc_tplg_vendor_array array[0];
-- };
--} __attribute__((packed));
--
--/*
-- * Kcontrol TLV data.
-- */
--struct snd_soc_tplg_tlv_dbscale {
-- __le32 min;
-- __le32 step;
-- __le32 mute;
--} __attribute__((packed));
--
--struct snd_soc_tplg_ctl_tlv {
-- __le32 size; /* in bytes of this structure */
-- __le32 type; /* SNDRV_CTL_TLVT_*, type of TLV */
-- union {
-- __le32 data[SND_SOC_TPLG_TLV_SIZE];
-- struct snd_soc_tplg_tlv_dbscale scale;
-- };
--} __attribute__((packed));
--
--/*
-- * Kcontrol channel data
-- */
--struct snd_soc_tplg_channel {
-- __le32 size; /* in bytes of this structure */
-- __le32 reg;
-- __le32 shift;
-- __le32 id; /* ID maps to Left, Right, LFE etc */
--} __attribute__((packed));
--
--/*
-- * Genericl Operations IDs, for binding Kcontrol or Bytes ext ops
-- * Kcontrol ops need get/put/info.
-- * Bytes ext ops need get/put.
-- */
--struct snd_soc_tplg_io_ops {
-- __le32 get;
-- __le32 put;
-- __le32 info;
--} __attribute__((packed));
--
--/*
-- * kcontrol header
-- */
--struct snd_soc_tplg_ctl_hdr {
-- __le32 size; /* in bytes of this structure */
-- __le32 type;
-- char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-- __le32 access;
-- struct snd_soc_tplg_io_ops ops;
-- struct snd_soc_tplg_ctl_tlv tlv;
--} __attribute__((packed));
--
--/*
-- * Stream Capabilities
-- */
--struct snd_soc_tplg_stream_caps {
-- __le32 size; /* in bytes of this structure */
-- char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-- __le64 formats; /* supported formats SNDRV_PCM_FMTBIT_* */
-- __le32 rates; /* supported rates SNDRV_PCM_RATE_* */
-- __le32 rate_min; /* min rate */
-- __le32 rate_max; /* max rate */
-- __le32 channels_min; /* min channels */
-- __le32 channels_max; /* max channels */
-- __le32 periods_min; /* min number of periods */
-- __le32 periods_max; /* max number of periods */
-- __le32 period_size_min; /* min period size bytes */
-- __le32 period_size_max; /* max period size bytes */
-- __le32 buffer_size_min; /* min buffer size bytes */
-- __le32 buffer_size_max; /* max buffer size bytes */
-- __le32 sig_bits; /* number of bits of content */
--} __attribute__((packed));
--
--/*
-- * FE or BE Stream configuration supported by SW/FW
-- */
--struct snd_soc_tplg_stream {
-- __le32 size; /* in bytes of this structure */
-- char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* Name of the stream */
-- __le64 format; /* SNDRV_PCM_FMTBIT_* */
-- __le32 rate; /* SNDRV_PCM_RATE_* */
-- __le32 period_bytes; /* size of period in bytes */
-- __le32 buffer_bytes; /* size of buffer in bytes */
-- __le32 channels; /* channels */
--} __attribute__((packed));
--
--
--/*
-- * Describes a physical link's runtime supported hardware config,
-- * i.e. hardware audio formats.
-- */
--struct snd_soc_tplg_hw_config {
-- __le32 size; /* in bytes of this structure */
-- __le32 id; /* unique ID - - used to match */
-- __le32 fmt; /* SND_SOC_DAI_FORMAT_ format value */
-- __u8 clock_gated; /* SND_SOC_TPLG_DAI_CLK_GATE_ value */
-- __u8 invert_bclk; /* 1 for inverted BCLK, 0 for normal */
-- __u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */
-- __u8 bclk_master; /* SND_SOC_TPLG_BCLK_ value */
-- __u8 fsync_master; /* SND_SOC_TPLG_FSYNC_ value */
-- __u8 mclk_direction; /* SND_SOC_TPLG_MCLK_ value */
-- __le16 reserved; /* for 32bit alignment */
-- __le32 mclk_rate; /* MCLK or SYSCLK freqency in Hz */
-- __le32 bclk_rate; /* BCLK freqency in Hz */
-- __le32 fsync_rate; /* frame clock in Hz */
-- __le32 tdm_slots; /* number of TDM slots in use */
-- __le32 tdm_slot_width; /* width in bits for each slot */
-- __le32 tx_slots; /* bit mask for active Tx slots */
-- __le32 rx_slots; /* bit mask for active Rx slots */
-- __le32 tx_channels; /* number of Tx channels */
-- __le32 tx_chanmap[SND_SOC_TPLG_MAX_CHAN]; /* array of slot number */
-- __le32 rx_channels; /* number of Rx channels */
-- __le32 rx_chanmap[SND_SOC_TPLG_MAX_CHAN]; /* array of slot number */
--} __attribute__((packed));
--
--/*
-- * Manifest. List totals for each payload type. Not used in parsing, but will
-- * be passed to the component driver before any other objects in order for any
-- * global component resource allocations.
-- *
-- * File block representation for manifest :-
-- * +-----------------------------------+----+
-- * | struct snd_soc_tplg_hdr | 1 |
-- * +-----------------------------------+----+
-- * | struct snd_soc_tplg_manifest | 1 |
-- * +-----------------------------------+----+
-- */
--struct snd_soc_tplg_manifest {
-- __le32 size; /* in bytes of this structure */
-- __le32 control_elems; /* number of control elements */
-- __le32 widget_elems; /* number of widget elements */
-- __le32 graph_elems; /* number of graph elements */
-- __le32 pcm_elems; /* number of PCM elements */
-- __le32 dai_link_elems; /* number of DAI link elements */
-- __le32 dai_elems; /* number of physical DAI elements */
-- __le32 reserved[20]; /* reserved for new ABI element types */
-- struct snd_soc_tplg_private priv;
--} __attribute__((packed));
--
--/*
-- * Mixer kcontrol.
-- *
-- * File block representation for mixer kcontrol :-
-- * +-----------------------------------+----+
-- * | struct snd_soc_tplg_hdr | 1 |
-- * +-----------------------------------+----+
-- * | struct snd_soc_tplg_mixer_control | N |
-- * +-----------------------------------+----+
-- */
--struct snd_soc_tplg_mixer_control {
-- struct snd_soc_tplg_ctl_hdr hdr;
-- __le32 size; /* in bytes of this structure */
-- __le32 min;
-- __le32 max;
-- __le32 platform_max;
-- __le32 invert;
-- __le32 num_channels;
-- struct snd_soc_tplg_channel channel[SND_SOC_TPLG_MAX_CHAN];
-- struct snd_soc_tplg_private priv;
--} __attribute__((packed));
--
--/*
-- * Enumerated kcontrol
-- *
-- * File block representation for enum kcontrol :-
-- * +-----------------------------------+----+
-- * | struct snd_soc_tplg_hdr | 1 |
-- * +-----------------------------------+----+
-- * | struct snd_soc_tplg_enum_control | N |
-- * +-----------------------------------+----+
-- */
--struct snd_soc_tplg_enum_control {
-- struct snd_soc_tplg_ctl_hdr hdr;
-- __le32 size; /* in bytes of this structure */
-- __le32 num_channels;
-- struct snd_soc_tplg_channel channel[SND_SOC_TPLG_MAX_CHAN];
-- __le32 items;
-- __le32 mask;
-- __le32 count;
-- char texts[SND_SOC_TPLG_NUM_TEXTS][SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-- __le32 values[SND_SOC_TPLG_NUM_TEXTS * SNDRV_CTL_ELEM_ID_NAME_MAXLEN / 4];
-- struct snd_soc_tplg_private priv;
--} __attribute__((packed));
--
--/*
-- * Bytes kcontrol
-- *
-- * File block representation for bytes kcontrol :-
-- * +-----------------------------------+----+
-- * | struct snd_soc_tplg_hdr | 1 |
-- * +-----------------------------------+----+
-- * | struct snd_soc_tplg_bytes_control | N |
-- * +-----------------------------------+----+
-- */
--struct snd_soc_tplg_bytes_control {
-- struct snd_soc_tplg_ctl_hdr hdr;
-- __le32 size; /* in bytes of this structure */
-- __le32 max;
-- __le32 mask;
-- __le32 base;
-- __le32 num_regs;
-- struct snd_soc_tplg_io_ops ext_ops;
-- struct snd_soc_tplg_private priv;
--} __attribute__((packed));
--
--/*
-- * DAPM Graph Element
-- *
-- * File block representation for DAPM graph elements :-
-- * +-------------------------------------+----+
-- * | struct snd_soc_tplg_hdr | 1 |
-- * +-------------------------------------+----+
-- * | struct snd_soc_tplg_dapm_graph_elem | N |
-- * +-------------------------------------+----+
-- */
--struct snd_soc_tplg_dapm_graph_elem {
-- char sink[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-- char control[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-- char source[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
--} __attribute__((packed));
--
--/*
-- * DAPM Widget.
-- *
-- * File block representation for DAPM widget :-
-- * +-------------------------------------+-----+
-- * | struct snd_soc_tplg_hdr | 1 |
-- * +-------------------------------------+-----+
-- * | struct snd_soc_tplg_dapm_widget | N |
-- * +-------------------------------------+-----+
-- * | struct snd_soc_tplg_enum_control | 0|1 |
-- * | struct snd_soc_tplg_mixer_control | 0|N |
-- * +-------------------------------------+-----+
-- *
-- * Optional enum or mixer control can be appended to the end of each widget
-- * in the block.
-- */
--struct snd_soc_tplg_dapm_widget {
-- __le32 size; /* in bytes of this structure */
-- __le32 id; /* SND_SOC_DAPM_CTL */
-- char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-- char sname[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
--
-- __le32 reg; /* negative reg = no direct dapm */
-- __le32 shift; /* bits to shift */
-- __le32 mask; /* non-shifted mask */
-- __le32 subseq; /* sort within widget type */
-- __le32 invert; /* invert the power bit */
-- __le32 ignore_suspend; /* kept enabled over suspend */
-- __le16 event_flags;
-- __le16 event_type;
-- __le32 num_kcontrols;
-- struct snd_soc_tplg_private priv;
-- /*
-- * kcontrols that relate to this widget
-- * follow here after widget private data
-- */
--} __attribute__((packed));
--
--
--/*
-- * Describes SW/FW specific features of PCM (FE DAI & DAI link).
-- *
-- * File block representation for PCM :-
-- * +-----------------------------------+-----+
-- * | struct snd_soc_tplg_hdr | 1 |
-- * +-----------------------------------+-----+
-- * | struct snd_soc_tplg_pcm | N |
-- * +-----------------------------------+-----+
-- */
--struct snd_soc_tplg_pcm {
-- __le32 size; /* in bytes of this structure */
-- char pcm_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-- char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-- __le32 pcm_id; /* unique ID - used to match with DAI link */
-- __le32 dai_id; /* unique ID - used to match */
-- __le32 playback; /* supports playback mode */
-- __le32 capture; /* supports capture mode */
-- __le32 compress; /* 1 = compressed; 0 = PCM */
-- struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* for DAI link */
-- __le32 num_streams; /* number of streams */
-- struct snd_soc_tplg_stream_caps caps[2]; /* playback and capture for DAI */
-- __le32 flag_mask; /* bitmask of flags to configure */
-- __le32 flags; /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */
-- struct snd_soc_tplg_private priv;
--} __attribute__((packed));
--
--
--/*
-- * Describes the physical link runtime supported configs or params
-- *
-- * File block representation for physical link config :-
-- * +-----------------------------------+-----+
-- * | struct snd_soc_tplg_hdr | 1 |
-- * +-----------------------------------+-----+
-- * | struct snd_soc_tplg_link_config | N |
-- * +-----------------------------------+-----+
-- */
--struct snd_soc_tplg_link_config {
-- __le32 size; /* in bytes of this structure */
-- __le32 id; /* unique ID - used to match */
-- char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* name - used to match */
-- char stream_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* stream name - used to match */
-- struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* supported configs playback and captrure */
-- __le32 num_streams; /* number of streams */
-- struct snd_soc_tplg_hw_config hw_config[SND_SOC_TPLG_HW_CONFIG_MAX]; /* hw configs */
-- __le32 num_hw_configs; /* number of hw configs */
-- __le32 default_hw_config_id; /* default hw config ID for init */
-- __le32 flag_mask; /* bitmask of flags to configure */
-- __le32 flags; /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */
-- struct snd_soc_tplg_private priv;
--} __attribute__((packed));
--
--/*
-- * Describes SW/FW specific features of physical DAI.
-- * It can be used to configure backend DAIs for DPCM.
-- *
-- * File block representation for physical DAI :-
-- * +-----------------------------------+-----+
-- * | struct snd_soc_tplg_hdr | 1 |
-- * +-----------------------------------+-----+
-- * | struct snd_soc_tplg_dai | N |
-- * +-----------------------------------+-----+
-- */
--struct snd_soc_tplg_dai {
-- __le32 size; /* in bytes of this structure */
-- char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* name - used to match */
-- __le32 dai_id; /* unique ID - used to match */
-- __le32 playback; /* supports playback mode */
-- __le32 capture; /* supports capture mode */
-- struct snd_soc_tplg_stream_caps caps[2]; /* playback and capture for DAI */
-- __le32 flag_mask; /* bitmask of flags to configure */
-- __le32 flags; /* SND_SOC_TPLG_DAI_FLGBIT_* */
-- struct snd_soc_tplg_private priv;
--} __attribute__((packed));
--
--/*
-- * Old version of ABI structs, supported for backward compatibility.
-- */
--
--/* Manifest v4 */
--struct snd_soc_tplg_manifest_v4 {
-- __le32 size; /* in bytes of this structure */
-- __le32 control_elems; /* number of control elements */
-- __le32 widget_elems; /* number of widget elements */
-- __le32 graph_elems; /* number of graph elements */
-- __le32 pcm_elems; /* number of PCM elements */
-- __le32 dai_link_elems; /* number of DAI link elements */
-- struct snd_soc_tplg_private priv;
--} __packed;
--
--/* Stream Capabilities v4 */
--struct snd_soc_tplg_stream_caps_v4 {
-- __le32 size; /* in bytes of this structure */
-- char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-- __le64 formats; /* supported formats SNDRV_PCM_FMTBIT_* */
-- __le32 rates; /* supported rates SNDRV_PCM_RATE_* */
-- __le32 rate_min; /* min rate */
-- __le32 rate_max; /* max rate */
-- __le32 channels_min; /* min channels */
-- __le32 channels_max; /* max channels */
-- __le32 periods_min; /* min number of periods */
-- __le32 periods_max; /* max number of periods */
-- __le32 period_size_min; /* min period size bytes */
-- __le32 period_size_max; /* max period size bytes */
-- __le32 buffer_size_min; /* min buffer size bytes */
-- __le32 buffer_size_max; /* max buffer size bytes */
--} __packed;
--
--/* PCM v4 */
--struct snd_soc_tplg_pcm_v4 {
-- __le32 size; /* in bytes of this structure */
-- char pcm_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-- char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-- __le32 pcm_id; /* unique ID - used to match with DAI link */
-- __le32 dai_id; /* unique ID - used to match */
-- __le32 playback; /* supports playback mode */
-- __le32 capture; /* supports capture mode */
-- __le32 compress; /* 1 = compressed; 0 = PCM */
-- struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* for DAI link */
-- __le32 num_streams; /* number of streams */
-- struct snd_soc_tplg_stream_caps_v4 caps[2]; /* playback and capture for DAI */
--} __packed;
--
--/* Physical link config v4 */
--struct snd_soc_tplg_link_config_v4 {
-- __le32 size; /* in bytes of this structure */
-- __le32 id; /* unique ID - used to match */
-- struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* supported configs playback and captrure */
-- __le32 num_streams; /* number of streams */
--} __packed;
--
--#endif
-+#include <alsa/sound/uapi/asoc.h>
-diff --git a/include/sound/asound.h b/include/sound/asound.h
-index df1153ce..3be4d850 100644
---- a/include/sound/asound.h
-+++ b/include/sound/asound.h
-@@ -1,1038 +1 @@
--/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
--/*
-- * Advanced Linux Sound Architecture - ALSA - Driver
-- * Copyright (c) 1994-2003 by Jaroslav Kysela <perex@perex.cz>,
-- * Abramo Bagnara <abramo@alsa-project.org>
-- *
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 2 of the License, or
-- * (at your option) any later version.
-- *
-- * This program is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- * GNU General Public License for more details.
-- *
-- * You should have received a copy of the GNU General Public License
-- * along with this program; if not, write to the Free Software
-- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-- *
-- */
--
--#ifndef _UAPI__SOUND_ASOUND_H
--#define _UAPI__SOUND_ASOUND_H
--
--#if defined(__KERNEL__) || defined(__linux__)
--#include <linux/types.h>
--#else
--#include <sys/ioctl.h>
--#endif
--
--#ifndef __KERNEL__
--#include <stdlib.h>
--#include <time.h>
--#endif
--
--/*
-- * protocol version
-- */
--
--#define SNDRV_PROTOCOL_VERSION(major, minor, subminor) (((major)<<16)|((minor)<<8)|(subminor))
--#define SNDRV_PROTOCOL_MAJOR(version) (((version)>>16)&0xffff)
--#define SNDRV_PROTOCOL_MINOR(version) (((version)>>8)&0xff)
--#define SNDRV_PROTOCOL_MICRO(version) ((version)&0xff)
--#define SNDRV_PROTOCOL_INCOMPATIBLE(kversion, uversion) \
-- (SNDRV_PROTOCOL_MAJOR(kversion) != SNDRV_PROTOCOL_MAJOR(uversion) || \
-- (SNDRV_PROTOCOL_MAJOR(kversion) == SNDRV_PROTOCOL_MAJOR(uversion) && \
-- SNDRV_PROTOCOL_MINOR(kversion) != SNDRV_PROTOCOL_MINOR(uversion)))
--
--/****************************************************************************
-- * *
-- * Digital audio interface *
-- * *
-- ****************************************************************************/
--
--struct snd_aes_iec958 {
-- unsigned char status[24]; /* AES/IEC958 channel status bits */
-- unsigned char subcode[147]; /* AES/IEC958 subcode bits */
-- unsigned char pad; /* nothing */
-- unsigned char dig_subframe[4]; /* AES/IEC958 subframe bits */
--};
--
--/****************************************************************************
-- * *
-- * CEA-861 Audio InfoFrame. Used in HDMI and DisplayPort *
-- * *
-- ****************************************************************************/
--
--struct snd_cea_861_aud_if {
-- unsigned char db1_ct_cc; /* coding type and channel count */
-- unsigned char db2_sf_ss; /* sample frequency and size */
-- unsigned char db3; /* not used, all zeros */
-- unsigned char db4_ca; /* channel allocation code */
-- unsigned char db5_dminh_lsv; /* downmix inhibit & level-shit values */
--};
--
--/****************************************************************************
-- * *
-- * Section for driver hardware dependent interface - /dev/snd/hw? *
-- * *
-- ****************************************************************************/
--
--#define SNDRV_HWDEP_VERSION SNDRV_PROTOCOL_VERSION(1, 0, 1)
--
--enum {
-- SNDRV_HWDEP_IFACE_OPL2 = 0,
-- SNDRV_HWDEP_IFACE_OPL3,
-- SNDRV_HWDEP_IFACE_OPL4,
-- SNDRV_HWDEP_IFACE_SB16CSP, /* Creative Signal Processor */
-- SNDRV_HWDEP_IFACE_EMU10K1, /* FX8010 processor in EMU10K1 chip */
-- SNDRV_HWDEP_IFACE_YSS225, /* Yamaha FX processor */
-- SNDRV_HWDEP_IFACE_ICS2115, /* Wavetable synth */
-- SNDRV_HWDEP_IFACE_SSCAPE, /* Ensoniq SoundScape ISA card (MC68EC000) */
-- SNDRV_HWDEP_IFACE_VX, /* Digigram VX cards */
-- SNDRV_HWDEP_IFACE_MIXART, /* Digigram miXart cards */
-- SNDRV_HWDEP_IFACE_USX2Y, /* Tascam US122, US224 & US428 usb */
-- SNDRV_HWDEP_IFACE_EMUX_WAVETABLE, /* EmuX wavetable */
-- SNDRV_HWDEP_IFACE_BLUETOOTH, /* Bluetooth audio */
-- SNDRV_HWDEP_IFACE_USX2Y_PCM, /* Tascam US122, US224 & US428 rawusb pcm */
-- SNDRV_HWDEP_IFACE_PCXHR, /* Digigram PCXHR */
-- 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 */
-- SNDRV_HWDEP_IFACE_FW_FIREWORKS, /* Echo Audio Fireworks based device */
-- SNDRV_HWDEP_IFACE_FW_BEBOB, /* BridgeCo BeBoB based device */
-- SNDRV_HWDEP_IFACE_FW_OXFW, /* Oxford OXFW970/971 based device */
-- SNDRV_HWDEP_IFACE_FW_DIGI00X, /* Digidesign Digi 002/003 family */
-- SNDRV_HWDEP_IFACE_FW_TASCAM, /* TASCAM FireWire series */
-- SNDRV_HWDEP_IFACE_LINE6, /* Line6 USB processors */
-- SNDRV_HWDEP_IFACE_FW_MOTU, /* MOTU FireWire series */
-- SNDRV_HWDEP_IFACE_FW_FIREFACE, /* RME Fireface series */
--
-- /* Don't forget to change the following: */
-- SNDRV_HWDEP_IFACE_LAST = SNDRV_HWDEP_IFACE_FW_FIREFACE
--};
--
--struct snd_hwdep_info {
-- unsigned int device; /* WR: device number */
-- int card; /* R: card number */
-- unsigned char id[64]; /* ID (user selectable) */
-- unsigned char name[80]; /* hwdep name */
-- int iface; /* hwdep interface */
-- unsigned char reserved[64]; /* reserved for future */
--};
--
--/* generic DSP loader */
--struct snd_hwdep_dsp_status {
-- unsigned int version; /* R: driver-specific version */
-- unsigned char id[32]; /* R: driver-specific ID string */
-- unsigned int num_dsps; /* R: number of DSP images to transfer */
-- unsigned int dsp_loaded; /* R: bit flags indicating the loaded DSPs */
-- unsigned int chip_ready; /* R: 1 = initialization finished */
-- unsigned char reserved[16]; /* reserved for future use */
--};
--
--struct snd_hwdep_dsp_image {
-- unsigned int index; /* W: DSP index */
-- unsigned char name[64]; /* W: ID (e.g. file name) */
-- unsigned char __user *image; /* W: binary image */
-- size_t length; /* W: size of image in bytes */
-- unsigned long driver_data; /* W: driver-specific data */
--};
--
--#define SNDRV_HWDEP_IOCTL_PVERSION _IOR ('H', 0x00, int)
--#define SNDRV_HWDEP_IOCTL_INFO _IOR ('H', 0x01, struct snd_hwdep_info)
--#define SNDRV_HWDEP_IOCTL_DSP_STATUS _IOR('H', 0x02, struct snd_hwdep_dsp_status)
--#define SNDRV_HWDEP_IOCTL_DSP_LOAD _IOW('H', 0x03, struct snd_hwdep_dsp_image)
--
--/*****************************************************************************
-- * *
-- * Digital Audio (PCM) interface - /dev/snd/pcm?? *
-- * *
-- *****************************************************************************/
--
--#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 14)
--
--typedef unsigned long snd_pcm_uframes_t;
--typedef signed long snd_pcm_sframes_t;
--
--enum {
-- SNDRV_PCM_CLASS_GENERIC = 0, /* standard mono or stereo device */
-- SNDRV_PCM_CLASS_MULTI, /* multichannel device */
-- SNDRV_PCM_CLASS_MODEM, /* software modem class */
-- SNDRV_PCM_CLASS_DIGITIZER, /* digitizer class */
-- /* Don't forget to change the following: */
-- SNDRV_PCM_CLASS_LAST = SNDRV_PCM_CLASS_DIGITIZER,
--};
--
--enum {
-- SNDRV_PCM_SUBCLASS_GENERIC_MIX = 0, /* mono or stereo subdevices are mixed together */
-- SNDRV_PCM_SUBCLASS_MULTI_MIX, /* multichannel subdevices are mixed together */
-- /* Don't forget to change the following: */
-- SNDRV_PCM_SUBCLASS_LAST = SNDRV_PCM_SUBCLASS_MULTI_MIX,
--};
--
--enum {
-- SNDRV_PCM_STREAM_PLAYBACK = 0,
-- SNDRV_PCM_STREAM_CAPTURE,
-- SNDRV_PCM_STREAM_LAST = SNDRV_PCM_STREAM_CAPTURE,
--};
--
--typedef int __bitwise snd_pcm_access_t;
--#define SNDRV_PCM_ACCESS_MMAP_INTERLEAVED ((__force snd_pcm_access_t) 0) /* interleaved mmap */
--#define SNDRV_PCM_ACCESS_MMAP_NONINTERLEAVED ((__force snd_pcm_access_t) 1) /* noninterleaved mmap */
--#define SNDRV_PCM_ACCESS_MMAP_COMPLEX ((__force snd_pcm_access_t) 2) /* complex mmap */
--#define SNDRV_PCM_ACCESS_RW_INTERLEAVED ((__force snd_pcm_access_t) 3) /* readi/writei */
--#define SNDRV_PCM_ACCESS_RW_NONINTERLEAVED ((__force snd_pcm_access_t) 4) /* readn/writen */
--#define SNDRV_PCM_ACCESS_LAST SNDRV_PCM_ACCESS_RW_NONINTERLEAVED
--
--typedef int __bitwise snd_pcm_format_t;
--#define SNDRV_PCM_FORMAT_S8 ((__force snd_pcm_format_t) 0)
--#define SNDRV_PCM_FORMAT_U8 ((__force snd_pcm_format_t) 1)
--#define SNDRV_PCM_FORMAT_S16_LE ((__force snd_pcm_format_t) 2)
--#define SNDRV_PCM_FORMAT_S16_BE ((__force snd_pcm_format_t) 3)
--#define SNDRV_PCM_FORMAT_U16_LE ((__force snd_pcm_format_t) 4)
--#define SNDRV_PCM_FORMAT_U16_BE ((__force snd_pcm_format_t) 5)
--#define SNDRV_PCM_FORMAT_S24_LE ((__force snd_pcm_format_t) 6) /* low three bytes */
--#define SNDRV_PCM_FORMAT_S24_BE ((__force snd_pcm_format_t) 7) /* low three bytes */
--#define SNDRV_PCM_FORMAT_U24_LE ((__force snd_pcm_format_t) 8) /* low three bytes */
--#define SNDRV_PCM_FORMAT_U24_BE ((__force snd_pcm_format_t) 9) /* low three bytes */
--#define SNDRV_PCM_FORMAT_S32_LE ((__force snd_pcm_format_t) 10)
--#define SNDRV_PCM_FORMAT_S32_BE ((__force snd_pcm_format_t) 11)
--#define SNDRV_PCM_FORMAT_U32_LE ((__force snd_pcm_format_t) 12)
--#define SNDRV_PCM_FORMAT_U32_BE ((__force snd_pcm_format_t) 13)
--#define SNDRV_PCM_FORMAT_FLOAT_LE ((__force snd_pcm_format_t) 14) /* 4-byte float, IEEE-754 32-bit, range -1.0 to 1.0 */
--#define SNDRV_PCM_FORMAT_FLOAT_BE ((__force snd_pcm_format_t) 15) /* 4-byte float, IEEE-754 32-bit, range -1.0 to 1.0 */
--#define SNDRV_PCM_FORMAT_FLOAT64_LE ((__force snd_pcm_format_t) 16) /* 8-byte float, IEEE-754 64-bit, range -1.0 to 1.0 */
--#define SNDRV_PCM_FORMAT_FLOAT64_BE ((__force snd_pcm_format_t) 17) /* 8-byte float, IEEE-754 64-bit, range -1.0 to 1.0 */
--#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE ((__force snd_pcm_format_t) 18) /* IEC-958 subframe, Little Endian */
--#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE ((__force snd_pcm_format_t) 19) /* IEC-958 subframe, Big Endian */
--#define SNDRV_PCM_FORMAT_MU_LAW ((__force snd_pcm_format_t) 20)
--#define SNDRV_PCM_FORMAT_A_LAW ((__force snd_pcm_format_t) 21)
--#define SNDRV_PCM_FORMAT_IMA_ADPCM ((__force snd_pcm_format_t) 22)
--#define SNDRV_PCM_FORMAT_MPEG ((__force snd_pcm_format_t) 23)
--#define SNDRV_PCM_FORMAT_GSM ((__force snd_pcm_format_t) 24)
--#define SNDRV_PCM_FORMAT_S20_LE ((__force snd_pcm_format_t) 25) /* in four bytes, LSB justified */
--#define SNDRV_PCM_FORMAT_S20_BE ((__force snd_pcm_format_t) 26) /* in four bytes, LSB justified */
--#define SNDRV_PCM_FORMAT_U20_LE ((__force snd_pcm_format_t) 27) /* in four bytes, LSB justified */
--#define SNDRV_PCM_FORMAT_U20_BE ((__force snd_pcm_format_t) 28) /* in four bytes, LSB justified */
--/* gap in the numbering for a future standard linear format */
--#define SNDRV_PCM_FORMAT_SPECIAL ((__force snd_pcm_format_t) 31)
--#define SNDRV_PCM_FORMAT_S24_3LE ((__force snd_pcm_format_t) 32) /* in three bytes */
--#define SNDRV_PCM_FORMAT_S24_3BE ((__force snd_pcm_format_t) 33) /* in three bytes */
--#define SNDRV_PCM_FORMAT_U24_3LE ((__force snd_pcm_format_t) 34) /* in three bytes */
--#define SNDRV_PCM_FORMAT_U24_3BE ((__force snd_pcm_format_t) 35) /* in three bytes */
--#define SNDRV_PCM_FORMAT_S20_3LE ((__force snd_pcm_format_t) 36) /* in three bytes */
--#define SNDRV_PCM_FORMAT_S20_3BE ((__force snd_pcm_format_t) 37) /* in three bytes */
--#define SNDRV_PCM_FORMAT_U20_3LE ((__force snd_pcm_format_t) 38) /* in three bytes */
--#define SNDRV_PCM_FORMAT_U20_3BE ((__force snd_pcm_format_t) 39) /* in three bytes */
--#define SNDRV_PCM_FORMAT_S18_3LE ((__force snd_pcm_format_t) 40) /* in three bytes */
--#define SNDRV_PCM_FORMAT_S18_3BE ((__force snd_pcm_format_t) 41) /* in three bytes */
--#define SNDRV_PCM_FORMAT_U18_3LE ((__force snd_pcm_format_t) 42) /* in three bytes */
--#define SNDRV_PCM_FORMAT_U18_3BE ((__force snd_pcm_format_t) 43) /* in three bytes */
--#define SNDRV_PCM_FORMAT_G723_24 ((__force snd_pcm_format_t) 44) /* 8 samples in 3 bytes */
--#define SNDRV_PCM_FORMAT_G723_24_1B ((__force snd_pcm_format_t) 45) /* 1 sample in 1 byte */
--#define SNDRV_PCM_FORMAT_G723_40 ((__force snd_pcm_format_t) 46) /* 8 Samples in 5 bytes */
--#define SNDRV_PCM_FORMAT_G723_40_1B ((__force snd_pcm_format_t) 47) /* 1 sample in 1 byte */
--#define SNDRV_PCM_FORMAT_DSD_U8 ((__force snd_pcm_format_t) 48) /* DSD, 1-byte samples DSD (x8) */
--#define SNDRV_PCM_FORMAT_DSD_U16_LE ((__force snd_pcm_format_t) 49) /* DSD, 2-byte samples DSD (x16), little endian */
--#define SNDRV_PCM_FORMAT_DSD_U32_LE ((__force snd_pcm_format_t) 50) /* DSD, 4-byte samples DSD (x32), little endian */
--#define SNDRV_PCM_FORMAT_DSD_U16_BE ((__force snd_pcm_format_t) 51) /* DSD, 2-byte samples DSD (x16), big endian */
--#define SNDRV_PCM_FORMAT_DSD_U32_BE ((__force snd_pcm_format_t) 52) /* DSD, 4-byte samples DSD (x32), big endian */
--#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U32_BE
--#define SNDRV_PCM_FORMAT_FIRST SNDRV_PCM_FORMAT_S8
--
--#ifdef SNDRV_LITTLE_ENDIAN
--#define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_LE
--#define SNDRV_PCM_FORMAT_U16 SNDRV_PCM_FORMAT_U16_LE
--#define SNDRV_PCM_FORMAT_S24 SNDRV_PCM_FORMAT_S24_LE
--#define SNDRV_PCM_FORMAT_U24 SNDRV_PCM_FORMAT_U24_LE
--#define SNDRV_PCM_FORMAT_S32 SNDRV_PCM_FORMAT_S32_LE
--#define SNDRV_PCM_FORMAT_U32 SNDRV_PCM_FORMAT_U32_LE
--#define SNDRV_PCM_FORMAT_FLOAT SNDRV_PCM_FORMAT_FLOAT_LE
--#define SNDRV_PCM_FORMAT_FLOAT64 SNDRV_PCM_FORMAT_FLOAT64_LE
--#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE
--#define SNDRV_PCM_FORMAT_S20 SNDRV_PCM_FORMAT_S20_LE
--#define SNDRV_PCM_FORMAT_U20 SNDRV_PCM_FORMAT_U20_LE
--#endif
--#ifdef SNDRV_BIG_ENDIAN
--#define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_BE
--#define SNDRV_PCM_FORMAT_U16 SNDRV_PCM_FORMAT_U16_BE
--#define SNDRV_PCM_FORMAT_S24 SNDRV_PCM_FORMAT_S24_BE
--#define SNDRV_PCM_FORMAT_U24 SNDRV_PCM_FORMAT_U24_BE
--#define SNDRV_PCM_FORMAT_S32 SNDRV_PCM_FORMAT_S32_BE
--#define SNDRV_PCM_FORMAT_U32 SNDRV_PCM_FORMAT_U32_BE
--#define SNDRV_PCM_FORMAT_FLOAT SNDRV_PCM_FORMAT_FLOAT_BE
--#define SNDRV_PCM_FORMAT_FLOAT64 SNDRV_PCM_FORMAT_FLOAT64_BE
--#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE
--#define SNDRV_PCM_FORMAT_S20 SNDRV_PCM_FORMAT_S20_BE
--#define SNDRV_PCM_FORMAT_U20 SNDRV_PCM_FORMAT_U20_BE
--#endif
--
--typedef int __bitwise snd_pcm_subformat_t;
--#define SNDRV_PCM_SUBFORMAT_STD ((__force snd_pcm_subformat_t) 0)
--#define SNDRV_PCM_SUBFORMAT_LAST SNDRV_PCM_SUBFORMAT_STD
--
--#define SNDRV_PCM_INFO_MMAP 0x00000001 /* hardware supports mmap */
--#define SNDRV_PCM_INFO_MMAP_VALID 0x00000002 /* period data are valid during transfer */
--#define SNDRV_PCM_INFO_DOUBLE 0x00000004 /* Double buffering needed for PCM start/stop */
--#define SNDRV_PCM_INFO_BATCH 0x00000010 /* double buffering */
--#define SNDRV_PCM_INFO_SYNC_APPLPTR 0x00000020 /* need the explicit sync of appl_ptr update */
--#define SNDRV_PCM_INFO_INTERLEAVED 0x00000100 /* channels are interleaved */
--#define SNDRV_PCM_INFO_NONINTERLEAVED 0x00000200 /* channels are not interleaved */
--#define SNDRV_PCM_INFO_COMPLEX 0x00000400 /* complex frame organization (mmap only) */
--#define SNDRV_PCM_INFO_BLOCK_TRANSFER 0x00010000 /* hardware transfer block of samples */
--#define SNDRV_PCM_INFO_OVERRANGE 0x00020000 /* hardware supports ADC (capture) overrange detection */
--#define SNDRV_PCM_INFO_RESUME 0x00040000 /* hardware supports stream resume after suspend */
--#define SNDRV_PCM_INFO_PAUSE 0x00080000 /* pause ioctl is supported */
--#define SNDRV_PCM_INFO_HALF_DUPLEX 0x00100000 /* only half duplex */
--#define SNDRV_PCM_INFO_JOINT_DUPLEX 0x00200000 /* playback and capture stream are somewhat correlated */
--#define SNDRV_PCM_INFO_SYNC_START 0x00400000 /* pcm support some kind of sync go */
--#define SNDRV_PCM_INFO_NO_PERIOD_WAKEUP 0x00800000 /* period wakeup can be disabled */
--#define SNDRV_PCM_INFO_HAS_WALL_CLOCK 0x01000000 /* (Deprecated)has audio wall clock for audio/system time sync */
--#define SNDRV_PCM_INFO_HAS_LINK_ATIME 0x01000000 /* report hardware link audio time, reset on startup */
--#define SNDRV_PCM_INFO_HAS_LINK_ABSOLUTE_ATIME 0x02000000 /* report absolute hardware link audio time, not reset on startup */
--#define SNDRV_PCM_INFO_HAS_LINK_ESTIMATED_ATIME 0x04000000 /* report estimated link audio time */
--#define SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME 0x08000000 /* report synchronized audio/system time */
--
--#define SNDRV_PCM_INFO_DRAIN_TRIGGER 0x40000000 /* internal kernel flag - trigger in drain */
--#define SNDRV_PCM_INFO_FIFO_IN_FRAMES 0x80000000 /* internal kernel flag - FIFO size is in frames */
--
--
--
--typedef int __bitwise snd_pcm_state_t;
--#define SNDRV_PCM_STATE_OPEN ((__force snd_pcm_state_t) 0) /* stream is open */
--#define SNDRV_PCM_STATE_SETUP ((__force snd_pcm_state_t) 1) /* stream has a setup */
--#define SNDRV_PCM_STATE_PREPARED ((__force snd_pcm_state_t) 2) /* stream is ready to start */
--#define SNDRV_PCM_STATE_RUNNING ((__force snd_pcm_state_t) 3) /* stream is running */
--#define SNDRV_PCM_STATE_XRUN ((__force snd_pcm_state_t) 4) /* stream reached an xrun */
--#define SNDRV_PCM_STATE_DRAINING ((__force snd_pcm_state_t) 5) /* stream is draining */
--#define SNDRV_PCM_STATE_PAUSED ((__force snd_pcm_state_t) 6) /* stream is paused */
--#define SNDRV_PCM_STATE_SUSPENDED ((__force snd_pcm_state_t) 7) /* hardware is suspended */
--#define SNDRV_PCM_STATE_DISCONNECTED ((__force snd_pcm_state_t) 8) /* hardware is disconnected */
--#define SNDRV_PCM_STATE_LAST SNDRV_PCM_STATE_DISCONNECTED
--
--enum {
-- SNDRV_PCM_MMAP_OFFSET_DATA = 0x00000000,
-- SNDRV_PCM_MMAP_OFFSET_STATUS = 0x80000000,
-- SNDRV_PCM_MMAP_OFFSET_CONTROL = 0x81000000,
--};
--
--union snd_pcm_sync_id {
-- unsigned char id[16];
-- unsigned short id16[8];
-- unsigned int id32[4];
--};
--
--struct snd_pcm_info {
-- unsigned int device; /* RO/WR (control): device number */
-- unsigned int subdevice; /* RO/WR (control): subdevice number */
-- int stream; /* RO/WR (control): stream direction */
-- int card; /* R: card number */
-- unsigned char id[64]; /* ID (user selectable) */
-- unsigned char name[80]; /* name of this device */
-- unsigned char subname[32]; /* subdevice name */
-- int dev_class; /* SNDRV_PCM_CLASS_* */
-- int dev_subclass; /* SNDRV_PCM_SUBCLASS_* */
-- unsigned int subdevices_count;
-- unsigned int subdevices_avail;
-- union snd_pcm_sync_id sync; /* hardware synchronization ID */
-- unsigned char reserved[64]; /* reserved for future... */
--};
--
--typedef int snd_pcm_hw_param_t;
--#define SNDRV_PCM_HW_PARAM_ACCESS 0 /* Access type */
--#define SNDRV_PCM_HW_PARAM_FORMAT 1 /* Format */
--#define SNDRV_PCM_HW_PARAM_SUBFORMAT 2 /* Subformat */
--#define SNDRV_PCM_HW_PARAM_FIRST_MASK SNDRV_PCM_HW_PARAM_ACCESS
--#define SNDRV_PCM_HW_PARAM_LAST_MASK SNDRV_PCM_HW_PARAM_SUBFORMAT
--
--#define SNDRV_PCM_HW_PARAM_SAMPLE_BITS 8 /* Bits per sample */
--#define SNDRV_PCM_HW_PARAM_FRAME_BITS 9 /* Bits per frame */
--#define SNDRV_PCM_HW_PARAM_CHANNELS 10 /* Channels */
--#define SNDRV_PCM_HW_PARAM_RATE 11 /* Approx rate */
--#define SNDRV_PCM_HW_PARAM_PERIOD_TIME 12 /* Approx distance between
-- * interrupts in us
-- */
--#define SNDRV_PCM_HW_PARAM_PERIOD_SIZE 13 /* Approx frames between
-- * interrupts
-- */
--#define SNDRV_PCM_HW_PARAM_PERIOD_BYTES 14 /* Approx bytes between
-- * interrupts
-- */
--#define SNDRV_PCM_HW_PARAM_PERIODS 15 /* Approx interrupts per
-- * buffer
-- */
--#define SNDRV_PCM_HW_PARAM_BUFFER_TIME 16 /* Approx duration of buffer
-- * in us
-- */
--#define SNDRV_PCM_HW_PARAM_BUFFER_SIZE 17 /* Size of buffer in frames */
--#define SNDRV_PCM_HW_PARAM_BUFFER_BYTES 18 /* Size of buffer in bytes */
--#define SNDRV_PCM_HW_PARAM_TICK_TIME 19 /* Approx tick duration in us */
--#define SNDRV_PCM_HW_PARAM_FIRST_INTERVAL SNDRV_PCM_HW_PARAM_SAMPLE_BITS
--#define SNDRV_PCM_HW_PARAM_LAST_INTERVAL SNDRV_PCM_HW_PARAM_TICK_TIME
--
--#define SNDRV_PCM_HW_PARAMS_NORESAMPLE (1<<0) /* avoid rate resampling */
--#define SNDRV_PCM_HW_PARAMS_EXPORT_BUFFER (1<<1) /* export buffer */
--#define SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP (1<<2) /* disable period wakeups */
--
--struct snd_interval {
-- unsigned int min, max;
-- unsigned int openmin:1,
-- openmax:1,
-- integer:1,
-- empty:1;
--};
--
--#define SNDRV_MASK_MAX 256
--
--struct snd_mask {
-- __u32 bits[(SNDRV_MASK_MAX+31)/32];
--};
--
--struct snd_pcm_hw_params {
-- unsigned int flags;
-- struct snd_mask masks[SNDRV_PCM_HW_PARAM_LAST_MASK -
-- SNDRV_PCM_HW_PARAM_FIRST_MASK + 1];
-- struct snd_mask mres[5]; /* reserved masks */
-- struct snd_interval intervals[SNDRV_PCM_HW_PARAM_LAST_INTERVAL -
-- SNDRV_PCM_HW_PARAM_FIRST_INTERVAL + 1];
-- struct snd_interval ires[9]; /* reserved intervals */
-- unsigned int rmask; /* W: requested masks */
-- unsigned int cmask; /* R: changed masks */
-- unsigned int info; /* R: Info flags for returned setup */
-- unsigned int msbits; /* R: used most significant bits */
-- unsigned int rate_num; /* R: rate numerator */
-- unsigned int rate_den; /* R: rate denominator */
-- snd_pcm_uframes_t fifo_size; /* R: chip FIFO size in frames */
-- unsigned char reserved[64]; /* reserved for future */
--};
--
--enum {
-- SNDRV_PCM_TSTAMP_NONE = 0,
-- SNDRV_PCM_TSTAMP_ENABLE,
-- SNDRV_PCM_TSTAMP_LAST = SNDRV_PCM_TSTAMP_ENABLE,
--};
--
--struct snd_pcm_sw_params {
-- int tstamp_mode; /* timestamp mode */
-- unsigned int period_step;
-- unsigned int sleep_min; /* min ticks to sleep */
-- snd_pcm_uframes_t avail_min; /* min avail frames for wakeup */
-- snd_pcm_uframes_t xfer_align; /* obsolete: xfer size need to be a multiple */
-- snd_pcm_uframes_t start_threshold; /* min hw_avail frames for automatic start */
-- snd_pcm_uframes_t stop_threshold; /* min avail frames for automatic stop */
-- snd_pcm_uframes_t silence_threshold; /* min distance from noise for silence filling */
-- snd_pcm_uframes_t silence_size; /* silence block size */
-- snd_pcm_uframes_t boundary; /* pointers wrap point */
-- unsigned int proto; /* protocol version */
-- unsigned int tstamp_type; /* timestamp type (req. proto >= 2.0.12) */
-- unsigned char reserved[56]; /* reserved for future */
--};
--
--struct snd_pcm_channel_info {
-- unsigned int channel;
-- __kernel_off_t offset; /* mmap offset */
-- unsigned int first; /* offset to first sample in bits */
-- unsigned int step; /* samples distance in bits */
--};
--
--enum {
-- /*
-- * first definition for backwards compatibility only,
-- * maps to wallclock/link time for HDAudio playback and DEFAULT/DMA time for everything else
-- */
-- SNDRV_PCM_AUDIO_TSTAMP_TYPE_COMPAT = 0,
--
-- /* timestamp definitions */
-- SNDRV_PCM_AUDIO_TSTAMP_TYPE_DEFAULT = 1, /* DMA time, reported as per hw_ptr */
-- SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK = 2, /* link time reported by sample or wallclock counter, reset on startup */
-- SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ABSOLUTE = 3, /* link time reported by sample or wallclock counter, not reset on startup */
-- SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ESTIMATED = 4, /* link time estimated indirectly */
-- SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED = 5, /* link time synchronized with system time */
-- SNDRV_PCM_AUDIO_TSTAMP_TYPE_LAST = SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED
--};
--
--struct snd_pcm_status {
-- snd_pcm_state_t state; /* stream state */
-- struct timespec trigger_tstamp; /* time when stream was started/stopped/paused */
-- struct timespec tstamp; /* reference timestamp */
-- snd_pcm_uframes_t appl_ptr; /* appl ptr */
-- snd_pcm_uframes_t hw_ptr; /* hw ptr */
-- snd_pcm_sframes_t delay; /* current delay in frames */
-- snd_pcm_uframes_t avail; /* number of frames available */
-- snd_pcm_uframes_t avail_max; /* max frames available on hw since last status */
-- snd_pcm_uframes_t overrange; /* count of ADC (capture) overrange detections from last status */
-- snd_pcm_state_t suspended_state; /* suspended stream state */
-- __u32 audio_tstamp_data; /* needed for 64-bit alignment, used for configs/report to/from userspace */
-- struct timespec audio_tstamp; /* sample counter, wall clock, PHC or on-demand sync'ed */
-- struct timespec driver_tstamp; /* useful in case reference system tstamp is reported with delay */
-- __u32 audio_tstamp_accuracy; /* in ns units, only valid if indicated in audio_tstamp_data */
-- unsigned char reserved[52-2*sizeof(struct timespec)]; /* must be filled with zero */
--};
--
--struct snd_pcm_mmap_status {
-- snd_pcm_state_t state; /* RO: state - SNDRV_PCM_STATE_XXXX */
-- int pad1; /* Needed for 64 bit alignment */
-- snd_pcm_uframes_t hw_ptr; /* RO: hw ptr (0...boundary-1) */
-- struct timespec tstamp; /* Timestamp */
-- snd_pcm_state_t suspended_state; /* RO: suspended stream state */
-- struct timespec audio_tstamp; /* from sample counter or wall clock */
--};
--
--struct snd_pcm_mmap_control {
-- snd_pcm_uframes_t appl_ptr; /* RW: appl ptr (0...boundary-1) */
-- snd_pcm_uframes_t avail_min; /* RW: min available frames for wakeup */
--};
--
--#define SNDRV_PCM_SYNC_PTR_HWSYNC (1<<0) /* execute hwsync */
--#define SNDRV_PCM_SYNC_PTR_APPL (1<<1) /* get appl_ptr from driver (r/w op) */
--#define SNDRV_PCM_SYNC_PTR_AVAIL_MIN (1<<2) /* get avail_min from driver */
--
--struct snd_pcm_sync_ptr {
-- unsigned int flags;
-- union {
-- struct snd_pcm_mmap_status status;
-- unsigned char reserved[64];
-- } s;
-- union {
-- struct snd_pcm_mmap_control control;
-- unsigned char reserved[64];
-- } c;
--};
--
--struct snd_xferi {
-- snd_pcm_sframes_t result;
-- void __user *buf;
-- snd_pcm_uframes_t frames;
--};
--
--struct snd_xfern {
-- snd_pcm_sframes_t result;
-- void __user * __user *bufs;
-- snd_pcm_uframes_t frames;
--};
--
--enum {
-- SNDRV_PCM_TSTAMP_TYPE_GETTIMEOFDAY = 0, /* gettimeofday equivalent */
-- SNDRV_PCM_TSTAMP_TYPE_MONOTONIC, /* posix_clock_monotonic equivalent */
-- SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW, /* monotonic_raw (no NTP) */
-- SNDRV_PCM_TSTAMP_TYPE_LAST = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW,
--};
--
--/* channel positions */
--enum {
-- SNDRV_CHMAP_UNKNOWN = 0,
-- SNDRV_CHMAP_NA, /* N/A, silent */
-- SNDRV_CHMAP_MONO, /* mono stream */
-- /* this follows the alsa-lib mixer channel value + 3 */
-- SNDRV_CHMAP_FL, /* front left */
-- SNDRV_CHMAP_FR, /* front right */
-- SNDRV_CHMAP_RL, /* rear left */
-- SNDRV_CHMAP_RR, /* rear right */
-- SNDRV_CHMAP_FC, /* front center */
-- SNDRV_CHMAP_LFE, /* LFE */
-- SNDRV_CHMAP_SL, /* side left */
-- SNDRV_CHMAP_SR, /* side right */
-- SNDRV_CHMAP_RC, /* rear center */
-- /* new definitions */
-- SNDRV_CHMAP_FLC, /* front left center */
-- SNDRV_CHMAP_FRC, /* front right center */
-- SNDRV_CHMAP_RLC, /* rear left center */
-- SNDRV_CHMAP_RRC, /* rear right center */
-- SNDRV_CHMAP_FLW, /* front left wide */
-- SNDRV_CHMAP_FRW, /* front right wide */
-- SNDRV_CHMAP_FLH, /* front left high */
-- SNDRV_CHMAP_FCH, /* front center high */
-- SNDRV_CHMAP_FRH, /* front right high */
-- SNDRV_CHMAP_TC, /* top center */
-- SNDRV_CHMAP_TFL, /* top front left */
-- SNDRV_CHMAP_TFR, /* top front right */
-- SNDRV_CHMAP_TFC, /* top front center */
-- SNDRV_CHMAP_TRL, /* top rear left */
-- SNDRV_CHMAP_TRR, /* top rear right */
-- SNDRV_CHMAP_TRC, /* top rear center */
-- /* new definitions for UAC2 */
-- SNDRV_CHMAP_TFLC, /* top front left center */
-- SNDRV_CHMAP_TFRC, /* top front right center */
-- SNDRV_CHMAP_TSL, /* top side left */
-- SNDRV_CHMAP_TSR, /* top side right */
-- SNDRV_CHMAP_LLFE, /* left LFE */
-- SNDRV_CHMAP_RLFE, /* right LFE */
-- SNDRV_CHMAP_BC, /* bottom center */
-- SNDRV_CHMAP_BLC, /* bottom left center */
-- SNDRV_CHMAP_BRC, /* bottom right center */
-- SNDRV_CHMAP_LAST = SNDRV_CHMAP_BRC,
--};
--
--#define SNDRV_CHMAP_POSITION_MASK 0xffff
--#define SNDRV_CHMAP_PHASE_INVERSE (0x01 << 16)
--#define SNDRV_CHMAP_DRIVER_SPEC (0x02 << 16)
--
--#define SNDRV_PCM_IOCTL_PVERSION _IOR('A', 0x00, int)
--#define SNDRV_PCM_IOCTL_INFO _IOR('A', 0x01, struct snd_pcm_info)
--#define SNDRV_PCM_IOCTL_TSTAMP _IOW('A', 0x02, int)
--#define SNDRV_PCM_IOCTL_TTSTAMP _IOW('A', 0x03, int)
--#define SNDRV_PCM_IOCTL_USER_PVERSION _IOW('A', 0x04, int)
--#define SNDRV_PCM_IOCTL_HW_REFINE _IOWR('A', 0x10, struct snd_pcm_hw_params)
--#define SNDRV_PCM_IOCTL_HW_PARAMS _IOWR('A', 0x11, struct snd_pcm_hw_params)
--#define SNDRV_PCM_IOCTL_HW_FREE _IO('A', 0x12)
--#define SNDRV_PCM_IOCTL_SW_PARAMS _IOWR('A', 0x13, struct snd_pcm_sw_params)
--#define SNDRV_PCM_IOCTL_STATUS _IOR('A', 0x20, struct snd_pcm_status)
--#define SNDRV_PCM_IOCTL_DELAY _IOR('A', 0x21, snd_pcm_sframes_t)
--#define SNDRV_PCM_IOCTL_HWSYNC _IO('A', 0x22)
--#define SNDRV_PCM_IOCTL_SYNC_PTR _IOWR('A', 0x23, struct snd_pcm_sync_ptr)
--#define SNDRV_PCM_IOCTL_STATUS_EXT _IOWR('A', 0x24, struct snd_pcm_status)
--#define SNDRV_PCM_IOCTL_CHANNEL_INFO _IOR('A', 0x32, struct snd_pcm_channel_info)
--#define SNDRV_PCM_IOCTL_PREPARE _IO('A', 0x40)
--#define SNDRV_PCM_IOCTL_RESET _IO('A', 0x41)
--#define SNDRV_PCM_IOCTL_START _IO('A', 0x42)
--#define SNDRV_PCM_IOCTL_DROP _IO('A', 0x43)
--#define SNDRV_PCM_IOCTL_DRAIN _IO('A', 0x44)
--#define SNDRV_PCM_IOCTL_PAUSE _IOW('A', 0x45, int)
--#define SNDRV_PCM_IOCTL_REWIND _IOW('A', 0x46, snd_pcm_uframes_t)
--#define SNDRV_PCM_IOCTL_RESUME _IO('A', 0x47)
--#define SNDRV_PCM_IOCTL_XRUN _IO('A', 0x48)
--#define SNDRV_PCM_IOCTL_FORWARD _IOW('A', 0x49, snd_pcm_uframes_t)
--#define SNDRV_PCM_IOCTL_WRITEI_FRAMES _IOW('A', 0x50, struct snd_xferi)
--#define SNDRV_PCM_IOCTL_READI_FRAMES _IOR('A', 0x51, struct snd_xferi)
--#define SNDRV_PCM_IOCTL_WRITEN_FRAMES _IOW('A', 0x52, struct snd_xfern)
--#define SNDRV_PCM_IOCTL_READN_FRAMES _IOR('A', 0x53, struct snd_xfern)
--#define SNDRV_PCM_IOCTL_LINK _IOW('A', 0x60, int)
--#define SNDRV_PCM_IOCTL_UNLINK _IO('A', 0x61)
--
--/*****************************************************************************
-- * *
-- * MIDI v1.0 interface *
-- * *
-- *****************************************************************************/
--
--/*
-- * Raw MIDI section - /dev/snd/midi??
-- */
--
--#define SNDRV_RAWMIDI_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 0)
--
--enum {
-- SNDRV_RAWMIDI_STREAM_OUTPUT = 0,
-- SNDRV_RAWMIDI_STREAM_INPUT,
-- SNDRV_RAWMIDI_STREAM_LAST = SNDRV_RAWMIDI_STREAM_INPUT,
--};
--
--#define SNDRV_RAWMIDI_INFO_OUTPUT 0x00000001
--#define SNDRV_RAWMIDI_INFO_INPUT 0x00000002
--#define SNDRV_RAWMIDI_INFO_DUPLEX 0x00000004
--
--struct snd_rawmidi_info {
-- unsigned int device; /* RO/WR (control): device number */
-- unsigned int subdevice; /* RO/WR (control): subdevice number */
-- int stream; /* WR: stream */
-- int card; /* R: card number */
-- unsigned int flags; /* SNDRV_RAWMIDI_INFO_XXXX */
-- unsigned char id[64]; /* ID (user selectable) */
-- unsigned char name[80]; /* name of device */
-- unsigned char subname[32]; /* name of active or selected subdevice */
-- unsigned int subdevices_count;
-- unsigned int subdevices_avail;
-- unsigned char reserved[64]; /* reserved for future use */
--};
--
--struct snd_rawmidi_params {
-- int stream;
-- size_t buffer_size; /* queue size in bytes */
-- size_t avail_min; /* minimum avail bytes for wakeup */
-- unsigned int no_active_sensing: 1; /* do not send active sensing byte in close() */
-- unsigned char reserved[16]; /* reserved for future use */
--};
--
--struct snd_rawmidi_status {
-- int stream;
-- struct timespec tstamp; /* Timestamp */
-- size_t avail; /* available bytes */
-- size_t xruns; /* count of overruns since last status (in bytes) */
-- unsigned char reserved[16]; /* reserved for future use */
--};
--
--#define SNDRV_RAWMIDI_IOCTL_PVERSION _IOR('W', 0x00, int)
--#define SNDRV_RAWMIDI_IOCTL_INFO _IOR('W', 0x01, struct snd_rawmidi_info)
--#define SNDRV_RAWMIDI_IOCTL_PARAMS _IOWR('W', 0x10, struct snd_rawmidi_params)
--#define SNDRV_RAWMIDI_IOCTL_STATUS _IOWR('W', 0x20, struct snd_rawmidi_status)
--#define SNDRV_RAWMIDI_IOCTL_DROP _IOW('W', 0x30, int)
--#define SNDRV_RAWMIDI_IOCTL_DRAIN _IOW('W', 0x31, int)
--
--/*
-- * Timer section - /dev/snd/timer
-- */
--
--#define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 6)
--
--enum {
-- SNDRV_TIMER_CLASS_NONE = -1,
-- SNDRV_TIMER_CLASS_SLAVE = 0,
-- SNDRV_TIMER_CLASS_GLOBAL,
-- SNDRV_TIMER_CLASS_CARD,
-- SNDRV_TIMER_CLASS_PCM,
-- SNDRV_TIMER_CLASS_LAST = SNDRV_TIMER_CLASS_PCM,
--};
--
--/* slave timer classes */
--enum {
-- SNDRV_TIMER_SCLASS_NONE = 0,
-- SNDRV_TIMER_SCLASS_APPLICATION,
-- SNDRV_TIMER_SCLASS_SEQUENCER, /* alias */
-- SNDRV_TIMER_SCLASS_OSS_SEQUENCER, /* alias */
-- SNDRV_TIMER_SCLASS_LAST = SNDRV_TIMER_SCLASS_OSS_SEQUENCER,
--};
--
--/* global timers (device member) */
--#define SNDRV_TIMER_GLOBAL_SYSTEM 0
--#define SNDRV_TIMER_GLOBAL_RTC 1 /* unused */
--#define SNDRV_TIMER_GLOBAL_HPET 2
--#define SNDRV_TIMER_GLOBAL_HRTIMER 3
--
--/* info flags */
--#define SNDRV_TIMER_FLG_SLAVE (1<<0) /* cannot be controlled */
--
--struct snd_timer_id {
-- int dev_class;
-- int dev_sclass;
-- int card;
-- int device;
-- int subdevice;
--};
--
--struct snd_timer_ginfo {
-- struct snd_timer_id tid; /* requested timer ID */
-- unsigned int flags; /* timer flags - SNDRV_TIMER_FLG_* */
-- int card; /* card number */
-- unsigned char id[64]; /* timer identification */
-- unsigned char name[80]; /* timer name */
-- unsigned long reserved0; /* reserved for future use */
-- unsigned long resolution; /* average period resolution in ns */
-- unsigned long resolution_min; /* minimal period resolution in ns */
-- unsigned long resolution_max; /* maximal period resolution in ns */
-- unsigned int clients; /* active timer clients */
-- unsigned char reserved[32];
--};
--
--struct snd_timer_gparams {
-- struct snd_timer_id tid; /* requested timer ID */
-- unsigned long period_num; /* requested precise period duration (in seconds) - numerator */
-- unsigned long period_den; /* requested precise period duration (in seconds) - denominator */
-- unsigned char reserved[32];
--};
--
--struct snd_timer_gstatus {
-- struct snd_timer_id tid; /* requested timer ID */
-- unsigned long resolution; /* current period resolution in ns */
-- unsigned long resolution_num; /* precise current period resolution (in seconds) - numerator */
-- unsigned long resolution_den; /* precise current period resolution (in seconds) - denominator */
-- unsigned char reserved[32];
--};
--
--struct snd_timer_select {
-- struct snd_timer_id id; /* bind to timer ID */
-- unsigned char reserved[32]; /* reserved */
--};
--
--struct snd_timer_info {
-- unsigned int flags; /* timer flags - SNDRV_TIMER_FLG_* */
-- int card; /* card number */
-- unsigned char id[64]; /* timer identificator */
-- unsigned char name[80]; /* timer name */
-- unsigned long reserved0; /* reserved for future use */
-- unsigned long resolution; /* average period resolution in ns */
-- unsigned char reserved[64]; /* reserved */
--};
--
--#define SNDRV_TIMER_PSFLG_AUTO (1<<0) /* auto start, otherwise one-shot */
--#define SNDRV_TIMER_PSFLG_EXCLUSIVE (1<<1) /* exclusive use, precise start/stop/pause/continue */
--#define SNDRV_TIMER_PSFLG_EARLY_EVENT (1<<2) /* write early event to the poll queue */
--
--struct snd_timer_params {
-- unsigned int flags; /* flags - SNDRV_TIMER_PSFLG_* */
-- unsigned int ticks; /* requested resolution in ticks */
-- unsigned int queue_size; /* total size of queue (32-1024) */
-- unsigned int reserved0; /* reserved, was: failure locations */
-- unsigned int filter; /* event filter (bitmask of SNDRV_TIMER_EVENT_*) */
-- unsigned char reserved[60]; /* reserved */
--};
--
--struct snd_timer_status {
-- struct timespec tstamp; /* Timestamp - last update */
-- unsigned int resolution; /* current period resolution in ns */
-- unsigned int lost; /* counter of master tick lost */
-- unsigned int overrun; /* count of read queue overruns */
-- unsigned int queue; /* used queue size */
-- unsigned char reserved[64]; /* reserved */
--};
--
--#define SNDRV_TIMER_IOCTL_PVERSION _IOR('T', 0x00, int)
--#define SNDRV_TIMER_IOCTL_NEXT_DEVICE _IOWR('T', 0x01, struct snd_timer_id)
--#define SNDRV_TIMER_IOCTL_TREAD _IOW('T', 0x02, int)
--#define SNDRV_TIMER_IOCTL_GINFO _IOWR('T', 0x03, struct snd_timer_ginfo)
--#define SNDRV_TIMER_IOCTL_GPARAMS _IOW('T', 0x04, struct snd_timer_gparams)
--#define SNDRV_TIMER_IOCTL_GSTATUS _IOWR('T', 0x05, struct snd_timer_gstatus)
--#define SNDRV_TIMER_IOCTL_SELECT _IOW('T', 0x10, struct snd_timer_select)
--#define SNDRV_TIMER_IOCTL_INFO _IOR('T', 0x11, struct snd_timer_info)
--#define SNDRV_TIMER_IOCTL_PARAMS _IOW('T', 0x12, struct snd_timer_params)
--#define SNDRV_TIMER_IOCTL_STATUS _IOR('T', 0x14, struct snd_timer_status)
--/* The following four ioctls are changed since 1.0.9 due to confliction */
--#define SNDRV_TIMER_IOCTL_START _IO('T', 0xa0)
--#define SNDRV_TIMER_IOCTL_STOP _IO('T', 0xa1)
--#define SNDRV_TIMER_IOCTL_CONTINUE _IO('T', 0xa2)
--#define SNDRV_TIMER_IOCTL_PAUSE _IO('T', 0xa3)
--
--struct snd_timer_read {
-- unsigned int resolution;
-- unsigned int ticks;
--};
--
--enum {
-- SNDRV_TIMER_EVENT_RESOLUTION = 0, /* val = resolution in ns */
-- SNDRV_TIMER_EVENT_TICK, /* val = ticks */
-- SNDRV_TIMER_EVENT_START, /* val = resolution in ns */
-- SNDRV_TIMER_EVENT_STOP, /* val = 0 */
-- SNDRV_TIMER_EVENT_CONTINUE, /* val = resolution in ns */
-- SNDRV_TIMER_EVENT_PAUSE, /* val = 0 */
-- SNDRV_TIMER_EVENT_EARLY, /* val = 0, early event */
-- SNDRV_TIMER_EVENT_SUSPEND, /* val = 0 */
-- SNDRV_TIMER_EVENT_RESUME, /* val = resolution in ns */
-- /* master timer events for slave timer instances */
-- SNDRV_TIMER_EVENT_MSTART = SNDRV_TIMER_EVENT_START + 10,
-- SNDRV_TIMER_EVENT_MSTOP = SNDRV_TIMER_EVENT_STOP + 10,
-- SNDRV_TIMER_EVENT_MCONTINUE = SNDRV_TIMER_EVENT_CONTINUE + 10,
-- SNDRV_TIMER_EVENT_MPAUSE = SNDRV_TIMER_EVENT_PAUSE + 10,
-- SNDRV_TIMER_EVENT_MSUSPEND = SNDRV_TIMER_EVENT_SUSPEND + 10,
-- SNDRV_TIMER_EVENT_MRESUME = SNDRV_TIMER_EVENT_RESUME + 10,
--};
--
--struct snd_timer_tread {
-- int event;
-- struct timespec tstamp;
-- unsigned int val;
--};
--
--/****************************************************************************
-- * *
-- * Section for driver control interface - /dev/snd/control? *
-- * *
-- ****************************************************************************/
--
--#define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 7)
--
--struct snd_ctl_card_info {
-- int card; /* card number */
-- int pad; /* reserved for future (was type) */
-- unsigned char id[16]; /* ID of card (user selectable) */
-- unsigned char driver[16]; /* Driver name */
-- unsigned char name[32]; /* Short name of soundcard */
-- unsigned char longname[80]; /* name + info text about soundcard */
-- unsigned char reserved_[16]; /* reserved for future (was ID of mixer) */
-- unsigned char mixername[80]; /* visual mixer identification */
-- unsigned char components[128]; /* card components / fine identification, delimited with one space (AC97 etc..) */
--};
--
--typedef int __bitwise snd_ctl_elem_type_t;
--#define SNDRV_CTL_ELEM_TYPE_NONE ((__force snd_ctl_elem_type_t) 0) /* invalid */
--#define SNDRV_CTL_ELEM_TYPE_BOOLEAN ((__force snd_ctl_elem_type_t) 1) /* boolean type */
--#define SNDRV_CTL_ELEM_TYPE_INTEGER ((__force snd_ctl_elem_type_t) 2) /* integer type */
--#define SNDRV_CTL_ELEM_TYPE_ENUMERATED ((__force snd_ctl_elem_type_t) 3) /* enumerated type */
--#define SNDRV_CTL_ELEM_TYPE_BYTES ((__force snd_ctl_elem_type_t) 4) /* byte array */
--#define SNDRV_CTL_ELEM_TYPE_IEC958 ((__force snd_ctl_elem_type_t) 5) /* IEC958 (S/PDIF) setup */
--#define SNDRV_CTL_ELEM_TYPE_INTEGER64 ((__force snd_ctl_elem_type_t) 6) /* 64-bit integer type */
--#define SNDRV_CTL_ELEM_TYPE_LAST SNDRV_CTL_ELEM_TYPE_INTEGER64
--
--typedef int __bitwise snd_ctl_elem_iface_t;
--#define SNDRV_CTL_ELEM_IFACE_CARD ((__force snd_ctl_elem_iface_t) 0) /* global control */
--#define SNDRV_CTL_ELEM_IFACE_HWDEP ((__force snd_ctl_elem_iface_t) 1) /* hardware dependent device */
--#define SNDRV_CTL_ELEM_IFACE_MIXER ((__force snd_ctl_elem_iface_t) 2) /* virtual mixer device */
--#define SNDRV_CTL_ELEM_IFACE_PCM ((__force snd_ctl_elem_iface_t) 3) /* PCM device */
--#define SNDRV_CTL_ELEM_IFACE_RAWMIDI ((__force snd_ctl_elem_iface_t) 4) /* RawMidi device */
--#define SNDRV_CTL_ELEM_IFACE_TIMER ((__force snd_ctl_elem_iface_t) 5) /* timer device */
--#define SNDRV_CTL_ELEM_IFACE_SEQUENCER ((__force snd_ctl_elem_iface_t) 6) /* sequencer client */
--#define SNDRV_CTL_ELEM_IFACE_LAST SNDRV_CTL_ELEM_IFACE_SEQUENCER
--
--#define SNDRV_CTL_ELEM_ACCESS_READ (1<<0)
--#define SNDRV_CTL_ELEM_ACCESS_WRITE (1<<1)
--#define SNDRV_CTL_ELEM_ACCESS_READWRITE (SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE)
--#define SNDRV_CTL_ELEM_ACCESS_VOLATILE (1<<2) /* control value may be changed without a notification */
--#define SNDRV_CTL_ELEM_ACCESS_TIMESTAMP (1<<3) /* when was control changed */
--#define SNDRV_CTL_ELEM_ACCESS_TLV_READ (1<<4) /* TLV read is possible */
--#define SNDRV_CTL_ELEM_ACCESS_TLV_WRITE (1<<5) /* TLV write is possible */
--#define SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE (SNDRV_CTL_ELEM_ACCESS_TLV_READ|SNDRV_CTL_ELEM_ACCESS_TLV_WRITE)
--#define SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND (1<<6) /* TLV command is possible */
--#define SNDRV_CTL_ELEM_ACCESS_INACTIVE (1<<8) /* control does actually nothing, but may be updated */
--#define SNDRV_CTL_ELEM_ACCESS_LOCK (1<<9) /* write lock */
--#define SNDRV_CTL_ELEM_ACCESS_OWNER (1<<10) /* write lock owner */
--#define SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK (1<<28) /* kernel use a TLV callback */
--#define SNDRV_CTL_ELEM_ACCESS_USER (1<<29) /* user space element */
--/* bits 30 and 31 are obsoleted (for indirect access) */
--
--/* for further details see the ACPI and PCI power management specification */
--#define SNDRV_CTL_POWER_D0 0x0000 /* full On */
--#define SNDRV_CTL_POWER_D1 0x0100 /* partial On */
--#define SNDRV_CTL_POWER_D2 0x0200 /* partial On */
--#define SNDRV_CTL_POWER_D3 0x0300 /* Off */
--#define SNDRV_CTL_POWER_D3hot (SNDRV_CTL_POWER_D3|0x0000) /* Off, with power */
--#define SNDRV_CTL_POWER_D3cold (SNDRV_CTL_POWER_D3|0x0001) /* Off, without power */
--
--#define SNDRV_CTL_ELEM_ID_NAME_MAXLEN 44
--
--struct snd_ctl_elem_id {
-- unsigned int numid; /* numeric identifier, zero = invalid */
-- snd_ctl_elem_iface_t iface; /* interface identifier */
-- unsigned int device; /* device/client number */
-- unsigned int subdevice; /* subdevice (substream) number */
-- unsigned char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* ASCII name of item */
-- unsigned int index; /* index of item */
--};
--
--struct snd_ctl_elem_list {
-- unsigned int offset; /* W: first element ID to get */
-- unsigned int space; /* W: count of element IDs to get */
-- unsigned int used; /* R: count of element IDs set */
-- unsigned int count; /* R: count of all elements */
-- struct snd_ctl_elem_id __user *pids; /* R: IDs */
-- unsigned char reserved[50];
--};
--
--struct snd_ctl_elem_info {
-- struct snd_ctl_elem_id id; /* W: element ID */
-- snd_ctl_elem_type_t type; /* R: value type - SNDRV_CTL_ELEM_TYPE_* */
-- unsigned int access; /* R: value access (bitmask) - SNDRV_CTL_ELEM_ACCESS_* */
-- unsigned int count; /* count of values */
-- __kernel_pid_t owner; /* owner's PID of this control */
-- union {
-- struct {
-- long min; /* R: minimum value */
-- long max; /* R: maximum value */
-- long step; /* R: step (0 variable) */
-- } integer;
-- struct {
-- long long min; /* R: minimum value */
-- long long max; /* R: maximum value */
-- long long step; /* R: step (0 variable) */
-- } integer64;
-- struct {
-- unsigned int items; /* R: number of items */
-- unsigned int item; /* W: item number */
-- char name[64]; /* R: value name */
-- __u64 names_ptr; /* W: names list (ELEM_ADD only) */
-- unsigned int names_length;
-- } enumerated;
-- unsigned char reserved[128];
-- } value;
-- union {
-- unsigned short d[4]; /* dimensions */
-- unsigned short *d_ptr; /* indirect - obsoleted */
-- } dimen;
-- unsigned char reserved[64-4*sizeof(unsigned short)];
--};
--
--struct snd_ctl_elem_value {
-- struct snd_ctl_elem_id id; /* W: element ID */
-- unsigned int indirect: 1; /* W: indirect access - obsoleted */
-- union {
-- union {
-- long value[128];
-- long *value_ptr; /* obsoleted */
-- } integer;
-- union {
-- long long value[64];
-- long long *value_ptr; /* obsoleted */
-- } integer64;
-- union {
-- unsigned int item[128];
-- unsigned int *item_ptr; /* obsoleted */
-- } enumerated;
-- union {
-- unsigned char data[512];
-- unsigned char *data_ptr; /* obsoleted */
-- } bytes;
-- struct snd_aes_iec958 iec958;
-- } value; /* RO */
-- struct timespec tstamp;
-- unsigned char reserved[128-sizeof(struct timespec)];
--};
--
--struct snd_ctl_tlv {
-- unsigned int numid; /* control element numeric identification */
-- unsigned int length; /* in bytes aligned to 4 */
-- unsigned int tlv[0]; /* first TLV */
--};
--
--#define SNDRV_CTL_IOCTL_PVERSION _IOR('U', 0x00, int)
--#define SNDRV_CTL_IOCTL_CARD_INFO _IOR('U', 0x01, struct snd_ctl_card_info)
--#define SNDRV_CTL_IOCTL_ELEM_LIST _IOWR('U', 0x10, struct snd_ctl_elem_list)
--#define SNDRV_CTL_IOCTL_ELEM_INFO _IOWR('U', 0x11, struct snd_ctl_elem_info)
--#define SNDRV_CTL_IOCTL_ELEM_READ _IOWR('U', 0x12, struct snd_ctl_elem_value)
--#define SNDRV_CTL_IOCTL_ELEM_WRITE _IOWR('U', 0x13, struct snd_ctl_elem_value)
--#define SNDRV_CTL_IOCTL_ELEM_LOCK _IOW('U', 0x14, struct snd_ctl_elem_id)
--#define SNDRV_CTL_IOCTL_ELEM_UNLOCK _IOW('U', 0x15, struct snd_ctl_elem_id)
--#define SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS _IOWR('U', 0x16, int)
--#define SNDRV_CTL_IOCTL_ELEM_ADD _IOWR('U', 0x17, struct snd_ctl_elem_info)
--#define SNDRV_CTL_IOCTL_ELEM_REPLACE _IOWR('U', 0x18, struct snd_ctl_elem_info)
--#define SNDRV_CTL_IOCTL_ELEM_REMOVE _IOWR('U', 0x19, struct snd_ctl_elem_id)
--#define SNDRV_CTL_IOCTL_TLV_READ _IOWR('U', 0x1a, struct snd_ctl_tlv)
--#define SNDRV_CTL_IOCTL_TLV_WRITE _IOWR('U', 0x1b, struct snd_ctl_tlv)
--#define SNDRV_CTL_IOCTL_TLV_COMMAND _IOWR('U', 0x1c, struct snd_ctl_tlv)
--#define SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE _IOWR('U', 0x20, int)
--#define SNDRV_CTL_IOCTL_HWDEP_INFO _IOR('U', 0x21, struct snd_hwdep_info)
--#define SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE _IOR('U', 0x30, int)
--#define SNDRV_CTL_IOCTL_PCM_INFO _IOWR('U', 0x31, struct snd_pcm_info)
--#define SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE _IOW('U', 0x32, int)
--#define SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE _IOWR('U', 0x40, int)
--#define SNDRV_CTL_IOCTL_RAWMIDI_INFO _IOWR('U', 0x41, struct snd_rawmidi_info)
--#define SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE _IOW('U', 0x42, int)
--#define SNDRV_CTL_IOCTL_POWER _IOWR('U', 0xd0, int)
--#define SNDRV_CTL_IOCTL_POWER_STATE _IOR('U', 0xd1, int)
--
--/*
-- * Read interface.
-- */
--
--enum sndrv_ctl_event_type {
-- SNDRV_CTL_EVENT_ELEM = 0,
-- SNDRV_CTL_EVENT_LAST = SNDRV_CTL_EVENT_ELEM,
--};
--
--#define SNDRV_CTL_EVENT_MASK_VALUE (1<<0) /* element value was changed */
--#define SNDRV_CTL_EVENT_MASK_INFO (1<<1) /* element info was changed */
--#define SNDRV_CTL_EVENT_MASK_ADD (1<<2) /* element was added */
--#define SNDRV_CTL_EVENT_MASK_TLV (1<<3) /* element TLV tree was changed */
--#define SNDRV_CTL_EVENT_MASK_REMOVE (~0U) /* element was removed */
--
--struct snd_ctl_event {
-- int type; /* event type - SNDRV_CTL_EVENT_* */
-- union {
-- struct {
-- unsigned int mask;
-- struct snd_ctl_elem_id id;
-- } elem;
-- unsigned char data8[60];
-- } data;
--};
--
--/*
-- * Control names
-- */
--
--#define SNDRV_CTL_NAME_NONE ""
--#define SNDRV_CTL_NAME_PLAYBACK "Playback "
--#define SNDRV_CTL_NAME_CAPTURE "Capture "
--
--#define SNDRV_CTL_NAME_IEC958_NONE ""
--#define SNDRV_CTL_NAME_IEC958_SWITCH "Switch"
--#define SNDRV_CTL_NAME_IEC958_VOLUME "Volume"
--#define SNDRV_CTL_NAME_IEC958_DEFAULT "Default"
--#define SNDRV_CTL_NAME_IEC958_MASK "Mask"
--#define SNDRV_CTL_NAME_IEC958_CON_MASK "Con Mask"
--#define SNDRV_CTL_NAME_IEC958_PRO_MASK "Pro Mask"
--#define SNDRV_CTL_NAME_IEC958_PCM_STREAM "PCM Stream"
--#define SNDRV_CTL_NAME_IEC958(expl,direction,what) "IEC958 " expl SNDRV_CTL_NAME_##direction SNDRV_CTL_NAME_IEC958_##what
--
--#endif /* _UAPI__SOUND_ASOUND_H */
-+#include <alsa/sound/uapi/asound.h>
-diff --git a/include/sound/asound_fm.h b/include/sound/asound_fm.h
-index 8471f404..3e5da4d0 100644
---- a/include/sound/asound_fm.h
-+++ b/include/sound/asound_fm.h
-@@ -1,135 +1 @@
--/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
--#ifndef __SOUND_ASOUND_FM_H
--#define __SOUND_ASOUND_FM_H
--
--/*
-- * Advanced Linux Sound Architecture - ALSA
-- *
-- * Interface file between ALSA driver & user space
-- * Copyright (c) 1994-98 by Jaroslav Kysela <perex@perex.cz>,
-- * 4Front Technologies
-- *
-- * Direct FM control
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 2 of the License, or
-- * (at your option) any later version.
-- *
-- * This program is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- * GNU General Public License for more details.
-- *
-- * You should have received a copy of the GNU General Public License
-- * along with this program; if not, write to the Free Software
-- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-- *
-- */
--
--#define SNDRV_DM_FM_MODE_OPL2 0x00
--#define SNDRV_DM_FM_MODE_OPL3 0x01
--
--struct snd_dm_fm_info {
-- unsigned char fm_mode; /* OPL mode, see SNDRV_DM_FM_MODE_XXX */
-- unsigned char rhythm; /* percussion mode flag */
--};
--
--/*
-- * Data structure composing an FM "note" or sound event.
-- */
--
--struct snd_dm_fm_voice {
-- unsigned char op; /* operator cell (0 or 1) */
-- unsigned char voice; /* FM voice (0 to 17) */
--
-- unsigned char am; /* amplitude modulation */
-- unsigned char vibrato; /* vibrato effect */
-- unsigned char do_sustain; /* sustain phase */
-- unsigned char kbd_scale; /* keyboard scaling */
-- unsigned char harmonic; /* 4 bits: harmonic and multiplier */
-- unsigned char scale_level; /* 2 bits: decrease output freq rises */
-- unsigned char volume; /* 6 bits: volume */
--
-- unsigned char attack; /* 4 bits: attack rate */
-- unsigned char decay; /* 4 bits: decay rate */
-- unsigned char sustain; /* 4 bits: sustain level */
-- unsigned char release; /* 4 bits: release rate */
--
-- unsigned char feedback; /* 3 bits: feedback for op0 */
-- unsigned char connection; /* 0 for serial, 1 for parallel */
-- unsigned char left; /* stereo left */
-- unsigned char right; /* stereo right */
-- unsigned char waveform; /* 3 bits: waveform shape */
--};
--
--/*
-- * This describes an FM note by its voice, octave, frequency number (10bit)
-- * and key on/off.
-- */
--
--struct snd_dm_fm_note {
-- unsigned char voice; /* 0-17 voice channel */
-- unsigned char octave; /* 3 bits: what octave to play */
-- unsigned int fnum; /* 10 bits: frequency number */
-- unsigned char key_on; /* set for active, clear for silent */
--};
--
--/*
-- * FM parameters that apply globally to all voices, and thus are not "notes"
-- */
--
--struct snd_dm_fm_params {
-- unsigned char am_depth; /* amplitude modulation depth (1=hi) */
-- unsigned char vib_depth; /* vibrato depth (1=hi) */
-- unsigned char kbd_split; /* keyboard split */
-- unsigned char rhythm; /* percussion mode select */
--
-- /* This block is the percussion instrument data */
-- unsigned char bass;
-- unsigned char snare;
-- unsigned char tomtom;
-- unsigned char cymbal;
-- unsigned char hihat;
--};
--
--/*
-- * FM mode ioctl settings
-- */
--
--#define SNDRV_DM_FM_IOCTL_INFO _IOR('H', 0x20, struct snd_dm_fm_info)
--#define SNDRV_DM_FM_IOCTL_RESET _IO ('H', 0x21)
--#define SNDRV_DM_FM_IOCTL_PLAY_NOTE _IOW('H', 0x22, struct snd_dm_fm_note)
--#define SNDRV_DM_FM_IOCTL_SET_VOICE _IOW('H', 0x23, struct snd_dm_fm_voice)
--#define SNDRV_DM_FM_IOCTL_SET_PARAMS _IOW('H', 0x24, struct snd_dm_fm_params)
--#define SNDRV_DM_FM_IOCTL_SET_MODE _IOW('H', 0x25, int)
--/* for OPL3 only */
--#define SNDRV_DM_FM_IOCTL_SET_CONNECTION _IOW('H', 0x26, int)
--/* SBI patch management */
--#define SNDRV_DM_FM_IOCTL_CLEAR_PATCHES _IO ('H', 0x40)
--
--#define SNDRV_DM_FM_OSS_IOCTL_RESET 0x20
--#define SNDRV_DM_FM_OSS_IOCTL_PLAY_NOTE 0x21
--#define SNDRV_DM_FM_OSS_IOCTL_SET_VOICE 0x22
--#define SNDRV_DM_FM_OSS_IOCTL_SET_PARAMS 0x23
--#define SNDRV_DM_FM_OSS_IOCTL_SET_MODE 0x24
--#define SNDRV_DM_FM_OSS_IOCTL_SET_OPL 0x25
--
--/*
-- * Patch Record - fixed size for write
-- */
--
--#define FM_KEY_SBI "SBI\032"
--#define FM_KEY_2OP "2OP\032"
--#define FM_KEY_4OP "4OP\032"
--
--struct sbi_patch {
-- unsigned char prog;
-- unsigned char bank;
-- char key[4];
-- char name[25];
-- char extension[7];
-- unsigned char data[32];
--};
--
--#endif /* __SOUND_ASOUND_FM_H */
-+#include <alsa/sound/uapi/asound_fm.h>
-diff --git a/include/sound/emu10k1.h b/include/sound/emu10k1.h
-index 042c5a6f..f06ecee5 100644
---- a/include/sound/emu10k1.h
-+++ b/include/sound/emu10k1.h
-@@ -1,381 +1,2 @@
--/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
--/*
-- * Copyright (c) by Jaroslav Kysela <perex@perex.cz>,
-- * Creative Labs, Inc.
-- * Definitions for EMU10K1 (SB Live!) chips
-- *
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 2 of the License, or
-- * (at your option) any later version.
-- *
-- * This program is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- * GNU General Public License for more details.
-- *
-- * You should have received a copy of the GNU General Public License
-- * along with this program; if not, write to the Free Software
-- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-- *
-- */
--#ifndef _UAPI__SOUND_EMU10K1_H
--#define _UAPI__SOUND_EMU10K1_H
--
--#include <linux/types.h>
--#include <sound/asound.h>
--
--/*
-- * ---- FX8010 ----
-- */
--
--#define EMU10K1_CARD_CREATIVE 0x00000000
--#define EMU10K1_CARD_EMUAPS 0x00000001
--
--#define EMU10K1_FX8010_PCM_COUNT 8
--
--/*
-- * Following definition is copied from linux/types.h to support compiling
-- * this header file in userspace since they are not generally available for
-- * uapi headers.
-- */
--#define __EMU10K1_DECLARE_BITMAP(name,bits) \
-- unsigned long name[(bits) / (sizeof(unsigned long) * 8)]
--
--/* instruction set */
--#define iMAC0 0x00 /* R = A + (X * Y >> 31) ; saturation */
--#define iMAC1 0x01 /* R = A + (-X * Y >> 31) ; saturation */
--#define iMAC2 0x02 /* R = A + (X * Y >> 31) ; wraparound */
--#define iMAC3 0x03 /* R = A + (-X * Y >> 31) ; wraparound */
--#define iMACINT0 0x04 /* R = A + X * Y ; saturation */
--#define iMACINT1 0x05 /* R = A + X * Y ; wraparound (31-bit) */
--#define iACC3 0x06 /* R = A + X + Y ; saturation */
--#define iMACMV 0x07 /* R = A, acc += X * Y >> 31 */
--#define iANDXOR 0x08 /* R = (A & X) ^ Y */
--#define iTSTNEG 0x09 /* R = (A >= Y) ? X : ~X */
--#define iLIMITGE 0x0a /* R = (A >= Y) ? X : Y */
--#define iLIMITLT 0x0b /* R = (A < Y) ? X : Y */
--#define iLOG 0x0c /* R = linear_data, A (log_data), X (max_exp), Y (format_word) */
--#define iEXP 0x0d /* R = log_data, A (linear_data), X (max_exp), Y (format_word) */
--#define iINTERP 0x0e /* R = A + (X * (Y - A) >> 31) ; saturation */
--#define iSKIP 0x0f /* R = A (cc_reg), X (count), Y (cc_test) */
--
--/* GPRs */
--#define FXBUS(x) (0x00 + (x)) /* x = 0x00 - 0x0f */
--#define EXTIN(x) (0x10 + (x)) /* x = 0x00 - 0x0f */
--#define EXTOUT(x) (0x20 + (x)) /* x = 0x00 - 0x0f physical outs -> FXWC low 16 bits */
--#define FXBUS2(x) (0x30 + (x)) /* x = 0x00 - 0x0f copies of fx buses for capture -> FXWC high 16 bits */
-- /* NB: 0x31 and 0x32 are shared with Center/LFE on SB live 5.1 */
--
--#define C_00000000 0x40
--#define C_00000001 0x41
--#define C_00000002 0x42
--#define C_00000003 0x43
--#define C_00000004 0x44
--#define C_00000008 0x45
--#define C_00000010 0x46
--#define C_00000020 0x47
--#define C_00000100 0x48
--#define C_00010000 0x49
--#define C_00080000 0x4a
--#define C_10000000 0x4b
--#define C_20000000 0x4c
--#define C_40000000 0x4d
--#define C_80000000 0x4e
--#define C_7fffffff 0x4f
--#define C_ffffffff 0x50
--#define C_fffffffe 0x51
--#define C_c0000000 0x52
--#define C_4f1bbcdc 0x53
--#define C_5a7ef9db 0x54
--#define C_00100000 0x55 /* ?? */
--#define GPR_ACCU 0x56 /* ACCUM, accumulator */
--#define GPR_COND 0x57 /* CCR, condition register */
--#define GPR_NOISE0 0x58 /* noise source */
--#define GPR_NOISE1 0x59 /* noise source */
--#define GPR_IRQ 0x5a /* IRQ register */
--#define GPR_DBAC 0x5b /* TRAM Delay Base Address Counter */
--#define GPR(x) (FXGPREGBASE + (x)) /* free GPRs: x = 0x00 - 0xff */
--#define ITRAM_DATA(x) (TANKMEMDATAREGBASE + 0x00 + (x)) /* x = 0x00 - 0x7f */
--#define ETRAM_DATA(x) (TANKMEMDATAREGBASE + 0x80 + (x)) /* x = 0x00 - 0x1f */
--#define ITRAM_ADDR(x) (TANKMEMADDRREGBASE + 0x00 + (x)) /* x = 0x00 - 0x7f */
--#define ETRAM_ADDR(x) (TANKMEMADDRREGBASE + 0x80 + (x)) /* x = 0x00 - 0x1f */
--
--#define A_ITRAM_DATA(x) (TANKMEMDATAREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */
--#define A_ETRAM_DATA(x) (TANKMEMDATAREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */
--#define A_ITRAM_ADDR(x) (TANKMEMADDRREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */
--#define A_ETRAM_ADDR(x) (TANKMEMADDRREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */
--#define A_ITRAM_CTL(x) (A_TANKMEMCTLREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */
--#define A_ETRAM_CTL(x) (A_TANKMEMCTLREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */
--
--#define A_FXBUS(x) (0x00 + (x)) /* x = 0x00 - 0x3f FX buses */
--#define A_EXTIN(x) (0x40 + (x)) /* x = 0x00 - 0x0f physical ins */
--#define A_P16VIN(x) (0x50 + (x)) /* x = 0x00 - 0x0f p16v ins (A2 only) "EMU32 inputs" */
--#define A_EXTOUT(x) (0x60 + (x)) /* x = 0x00 - 0x1f physical outs -> A_FXWC1 0x79-7f unknown */
--#define A_FXBUS2(x) (0x80 + (x)) /* x = 0x00 - 0x1f extra outs used for EFX capture -> A_FXWC2 */
--#define A_EMU32OUTH(x) (0xa0 + (x)) /* x = 0x00 - 0x0f "EMU32_OUT_10 - _1F" - ??? */
--#define A_EMU32OUTL(x) (0xb0 + (x)) /* x = 0x00 - 0x0f "EMU32_OUT_1 - _F" - ??? */
--#define A3_EMU32IN(x) (0x160 + (x)) /* x = 0x00 - 0x3f "EMU32_IN_00 - _3F" - Only when .device = 0x0008 */
--#define A3_EMU32OUT(x) (0x1E0 + (x)) /* x = 0x00 - 0x0f "EMU32_OUT_00 - _3F" - Only when .device = 0x0008 */
--#define A_GPR(x) (A_FXGPREGBASE + (x))
--
--/* cc_reg constants */
--#define CC_REG_NORMALIZED C_00000001
--#define CC_REG_BORROW C_00000002
--#define CC_REG_MINUS C_00000004
--#define CC_REG_ZERO C_00000008
--#define CC_REG_SATURATE C_00000010
--#define CC_REG_NONZERO C_00000100
--
--/* FX buses */
--#define FXBUS_PCM_LEFT 0x00
--#define FXBUS_PCM_RIGHT 0x01
--#define FXBUS_PCM_LEFT_REAR 0x02
--#define FXBUS_PCM_RIGHT_REAR 0x03
--#define FXBUS_MIDI_LEFT 0x04
--#define FXBUS_MIDI_RIGHT 0x05
--#define FXBUS_PCM_CENTER 0x06
--#define FXBUS_PCM_LFE 0x07
--#define FXBUS_PCM_LEFT_FRONT 0x08
--#define FXBUS_PCM_RIGHT_FRONT 0x09
--#define FXBUS_MIDI_REVERB 0x0c
--#define FXBUS_MIDI_CHORUS 0x0d
--#define FXBUS_PCM_LEFT_SIDE 0x0e
--#define FXBUS_PCM_RIGHT_SIDE 0x0f
--#define FXBUS_PT_LEFT 0x14
--#define FXBUS_PT_RIGHT 0x15
--
--/* Inputs */
--#define EXTIN_AC97_L 0x00 /* AC'97 capture channel - left */
--#define EXTIN_AC97_R 0x01 /* AC'97 capture channel - right */
--#define EXTIN_SPDIF_CD_L 0x02 /* internal S/PDIF CD - onboard - left */
--#define EXTIN_SPDIF_CD_R 0x03 /* internal S/PDIF CD - onboard - right */
--#define EXTIN_ZOOM_L 0x04 /* Zoom Video I2S - left */
--#define EXTIN_ZOOM_R 0x05 /* Zoom Video I2S - right */
--#define EXTIN_TOSLINK_L 0x06 /* LiveDrive - TOSLink Optical - left */
--#define EXTIN_TOSLINK_R 0x07 /* LiveDrive - TOSLink Optical - right */
--#define EXTIN_LINE1_L 0x08 /* LiveDrive - Line/Mic 1 - left */
--#define EXTIN_LINE1_R 0x09 /* LiveDrive - Line/Mic 1 - right */
--#define EXTIN_COAX_SPDIF_L 0x0a /* LiveDrive - Coaxial S/PDIF - left */
--#define EXTIN_COAX_SPDIF_R 0x0b /* LiveDrive - Coaxial S/PDIF - right */
--#define EXTIN_LINE2_L 0x0c /* LiveDrive - Line/Mic 2 - left */
--#define EXTIN_LINE2_R 0x0d /* LiveDrive - Line/Mic 2 - right */
--
--/* Outputs */
--#define EXTOUT_AC97_L 0x00 /* AC'97 playback channel - left */
--#define EXTOUT_AC97_R 0x01 /* AC'97 playback channel - right */
--#define EXTOUT_TOSLINK_L 0x02 /* LiveDrive - TOSLink Optical - left */
--#define EXTOUT_TOSLINK_R 0x03 /* LiveDrive - TOSLink Optical - right */
--#define EXTOUT_AC97_CENTER 0x04 /* SB Live 5.1 - center */
--#define EXTOUT_AC97_LFE 0x05 /* SB Live 5.1 - LFE */
--#define EXTOUT_HEADPHONE_L 0x06 /* LiveDrive - Headphone - left */
--#define EXTOUT_HEADPHONE_R 0x07 /* LiveDrive - Headphone - right */
--#define EXTOUT_REAR_L 0x08 /* Rear channel - left */
--#define EXTOUT_REAR_R 0x09 /* Rear channel - right */
--#define EXTOUT_ADC_CAP_L 0x0a /* ADC Capture buffer - left */
--#define EXTOUT_ADC_CAP_R 0x0b /* ADC Capture buffer - right */
--#define EXTOUT_MIC_CAP 0x0c /* MIC Capture buffer */
--#define EXTOUT_AC97_REAR_L 0x0d /* SB Live 5.1 (c) 2003 - Rear Left */
--#define EXTOUT_AC97_REAR_R 0x0e /* SB Live 5.1 (c) 2003 - Rear Right */
--#define EXTOUT_ACENTER 0x11 /* Analog Center */
--#define EXTOUT_ALFE 0x12 /* Analog LFE */
--
--/* Audigy Inputs */
--#define A_EXTIN_AC97_L 0x00 /* AC'97 capture channel - left */
--#define A_EXTIN_AC97_R 0x01 /* AC'97 capture channel - right */
--#define A_EXTIN_SPDIF_CD_L 0x02 /* digital CD left */
--#define A_EXTIN_SPDIF_CD_R 0x03 /* digital CD left */
--#define A_EXTIN_OPT_SPDIF_L 0x04 /* audigy drive Optical SPDIF - left */
--#define A_EXTIN_OPT_SPDIF_R 0x05 /* right */
--#define A_EXTIN_LINE2_L 0x08 /* audigy drive line2/mic2 - left */
--#define A_EXTIN_LINE2_R 0x09 /* right */
--#define A_EXTIN_ADC_L 0x0a /* Philips ADC - left */
--#define A_EXTIN_ADC_R 0x0b /* right */
--#define A_EXTIN_AUX2_L 0x0c /* audigy drive aux2 - left */
--#define A_EXTIN_AUX2_R 0x0d /* - right */
--
--/* Audigiy Outputs */
--#define A_EXTOUT_FRONT_L 0x00 /* digital front left */
--#define A_EXTOUT_FRONT_R 0x01 /* right */
--#define A_EXTOUT_CENTER 0x02 /* digital front center */
--#define A_EXTOUT_LFE 0x03 /* digital front lfe */
--#define A_EXTOUT_HEADPHONE_L 0x04 /* headphone audigy drive left */
--#define A_EXTOUT_HEADPHONE_R 0x05 /* right */
--#define A_EXTOUT_REAR_L 0x06 /* digital rear left */
--#define A_EXTOUT_REAR_R 0x07 /* right */
--#define A_EXTOUT_AFRONT_L 0x08 /* analog front left */
--#define A_EXTOUT_AFRONT_R 0x09 /* right */
--#define A_EXTOUT_ACENTER 0x0a /* analog center */
--#define A_EXTOUT_ALFE 0x0b /* analog LFE */
--#define A_EXTOUT_ASIDE_L 0x0c /* analog side left - Audigy 2 ZS */
--#define A_EXTOUT_ASIDE_R 0x0d /* right - Audigy 2 ZS */
--#define A_EXTOUT_AREAR_L 0x0e /* analog rear left */
--#define A_EXTOUT_AREAR_R 0x0f /* right */
--#define A_EXTOUT_AC97_L 0x10 /* AC97 left (front) */
--#define A_EXTOUT_AC97_R 0x11 /* right */
--#define A_EXTOUT_ADC_CAP_L 0x16 /* ADC capture buffer left */
--#define A_EXTOUT_ADC_CAP_R 0x17 /* right */
--#define A_EXTOUT_MIC_CAP 0x18 /* Mic capture buffer */
--
--/* Audigy constants */
--#define A_C_00000000 0xc0
--#define A_C_00000001 0xc1
--#define A_C_00000002 0xc2
--#define A_C_00000003 0xc3
--#define A_C_00000004 0xc4
--#define A_C_00000008 0xc5
--#define A_C_00000010 0xc6
--#define A_C_00000020 0xc7
--#define A_C_00000100 0xc8
--#define A_C_00010000 0xc9
--#define A_C_00000800 0xca
--#define A_C_10000000 0xcb
--#define A_C_20000000 0xcc
--#define A_C_40000000 0xcd
--#define A_C_80000000 0xce
--#define A_C_7fffffff 0xcf
--#define A_C_ffffffff 0xd0
--#define A_C_fffffffe 0xd1
--#define A_C_c0000000 0xd2
--#define A_C_4f1bbcdc 0xd3
--#define A_C_5a7ef9db 0xd4
--#define A_C_00100000 0xd5
--#define A_GPR_ACCU 0xd6 /* ACCUM, accumulator */
--#define A_GPR_COND 0xd7 /* CCR, condition register */
--#define A_GPR_NOISE0 0xd8 /* noise source */
--#define A_GPR_NOISE1 0xd9 /* noise source */
--#define A_GPR_IRQ 0xda /* IRQ register */
--#define A_GPR_DBAC 0xdb /* TRAM Delay Base Address Counter - internal */
--#define A_GPR_DBACE 0xde /* TRAM Delay Base Address Counter - external */
--
--/* definitions for debug register */
--#define EMU10K1_DBG_ZC 0x80000000 /* zero tram counter */
--#define EMU10K1_DBG_SATURATION_OCCURED 0x02000000 /* saturation control */
--#define EMU10K1_DBG_SATURATION_ADDR 0x01ff0000 /* saturation address */
--#define EMU10K1_DBG_SINGLE_STEP 0x00008000 /* single step mode */
--#define EMU10K1_DBG_STEP 0x00004000 /* start single step */
--#define EMU10K1_DBG_CONDITION_CODE 0x00003e00 /* condition code */
--#define EMU10K1_DBG_SINGLE_STEP_ADDR 0x000001ff /* single step address */
--
--/* tank memory address line */
--#ifndef __KERNEL__
--#define TANKMEMADDRREG_ADDR_MASK 0x000fffff /* 20 bit tank address field */
--#define TANKMEMADDRREG_CLEAR 0x00800000 /* Clear tank memory */
--#define TANKMEMADDRREG_ALIGN 0x00400000 /* Align read or write relative to tank access */
--#define TANKMEMADDRREG_WRITE 0x00200000 /* Write to tank memory */
--#define TANKMEMADDRREG_READ 0x00100000 /* Read from tank memory */
--#endif
--
--struct snd_emu10k1_fx8010_info {
-- unsigned int internal_tram_size; /* in samples */
-- unsigned int external_tram_size; /* in samples */
-- char fxbus_names[16][32]; /* names of FXBUSes */
-- char extin_names[16][32]; /* names of external inputs */
-- char extout_names[32][32]; /* names of external outputs */
-- unsigned int gpr_controls; /* count of GPR controls */
--};
--
--#define EMU10K1_GPR_TRANSLATION_NONE 0
--#define EMU10K1_GPR_TRANSLATION_TABLE100 1
--#define EMU10K1_GPR_TRANSLATION_BASS 2
--#define EMU10K1_GPR_TRANSLATION_TREBLE 3
--#define EMU10K1_GPR_TRANSLATION_ONOFF 4
--
--struct snd_emu10k1_fx8010_control_gpr {
-- struct snd_ctl_elem_id id; /* full control ID definition */
-- unsigned int vcount; /* visible count */
-- unsigned int count; /* count of GPR (1..16) */
-- unsigned short gpr[32]; /* GPR number(s) */
-- unsigned int value[32]; /* initial values */
-- unsigned int min; /* minimum range */
-- unsigned int max; /* maximum range */
-- unsigned int translation; /* translation type (EMU10K1_GPR_TRANSLATION*) */
-- const unsigned int *tlv;
--};
--
--/* old ABI without TLV support */
--struct snd_emu10k1_fx8010_control_old_gpr {
-- struct snd_ctl_elem_id id;
-- unsigned int vcount;
-- unsigned int count;
-- unsigned short gpr[32];
-- unsigned int value[32];
-- unsigned int min;
-- unsigned int max;
-- unsigned int translation;
--};
--
--struct snd_emu10k1_fx8010_code {
-- char name[128];
--
-- __EMU10K1_DECLARE_BITMAP(gpr_valid, 0x200); /* bitmask of valid initializers */
-- __u32 __user *gpr_map; /* initializers */
--
-- unsigned int gpr_add_control_count; /* count of GPR controls to add/replace */
-- struct snd_emu10k1_fx8010_control_gpr __user *gpr_add_controls; /* GPR controls to add/replace */
--
-- unsigned int gpr_del_control_count; /* count of GPR controls to remove */
-- struct snd_ctl_elem_id __user *gpr_del_controls; /* IDs of GPR controls to remove */
--
-- unsigned int gpr_list_control_count; /* count of GPR controls to list */
-- unsigned int gpr_list_control_total; /* total count of GPR controls */
-- struct snd_emu10k1_fx8010_control_gpr __user *gpr_list_controls; /* listed GPR controls */
--
-- __EMU10K1_DECLARE_BITMAP(tram_valid, 0x100); /* bitmask of valid initializers */
-- __u32 __user *tram_data_map; /* data initializers */
-- __u32 __user *tram_addr_map; /* map initializers */
--
-- __EMU10K1_DECLARE_BITMAP(code_valid, 1024); /* bitmask of valid instructions */
-- __u32 __user *code; /* one instruction - 64 bits */
--};
--
--struct snd_emu10k1_fx8010_tram {
-- unsigned int address; /* 31.bit == 1 -> external TRAM */
-- unsigned int size; /* size in samples (4 bytes) */
-- unsigned int *samples; /* pointer to samples (20-bit) */
-- /* NULL->clear memory */
--};
--
--struct snd_emu10k1_fx8010_pcm_rec {
-- unsigned int substream; /* substream number */
-- unsigned int res1; /* reserved */
-- unsigned int channels; /* 16-bit channels count, zero = remove this substream */
-- unsigned int tram_start; /* ring buffer position in TRAM (in samples) */
-- unsigned int buffer_size; /* count of buffered samples */
-- unsigned short gpr_size; /* GPR containing size of ringbuffer in samples (host) */
-- unsigned short gpr_ptr; /* GPR containing current pointer in the ring buffer (host = reset, FX8010) */
-- unsigned short gpr_count; /* GPR containing count of samples between two interrupts (host) */
-- unsigned short gpr_tmpcount; /* GPR containing current count of samples to interrupt (host = set, FX8010) */
-- unsigned short gpr_trigger; /* GPR containing trigger (activate) information (host) */
-- unsigned short gpr_running; /* GPR containing info if PCM is running (FX8010) */
-- unsigned char pad; /* reserved */
-- unsigned char etram[32]; /* external TRAM address & data (one per channel) */
-- unsigned int res2; /* reserved */
--};
--
--#define SNDRV_EMU10K1_VERSION SNDRV_PROTOCOL_VERSION(1, 0, 1)
--
--#define SNDRV_EMU10K1_IOCTL_INFO _IOR ('H', 0x10, struct snd_emu10k1_fx8010_info)
--#define SNDRV_EMU10K1_IOCTL_CODE_POKE _IOW ('H', 0x11, struct snd_emu10k1_fx8010_code)
--#define SNDRV_EMU10K1_IOCTL_CODE_PEEK _IOWR('H', 0x12, struct snd_emu10k1_fx8010_code)
--#define SNDRV_EMU10K1_IOCTL_TRAM_SETUP _IOW ('H', 0x20, int)
--#define SNDRV_EMU10K1_IOCTL_TRAM_POKE _IOW ('H', 0x21, struct snd_emu10k1_fx8010_tram)
--#define SNDRV_EMU10K1_IOCTL_TRAM_PEEK _IOWR('H', 0x22, struct snd_emu10k1_fx8010_tram)
--#define SNDRV_EMU10K1_IOCTL_PCM_POKE _IOW ('H', 0x30, struct snd_emu10k1_fx8010_pcm_rec)
--#define SNDRV_EMU10K1_IOCTL_PCM_PEEK _IOWR('H', 0x31, struct snd_emu10k1_fx8010_pcm_rec)
--#define SNDRV_EMU10K1_IOCTL_PVERSION _IOR ('H', 0x40, int)
--#define SNDRV_EMU10K1_IOCTL_STOP _IO ('H', 0x80)
--#define SNDRV_EMU10K1_IOCTL_CONTINUE _IO ('H', 0x81)
--#define SNDRV_EMU10K1_IOCTL_ZERO_TRAM_COUNTER _IO ('H', 0x82)
--#define SNDRV_EMU10K1_IOCTL_SINGLE_STEP _IOW ('H', 0x83, int)
--#define SNDRV_EMU10K1_IOCTL_DBG_READ _IOR ('H', 0x84, int)
--
--/* typedefs for compatibility to user-space */
--typedef struct snd_emu10k1_fx8010_info emu10k1_fx8010_info_t;
--typedef struct snd_emu10k1_fx8010_control_gpr emu10k1_fx8010_control_gpr_t;
--typedef struct snd_emu10k1_fx8010_code emu10k1_fx8010_code_t;
--typedef struct snd_emu10k1_fx8010_tram emu10k1_fx8010_tram_t;
--typedef struct snd_emu10k1_fx8010_pcm_rec emu10k1_fx8010_pcm_t;
--
--#endif /* _UAPI__SOUND_EMU10K1_H */
-+#include <alsa/sound/type_compat.h>
-+#include <alsa/sound/uapi/emu10k1.h>
-diff --git a/include/sound/hdsp.h b/include/sound/hdsp.h
-index 5dc0c3db..78fb745b 100644
---- a/include/sound/hdsp.h
-+++ b/include/sound/hdsp.h
-@@ -1,111 +1,2 @@
--/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
--#ifndef __SOUND_HDSP_H
--#define __SOUND_HDSP_H
--
--/*
-- * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org)
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 2 of the License, or
-- * (at your option) any later version.
-- *
-- * This program is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- * GNU General Public License for more details.
-- *
-- * You should have received a copy of the GNU General Public License
-- * along with this program; if not, write to the Free Software
-- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-- */
--
--#include <linux/types.h>
--
--#define HDSP_MATRIX_MIXER_SIZE 2048
--
--enum HDSP_IO_Type {
-- Digiface,
-- Multiface,
-- H9652,
-- H9632,
-- RPM,
-- Undefined,
--};
--
--struct hdsp_peak_rms {
-- __u32 input_peaks[26];
-- __u32 playback_peaks[26];
-- __u32 output_peaks[28];
-- __u64 input_rms[26];
-- __u64 playback_rms[26];
-- /* These are only used for H96xx cards */
-- __u64 output_rms[26];
--};
--
--#define SNDRV_HDSP_IOCTL_GET_PEAK_RMS _IOR('H', 0x40, struct hdsp_peak_rms)
--
--struct hdsp_config_info {
-- unsigned char pref_sync_ref;
-- unsigned char wordclock_sync_check;
-- unsigned char spdif_sync_check;
-- unsigned char adatsync_sync_check;
-- unsigned char adat_sync_check[3];
-- unsigned char spdif_in;
-- unsigned char spdif_out;
-- unsigned char spdif_professional;
-- unsigned char spdif_emphasis;
-- unsigned char spdif_nonaudio;
-- unsigned int spdif_sample_rate;
-- unsigned int system_sample_rate;
-- unsigned int autosync_sample_rate;
-- unsigned char system_clock_mode;
-- unsigned char clock_source;
-- unsigned char autosync_ref;
-- unsigned char line_out;
-- unsigned char passthru;
-- unsigned char da_gain;
-- unsigned char ad_gain;
-- unsigned char phone_gain;
-- unsigned char xlr_breakout_cable;
-- unsigned char analog_extension_board;
--};
--
--#define SNDRV_HDSP_IOCTL_GET_CONFIG_INFO _IOR('H', 0x41, struct hdsp_config_info)
--
--struct hdsp_firmware {
-- void __user *firmware_data; /* 24413 x 4 bytes */
--};
--
--#define SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE _IOW('H', 0x42, struct hdsp_firmware)
--
--struct hdsp_version {
-- enum HDSP_IO_Type io_type;
-- unsigned short firmware_rev;
--};
--
--#define SNDRV_HDSP_IOCTL_GET_VERSION _IOR('H', 0x43, struct hdsp_version)
--
--struct hdsp_mixer {
-- unsigned short matrix[HDSP_MATRIX_MIXER_SIZE];
--};
--
--#define SNDRV_HDSP_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdsp_mixer)
--
--struct hdsp_9632_aeb {
-- int aebi;
-- int aebo;
--};
--
--#define SNDRV_HDSP_IOCTL_GET_9632_AEB _IOR('H', 0x45, struct hdsp_9632_aeb)
--
--/* typedefs for compatibility to user-space */
--typedef enum HDSP_IO_Type HDSP_IO_Type;
--typedef struct hdsp_peak_rms hdsp_peak_rms_t;
--typedef struct hdsp_config_info hdsp_config_info_t;
--typedef struct hdsp_firmware hdsp_firmware_t;
--typedef struct hdsp_version hdsp_version_t;
--typedef struct hdsp_mixer hdsp_mixer_t;
--typedef struct hdsp_9632_aeb hdsp_9632_aeb_t;
--
--#endif /* __SOUND_HDSP_H */
-+#include <alsa/sound/type_compat.h>
-+#include <alsa/sound/uapi/hdsp.h>
-diff --git a/include/sound/hdspm.h b/include/sound/hdspm.h
-index a38f3f79..af6d19ed 100644
---- a/include/sound/hdspm.h
-+++ b/include/sound/hdspm.h
-@@ -1,232 +1,2 @@
--/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
--#ifndef __SOUND_HDSPM_H
--#define __SOUND_HDSPM_H
--/*
-- * Copyright (C) 2003 Winfried Ritsch (IEM)
-- * based on hdsp.h from Thomas Charbonnel (thomas@undata.org)
-- *
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 2 of the License, or
-- * (at your option) any later version.
-- *
-- * This program is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- * GNU General Public License for more details.
-- *
-- * You should have received a copy of the GNU General Public License
-- * along with this program; if not, write to the Free Software
-- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-- */
--
--#include <linux/types.h>
--
--/* Maximum channels is 64 even on 56Mode you have 64playbacks to matrix */
--#define HDSPM_MAX_CHANNELS 64
--
--enum hdspm_io_type {
-- MADI,
-- MADIface,
-- AIO,
-- AES32,
-- RayDAT
--};
--
--enum hdspm_speed {
-- ss,
-- ds,
-- qs
--};
--
--/* -------------------- IOCTL Peak/RMS Meters -------------------- */
--
--struct hdspm_peak_rms {
-- __u32 input_peaks[64];
-- __u32 playback_peaks[64];
-- __u32 output_peaks[64];
--
-- __u64 input_rms[64];
-- __u64 playback_rms[64];
-- __u64 output_rms[64];
--
-- __u8 speed; /* enum {ss, ds, qs} */
-- int status2;
--};
--
--#define SNDRV_HDSPM_IOCTL_GET_PEAK_RMS \
-- _IOR('H', 0x42, struct hdspm_peak_rms)
--
--/* ------------ CONFIG block IOCTL ---------------------- */
--
--struct hdspm_config {
-- unsigned char pref_sync_ref;
-- unsigned char wordclock_sync_check;
-- unsigned char madi_sync_check;
-- unsigned int system_sample_rate;
-- unsigned int autosync_sample_rate;
-- unsigned char system_clock_mode;
-- unsigned char clock_source;
-- unsigned char autosync_ref;
-- unsigned char line_out;
-- unsigned int passthru;
-- unsigned int analog_out;
--};
--
--#define SNDRV_HDSPM_IOCTL_GET_CONFIG \
-- _IOR('H', 0x41, struct hdspm_config)
--
--/*
-- * If there's a TCO (TimeCode Option) board installed,
-- * there are further options and status data available.
-- * The hdspm_ltc structure contains the current SMPTE
-- * timecode and some status information and can be
-- * obtained via SNDRV_HDSPM_IOCTL_GET_LTC or in the
-- * hdspm_status struct.
-- */
--
--enum hdspm_ltc_format {
-- format_invalid,
-- fps_24,
-- fps_25,
-- fps_2997,
-- fps_30
--};
--
--enum hdspm_ltc_frame {
-- frame_invalid,
-- drop_frame,
-- full_frame
--};
--
--enum hdspm_ltc_input_format {
-- ntsc,
-- pal,
-- no_video
--};
--
--struct hdspm_ltc {
-- unsigned int ltc;
--
-- enum hdspm_ltc_format format;
-- enum hdspm_ltc_frame frame;
-- enum hdspm_ltc_input_format input_format;
--};
--
--#define SNDRV_HDSPM_IOCTL_GET_LTC _IOR('H', 0x46, struct hdspm_ltc)
--
--/*
-- * The status data reflects the device's current state
-- * as determined by the card's configuration and
-- * connection status.
-- */
--
--enum hdspm_sync {
-- hdspm_sync_no_lock = 0,
-- hdspm_sync_lock = 1,
-- hdspm_sync_sync = 2
--};
--
--enum hdspm_madi_input {
-- hdspm_input_optical = 0,
-- hdspm_input_coax = 1
--};
--
--enum hdspm_madi_channel_format {
-- hdspm_format_ch_64 = 0,
-- hdspm_format_ch_56 = 1
--};
--
--enum hdspm_madi_frame_format {
-- hdspm_frame_48 = 0,
-- hdspm_frame_96 = 1
--};
--
--enum hdspm_syncsource {
-- syncsource_wc = 0,
-- syncsource_madi = 1,
-- syncsource_tco = 2,
-- syncsource_sync = 3,
-- syncsource_none = 4
--};
--
--struct hdspm_status {
-- __u8 card_type; /* enum hdspm_io_type */
-- enum hdspm_syncsource autosync_source;
--
-- __u64 card_clock;
-- __u32 master_period;
--
-- union {
-- struct {
-- __u8 sync_wc; /* enum hdspm_sync */
-- __u8 sync_madi; /* enum hdspm_sync */
-- __u8 sync_tco; /* enum hdspm_sync */
-- __u8 sync_in; /* enum hdspm_sync */
-- __u8 madi_input; /* enum hdspm_madi_input */
-- __u8 channel_format; /* enum hdspm_madi_channel_format */
-- __u8 frame_format; /* enum hdspm_madi_frame_format */
-- } madi;
-- } card_specific;
--};
--
--#define SNDRV_HDSPM_IOCTL_GET_STATUS \
-- _IOR('H', 0x47, struct hdspm_status)
--
--/*
-- * Get information about the card and its add-ons.
-- */
--
--#define HDSPM_ADDON_TCO 1
--
--struct hdspm_version {
-- __u8 card_type; /* enum hdspm_io_type */
-- char cardname[20];
-- unsigned int serial;
-- unsigned short firmware_rev;
-- int addons;
--};
--
--#define SNDRV_HDSPM_IOCTL_GET_VERSION _IOR('H', 0x48, struct hdspm_version)
--
--/* ------------- get Matrix Mixer IOCTL --------------- */
--
--/* MADI mixer: 64inputs+64playback in 64outputs = 8192 => *4Byte =
-- * 32768 Bytes
-- */
--
--/* organisation is 64 channelfader in a continuous memory block */
--/* equivalent to hardware definition, maybe for future feature of mmap of
-- * them
-- */
--/* each of 64 outputs has 64 infader and 64 outfader:
-- Ins to Outs mixer[out].in[in], Outstreams to Outs mixer[out].pb[pb] */
--
--#define HDSPM_MIXER_CHANNELS HDSPM_MAX_CHANNELS
--
--struct hdspm_channelfader {
-- unsigned int in[HDSPM_MIXER_CHANNELS];
-- unsigned int pb[HDSPM_MIXER_CHANNELS];
--};
--
--struct hdspm_mixer {
-- struct hdspm_channelfader ch[HDSPM_MIXER_CHANNELS];
--};
--
--struct hdspm_mixer_ioctl {
-- struct hdspm_mixer *mixer;
--};
--
--/* use indirect access due to the limit of ioctl bit size */
--#define SNDRV_HDSPM_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdspm_mixer_ioctl)
--
--/* typedefs for compatibility to user-space */
--typedef struct hdspm_peak_rms hdspm_peak_rms_t;
--typedef struct hdspm_config_info hdspm_config_info_t;
--typedef struct hdspm_version hdspm_version_t;
--typedef struct hdspm_channelfader snd_hdspm_channelfader_t;
--typedef struct hdspm_mixer hdspm_mixer_t;
--
--
--#endif
-+#include <alsa/sound/type_compat.h>
-+#include <alsa/sound/uapi/hdspm.h>
-diff --git a/include/sound/sb16_csp.h b/include/sound/sb16_csp.h
-index e6485148..24121fcb 100644
---- a/include/sound/sb16_csp.h
-+++ b/include/sound/sb16_csp.h
-@@ -1,123 +1 @@
--/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
--/*
-- * Copyright (c) 1999 by Uros Bizjak <uros@kss-loka.si>
-- * Takashi Iwai <tiwai@suse.de>
-- *
-- * SB16ASP/AWE32 CSP control
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 2 of the License, or
-- * (at your option) any later version.
-- *
-- * This program is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- * GNU General Public License for more details.
-- *
-- * You should have received a copy of the GNU General Public License
-- * along with this program; if not, write to the Free Software
-- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-- *
-- */
--#ifndef _UAPI__SOUND_SB16_CSP_H
--#define _UAPI__SOUND_SB16_CSP_H
--
--
--/* CSP modes */
--#define SNDRV_SB_CSP_MODE_NONE 0x00
--#define SNDRV_SB_CSP_MODE_DSP_READ 0x01 /* Record from DSP */
--#define SNDRV_SB_CSP_MODE_DSP_WRITE 0x02 /* Play to DSP */
--#define SNDRV_SB_CSP_MODE_QSOUND 0x04 /* QSound */
--
--/* CSP load flags */
--#define SNDRV_SB_CSP_LOAD_FROMUSER 0x01
--#define SNDRV_SB_CSP_LOAD_INITBLOCK 0x02
--
--/* CSP sample width */
--#define SNDRV_SB_CSP_SAMPLE_8BIT 0x01
--#define SNDRV_SB_CSP_SAMPLE_16BIT 0x02
--
--/* CSP channels */
--#define SNDRV_SB_CSP_MONO 0x01
--#define SNDRV_SB_CSP_STEREO 0x02
--
--/* CSP rates */
--#define SNDRV_SB_CSP_RATE_8000 0x01
--#define SNDRV_SB_CSP_RATE_11025 0x02
--#define SNDRV_SB_CSP_RATE_22050 0x04
--#define SNDRV_SB_CSP_RATE_44100 0x08
--#define SNDRV_SB_CSP_RATE_ALL 0x0f
--
--/* CSP running state */
--#define SNDRV_SB_CSP_ST_IDLE 0x00
--#define SNDRV_SB_CSP_ST_LOADED 0x01
--#define SNDRV_SB_CSP_ST_RUNNING 0x02
--#define SNDRV_SB_CSP_ST_PAUSED 0x04
--#define SNDRV_SB_CSP_ST_AUTO 0x08
--#define SNDRV_SB_CSP_ST_QSOUND 0x10
--
--/* maximum QSound value (180 degrees right) */
--#define SNDRV_SB_CSP_QSOUND_MAX_RIGHT 0x20
--
--/* maximum microcode RIFF file size */
--#define SNDRV_SB_CSP_MAX_MICROCODE_FILE_SIZE 0x3000
--
--/* microcode header */
--struct snd_sb_csp_mc_header {
-- char codec_name[16]; /* id name of codec */
-- unsigned short func_req; /* requested function */
--};
--
--/* microcode to be loaded */
--struct snd_sb_csp_microcode {
-- struct snd_sb_csp_mc_header info;
-- unsigned char data[SNDRV_SB_CSP_MAX_MICROCODE_FILE_SIZE];
--};
--
--/* start CSP with sample_width in mono/stereo */
--struct snd_sb_csp_start {
-- int sample_width; /* sample width, look above */
-- int channels; /* channels, look above */
--};
--
--/* CSP information */
--struct snd_sb_csp_info {
-- char codec_name[16]; /* id name of codec */
-- unsigned short func_nr; /* function number */
-- unsigned int acc_format; /* accepted PCM formats */
-- unsigned short acc_channels; /* accepted channels */
-- unsigned short acc_width; /* accepted sample width */
-- unsigned short acc_rates; /* accepted sample rates */
-- unsigned short csp_mode; /* CSP mode, see above */
-- unsigned short run_channels; /* current channels */
-- unsigned short run_width; /* current sample width */
-- unsigned short version; /* version id: 0x10 - 0x1f */
-- unsigned short state; /* state bits */
--};
--
--/* HWDEP controls */
--/* get CSP information */
--#define SNDRV_SB_CSP_IOCTL_INFO _IOR('H', 0x10, struct snd_sb_csp_info)
--/* load microcode to CSP */
--/* NOTE: struct snd_sb_csp_microcode overflows the max size (13 bits)
-- * defined for some architectures like MIPS, and it leads to build errors.
-- * (x86 and co have 14-bit size, thus it's valid, though.)
-- * As a workaround for skipping the size-limit check, here we don't use the
-- * normal _IOW() macro but _IOC() with the manual argument.
-- */
--#define SNDRV_SB_CSP_IOCTL_LOAD_CODE \
-- _IOC(_IOC_WRITE, 'H', 0x11, sizeof(struct snd_sb_csp_microcode))
--/* unload microcode from CSP */
--#define SNDRV_SB_CSP_IOCTL_UNLOAD_CODE _IO('H', 0x12)
--/* start CSP */
--#define SNDRV_SB_CSP_IOCTL_START _IOW('H', 0x13, struct snd_sb_csp_start)
--/* stop CSP */
--#define SNDRV_SB_CSP_IOCTL_STOP _IO('H', 0x14)
--/* pause CSP and DMA transfer */
--#define SNDRV_SB_CSP_IOCTL_PAUSE _IO('H', 0x15)
--/* restart CSP and DMA transfer */
--#define SNDRV_SB_CSP_IOCTL_RESTART _IO('H', 0x16)
--
--
--#endif /* _UAPI__SOUND_SB16_CSP_H */
-+#include <alsa/sound/uapi/sb16_csp.h>
-diff --git a/include/sound/sscape_ioctl.h b/include/sound/sscape_ioctl.h
-index c6653ebf..23b48d33 100644
---- a/include/sound/sscape_ioctl.h
-+++ b/include/sound/sscape_ioctl.h
-@@ -1,21 +1 @@
--#ifndef SSCAPE_IOCTL_H
--#define SSCAPE_IOCTL_H
--
--
--struct sscape_bootblock
--{
-- unsigned char code[256];
-- unsigned version;
--};
--
--#define SSCAPE_MICROCODE_SIZE 65536
--
--struct sscape_microcode
--{
-- unsigned char *code;
--};
--
--#define SND_SSCAPE_LOAD_BOOTB _IOWR('P', 100, struct sscape_bootblock)
--#define SND_SSCAPE_LOAD_MCODE _IOW ('P', 101, struct sscape_microcode)
--
--#endif
-+#include <alsa/sound/uapi/sscape_ioctl.h>
-diff --git a/include/sound/tlv.h b/include/sound/tlv.h
-index 7d6d65f6..e435a5fc 100644
---- a/include/sound/tlv.h
-+++ b/include/sound/tlv.h
-@@ -1,117 +1 @@
--/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
--/*
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License as published by
-- * the Free Software Foundation; either version 2 of the License, or
-- * (at your option) any later version.
-- *
-- * This program is distributed in the hope that it will be useful,
-- * but WITHOUT ANY WARRANTY; without even the implied warranty of
-- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-- * GNU General Public License for more details.
-- */
--
--#ifndef __UAPI_SOUND_TLV_H
--#define __UAPI_SOUND_TLV_H
--
--#define SNDRV_CTL_TLVT_CONTAINER 0 /* one level down - group of TLVs */
--#define SNDRV_CTL_TLVT_DB_SCALE 1 /* dB scale */
--#define SNDRV_CTL_TLVT_DB_LINEAR 2 /* linear volume */
--#define SNDRV_CTL_TLVT_DB_RANGE 3 /* dB range container */
--#define SNDRV_CTL_TLVT_DB_MINMAX 4 /* dB scale with min/max */
--#define SNDRV_CTL_TLVT_DB_MINMAX_MUTE 5 /* dB scale with min/max with mute */
--
--/*
-- * channel-mapping TLV items
-- * TLV length must match with num_channels
-- */
--#define SNDRV_CTL_TLVT_CHMAP_FIXED 0x101 /* fixed channel position */
--#define SNDRV_CTL_TLVT_CHMAP_VAR 0x102 /* channels freely swappable */
--#define SNDRV_CTL_TLVT_CHMAP_PAIRED 0x103 /* pair-wise swappable */
--
--/*
-- * TLV structure is right behind the struct snd_ctl_tlv:
-- * unsigned int type - see SNDRV_CTL_TLVT_*
-- * unsigned int length
-- * .... data aligned to sizeof(unsigned int), use
-- * block_length = (length + (sizeof(unsigned int) - 1)) &
-- * ~(sizeof(unsigned int) - 1)) ....
-- */
--#define SNDRV_CTL_TLVD_ITEM(type, ...) \
-- (type), SNDRV_CTL_TLVD_LENGTH(__VA_ARGS__), __VA_ARGS__
--#define SNDRV_CTL_TLVD_LENGTH(...) \
-- ((unsigned int)sizeof((const unsigned int[]) { __VA_ARGS__ }))
--
--/* Accessor offsets for TLV data items */
--#define SNDRV_CTL_TLVO_TYPE 0
--#define SNDRV_CTL_TLVO_LEN 1
--
--#define SNDRV_CTL_TLVD_CONTAINER_ITEM(...) \
-- SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_CONTAINER, __VA_ARGS__)
--#define SNDRV_CTL_TLVD_DECLARE_CONTAINER(name, ...) \
-- unsigned int name[] = { \
-- SNDRV_CTL_TLVD_CONTAINER_ITEM(__VA_ARGS__) \
-- }
--
--#define SNDRV_CTL_TLVD_DB_SCALE_MASK 0xffff
--#define SNDRV_CTL_TLVD_DB_SCALE_MUTE 0x10000
--#define SNDRV_CTL_TLVD_DB_SCALE_ITEM(min, step, mute) \
-- SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_SCALE, \
-- (min), \
-- ((step) & SNDRV_CTL_TLVD_DB_SCALE_MASK) | \
-- ((mute) ? SNDRV_CTL_TLVD_DB_SCALE_MUTE : 0))
--#define SNDRV_CTL_TLVD_DECLARE_DB_SCALE(name, min, step, mute) \
-- unsigned int name[] = { \
-- SNDRV_CTL_TLVD_DB_SCALE_ITEM(min, step, mute) \
-- }
--
--/* Accessor offsets for min, mute and step items in dB scale type TLV */
--#define SNDRV_CTL_TLVO_DB_SCALE_MIN 2
--#define SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP 3
--
--/* dB scale specified with min/max values instead of step */
--#define SNDRV_CTL_TLVD_DB_MINMAX_ITEM(min_dB, max_dB) \
-- SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_MINMAX, (min_dB), (max_dB))
--#define SNDRV_CTL_TLVD_DB_MINMAX_MUTE_ITEM(min_dB, max_dB) \
-- SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_MINMAX_MUTE, (min_dB), (max_dB))
--#define SNDRV_CTL_TLVD_DECLARE_DB_MINMAX(name, min_dB, max_dB) \
-- unsigned int name[] = { \
-- SNDRV_CTL_TLVD_DB_MINMAX_ITEM(min_dB, max_dB) \
-- }
--#define SNDRV_CTL_TLVD_DECLARE_DB_MINMAX_MUTE(name, min_dB, max_dB) \
-- unsigned int name[] = { \
-- SNDRV_CTL_TLVD_DB_MINMAX_MUTE_ITEM(min_dB, max_dB) \
-- }
--
--/* Accessor offsets for min, max items in db-minmax types of TLV. */
--#define SNDRV_CTL_TLVO_DB_MINMAX_MIN 2
--#define SNDRV_CTL_TLVO_DB_MINMAX_MAX 3
--
--/* linear volume between min_dB and max_dB (.01dB unit) */
--#define SNDRV_CTL_TLVD_DB_LINEAR_ITEM(min_dB, max_dB) \
-- SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_LINEAR, (min_dB), (max_dB))
--#define SNDRV_CTL_TLVD_DECLARE_DB_LINEAR(name, min_dB, max_dB) \
-- unsigned int name[] = { \
-- SNDRV_CTL_TLVD_DB_LINEAR_ITEM(min_dB, max_dB) \
-- }
--
--/* Accessor offsets for min, max items in db-linear type of TLV. */
--#define SNDRV_CTL_TLVO_DB_LINEAR_MIN 2
--#define SNDRV_CTL_TLVO_DB_LINEAR_MAX 3
--
--/* dB range container:
-- * Items in dB range container must be ordered by their values and by their
-- * dB values. This implies that larger values must correspond with larger
-- * dB values (which is also required for all other mixer controls).
-- */
--/* Each item is: <min> <max> <TLV> */
--#define SNDRV_CTL_TLVD_DB_RANGE_ITEM(...) \
-- SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_RANGE, __VA_ARGS__)
--#define SNDRV_CTL_TLVD_DECLARE_DB_RANGE(name, ...) \
-- unsigned int name[] = { \
-- SNDRV_CTL_TLVD_DB_RANGE_ITEM(__VA_ARGS__) \
-- }
--
--#define SNDRV_CTL_TLVD_DB_GAIN_MUTE -9999999
--
--#endif
-+#include <alsa/sound/uapi/tlv.h>
-diff --git a/include/sound/type_compat.h b/include/sound/type_compat.h
-index e973ff31..d4790c1f 100644
---- a/include/sound/type_compat.h
-+++ b/include/sound/type_compat.h
-@@ -3,6 +3,9 @@
-
- #ifndef DOC_HIDDEN
- #include <stdint.h>
-+#ifdef __linux__
-+#include <linux/types.h>
-+#else
- typedef uint8_t __u8;
- typedef uint16_t __u16;
- typedef uint32_t __u32;
-@@ -37,6 +40,16 @@ typedef int32_t __s32;
- #define __be32 __u32
- #define __be16 __u16
- #define __be8 __u8
-+#endif
-+
-+#ifndef __user
-+#define __user
-+#endif
-+
-+#ifndef __packed
-+#define __packed __attribute__((__packed__))
-+#endif
-+
- #endif /* DOC_HIDDEN */
-
- #endif /* __TYPE_COMPAT_H */
-diff --git a/include/sound/uapi/Makefile.am b/include/sound/uapi/Makefile.am
-new file mode 100644
-index 00000000..99197108
---- /dev/null
-+++ b/include/sound/uapi/Makefile.am
-@@ -0,0 +1,6 @@
-+alsasounduapiincludedir = ${includedir}/alsa/sound/uapi
-+
-+alsasounduapiinclude_HEADERS = asound_fm.h hdsp.h hdspm.h sb16_csp.h \
-+ sscape_ioctl.h emu10k1.h asoc.h tlv.h
-+
-+noinst_HEADERS = asound.h asequencer.h
-diff --git a/include/sound/uapi/asequencer.h b/include/sound/uapi/asequencer.h
-new file mode 100644
-index 00000000..a75e14ed
---- /dev/null
-+++ b/include/sound/uapi/asequencer.h
-@@ -0,0 +1,612 @@
-+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
-+/*
-+ * Main header file for the ALSA sequencer
-+ * Copyright (c) 1998-1999 by Frank van de Pol <fvdpol@coil.demon.nl>
-+ * (c) 1998-1999 by Jaroslav Kysela <perex@perex.cz>
-+ *
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef _UAPI__SOUND_ASEQUENCER_H
-+#define _UAPI__SOUND_ASEQUENCER_H
-+
-+#include <sound/asound.h>
-+
-+/** version of the sequencer */
-+#define SNDRV_SEQ_VERSION SNDRV_PROTOCOL_VERSION(1, 0, 2)
-+
-+/**
-+ * definition of sequencer event types
-+ */
-+
-+/** system messages
-+ * event data type = #snd_seq_result
-+ */
-+#define SNDRV_SEQ_EVENT_SYSTEM 0
-+#define SNDRV_SEQ_EVENT_RESULT 1
-+
-+/** note messages (channel specific)
-+ * event data type = #snd_seq_ev_note
-+ */
-+#define SNDRV_SEQ_EVENT_NOTE 5
-+#define SNDRV_SEQ_EVENT_NOTEON 6
-+#define SNDRV_SEQ_EVENT_NOTEOFF 7
-+#define SNDRV_SEQ_EVENT_KEYPRESS 8
-+
-+/** control messages (channel specific)
-+ * event data type = #snd_seq_ev_ctrl
-+ */
-+#define SNDRV_SEQ_EVENT_CONTROLLER 10
-+#define SNDRV_SEQ_EVENT_PGMCHANGE 11
-+#define SNDRV_SEQ_EVENT_CHANPRESS 12
-+#define SNDRV_SEQ_EVENT_PITCHBEND 13 /**< from -8192 to 8191 */
-+#define SNDRV_SEQ_EVENT_CONTROL14 14 /**< 14 bit controller value */
-+#define SNDRV_SEQ_EVENT_NONREGPARAM 15 /**< 14 bit NRPN address + 14 bit unsigned value */
-+#define SNDRV_SEQ_EVENT_REGPARAM 16 /**< 14 bit RPN address + 14 bit unsigned value */
-+
-+/** synchronisation messages
-+ * event data type = #snd_seq_ev_ctrl
-+ */
-+#define SNDRV_SEQ_EVENT_SONGPOS 20 /* Song Position Pointer with LSB and MSB values */
-+#define SNDRV_SEQ_EVENT_SONGSEL 21 /* Song Select with song ID number */
-+#define SNDRV_SEQ_EVENT_QFRAME 22 /* midi time code quarter frame */
-+#define SNDRV_SEQ_EVENT_TIMESIGN 23 /* SMF Time Signature event */
-+#define SNDRV_SEQ_EVENT_KEYSIGN 24 /* SMF Key Signature event */
-+
-+/** timer messages
-+ * event data type = snd_seq_ev_queue_control
-+ */
-+#define SNDRV_SEQ_EVENT_START 30 /* midi Real Time Start message */
-+#define SNDRV_SEQ_EVENT_CONTINUE 31 /* midi Real Time Continue message */
-+#define SNDRV_SEQ_EVENT_STOP 32 /* midi Real Time Stop message */
-+#define SNDRV_SEQ_EVENT_SETPOS_TICK 33 /* set tick queue position */
-+#define SNDRV_SEQ_EVENT_SETPOS_TIME 34 /* set realtime queue position */
-+#define SNDRV_SEQ_EVENT_TEMPO 35 /* (SMF) Tempo event */
-+#define SNDRV_SEQ_EVENT_CLOCK 36 /* midi Real Time Clock message */
-+#define SNDRV_SEQ_EVENT_TICK 37 /* midi Real Time Tick message */
-+#define SNDRV_SEQ_EVENT_QUEUE_SKEW 38 /* skew queue tempo */
-+
-+/** others
-+ * event data type = none
-+ */
-+#define SNDRV_SEQ_EVENT_TUNE_REQUEST 40 /* tune request */
-+#define SNDRV_SEQ_EVENT_RESET 41 /* reset to power-on state */
-+#define SNDRV_SEQ_EVENT_SENSING 42 /* "active sensing" event */
-+
-+/** echo back, kernel private messages
-+ * event data type = any type
-+ */
-+#define SNDRV_SEQ_EVENT_ECHO 50 /* echo event */
-+#define SNDRV_SEQ_EVENT_OSS 51 /* OSS raw event */
-+
-+/** system status messages (broadcast for subscribers)
-+ * event data type = snd_seq_addr
-+ */
-+#define SNDRV_SEQ_EVENT_CLIENT_START 60 /* new client has connected */
-+#define SNDRV_SEQ_EVENT_CLIENT_EXIT 61 /* client has left the system */
-+#define SNDRV_SEQ_EVENT_CLIENT_CHANGE 62 /* client status/info has changed */
-+#define SNDRV_SEQ_EVENT_PORT_START 63 /* new port was created */
-+#define SNDRV_SEQ_EVENT_PORT_EXIT 64 /* port was deleted from system */
-+#define SNDRV_SEQ_EVENT_PORT_CHANGE 65 /* port status/info has changed */
-+
-+/** port connection changes
-+ * event data type = snd_seq_connect
-+ */
-+#define SNDRV_SEQ_EVENT_PORT_SUBSCRIBED 66 /* ports connected */
-+#define SNDRV_SEQ_EVENT_PORT_UNSUBSCRIBED 67 /* ports disconnected */
-+
-+/* 70-89: synthesizer events - obsoleted */
-+
-+/** user-defined events with fixed length
-+ * event data type = any
-+ */
-+#define SNDRV_SEQ_EVENT_USR0 90
-+#define SNDRV_SEQ_EVENT_USR1 91
-+#define SNDRV_SEQ_EVENT_USR2 92
-+#define SNDRV_SEQ_EVENT_USR3 93
-+#define SNDRV_SEQ_EVENT_USR4 94
-+#define SNDRV_SEQ_EVENT_USR5 95
-+#define SNDRV_SEQ_EVENT_USR6 96
-+#define SNDRV_SEQ_EVENT_USR7 97
-+#define SNDRV_SEQ_EVENT_USR8 98
-+#define SNDRV_SEQ_EVENT_USR9 99
-+
-+/* 100-118: instrument layer - obsoleted */
-+/* 119-129: reserved */
-+
-+/* 130-139: variable length events
-+ * event data type = snd_seq_ev_ext
-+ * (SNDRV_SEQ_EVENT_LENGTH_VARIABLE must be set)
-+ */
-+#define SNDRV_SEQ_EVENT_SYSEX 130 /* system exclusive data (variable length) */
-+#define SNDRV_SEQ_EVENT_BOUNCE 131 /* error event */
-+/* 132-134: reserved */
-+#define SNDRV_SEQ_EVENT_USR_VAR0 135
-+#define SNDRV_SEQ_EVENT_USR_VAR1 136
-+#define SNDRV_SEQ_EVENT_USR_VAR2 137
-+#define SNDRV_SEQ_EVENT_USR_VAR3 138
-+#define SNDRV_SEQ_EVENT_USR_VAR4 139
-+
-+/* 150-151: kernel events with quote - DO NOT use in user clients */
-+#define SNDRV_SEQ_EVENT_KERNEL_ERROR 150
-+#define SNDRV_SEQ_EVENT_KERNEL_QUOTE 151 /* obsolete */
-+
-+/* 152-191: reserved */
-+
-+/* 192-254: hardware specific events */
-+
-+/* 255: special event */
-+#define SNDRV_SEQ_EVENT_NONE 255
-+
-+
-+typedef unsigned char snd_seq_event_type_t;
-+
-+/** event address */
-+struct snd_seq_addr {
-+ unsigned char client; /**< Client number: 0..255, 255 = broadcast to all clients */
-+ unsigned char port; /**< Port within client: 0..255, 255 = broadcast to all ports */
-+};
-+
-+/** port connection */
-+struct snd_seq_connect {
-+ struct snd_seq_addr sender;
-+ struct snd_seq_addr dest;
-+};
-+
-+
-+#define SNDRV_SEQ_ADDRESS_UNKNOWN 253 /* unknown source */
-+#define SNDRV_SEQ_ADDRESS_SUBSCRIBERS 254 /* send event to all subscribed ports */
-+#define SNDRV_SEQ_ADDRESS_BROADCAST 255 /* send event to all queues/clients/ports/channels */
-+#define SNDRV_SEQ_QUEUE_DIRECT 253 /* direct dispatch */
-+
-+ /* event mode flag - NOTE: only 8 bits available! */
-+#define SNDRV_SEQ_TIME_STAMP_TICK (0<<0) /* timestamp in clock ticks */
-+#define SNDRV_SEQ_TIME_STAMP_REAL (1<<0) /* timestamp in real time */
-+#define SNDRV_SEQ_TIME_STAMP_MASK (1<<0)
-+
-+#define SNDRV_SEQ_TIME_MODE_ABS (0<<1) /* absolute timestamp */
-+#define SNDRV_SEQ_TIME_MODE_REL (1<<1) /* relative to current time */
-+#define SNDRV_SEQ_TIME_MODE_MASK (1<<1)
-+
-+#define SNDRV_SEQ_EVENT_LENGTH_FIXED (0<<2) /* fixed event size */
-+#define SNDRV_SEQ_EVENT_LENGTH_VARIABLE (1<<2) /* variable event size */
-+#define SNDRV_SEQ_EVENT_LENGTH_VARUSR (2<<2) /* variable event size - user memory space */
-+#define SNDRV_SEQ_EVENT_LENGTH_MASK (3<<2)
-+
-+#define SNDRV_SEQ_PRIORITY_NORMAL (0<<4) /* normal priority */
-+#define SNDRV_SEQ_PRIORITY_HIGH (1<<4) /* event should be processed before others */
-+#define SNDRV_SEQ_PRIORITY_MASK (1<<4)
-+
-+
-+ /* note event */
-+struct snd_seq_ev_note {
-+ unsigned char channel;
-+ unsigned char note;
-+ unsigned char velocity;
-+ unsigned char off_velocity; /* only for SNDRV_SEQ_EVENT_NOTE */
-+ unsigned int duration; /* only for SNDRV_SEQ_EVENT_NOTE */
-+};
-+
-+ /* controller event */
-+struct snd_seq_ev_ctrl {
-+ unsigned char channel;
-+ unsigned char unused1, unused2, unused3; /* pad */
-+ unsigned int param;
-+ signed int value;
-+};
-+
-+ /* generic set of bytes (12x8 bit) */
-+struct snd_seq_ev_raw8 {
-+ unsigned char d[12]; /* 8 bit value */
-+};
-+
-+ /* generic set of integers (3x32 bit) */
-+struct snd_seq_ev_raw32 {
-+ unsigned int d[3]; /* 32 bit value */
-+};
-+
-+ /* external stored data */
-+struct snd_seq_ev_ext {
-+ unsigned int len; /* length of data */
-+ void *ptr; /* pointer to data (note: maybe 64-bit) */
-+} __attribute__((packed));
-+
-+struct snd_seq_result {
-+ int event; /* processed event type */
-+ int result;
-+};
-+
-+
-+struct snd_seq_real_time {
-+ unsigned int tv_sec; /* seconds */
-+ unsigned int tv_nsec; /* nanoseconds */
-+};
-+
-+typedef unsigned int snd_seq_tick_time_t; /* midi ticks */
-+
-+union snd_seq_timestamp {
-+ snd_seq_tick_time_t tick;
-+ struct snd_seq_real_time time;
-+};
-+
-+struct snd_seq_queue_skew {
-+ unsigned int value;
-+ unsigned int base;
-+};
-+
-+ /* queue timer control */
-+struct snd_seq_ev_queue_control {
-+ unsigned char queue; /* affected queue */
-+ unsigned char pad[3]; /* reserved */
-+ union {
-+ signed int value; /* affected value (e.g. tempo) */
-+ union snd_seq_timestamp time; /* time */
-+ unsigned int position; /* sync position */
-+ struct snd_seq_queue_skew skew;
-+ unsigned int d32[2];
-+ unsigned char d8[8];
-+ } param;
-+};
-+
-+ /* quoted event - inside the kernel only */
-+struct snd_seq_ev_quote {
-+ struct snd_seq_addr origin; /* original sender */
-+ unsigned short value; /* optional data */
-+ struct snd_seq_event *event; /* quoted event */
-+} __attribute__((packed));
-+
-+
-+ /* sequencer event */
-+struct snd_seq_event {
-+ snd_seq_event_type_t type; /* event type */
-+ unsigned char flags; /* event flags */
-+ char tag;
-+
-+ unsigned char queue; /* schedule queue */
-+ union snd_seq_timestamp time; /* schedule time */
-+
-+
-+ struct snd_seq_addr source; /* source address */
-+ struct snd_seq_addr dest; /* destination address */
-+
-+ union { /* event data... */
-+ struct snd_seq_ev_note note;
-+ struct snd_seq_ev_ctrl control;
-+ struct snd_seq_ev_raw8 raw8;
-+ struct snd_seq_ev_raw32 raw32;
-+ struct snd_seq_ev_ext ext;
-+ struct snd_seq_ev_queue_control queue;
-+ union snd_seq_timestamp time;
-+ struct snd_seq_addr addr;
-+ struct snd_seq_connect connect;
-+ struct snd_seq_result result;
-+ struct snd_seq_ev_quote quote;
-+ } data;
-+};
-+
-+
-+/*
-+ * bounce event - stored as variable size data
-+ */
-+struct snd_seq_event_bounce {
-+ int err;
-+ struct snd_seq_event event;
-+ /* external data follows here. */
-+};
-+
-+
-+ /* system information */
-+struct snd_seq_system_info {
-+ int queues; /* maximum queues count */
-+ int clients; /* maximum clients count */
-+ int ports; /* maximum ports per client */
-+ int channels; /* maximum channels per port */
-+ int cur_clients; /* current clients */
-+ int cur_queues; /* current queues */
-+ char reserved[24];
-+};
-+
-+
-+ /* system running information */
-+struct snd_seq_running_info {
-+ unsigned char client; /* client id */
-+ unsigned char big_endian; /* 1 = big-endian */
-+ unsigned char cpu_mode; /* 4 = 32bit, 8 = 64bit */
-+ unsigned char pad; /* reserved */
-+ unsigned char reserved[12];
-+};
-+
-+
-+ /* known client numbers */
-+#define SNDRV_SEQ_CLIENT_SYSTEM 0
-+ /* internal client numbers */
-+#define SNDRV_SEQ_CLIENT_DUMMY 14 /* midi through */
-+#define SNDRV_SEQ_CLIENT_OSS 15 /* oss sequencer emulator */
-+
-+
-+ /* client types */
-+typedef int __bitwise snd_seq_client_type_t;
-+#define NO_CLIENT ((__force snd_seq_client_type_t) 0)
-+#define USER_CLIENT ((__force snd_seq_client_type_t) 1)
-+#define KERNEL_CLIENT ((__force snd_seq_client_type_t) 2)
-+
-+ /* event filter flags */
-+#define SNDRV_SEQ_FILTER_BROADCAST (1<<0) /* accept broadcast messages */
-+#define SNDRV_SEQ_FILTER_MULTICAST (1<<1) /* accept multicast messages */
-+#define SNDRV_SEQ_FILTER_BOUNCE (1<<2) /* accept bounce event in error */
-+#define SNDRV_SEQ_FILTER_USE_EVENT (1<<31) /* use event filter */
-+
-+struct snd_seq_client_info {
-+ int client; /* client number to inquire */
-+ snd_seq_client_type_t type; /* client type */
-+ char name[64]; /* client name */
-+ unsigned int filter; /* filter flags */
-+ unsigned char multicast_filter[8]; /* multicast filter bitmap */
-+ unsigned char event_filter[32]; /* event filter bitmap */
-+ int num_ports; /* RO: number of ports */
-+ int event_lost; /* number of lost events */
-+ int card; /* RO: card number[kernel] */
-+ int pid; /* RO: pid[user] */
-+ char reserved[56]; /* for future use */
-+};
-+
-+
-+/* client pool size */
-+struct snd_seq_client_pool {
-+ int client; /* client number to inquire */
-+ int output_pool; /* outgoing (write) pool size */
-+ int input_pool; /* incoming (read) pool size */
-+ int output_room; /* minimum free pool size for select/blocking mode */
-+ int output_free; /* unused size */
-+ int input_free; /* unused size */
-+ char reserved[64];
-+};
-+
-+
-+/* Remove events by specified criteria */
-+
-+#define SNDRV_SEQ_REMOVE_INPUT (1<<0) /* Flush input queues */
-+#define SNDRV_SEQ_REMOVE_OUTPUT (1<<1) /* Flush output queues */
-+#define SNDRV_SEQ_REMOVE_DEST (1<<2) /* Restrict by destination q:client:port */
-+#define SNDRV_SEQ_REMOVE_DEST_CHANNEL (1<<3) /* Restrict by channel */
-+#define SNDRV_SEQ_REMOVE_TIME_BEFORE (1<<4) /* Restrict to before time */
-+#define SNDRV_SEQ_REMOVE_TIME_AFTER (1<<5) /* Restrict to time or after */
-+#define SNDRV_SEQ_REMOVE_TIME_TICK (1<<6) /* Time is in ticks */
-+#define SNDRV_SEQ_REMOVE_EVENT_TYPE (1<<7) /* Restrict to event type */
-+#define SNDRV_SEQ_REMOVE_IGNORE_OFF (1<<8) /* Do not flush off events */
-+#define SNDRV_SEQ_REMOVE_TAG_MATCH (1<<9) /* Restrict to events with given tag */
-+
-+struct snd_seq_remove_events {
-+ unsigned int remove_mode; /* Flags that determine what gets removed */
-+
-+ union snd_seq_timestamp time;
-+
-+ unsigned char queue; /* Queue for REMOVE_DEST */
-+ struct snd_seq_addr dest; /* Address for REMOVE_DEST */
-+ unsigned char channel; /* Channel for REMOVE_DEST */
-+
-+ int type; /* For REMOVE_EVENT_TYPE */
-+ char tag; /* Tag for REMOVE_TAG */
-+
-+ int reserved[10]; /* To allow for future binary compatibility */
-+
-+};
-+
-+
-+ /* known port numbers */
-+#define SNDRV_SEQ_PORT_SYSTEM_TIMER 0
-+#define SNDRV_SEQ_PORT_SYSTEM_ANNOUNCE 1
-+
-+ /* port capabilities (32 bits) */
-+#define SNDRV_SEQ_PORT_CAP_READ (1<<0) /* readable from this port */
-+#define SNDRV_SEQ_PORT_CAP_WRITE (1<<1) /* writable to this port */
-+
-+#define SNDRV_SEQ_PORT_CAP_SYNC_READ (1<<2)
-+#define SNDRV_SEQ_PORT_CAP_SYNC_WRITE (1<<3)
-+
-+#define SNDRV_SEQ_PORT_CAP_DUPLEX (1<<4)
-+
-+#define SNDRV_SEQ_PORT_CAP_SUBS_READ (1<<5) /* allow read subscription */
-+#define SNDRV_SEQ_PORT_CAP_SUBS_WRITE (1<<6) /* allow write subscription */
-+#define SNDRV_SEQ_PORT_CAP_NO_EXPORT (1<<7) /* routing not allowed */
-+
-+ /* port type */
-+#define SNDRV_SEQ_PORT_TYPE_SPECIFIC (1<<0) /* hardware specific */
-+#define SNDRV_SEQ_PORT_TYPE_MIDI_GENERIC (1<<1) /* generic MIDI device */
-+#define SNDRV_SEQ_PORT_TYPE_MIDI_GM (1<<2) /* General MIDI compatible device */
-+#define SNDRV_SEQ_PORT_TYPE_MIDI_GS (1<<3) /* GS compatible device */
-+#define SNDRV_SEQ_PORT_TYPE_MIDI_XG (1<<4) /* XG compatible device */
-+#define SNDRV_SEQ_PORT_TYPE_MIDI_MT32 (1<<5) /* MT-32 compatible device */
-+#define SNDRV_SEQ_PORT_TYPE_MIDI_GM2 (1<<6) /* General MIDI 2 compatible device */
-+
-+/* other standards...*/
-+#define SNDRV_SEQ_PORT_TYPE_SYNTH (1<<10) /* Synth device (no MIDI compatible - direct wavetable) */
-+#define SNDRV_SEQ_PORT_TYPE_DIRECT_SAMPLE (1<<11) /* Sampling device (support sample download) */
-+#define SNDRV_SEQ_PORT_TYPE_SAMPLE (1<<12) /* Sampling device (sample can be downloaded at any time) */
-+/*...*/
-+#define SNDRV_SEQ_PORT_TYPE_HARDWARE (1<<16) /* driver for a hardware device */
-+#define SNDRV_SEQ_PORT_TYPE_SOFTWARE (1<<17) /* implemented in software */
-+#define SNDRV_SEQ_PORT_TYPE_SYNTHESIZER (1<<18) /* generates sound */
-+#define SNDRV_SEQ_PORT_TYPE_PORT (1<<19) /* connects to other device(s) */
-+#define SNDRV_SEQ_PORT_TYPE_APPLICATION (1<<20) /* application (sequencer/editor) */
-+
-+/* misc. conditioning flags */
-+#define SNDRV_SEQ_PORT_FLG_GIVEN_PORT (1<<0)
-+#define SNDRV_SEQ_PORT_FLG_TIMESTAMP (1<<1)
-+#define SNDRV_SEQ_PORT_FLG_TIME_REAL (1<<2)
-+
-+struct snd_seq_port_info {
-+ struct snd_seq_addr addr; /* client/port numbers */
-+ char name[64]; /* port name */
-+
-+ unsigned int capability; /* port capability bits */
-+ unsigned int type; /* port type bits */
-+ int midi_channels; /* channels per MIDI port */
-+ int midi_voices; /* voices per MIDI port */
-+ int synth_voices; /* voices per SYNTH port */
-+
-+ int read_use; /* R/O: subscribers for output (from this port) */
-+ int write_use; /* R/O: subscribers for input (to this port) */
-+
-+ void *kernel; /* reserved for kernel use (must be NULL) */
-+ unsigned int flags; /* misc. conditioning */
-+ unsigned char time_queue; /* queue # for timestamping */
-+ char reserved[59]; /* for future use */
-+};
-+
-+
-+/* queue flags */
-+#define SNDRV_SEQ_QUEUE_FLG_SYNC (1<<0) /* sync enabled */
-+
-+/* queue information */
-+struct snd_seq_queue_info {
-+ int queue; /* queue id */
-+
-+ /*
-+ * security settings, only owner of this queue can start/stop timer
-+ * etc. if the queue is locked for other clients
-+ */
-+ int owner; /* client id for owner of the queue */
-+ unsigned locked:1; /* timing queue locked for other queues */
-+ char name[64]; /* name of this queue */
-+ unsigned int flags; /* flags */
-+ char reserved[60]; /* for future use */
-+
-+};
-+
-+/* queue info/status */
-+struct snd_seq_queue_status {
-+ int queue; /* queue id */
-+ int events; /* read-only - queue size */
-+ snd_seq_tick_time_t tick; /* current tick */
-+ struct snd_seq_real_time time; /* current time */
-+ int running; /* running state of queue */
-+ int flags; /* various flags */
-+ char reserved[64]; /* for the future */
-+};
-+
-+
-+/* queue tempo */
-+struct snd_seq_queue_tempo {
-+ int queue; /* sequencer queue */
-+ unsigned int tempo; /* current tempo, us/tick */
-+ int ppq; /* time resolution, ticks/quarter */
-+ unsigned int skew_value; /* queue skew */
-+ unsigned int skew_base; /* queue skew base */
-+ char reserved[24]; /* for the future */
-+};
-+
-+
-+/* sequencer timer sources */
-+#define SNDRV_SEQ_TIMER_ALSA 0 /* ALSA timer */
-+#define SNDRV_SEQ_TIMER_MIDI_CLOCK 1 /* Midi Clock (CLOCK event) */
-+#define SNDRV_SEQ_TIMER_MIDI_TICK 2 /* Midi Timer Tick (TICK event) */
-+
-+/* queue timer info */
-+struct snd_seq_queue_timer {
-+ int queue; /* sequencer queue */
-+ int type; /* source timer type */
-+ union {
-+ struct {
-+ struct snd_timer_id id; /* ALSA's timer ID */
-+ unsigned int resolution; /* resolution in Hz */
-+ } alsa;
-+ } u;
-+ char reserved[64]; /* for the future use */
-+};
-+
-+
-+struct snd_seq_queue_client {
-+ int queue; /* sequencer queue */
-+ int client; /* sequencer client */
-+ int used; /* queue is used with this client
-+ (must be set for accepting events) */
-+ /* per client watermarks */
-+ char reserved[64]; /* for future use */
-+};
-+
-+
-+#define SNDRV_SEQ_PORT_SUBS_EXCLUSIVE (1<<0) /* exclusive connection */
-+#define SNDRV_SEQ_PORT_SUBS_TIMESTAMP (1<<1)
-+#define SNDRV_SEQ_PORT_SUBS_TIME_REAL (1<<2)
-+
-+struct snd_seq_port_subscribe {
-+ struct snd_seq_addr sender; /* sender address */
-+ struct snd_seq_addr dest; /* destination address */
-+ unsigned int voices; /* number of voices to be allocated (0 = don't care) */
-+ unsigned int flags; /* modes */
-+ unsigned char queue; /* input time-stamp queue (optional) */
-+ unsigned char pad[3]; /* reserved */
-+ char reserved[64];
-+};
-+
-+/* type of query subscription */
-+#define SNDRV_SEQ_QUERY_SUBS_READ 0
-+#define SNDRV_SEQ_QUERY_SUBS_WRITE 1
-+
-+struct snd_seq_query_subs {
-+ struct snd_seq_addr root; /* client/port id to be searched */
-+ int type; /* READ or WRITE */
-+ int index; /* 0..N-1 */
-+ int num_subs; /* R/O: number of subscriptions on this port */
-+ struct snd_seq_addr addr; /* R/O: result */
-+ unsigned char queue; /* R/O: result */
-+ unsigned int flags; /* R/O: result */
-+ char reserved[64]; /* for future use */
-+};
-+
-+
-+/*
-+ * IOCTL commands
-+ */
-+
-+#define SNDRV_SEQ_IOCTL_PVERSION _IOR ('S', 0x00, int)
-+#define SNDRV_SEQ_IOCTL_CLIENT_ID _IOR ('S', 0x01, int)
-+#define SNDRV_SEQ_IOCTL_SYSTEM_INFO _IOWR('S', 0x02, struct snd_seq_system_info)
-+#define SNDRV_SEQ_IOCTL_RUNNING_MODE _IOWR('S', 0x03, struct snd_seq_running_info)
-+
-+#define SNDRV_SEQ_IOCTL_GET_CLIENT_INFO _IOWR('S', 0x10, struct snd_seq_client_info)
-+#define SNDRV_SEQ_IOCTL_SET_CLIENT_INFO _IOW ('S', 0x11, struct snd_seq_client_info)
-+
-+#define SNDRV_SEQ_IOCTL_CREATE_PORT _IOWR('S', 0x20, struct snd_seq_port_info)
-+#define SNDRV_SEQ_IOCTL_DELETE_PORT _IOW ('S', 0x21, struct snd_seq_port_info)
-+#define SNDRV_SEQ_IOCTL_GET_PORT_INFO _IOWR('S', 0x22, struct snd_seq_port_info)
-+#define SNDRV_SEQ_IOCTL_SET_PORT_INFO _IOW ('S', 0x23, struct snd_seq_port_info)
-+
-+#define SNDRV_SEQ_IOCTL_SUBSCRIBE_PORT _IOW ('S', 0x30, struct snd_seq_port_subscribe)
-+#define SNDRV_SEQ_IOCTL_UNSUBSCRIBE_PORT _IOW ('S', 0x31, struct snd_seq_port_subscribe)
-+
-+#define SNDRV_SEQ_IOCTL_CREATE_QUEUE _IOWR('S', 0x32, struct snd_seq_queue_info)
-+#define SNDRV_SEQ_IOCTL_DELETE_QUEUE _IOW ('S', 0x33, struct snd_seq_queue_info)
-+#define SNDRV_SEQ_IOCTL_GET_QUEUE_INFO _IOWR('S', 0x34, struct snd_seq_queue_info)
-+#define SNDRV_SEQ_IOCTL_SET_QUEUE_INFO _IOWR('S', 0x35, struct snd_seq_queue_info)
-+#define SNDRV_SEQ_IOCTL_GET_NAMED_QUEUE _IOWR('S', 0x36, struct snd_seq_queue_info)
-+#define SNDRV_SEQ_IOCTL_GET_QUEUE_STATUS _IOWR('S', 0x40, struct snd_seq_queue_status)
-+#define SNDRV_SEQ_IOCTL_GET_QUEUE_TEMPO _IOWR('S', 0x41, struct snd_seq_queue_tempo)
-+#define SNDRV_SEQ_IOCTL_SET_QUEUE_TEMPO _IOW ('S', 0x42, struct snd_seq_queue_tempo)
-+#define SNDRV_SEQ_IOCTL_GET_QUEUE_TIMER _IOWR('S', 0x45, struct snd_seq_queue_timer)
-+#define SNDRV_SEQ_IOCTL_SET_QUEUE_TIMER _IOW ('S', 0x46, struct snd_seq_queue_timer)
-+#define SNDRV_SEQ_IOCTL_GET_QUEUE_CLIENT _IOWR('S', 0x49, struct snd_seq_queue_client)
-+#define SNDRV_SEQ_IOCTL_SET_QUEUE_CLIENT _IOW ('S', 0x4a, struct snd_seq_queue_client)
-+#define SNDRV_SEQ_IOCTL_GET_CLIENT_POOL _IOWR('S', 0x4b, struct snd_seq_client_pool)
-+#define SNDRV_SEQ_IOCTL_SET_CLIENT_POOL _IOW ('S', 0x4c, struct snd_seq_client_pool)
-+#define SNDRV_SEQ_IOCTL_REMOVE_EVENTS _IOW ('S', 0x4e, struct snd_seq_remove_events)
-+#define SNDRV_SEQ_IOCTL_QUERY_SUBS _IOWR('S', 0x4f, struct snd_seq_query_subs)
-+#define SNDRV_SEQ_IOCTL_GET_SUBSCRIPTION _IOWR('S', 0x50, struct snd_seq_port_subscribe)
-+#define SNDRV_SEQ_IOCTL_QUERY_NEXT_CLIENT _IOWR('S', 0x51, struct snd_seq_client_info)
-+#define SNDRV_SEQ_IOCTL_QUERY_NEXT_PORT _IOWR('S', 0x52, struct snd_seq_port_info)
-+
-+#endif /* _UAPI__SOUND_ASEQUENCER_H */
-diff --git a/include/sound/uapi/asoc.h b/include/sound/uapi/asoc.h
-new file mode 100644
-index 00000000..a74ca232
---- /dev/null
-+++ b/include/sound/uapi/asoc.h
-@@ -0,0 +1,633 @@
-+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-+/*
-+ * uapi/sound/asoc.h -- ALSA SoC Firmware Controls and DAPM
-+ *
-+ * Copyright (C) 2012 Texas Instruments Inc.
-+ * Copyright (C) 2015 Intel Corporation.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Simple file API to load FW that includes mixers, coefficients, DAPM graphs,
-+ * algorithms, equalisers, DAIs, widgets etc.
-+*/
-+
-+#ifndef __LINUX_UAPI_SND_ASOC_H
-+#define __LINUX_UAPI_SND_ASOC_H
-+
-+#include <linux/types.h>
-+#include <sound/asound.h>
-+
-+/*
-+ * Maximum number of channels topology kcontrol can represent.
-+ */
-+#define SND_SOC_TPLG_MAX_CHAN 8
-+
-+/*
-+ * Maximum number of PCM formats capability
-+ */
-+#define SND_SOC_TPLG_MAX_FORMATS 16
-+
-+/*
-+ * Maximum number of PCM stream configs
-+ */
-+#define SND_SOC_TPLG_STREAM_CONFIG_MAX 8
-+
-+/*
-+ * Maximum number of physical link's hardware configs
-+ */
-+#define SND_SOC_TPLG_HW_CONFIG_MAX 8
-+
-+/* individual kcontrol info types - can be mixed with other types */
-+#define SND_SOC_TPLG_CTL_VOLSW 1
-+#define SND_SOC_TPLG_CTL_VOLSW_SX 2
-+#define SND_SOC_TPLG_CTL_VOLSW_XR_SX 3
-+#define SND_SOC_TPLG_CTL_ENUM 4
-+#define SND_SOC_TPLG_CTL_BYTES 5
-+#define SND_SOC_TPLG_CTL_ENUM_VALUE 6
-+#define SND_SOC_TPLG_CTL_RANGE 7
-+#define SND_SOC_TPLG_CTL_STROBE 8
-+
-+
-+/* individual widget kcontrol info types - can be mixed with other types */
-+#define SND_SOC_TPLG_DAPM_CTL_VOLSW 64
-+#define SND_SOC_TPLG_DAPM_CTL_ENUM_DOUBLE 65
-+#define SND_SOC_TPLG_DAPM_CTL_ENUM_VIRT 66
-+#define SND_SOC_TPLG_DAPM_CTL_ENUM_VALUE 67
-+#define SND_SOC_TPLG_DAPM_CTL_PIN 68
-+
-+/* DAPM widget types - add new items to the end */
-+#define SND_SOC_TPLG_DAPM_INPUT 0
-+#define SND_SOC_TPLG_DAPM_OUTPUT 1
-+#define SND_SOC_TPLG_DAPM_MUX 2
-+#define SND_SOC_TPLG_DAPM_MIXER 3
-+#define SND_SOC_TPLG_DAPM_PGA 4
-+#define SND_SOC_TPLG_DAPM_OUT_DRV 5
-+#define SND_SOC_TPLG_DAPM_ADC 6
-+#define SND_SOC_TPLG_DAPM_DAC 7
-+#define SND_SOC_TPLG_DAPM_SWITCH 8
-+#define SND_SOC_TPLG_DAPM_PRE 9
-+#define SND_SOC_TPLG_DAPM_POST 10
-+#define SND_SOC_TPLG_DAPM_AIF_IN 11
-+#define SND_SOC_TPLG_DAPM_AIF_OUT 12
-+#define SND_SOC_TPLG_DAPM_DAI_IN 13
-+#define SND_SOC_TPLG_DAPM_DAI_OUT 14
-+#define SND_SOC_TPLG_DAPM_DAI_LINK 15
-+#define SND_SOC_TPLG_DAPM_BUFFER 16
-+#define SND_SOC_TPLG_DAPM_SCHEDULER 17
-+#define SND_SOC_TPLG_DAPM_EFFECT 18
-+#define SND_SOC_TPLG_DAPM_SIGGEN 19
-+#define SND_SOC_TPLG_DAPM_SRC 20
-+#define SND_SOC_TPLG_DAPM_ASRC 21
-+#define SND_SOC_TPLG_DAPM_ENCODER 22
-+#define SND_SOC_TPLG_DAPM_DECODER 23
-+#define SND_SOC_TPLG_DAPM_LAST SND_SOC_TPLG_DAPM_DECODER
-+
-+/* Header magic number and string sizes */
-+#define SND_SOC_TPLG_MAGIC 0x41536F43 /* ASoC */
-+
-+/* string sizes */
-+#define SND_SOC_TPLG_NUM_TEXTS 16
-+
-+/* ABI version */
-+#define SND_SOC_TPLG_ABI_VERSION 0x5 /* current version */
-+#define SND_SOC_TPLG_ABI_VERSION_MIN 0x4 /* oldest version supported */
-+
-+/* Max size of TLV data */
-+#define SND_SOC_TPLG_TLV_SIZE 32
-+
-+/*
-+ * File and Block header data types.
-+ * Add new generic and vendor types to end of list.
-+ * Generic types are handled by the core whilst vendors types are passed
-+ * to the component drivers for handling.
-+ */
-+#define SND_SOC_TPLG_TYPE_MIXER 1
-+#define SND_SOC_TPLG_TYPE_BYTES 2
-+#define SND_SOC_TPLG_TYPE_ENUM 3
-+#define SND_SOC_TPLG_TYPE_DAPM_GRAPH 4
-+#define SND_SOC_TPLG_TYPE_DAPM_WIDGET 5
-+#define SND_SOC_TPLG_TYPE_DAI_LINK 6
-+#define SND_SOC_TPLG_TYPE_PCM 7
-+#define SND_SOC_TPLG_TYPE_MANIFEST 8
-+#define SND_SOC_TPLG_TYPE_CODEC_LINK 9
-+#define SND_SOC_TPLG_TYPE_BACKEND_LINK 10
-+#define SND_SOC_TPLG_TYPE_PDATA 11
-+#define SND_SOC_TPLG_TYPE_DAI 12
-+#define SND_SOC_TPLG_TYPE_MAX SND_SOC_TPLG_TYPE_DAI
-+
-+/* vendor block IDs - please add new vendor types to end */
-+#define SND_SOC_TPLG_TYPE_VENDOR_FW 1000
-+#define SND_SOC_TPLG_TYPE_VENDOR_CONFIG 1001
-+#define SND_SOC_TPLG_TYPE_VENDOR_COEFF 1002
-+#define SND_SOC_TPLG_TYPEVENDOR_CODEC 1003
-+
-+#define SND_SOC_TPLG_STREAM_PLAYBACK 0
-+#define SND_SOC_TPLG_STREAM_CAPTURE 1
-+
-+/* vendor tuple types */
-+#define SND_SOC_TPLG_TUPLE_TYPE_UUID 0
-+#define SND_SOC_TPLG_TUPLE_TYPE_STRING 1
-+#define SND_SOC_TPLG_TUPLE_TYPE_BOOL 2
-+#define SND_SOC_TPLG_TUPLE_TYPE_BYTE 3
-+#define SND_SOC_TPLG_TUPLE_TYPE_WORD 4
-+#define SND_SOC_TPLG_TUPLE_TYPE_SHORT 5
-+
-+/* DAI flags */
-+#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_RATES (1 << 0)
-+#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_CHANNELS (1 << 1)
-+#define SND_SOC_TPLG_DAI_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2)
-+
-+/* DAI clock gating */
-+#define SND_SOC_TPLG_DAI_CLK_GATE_UNDEFINED 0
-+#define SND_SOC_TPLG_DAI_CLK_GATE_GATED 1
-+#define SND_SOC_TPLG_DAI_CLK_GATE_CONT 2
-+
-+/* DAI mclk_direction */
-+#define SND_SOC_TPLG_MCLK_CO 0 /* for codec, mclk is output */
-+#define SND_SOC_TPLG_MCLK_CI 1 /* for codec, mclk is input */
-+
-+/* DAI physical PCM data formats.
-+ * Add new formats to the end of the list.
-+ */
-+#define SND_SOC_DAI_FORMAT_I2S 1 /* I2S mode */
-+#define SND_SOC_DAI_FORMAT_RIGHT_J 2 /* Right Justified mode */
-+#define SND_SOC_DAI_FORMAT_LEFT_J 3 /* Left Justified mode */
-+#define SND_SOC_DAI_FORMAT_DSP_A 4 /* L data MSB after FRM LRC */
-+#define SND_SOC_DAI_FORMAT_DSP_B 5 /* L data MSB during FRM LRC */
-+#define SND_SOC_DAI_FORMAT_AC97 6 /* AC97 */
-+#define SND_SOC_DAI_FORMAT_PDM 7 /* Pulse density modulation */
-+
-+/* left and right justified also known as MSB and LSB respectively */
-+#define SND_SOC_DAI_FORMAT_MSB SND_SOC_DAI_FORMAT_LEFT_J
-+#define SND_SOC_DAI_FORMAT_LSB SND_SOC_DAI_FORMAT_RIGHT_J
-+
-+/* DAI link flags */
-+#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_RATES (1 << 0)
-+#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_CHANNELS (1 << 1)
-+#define SND_SOC_TPLG_LNK_FLGBIT_SYMMETRIC_SAMPLEBITS (1 << 2)
-+#define SND_SOC_TPLG_LNK_FLGBIT_VOICE_WAKEUP (1 << 3)
-+
-+/* DAI topology BCLK parameter
-+ * For the backwards capability, by default codec is bclk master
-+ */
-+#define SND_SOC_TPLG_BCLK_CM 0 /* codec is bclk master */
-+#define SND_SOC_TPLG_BCLK_CS 1 /* codec is bclk slave */
-+
-+/* DAI topology FSYNC parameter
-+ * For the backwards capability, by default codec is fsync master
-+ */
-+#define SND_SOC_TPLG_FSYNC_CM 0 /* codec is fsync master */
-+#define SND_SOC_TPLG_FSYNC_CS 1 /* codec is fsync slave */
-+
-+/*
-+ * Block Header.
-+ * This header precedes all object and object arrays below.
-+ */
-+struct snd_soc_tplg_hdr {
-+ __le32 magic; /* magic number */
-+ __le32 abi; /* ABI version */
-+ __le32 version; /* optional vendor specific version details */
-+ __le32 type; /* SND_SOC_TPLG_TYPE_ */
-+ __le32 size; /* size of this structure */
-+ __le32 vendor_type; /* optional vendor specific type info */
-+ __le32 payload_size; /* data bytes, excluding this header */
-+ __le32 index; /* identifier for block */
-+ __le32 count; /* number of elements in block */
-+} __attribute__((packed));
-+
-+/* vendor tuple for uuid */
-+struct snd_soc_tplg_vendor_uuid_elem {
-+ __le32 token;
-+ char uuid[16];
-+} __attribute__((packed));
-+
-+/* vendor tuple for a bool/byte/short/word value */
-+struct snd_soc_tplg_vendor_value_elem {
-+ __le32 token;
-+ __le32 value;
-+} __attribute__((packed));
-+
-+/* vendor tuple for string */
-+struct snd_soc_tplg_vendor_string_elem {
-+ __le32 token;
-+ char string[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-+} __attribute__((packed));
-+
-+struct snd_soc_tplg_vendor_array {
-+ __le32 size; /* size in bytes of the array, including all elements */
-+ __le32 type; /* SND_SOC_TPLG_TUPLE_TYPE_ */
-+ __le32 num_elems; /* number of elements in array */
-+ union {
-+ struct snd_soc_tplg_vendor_uuid_elem uuid[0];
-+ struct snd_soc_tplg_vendor_value_elem value[0];
-+ struct snd_soc_tplg_vendor_string_elem string[0];
-+ };
-+} __attribute__((packed));
-+
-+/*
-+ * Private data.
-+ * All topology objects may have private data that can be used by the driver or
-+ * firmware. Core will ignore this data.
-+ */
-+struct snd_soc_tplg_private {
-+ __le32 size; /* in bytes of private data */
-+ union {
-+ char data[0];
-+ struct snd_soc_tplg_vendor_array array[0];
-+ };
-+} __attribute__((packed));
-+
-+/*
-+ * Kcontrol TLV data.
-+ */
-+struct snd_soc_tplg_tlv_dbscale {
-+ __le32 min;
-+ __le32 step;
-+ __le32 mute;
-+} __attribute__((packed));
-+
-+struct snd_soc_tplg_ctl_tlv {
-+ __le32 size; /* in bytes of this structure */
-+ __le32 type; /* SNDRV_CTL_TLVT_*, type of TLV */
-+ union {
-+ __le32 data[SND_SOC_TPLG_TLV_SIZE];
-+ struct snd_soc_tplg_tlv_dbscale scale;
-+ };
-+} __attribute__((packed));
-+
-+/*
-+ * Kcontrol channel data
-+ */
-+struct snd_soc_tplg_channel {
-+ __le32 size; /* in bytes of this structure */
-+ __le32 reg;
-+ __le32 shift;
-+ __le32 id; /* ID maps to Left, Right, LFE etc */
-+} __attribute__((packed));
-+
-+/*
-+ * Genericl Operations IDs, for binding Kcontrol or Bytes ext ops
-+ * Kcontrol ops need get/put/info.
-+ * Bytes ext ops need get/put.
-+ */
-+struct snd_soc_tplg_io_ops {
-+ __le32 get;
-+ __le32 put;
-+ __le32 info;
-+} __attribute__((packed));
-+
-+/*
-+ * kcontrol header
-+ */
-+struct snd_soc_tplg_ctl_hdr {
-+ __le32 size; /* in bytes of this structure */
-+ __le32 type;
-+ char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-+ __le32 access;
-+ struct snd_soc_tplg_io_ops ops;
-+ struct snd_soc_tplg_ctl_tlv tlv;
-+} __attribute__((packed));
-+
-+/*
-+ * Stream Capabilities
-+ */
-+struct snd_soc_tplg_stream_caps {
-+ __le32 size; /* in bytes of this structure */
-+ char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-+ __le64 formats; /* supported formats SNDRV_PCM_FMTBIT_* */
-+ __le32 rates; /* supported rates SNDRV_PCM_RATE_* */
-+ __le32 rate_min; /* min rate */
-+ __le32 rate_max; /* max rate */
-+ __le32 channels_min; /* min channels */
-+ __le32 channels_max; /* max channels */
-+ __le32 periods_min; /* min number of periods */
-+ __le32 periods_max; /* max number of periods */
-+ __le32 period_size_min; /* min period size bytes */
-+ __le32 period_size_max; /* max period size bytes */
-+ __le32 buffer_size_min; /* min buffer size bytes */
-+ __le32 buffer_size_max; /* max buffer size bytes */
-+ __le32 sig_bits; /* number of bits of content */
-+} __attribute__((packed));
-+
-+/*
-+ * FE or BE Stream configuration supported by SW/FW
-+ */
-+struct snd_soc_tplg_stream {
-+ __le32 size; /* in bytes of this structure */
-+ char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* Name of the stream */
-+ __le64 format; /* SNDRV_PCM_FMTBIT_* */
-+ __le32 rate; /* SNDRV_PCM_RATE_* */
-+ __le32 period_bytes; /* size of period in bytes */
-+ __le32 buffer_bytes; /* size of buffer in bytes */
-+ __le32 channels; /* channels */
-+} __attribute__((packed));
-+
-+
-+/*
-+ * Describes a physical link's runtime supported hardware config,
-+ * i.e. hardware audio formats.
-+ */
-+struct snd_soc_tplg_hw_config {
-+ __le32 size; /* in bytes of this structure */
-+ __le32 id; /* unique ID - - used to match */
-+ __le32 fmt; /* SND_SOC_DAI_FORMAT_ format value */
-+ __u8 clock_gated; /* SND_SOC_TPLG_DAI_CLK_GATE_ value */
-+ __u8 invert_bclk; /* 1 for inverted BCLK, 0 for normal */
-+ __u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */
-+ __u8 bclk_master; /* SND_SOC_TPLG_BCLK_ value */
-+ __u8 fsync_master; /* SND_SOC_TPLG_FSYNC_ value */
-+ __u8 mclk_direction; /* SND_SOC_TPLG_MCLK_ value */
-+ __le16 reserved; /* for 32bit alignment */
-+ __le32 mclk_rate; /* MCLK or SYSCLK freqency in Hz */
-+ __le32 bclk_rate; /* BCLK freqency in Hz */
-+ __le32 fsync_rate; /* frame clock in Hz */
-+ __le32 tdm_slots; /* number of TDM slots in use */
-+ __le32 tdm_slot_width; /* width in bits for each slot */
-+ __le32 tx_slots; /* bit mask for active Tx slots */
-+ __le32 rx_slots; /* bit mask for active Rx slots */
-+ __le32 tx_channels; /* number of Tx channels */
-+ __le32 tx_chanmap[SND_SOC_TPLG_MAX_CHAN]; /* array of slot number */
-+ __le32 rx_channels; /* number of Rx channels */
-+ __le32 rx_chanmap[SND_SOC_TPLG_MAX_CHAN]; /* array of slot number */
-+} __attribute__((packed));
-+
-+/*
-+ * Manifest. List totals for each payload type. Not used in parsing, but will
-+ * be passed to the component driver before any other objects in order for any
-+ * global component resource allocations.
-+ *
-+ * File block representation for manifest :-
-+ * +-----------------------------------+----+
-+ * | struct snd_soc_tplg_hdr | 1 |
-+ * +-----------------------------------+----+
-+ * | struct snd_soc_tplg_manifest | 1 |
-+ * +-----------------------------------+----+
-+ */
-+struct snd_soc_tplg_manifest {
-+ __le32 size; /* in bytes of this structure */
-+ __le32 control_elems; /* number of control elements */
-+ __le32 widget_elems; /* number of widget elements */
-+ __le32 graph_elems; /* number of graph elements */
-+ __le32 pcm_elems; /* number of PCM elements */
-+ __le32 dai_link_elems; /* number of DAI link elements */
-+ __le32 dai_elems; /* number of physical DAI elements */
-+ __le32 reserved[20]; /* reserved for new ABI element types */
-+ struct snd_soc_tplg_private priv;
-+} __attribute__((packed));
-+
-+/*
-+ * Mixer kcontrol.
-+ *
-+ * File block representation for mixer kcontrol :-
-+ * +-----------------------------------+----+
-+ * | struct snd_soc_tplg_hdr | 1 |
-+ * +-----------------------------------+----+
-+ * | struct snd_soc_tplg_mixer_control | N |
-+ * +-----------------------------------+----+
-+ */
-+struct snd_soc_tplg_mixer_control {
-+ struct snd_soc_tplg_ctl_hdr hdr;
-+ __le32 size; /* in bytes of this structure */
-+ __le32 min;
-+ __le32 max;
-+ __le32 platform_max;
-+ __le32 invert;
-+ __le32 num_channels;
-+ struct snd_soc_tplg_channel channel[SND_SOC_TPLG_MAX_CHAN];
-+ struct snd_soc_tplg_private priv;
-+} __attribute__((packed));
-+
-+/*
-+ * Enumerated kcontrol
-+ *
-+ * File block representation for enum kcontrol :-
-+ * +-----------------------------------+----+
-+ * | struct snd_soc_tplg_hdr | 1 |
-+ * +-----------------------------------+----+
-+ * | struct snd_soc_tplg_enum_control | N |
-+ * +-----------------------------------+----+
-+ */
-+struct snd_soc_tplg_enum_control {
-+ struct snd_soc_tplg_ctl_hdr hdr;
-+ __le32 size; /* in bytes of this structure */
-+ __le32 num_channels;
-+ struct snd_soc_tplg_channel channel[SND_SOC_TPLG_MAX_CHAN];
-+ __le32 items;
-+ __le32 mask;
-+ __le32 count;
-+ char texts[SND_SOC_TPLG_NUM_TEXTS][SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-+ __le32 values[SND_SOC_TPLG_NUM_TEXTS * SNDRV_CTL_ELEM_ID_NAME_MAXLEN / 4];
-+ struct snd_soc_tplg_private priv;
-+} __attribute__((packed));
-+
-+/*
-+ * Bytes kcontrol
-+ *
-+ * File block representation for bytes kcontrol :-
-+ * +-----------------------------------+----+
-+ * | struct snd_soc_tplg_hdr | 1 |
-+ * +-----------------------------------+----+
-+ * | struct snd_soc_tplg_bytes_control | N |
-+ * +-----------------------------------+----+
-+ */
-+struct snd_soc_tplg_bytes_control {
-+ struct snd_soc_tplg_ctl_hdr hdr;
-+ __le32 size; /* in bytes of this structure */
-+ __le32 max;
-+ __le32 mask;
-+ __le32 base;
-+ __le32 num_regs;
-+ struct snd_soc_tplg_io_ops ext_ops;
-+ struct snd_soc_tplg_private priv;
-+} __attribute__((packed));
-+
-+/*
-+ * DAPM Graph Element
-+ *
-+ * File block representation for DAPM graph elements :-
-+ * +-------------------------------------+----+
-+ * | struct snd_soc_tplg_hdr | 1 |
-+ * +-------------------------------------+----+
-+ * | struct snd_soc_tplg_dapm_graph_elem | N |
-+ * +-------------------------------------+----+
-+ */
-+struct snd_soc_tplg_dapm_graph_elem {
-+ char sink[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-+ char control[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-+ char source[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-+} __attribute__((packed));
-+
-+/*
-+ * DAPM Widget.
-+ *
-+ * File block representation for DAPM widget :-
-+ * +-------------------------------------+-----+
-+ * | struct snd_soc_tplg_hdr | 1 |
-+ * +-------------------------------------+-----+
-+ * | struct snd_soc_tplg_dapm_widget | N |
-+ * +-------------------------------------+-----+
-+ * | struct snd_soc_tplg_enum_control | 0|1 |
-+ * | struct snd_soc_tplg_mixer_control | 0|N |
-+ * +-------------------------------------+-----+
-+ *
-+ * Optional enum or mixer control can be appended to the end of each widget
-+ * in the block.
-+ */
-+struct snd_soc_tplg_dapm_widget {
-+ __le32 size; /* in bytes of this structure */
-+ __le32 id; /* SND_SOC_DAPM_CTL */
-+ char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-+ char sname[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-+
-+ __le32 reg; /* negative reg = no direct dapm */
-+ __le32 shift; /* bits to shift */
-+ __le32 mask; /* non-shifted mask */
-+ __le32 subseq; /* sort within widget type */
-+ __le32 invert; /* invert the power bit */
-+ __le32 ignore_suspend; /* kept enabled over suspend */
-+ __le16 event_flags;
-+ __le16 event_type;
-+ __le32 num_kcontrols;
-+ struct snd_soc_tplg_private priv;
-+ /*
-+ * kcontrols that relate to this widget
-+ * follow here after widget private data
-+ */
-+} __attribute__((packed));
-+
-+
-+/*
-+ * Describes SW/FW specific features of PCM (FE DAI & DAI link).
-+ *
-+ * File block representation for PCM :-
-+ * +-----------------------------------+-----+
-+ * | struct snd_soc_tplg_hdr | 1 |
-+ * +-----------------------------------+-----+
-+ * | struct snd_soc_tplg_pcm | N |
-+ * +-----------------------------------+-----+
-+ */
-+struct snd_soc_tplg_pcm {
-+ __le32 size; /* in bytes of this structure */
-+ char pcm_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-+ char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-+ __le32 pcm_id; /* unique ID - used to match with DAI link */
-+ __le32 dai_id; /* unique ID - used to match */
-+ __le32 playback; /* supports playback mode */
-+ __le32 capture; /* supports capture mode */
-+ __le32 compress; /* 1 = compressed; 0 = PCM */
-+ struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* for DAI link */
-+ __le32 num_streams; /* number of streams */
-+ struct snd_soc_tplg_stream_caps caps[2]; /* playback and capture for DAI */
-+ __le32 flag_mask; /* bitmask of flags to configure */
-+ __le32 flags; /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */
-+ struct snd_soc_tplg_private priv;
-+} __attribute__((packed));
-+
-+
-+/*
-+ * Describes the physical link runtime supported configs or params
-+ *
-+ * File block representation for physical link config :-
-+ * +-----------------------------------+-----+
-+ * | struct snd_soc_tplg_hdr | 1 |
-+ * +-----------------------------------+-----+
-+ * | struct snd_soc_tplg_link_config | N |
-+ * +-----------------------------------+-----+
-+ */
-+struct snd_soc_tplg_link_config {
-+ __le32 size; /* in bytes of this structure */
-+ __le32 id; /* unique ID - used to match */
-+ char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* name - used to match */
-+ char stream_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* stream name - used to match */
-+ struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* supported configs playback and captrure */
-+ __le32 num_streams; /* number of streams */
-+ struct snd_soc_tplg_hw_config hw_config[SND_SOC_TPLG_HW_CONFIG_MAX]; /* hw configs */
-+ __le32 num_hw_configs; /* number of hw configs */
-+ __le32 default_hw_config_id; /* default hw config ID for init */
-+ __le32 flag_mask; /* bitmask of flags to configure */
-+ __le32 flags; /* SND_SOC_TPLG_LNK_FLGBIT_* flag value */
-+ struct snd_soc_tplg_private priv;
-+} __attribute__((packed));
-+
-+/*
-+ * Describes SW/FW specific features of physical DAI.
-+ * It can be used to configure backend DAIs for DPCM.
-+ *
-+ * File block representation for physical DAI :-
-+ * +-----------------------------------+-----+
-+ * | struct snd_soc_tplg_hdr | 1 |
-+ * +-----------------------------------+-----+
-+ * | struct snd_soc_tplg_dai | N |
-+ * +-----------------------------------+-----+
-+ */
-+struct snd_soc_tplg_dai {
-+ __le32 size; /* in bytes of this structure */
-+ char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* name - used to match */
-+ __le32 dai_id; /* unique ID - used to match */
-+ __le32 playback; /* supports playback mode */
-+ __le32 capture; /* supports capture mode */
-+ struct snd_soc_tplg_stream_caps caps[2]; /* playback and capture for DAI */
-+ __le32 flag_mask; /* bitmask of flags to configure */
-+ __le32 flags; /* SND_SOC_TPLG_DAI_FLGBIT_* */
-+ struct snd_soc_tplg_private priv;
-+} __attribute__((packed));
-+
-+/*
-+ * Old version of ABI structs, supported for backward compatibility.
-+ */
-+
-+/* Manifest v4 */
-+struct snd_soc_tplg_manifest_v4 {
-+ __le32 size; /* in bytes of this structure */
-+ __le32 control_elems; /* number of control elements */
-+ __le32 widget_elems; /* number of widget elements */
-+ __le32 graph_elems; /* number of graph elements */
-+ __le32 pcm_elems; /* number of PCM elements */
-+ __le32 dai_link_elems; /* number of DAI link elements */
-+ struct snd_soc_tplg_private priv;
-+} __packed;
-+
-+/* Stream Capabilities v4 */
-+struct snd_soc_tplg_stream_caps_v4 {
-+ __le32 size; /* in bytes of this structure */
-+ char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-+ __le64 formats; /* supported formats SNDRV_PCM_FMTBIT_* */
-+ __le32 rates; /* supported rates SNDRV_PCM_RATE_* */
-+ __le32 rate_min; /* min rate */
-+ __le32 rate_max; /* max rate */
-+ __le32 channels_min; /* min channels */
-+ __le32 channels_max; /* max channels */
-+ __le32 periods_min; /* min number of periods */
-+ __le32 periods_max; /* max number of periods */
-+ __le32 period_size_min; /* min period size bytes */
-+ __le32 period_size_max; /* max period size bytes */
-+ __le32 buffer_size_min; /* min buffer size bytes */
-+ __le32 buffer_size_max; /* max buffer size bytes */
-+} __packed;
-+
-+/* PCM v4 */
-+struct snd_soc_tplg_pcm_v4 {
-+ __le32 size; /* in bytes of this structure */
-+ char pcm_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-+ char dai_name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN];
-+ __le32 pcm_id; /* unique ID - used to match with DAI link */
-+ __le32 dai_id; /* unique ID - used to match */
-+ __le32 playback; /* supports playback mode */
-+ __le32 capture; /* supports capture mode */
-+ __le32 compress; /* 1 = compressed; 0 = PCM */
-+ struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* for DAI link */
-+ __le32 num_streams; /* number of streams */
-+ struct snd_soc_tplg_stream_caps_v4 caps[2]; /* playback and capture for DAI */
-+} __packed;
-+
-+/* Physical link config v4 */
-+struct snd_soc_tplg_link_config_v4 {
-+ __le32 size; /* in bytes of this structure */
-+ __le32 id; /* unique ID - used to match */
-+ struct snd_soc_tplg_stream stream[SND_SOC_TPLG_STREAM_CONFIG_MAX]; /* supported configs playback and captrure */
-+ __le32 num_streams; /* number of streams */
-+} __packed;
-+
-+#endif
-diff --git a/include/sound/uapi/asound.h b/include/sound/uapi/asound.h
-new file mode 100644
-index 00000000..df1153ce
---- /dev/null
-+++ b/include/sound/uapi/asound.h
-@@ -0,0 +1,1038 @@
-+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
-+/*
-+ * Advanced Linux Sound Architecture - ALSA - Driver
-+ * Copyright (c) 1994-2003 by Jaroslav Kysela <perex@perex.cz>,
-+ * Abramo Bagnara <abramo@alsa-project.org>
-+ *
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#ifndef _UAPI__SOUND_ASOUND_H
-+#define _UAPI__SOUND_ASOUND_H
-+
-+#if defined(__KERNEL__) || defined(__linux__)
-+#include <linux/types.h>
-+#else
-+#include <sys/ioctl.h>
-+#endif
-+
-+#ifndef __KERNEL__
-+#include <stdlib.h>
-+#include <time.h>
-+#endif
-+
-+/*
-+ * protocol version
-+ */
-+
-+#define SNDRV_PROTOCOL_VERSION(major, minor, subminor) (((major)<<16)|((minor)<<8)|(subminor))
-+#define SNDRV_PROTOCOL_MAJOR(version) (((version)>>16)&0xffff)
-+#define SNDRV_PROTOCOL_MINOR(version) (((version)>>8)&0xff)
-+#define SNDRV_PROTOCOL_MICRO(version) ((version)&0xff)
-+#define SNDRV_PROTOCOL_INCOMPATIBLE(kversion, uversion) \
-+ (SNDRV_PROTOCOL_MAJOR(kversion) != SNDRV_PROTOCOL_MAJOR(uversion) || \
-+ (SNDRV_PROTOCOL_MAJOR(kversion) == SNDRV_PROTOCOL_MAJOR(uversion) && \
-+ SNDRV_PROTOCOL_MINOR(kversion) != SNDRV_PROTOCOL_MINOR(uversion)))
-+
-+/****************************************************************************
-+ * *
-+ * Digital audio interface *
-+ * *
-+ ****************************************************************************/
-+
-+struct snd_aes_iec958 {
-+ unsigned char status[24]; /* AES/IEC958 channel status bits */
-+ unsigned char subcode[147]; /* AES/IEC958 subcode bits */
-+ unsigned char pad; /* nothing */
-+ unsigned char dig_subframe[4]; /* AES/IEC958 subframe bits */
-+};
-+
-+/****************************************************************************
-+ * *
-+ * CEA-861 Audio InfoFrame. Used in HDMI and DisplayPort *
-+ * *
-+ ****************************************************************************/
-+
-+struct snd_cea_861_aud_if {
-+ unsigned char db1_ct_cc; /* coding type and channel count */
-+ unsigned char db2_sf_ss; /* sample frequency and size */
-+ unsigned char db3; /* not used, all zeros */
-+ unsigned char db4_ca; /* channel allocation code */
-+ unsigned char db5_dminh_lsv; /* downmix inhibit & level-shit values */
-+};
-+
-+/****************************************************************************
-+ * *
-+ * Section for driver hardware dependent interface - /dev/snd/hw? *
-+ * *
-+ ****************************************************************************/
-+
-+#define SNDRV_HWDEP_VERSION SNDRV_PROTOCOL_VERSION(1, 0, 1)
-+
-+enum {
-+ SNDRV_HWDEP_IFACE_OPL2 = 0,
-+ SNDRV_HWDEP_IFACE_OPL3,
-+ SNDRV_HWDEP_IFACE_OPL4,
-+ SNDRV_HWDEP_IFACE_SB16CSP, /* Creative Signal Processor */
-+ SNDRV_HWDEP_IFACE_EMU10K1, /* FX8010 processor in EMU10K1 chip */
-+ SNDRV_HWDEP_IFACE_YSS225, /* Yamaha FX processor */
-+ SNDRV_HWDEP_IFACE_ICS2115, /* Wavetable synth */
-+ SNDRV_HWDEP_IFACE_SSCAPE, /* Ensoniq SoundScape ISA card (MC68EC000) */
-+ SNDRV_HWDEP_IFACE_VX, /* Digigram VX cards */
-+ SNDRV_HWDEP_IFACE_MIXART, /* Digigram miXart cards */
-+ SNDRV_HWDEP_IFACE_USX2Y, /* Tascam US122, US224 & US428 usb */
-+ SNDRV_HWDEP_IFACE_EMUX_WAVETABLE, /* EmuX wavetable */
-+ SNDRV_HWDEP_IFACE_BLUETOOTH, /* Bluetooth audio */
-+ SNDRV_HWDEP_IFACE_USX2Y_PCM, /* Tascam US122, US224 & US428 rawusb pcm */
-+ SNDRV_HWDEP_IFACE_PCXHR, /* Digigram PCXHR */
-+ 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 */
-+ SNDRV_HWDEP_IFACE_FW_FIREWORKS, /* Echo Audio Fireworks based device */
-+ SNDRV_HWDEP_IFACE_FW_BEBOB, /* BridgeCo BeBoB based device */
-+ SNDRV_HWDEP_IFACE_FW_OXFW, /* Oxford OXFW970/971 based device */
-+ SNDRV_HWDEP_IFACE_FW_DIGI00X, /* Digidesign Digi 002/003 family */
-+ SNDRV_HWDEP_IFACE_FW_TASCAM, /* TASCAM FireWire series */
-+ SNDRV_HWDEP_IFACE_LINE6, /* Line6 USB processors */
-+ SNDRV_HWDEP_IFACE_FW_MOTU, /* MOTU FireWire series */
-+ SNDRV_HWDEP_IFACE_FW_FIREFACE, /* RME Fireface series */
-+
-+ /* Don't forget to change the following: */
-+ SNDRV_HWDEP_IFACE_LAST = SNDRV_HWDEP_IFACE_FW_FIREFACE
-+};
-+
-+struct snd_hwdep_info {
-+ unsigned int device; /* WR: device number */
-+ int card; /* R: card number */
-+ unsigned char id[64]; /* ID (user selectable) */
-+ unsigned char name[80]; /* hwdep name */
-+ int iface; /* hwdep interface */
-+ unsigned char reserved[64]; /* reserved for future */
-+};
-+
-+/* generic DSP loader */
-+struct snd_hwdep_dsp_status {
-+ unsigned int version; /* R: driver-specific version */
-+ unsigned char id[32]; /* R: driver-specific ID string */
-+ unsigned int num_dsps; /* R: number of DSP images to transfer */
-+ unsigned int dsp_loaded; /* R: bit flags indicating the loaded DSPs */
-+ unsigned int chip_ready; /* R: 1 = initialization finished */
-+ unsigned char reserved[16]; /* reserved for future use */
-+};
-+
-+struct snd_hwdep_dsp_image {
-+ unsigned int index; /* W: DSP index */
-+ unsigned char name[64]; /* W: ID (e.g. file name) */
-+ unsigned char __user *image; /* W: binary image */
-+ size_t length; /* W: size of image in bytes */
-+ unsigned long driver_data; /* W: driver-specific data */
-+};
-+
-+#define SNDRV_HWDEP_IOCTL_PVERSION _IOR ('H', 0x00, int)
-+#define SNDRV_HWDEP_IOCTL_INFO _IOR ('H', 0x01, struct snd_hwdep_info)
-+#define SNDRV_HWDEP_IOCTL_DSP_STATUS _IOR('H', 0x02, struct snd_hwdep_dsp_status)
-+#define SNDRV_HWDEP_IOCTL_DSP_LOAD _IOW('H', 0x03, struct snd_hwdep_dsp_image)
-+
-+/*****************************************************************************
-+ * *
-+ * Digital Audio (PCM) interface - /dev/snd/pcm?? *
-+ * *
-+ *****************************************************************************/
-+
-+#define SNDRV_PCM_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 14)
-+
-+typedef unsigned long snd_pcm_uframes_t;
-+typedef signed long snd_pcm_sframes_t;
-+
-+enum {
-+ SNDRV_PCM_CLASS_GENERIC = 0, /* standard mono or stereo device */
-+ SNDRV_PCM_CLASS_MULTI, /* multichannel device */
-+ SNDRV_PCM_CLASS_MODEM, /* software modem class */
-+ SNDRV_PCM_CLASS_DIGITIZER, /* digitizer class */
-+ /* Don't forget to change the following: */
-+ SNDRV_PCM_CLASS_LAST = SNDRV_PCM_CLASS_DIGITIZER,
-+};
-+
-+enum {
-+ SNDRV_PCM_SUBCLASS_GENERIC_MIX = 0, /* mono or stereo subdevices are mixed together */
-+ SNDRV_PCM_SUBCLASS_MULTI_MIX, /* multichannel subdevices are mixed together */
-+ /* Don't forget to change the following: */
-+ SNDRV_PCM_SUBCLASS_LAST = SNDRV_PCM_SUBCLASS_MULTI_MIX,
-+};
-+
-+enum {
-+ SNDRV_PCM_STREAM_PLAYBACK = 0,
-+ SNDRV_PCM_STREAM_CAPTURE,
-+ SNDRV_PCM_STREAM_LAST = SNDRV_PCM_STREAM_CAPTURE,
-+};
-+
-+typedef int __bitwise snd_pcm_access_t;
-+#define SNDRV_PCM_ACCESS_MMAP_INTERLEAVED ((__force snd_pcm_access_t) 0) /* interleaved mmap */
-+#define SNDRV_PCM_ACCESS_MMAP_NONINTERLEAVED ((__force snd_pcm_access_t) 1) /* noninterleaved mmap */
-+#define SNDRV_PCM_ACCESS_MMAP_COMPLEX ((__force snd_pcm_access_t) 2) /* complex mmap */
-+#define SNDRV_PCM_ACCESS_RW_INTERLEAVED ((__force snd_pcm_access_t) 3) /* readi/writei */
-+#define SNDRV_PCM_ACCESS_RW_NONINTERLEAVED ((__force snd_pcm_access_t) 4) /* readn/writen */
-+#define SNDRV_PCM_ACCESS_LAST SNDRV_PCM_ACCESS_RW_NONINTERLEAVED
-+
-+typedef int __bitwise snd_pcm_format_t;
-+#define SNDRV_PCM_FORMAT_S8 ((__force snd_pcm_format_t) 0)
-+#define SNDRV_PCM_FORMAT_U8 ((__force snd_pcm_format_t) 1)
-+#define SNDRV_PCM_FORMAT_S16_LE ((__force snd_pcm_format_t) 2)
-+#define SNDRV_PCM_FORMAT_S16_BE ((__force snd_pcm_format_t) 3)
-+#define SNDRV_PCM_FORMAT_U16_LE ((__force snd_pcm_format_t) 4)
-+#define SNDRV_PCM_FORMAT_U16_BE ((__force snd_pcm_format_t) 5)
-+#define SNDRV_PCM_FORMAT_S24_LE ((__force snd_pcm_format_t) 6) /* low three bytes */
-+#define SNDRV_PCM_FORMAT_S24_BE ((__force snd_pcm_format_t) 7) /* low three bytes */
-+#define SNDRV_PCM_FORMAT_U24_LE ((__force snd_pcm_format_t) 8) /* low three bytes */
-+#define SNDRV_PCM_FORMAT_U24_BE ((__force snd_pcm_format_t) 9) /* low three bytes */
-+#define SNDRV_PCM_FORMAT_S32_LE ((__force snd_pcm_format_t) 10)
-+#define SNDRV_PCM_FORMAT_S32_BE ((__force snd_pcm_format_t) 11)
-+#define SNDRV_PCM_FORMAT_U32_LE ((__force snd_pcm_format_t) 12)
-+#define SNDRV_PCM_FORMAT_U32_BE ((__force snd_pcm_format_t) 13)
-+#define SNDRV_PCM_FORMAT_FLOAT_LE ((__force snd_pcm_format_t) 14) /* 4-byte float, IEEE-754 32-bit, range -1.0 to 1.0 */
-+#define SNDRV_PCM_FORMAT_FLOAT_BE ((__force snd_pcm_format_t) 15) /* 4-byte float, IEEE-754 32-bit, range -1.0 to 1.0 */
-+#define SNDRV_PCM_FORMAT_FLOAT64_LE ((__force snd_pcm_format_t) 16) /* 8-byte float, IEEE-754 64-bit, range -1.0 to 1.0 */
-+#define SNDRV_PCM_FORMAT_FLOAT64_BE ((__force snd_pcm_format_t) 17) /* 8-byte float, IEEE-754 64-bit, range -1.0 to 1.0 */
-+#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE ((__force snd_pcm_format_t) 18) /* IEC-958 subframe, Little Endian */
-+#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE ((__force snd_pcm_format_t) 19) /* IEC-958 subframe, Big Endian */
-+#define SNDRV_PCM_FORMAT_MU_LAW ((__force snd_pcm_format_t) 20)
-+#define SNDRV_PCM_FORMAT_A_LAW ((__force snd_pcm_format_t) 21)
-+#define SNDRV_PCM_FORMAT_IMA_ADPCM ((__force snd_pcm_format_t) 22)
-+#define SNDRV_PCM_FORMAT_MPEG ((__force snd_pcm_format_t) 23)
-+#define SNDRV_PCM_FORMAT_GSM ((__force snd_pcm_format_t) 24)
-+#define SNDRV_PCM_FORMAT_S20_LE ((__force snd_pcm_format_t) 25) /* in four bytes, LSB justified */
-+#define SNDRV_PCM_FORMAT_S20_BE ((__force snd_pcm_format_t) 26) /* in four bytes, LSB justified */
-+#define SNDRV_PCM_FORMAT_U20_LE ((__force snd_pcm_format_t) 27) /* in four bytes, LSB justified */
-+#define SNDRV_PCM_FORMAT_U20_BE ((__force snd_pcm_format_t) 28) /* in four bytes, LSB justified */
-+/* gap in the numbering for a future standard linear format */
-+#define SNDRV_PCM_FORMAT_SPECIAL ((__force snd_pcm_format_t) 31)
-+#define SNDRV_PCM_FORMAT_S24_3LE ((__force snd_pcm_format_t) 32) /* in three bytes */
-+#define SNDRV_PCM_FORMAT_S24_3BE ((__force snd_pcm_format_t) 33) /* in three bytes */
-+#define SNDRV_PCM_FORMAT_U24_3LE ((__force snd_pcm_format_t) 34) /* in three bytes */
-+#define SNDRV_PCM_FORMAT_U24_3BE ((__force snd_pcm_format_t) 35) /* in three bytes */
-+#define SNDRV_PCM_FORMAT_S20_3LE ((__force snd_pcm_format_t) 36) /* in three bytes */
-+#define SNDRV_PCM_FORMAT_S20_3BE ((__force snd_pcm_format_t) 37) /* in three bytes */
-+#define SNDRV_PCM_FORMAT_U20_3LE ((__force snd_pcm_format_t) 38) /* in three bytes */
-+#define SNDRV_PCM_FORMAT_U20_3BE ((__force snd_pcm_format_t) 39) /* in three bytes */
-+#define SNDRV_PCM_FORMAT_S18_3LE ((__force snd_pcm_format_t) 40) /* in three bytes */
-+#define SNDRV_PCM_FORMAT_S18_3BE ((__force snd_pcm_format_t) 41) /* in three bytes */
-+#define SNDRV_PCM_FORMAT_U18_3LE ((__force snd_pcm_format_t) 42) /* in three bytes */
-+#define SNDRV_PCM_FORMAT_U18_3BE ((__force snd_pcm_format_t) 43) /* in three bytes */
-+#define SNDRV_PCM_FORMAT_G723_24 ((__force snd_pcm_format_t) 44) /* 8 samples in 3 bytes */
-+#define SNDRV_PCM_FORMAT_G723_24_1B ((__force snd_pcm_format_t) 45) /* 1 sample in 1 byte */
-+#define SNDRV_PCM_FORMAT_G723_40 ((__force snd_pcm_format_t) 46) /* 8 Samples in 5 bytes */
-+#define SNDRV_PCM_FORMAT_G723_40_1B ((__force snd_pcm_format_t) 47) /* 1 sample in 1 byte */
-+#define SNDRV_PCM_FORMAT_DSD_U8 ((__force snd_pcm_format_t) 48) /* DSD, 1-byte samples DSD (x8) */
-+#define SNDRV_PCM_FORMAT_DSD_U16_LE ((__force snd_pcm_format_t) 49) /* DSD, 2-byte samples DSD (x16), little endian */
-+#define SNDRV_PCM_FORMAT_DSD_U32_LE ((__force snd_pcm_format_t) 50) /* DSD, 4-byte samples DSD (x32), little endian */
-+#define SNDRV_PCM_FORMAT_DSD_U16_BE ((__force snd_pcm_format_t) 51) /* DSD, 2-byte samples DSD (x16), big endian */
-+#define SNDRV_PCM_FORMAT_DSD_U32_BE ((__force snd_pcm_format_t) 52) /* DSD, 4-byte samples DSD (x32), big endian */
-+#define SNDRV_PCM_FORMAT_LAST SNDRV_PCM_FORMAT_DSD_U32_BE
-+#define SNDRV_PCM_FORMAT_FIRST SNDRV_PCM_FORMAT_S8
-+
-+#ifdef SNDRV_LITTLE_ENDIAN
-+#define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_LE
-+#define SNDRV_PCM_FORMAT_U16 SNDRV_PCM_FORMAT_U16_LE
-+#define SNDRV_PCM_FORMAT_S24 SNDRV_PCM_FORMAT_S24_LE
-+#define SNDRV_PCM_FORMAT_U24 SNDRV_PCM_FORMAT_U24_LE
-+#define SNDRV_PCM_FORMAT_S32 SNDRV_PCM_FORMAT_S32_LE
-+#define SNDRV_PCM_FORMAT_U32 SNDRV_PCM_FORMAT_U32_LE
-+#define SNDRV_PCM_FORMAT_FLOAT SNDRV_PCM_FORMAT_FLOAT_LE
-+#define SNDRV_PCM_FORMAT_FLOAT64 SNDRV_PCM_FORMAT_FLOAT64_LE
-+#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE
-+#define SNDRV_PCM_FORMAT_S20 SNDRV_PCM_FORMAT_S20_LE
-+#define SNDRV_PCM_FORMAT_U20 SNDRV_PCM_FORMAT_U20_LE
-+#endif
-+#ifdef SNDRV_BIG_ENDIAN
-+#define SNDRV_PCM_FORMAT_S16 SNDRV_PCM_FORMAT_S16_BE
-+#define SNDRV_PCM_FORMAT_U16 SNDRV_PCM_FORMAT_U16_BE
-+#define SNDRV_PCM_FORMAT_S24 SNDRV_PCM_FORMAT_S24_BE
-+#define SNDRV_PCM_FORMAT_U24 SNDRV_PCM_FORMAT_U24_BE
-+#define SNDRV_PCM_FORMAT_S32 SNDRV_PCM_FORMAT_S32_BE
-+#define SNDRV_PCM_FORMAT_U32 SNDRV_PCM_FORMAT_U32_BE
-+#define SNDRV_PCM_FORMAT_FLOAT SNDRV_PCM_FORMAT_FLOAT_BE
-+#define SNDRV_PCM_FORMAT_FLOAT64 SNDRV_PCM_FORMAT_FLOAT64_BE
-+#define SNDRV_PCM_FORMAT_IEC958_SUBFRAME SNDRV_PCM_FORMAT_IEC958_SUBFRAME_BE
-+#define SNDRV_PCM_FORMAT_S20 SNDRV_PCM_FORMAT_S20_BE
-+#define SNDRV_PCM_FORMAT_U20 SNDRV_PCM_FORMAT_U20_BE
-+#endif
-+
-+typedef int __bitwise snd_pcm_subformat_t;
-+#define SNDRV_PCM_SUBFORMAT_STD ((__force snd_pcm_subformat_t) 0)
-+#define SNDRV_PCM_SUBFORMAT_LAST SNDRV_PCM_SUBFORMAT_STD
-+
-+#define SNDRV_PCM_INFO_MMAP 0x00000001 /* hardware supports mmap */
-+#define SNDRV_PCM_INFO_MMAP_VALID 0x00000002 /* period data are valid during transfer */
-+#define SNDRV_PCM_INFO_DOUBLE 0x00000004 /* Double buffering needed for PCM start/stop */
-+#define SNDRV_PCM_INFO_BATCH 0x00000010 /* double buffering */
-+#define SNDRV_PCM_INFO_SYNC_APPLPTR 0x00000020 /* need the explicit sync of appl_ptr update */
-+#define SNDRV_PCM_INFO_INTERLEAVED 0x00000100 /* channels are interleaved */
-+#define SNDRV_PCM_INFO_NONINTERLEAVED 0x00000200 /* channels are not interleaved */
-+#define SNDRV_PCM_INFO_COMPLEX 0x00000400 /* complex frame organization (mmap only) */
-+#define SNDRV_PCM_INFO_BLOCK_TRANSFER 0x00010000 /* hardware transfer block of samples */
-+#define SNDRV_PCM_INFO_OVERRANGE 0x00020000 /* hardware supports ADC (capture) overrange detection */
-+#define SNDRV_PCM_INFO_RESUME 0x00040000 /* hardware supports stream resume after suspend */
-+#define SNDRV_PCM_INFO_PAUSE 0x00080000 /* pause ioctl is supported */
-+#define SNDRV_PCM_INFO_HALF_DUPLEX 0x00100000 /* only half duplex */
-+#define SNDRV_PCM_INFO_JOINT_DUPLEX 0x00200000 /* playback and capture stream are somewhat correlated */
-+#define SNDRV_PCM_INFO_SYNC_START 0x00400000 /* pcm support some kind of sync go */
-+#define SNDRV_PCM_INFO_NO_PERIOD_WAKEUP 0x00800000 /* period wakeup can be disabled */
-+#define SNDRV_PCM_INFO_HAS_WALL_CLOCK 0x01000000 /* (Deprecated)has audio wall clock for audio/system time sync */
-+#define SNDRV_PCM_INFO_HAS_LINK_ATIME 0x01000000 /* report hardware link audio time, reset on startup */
-+#define SNDRV_PCM_INFO_HAS_LINK_ABSOLUTE_ATIME 0x02000000 /* report absolute hardware link audio time, not reset on startup */
-+#define SNDRV_PCM_INFO_HAS_LINK_ESTIMATED_ATIME 0x04000000 /* report estimated link audio time */
-+#define SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME 0x08000000 /* report synchronized audio/system time */
-+
-+#define SNDRV_PCM_INFO_DRAIN_TRIGGER 0x40000000 /* internal kernel flag - trigger in drain */
-+#define SNDRV_PCM_INFO_FIFO_IN_FRAMES 0x80000000 /* internal kernel flag - FIFO size is in frames */
-+
-+
-+
-+typedef int __bitwise snd_pcm_state_t;
-+#define SNDRV_PCM_STATE_OPEN ((__force snd_pcm_state_t) 0) /* stream is open */
-+#define SNDRV_PCM_STATE_SETUP ((__force snd_pcm_state_t) 1) /* stream has a setup */
-+#define SNDRV_PCM_STATE_PREPARED ((__force snd_pcm_state_t) 2) /* stream is ready to start */
-+#define SNDRV_PCM_STATE_RUNNING ((__force snd_pcm_state_t) 3) /* stream is running */
-+#define SNDRV_PCM_STATE_XRUN ((__force snd_pcm_state_t) 4) /* stream reached an xrun */
-+#define SNDRV_PCM_STATE_DRAINING ((__force snd_pcm_state_t) 5) /* stream is draining */
-+#define SNDRV_PCM_STATE_PAUSED ((__force snd_pcm_state_t) 6) /* stream is paused */
-+#define SNDRV_PCM_STATE_SUSPENDED ((__force snd_pcm_state_t) 7) /* hardware is suspended */
-+#define SNDRV_PCM_STATE_DISCONNECTED ((__force snd_pcm_state_t) 8) /* hardware is disconnected */
-+#define SNDRV_PCM_STATE_LAST SNDRV_PCM_STATE_DISCONNECTED
-+
-+enum {
-+ SNDRV_PCM_MMAP_OFFSET_DATA = 0x00000000,
-+ SNDRV_PCM_MMAP_OFFSET_STATUS = 0x80000000,
-+ SNDRV_PCM_MMAP_OFFSET_CONTROL = 0x81000000,
-+};
-+
-+union snd_pcm_sync_id {
-+ unsigned char id[16];
-+ unsigned short id16[8];
-+ unsigned int id32[4];
-+};
-+
-+struct snd_pcm_info {
-+ unsigned int device; /* RO/WR (control): device number */
-+ unsigned int subdevice; /* RO/WR (control): subdevice number */
-+ int stream; /* RO/WR (control): stream direction */
-+ int card; /* R: card number */
-+ unsigned char id[64]; /* ID (user selectable) */
-+ unsigned char name[80]; /* name of this device */
-+ unsigned char subname[32]; /* subdevice name */
-+ int dev_class; /* SNDRV_PCM_CLASS_* */
-+ int dev_subclass; /* SNDRV_PCM_SUBCLASS_* */
-+ unsigned int subdevices_count;
-+ unsigned int subdevices_avail;
-+ union snd_pcm_sync_id sync; /* hardware synchronization ID */
-+ unsigned char reserved[64]; /* reserved for future... */
-+};
-+
-+typedef int snd_pcm_hw_param_t;
-+#define SNDRV_PCM_HW_PARAM_ACCESS 0 /* Access type */
-+#define SNDRV_PCM_HW_PARAM_FORMAT 1 /* Format */
-+#define SNDRV_PCM_HW_PARAM_SUBFORMAT 2 /* Subformat */
-+#define SNDRV_PCM_HW_PARAM_FIRST_MASK SNDRV_PCM_HW_PARAM_ACCESS
-+#define SNDRV_PCM_HW_PARAM_LAST_MASK SNDRV_PCM_HW_PARAM_SUBFORMAT
-+
-+#define SNDRV_PCM_HW_PARAM_SAMPLE_BITS 8 /* Bits per sample */
-+#define SNDRV_PCM_HW_PARAM_FRAME_BITS 9 /* Bits per frame */
-+#define SNDRV_PCM_HW_PARAM_CHANNELS 10 /* Channels */
-+#define SNDRV_PCM_HW_PARAM_RATE 11 /* Approx rate */
-+#define SNDRV_PCM_HW_PARAM_PERIOD_TIME 12 /* Approx distance between
-+ * interrupts in us
-+ */
-+#define SNDRV_PCM_HW_PARAM_PERIOD_SIZE 13 /* Approx frames between
-+ * interrupts
-+ */
-+#define SNDRV_PCM_HW_PARAM_PERIOD_BYTES 14 /* Approx bytes between
-+ * interrupts
-+ */
-+#define SNDRV_PCM_HW_PARAM_PERIODS 15 /* Approx interrupts per
-+ * buffer
-+ */
-+#define SNDRV_PCM_HW_PARAM_BUFFER_TIME 16 /* Approx duration of buffer
-+ * in us
-+ */
-+#define SNDRV_PCM_HW_PARAM_BUFFER_SIZE 17 /* Size of buffer in frames */
-+#define SNDRV_PCM_HW_PARAM_BUFFER_BYTES 18 /* Size of buffer in bytes */
-+#define SNDRV_PCM_HW_PARAM_TICK_TIME 19 /* Approx tick duration in us */
-+#define SNDRV_PCM_HW_PARAM_FIRST_INTERVAL SNDRV_PCM_HW_PARAM_SAMPLE_BITS
-+#define SNDRV_PCM_HW_PARAM_LAST_INTERVAL SNDRV_PCM_HW_PARAM_TICK_TIME
-+
-+#define SNDRV_PCM_HW_PARAMS_NORESAMPLE (1<<0) /* avoid rate resampling */
-+#define SNDRV_PCM_HW_PARAMS_EXPORT_BUFFER (1<<1) /* export buffer */
-+#define SNDRV_PCM_HW_PARAMS_NO_PERIOD_WAKEUP (1<<2) /* disable period wakeups */
-+
-+struct snd_interval {
-+ unsigned int min, max;
-+ unsigned int openmin:1,
-+ openmax:1,
-+ integer:1,
-+ empty:1;
-+};
-+
-+#define SNDRV_MASK_MAX 256
-+
-+struct snd_mask {
-+ __u32 bits[(SNDRV_MASK_MAX+31)/32];
-+};
-+
-+struct snd_pcm_hw_params {
-+ unsigned int flags;
-+ struct snd_mask masks[SNDRV_PCM_HW_PARAM_LAST_MASK -
-+ SNDRV_PCM_HW_PARAM_FIRST_MASK + 1];
-+ struct snd_mask mres[5]; /* reserved masks */
-+ struct snd_interval intervals[SNDRV_PCM_HW_PARAM_LAST_INTERVAL -
-+ SNDRV_PCM_HW_PARAM_FIRST_INTERVAL + 1];
-+ struct snd_interval ires[9]; /* reserved intervals */
-+ unsigned int rmask; /* W: requested masks */
-+ unsigned int cmask; /* R: changed masks */
-+ unsigned int info; /* R: Info flags for returned setup */
-+ unsigned int msbits; /* R: used most significant bits */
-+ unsigned int rate_num; /* R: rate numerator */
-+ unsigned int rate_den; /* R: rate denominator */
-+ snd_pcm_uframes_t fifo_size; /* R: chip FIFO size in frames */
-+ unsigned char reserved[64]; /* reserved for future */
-+};
-+
-+enum {
-+ SNDRV_PCM_TSTAMP_NONE = 0,
-+ SNDRV_PCM_TSTAMP_ENABLE,
-+ SNDRV_PCM_TSTAMP_LAST = SNDRV_PCM_TSTAMP_ENABLE,
-+};
-+
-+struct snd_pcm_sw_params {
-+ int tstamp_mode; /* timestamp mode */
-+ unsigned int period_step;
-+ unsigned int sleep_min; /* min ticks to sleep */
-+ snd_pcm_uframes_t avail_min; /* min avail frames for wakeup */
-+ snd_pcm_uframes_t xfer_align; /* obsolete: xfer size need to be a multiple */
-+ snd_pcm_uframes_t start_threshold; /* min hw_avail frames for automatic start */
-+ snd_pcm_uframes_t stop_threshold; /* min avail frames for automatic stop */
-+ snd_pcm_uframes_t silence_threshold; /* min distance from noise for silence filling */
-+ snd_pcm_uframes_t silence_size; /* silence block size */
-+ snd_pcm_uframes_t boundary; /* pointers wrap point */
-+ unsigned int proto; /* protocol version */
-+ unsigned int tstamp_type; /* timestamp type (req. proto >= 2.0.12) */
-+ unsigned char reserved[56]; /* reserved for future */
-+};
-+
-+struct snd_pcm_channel_info {
-+ unsigned int channel;
-+ __kernel_off_t offset; /* mmap offset */
-+ unsigned int first; /* offset to first sample in bits */
-+ unsigned int step; /* samples distance in bits */
-+};
-+
-+enum {
-+ /*
-+ * first definition for backwards compatibility only,
-+ * maps to wallclock/link time for HDAudio playback and DEFAULT/DMA time for everything else
-+ */
-+ SNDRV_PCM_AUDIO_TSTAMP_TYPE_COMPAT = 0,
-+
-+ /* timestamp definitions */
-+ SNDRV_PCM_AUDIO_TSTAMP_TYPE_DEFAULT = 1, /* DMA time, reported as per hw_ptr */
-+ SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK = 2, /* link time reported by sample or wallclock counter, reset on startup */
-+ SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ABSOLUTE = 3, /* link time reported by sample or wallclock counter, not reset on startup */
-+ SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_ESTIMATED = 4, /* link time estimated indirectly */
-+ SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED = 5, /* link time synchronized with system time */
-+ SNDRV_PCM_AUDIO_TSTAMP_TYPE_LAST = SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED
-+};
-+
-+struct snd_pcm_status {
-+ snd_pcm_state_t state; /* stream state */
-+ struct timespec trigger_tstamp; /* time when stream was started/stopped/paused */
-+ struct timespec tstamp; /* reference timestamp */
-+ snd_pcm_uframes_t appl_ptr; /* appl ptr */
-+ snd_pcm_uframes_t hw_ptr; /* hw ptr */
-+ snd_pcm_sframes_t delay; /* current delay in frames */
-+ snd_pcm_uframes_t avail; /* number of frames available */
-+ snd_pcm_uframes_t avail_max; /* max frames available on hw since last status */
-+ snd_pcm_uframes_t overrange; /* count of ADC (capture) overrange detections from last status */
-+ snd_pcm_state_t suspended_state; /* suspended stream state */
-+ __u32 audio_tstamp_data; /* needed for 64-bit alignment, used for configs/report to/from userspace */
-+ struct timespec audio_tstamp; /* sample counter, wall clock, PHC or on-demand sync'ed */
-+ struct timespec driver_tstamp; /* useful in case reference system tstamp is reported with delay */
-+ __u32 audio_tstamp_accuracy; /* in ns units, only valid if indicated in audio_tstamp_data */
-+ unsigned char reserved[52-2*sizeof(struct timespec)]; /* must be filled with zero */
-+};
-+
-+struct snd_pcm_mmap_status {
-+ snd_pcm_state_t state; /* RO: state - SNDRV_PCM_STATE_XXXX */
-+ int pad1; /* Needed for 64 bit alignment */
-+ snd_pcm_uframes_t hw_ptr; /* RO: hw ptr (0...boundary-1) */
-+ struct timespec tstamp; /* Timestamp */
-+ snd_pcm_state_t suspended_state; /* RO: suspended stream state */
-+ struct timespec audio_tstamp; /* from sample counter or wall clock */
-+};
-+
-+struct snd_pcm_mmap_control {
-+ snd_pcm_uframes_t appl_ptr; /* RW: appl ptr (0...boundary-1) */
-+ snd_pcm_uframes_t avail_min; /* RW: min available frames for wakeup */
-+};
-+
-+#define SNDRV_PCM_SYNC_PTR_HWSYNC (1<<0) /* execute hwsync */
-+#define SNDRV_PCM_SYNC_PTR_APPL (1<<1) /* get appl_ptr from driver (r/w op) */
-+#define SNDRV_PCM_SYNC_PTR_AVAIL_MIN (1<<2) /* get avail_min from driver */
-+
-+struct snd_pcm_sync_ptr {
-+ unsigned int flags;
-+ union {
-+ struct snd_pcm_mmap_status status;
-+ unsigned char reserved[64];
-+ } s;
-+ union {
-+ struct snd_pcm_mmap_control control;
-+ unsigned char reserved[64];
-+ } c;
-+};
-+
-+struct snd_xferi {
-+ snd_pcm_sframes_t result;
-+ void __user *buf;
-+ snd_pcm_uframes_t frames;
-+};
-+
-+struct snd_xfern {
-+ snd_pcm_sframes_t result;
-+ void __user * __user *bufs;
-+ snd_pcm_uframes_t frames;
-+};
-+
-+enum {
-+ SNDRV_PCM_TSTAMP_TYPE_GETTIMEOFDAY = 0, /* gettimeofday equivalent */
-+ SNDRV_PCM_TSTAMP_TYPE_MONOTONIC, /* posix_clock_monotonic equivalent */
-+ SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW, /* monotonic_raw (no NTP) */
-+ SNDRV_PCM_TSTAMP_TYPE_LAST = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW,
-+};
-+
-+/* channel positions */
-+enum {
-+ SNDRV_CHMAP_UNKNOWN = 0,
-+ SNDRV_CHMAP_NA, /* N/A, silent */
-+ SNDRV_CHMAP_MONO, /* mono stream */
-+ /* this follows the alsa-lib mixer channel value + 3 */
-+ SNDRV_CHMAP_FL, /* front left */
-+ SNDRV_CHMAP_FR, /* front right */
-+ SNDRV_CHMAP_RL, /* rear left */
-+ SNDRV_CHMAP_RR, /* rear right */
-+ SNDRV_CHMAP_FC, /* front center */
-+ SNDRV_CHMAP_LFE, /* LFE */
-+ SNDRV_CHMAP_SL, /* side left */
-+ SNDRV_CHMAP_SR, /* side right */
-+ SNDRV_CHMAP_RC, /* rear center */
-+ /* new definitions */
-+ SNDRV_CHMAP_FLC, /* front left center */
-+ SNDRV_CHMAP_FRC, /* front right center */
-+ SNDRV_CHMAP_RLC, /* rear left center */
-+ SNDRV_CHMAP_RRC, /* rear right center */
-+ SNDRV_CHMAP_FLW, /* front left wide */
-+ SNDRV_CHMAP_FRW, /* front right wide */
-+ SNDRV_CHMAP_FLH, /* front left high */
-+ SNDRV_CHMAP_FCH, /* front center high */
-+ SNDRV_CHMAP_FRH, /* front right high */
-+ SNDRV_CHMAP_TC, /* top center */
-+ SNDRV_CHMAP_TFL, /* top front left */
-+ SNDRV_CHMAP_TFR, /* top front right */
-+ SNDRV_CHMAP_TFC, /* top front center */
-+ SNDRV_CHMAP_TRL, /* top rear left */
-+ SNDRV_CHMAP_TRR, /* top rear right */
-+ SNDRV_CHMAP_TRC, /* top rear center */
-+ /* new definitions for UAC2 */
-+ SNDRV_CHMAP_TFLC, /* top front left center */
-+ SNDRV_CHMAP_TFRC, /* top front right center */
-+ SNDRV_CHMAP_TSL, /* top side left */
-+ SNDRV_CHMAP_TSR, /* top side right */
-+ SNDRV_CHMAP_LLFE, /* left LFE */
-+ SNDRV_CHMAP_RLFE, /* right LFE */
-+ SNDRV_CHMAP_BC, /* bottom center */
-+ SNDRV_CHMAP_BLC, /* bottom left center */
-+ SNDRV_CHMAP_BRC, /* bottom right center */
-+ SNDRV_CHMAP_LAST = SNDRV_CHMAP_BRC,
-+};
-+
-+#define SNDRV_CHMAP_POSITION_MASK 0xffff
-+#define SNDRV_CHMAP_PHASE_INVERSE (0x01 << 16)
-+#define SNDRV_CHMAP_DRIVER_SPEC (0x02 << 16)
-+
-+#define SNDRV_PCM_IOCTL_PVERSION _IOR('A', 0x00, int)
-+#define SNDRV_PCM_IOCTL_INFO _IOR('A', 0x01, struct snd_pcm_info)
-+#define SNDRV_PCM_IOCTL_TSTAMP _IOW('A', 0x02, int)
-+#define SNDRV_PCM_IOCTL_TTSTAMP _IOW('A', 0x03, int)
-+#define SNDRV_PCM_IOCTL_USER_PVERSION _IOW('A', 0x04, int)
-+#define SNDRV_PCM_IOCTL_HW_REFINE _IOWR('A', 0x10, struct snd_pcm_hw_params)
-+#define SNDRV_PCM_IOCTL_HW_PARAMS _IOWR('A', 0x11, struct snd_pcm_hw_params)
-+#define SNDRV_PCM_IOCTL_HW_FREE _IO('A', 0x12)
-+#define SNDRV_PCM_IOCTL_SW_PARAMS _IOWR('A', 0x13, struct snd_pcm_sw_params)
-+#define SNDRV_PCM_IOCTL_STATUS _IOR('A', 0x20, struct snd_pcm_status)
-+#define SNDRV_PCM_IOCTL_DELAY _IOR('A', 0x21, snd_pcm_sframes_t)
-+#define SNDRV_PCM_IOCTL_HWSYNC _IO('A', 0x22)
-+#define SNDRV_PCM_IOCTL_SYNC_PTR _IOWR('A', 0x23, struct snd_pcm_sync_ptr)
-+#define SNDRV_PCM_IOCTL_STATUS_EXT _IOWR('A', 0x24, struct snd_pcm_status)
-+#define SNDRV_PCM_IOCTL_CHANNEL_INFO _IOR('A', 0x32, struct snd_pcm_channel_info)
-+#define SNDRV_PCM_IOCTL_PREPARE _IO('A', 0x40)
-+#define SNDRV_PCM_IOCTL_RESET _IO('A', 0x41)
-+#define SNDRV_PCM_IOCTL_START _IO('A', 0x42)
-+#define SNDRV_PCM_IOCTL_DROP _IO('A', 0x43)
-+#define SNDRV_PCM_IOCTL_DRAIN _IO('A', 0x44)
-+#define SNDRV_PCM_IOCTL_PAUSE _IOW('A', 0x45, int)
-+#define SNDRV_PCM_IOCTL_REWIND _IOW('A', 0x46, snd_pcm_uframes_t)
-+#define SNDRV_PCM_IOCTL_RESUME _IO('A', 0x47)
-+#define SNDRV_PCM_IOCTL_XRUN _IO('A', 0x48)
-+#define SNDRV_PCM_IOCTL_FORWARD _IOW('A', 0x49, snd_pcm_uframes_t)
-+#define SNDRV_PCM_IOCTL_WRITEI_FRAMES _IOW('A', 0x50, struct snd_xferi)
-+#define SNDRV_PCM_IOCTL_READI_FRAMES _IOR('A', 0x51, struct snd_xferi)
-+#define SNDRV_PCM_IOCTL_WRITEN_FRAMES _IOW('A', 0x52, struct snd_xfern)
-+#define SNDRV_PCM_IOCTL_READN_FRAMES _IOR('A', 0x53, struct snd_xfern)
-+#define SNDRV_PCM_IOCTL_LINK _IOW('A', 0x60, int)
-+#define SNDRV_PCM_IOCTL_UNLINK _IO('A', 0x61)
-+
-+/*****************************************************************************
-+ * *
-+ * MIDI v1.0 interface *
-+ * *
-+ *****************************************************************************/
-+
-+/*
-+ * Raw MIDI section - /dev/snd/midi??
-+ */
-+
-+#define SNDRV_RAWMIDI_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 0)
-+
-+enum {
-+ SNDRV_RAWMIDI_STREAM_OUTPUT = 0,
-+ SNDRV_RAWMIDI_STREAM_INPUT,
-+ SNDRV_RAWMIDI_STREAM_LAST = SNDRV_RAWMIDI_STREAM_INPUT,
-+};
-+
-+#define SNDRV_RAWMIDI_INFO_OUTPUT 0x00000001
-+#define SNDRV_RAWMIDI_INFO_INPUT 0x00000002
-+#define SNDRV_RAWMIDI_INFO_DUPLEX 0x00000004
-+
-+struct snd_rawmidi_info {
-+ unsigned int device; /* RO/WR (control): device number */
-+ unsigned int subdevice; /* RO/WR (control): subdevice number */
-+ int stream; /* WR: stream */
-+ int card; /* R: card number */
-+ unsigned int flags; /* SNDRV_RAWMIDI_INFO_XXXX */
-+ unsigned char id[64]; /* ID (user selectable) */
-+ unsigned char name[80]; /* name of device */
-+ unsigned char subname[32]; /* name of active or selected subdevice */
-+ unsigned int subdevices_count;
-+ unsigned int subdevices_avail;
-+ unsigned char reserved[64]; /* reserved for future use */
-+};
-+
-+struct snd_rawmidi_params {
-+ int stream;
-+ size_t buffer_size; /* queue size in bytes */
-+ size_t avail_min; /* minimum avail bytes for wakeup */
-+ unsigned int no_active_sensing: 1; /* do not send active sensing byte in close() */
-+ unsigned char reserved[16]; /* reserved for future use */
-+};
-+
-+struct snd_rawmidi_status {
-+ int stream;
-+ struct timespec tstamp; /* Timestamp */
-+ size_t avail; /* available bytes */
-+ size_t xruns; /* count of overruns since last status (in bytes) */
-+ unsigned char reserved[16]; /* reserved for future use */
-+};
-+
-+#define SNDRV_RAWMIDI_IOCTL_PVERSION _IOR('W', 0x00, int)
-+#define SNDRV_RAWMIDI_IOCTL_INFO _IOR('W', 0x01, struct snd_rawmidi_info)
-+#define SNDRV_RAWMIDI_IOCTL_PARAMS _IOWR('W', 0x10, struct snd_rawmidi_params)
-+#define SNDRV_RAWMIDI_IOCTL_STATUS _IOWR('W', 0x20, struct snd_rawmidi_status)
-+#define SNDRV_RAWMIDI_IOCTL_DROP _IOW('W', 0x30, int)
-+#define SNDRV_RAWMIDI_IOCTL_DRAIN _IOW('W', 0x31, int)
-+
-+/*
-+ * Timer section - /dev/snd/timer
-+ */
-+
-+#define SNDRV_TIMER_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 6)
-+
-+enum {
-+ SNDRV_TIMER_CLASS_NONE = -1,
-+ SNDRV_TIMER_CLASS_SLAVE = 0,
-+ SNDRV_TIMER_CLASS_GLOBAL,
-+ SNDRV_TIMER_CLASS_CARD,
-+ SNDRV_TIMER_CLASS_PCM,
-+ SNDRV_TIMER_CLASS_LAST = SNDRV_TIMER_CLASS_PCM,
-+};
-+
-+/* slave timer classes */
-+enum {
-+ SNDRV_TIMER_SCLASS_NONE = 0,
-+ SNDRV_TIMER_SCLASS_APPLICATION,
-+ SNDRV_TIMER_SCLASS_SEQUENCER, /* alias */
-+ SNDRV_TIMER_SCLASS_OSS_SEQUENCER, /* alias */
-+ SNDRV_TIMER_SCLASS_LAST = SNDRV_TIMER_SCLASS_OSS_SEQUENCER,
-+};
-+
-+/* global timers (device member) */
-+#define SNDRV_TIMER_GLOBAL_SYSTEM 0
-+#define SNDRV_TIMER_GLOBAL_RTC 1 /* unused */
-+#define SNDRV_TIMER_GLOBAL_HPET 2
-+#define SNDRV_TIMER_GLOBAL_HRTIMER 3
-+
-+/* info flags */
-+#define SNDRV_TIMER_FLG_SLAVE (1<<0) /* cannot be controlled */
-+
-+struct snd_timer_id {
-+ int dev_class;
-+ int dev_sclass;
-+ int card;
-+ int device;
-+ int subdevice;
-+};
-+
-+struct snd_timer_ginfo {
-+ struct snd_timer_id tid; /* requested timer ID */
-+ unsigned int flags; /* timer flags - SNDRV_TIMER_FLG_* */
-+ int card; /* card number */
-+ unsigned char id[64]; /* timer identification */
-+ unsigned char name[80]; /* timer name */
-+ unsigned long reserved0; /* reserved for future use */
-+ unsigned long resolution; /* average period resolution in ns */
-+ unsigned long resolution_min; /* minimal period resolution in ns */
-+ unsigned long resolution_max; /* maximal period resolution in ns */
-+ unsigned int clients; /* active timer clients */
-+ unsigned char reserved[32];
-+};
-+
-+struct snd_timer_gparams {
-+ struct snd_timer_id tid; /* requested timer ID */
-+ unsigned long period_num; /* requested precise period duration (in seconds) - numerator */
-+ unsigned long period_den; /* requested precise period duration (in seconds) - denominator */
-+ unsigned char reserved[32];
-+};
-+
-+struct snd_timer_gstatus {
-+ struct snd_timer_id tid; /* requested timer ID */
-+ unsigned long resolution; /* current period resolution in ns */
-+ unsigned long resolution_num; /* precise current period resolution (in seconds) - numerator */
-+ unsigned long resolution_den; /* precise current period resolution (in seconds) - denominator */
-+ unsigned char reserved[32];
-+};
-+
-+struct snd_timer_select {
-+ struct snd_timer_id id; /* bind to timer ID */
-+ unsigned char reserved[32]; /* reserved */
-+};
-+
-+struct snd_timer_info {
-+ unsigned int flags; /* timer flags - SNDRV_TIMER_FLG_* */
-+ int card; /* card number */
-+ unsigned char id[64]; /* timer identificator */
-+ unsigned char name[80]; /* timer name */
-+ unsigned long reserved0; /* reserved for future use */
-+ unsigned long resolution; /* average period resolution in ns */
-+ unsigned char reserved[64]; /* reserved */
-+};
-+
-+#define SNDRV_TIMER_PSFLG_AUTO (1<<0) /* auto start, otherwise one-shot */
-+#define SNDRV_TIMER_PSFLG_EXCLUSIVE (1<<1) /* exclusive use, precise start/stop/pause/continue */
-+#define SNDRV_TIMER_PSFLG_EARLY_EVENT (1<<2) /* write early event to the poll queue */
-+
-+struct snd_timer_params {
-+ unsigned int flags; /* flags - SNDRV_TIMER_PSFLG_* */
-+ unsigned int ticks; /* requested resolution in ticks */
-+ unsigned int queue_size; /* total size of queue (32-1024) */
-+ unsigned int reserved0; /* reserved, was: failure locations */
-+ unsigned int filter; /* event filter (bitmask of SNDRV_TIMER_EVENT_*) */
-+ unsigned char reserved[60]; /* reserved */
-+};
-+
-+struct snd_timer_status {
-+ struct timespec tstamp; /* Timestamp - last update */
-+ unsigned int resolution; /* current period resolution in ns */
-+ unsigned int lost; /* counter of master tick lost */
-+ unsigned int overrun; /* count of read queue overruns */
-+ unsigned int queue; /* used queue size */
-+ unsigned char reserved[64]; /* reserved */
-+};
-+
-+#define SNDRV_TIMER_IOCTL_PVERSION _IOR('T', 0x00, int)
-+#define SNDRV_TIMER_IOCTL_NEXT_DEVICE _IOWR('T', 0x01, struct snd_timer_id)
-+#define SNDRV_TIMER_IOCTL_TREAD _IOW('T', 0x02, int)
-+#define SNDRV_TIMER_IOCTL_GINFO _IOWR('T', 0x03, struct snd_timer_ginfo)
-+#define SNDRV_TIMER_IOCTL_GPARAMS _IOW('T', 0x04, struct snd_timer_gparams)
-+#define SNDRV_TIMER_IOCTL_GSTATUS _IOWR('T', 0x05, struct snd_timer_gstatus)
-+#define SNDRV_TIMER_IOCTL_SELECT _IOW('T', 0x10, struct snd_timer_select)
-+#define SNDRV_TIMER_IOCTL_INFO _IOR('T', 0x11, struct snd_timer_info)
-+#define SNDRV_TIMER_IOCTL_PARAMS _IOW('T', 0x12, struct snd_timer_params)
-+#define SNDRV_TIMER_IOCTL_STATUS _IOR('T', 0x14, struct snd_timer_status)
-+/* The following four ioctls are changed since 1.0.9 due to confliction */
-+#define SNDRV_TIMER_IOCTL_START _IO('T', 0xa0)
-+#define SNDRV_TIMER_IOCTL_STOP _IO('T', 0xa1)
-+#define SNDRV_TIMER_IOCTL_CONTINUE _IO('T', 0xa2)
-+#define SNDRV_TIMER_IOCTL_PAUSE _IO('T', 0xa3)
-+
-+struct snd_timer_read {
-+ unsigned int resolution;
-+ unsigned int ticks;
-+};
-+
-+enum {
-+ SNDRV_TIMER_EVENT_RESOLUTION = 0, /* val = resolution in ns */
-+ SNDRV_TIMER_EVENT_TICK, /* val = ticks */
-+ SNDRV_TIMER_EVENT_START, /* val = resolution in ns */
-+ SNDRV_TIMER_EVENT_STOP, /* val = 0 */
-+ SNDRV_TIMER_EVENT_CONTINUE, /* val = resolution in ns */
-+ SNDRV_TIMER_EVENT_PAUSE, /* val = 0 */
-+ SNDRV_TIMER_EVENT_EARLY, /* val = 0, early event */
-+ SNDRV_TIMER_EVENT_SUSPEND, /* val = 0 */
-+ SNDRV_TIMER_EVENT_RESUME, /* val = resolution in ns */
-+ /* master timer events for slave timer instances */
-+ SNDRV_TIMER_EVENT_MSTART = SNDRV_TIMER_EVENT_START + 10,
-+ SNDRV_TIMER_EVENT_MSTOP = SNDRV_TIMER_EVENT_STOP + 10,
-+ SNDRV_TIMER_EVENT_MCONTINUE = SNDRV_TIMER_EVENT_CONTINUE + 10,
-+ SNDRV_TIMER_EVENT_MPAUSE = SNDRV_TIMER_EVENT_PAUSE + 10,
-+ SNDRV_TIMER_EVENT_MSUSPEND = SNDRV_TIMER_EVENT_SUSPEND + 10,
-+ SNDRV_TIMER_EVENT_MRESUME = SNDRV_TIMER_EVENT_RESUME + 10,
-+};
-+
-+struct snd_timer_tread {
-+ int event;
-+ struct timespec tstamp;
-+ unsigned int val;
-+};
-+
-+/****************************************************************************
-+ * *
-+ * Section for driver control interface - /dev/snd/control? *
-+ * *
-+ ****************************************************************************/
-+
-+#define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 7)
-+
-+struct snd_ctl_card_info {
-+ int card; /* card number */
-+ int pad; /* reserved for future (was type) */
-+ unsigned char id[16]; /* ID of card (user selectable) */
-+ unsigned char driver[16]; /* Driver name */
-+ unsigned char name[32]; /* Short name of soundcard */
-+ unsigned char longname[80]; /* name + info text about soundcard */
-+ unsigned char reserved_[16]; /* reserved for future (was ID of mixer) */
-+ unsigned char mixername[80]; /* visual mixer identification */
-+ unsigned char components[128]; /* card components / fine identification, delimited with one space (AC97 etc..) */
-+};
-+
-+typedef int __bitwise snd_ctl_elem_type_t;
-+#define SNDRV_CTL_ELEM_TYPE_NONE ((__force snd_ctl_elem_type_t) 0) /* invalid */
-+#define SNDRV_CTL_ELEM_TYPE_BOOLEAN ((__force snd_ctl_elem_type_t) 1) /* boolean type */
-+#define SNDRV_CTL_ELEM_TYPE_INTEGER ((__force snd_ctl_elem_type_t) 2) /* integer type */
-+#define SNDRV_CTL_ELEM_TYPE_ENUMERATED ((__force snd_ctl_elem_type_t) 3) /* enumerated type */
-+#define SNDRV_CTL_ELEM_TYPE_BYTES ((__force snd_ctl_elem_type_t) 4) /* byte array */
-+#define SNDRV_CTL_ELEM_TYPE_IEC958 ((__force snd_ctl_elem_type_t) 5) /* IEC958 (S/PDIF) setup */
-+#define SNDRV_CTL_ELEM_TYPE_INTEGER64 ((__force snd_ctl_elem_type_t) 6) /* 64-bit integer type */
-+#define SNDRV_CTL_ELEM_TYPE_LAST SNDRV_CTL_ELEM_TYPE_INTEGER64
-+
-+typedef int __bitwise snd_ctl_elem_iface_t;
-+#define SNDRV_CTL_ELEM_IFACE_CARD ((__force snd_ctl_elem_iface_t) 0) /* global control */
-+#define SNDRV_CTL_ELEM_IFACE_HWDEP ((__force snd_ctl_elem_iface_t) 1) /* hardware dependent device */
-+#define SNDRV_CTL_ELEM_IFACE_MIXER ((__force snd_ctl_elem_iface_t) 2) /* virtual mixer device */
-+#define SNDRV_CTL_ELEM_IFACE_PCM ((__force snd_ctl_elem_iface_t) 3) /* PCM device */
-+#define SNDRV_CTL_ELEM_IFACE_RAWMIDI ((__force snd_ctl_elem_iface_t) 4) /* RawMidi device */
-+#define SNDRV_CTL_ELEM_IFACE_TIMER ((__force snd_ctl_elem_iface_t) 5) /* timer device */
-+#define SNDRV_CTL_ELEM_IFACE_SEQUENCER ((__force snd_ctl_elem_iface_t) 6) /* sequencer client */
-+#define SNDRV_CTL_ELEM_IFACE_LAST SNDRV_CTL_ELEM_IFACE_SEQUENCER
-+
-+#define SNDRV_CTL_ELEM_ACCESS_READ (1<<0)
-+#define SNDRV_CTL_ELEM_ACCESS_WRITE (1<<1)
-+#define SNDRV_CTL_ELEM_ACCESS_READWRITE (SNDRV_CTL_ELEM_ACCESS_READ|SNDRV_CTL_ELEM_ACCESS_WRITE)
-+#define SNDRV_CTL_ELEM_ACCESS_VOLATILE (1<<2) /* control value may be changed without a notification */
-+#define SNDRV_CTL_ELEM_ACCESS_TIMESTAMP (1<<3) /* when was control changed */
-+#define SNDRV_CTL_ELEM_ACCESS_TLV_READ (1<<4) /* TLV read is possible */
-+#define SNDRV_CTL_ELEM_ACCESS_TLV_WRITE (1<<5) /* TLV write is possible */
-+#define SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE (SNDRV_CTL_ELEM_ACCESS_TLV_READ|SNDRV_CTL_ELEM_ACCESS_TLV_WRITE)
-+#define SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND (1<<6) /* TLV command is possible */
-+#define SNDRV_CTL_ELEM_ACCESS_INACTIVE (1<<8) /* control does actually nothing, but may be updated */
-+#define SNDRV_CTL_ELEM_ACCESS_LOCK (1<<9) /* write lock */
-+#define SNDRV_CTL_ELEM_ACCESS_OWNER (1<<10) /* write lock owner */
-+#define SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK (1<<28) /* kernel use a TLV callback */
-+#define SNDRV_CTL_ELEM_ACCESS_USER (1<<29) /* user space element */
-+/* bits 30 and 31 are obsoleted (for indirect access) */
-+
-+/* for further details see the ACPI and PCI power management specification */
-+#define SNDRV_CTL_POWER_D0 0x0000 /* full On */
-+#define SNDRV_CTL_POWER_D1 0x0100 /* partial On */
-+#define SNDRV_CTL_POWER_D2 0x0200 /* partial On */
-+#define SNDRV_CTL_POWER_D3 0x0300 /* Off */
-+#define SNDRV_CTL_POWER_D3hot (SNDRV_CTL_POWER_D3|0x0000) /* Off, with power */
-+#define SNDRV_CTL_POWER_D3cold (SNDRV_CTL_POWER_D3|0x0001) /* Off, without power */
-+
-+#define SNDRV_CTL_ELEM_ID_NAME_MAXLEN 44
-+
-+struct snd_ctl_elem_id {
-+ unsigned int numid; /* numeric identifier, zero = invalid */
-+ snd_ctl_elem_iface_t iface; /* interface identifier */
-+ unsigned int device; /* device/client number */
-+ unsigned int subdevice; /* subdevice (substream) number */
-+ unsigned char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; /* ASCII name of item */
-+ unsigned int index; /* index of item */
-+};
-+
-+struct snd_ctl_elem_list {
-+ unsigned int offset; /* W: first element ID to get */
-+ unsigned int space; /* W: count of element IDs to get */
-+ unsigned int used; /* R: count of element IDs set */
-+ unsigned int count; /* R: count of all elements */
-+ struct snd_ctl_elem_id __user *pids; /* R: IDs */
-+ unsigned char reserved[50];
-+};
-+
-+struct snd_ctl_elem_info {
-+ struct snd_ctl_elem_id id; /* W: element ID */
-+ snd_ctl_elem_type_t type; /* R: value type - SNDRV_CTL_ELEM_TYPE_* */
-+ unsigned int access; /* R: value access (bitmask) - SNDRV_CTL_ELEM_ACCESS_* */
-+ unsigned int count; /* count of values */
-+ __kernel_pid_t owner; /* owner's PID of this control */
-+ union {
-+ struct {
-+ long min; /* R: minimum value */
-+ long max; /* R: maximum value */
-+ long step; /* R: step (0 variable) */
-+ } integer;
-+ struct {
-+ long long min; /* R: minimum value */
-+ long long max; /* R: maximum value */
-+ long long step; /* R: step (0 variable) */
-+ } integer64;
-+ struct {
-+ unsigned int items; /* R: number of items */
-+ unsigned int item; /* W: item number */
-+ char name[64]; /* R: value name */
-+ __u64 names_ptr; /* W: names list (ELEM_ADD only) */
-+ unsigned int names_length;
-+ } enumerated;
-+ unsigned char reserved[128];
-+ } value;
-+ union {
-+ unsigned short d[4]; /* dimensions */
-+ unsigned short *d_ptr; /* indirect - obsoleted */
-+ } dimen;
-+ unsigned char reserved[64-4*sizeof(unsigned short)];
-+};
-+
-+struct snd_ctl_elem_value {
-+ struct snd_ctl_elem_id id; /* W: element ID */
-+ unsigned int indirect: 1; /* W: indirect access - obsoleted */
-+ union {
-+ union {
-+ long value[128];
-+ long *value_ptr; /* obsoleted */
-+ } integer;
-+ union {
-+ long long value[64];
-+ long long *value_ptr; /* obsoleted */
-+ } integer64;
-+ union {
-+ unsigned int item[128];
-+ unsigned int *item_ptr; /* obsoleted */
-+ } enumerated;
-+ union {
-+ unsigned char data[512];
-+ unsigned char *data_ptr; /* obsoleted */
-+ } bytes;
-+ struct snd_aes_iec958 iec958;
-+ } value; /* RO */
-+ struct timespec tstamp;
-+ unsigned char reserved[128-sizeof(struct timespec)];
-+};
-+
-+struct snd_ctl_tlv {
-+ unsigned int numid; /* control element numeric identification */
-+ unsigned int length; /* in bytes aligned to 4 */
-+ unsigned int tlv[0]; /* first TLV */
-+};
-+
-+#define SNDRV_CTL_IOCTL_PVERSION _IOR('U', 0x00, int)
-+#define SNDRV_CTL_IOCTL_CARD_INFO _IOR('U', 0x01, struct snd_ctl_card_info)
-+#define SNDRV_CTL_IOCTL_ELEM_LIST _IOWR('U', 0x10, struct snd_ctl_elem_list)
-+#define SNDRV_CTL_IOCTL_ELEM_INFO _IOWR('U', 0x11, struct snd_ctl_elem_info)
-+#define SNDRV_CTL_IOCTL_ELEM_READ _IOWR('U', 0x12, struct snd_ctl_elem_value)
-+#define SNDRV_CTL_IOCTL_ELEM_WRITE _IOWR('U', 0x13, struct snd_ctl_elem_value)
-+#define SNDRV_CTL_IOCTL_ELEM_LOCK _IOW('U', 0x14, struct snd_ctl_elem_id)
-+#define SNDRV_CTL_IOCTL_ELEM_UNLOCK _IOW('U', 0x15, struct snd_ctl_elem_id)
-+#define SNDRV_CTL_IOCTL_SUBSCRIBE_EVENTS _IOWR('U', 0x16, int)
-+#define SNDRV_CTL_IOCTL_ELEM_ADD _IOWR('U', 0x17, struct snd_ctl_elem_info)
-+#define SNDRV_CTL_IOCTL_ELEM_REPLACE _IOWR('U', 0x18, struct snd_ctl_elem_info)
-+#define SNDRV_CTL_IOCTL_ELEM_REMOVE _IOWR('U', 0x19, struct snd_ctl_elem_id)
-+#define SNDRV_CTL_IOCTL_TLV_READ _IOWR('U', 0x1a, struct snd_ctl_tlv)
-+#define SNDRV_CTL_IOCTL_TLV_WRITE _IOWR('U', 0x1b, struct snd_ctl_tlv)
-+#define SNDRV_CTL_IOCTL_TLV_COMMAND _IOWR('U', 0x1c, struct snd_ctl_tlv)
-+#define SNDRV_CTL_IOCTL_HWDEP_NEXT_DEVICE _IOWR('U', 0x20, int)
-+#define SNDRV_CTL_IOCTL_HWDEP_INFO _IOR('U', 0x21, struct snd_hwdep_info)
-+#define SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE _IOR('U', 0x30, int)
-+#define SNDRV_CTL_IOCTL_PCM_INFO _IOWR('U', 0x31, struct snd_pcm_info)
-+#define SNDRV_CTL_IOCTL_PCM_PREFER_SUBDEVICE _IOW('U', 0x32, int)
-+#define SNDRV_CTL_IOCTL_RAWMIDI_NEXT_DEVICE _IOWR('U', 0x40, int)
-+#define SNDRV_CTL_IOCTL_RAWMIDI_INFO _IOWR('U', 0x41, struct snd_rawmidi_info)
-+#define SNDRV_CTL_IOCTL_RAWMIDI_PREFER_SUBDEVICE _IOW('U', 0x42, int)
-+#define SNDRV_CTL_IOCTL_POWER _IOWR('U', 0xd0, int)
-+#define SNDRV_CTL_IOCTL_POWER_STATE _IOR('U', 0xd1, int)
-+
-+/*
-+ * Read interface.
-+ */
-+
-+enum sndrv_ctl_event_type {
-+ SNDRV_CTL_EVENT_ELEM = 0,
-+ SNDRV_CTL_EVENT_LAST = SNDRV_CTL_EVENT_ELEM,
-+};
-+
-+#define SNDRV_CTL_EVENT_MASK_VALUE (1<<0) /* element value was changed */
-+#define SNDRV_CTL_EVENT_MASK_INFO (1<<1) /* element info was changed */
-+#define SNDRV_CTL_EVENT_MASK_ADD (1<<2) /* element was added */
-+#define SNDRV_CTL_EVENT_MASK_TLV (1<<3) /* element TLV tree was changed */
-+#define SNDRV_CTL_EVENT_MASK_REMOVE (~0U) /* element was removed */
-+
-+struct snd_ctl_event {
-+ int type; /* event type - SNDRV_CTL_EVENT_* */
-+ union {
-+ struct {
-+ unsigned int mask;
-+ struct snd_ctl_elem_id id;
-+ } elem;
-+ unsigned char data8[60];
-+ } data;
-+};
-+
-+/*
-+ * Control names
-+ */
-+
-+#define SNDRV_CTL_NAME_NONE ""
-+#define SNDRV_CTL_NAME_PLAYBACK "Playback "
-+#define SNDRV_CTL_NAME_CAPTURE "Capture "
-+
-+#define SNDRV_CTL_NAME_IEC958_NONE ""
-+#define SNDRV_CTL_NAME_IEC958_SWITCH "Switch"
-+#define SNDRV_CTL_NAME_IEC958_VOLUME "Volume"
-+#define SNDRV_CTL_NAME_IEC958_DEFAULT "Default"
-+#define SNDRV_CTL_NAME_IEC958_MASK "Mask"
-+#define SNDRV_CTL_NAME_IEC958_CON_MASK "Con Mask"
-+#define SNDRV_CTL_NAME_IEC958_PRO_MASK "Pro Mask"
-+#define SNDRV_CTL_NAME_IEC958_PCM_STREAM "PCM Stream"
-+#define SNDRV_CTL_NAME_IEC958(expl,direction,what) "IEC958 " expl SNDRV_CTL_NAME_##direction SNDRV_CTL_NAME_IEC958_##what
-+
-+#endif /* _UAPI__SOUND_ASOUND_H */
-diff --git a/include/sound/uapi/asound_fm.h b/include/sound/uapi/asound_fm.h
-new file mode 100644
-index 00000000..8471f404
---- /dev/null
-+++ b/include/sound/uapi/asound_fm.h
-@@ -0,0 +1,135 @@
-+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
-+#ifndef __SOUND_ASOUND_FM_H
-+#define __SOUND_ASOUND_FM_H
-+
-+/*
-+ * Advanced Linux Sound Architecture - ALSA
-+ *
-+ * Interface file between ALSA driver & user space
-+ * Copyright (c) 1994-98 by Jaroslav Kysela <perex@perex.cz>,
-+ * 4Front Technologies
-+ *
-+ * Direct FM control
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+
-+#define SNDRV_DM_FM_MODE_OPL2 0x00
-+#define SNDRV_DM_FM_MODE_OPL3 0x01
-+
-+struct snd_dm_fm_info {
-+ unsigned char fm_mode; /* OPL mode, see SNDRV_DM_FM_MODE_XXX */
-+ unsigned char rhythm; /* percussion mode flag */
-+};
-+
-+/*
-+ * Data structure composing an FM "note" or sound event.
-+ */
-+
-+struct snd_dm_fm_voice {
-+ unsigned char op; /* operator cell (0 or 1) */
-+ unsigned char voice; /* FM voice (0 to 17) */
-+
-+ unsigned char am; /* amplitude modulation */
-+ unsigned char vibrato; /* vibrato effect */
-+ unsigned char do_sustain; /* sustain phase */
-+ unsigned char kbd_scale; /* keyboard scaling */
-+ unsigned char harmonic; /* 4 bits: harmonic and multiplier */
-+ unsigned char scale_level; /* 2 bits: decrease output freq rises */
-+ unsigned char volume; /* 6 bits: volume */
-+
-+ unsigned char attack; /* 4 bits: attack rate */
-+ unsigned char decay; /* 4 bits: decay rate */
-+ unsigned char sustain; /* 4 bits: sustain level */
-+ unsigned char release; /* 4 bits: release rate */
-+
-+ unsigned char feedback; /* 3 bits: feedback for op0 */
-+ unsigned char connection; /* 0 for serial, 1 for parallel */
-+ unsigned char left; /* stereo left */
-+ unsigned char right; /* stereo right */
-+ unsigned char waveform; /* 3 bits: waveform shape */
-+};
-+
-+/*
-+ * This describes an FM note by its voice, octave, frequency number (10bit)
-+ * and key on/off.
-+ */
-+
-+struct snd_dm_fm_note {
-+ unsigned char voice; /* 0-17 voice channel */
-+ unsigned char octave; /* 3 bits: what octave to play */
-+ unsigned int fnum; /* 10 bits: frequency number */
-+ unsigned char key_on; /* set for active, clear for silent */
-+};
-+
-+/*
-+ * FM parameters that apply globally to all voices, and thus are not "notes"
-+ */
-+
-+struct snd_dm_fm_params {
-+ unsigned char am_depth; /* amplitude modulation depth (1=hi) */
-+ unsigned char vib_depth; /* vibrato depth (1=hi) */
-+ unsigned char kbd_split; /* keyboard split */
-+ unsigned char rhythm; /* percussion mode select */
-+
-+ /* This block is the percussion instrument data */
-+ unsigned char bass;
-+ unsigned char snare;
-+ unsigned char tomtom;
-+ unsigned char cymbal;
-+ unsigned char hihat;
-+};
-+
-+/*
-+ * FM mode ioctl settings
-+ */
-+
-+#define SNDRV_DM_FM_IOCTL_INFO _IOR('H', 0x20, struct snd_dm_fm_info)
-+#define SNDRV_DM_FM_IOCTL_RESET _IO ('H', 0x21)
-+#define SNDRV_DM_FM_IOCTL_PLAY_NOTE _IOW('H', 0x22, struct snd_dm_fm_note)
-+#define SNDRV_DM_FM_IOCTL_SET_VOICE _IOW('H', 0x23, struct snd_dm_fm_voice)
-+#define SNDRV_DM_FM_IOCTL_SET_PARAMS _IOW('H', 0x24, struct snd_dm_fm_params)
-+#define SNDRV_DM_FM_IOCTL_SET_MODE _IOW('H', 0x25, int)
-+/* for OPL3 only */
-+#define SNDRV_DM_FM_IOCTL_SET_CONNECTION _IOW('H', 0x26, int)
-+/* SBI patch management */
-+#define SNDRV_DM_FM_IOCTL_CLEAR_PATCHES _IO ('H', 0x40)
-+
-+#define SNDRV_DM_FM_OSS_IOCTL_RESET 0x20
-+#define SNDRV_DM_FM_OSS_IOCTL_PLAY_NOTE 0x21
-+#define SNDRV_DM_FM_OSS_IOCTL_SET_VOICE 0x22
-+#define SNDRV_DM_FM_OSS_IOCTL_SET_PARAMS 0x23
-+#define SNDRV_DM_FM_OSS_IOCTL_SET_MODE 0x24
-+#define SNDRV_DM_FM_OSS_IOCTL_SET_OPL 0x25
-+
-+/*
-+ * Patch Record - fixed size for write
-+ */
-+
-+#define FM_KEY_SBI "SBI\032"
-+#define FM_KEY_2OP "2OP\032"
-+#define FM_KEY_4OP "4OP\032"
-+
-+struct sbi_patch {
-+ unsigned char prog;
-+ unsigned char bank;
-+ char key[4];
-+ char name[25];
-+ char extension[7];
-+ unsigned char data[32];
-+};
-+
-+#endif /* __SOUND_ASOUND_FM_H */
-diff --git a/include/sound/uapi/emu10k1.h b/include/sound/uapi/emu10k1.h
-new file mode 100644
-index 00000000..c1150e4d
---- /dev/null
-+++ b/include/sound/uapi/emu10k1.h
-@@ -0,0 +1,395 @@
-+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
-+/*
-+ * Copyright (c) by Jaroslav Kysela <perex@perex.cz>,
-+ * Creative Labs, Inc.
-+ * Definitions for EMU10K1 (SB Live!) chips
-+ *
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef _UAPI__SOUND_EMU10K1_H
-+#define _UAPI__SOUND_EMU10K1_H
-+
-+/*
-+ * ---- FX8010 ----
-+ */
-+
-+#define EMU10K1_CARD_CREATIVE 0x00000000
-+#define EMU10K1_CARD_EMUAPS 0x00000001
-+
-+#define EMU10K1_FX8010_PCM_COUNT 8
-+
-+/*
-+ * Following definition is copied from linux/types.h to support compiling
-+ * this header file in userspace since they are not generally available for
-+ * uapi headers.
-+ */
-+#define __EMU10K1_DECLARE_BITMAP(name,bits) \
-+ unsigned long name[(bits) / (sizeof(unsigned long) * 8)]
-+
-+/* instruction set */
-+#define iMAC0 0x00 /* R = A + (X * Y >> 31) ; saturation */
-+#define iMAC1 0x01 /* R = A + (-X * Y >> 31) ; saturation */
-+#define iMAC2 0x02 /* R = A + (X * Y >> 31) ; wraparound */
-+#define iMAC3 0x03 /* R = A + (-X * Y >> 31) ; wraparound */
-+#define iMACINT0 0x04 /* R = A + X * Y ; saturation */
-+#define iMACINT1 0x05 /* R = A + X * Y ; wraparound (31-bit) */
-+#define iACC3 0x06 /* R = A + X + Y ; saturation */
-+#define iMACMV 0x07 /* R = A, acc += X * Y >> 31 */
-+#define iANDXOR 0x08 /* R = (A & X) ^ Y */
-+#define iTSTNEG 0x09 /* R = (A >= Y) ? X : ~X */
-+#define iLIMITGE 0x0a /* R = (A >= Y) ? X : Y */
-+#define iLIMITLT 0x0b /* R = (A < Y) ? X : Y */
-+#define iLOG 0x0c /* R = linear_data, A (log_data), X (max_exp), Y (format_word) */
-+#define iEXP 0x0d /* R = log_data, A (linear_data), X (max_exp), Y (format_word) */
-+#define iINTERP 0x0e /* R = A + (X * (Y - A) >> 31) ; saturation */
-+#define iSKIP 0x0f /* R = A (cc_reg), X (count), Y (cc_test) */
-+
-+/* GPRs */
-+#define FXBUS(x) (0x00 + (x)) /* x = 0x00 - 0x0f */
-+#define EXTIN(x) (0x10 + (x)) /* x = 0x00 - 0x0f */
-+#define EXTOUT(x) (0x20 + (x)) /* x = 0x00 - 0x0f physical outs -> FXWC low 16 bits */
-+#define FXBUS2(x) (0x30 + (x)) /* x = 0x00 - 0x0f copies of fx buses for capture -> FXWC high 16 bits */
-+ /* NB: 0x31 and 0x32 are shared with Center/LFE on SB live 5.1 */
-+
-+#define C_00000000 0x40
-+#define C_00000001 0x41
-+#define C_00000002 0x42
-+#define C_00000003 0x43
-+#define C_00000004 0x44
-+#define C_00000008 0x45
-+#define C_00000010 0x46
-+#define C_00000020 0x47
-+#define C_00000100 0x48
-+#define C_00010000 0x49
-+#define C_00080000 0x4a
-+#define C_10000000 0x4b
-+#define C_20000000 0x4c
-+#define C_40000000 0x4d
-+#define C_80000000 0x4e
-+#define C_7fffffff 0x4f
-+#define C_ffffffff 0x50
-+#define C_fffffffe 0x51
-+#define C_c0000000 0x52
-+#define C_4f1bbcdc 0x53
-+#define C_5a7ef9db 0x54
-+#define C_00100000 0x55 /* ?? */
-+#define GPR_ACCU 0x56 /* ACCUM, accumulator */
-+#define GPR_COND 0x57 /* CCR, condition register */
-+#define GPR_NOISE0 0x58 /* noise source */
-+#define GPR_NOISE1 0x59 /* noise source */
-+#define GPR_IRQ 0x5a /* IRQ register */
-+#define GPR_DBAC 0x5b /* TRAM Delay Base Address Counter */
-+#define GPR(x) (FXGPREGBASE + (x)) /* free GPRs: x = 0x00 - 0xff */
-+#define ITRAM_DATA(x) (TANKMEMDATAREGBASE + 0x00 + (x)) /* x = 0x00 - 0x7f */
-+#define ETRAM_DATA(x) (TANKMEMDATAREGBASE + 0x80 + (x)) /* x = 0x00 - 0x1f */
-+#define ITRAM_ADDR(x) (TANKMEMADDRREGBASE + 0x00 + (x)) /* x = 0x00 - 0x7f */
-+#define ETRAM_ADDR(x) (TANKMEMADDRREGBASE + 0x80 + (x)) /* x = 0x00 - 0x1f */
-+
-+#define A_ITRAM_DATA(x) (TANKMEMDATAREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */
-+#define A_ETRAM_DATA(x) (TANKMEMDATAREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */
-+#define A_ITRAM_ADDR(x) (TANKMEMADDRREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */
-+#define A_ETRAM_ADDR(x) (TANKMEMADDRREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */
-+#define A_ITRAM_CTL(x) (A_TANKMEMCTLREGBASE + 0x00 + (x)) /* x = 0x00 - 0xbf */
-+#define A_ETRAM_CTL(x) (A_TANKMEMCTLREGBASE + 0xc0 + (x)) /* x = 0x00 - 0x3f */
-+
-+#define A_FXBUS(x) (0x00 + (x)) /* x = 0x00 - 0x3f FX buses */
-+#define A_EXTIN(x) (0x40 + (x)) /* x = 0x00 - 0x0f physical ins */
-+#define A_P16VIN(x) (0x50 + (x)) /* x = 0x00 - 0x0f p16v ins (A2 only) "EMU32 inputs" */
-+#define A_EXTOUT(x) (0x60 + (x)) /* x = 0x00 - 0x1f physical outs -> A_FXWC1 0x79-7f unknown */
-+#define A_FXBUS2(x) (0x80 + (x)) /* x = 0x00 - 0x1f extra outs used for EFX capture -> A_FXWC2 */
-+#define A_EMU32OUTH(x) (0xa0 + (x)) /* x = 0x00 - 0x0f "EMU32_OUT_10 - _1F" - ??? */
-+#define A_EMU32OUTL(x) (0xb0 + (x)) /* x = 0x00 - 0x0f "EMU32_OUT_1 - _F" - ??? */
-+#define A3_EMU32IN(x) (0x160 + (x)) /* x = 0x00 - 0x3f "EMU32_IN_00 - _3F" - Only when .device = 0x0008 */
-+#define A3_EMU32OUT(x) (0x1E0 + (x)) /* x = 0x00 - 0x0f "EMU32_OUT_00 - _3F" - Only when .device = 0x0008 */
-+#define A_GPR(x) (A_FXGPREGBASE + (x))
-+
-+/* cc_reg constants */
-+#define CC_REG_NORMALIZED C_00000001
-+#define CC_REG_BORROW C_00000002
-+#define CC_REG_MINUS C_00000004
-+#define CC_REG_ZERO C_00000008
-+#define CC_REG_SATURATE C_00000010
-+#define CC_REG_NONZERO C_00000100
-+
-+/* FX buses */
-+#define FXBUS_PCM_LEFT 0x00
-+#define FXBUS_PCM_RIGHT 0x01
-+#define FXBUS_PCM_LEFT_REAR 0x02
-+#define FXBUS_PCM_RIGHT_REAR 0x03
-+#define FXBUS_MIDI_LEFT 0x04
-+#define FXBUS_MIDI_RIGHT 0x05
-+#define FXBUS_PCM_CENTER 0x06
-+#define FXBUS_PCM_LFE 0x07
-+#define FXBUS_PCM_LEFT_FRONT 0x08
-+#define FXBUS_PCM_RIGHT_FRONT 0x09
-+#define FXBUS_MIDI_REVERB 0x0c
-+#define FXBUS_MIDI_CHORUS 0x0d
-+#define FXBUS_PCM_LEFT_SIDE 0x0e
-+#define FXBUS_PCM_RIGHT_SIDE 0x0f
-+#define FXBUS_PT_LEFT 0x14
-+#define FXBUS_PT_RIGHT 0x15
-+
-+/* Inputs */
-+#define EXTIN_AC97_L 0x00 /* AC'97 capture channel - left */
-+#define EXTIN_AC97_R 0x01 /* AC'97 capture channel - right */
-+#define EXTIN_SPDIF_CD_L 0x02 /* internal S/PDIF CD - onboard - left */
-+#define EXTIN_SPDIF_CD_R 0x03 /* internal S/PDIF CD - onboard - right */
-+#define EXTIN_ZOOM_L 0x04 /* Zoom Video I2S - left */
-+#define EXTIN_ZOOM_R 0x05 /* Zoom Video I2S - right */
-+#define EXTIN_TOSLINK_L 0x06 /* LiveDrive - TOSLink Optical - left */
-+#define EXTIN_TOSLINK_R 0x07 /* LiveDrive - TOSLink Optical - right */
-+#define EXTIN_LINE1_L 0x08 /* LiveDrive - Line/Mic 1 - left */
-+#define EXTIN_LINE1_R 0x09 /* LiveDrive - Line/Mic 1 - right */
-+#define EXTIN_COAX_SPDIF_L 0x0a /* LiveDrive - Coaxial S/PDIF - left */
-+#define EXTIN_COAX_SPDIF_R 0x0b /* LiveDrive - Coaxial S/PDIF - right */
-+#define EXTIN_LINE2_L 0x0c /* LiveDrive - Line/Mic 2 - left */
-+#define EXTIN_LINE2_R 0x0d /* LiveDrive - Line/Mic 2 - right */
-+
-+/* Outputs */
-+#define EXTOUT_AC97_L 0x00 /* AC'97 playback channel - left */
-+#define EXTOUT_AC97_R 0x01 /* AC'97 playback channel - right */
-+#define EXTOUT_TOSLINK_L 0x02 /* LiveDrive - TOSLink Optical - left */
-+#define EXTOUT_TOSLINK_R 0x03 /* LiveDrive - TOSLink Optical - right */
-+#define EXTOUT_AC97_CENTER 0x04 /* SB Live 5.1 - center */
-+#define EXTOUT_AC97_LFE 0x05 /* SB Live 5.1 - LFE */
-+#define EXTOUT_HEADPHONE_L 0x06 /* LiveDrive - Headphone - left */
-+#define EXTOUT_HEADPHONE_R 0x07 /* LiveDrive - Headphone - right */
-+#define EXTOUT_REAR_L 0x08 /* Rear channel - left */
-+#define EXTOUT_REAR_R 0x09 /* Rear channel - right */
-+#define EXTOUT_ADC_CAP_L 0x0a /* ADC Capture buffer - left */
-+#define EXTOUT_ADC_CAP_R 0x0b /* ADC Capture buffer - right */
-+#define EXTOUT_MIC_CAP 0x0c /* MIC Capture buffer */
-+#define EXTOUT_AC97_REAR_L 0x0d /* SB Live 5.1 (c) 2003 - Rear Left */
-+#define EXTOUT_AC97_REAR_R 0x0e /* SB Live 5.1 (c) 2003 - Rear Right */
-+#define EXTOUT_ACENTER 0x11 /* Analog Center */
-+#define EXTOUT_ALFE 0x12 /* Analog LFE */
-+
-+/* Audigy Inputs */
-+#define A_EXTIN_AC97_L 0x00 /* AC'97 capture channel - left */
-+#define A_EXTIN_AC97_R 0x01 /* AC'97 capture channel - right */
-+#define A_EXTIN_SPDIF_CD_L 0x02 /* digital CD left */
-+#define A_EXTIN_SPDIF_CD_R 0x03 /* digital CD left */
-+#define A_EXTIN_OPT_SPDIF_L 0x04 /* audigy drive Optical SPDIF - left */
-+#define A_EXTIN_OPT_SPDIF_R 0x05 /* right */
-+#define A_EXTIN_LINE2_L 0x08 /* audigy drive line2/mic2 - left */
-+#define A_EXTIN_LINE2_R 0x09 /* right */
-+#define A_EXTIN_ADC_L 0x0a /* Philips ADC - left */
-+#define A_EXTIN_ADC_R 0x0b /* right */
-+#define A_EXTIN_AUX2_L 0x0c /* audigy drive aux2 - left */
-+#define A_EXTIN_AUX2_R 0x0d /* - right */
-+
-+/* Audigiy Outputs */
-+#define A_EXTOUT_FRONT_L 0x00 /* digital front left */
-+#define A_EXTOUT_FRONT_R 0x01 /* right */
-+#define A_EXTOUT_CENTER 0x02 /* digital front center */
-+#define A_EXTOUT_LFE 0x03 /* digital front lfe */
-+#define A_EXTOUT_HEADPHONE_L 0x04 /* headphone audigy drive left */
-+#define A_EXTOUT_HEADPHONE_R 0x05 /* right */
-+#define A_EXTOUT_REAR_L 0x06 /* digital rear left */
-+#define A_EXTOUT_REAR_R 0x07 /* right */
-+#define A_EXTOUT_AFRONT_L 0x08 /* analog front left */
-+#define A_EXTOUT_AFRONT_R 0x09 /* right */
-+#define A_EXTOUT_ACENTER 0x0a /* analog center */
-+#define A_EXTOUT_ALFE 0x0b /* analog LFE */
-+#define A_EXTOUT_ASIDE_L 0x0c /* analog side left - Audigy 2 ZS */
-+#define A_EXTOUT_ASIDE_R 0x0d /* right - Audigy 2 ZS */
-+#define A_EXTOUT_AREAR_L 0x0e /* analog rear left */
-+#define A_EXTOUT_AREAR_R 0x0f /* right */
-+#define A_EXTOUT_AC97_L 0x10 /* AC97 left (front) */
-+#define A_EXTOUT_AC97_R 0x11 /* right */
-+#define A_EXTOUT_ADC_CAP_L 0x16 /* ADC capture buffer left */
-+#define A_EXTOUT_ADC_CAP_R 0x17 /* right */
-+#define A_EXTOUT_MIC_CAP 0x18 /* Mic capture buffer */
-+
-+/* Audigy constants */
-+#define A_C_00000000 0xc0
-+#define A_C_00000001 0xc1
-+#define A_C_00000002 0xc2
-+#define A_C_00000003 0xc3
-+#define A_C_00000004 0xc4
-+#define A_C_00000008 0xc5
-+#define A_C_00000010 0xc6
-+#define A_C_00000020 0xc7
-+#define A_C_00000100 0xc8
-+#define A_C_00010000 0xc9
-+#define A_C_00000800 0xca
-+#define A_C_10000000 0xcb
-+#define A_C_20000000 0xcc
-+#define A_C_40000000 0xcd
-+#define A_C_80000000 0xce
-+#define A_C_7fffffff 0xcf
-+#define A_C_ffffffff 0xd0
-+#define A_C_fffffffe 0xd1
-+#define A_C_c0000000 0xd2
-+#define A_C_4f1bbcdc 0xd3
-+#define A_C_5a7ef9db 0xd4
-+#define A_C_00100000 0xd5
-+#define A_GPR_ACCU 0xd6 /* ACCUM, accumulator */
-+#define A_GPR_COND 0xd7 /* CCR, condition register */
-+#define A_GPR_NOISE0 0xd8 /* noise source */
-+#define A_GPR_NOISE1 0xd9 /* noise source */
-+#define A_GPR_IRQ 0xda /* IRQ register */
-+#define A_GPR_DBAC 0xdb /* TRAM Delay Base Address Counter - internal */
-+#define A_GPR_DBACE 0xde /* TRAM Delay Base Address Counter - external */
-+
-+/* definitions for debug register */
-+#define EMU10K1_DBG_ZC 0x80000000 /* zero tram counter */
-+#define EMU10K1_DBG_SATURATION_OCCURED 0x02000000 /* saturation control */
-+#define EMU10K1_DBG_SATURATION_ADDR 0x01ff0000 /* saturation address */
-+#define EMU10K1_DBG_SINGLE_STEP 0x00008000 /* single step mode */
-+#define EMU10K1_DBG_STEP 0x00004000 /* start single step */
-+#define EMU10K1_DBG_CONDITION_CODE 0x00003e00 /* condition code */
-+#define EMU10K1_DBG_SINGLE_STEP_ADDR 0x000001ff /* single step address */
-+
-+/* tank memory address line */
-+#ifndef __KERNEL__
-+#define TANKMEMADDRREG_ADDR_MASK 0x000fffff /* 20 bit tank address field */
-+#define TANKMEMADDRREG_CLEAR 0x00800000 /* Clear tank memory */
-+#define TANKMEMADDRREG_ALIGN 0x00400000 /* Align read or write relative to tank access */
-+#define TANKMEMADDRREG_WRITE 0x00200000 /* Write to tank memory */
-+#define TANKMEMADDRREG_READ 0x00100000 /* Read from tank memory */
-+#endif
-+
-+struct snd_emu10k1_fx8010_info {
-+ unsigned int internal_tram_size; /* in samples */
-+ unsigned int external_tram_size; /* in samples */
-+ char fxbus_names[16][32]; /* names of FXBUSes */
-+ char extin_names[16][32]; /* names of external inputs */
-+ char extout_names[32][32]; /* names of external outputs */
-+ unsigned int gpr_controls; /* count of GPR controls */
-+};
-+
-+#define EMU10K1_GPR_TRANSLATION_NONE 0
-+#define EMU10K1_GPR_TRANSLATION_TABLE100 1
-+#define EMU10K1_GPR_TRANSLATION_BASS 2
-+#define EMU10K1_GPR_TRANSLATION_TREBLE 3
-+#define EMU10K1_GPR_TRANSLATION_ONOFF 4
-+
-+enum emu10k1_ctl_elem_iface {
-+ EMU10K1_CTL_ELEM_IFACE_MIXER = 2, /* virtual mixer device */
-+ EMU10K1_CTL_ELEM_IFACE_PCM = 3, /* PCM device */
-+};
-+
-+struct emu10k1_ctl_elem_id {
-+ unsigned int pad; /* don't use */
-+ int iface; /* interface identifier */
-+ unsigned int device; /* device/client number */
-+ unsigned int subdevice; /* subdevice (substream) number */
-+ unsigned char name[44]; /* ASCII name of item */
-+ unsigned int index; /* index of item */
-+};
-+
-+struct snd_emu10k1_fx8010_control_gpr {
-+ struct emu10k1_ctl_elem_id id; /* full control ID definition */
-+ unsigned int vcount; /* visible count */
-+ unsigned int count; /* count of GPR (1..16) */
-+ unsigned short gpr[32]; /* GPR number(s) */
-+ unsigned int value[32]; /* initial values */
-+ unsigned int min; /* minimum range */
-+ unsigned int max; /* maximum range */
-+ unsigned int translation; /* translation type (EMU10K1_GPR_TRANSLATION*) */
-+ const unsigned int *tlv;
-+};
-+
-+/* old ABI without TLV support */
-+struct snd_emu10k1_fx8010_control_old_gpr {
-+ struct emu10k1_ctl_elem_id id;
-+ unsigned int vcount;
-+ unsigned int count;
-+ unsigned short gpr[32];
-+ unsigned int value[32];
-+ unsigned int min;
-+ unsigned int max;
-+ unsigned int translation;
-+};
-+
-+struct snd_emu10k1_fx8010_code {
-+ char name[128];
-+
-+ __EMU10K1_DECLARE_BITMAP(gpr_valid, 0x200); /* bitmask of valid initializers */
-+ __u32 *gpr_map; /* initializers */
-+
-+ unsigned int gpr_add_control_count; /* count of GPR controls to add/replace */
-+ struct snd_emu10k1_fx8010_control_gpr *gpr_add_controls; /* GPR controls to add/replace */
-+
-+ unsigned int gpr_del_control_count; /* count of GPR controls to remove */
-+ struct emu10k1_ctl_elem_id *gpr_del_controls; /* IDs of GPR controls to remove */
-+
-+ unsigned int gpr_list_control_count; /* count of GPR controls to list */
-+ unsigned int gpr_list_control_total; /* total count of GPR controls */
-+ struct snd_emu10k1_fx8010_control_gpr *gpr_list_controls; /* listed GPR controls */
-+
-+ __EMU10K1_DECLARE_BITMAP(tram_valid, 0x100); /* bitmask of valid initializers */
-+ __u32 *tram_data_map; /* data initializers */
-+ __u32 *tram_addr_map; /* map initializers */
-+
-+ __EMU10K1_DECLARE_BITMAP(code_valid, 1024); /* bitmask of valid instructions */
-+ __u32 *code; /* one instruction - 64 bits */
-+};
-+
-+struct snd_emu10k1_fx8010_tram {
-+ unsigned int address; /* 31.bit == 1 -> external TRAM */
-+ unsigned int size; /* size in samples (4 bytes) */
-+ unsigned int *samples; /* pointer to samples (20-bit) */
-+ /* NULL->clear memory */
-+};
-+
-+struct snd_emu10k1_fx8010_pcm_rec {
-+ unsigned int substream; /* substream number */
-+ unsigned int res1; /* reserved */
-+ unsigned int channels; /* 16-bit channels count, zero = remove this substream */
-+ unsigned int tram_start; /* ring buffer position in TRAM (in samples) */
-+ unsigned int buffer_size; /* count of buffered samples */
-+ unsigned short gpr_size; /* GPR containing size of ringbuffer in samples (host) */
-+ unsigned short gpr_ptr; /* GPR containing current pointer in the ring buffer (host = reset, FX8010) */
-+ unsigned short gpr_count; /* GPR containing count of samples between two interrupts (host) */
-+ unsigned short gpr_tmpcount; /* GPR containing current count of samples to interrupt (host = set, FX8010) */
-+ unsigned short gpr_trigger; /* GPR containing trigger (activate) information (host) */
-+ unsigned short gpr_running; /* GPR containing info if PCM is running (FX8010) */
-+ unsigned char pad; /* reserved */
-+ unsigned char etram[32]; /* external TRAM address & data (one per channel) */
-+ unsigned int res2; /* reserved */
-+};
-+
-+#define SNDRV_EMU10K1_VERSION SNDRV_PROTOCOL_VERSION(1, 0, 1)
-+
-+#define SNDRV_EMU10K1_IOCTL_INFO _IOR ('H', 0x10, struct snd_emu10k1_fx8010_info)
-+#define SNDRV_EMU10K1_IOCTL_CODE_POKE _IOW ('H', 0x11, struct snd_emu10k1_fx8010_code)
-+#define SNDRV_EMU10K1_IOCTL_CODE_PEEK _IOWR('H', 0x12, struct snd_emu10k1_fx8010_code)
-+#define SNDRV_EMU10K1_IOCTL_TRAM_SETUP _IOW ('H', 0x20, int)
-+#define SNDRV_EMU10K1_IOCTL_TRAM_POKE _IOW ('H', 0x21, struct snd_emu10k1_fx8010_tram)
-+#define SNDRV_EMU10K1_IOCTL_TRAM_PEEK _IOWR('H', 0x22, struct snd_emu10k1_fx8010_tram)
-+#define SNDRV_EMU10K1_IOCTL_PCM_POKE _IOW ('H', 0x30, struct snd_emu10k1_fx8010_pcm_rec)
-+#define SNDRV_EMU10K1_IOCTL_PCM_PEEK _IOWR('H', 0x31, struct snd_emu10k1_fx8010_pcm_rec)
-+#define SNDRV_EMU10K1_IOCTL_PVERSION _IOR ('H', 0x40, int)
-+#define SNDRV_EMU10K1_IOCTL_STOP _IO ('H', 0x80)
-+#define SNDRV_EMU10K1_IOCTL_CONTINUE _IO ('H', 0x81)
-+#define SNDRV_EMU10K1_IOCTL_ZERO_TRAM_COUNTER _IO ('H', 0x82)
-+#define SNDRV_EMU10K1_IOCTL_SINGLE_STEP _IOW ('H', 0x83, int)
-+#define SNDRV_EMU10K1_IOCTL_DBG_READ _IOR ('H', 0x84, int)
-+
-+#ifndef __KERNEL__
-+/* typedefs for compatibility to user-space */
-+typedef struct snd_emu10k1_fx8010_info emu10k1_fx8010_info_t;
-+typedef struct snd_emu10k1_fx8010_control_gpr emu10k1_fx8010_control_gpr_t;
-+typedef struct snd_emu10k1_fx8010_code emu10k1_fx8010_code_t;
-+typedef struct snd_emu10k1_fx8010_tram emu10k1_fx8010_tram_t;
-+typedef struct snd_emu10k1_fx8010_pcm_rec emu10k1_fx8010_pcm_t;
-+typedef struct emu10k1_ctl_elem_id emu10k1_ctl_elem_id_t;
-+#endif
-+
-+#endif /* _UAPI__SOUND_EMU10K1_H */
-diff --git a/include/sound/uapi/hdsp.h b/include/sound/uapi/hdsp.h
-new file mode 100644
-index 00000000..88c92a3f
---- /dev/null
-+++ b/include/sound/uapi/hdsp.h
-@@ -0,0 +1,109 @@
-+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
-+#ifndef __SOUND_HDSP_H
-+#define __SOUND_HDSP_H
-+
-+/*
-+ * Copyright (C) 2003 Thomas Charbonnel (thomas@undata.org)
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#define HDSP_MATRIX_MIXER_SIZE 2048
-+
-+enum HDSP_IO_Type {
-+ Digiface,
-+ Multiface,
-+ H9652,
-+ H9632,
-+ RPM,
-+ Undefined,
-+};
-+
-+struct hdsp_peak_rms {
-+ __u32 input_peaks[26];
-+ __u32 playback_peaks[26];
-+ __u32 output_peaks[28];
-+ __u64 input_rms[26];
-+ __u64 playback_rms[26];
-+ /* These are only used for H96xx cards */
-+ __u64 output_rms[26];
-+};
-+
-+#define SNDRV_HDSP_IOCTL_GET_PEAK_RMS _IOR('H', 0x40, struct hdsp_peak_rms)
-+
-+struct hdsp_config_info {
-+ unsigned char pref_sync_ref;
-+ unsigned char wordclock_sync_check;
-+ unsigned char spdif_sync_check;
-+ unsigned char adatsync_sync_check;
-+ unsigned char adat_sync_check[3];
-+ unsigned char spdif_in;
-+ unsigned char spdif_out;
-+ unsigned char spdif_professional;
-+ unsigned char spdif_emphasis;
-+ unsigned char spdif_nonaudio;
-+ unsigned int spdif_sample_rate;
-+ unsigned int system_sample_rate;
-+ unsigned int autosync_sample_rate;
-+ unsigned char system_clock_mode;
-+ unsigned char clock_source;
-+ unsigned char autosync_ref;
-+ unsigned char line_out;
-+ unsigned char passthru;
-+ unsigned char da_gain;
-+ unsigned char ad_gain;
-+ unsigned char phone_gain;
-+ unsigned char xlr_breakout_cable;
-+ unsigned char analog_extension_board;
-+};
-+
-+#define SNDRV_HDSP_IOCTL_GET_CONFIG_INFO _IOR('H', 0x41, struct hdsp_config_info)
-+
-+struct hdsp_firmware {
-+ void *firmware_data; /* 24413 x 4 bytes */
-+};
-+
-+#define SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE _IOW('H', 0x42, struct hdsp_firmware)
-+
-+struct hdsp_version {
-+ enum HDSP_IO_Type io_type;
-+ unsigned short firmware_rev;
-+};
-+
-+#define SNDRV_HDSP_IOCTL_GET_VERSION _IOR('H', 0x43, struct hdsp_version)
-+
-+struct hdsp_mixer {
-+ unsigned short matrix[HDSP_MATRIX_MIXER_SIZE];
-+};
-+
-+#define SNDRV_HDSP_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdsp_mixer)
-+
-+struct hdsp_9632_aeb {
-+ int aebi;
-+ int aebo;
-+};
-+
-+#define SNDRV_HDSP_IOCTL_GET_9632_AEB _IOR('H', 0x45, struct hdsp_9632_aeb)
-+
-+/* typedefs for compatibility to user-space */
-+typedef enum HDSP_IO_Type HDSP_IO_Type;
-+typedef struct hdsp_peak_rms hdsp_peak_rms_t;
-+typedef struct hdsp_config_info hdsp_config_info_t;
-+typedef struct hdsp_firmware hdsp_firmware_t;
-+typedef struct hdsp_version hdsp_version_t;
-+typedef struct hdsp_mixer hdsp_mixer_t;
-+typedef struct hdsp_9632_aeb hdsp_9632_aeb_t;
-+
-+#endif /* __SOUND_HDSP_H */
-diff --git a/include/sound/uapi/hdspm.h b/include/sound/uapi/hdspm.h
-new file mode 100644
-index 00000000..2d91f90e
---- /dev/null
-+++ b/include/sound/uapi/hdspm.h
-@@ -0,0 +1,230 @@
-+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
-+#ifndef __SOUND_HDSPM_H
-+#define __SOUND_HDSPM_H
-+/*
-+ * Copyright (C) 2003 Winfried Ritsch (IEM)
-+ * based on hdsp.h from Thomas Charbonnel (thomas@undata.org)
-+ *
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+/* Maximum channels is 64 even on 56Mode you have 64playbacks to matrix */
-+#define HDSPM_MAX_CHANNELS 64
-+
-+enum hdspm_io_type {
-+ MADI,
-+ MADIface,
-+ AIO,
-+ AES32,
-+ RayDAT
-+};
-+
-+enum hdspm_speed {
-+ ss,
-+ ds,
-+ qs
-+};
-+
-+/* -------------------- IOCTL Peak/RMS Meters -------------------- */
-+
-+struct hdspm_peak_rms {
-+ __u32 input_peaks[64];
-+ __u32 playback_peaks[64];
-+ __u32 output_peaks[64];
-+
-+ __u64 input_rms[64];
-+ __u64 playback_rms[64];
-+ __u64 output_rms[64];
-+
-+ __u8 speed; /* enum {ss, ds, qs} */
-+ int status2;
-+};
-+
-+#define SNDRV_HDSPM_IOCTL_GET_PEAK_RMS \
-+ _IOR('H', 0x42, struct hdspm_peak_rms)
-+
-+/* ------------ CONFIG block IOCTL ---------------------- */
-+
-+struct hdspm_config {
-+ unsigned char pref_sync_ref;
-+ unsigned char wordclock_sync_check;
-+ unsigned char madi_sync_check;
-+ unsigned int system_sample_rate;
-+ unsigned int autosync_sample_rate;
-+ unsigned char system_clock_mode;
-+ unsigned char clock_source;
-+ unsigned char autosync_ref;
-+ unsigned char line_out;
-+ unsigned int passthru;
-+ unsigned int analog_out;
-+};
-+
-+#define SNDRV_HDSPM_IOCTL_GET_CONFIG \
-+ _IOR('H', 0x41, struct hdspm_config)
-+
-+/*
-+ * If there's a TCO (TimeCode Option) board installed,
-+ * there are further options and status data available.
-+ * The hdspm_ltc structure contains the current SMPTE
-+ * timecode and some status information and can be
-+ * obtained via SNDRV_HDSPM_IOCTL_GET_LTC or in the
-+ * hdspm_status struct.
-+ */
-+
-+enum hdspm_ltc_format {
-+ format_invalid,
-+ fps_24,
-+ fps_25,
-+ fps_2997,
-+ fps_30
-+};
-+
-+enum hdspm_ltc_frame {
-+ frame_invalid,
-+ drop_frame,
-+ full_frame
-+};
-+
-+enum hdspm_ltc_input_format {
-+ ntsc,
-+ pal,
-+ no_video
-+};
-+
-+struct hdspm_ltc {
-+ unsigned int ltc;
-+
-+ enum hdspm_ltc_format format;
-+ enum hdspm_ltc_frame frame;
-+ enum hdspm_ltc_input_format input_format;
-+};
-+
-+#define SNDRV_HDSPM_IOCTL_GET_LTC _IOR('H', 0x46, struct hdspm_ltc)
-+
-+/*
-+ * The status data reflects the device's current state
-+ * as determined by the card's configuration and
-+ * connection status.
-+ */
-+
-+enum hdspm_sync {
-+ hdspm_sync_no_lock = 0,
-+ hdspm_sync_lock = 1,
-+ hdspm_sync_sync = 2
-+};
-+
-+enum hdspm_madi_input {
-+ hdspm_input_optical = 0,
-+ hdspm_input_coax = 1
-+};
-+
-+enum hdspm_madi_channel_format {
-+ hdspm_format_ch_64 = 0,
-+ hdspm_format_ch_56 = 1
-+};
-+
-+enum hdspm_madi_frame_format {
-+ hdspm_frame_48 = 0,
-+ hdspm_frame_96 = 1
-+};
-+
-+enum hdspm_syncsource {
-+ syncsource_wc = 0,
-+ syncsource_madi = 1,
-+ syncsource_tco = 2,
-+ syncsource_sync = 3,
-+ syncsource_none = 4
-+};
-+
-+struct hdspm_status {
-+ __u8 card_type; /* enum hdspm_io_type */
-+ enum hdspm_syncsource autosync_source;
-+
-+ __u64 card_clock;
-+ __u32 master_period;
-+
-+ union {
-+ struct {
-+ __u8 sync_wc; /* enum hdspm_sync */
-+ __u8 sync_madi; /* enum hdspm_sync */
-+ __u8 sync_tco; /* enum hdspm_sync */
-+ __u8 sync_in; /* enum hdspm_sync */
-+ __u8 madi_input; /* enum hdspm_madi_input */
-+ __u8 channel_format; /* enum hdspm_madi_channel_format */
-+ __u8 frame_format; /* enum hdspm_madi_frame_format */
-+ } madi;
-+ } card_specific;
-+};
-+
-+#define SNDRV_HDSPM_IOCTL_GET_STATUS \
-+ _IOR('H', 0x47, struct hdspm_status)
-+
-+/*
-+ * Get information about the card and its add-ons.
-+ */
-+
-+#define HDSPM_ADDON_TCO 1
-+
-+struct hdspm_version {
-+ __u8 card_type; /* enum hdspm_io_type */
-+ char cardname[20];
-+ unsigned int serial;
-+ unsigned short firmware_rev;
-+ int addons;
-+};
-+
-+#define SNDRV_HDSPM_IOCTL_GET_VERSION _IOR('H', 0x48, struct hdspm_version)
-+
-+/* ------------- get Matrix Mixer IOCTL --------------- */
-+
-+/* MADI mixer: 64inputs+64playback in 64outputs = 8192 => *4Byte =
-+ * 32768 Bytes
-+ */
-+
-+/* organisation is 64 channelfader in a continuous memory block */
-+/* equivalent to hardware definition, maybe for future feature of mmap of
-+ * them
-+ */
-+/* each of 64 outputs has 64 infader and 64 outfader:
-+ Ins to Outs mixer[out].in[in], Outstreams to Outs mixer[out].pb[pb] */
-+
-+#define HDSPM_MIXER_CHANNELS HDSPM_MAX_CHANNELS
-+
-+struct hdspm_channelfader {
-+ unsigned int in[HDSPM_MIXER_CHANNELS];
-+ unsigned int pb[HDSPM_MIXER_CHANNELS];
-+};
-+
-+struct hdspm_mixer {
-+ struct hdspm_channelfader ch[HDSPM_MIXER_CHANNELS];
-+};
-+
-+struct hdspm_mixer_ioctl {
-+ struct hdspm_mixer *mixer;
-+};
-+
-+/* use indirect access due to the limit of ioctl bit size */
-+#define SNDRV_HDSPM_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdspm_mixer_ioctl)
-+
-+/* typedefs for compatibility to user-space */
-+typedef struct hdspm_peak_rms hdspm_peak_rms_t;
-+typedef struct hdspm_config_info hdspm_config_info_t;
-+typedef struct hdspm_version hdspm_version_t;
-+typedef struct hdspm_channelfader snd_hdspm_channelfader_t;
-+typedef struct hdspm_mixer hdspm_mixer_t;
-+
-+
-+#endif
-diff --git a/include/sound/uapi/sb16_csp.h b/include/sound/uapi/sb16_csp.h
-new file mode 100644
-index 00000000..e6485148
---- /dev/null
-+++ b/include/sound/uapi/sb16_csp.h
-@@ -0,0 +1,123 @@
-+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
-+/*
-+ * Copyright (c) 1999 by Uros Bizjak <uros@kss-loka.si>
-+ * Takashi Iwai <tiwai@suse.de>
-+ *
-+ * SB16ASP/AWE32 CSP control
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ */
-+#ifndef _UAPI__SOUND_SB16_CSP_H
-+#define _UAPI__SOUND_SB16_CSP_H
-+
-+
-+/* CSP modes */
-+#define SNDRV_SB_CSP_MODE_NONE 0x00
-+#define SNDRV_SB_CSP_MODE_DSP_READ 0x01 /* Record from DSP */
-+#define SNDRV_SB_CSP_MODE_DSP_WRITE 0x02 /* Play to DSP */
-+#define SNDRV_SB_CSP_MODE_QSOUND 0x04 /* QSound */
-+
-+/* CSP load flags */
-+#define SNDRV_SB_CSP_LOAD_FROMUSER 0x01
-+#define SNDRV_SB_CSP_LOAD_INITBLOCK 0x02
-+
-+/* CSP sample width */
-+#define SNDRV_SB_CSP_SAMPLE_8BIT 0x01
-+#define SNDRV_SB_CSP_SAMPLE_16BIT 0x02
-+
-+/* CSP channels */
-+#define SNDRV_SB_CSP_MONO 0x01
-+#define SNDRV_SB_CSP_STEREO 0x02
-+
-+/* CSP rates */
-+#define SNDRV_SB_CSP_RATE_8000 0x01
-+#define SNDRV_SB_CSP_RATE_11025 0x02
-+#define SNDRV_SB_CSP_RATE_22050 0x04
-+#define SNDRV_SB_CSP_RATE_44100 0x08
-+#define SNDRV_SB_CSP_RATE_ALL 0x0f
-+
-+/* CSP running state */
-+#define SNDRV_SB_CSP_ST_IDLE 0x00
-+#define SNDRV_SB_CSP_ST_LOADED 0x01
-+#define SNDRV_SB_CSP_ST_RUNNING 0x02
-+#define SNDRV_SB_CSP_ST_PAUSED 0x04
-+#define SNDRV_SB_CSP_ST_AUTO 0x08
-+#define SNDRV_SB_CSP_ST_QSOUND 0x10
-+
-+/* maximum QSound value (180 degrees right) */
-+#define SNDRV_SB_CSP_QSOUND_MAX_RIGHT 0x20
-+
-+/* maximum microcode RIFF file size */
-+#define SNDRV_SB_CSP_MAX_MICROCODE_FILE_SIZE 0x3000
-+
-+/* microcode header */
-+struct snd_sb_csp_mc_header {
-+ char codec_name[16]; /* id name of codec */
-+ unsigned short func_req; /* requested function */
-+};
-+
-+/* microcode to be loaded */
-+struct snd_sb_csp_microcode {
-+ struct snd_sb_csp_mc_header info;
-+ unsigned char data[SNDRV_SB_CSP_MAX_MICROCODE_FILE_SIZE];
-+};
-+
-+/* start CSP with sample_width in mono/stereo */
-+struct snd_sb_csp_start {
-+ int sample_width; /* sample width, look above */
-+ int channels; /* channels, look above */
-+};
-+
-+/* CSP information */
-+struct snd_sb_csp_info {
-+ char codec_name[16]; /* id name of codec */
-+ unsigned short func_nr; /* function number */
-+ unsigned int acc_format; /* accepted PCM formats */
-+ unsigned short acc_channels; /* accepted channels */
-+ unsigned short acc_width; /* accepted sample width */
-+ unsigned short acc_rates; /* accepted sample rates */
-+ unsigned short csp_mode; /* CSP mode, see above */
-+ unsigned short run_channels; /* current channels */
-+ unsigned short run_width; /* current sample width */
-+ unsigned short version; /* version id: 0x10 - 0x1f */
-+ unsigned short state; /* state bits */
-+};
-+
-+/* HWDEP controls */
-+/* get CSP information */
-+#define SNDRV_SB_CSP_IOCTL_INFO _IOR('H', 0x10, struct snd_sb_csp_info)
-+/* load microcode to CSP */
-+/* NOTE: struct snd_sb_csp_microcode overflows the max size (13 bits)
-+ * defined for some architectures like MIPS, and it leads to build errors.
-+ * (x86 and co have 14-bit size, thus it's valid, though.)
-+ * As a workaround for skipping the size-limit check, here we don't use the
-+ * normal _IOW() macro but _IOC() with the manual argument.
-+ */
-+#define SNDRV_SB_CSP_IOCTL_LOAD_CODE \
-+ _IOC(_IOC_WRITE, 'H', 0x11, sizeof(struct snd_sb_csp_microcode))
-+/* unload microcode from CSP */
-+#define SNDRV_SB_CSP_IOCTL_UNLOAD_CODE _IO('H', 0x12)
-+/* start CSP */
-+#define SNDRV_SB_CSP_IOCTL_START _IOW('H', 0x13, struct snd_sb_csp_start)
-+/* stop CSP */
-+#define SNDRV_SB_CSP_IOCTL_STOP _IO('H', 0x14)
-+/* pause CSP and DMA transfer */
-+#define SNDRV_SB_CSP_IOCTL_PAUSE _IO('H', 0x15)
-+/* restart CSP and DMA transfer */
-+#define SNDRV_SB_CSP_IOCTL_RESTART _IO('H', 0x16)
-+
-+
-+#endif /* _UAPI__SOUND_SB16_CSP_H */
-diff --git a/include/sound/uapi/sscape_ioctl.h b/include/sound/uapi/sscape_ioctl.h
-new file mode 100644
-index 00000000..c6653ebf
---- /dev/null
-+++ b/include/sound/uapi/sscape_ioctl.h
-@@ -0,0 +1,21 @@
-+#ifndef SSCAPE_IOCTL_H
-+#define SSCAPE_IOCTL_H
-+
-+
-+struct sscape_bootblock
-+{
-+ unsigned char code[256];
-+ unsigned version;
-+};
-+
-+#define SSCAPE_MICROCODE_SIZE 65536
-+
-+struct sscape_microcode
-+{
-+ unsigned char *code;
-+};
-+
-+#define SND_SSCAPE_LOAD_BOOTB _IOWR('P', 100, struct sscape_bootblock)
-+#define SND_SSCAPE_LOAD_MCODE _IOW ('P', 101, struct sscape_microcode)
-+
-+#endif
-diff --git a/include/sound/uapi/tlv.h b/include/sound/uapi/tlv.h
-new file mode 100644
-index 00000000..7d6d65f6
---- /dev/null
-+++ b/include/sound/uapi/tlv.h
-@@ -0,0 +1,117 @@
-+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
-+/*
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ */
-+
-+#ifndef __UAPI_SOUND_TLV_H
-+#define __UAPI_SOUND_TLV_H
-+
-+#define SNDRV_CTL_TLVT_CONTAINER 0 /* one level down - group of TLVs */
-+#define SNDRV_CTL_TLVT_DB_SCALE 1 /* dB scale */
-+#define SNDRV_CTL_TLVT_DB_LINEAR 2 /* linear volume */
-+#define SNDRV_CTL_TLVT_DB_RANGE 3 /* dB range container */
-+#define SNDRV_CTL_TLVT_DB_MINMAX 4 /* dB scale with min/max */
-+#define SNDRV_CTL_TLVT_DB_MINMAX_MUTE 5 /* dB scale with min/max with mute */
-+
-+/*
-+ * channel-mapping TLV items
-+ * TLV length must match with num_channels
-+ */
-+#define SNDRV_CTL_TLVT_CHMAP_FIXED 0x101 /* fixed channel position */
-+#define SNDRV_CTL_TLVT_CHMAP_VAR 0x102 /* channels freely swappable */
-+#define SNDRV_CTL_TLVT_CHMAP_PAIRED 0x103 /* pair-wise swappable */
-+
-+/*
-+ * TLV structure is right behind the struct snd_ctl_tlv:
-+ * unsigned int type - see SNDRV_CTL_TLVT_*
-+ * unsigned int length
-+ * .... data aligned to sizeof(unsigned int), use
-+ * block_length = (length + (sizeof(unsigned int) - 1)) &
-+ * ~(sizeof(unsigned int) - 1)) ....
-+ */
-+#define SNDRV_CTL_TLVD_ITEM(type, ...) \
-+ (type), SNDRV_CTL_TLVD_LENGTH(__VA_ARGS__), __VA_ARGS__
-+#define SNDRV_CTL_TLVD_LENGTH(...) \
-+ ((unsigned int)sizeof((const unsigned int[]) { __VA_ARGS__ }))
-+
-+/* Accessor offsets for TLV data items */
-+#define SNDRV_CTL_TLVO_TYPE 0
-+#define SNDRV_CTL_TLVO_LEN 1
-+
-+#define SNDRV_CTL_TLVD_CONTAINER_ITEM(...) \
-+ SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_CONTAINER, __VA_ARGS__)
-+#define SNDRV_CTL_TLVD_DECLARE_CONTAINER(name, ...) \
-+ unsigned int name[] = { \
-+ SNDRV_CTL_TLVD_CONTAINER_ITEM(__VA_ARGS__) \
-+ }
-+
-+#define SNDRV_CTL_TLVD_DB_SCALE_MASK 0xffff
-+#define SNDRV_CTL_TLVD_DB_SCALE_MUTE 0x10000
-+#define SNDRV_CTL_TLVD_DB_SCALE_ITEM(min, step, mute) \
-+ SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_SCALE, \
-+ (min), \
-+ ((step) & SNDRV_CTL_TLVD_DB_SCALE_MASK) | \
-+ ((mute) ? SNDRV_CTL_TLVD_DB_SCALE_MUTE : 0))
-+#define SNDRV_CTL_TLVD_DECLARE_DB_SCALE(name, min, step, mute) \
-+ unsigned int name[] = { \
-+ SNDRV_CTL_TLVD_DB_SCALE_ITEM(min, step, mute) \
-+ }
-+
-+/* Accessor offsets for min, mute and step items in dB scale type TLV */
-+#define SNDRV_CTL_TLVO_DB_SCALE_MIN 2
-+#define SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP 3
-+
-+/* dB scale specified with min/max values instead of step */
-+#define SNDRV_CTL_TLVD_DB_MINMAX_ITEM(min_dB, max_dB) \
-+ SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_MINMAX, (min_dB), (max_dB))
-+#define SNDRV_CTL_TLVD_DB_MINMAX_MUTE_ITEM(min_dB, max_dB) \
-+ SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_MINMAX_MUTE, (min_dB), (max_dB))
-+#define SNDRV_CTL_TLVD_DECLARE_DB_MINMAX(name, min_dB, max_dB) \
-+ unsigned int name[] = { \
-+ SNDRV_CTL_TLVD_DB_MINMAX_ITEM(min_dB, max_dB) \
-+ }
-+#define SNDRV_CTL_TLVD_DECLARE_DB_MINMAX_MUTE(name, min_dB, max_dB) \
-+ unsigned int name[] = { \
-+ SNDRV_CTL_TLVD_DB_MINMAX_MUTE_ITEM(min_dB, max_dB) \
-+ }
-+
-+/* Accessor offsets for min, max items in db-minmax types of TLV. */
-+#define SNDRV_CTL_TLVO_DB_MINMAX_MIN 2
-+#define SNDRV_CTL_TLVO_DB_MINMAX_MAX 3
-+
-+/* linear volume between min_dB and max_dB (.01dB unit) */
-+#define SNDRV_CTL_TLVD_DB_LINEAR_ITEM(min_dB, max_dB) \
-+ SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_LINEAR, (min_dB), (max_dB))
-+#define SNDRV_CTL_TLVD_DECLARE_DB_LINEAR(name, min_dB, max_dB) \
-+ unsigned int name[] = { \
-+ SNDRV_CTL_TLVD_DB_LINEAR_ITEM(min_dB, max_dB) \
-+ }
-+
-+/* Accessor offsets for min, max items in db-linear type of TLV. */
-+#define SNDRV_CTL_TLVO_DB_LINEAR_MIN 2
-+#define SNDRV_CTL_TLVO_DB_LINEAR_MAX 3
-+
-+/* dB range container:
-+ * Items in dB range container must be ordered by their values and by their
-+ * dB values. This implies that larger values must correspond with larger
-+ * dB values (which is also required for all other mixer controls).
-+ */
-+/* Each item is: <min> <max> <TLV> */
-+#define SNDRV_CTL_TLVD_DB_RANGE_ITEM(...) \
-+ SNDRV_CTL_TLVD_ITEM(SNDRV_CTL_TLVT_DB_RANGE, __VA_ARGS__)
-+#define SNDRV_CTL_TLVD_DECLARE_DB_RANGE(name, ...) \
-+ unsigned int name[] = { \
-+ SNDRV_CTL_TLVD_DB_RANGE_ITEM(__VA_ARGS__) \
-+ }
-+
-+#define SNDRV_CTL_TLVD_DB_GAIN_MUTE -9999999
-+
-+#endif
-diff --git a/src/topology/tplg_local.h b/src/topology/tplg_local.h
-index 11efce6d..101491a4 100644
---- a/src/topology/tplg_local.h
-+++ b/src/topology/tplg_local.h
-@@ -18,8 +18,7 @@
- #include "list.h"
- #include "topology.h"
-
--#define __packed __attribute__((__packed__))
--
-+#include <sound/type_compat.h>
- #include <sound/asound.h>
- #include <sound/asoc.h>
- #include <sound/tlv.h>
---
-2.20.1
-
diff --git a/meta/recipes-multimedia/alsa/alsa-lib/0001-configure.ac-remove-an-unnecessary-libtool-fix.patch b/meta/recipes-multimedia/alsa/alsa-lib/0001-configure.ac-remove-an-unnecessary-libtool-fix.patch
deleted file mode 100644
index 4db4934fdc..0000000000
--- a/meta/recipes-multimedia/alsa/alsa-lib/0001-configure.ac-remove-an-unnecessary-libtool-fix.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 01cd8cb6d594d7a12c67d21d689ebe0e347469c0 Mon Sep 17 00:00:00 2001
-From: Tanu Kaskinen <tanuk@iki.fi>
-Date: Fri, 20 Dec 2019 09:26:12 +0200
-Subject: [PATCH] configure.ac: remove an unnecessary libtool fix
-
-This code was added in commit 75d393a563efb578c79364a277087c6326267f52
-without explaining why. I assume it was a mistake, since it looks like
-the libtool problem should have gone away a long time ago. The referenced
-wiki page https://wiki.debian.org/RpathIssue says:
-
- Since libtool 1.5.2 (released 2004-01-25), on Linux libtool no
- longer sets RPATH for any directories in the dynamic linker search
- path, so this should no longer be an issue unless upstream used a
- really old version of libtool when creating their distribution
- tarball.
-
-This code caused problems in OpenEmbedded, where the libtool script is
-named "x86_64-oe-linux-libtool" or similar rather than just "libtool",
-so the sed command failed with a file not found error. Rather than
-adapting the code to OpenEmbedded's peculiarities, it seems best to just
-remove the unnecessary code altogether.
-
-Upstream-Status: Submitted [https://github.com/alsa-project/alsa-lib/pull/19]
-Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
----
- configure.ac | 11 -----------
- 1 file changed, 11 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 119ef600..22a4a885 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -764,14 +764,3 @@ test "$build_seq" = "yes" && echo "#include <alsa/seq.h>" >> include/asoundlib.h
- test "$build_seq" = "yes" && echo "#include <alsa/seqmid.h>" >> include/asoundlib.h
- test "$build_seq" = "yes" && echo "#include <alsa/seq_midi_event.h>" >> include/asoundlib.h
- cat "$srcdir"/include/asoundlib-tail.h >> include/asoundlib.h
--
--dnl Taken from https://wiki.debian.org/RpathIssue
--case $host in
-- *-*-linux-gnu)
-- AC_MSG_RESULT([Fixing libtool for -rpath problems.])
-- sed < libtool > libtool-2 \
-- 's/^hardcode_libdir_flag_spec.*$'/'hardcode_libdir_flag_spec=" -D__LIBTOOL_IS_A_FOOL__ "/'
-- mv libtool-2 libtool
-- chmod 755 libtool
-- ;;
--esac
---
-2.20.1
-
diff --git a/meta/recipes-multimedia/alsa/alsa-lib/0001-uapi-Move-typedefs-from-uapi-to-sound.patch b/meta/recipes-multimedia/alsa/alsa-lib/0001-uapi-Move-typedefs-from-uapi-to-sound.patch
deleted file mode 100644
index c35a2c9d7c..0000000000
--- a/meta/recipes-multimedia/alsa/alsa-lib/0001-uapi-Move-typedefs-from-uapi-to-sound.patch
+++ /dev/null
@@ -1,137 +0,0 @@
-From 59792f467b38d6a4c4dffdb30528f7fb03d23d96 Mon Sep 17 00:00:00 2001
-From: Takashi Iwai <tiwai@suse.de>
-Date: Fri, 20 Dec 2019 17:12:37 +0100
-Subject: [PATCH] uapi: Move typedefs from uapi to sound/*
-
-For keeping uapi/*.h cleaner.
-
-Signed-off-by: Takashi Iwai <tiwai@suse.de>
-
-Upstream-Status: Backport
-
-Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
----
- include/sound/emu10k1.h | 9 +++++++++
- include/sound/hdsp.h | 10 ++++++++++
- include/sound/hdspm.h | 8 ++++++++
- include/sound/sb16_csp.h | 4 ++++
- include/sound/uapi/emu10k1.h | 10 ----------
- include/sound/uapi/hdsp.h | 9 ---------
- include/sound/uapi/hdspm.h | 8 --------
- 7 files changed, 31 insertions(+), 27 deletions(-)
-
-diff --git a/include/sound/emu10k1.h b/include/sound/emu10k1.h
-index f06ecee5..0832f95b 100644
---- a/include/sound/emu10k1.h
-+++ b/include/sound/emu10k1.h
-@@ -1,2 +1,11 @@
- #include <alsa/sound/type_compat.h>
- #include <alsa/sound/uapi/emu10k1.h>
-+#ifndef __emu10k1_type_defined
-+#define __emu10k1_type_defined
-+typedef struct snd_emu10k1_fx8010_info emu10k1_fx8010_info_t;
-+typedef struct snd_emu10k1_fx8010_control_gpr emu10k1_fx8010_control_gpr_t;
-+typedef struct snd_emu10k1_fx8010_code emu10k1_fx8010_code_t;
-+typedef struct snd_emu10k1_fx8010_tram emu10k1_fx8010_tram_t;
-+typedef struct snd_emu10k1_fx8010_pcm_rec emu10k1_fx8010_pcm_t;
-+typedef struct emu10k1_ctl_elem_id emu10k1_ctl_elem_id_t;
-+#endif
-diff --git a/include/sound/hdsp.h b/include/sound/hdsp.h
-index 78fb745b..e8f93156 100644
---- a/include/sound/hdsp.h
-+++ b/include/sound/hdsp.h
-@@ -1,2 +1,12 @@
- #include <alsa/sound/type_compat.h>
- #include <alsa/sound/uapi/hdsp.h>
-+#ifndef __hdsp_type_defined
-+#define __hdsp_type_defined
-+typedef enum HDSP_IO_Type HDSP_IO_Type;
-+typedef struct hdsp_peak_rms hdsp_peak_rms_t;
-+typedef struct hdsp_config_info hdsp_config_info_t;
-+typedef struct hdsp_firmware hdsp_firmware_t;
-+typedef struct hdsp_version hdsp_version_t;
-+typedef struct hdsp_mixer hdsp_mixer_t;
-+typedef struct hdsp_9632_aeb hdsp_9632_aeb_t;
-+#endif
-diff --git a/include/sound/hdspm.h b/include/sound/hdspm.h
-index af6d19ed..d9095d9f 100644
---- a/include/sound/hdspm.h
-+++ b/include/sound/hdspm.h
-@@ -1,2 +1,10 @@
- #include <alsa/sound/type_compat.h>
- #include <alsa/sound/uapi/hdspm.h>
-+#ifndef __hdspm_type_defined
-+#define __hdspm_type_defined
-+typedef struct hdspm_peak_rms hdspm_peak_rms_t;
-+typedef struct hdspm_config_info hdspm_config_info_t;
-+typedef struct hdspm_version hdspm_version_t;
-+typedef struct hdspm_channelfader snd_hdspm_channelfader_t;
-+typedef struct hdspm_mixer hdspm_mixer_t;
-+#endif
-diff --git a/include/sound/sb16_csp.h b/include/sound/sb16_csp.h
-index 24121fcb..fd02bc56 100644
---- a/include/sound/sb16_csp.h
-+++ b/include/sound/sb16_csp.h
-@@ -1 +1,5 @@
- #include <alsa/sound/uapi/sb16_csp.h>
-+#ifndef __sb16_csp_type_defined
-+#define __sb16_csp_type_defined
-+typedef struct snd_sb_csp_microcode snd_sb_csp_microcode_t;
-+#endif
-diff --git a/include/sound/uapi/emu10k1.h b/include/sound/uapi/emu10k1.h
-index c1150e4d..6bcd76f6 100644
---- a/include/sound/uapi/emu10k1.h
-+++ b/include/sound/uapi/emu10k1.h
-@@ -382,14 +382,4 @@ struct snd_emu10k1_fx8010_pcm_rec {
- #define SNDRV_EMU10K1_IOCTL_SINGLE_STEP _IOW ('H', 0x83, int)
- #define SNDRV_EMU10K1_IOCTL_DBG_READ _IOR ('H', 0x84, int)
-
--#ifndef __KERNEL__
--/* typedefs for compatibility to user-space */
--typedef struct snd_emu10k1_fx8010_info emu10k1_fx8010_info_t;
--typedef struct snd_emu10k1_fx8010_control_gpr emu10k1_fx8010_control_gpr_t;
--typedef struct snd_emu10k1_fx8010_code emu10k1_fx8010_code_t;
--typedef struct snd_emu10k1_fx8010_tram emu10k1_fx8010_tram_t;
--typedef struct snd_emu10k1_fx8010_pcm_rec emu10k1_fx8010_pcm_t;
--typedef struct emu10k1_ctl_elem_id emu10k1_ctl_elem_id_t;
--#endif
--
- #endif /* _UAPI__SOUND_EMU10K1_H */
-diff --git a/include/sound/uapi/hdsp.h b/include/sound/uapi/hdsp.h
-index 88c92a3f..7ac2d3f2 100644
---- a/include/sound/uapi/hdsp.h
-+++ b/include/sound/uapi/hdsp.h
-@@ -97,13 +97,4 @@ struct hdsp_9632_aeb {
-
- #define SNDRV_HDSP_IOCTL_GET_9632_AEB _IOR('H', 0x45, struct hdsp_9632_aeb)
-
--/* typedefs for compatibility to user-space */
--typedef enum HDSP_IO_Type HDSP_IO_Type;
--typedef struct hdsp_peak_rms hdsp_peak_rms_t;
--typedef struct hdsp_config_info hdsp_config_info_t;
--typedef struct hdsp_firmware hdsp_firmware_t;
--typedef struct hdsp_version hdsp_version_t;
--typedef struct hdsp_mixer hdsp_mixer_t;
--typedef struct hdsp_9632_aeb hdsp_9632_aeb_t;
--
- #endif /* __SOUND_HDSP_H */
-diff --git a/include/sound/uapi/hdspm.h b/include/sound/uapi/hdspm.h
-index 2d91f90e..3fbfd9dc 100644
---- a/include/sound/uapi/hdspm.h
-+++ b/include/sound/uapi/hdspm.h
-@@ -219,12 +219,4 @@ struct hdspm_mixer_ioctl {
- /* use indirect access due to the limit of ioctl bit size */
- #define SNDRV_HDSPM_IOCTL_GET_MIXER _IOR('H', 0x44, struct hdspm_mixer_ioctl)
-
--/* typedefs for compatibility to user-space */
--typedef struct hdspm_peak_rms hdspm_peak_rms_t;
--typedef struct hdspm_config_info hdspm_config_info_t;
--typedef struct hdspm_version hdspm_version_t;
--typedef struct hdspm_channelfader snd_hdspm_channelfader_t;
--typedef struct hdspm_mixer hdspm_mixer_t;
--
--
- #endif
---
-2.20.1
-
diff --git a/meta/recipes-multimedia/alsa/alsa-lib/0001-ucm-Use-strncmp-to-avoid-access-out-of-boundary.patch b/meta/recipes-multimedia/alsa/alsa-lib/0001-ucm-Use-strncmp-to-avoid-access-out-of-boundary.patch
deleted file mode 100644
index 96dcd8abac..0000000000
--- a/meta/recipes-multimedia/alsa/alsa-lib/0001-ucm-Use-strncmp-to-avoid-access-out-of-boundary.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 4b6fe372c68d1ff50e7c161cffadeb298734f49c Mon Sep 17 00:00:00 2001
-From: paulhsia <paulhsia@chromium.org>
-Date: Sat, 30 Nov 2019 03:35:30 +0800
-Subject: [PATCH 1/5] ucm: Use strncmp to avoid access-out-of-boundary
-
-If the length of the identifier is less than the length of the prefix,
-access-out-of-boundary will occur in memcmp().
-
-Signed-off-by: paulhsia <paulhsia@chromium.org>
-Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-
-Upstream-Status: Backport
-Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
----
- src/ucm/main.c | 8 +++++---
- 1 file changed, 5 insertions(+), 3 deletions(-)
-
-diff --git a/src/ucm/main.c b/src/ucm/main.c
-index b0b6ffb3..252e50d9 100644
---- a/src/ucm/main.c
-+++ b/src/ucm/main.c
-@@ -61,11 +61,13 @@ static int check_identifier(const char *identifier, const char *prefix)
- {
- int len;
-
-- if (strcmp(identifier, prefix) == 0)
-- return 1;
- len = strlen(prefix);
-- if (memcmp(identifier, prefix, len) == 0 && identifier[len] == '/')
-+ if (strncmp(identifier, prefix, len) != 0)
-+ return 0;
-+
-+ if (identifier[len] == 0 || identifier[len] == '/')
- return 1;
-+
- return 0;
- }
-
---
-2.20.1
-
diff --git a/meta/recipes-multimedia/alsa/alsa-lib/0002-ucm-return-always-at-least-NULL-if-no-list-is-availa.patch b/meta/recipes-multimedia/alsa/alsa-lib/0002-ucm-return-always-at-least-NULL-if-no-list-is-availa.patch
deleted file mode 100644
index 42973fb6d0..0000000000
--- a/meta/recipes-multimedia/alsa/alsa-lib/0002-ucm-return-always-at-least-NULL-if-no-list-is-availa.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 58f9dc9bd12a51efa12dbc67e200f4d85cd3da07 Mon Sep 17 00:00:00 2001
-From: Jaroslav Kysela <perex@perex.cz>
-Date: Fri, 29 Nov 2019 22:28:26 +0100
-Subject: [PATCH 2/5] ucm: return always at least NULL if no list is available
- in snd_use_case_get_list()
-
-Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-
-Upstream-Status: Backport
-Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
----
- src/ucm/main.c | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/src/ucm/main.c b/src/ucm/main.c
-index 252e50d9..b80db65f 100644
---- a/src/ucm/main.c
-+++ b/src/ucm/main.c
-@@ -1160,8 +1160,10 @@ static int get_supcon_device_list(snd_use_case_mgr_t *uc_mgr,
-
- modifier = find_modifier(uc_mgr, verb, name, 0);
- if (modifier) {
-- if (modifier->dev_list.type != type)
-+ if (modifier->dev_list.type != type) {
-+ *list = NULL;
- return 0;
-+ }
- return get_list(&modifier->dev_list.list, list,
- struct dev_list_node, list,
- name);
-@@ -1169,8 +1171,10 @@ static int get_supcon_device_list(snd_use_case_mgr_t *uc_mgr,
-
- device = find_device(uc_mgr, verb, name, 0);
- if (device) {
-- if (device->dev_list.type != type)
-+ if (device->dev_list.type != type) {
-+ *list = NULL;
- return 0;
-+ }
- return get_list(&device->dev_list.list, list,
- struct dev_list_node, list,
- name);
---
-2.20.1
-
diff --git a/meta/recipes-multimedia/alsa/alsa-lib/0003-namehint-correct-the-args-check.patch b/meta/recipes-multimedia/alsa/alsa-lib/0003-namehint-correct-the-args-check.patch
deleted file mode 100644
index 82f8b2bd2a..0000000000
--- a/meta/recipes-multimedia/alsa/alsa-lib/0003-namehint-correct-the-args-check.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 10f3401ce356a675e2440993457ee7c8c7e9fcf8 Mon Sep 17 00:00:00 2001
-From: Jaroslav Kysela <perex@perex.cz>
-Date: Sun, 1 Dec 2019 14:26:40 +0100
-Subject: [PATCH 3/5] namehint: correct the @args check
-
-BugLink: https://github.com/alsa-project/alsa-plugins/issues/3
-Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-
-Upstream-Status: Backport
-Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
----
- src/control/namehint.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/src/control/namehint.c b/src/control/namehint.c
-index 808df6b5..4927ef97 100644
---- a/src/control/namehint.c
-+++ b/src/control/namehint.c
-@@ -348,6 +348,12 @@ static int try_config(snd_config_t *config,
- goto __cleanup;
- if (snd_config_search(res, "@args", &cfg) >= 0) {
- snd_config_for_each(i, next, cfg) {
-+ /* skip the argument list */
-+ snd_config_get_id(snd_config_iterator_entry(i), &str);
-+ while (*str && *str >= '0' && *str <= '9') str++;
-+ if (*str == '\0')
-+ continue;
-+ /* the argument definition must have the default */
- if (snd_config_search(snd_config_iterator_entry(i),
- "default", NULL) < 0) {
- err = -EINVAL;
---
-2.20.1
-
diff --git a/meta/recipes-multimedia/alsa/alsa-lib/0004-namehint-improve-the-previous-patch-check-the-return.patch b/meta/recipes-multimedia/alsa/alsa-lib/0004-namehint-improve-the-previous-patch-check-the-return.patch
deleted file mode 100644
index 98192f6e53..0000000000
--- a/meta/recipes-multimedia/alsa/alsa-lib/0004-namehint-improve-the-previous-patch-check-the-return.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 1fa6664d5f0cc7d21edceba6695a4c28543c2cab Mon Sep 17 00:00:00 2001
-From: Jaroslav Kysela <perex@perex.cz>
-Date: Sun, 1 Dec 2019 14:30:54 +0100
-Subject: [PATCH 4/5] namehint: improve the previous patch (check the returned
- value)
-
-Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-
-Upstream-Status: Backport
-Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
----
- src/control/namehint.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/control/namehint.c b/src/control/namehint.c
-index 4927ef97..60c48ae3 100644
---- a/src/control/namehint.c
-+++ b/src/control/namehint.c
-@@ -349,7 +349,8 @@ static int try_config(snd_config_t *config,
- if (snd_config_search(res, "@args", &cfg) >= 0) {
- snd_config_for_each(i, next, cfg) {
- /* skip the argument list */
-- snd_config_get_id(snd_config_iterator_entry(i), &str);
-+ if (snd_config_get_id(snd_config_iterator_entry(i), &str) < 0)
-+ continue;
- while (*str && *str >= '0' && *str <= '9') str++;
- if (*str == '\0')
- continue;
---
-2.20.1
-
diff --git a/meta/recipes-multimedia/alsa/alsa-lib/0005-ucm-Do-not-fail-to-parse-configs-on-cards-with-an-em.patch b/meta/recipes-multimedia/alsa/alsa-lib/0005-ucm-Do-not-fail-to-parse-configs-on-cards-with-an-em.patch
deleted file mode 100644
index cbc0a4ceab..0000000000
--- a/meta/recipes-multimedia/alsa/alsa-lib/0005-ucm-Do-not-fail-to-parse-configs-on-cards-with-an-em.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-From 976f8f62238f0d837584adc7c31035bdb29b6d6f Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede@redhat.com>
-Date: Tue, 3 Dec 2019 18:27:39 +0100
-Subject: [PATCH 5/5] ucm: Do not fail to parse configs on cards with an empty
- CardComponents lists
-
-Since the UCM profiles for all Bay- and Cherry-Trail SST cards have been
-moved over to UCM2, parsing them fails with:
-
-ALSA lib ucm_subs.c:220:(uc_mgr_get_substituted_value) variable '${CardComponents}' is not defined in this context!
-
-This completely breaks audio support on all Bay- and Cherry-Trail devices.
-
-This is caused by these non-SOF ASoC using cards having an empty
-CardComponents list. Which in itself is fine, but is rejected by
-the ucm_subs.c code. This commit changes the ucm_subs code to accept
-an empty string as a valid value for CardComponents restoring audio
-functionality on these boards.
-
-Signed-off-by: Hans de Goede <hdegoede@redhat.com>
-Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-
-Upstream-Status: Backport
-Signed-off-by: Tanu Kaskinen <tanuk@iki.fi>
----
- src/ucm/ucm_subs.c | 20 ++++++++++++--------
- 1 file changed, 12 insertions(+), 8 deletions(-)
-
-diff --git a/src/ucm/ucm_subs.c b/src/ucm/ucm_subs.c
-index 00afa9e3..90e395f0 100644
---- a/src/ucm/ucm_subs.c
-+++ b/src/ucm/ucm_subs.c
-@@ -25,6 +25,7 @@
- */
-
- #include "ucm_local.h"
-+#include <stdbool.h>
- #include <sys/stat.h>
- #include <limits.h>
-
-@@ -145,10 +146,11 @@ static char *rval_sysfs(snd_use_case_mgr_t *uc_mgr ATTRIBUTE_UNUSED, const char
- return strdup(path);
- }
-
--#define MATCH_VARIABLE(name, id, fcn) \
-+#define MATCH_VARIABLE(name, id, fcn, empty_ok) \
- if (strncmp((name), (id), sizeof(id) - 1) == 0) { \
- rval = fcn(uc_mgr); \
- idsize = sizeof(id) - 1; \
-+ allow_empty = (empty_ok); \
- goto __rval; \
- }
-
-@@ -189,12 +191,14 @@ int uc_mgr_get_substituted_value(snd_use_case_mgr_t *uc_mgr,
-
- while (*value) {
- if (*value == '$' && *(value+1) == '{') {
-- MATCH_VARIABLE(value, "${ConfName}", rval_conf_name);
-- MATCH_VARIABLE(value, "${CardId}", rval_card_id);
-- MATCH_VARIABLE(value, "${CardDriver}", rval_card_driver);
-- MATCH_VARIABLE(value, "${CardName}", rval_card_name);
-- MATCH_VARIABLE(value, "${CardLongName}", rval_card_longname);
-- MATCH_VARIABLE(value, "${CardComponents}", rval_card_components);
-+ bool allow_empty = false;
-+
-+ MATCH_VARIABLE(value, "${ConfName}", rval_conf_name, false);
-+ MATCH_VARIABLE(value, "${CardId}", rval_card_id, false);
-+ MATCH_VARIABLE(value, "${CardDriver}", rval_card_driver, false);
-+ MATCH_VARIABLE(value, "${CardName}", rval_card_name, false);
-+ MATCH_VARIABLE(value, "${CardLongName}", rval_card_longname, false);
-+ MATCH_VARIABLE(value, "${CardComponents}", rval_card_components, true);
- MATCH_VARIABLE2(value, "${env:", rval_env);
- MATCH_VARIABLE2(value, "${sys:", rval_sysfs);
- err = -EINVAL;
-@@ -208,7 +212,7 @@ int uc_mgr_get_substituted_value(snd_use_case_mgr_t *uc_mgr,
- }
- goto __error;
- __rval:
-- if (rval == NULL || rval[0] == '\0') {
-+ if (rval == NULL || (!allow_empty && rval[0] == '\0')) {
- free(rval);
- strncpy(r, value, idsize);
- r[idsize] = '\0';
---
-2.20.1
-
diff --git a/meta/recipes-multimedia/alsa/alsa-lib_1.2.1.2.bb b/meta/recipes-multimedia/alsa/alsa-lib_1.2.2.bb
index e2bc61fbe9..9a4082ff94 100644
--- a/meta/recipes-multimedia/alsa/alsa-lib_1.2.1.2.bb
+++ b/meta/recipes-multimedia/alsa/alsa-lib_1.2.2.bb
@@ -7,18 +7,9 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7 \
file://src/socket.c;md5=285675b45e83f571c6a957fe4ab79c93;beginline=9;endline=24 \
"
-SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2 \
- file://0001-configure.ac-remove-an-unnecessary-libtool-fix.patch \
- file://0001-ucm-Use-strncmp-to-avoid-access-out-of-boundary.patch \
- file://0002-ucm-return-always-at-least-NULL-if-no-list-is-availa.patch \
- file://0003-namehint-correct-the-args-check.patch \
- file://0004-namehint-improve-the-previous-patch-check-the-return.patch \
- file://0005-ucm-Do-not-fail-to-parse-configs-on-cards-with-an-em.patch \
- file://0001-Fix-alsa-sound-.h-for-external-programs.patch \
- file://0001-uapi-Move-typedefs-from-uapi-to-sound.patch \
- "
-SRC_URI[md5sum] = "82ddd3698469beec147e4f4a67134ea0"
-SRC_URI[sha256sum] = "958e260e3673f1f6ff6b2d2c0df3fc2e469bea5b2957163ce96ce17f23e87943"
+SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2"
+SRC_URI[md5sum] = "82cdc23a5233d5ed319d2cbc89af5ca5"
+SRC_URI[sha256sum] = "d8e853d8805574777bbe40937812ad1419c9ea7210e176f0def3e6ed255ab3ec"
inherit autotools pkgconfig