diff --git a/poky/meta/recipes-multimedia/alsa/alsa-lib/0001-Fix-alsa-sound-.h-for-external-programs.patch b/poky/meta/recipes-multimedia/alsa/alsa-lib/0001-Fix-alsa-sound-.h-for-external-programs.patch
deleted file mode 100644
index 890650a..0000000
--- a/poky/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/poky/meta/recipes-multimedia/alsa/alsa-lib/0001-configure.ac-remove-an-unnecessary-libtool-fix.patch b/poky/meta/recipes-multimedia/alsa/alsa-lib/0001-configure.ac-remove-an-unnecessary-libtool-fix.patch
deleted file mode 100644
index 4db4934..0000000
--- a/poky/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/poky/meta/recipes-multimedia/alsa/alsa-lib/0001-uapi-Move-typedefs-from-uapi-to-sound.patch b/poky/meta/recipes-multimedia/alsa/alsa-lib/0001-uapi-Move-typedefs-from-uapi-to-sound.patch
deleted file mode 100644
index c35a2c9..0000000
--- a/poky/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/poky/meta/recipes-multimedia/alsa/alsa-lib/0001-ucm-Use-strncmp-to-avoid-access-out-of-boundary.patch b/poky/meta/recipes-multimedia/alsa/alsa-lib/0001-ucm-Use-strncmp-to-avoid-access-out-of-boundary.patch
deleted file mode 100644
index 96dcd8a..0000000
--- a/poky/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/poky/meta/recipes-multimedia/alsa/alsa-lib/0002-ucm-return-always-at-least-NULL-if-no-list-is-availa.patch b/poky/meta/recipes-multimedia/alsa/alsa-lib/0002-ucm-return-always-at-least-NULL-if-no-list-is-availa.patch
deleted file mode 100644
index 42973fb..0000000
--- a/poky/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/poky/meta/recipes-multimedia/alsa/alsa-lib/0003-namehint-correct-the-args-check.patch b/poky/meta/recipes-multimedia/alsa/alsa-lib/0003-namehint-correct-the-args-check.patch
deleted file mode 100644
index 82f8b2b..0000000
--- a/poky/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/poky/meta/recipes-multimedia/alsa/alsa-lib/0004-namehint-improve-the-previous-patch-check-the-return.patch b/poky/meta/recipes-multimedia/alsa/alsa-lib/0004-namehint-improve-the-previous-patch-check-the-return.patch
deleted file mode 100644
index 98192f6..0000000
--- a/poky/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/poky/meta/recipes-multimedia/alsa/alsa-lib/0005-ucm-Do-not-fail-to-parse-configs-on-cards-with-an-em.patch b/poky/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 cbc0a4c..0000000
--- a/poky/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/poky/meta/recipes-multimedia/alsa/alsa-lib_1.2.1.2.bb b/poky/meta/recipes-multimedia/alsa/alsa-lib_1.2.2.bb
similarity index 62%
rename from poky/meta/recipes-multimedia/alsa/alsa-lib_1.2.1.2.bb
rename to poky/meta/recipes-multimedia/alsa/alsa-lib_1.2.2.bb
index e2bc61f..9a4082f 100644
--- a/poky/meta/recipes-multimedia/alsa/alsa-lib_1.2.1.2.bb
+++ b/poky/meta/recipes-multimedia/alsa/alsa-lib_1.2.2.bb
@@ -7,18 +7,9 @@
                     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
 
diff --git a/poky/meta/recipes-multimedia/alsa/alsa-plugins_1.2.1.bb b/poky/meta/recipes-multimedia/alsa/alsa-plugins_1.2.2.bb
similarity index 93%
rename from poky/meta/recipes-multimedia/alsa/alsa-plugins_1.2.1.bb
rename to poky/meta/recipes-multimedia/alsa/alsa-plugins_1.2.2.bb
index d092b15..52dee30 100644
--- a/poky/meta/recipes-multimedia/alsa/alsa-plugins_1.2.1.bb
+++ b/poky/meta/recipes-multimedia/alsa/alsa-plugins_1.2.2.bb
@@ -13,16 +13,15 @@
 # license for libsamplerate, the samplerate plugin may be used under the terms
 # of LGPLv2.1 like the rest of the plugins.
 LICENSE = "LGPLv2.1 & GPLv2+"
-LIC_FILES_CHKSUM = "\
-        file://COPYING;md5=a916467b91076e631dd8edb7424769c7 \
-        file://COPYING.GPL;md5=59530bdf33659b29e73d4adb9f9f6552 \
-        file://m4/attributes.m4;endline=33;md5=b25958da44c02231e3641f1bccef53eb \
-        file://rate/rate_samplerate.c;endline=35;md5=fd77bce85f4a338c0e8ab18430b69fae \
-"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a916467b91076e631dd8edb7424769c7 \
+                    file://COPYING.GPL;md5=59530bdf33659b29e73d4adb9f9f6552 \
+                    file://m4/attributes.m4;endline=33;md5=bb8c6b2a67ac15156961e242fec33e50 \
+                    file://rate/rate_samplerate.c;endline=35;md5=fd77bce85f4a338c0e8ab18430b69fae \
+                    "
 
 SRC_URI = "https://www.alsa-project.org/files/pub/plugins/${BP}.tar.bz2"
-SRC_URI[md5sum] = "5b11cd3ec92e5f9190ec378565b529e8"
-SRC_URI[sha256sum] = "4d94de7ad41734b8604a652521200bb6554fcf0c2c00fdbd302b1710d76548da"
+SRC_URI[md5sum] = "8455e3c6fbc47f62f070afabc14ba575"
+SRC_URI[sha256sum] = "1c0f06450c928d711719686c9dbece2d480184f36fab11b8f0534cb7b41e337d"
 
 DEPENDS += "alsa-lib"
 
diff --git a/poky/meta/recipes-multimedia/alsa/alsa-tools_1.1.7.bb b/poky/meta/recipes-multimedia/alsa/alsa-tools_1.2.2.bb
similarity index 95%
rename from poky/meta/recipes-multimedia/alsa/alsa-tools_1.1.7.bb
rename to poky/meta/recipes-multimedia/alsa/alsa-tools_1.2.2.bb
index c1f4acd..0838be8 100644
--- a/poky/meta/recipes-multimedia/alsa/alsa-tools_1.1.7.bb
+++ b/poky/meta/recipes-multimedia/alsa/alsa-tools_1.2.2.bb
@@ -11,8 +11,8 @@
 
 SRC_URI = "https://www.alsa-project.org/files/pub/tools/${BP}.tar.bz2"
 
-SRC_URI[md5sum] = "475bdf6457bcf55c8c895d653ee56a54"
-SRC_URI[sha256sum] = "a0243328a8f6f691a3055c484fd8d3326393096325e93743b246029d327c4ef6"
+SRC_URI[md5sum] = "4e6187d2c3a8c73a9d75d66a72faed27"
+SRC_URI[sha256sum] = "bfd3c7aae1289269605d3da02279159b10e3dabdd31e658cbceaa30170957349"
 
 inherit autotools-brokensep pkgconfig
 # brokensep as as10k1 (and probably more) fail out of tree
diff --git a/poky/meta/recipes-multimedia/alsa/alsa-topology-conf_1.2.1.bb b/poky/meta/recipes-multimedia/alsa/alsa-topology-conf_1.2.2.bb
similarity index 61%
rename from poky/meta/recipes-multimedia/alsa/alsa-topology-conf_1.2.1.bb
rename to poky/meta/recipes-multimedia/alsa/alsa-topology-conf_1.2.2.bb
index add1f30..2901794 100644
--- a/poky/meta/recipes-multimedia/alsa/alsa-topology-conf_1.2.1.bb
+++ b/poky/meta/recipes-multimedia/alsa/alsa-topology-conf_1.2.2.bb
@@ -4,11 +4,8 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=20d74d74db9741697903372ad001d3b4"
 
-# The tarball doesn't have any toplevel directory. The subdir option tells
-# Bitbake to unpack the archive to the correct place.
-SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2;subdir=${BP}"
-SRC_URI[md5sum] = "7fdf5fff3f1e0603456e719f6033e922"
-SRC_URI[sha256sum] = "354a43f4031c98bef1349ac722d83b2603ef439f81a1ab1eba8814c28243a9b2"
+SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2"
+SRC_URI[sha256sum] = "b472d6b567c78173bd69543d9cffc9e379c80eb763c3afc8d5b24d5610d19425"
 
 inherit allarch
 
diff --git a/poky/meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.1.2.bb b/poky/meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.2.bb
similarity index 63%
rename from poky/meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.1.2.bb
rename to poky/meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.2.bb
index 469d1f7..1a524d4 100644
--- a/poky/meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.1.2.bb
+++ b/poky/meta/recipes-multimedia/alsa/alsa-ucm-conf_1.2.2.bb
@@ -4,11 +4,8 @@
 LICENSE = "BSD-3-Clause"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=20d74d74db9741697903372ad001d3b4"
 
-# The tarball doesn't have any toplevel directory. The subdir option tells
-# Bitbake to unpack the archive to the correct place.
-SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2;subdir=${BP}"
-SRC_URI[md5sum] = "b7fa43cfd79df978184a6333766d2a50"
-SRC_URI[sha256sum] = "ea8a86875f4cf430d49a662a04a6d6c606c5c9d67e54cb944c4d77b24554062f"
+SRC_URI = "https://www.alsa-project.org/files/pub/lib/${BP}.tar.bz2"
+SRC_URI[sha256sum] = "7ebfd929bc85a51f16fa3c8c4db13faa2ea6ff2b2266fc36d6198bdafe73c40c"
 
 inherit allarch
 
diff --git a/poky/meta/recipes-multimedia/alsa/alsa-utils-scripts_1.2.1.bb b/poky/meta/recipes-multimedia/alsa/alsa-utils-scripts_1.2.2.bb
similarity index 95%
rename from poky/meta/recipes-multimedia/alsa/alsa-utils-scripts_1.2.1.bb
rename to poky/meta/recipes-multimedia/alsa/alsa-utils-scripts_1.2.2.bb
index fef79d9..048fef6 100644
--- a/poky/meta/recipes-multimedia/alsa/alsa-utils-scripts_1.2.1.bb
+++ b/poky/meta/recipes-multimedia/alsa/alsa-utils-scripts_1.2.2.bb
@@ -1,4 +1,4 @@
-require alsa-utils_${PV}.bb
+require alsa-utils.inc
 
 SUMMARY = "Shell scripts that show help info and create ALSA configuration files"
 PROVIDES = "alsa-utils-alsaconf"
diff --git a/poky/meta/recipes-multimedia/alsa/alsa-utils_1.2.1.bb b/poky/meta/recipes-multimedia/alsa/alsa-utils.inc
similarity index 96%
rename from poky/meta/recipes-multimedia/alsa/alsa-utils_1.2.1.bb
rename to poky/meta/recipes-multimedia/alsa/alsa-utils.inc
index 9144af6..8bbc5d3 100644
--- a/poky/meta/recipes-multimedia/alsa/alsa-utils_1.2.1.bb
+++ b/poky/meta/recipes-multimedia/alsa/alsa-utils.inc
@@ -21,8 +21,8 @@
 
 # alsa-utils specified in SRC_URI due to alsa-utils-scripts recipe
 SRC_URI = "https://www.alsa-project.org/files/pub/utils/alsa-utils-${PV}.tar.bz2"
-SRC_URI[md5sum] = "c4628bae7632937eac2de4cf2a3de82e"
-SRC_URI[sha256sum] = "0b110ba71ef41d3009db1bc4dcae0cf79efb99cb5426fa19d0312470560a2c0d"
+SRC_URI[md5sum] = "00612234ff4722c8f7f8f7a83ff9bc63"
+SRC_URI[sha256sum] = "44807bd578c5f6df6e91a11b8d37e546424a5a1ea8d8e659ee359fe01730e4f3"
 
 # On build machines with python-docutils (not python3-docutils !!) installed
 # rst2man (not rst2man.py) is detected and compile fails with
diff --git a/poky/meta/recipes-multimedia/alsa/alsa-utils_1.2.2.bb b/poky/meta/recipes-multimedia/alsa/alsa-utils_1.2.2.bb
new file mode 100644
index 0000000..ff8945e
--- /dev/null
+++ b/poky/meta/recipes-multimedia/alsa/alsa-utils_1.2.2.bb
@@ -0,0 +1 @@
+require alsa-utils.inc
diff --git a/poky/meta/recipes-multimedia/libtiff/tiff_4.1.0.bb b/poky/meta/recipes-multimedia/libtiff/tiff_4.1.0.bb
index 1f92c18..9b907fb 100644
--- a/poky/meta/recipes-multimedia/libtiff/tiff_4.1.0.bb
+++ b/poky/meta/recipes-multimedia/libtiff/tiff_4.1.0.bb
@@ -47,4 +47,4 @@
     oe_multilib_header tiffconf.h
 }
 
-BBCLASSEXTEND = "native"
+BBCLASSEXTEND = "native nativesdk"
diff --git a/poky/meta/recipes-multimedia/mpg123/mpg123_1.25.13.bb b/poky/meta/recipes-multimedia/mpg123/mpg123_1.25.13.bb
index 125574f..6c7b6fa 100644
--- a/poky/meta/recipes-multimedia/mpg123/mpg123_1.25.13.bb
+++ b/poky/meta/recipes-multimedia/mpg123/mpg123_1.25.13.bb
@@ -14,6 +14,8 @@
 SRC_URI[md5sum] = "294a6c30546504ec3d0deac2b2ea22be"
 SRC_URI[sha256sum] = "90306848359c793fd43b9906e52201df18775742dc3c81c06ab67a806509890a"
 
+UPSTREAM_CHECK_REGEX = "mpg123-(?P<pver>\d+(\.\d+)+)\.tar"
+
 inherit autotools pkgconfig
 
 # The options should be mutually exclusive for configuration script.
diff --git a/poky/meta/recipes-multimedia/pulseaudio/pulseaudio_13.0.bb b/poky/meta/recipes-multimedia/pulseaudio/pulseaudio_13.0.bb
index 601499b..b7a4a9b 100644
--- a/poky/meta/recipes-multimedia/pulseaudio/pulseaudio_13.0.bb
+++ b/poky/meta/recipes-multimedia/pulseaudio/pulseaudio_13.0.bb
@@ -8,6 +8,7 @@
            "
 SRC_URI[md5sum] = "e41d606f90254ed45c90520faf83d95c"
 SRC_URI[sha256sum] = "961b23ca1acfd28f2bc87414c27bb40e12436efcf2158d29721b1e89f3f28057"
+UPSTREAM_CHECK_REGEX = "pulseaudio-(?P<pver>\d+(\.(?!99)\d+)+)\.tar"
 
 do_compile_prepend() {
     mkdir -p ${S}/libltdl
diff --git a/poky/meta/recipes-multimedia/x264/x264_git.bb b/poky/meta/recipes-multimedia/x264/x264_git.bb
index 39429a8..1ff5348 100644
--- a/poky/meta/recipes-multimedia/x264/x264_git.bb
+++ b/poky/meta/recipes-multimedia/x264/x264_git.bb
@@ -14,7 +14,7 @@
            "
 UPSTREAM_CHECK_COMMITS = "1"
 
-SRCREV = "1771b556ee45207f8711744ccbd5d42a3949b14c"
+SRCREV = "296494a4011f58f32adc54304a2654627558c59a"
 
 PV = "r2991+git${SRCPV}"
 
