diff --git a/sound/soc/tegra-alt/include/tegra210_spdif_alt.h b/sound/soc/tegra-alt/include/tegra210_spdif_alt.h
deleted file mode 100644
index 85a0aa48..00000000
--- a/sound/soc/tegra-alt/include/tegra210_spdif_alt.h
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * tegra210_spdif.h - Definitions for Tegra210 SPDIF driver
- *
- * Copyright (c) 2014-2019, NVIDIA CORPORATION. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope 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, see .
- */
-
-#ifndef __TEGRA210_SPDIF_ALT_H__
-#define __TEGRA210_SPDIF_ALT_H__
-
-/* Register offsets from TEGRA_SPDIF_BASE */
-
-#define TEGRA210_SPDIF_CTRL 0x0
-#define TEGRA210_SPDIF_STROBE_CTRL 0x4
-#define TEGRA210_SPDIF_CIF_TXD_CTRL 0x08
-#define TEGRA210_SPDIF_CIF_RXD_CTRL 0x0C
-#define TEGRA210_SPDIF_CIF_TXU_CTRL 0x10
-#define TEGRA210_SPDIF_CIF_RXU_CTRL 0x14
-#define TEGRA210_SPDIF_CH_STA_RX_A 0x18
-#define TEGRA210_SPDIF_CH_STA_RX_B 0x1C
-#define TEGRA210_SPDIF_CH_STA_RX_C 0x20
-#define TEGRA210_SPDIF_CH_STA_RX_D 0x24
-#define TEGRA210_SPDIF_CH_STA_RX_E 0x28
-#define TEGRA210_SPDIF_CH_STA_RX_F 0x2C
-#define TEGRA210_SPDIF_CH_STA_TX_A 0x30
-#define TEGRA210_SPDIF_CH_STA_TX_B 0x34
-#define TEGRA210_SPDIF_CH_STA_TX_C 0x38
-#define TEGRA210_SPDIF_CH_STA_TX_D 0x3C
-#define TEGRA210_SPDIF_CH_STA_TX_E 0x40
-#define TEGRA210_SPDIF_CH_STA_TX_F 0x44
-#define TEGRA210_SPDIF_FLOWCTL_CTRL 0x70
-#define TEGRA210_SPDIF_TX_STEP 0x74
-#define TEGRA210_SPDIF_FLOW_STATUS 0x78
-#define TEGRA210_SPDIF_FLOW_TOTAL 0x7c
-#define TEGRA210_SPDIF_FLOW_OVER 0x80
-#define TEGRA210_SPDIF_FLOW_UNDER 0x84
-#define TEGRA210_SPDIF_LCOEF_1_4_0 0x88
-#define TEGRA210_SPDIF_LCOEF_1_4_1 0x8c
-#define TEGRA210_SPDIF_LCOEF_1_4_2 0x90
-#define TEGRA210_SPDIF_LCOEF_1_4_3 0x94
-#define TEGRA210_SPDIF_LCOEF_1_4_4 0x98
-#define TEGRA210_SPDIF_LCOEF_1_4_5 0x9c
-#define TEGRA210_SPDIF_LCOEF_2_4_0 0xa0
-#define TEGRA210_SPDIF_LCOEF_2_4_1 0xa4
-#define TEGRA210_SPDIF_LCOEF_2_4_2 0xa8
-
-/* Fields in TEGRA210_SPDIF_CTRL */
-#define TEGRA210_SPDIF_CTRL_FLOWCTL_EN_ENABLE (1<<31)
-#define TEGRA210_SPDIF_CTRL_CAP_LC_LEFT_CH (1<<30)
-#define TEGRA210_SPDIF_CTRL_RX_EN_ENABLE (1<<29)
-#define TEGRA210_SPDIF_CTRL_TX_EN_ENABLE (1<<28)
-#define TEGRA210_SPDIF_CTRL_TC_EN_ENABLE (1<<27)
-#define TEGRA210_SPDIF_CTRL_TU_EN_ENABLE (1<<26)
-#define TEGRA210_SPDIF_CTRL_IE_P_RSVD_ENABLE (1<<23)
-#define TEGRA210_SPDIF_CTRL_IE_B_RSVD_ENABLE (1<<22)
-#define TEGRA210_SPDIF_CTRL_IE_C_RSVD_ENABLE (1<<21)
-#define TEGRA210_SPDIF_CTRL_IE_U_RSVD_ENABLE (1<<20)
-#define TEGRA210_SPDIF_CTRL_LBK_EN_ENABLE_MASK (1<<15)
-#define TEGRA210_SPDIF_CTRL_LBK_EN_ENABLE_SHIFT 15
-#define TEGRA210_SPDIF_CTRL_PACK_ENABLE (1<<14)
-
-#define TEGRA210_SPDIF_BIT_MODE16 0
-#define TEGRA210_SPDIF_BIT_MODE20 1
-#define TEGRA210_SPDIF_BIT_MODE24 2
-#define TEGRA210_SPDIF_BIT_MODERAW 3
-
-#define TEGRA210_SPDIF_CTRL_BIT_MODE_SHIFT 12
-#define TEGRA210_SPDIF_CTRL_BIT_MODE_MASK (3 << TEGRA210_SPDIF_CTRL_BIT_MODE_SHIFT)
-#define TEGRA210_SPDIF_CTRL_BIT_MODE_16BIT (TEGRA210_SPDIF_BIT_MODE16 << TEGRA210_SPDIF_CTRL_BIT_MODE_SHIFT)
-#define TEGRA210_SPDIF_CTRL_BIT_MODE_20BIT (TEGRA210_SPDIF_BIT_MODE20 << TEGRA210_SPDIF_CTRL_BIT_MODE_SHIFT)
-#define TEGRA210_SPDIF_CTRL_BIT_MODE_24BIT (TEGRA210_SPDIF_BIT_MODE24 << TEGRA210_SPDIF_CTRL_BIT_MODE_SHIFT)
-#define TEGRA210_SPDIF_CTRL_BIT_MODE_RAW (TEGRA210_SPDIF_BIT_MODERAW << TEGRA210_SPDIF_CTRL_BIT_MODE_SHIFT)
-
-#define TEGRA210_SPDIF_CTRL_CG_EN_ENABLE (1<<11)
-
-#define TEGRA210_SPDIF_CTRL_OBS_SEL_SHIFT 8
-#define TEGRA210_SPDIF_CTRL_OBS_SEL_NASK (0x7 << TEGRA210_SPDIF_CTRL_OBS_SEL_SHIFT)
-
-#define TEGRA210_SPDIF_CTRL_SOFT_RESET_ENABLE (1<<7)
-
-/* Fields in TEGRA210_SPDIF_STROBE_CTRL */
-#define TEGRA210_SPDIF_STROBE_CTRL_PERIOD_SHIFT 16
-#define TEGRA210_SPDIF_STROBE_CTRL_PERIOD_MASK (0xff << TEGRA210_SPDIF_STROBE_CTRL_PERIOD_SHIFT)
-
-#define TEGRA210_SPDIF_STROBE_CTRL_STROBE (1<<15)
-
-#define TEGRA210_SPDIF_STROBE_CTRL_DATA_STROBES_SHIFT 8
-#define TEGRA210_SPDIF_STROBE_CTRL_DATA_STROBES_MASK (0x1f << TEGRA210_SPDIF_STROBE_CTRL_DATA_STROBES_SHIFT)
-
-#define TEGRA210_SPDIF_STROBE_CTRL_CLOCK_PERIOD_SHIFT 0
-#define TEGRA210_SPDIF_STROBE_CTRL_CLOCK_PERIOD_MASK (0x3f << TEGRA210_SPDIF_STROBE_CTRL_CLOCK_PERIOD_SHIFT)
-
-/*
- * The 6-word receive channel data page buffer holds a block (192 frames) of
- * channel status information. The order of receive is from LSB to MSB
- * bit, and from CH_STA_RX_A to CH_STA_RX_F then back to CH_STA_RX_A.
- */
-
-/* Fields in TEGRA210_SPDIF_CH_STA_TX_A */
-#define TEGRA210_SPDIF_CH_STA_TX_A_SF_22050 0x4
-#define TEGRA210_SPDIF_CH_STA_TX_A_SF_24000 0x6
-#define TEGRA210_SPDIF_CH_STA_TX_A_SF_32000 0x3
-#define TEGRA210_SPDIF_CH_STA_TX_A_SF_44100 0x0
-#define TEGRA210_SPDIF_CH_STA_TX_A_SF_48000 0x2
-#define TEGRA210_SPDIF_CH_STA_TX_A_SF_88200 0x8
-#define TEGRA210_SPDIF_CH_STA_TX_A_SF_96000 0xA
-#define TEGRA210_SPDIF_CH_STA_TX_A_SF_176400 0xC
-#define TEGRA210_SPDIF_CH_STA_TX_A_SF_192000 0xE
-
-#define TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_SHIFT 24
-#define TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_MASK \
- (0xF << TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_22050 \
- (TEGRA210_SPDIF_CH_STA_TX_A_SF_22050 << TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_24000 \
- (TEGRA210_SPDIF_CH_STA_TX_A_SF_24000 << TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_32000 \
- (TEGRA210_SPDIF_CH_STA_TX_A_SF_32000 << TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_44100 \
- (TEGRA210_SPDIF_CH_STA_TX_A_SF_44100 << TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_48000 \
- (TEGRA210_SPDIF_CH_STA_TX_A_SF_48000 << TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_88200 \
- (TEGRA210_SPDIF_CH_STA_TX_A_SF_88200 << TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_96000 \
- (TEGRA210_SPDIF_CH_STA_TX_A_SF_96000 << TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_176400 \
- (TEGRA210_SPDIF_CH_STA_TX_A_SF_176400 << TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_192000 \
- (TEGRA210_SPDIF_CH_STA_TX_A_SF_192000 << TEGRA210_SPDIF_CH_STA_TX_A_SAMP_FREQ_SHIFT)
-
-/* Fields in TEGRA210_SPDIF_CH_STA_TX_B */
-#define TEGRA210_SPDIF_CH_STA_TX_B_SF_8000 0x6
-#define TEGRA210_SPDIF_CH_STA_TX_B_SF_11025 0xA
-#define TEGRA210_SPDIF_CH_STA_TX_B_SF_12000 0x2
-#define TEGRA210_SPDIF_CH_STA_TX_B_SF_16000 0x8
-#define TEGRA210_SPDIF_CH_STA_TX_B_SF_22050 0xB
-#define TEGRA210_SPDIF_CH_STA_TX_B_SF_24000 0x9
-#define TEGRA210_SPDIF_CH_STA_TX_B_SF_32000 0xC
-#define TEGRA210_SPDIF_CH_STA_TX_B_SF_44100 0xF
-#define TEGRA210_SPDIF_CH_STA_TX_B_SF_48000 0xD
-#define TEGRA210_SPDIF_CH_STA_TX_B_SF_88200 0x7
-#define TEGRA210_SPDIF_CH_STA_TX_B_SF_96000 0x5
-#define TEGRA210_SPDIF_CH_STA_TX_B_SF_176400 0x3
-#define TEGRA210_SPDIF_CH_STA_TX_B_SF_192000 0x1
-
-#define TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_SHIFT 4
-#define TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_MASK \
- (0xF << TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_8000 \
- (TEGRA210_SPDIF_CH_STA_TX_B_SF_8000 << TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_11025 \
- (TEGRA210_SPDIF_CH_STA_TX_B_SF_11025 << TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_12000 \
- (TEGRA210_SPDIF_CH_STA_TX_B_SF_12000 << TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_16000 \
- (TEGRA210_SPDIF_CH_STA_TX_B_SF_16000 << TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_22050 \
- (TEGRA210_SPDIF_CH_STA_TX_B_SF_22025 << TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_24000 \
- (TEGRA210_SPDIF_CH_STA_TX_B_SF_24000 << TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_32000 \
- (TEGRA210_SPDIF_CH_STA_TX_B_SF_32000 << TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_44100 \
- (TEGRA210_SPDIF_CH_STA_TX_B_SF_44100 << TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_48000 \
- (TEGRA210_SPDIF_CH_STA_TX_B_SF_48000 << TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_88200 \
- (TEGRA210_SPDIF_CH_STA_TX_B_SF_88200 << TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_96000 \
- (TEGRA210_SPDIF_CH_STA_TX_B_SF_96000 << TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_176400 \
- (TEGRA210_SPDIF_CH_STA_TX_B_SF_176400 << TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_SHIFT)
-#define TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_192000 \
- (TEGRA210_SPDIF_CH_STA_TX_B_SF_192000 << TEGRA210_SPDIF_CH_STA_TX_B_ORIG_SAMP_FREQ_SHIFT)
-
-/* Fields in TEGRA210_SPDIF_CH_STA_TX_C */
-/* Fields in TEGRA210_SPDIF_CH_STA_TX_D */
-/* Fields in TEGRA210_SPDIF_CH_STA_TX_E */
-/* Fields in TEGRA210_SPDIF_CH_STA_TX_F */
-
-/* Fields in TEGRA210_SPDIF_FLOWCTL_CTRL */
-#define TEGRA210_SPDIF_FLOWCTL_CTRL_FILTER_QUAD (1<<31)
-
-/* Fields in TEGRA210_SPDIF_TX_STEP */
-#define TEGRA210_SPDIF_TX_STEP_STEP_SIZE_SHIFT 0
-#define TEGRA210_SPDIF_TX_STEP_STEP_SIZE_MASK (0xffff << TEGRA210_SPDIF_TX_STEP_STEP_SIZE_SHIFT)
-
-/* Fields in TEGRA210_SPDIF_FLOW_STATUS */
-#define TEGRA210_SPDIF_FLOW_STATUS_COUNTER_EN_ENABLE (1<<1)
-#define TEGRA210_SPDIF_FLOW_STATUS_MONITOR_CLR_CLEAR (1<<2)
-#define TEGRA210_SPDIF_FLOW_STATUS_COUNTER_CLR_CLEAR (1<<3)
-#define TEGRA210_SPDIF_FLOW_STATUS_MONITOR_INT_EN_ENABLE (1<<4)
-#define TEGRA210_SPDIF_FLOW_STATUS_FLOW_OVERFLOW_OVER (1<<30)
-#define TEGRA210_SPDIF_FLOW_STATUS_FLOW_UNDERFLOW_UNDER (1<<31)
-
-/* Fields in TEGRA210_SPDIF_FLOW_TOTAL */
-/* Fields in TEGRA210_SPDIF_FLOW_OVER */
-/* Fields in TEGRA210_SPDIF_FLOW_UNDER */
-
-/* Fields in TEGRA210_SPDIF_LCOEF_1_4_0 */
-#define TEGRA210_SPDIF_LCOEF_1_4_0_COEF_SHIFT 0
-#define TEGRA210_SPDIF_LCOEF_1_4_0_COEF_MASK (0xffff << TEGRA30_TEGRA210_SPDIF_LCOEF_1_4_0_COEF_SHIFT)
-
-/* Fields in TEGRA210_SPDIF_LCOEF_1_4_1 */
-#define TEGRA210_SPDIF_LCOEF_1_4_1_COEF_SHIFT 0
-#define TEGRA210_SPDIF_LCOEF_1_4_1_COEF_MASK (0xffff << TEGRA210_SPDIF_LCOEF_1_4_1_COEF_SHIFT)
-
-/* Fields in TEGRA210_SPDIF_LCOEF_1_4_2 */
-#define TEGRA210_SPDIF_LCOEF_1_4_2_COEF_SHIFT 0
-#define TEGRA210_SPDIF_LCOEF_1_4_2_COEF_MASK (0xffff << TEGRA210_SPDIF_LCOEF_1_4_2_COEF_SHIFT)
-
-/* Fields in TEGRA210_SPDIF_LCOEF_1_4_3 */
-#define TEGRA210_SPDIF_LCOEF_1_4_3_COEF_SHIFT 0
-#define TEGRA210_SPDIF_LCOEF_1_4_3_COEF_MASK (0xffff << TEGRA210_SPDIF_LCOEF_1_4_3_COEF_SHIFT)
-
-/* Fields in TEGRA210_SPDIF_LCOEF_1_4_4 */
-#define TEGRA210_SPDIF_LCOEF_1_4_4_COEF_SHIFT 0
-#define TEGRA210_SPDIF_LCOEF_1_4_4_COEF_MASK (0xffff << TEGRA210_SPDIF_LCOEF_1_4_4_COEF_SHIFT)
-
-/* Fields in TEGRA210_SPDIF_LCOEF_1_4_5 */
-#define TEGRA210_SPDIF_LCOEF_1_4_5_COEF_SHIFT 0
-#define TEGRA210_SPDIF_LCOEF_1_4_5_COEF_MASK (0xffff << TEGRA210_SPDIF_LCOEF_1_4_5_COEF_SHIFT)
-
-/* Fields in TEGRA210_SPDIF_LCOEF_2_4_0 */
-#define TEGRA210_SPDIF_LCOEF_2_4_0_COEF_SHIFT 0
-#define TEGRA210_SPDIF_LCOEF_2_4_0_COEF_MASK (0xffff << TEGRA210_SPDIF_LCOEF_2_4_0_COEF_SHIFT)
-
-/* Fields in TEGRA210_SPDIF_LCOEF_2_4_1 */
-#define TEGRA210_SPDIF_LCOEF_2_4_1_COEF_SHIFT 0
-#define TEGRA210_SPDIF_LCOEF_2_4_1_COEF_MASK (0xffff << TEGRA210_SPDIF_LCOEF_2_4_1_COEF_SHIFT)
-
-/* Fields in TEGRA210_SPDIF_LCOEF_2_4_2 */
-#define TEGRA210_SPDIF_LCOEF_2_4_2_COEF_SHIFT 0
-#define TEGRA210_SPDIF_LCOEF_2_4_2_COEF_MASK (0xffff << TEGRA210_SPDIF_LCOEF_2_4_2_COEF_SHIFT)
-
-struct tegra210_spdif {
- struct clk *clk_spdif_out;
- struct clk *clk_spdif_in;
- struct regmap *regmap;
- unsigned int loopback;
-};
-
-#endif
diff --git a/sound/soc/tegra-alt/include/tegra210_xbar_alt.h b/sound/soc/tegra-alt/include/tegra210_xbar_alt.h
deleted file mode 100644
index 915c0cd3..00000000
--- a/sound/soc/tegra-alt/include/tegra210_xbar_alt.h
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * tegra210_xbar_alt.h - TEGRA210 XBAR registers
- *
- * Copyright (c) 2014-2020, NVIDIA CORPORATION. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope 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, see .
- */
-
-#ifndef __TEGRA210_XBAR_ALT_H__
-#define __TEGRA210_XBAR_ALT_H__
-
-#define TEGRA210_XBAR_PART0_RX 0x0
-#define TEGRA210_XBAR_PART1_RX 0x200
-#define TEGRA210_XBAR_PART2_RX 0x400
-#define TEGRA210_XBAR_RX_STRIDE 0x4
-#define TEGRA210_XBAR_AUDIO_RX_COUNT 90
-
-/* This register repeats twice for each XBAR TX CIF */
-/* The fields in this register are 1 bit per XBAR RX CIF */
-
-/* Fields in *_CIF_RX/TX_CTRL; used by AHUB FIFOs, and all other audio modules */
-
-#define TEGRA210_AUDIOCIF_CTRL_FIFO_THRESHOLD_SHIFT 24
-/* Channel count minus 1 */
-#define TEGRA210_AUDIOCIF_CTRL_AUDIO_CHANNELS_SHIFT 20
-/* Channel count minus 1 */
-#define TEGRA210_AUDIOCIF_CTRL_CLIENT_CHANNELS_SHIFT 16
-
-#define TEGRA210_AUDIOCIF_BITS_8 1
-#define TEGRA210_AUDIOCIF_BITS_16 3
-#define TEGRA210_AUDIOCIF_BITS_24 5
-#define TEGRA210_AUDIOCIF_BITS_32 7
-
-#define TEGRA210_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT 12
-#define TEGRA210_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT 8
-#define TEGRA210_AUDIOCIF_CTRL_EXPAND_SHIFT 6
-#define TEGRA210_AUDIOCIF_CTRL_STEREO_CONV_SHIFT 4
-#define TEGRA210_AUDIOCIF_CTRL_REPLICATE_SHIFT 3
-#define TEGRA210_AUDIOCIF_CTRL_TRUNCATE_SHIFT 1
-#define TEGRA210_AUDIOCIF_CTRL_MONO_CONV_SHIFT 0
-
-/* Fields in *AHUBRAMCTL_CTRL; used by different AHUB modules */
-#define TEGRA210_AHUBRAMCTL_CTRL_RW_READ 0
-#define TEGRA210_AHUBRAMCTL_CTRL_RW_WRITE (1 << 14)
-#define TEGRA210_AHUBRAMCTL_CTRL_ADDR_INIT_EN (1 << 13)
-#define TEGRA210_AHUBRAMCTL_CTRL_SEQ_ACCESS_EN (1 << 12)
-#define TEGRA210_AHUBRAMCTL_CTRL_RAM_ADDR_MASK 0x1ff
-
-#define TEGRA210_MAX_REGISTER_ADDR (TEGRA210_XBAR_PART2_RX + \
- (TEGRA210_XBAR_RX_STRIDE * (TEGRA210_XBAR_AUDIO_RX_COUNT - 1)))
-
-#define TEGRA186_XBAR_PART3_RX 0x600
-#define TEGRA186_XBAR_AUDIO_RX_COUNT 115
-
-#define TEGRA186_MAX_REGISTER_ADDR (TEGRA186_XBAR_PART3_RX +\
- (TEGRA210_XBAR_RX_STRIDE * (TEGRA186_XBAR_AUDIO_RX_COUNT - 1)))
-
-#define TEGRA210_XBAR_REG_MASK_0 0xf1f03ff
-#define TEGRA210_XBAR_REG_MASK_1 0x3f30031f
-#define TEGRA210_XBAR_REG_MASK_2 0xff1cf313
-#define TEGRA210_XBAR_REG_MASK_3 0x0
-#define TEGRA210_XBAR_UPDATE_MAX_REG 3
-
-#define TEGRA186_XBAR_REG_MASK_0 0xF3FFFFF
-#define TEGRA186_XBAR_REG_MASK_1 0x3F310F1F
-#define TEGRA186_XBAR_REG_MASK_2 0xFF3CF311
-#define TEGRA186_XBAR_REG_MASK_3 0x3F0F00FF
-#define TEGRA186_XBAR_UPDATE_MAX_REG 4
-
-#define TEGRA_XBAR_UPDATE_MAX_REG (TEGRA186_XBAR_UPDATE_MAX_REG)
-
-#define MUX_ENUM_CTRL_DECL(ename, id) \
- SOC_VALUE_ENUM_WIDE_DECL(ename##_enum, MUX_REG(id), 0, \
- tegra210_xbar_mux_texts, \
- tegra210_xbar_mux_values); \
- static const struct snd_kcontrol_new ename##_control = \
- SOC_DAPM_ENUM_EXT("Route", ename##_enum, \
- tegra_xbar_get_value_enum, \
- tegra_xbar_put_value_enum)
-
-#define MUX_ENUM_CTRL_DECL_186(ename, id) \
- SOC_VALUE_ENUM_WIDE_DECL(ename##_enum, MUX_REG(id), 0, \
- tegra186_xbar_mux_texts, \
- tegra186_xbar_mux_values); \
- static const struct snd_kcontrol_new ename##_control = \
- SOC_DAPM_ENUM_EXT("Route", ename##_enum, \
- tegra_xbar_get_value_enum, \
- tegra_xbar_put_value_enum)
-
-#define DAI(sname) \
- { \
- .name = #sname, \
- .playback = { \
- .stream_name = #sname " Receive", \
- .channels_min = 1, \
- .channels_max = 16, \
- .rates = SNDRV_PCM_RATE_8000_192000, \
- .formats = SNDRV_PCM_FMTBIT_S8 | \
- SNDRV_PCM_FMTBIT_S16_LE | \
- SNDRV_PCM_FMTBIT_S32_LE, \
- }, \
- .capture = { \
- .stream_name = #sname " Transmit", \
- .channels_min = 1, \
- .channels_max = 16, \
- .rates = SNDRV_PCM_RATE_8000_192000, \
- .formats = SNDRV_PCM_FMTBIT_S8 | \
- SNDRV_PCM_FMTBIT_S16_LE | \
- SNDRV_PCM_FMTBIT_S32_LE, \
- }, \
- }
-
-#define MUX_REG(id) (TEGRA210_XBAR_RX_STRIDE * (id))
-
-#define SOC_VALUE_ENUM_WIDE(xreg, shift, xmax, xtexts, xvalues) \
-{ .reg = xreg, .shift_l = shift, .shift_r = shift, \
- .items = xmax, .texts = xtexts, .values = xvalues, \
- .mask = xmax ? roundup_pow_of_two(xmax) - 1 : 0}
-
-#define SOC_VALUE_ENUM_WIDE_DECL(name, xreg, shift, xtexts, xvalues) \
- static struct soc_enum name = SOC_VALUE_ENUM_WIDE(xreg, shift, \
- ARRAY_SIZE(xtexts), xtexts, xvalues)
-
-#define WIDGETS(sname, ename) \
- SND_SOC_DAPM_AIF_IN(sname " RX", NULL, 0, SND_SOC_NOPM, 0, 0), \
- SND_SOC_DAPM_AIF_OUT(sname " TX", NULL, 0, SND_SOC_NOPM, 0, 0), \
- SND_SOC_DAPM_MUX(sname " Mux", SND_SOC_NOPM, 0, 0, \
- &ename##_control)
-
-#define TX_WIDGETS(sname) \
- SND_SOC_DAPM_AIF_IN(sname " RX", NULL, 0, SND_SOC_NOPM, 0, 0), \
- SND_SOC_DAPM_AIF_OUT(sname " TX", NULL, 0, SND_SOC_NOPM, 0, 0)
-
-#define MUX_VALUE(npart, nbit) (1 + nbit + npart * 32)
-
-#define IN_OUT_ROUTES(name) \
- { name " RX", NULL, name " Receive" }, \
- { name " Transmit", NULL, name " TX" },
-
-struct tegra210_xbar_cif_conf {
- unsigned int threshold;
- unsigned int audio_channels;
- unsigned int client_channels;
- unsigned int audio_bits;
- unsigned int client_bits;
- unsigned int expand;
- unsigned int stereo_conv;
- union {
- unsigned int fifo_size_downshift;
- unsigned int replicate;
- };
- unsigned int truncate;
- unsigned int mono_conv;
-};
-
-struct tegra_xbar_soc_data {
- const struct regmap_config *regmap_config;
- unsigned int mask[4];
- unsigned int reg_count;
- unsigned int num_dais;
- struct snd_soc_codec_driver *codec_drv;
- struct snd_soc_dai_driver *dai_drv;
-};
-
-struct tegra_xbar {
- struct clk *clk;
- struct regmap *regmap;
- const struct tegra_xbar_soc_data *soc_data;
-};
-
-/* Extension of soc_bytes structure defined in sound/soc.h */
-struct tegra_soc_bytes {
- struct soc_bytes soc;
- u32 shift; /* Used as offset for ahub ram related programing */
-};
-
-void tegra210_xbar_set_cif(struct regmap *regmap, unsigned int reg,
- struct tegra210_xbar_cif_conf *conf);
-void tegra210_xbar_write_ahubram(struct regmap *regmap, unsigned int reg_ctrl,
- unsigned int reg_data, unsigned int ram_offset,
- unsigned int *data, size_t size);
-void tegra210_xbar_read_ahubram(struct regmap *regmap, unsigned int reg_ctrl,
- unsigned int reg_data, unsigned int ram_offset,
- unsigned int *data, size_t size);
-
-/* Utility structures for using mixer control of type snd_soc_bytes */
-#define TEGRA_SOC_BYTES_EXT(xname, xbase, xregs, xshift, xmask, \
- xhandler_get, xhandler_put, xinfo) \
- {.iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
- .info = xinfo, .get = xhandler_get, .put = xhandler_put, \
- .private_value = ((unsigned long)&(struct tegra_soc_bytes) \
- {.soc.base = xbase, .soc.num_regs = xregs, .soc.mask = xmask, \
- .shift = xshift })}
-#endif
diff --git a/sound/soc/tegra-alt/machine_drivers/tegra_machine_driver_mobile.c b/sound/soc/tegra-alt/machine_drivers/tegra_machine_driver_mobile.c
deleted file mode 100644
index 2510ebbe..00000000
--- a/sound/soc/tegra-alt/machine_drivers/tegra_machine_driver_mobile.c
+++ /dev/null
@@ -1,578 +0,0 @@
-/*
- * tegra_machine_driver_mobile.c - Tegra ASoC Machine driver for mobile
- *
- * Copyright (c) 2017-2020 NVIDIA CORPORATION. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope 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, see .
- */
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include "rt5659.h"
-#include "sgtl5000.h"
-#include "tegra_asoc_machine_alt.h"
-#include "tegra210_xbar_alt.h"
-
-#define DRV_NAME "tegra-asoc:"
-
-static const char * const tegra_machine_srate_text[] = {
- "None",
- "8kHz",
- "16kHz",
- "44kHz",
- "48kHz",
- "11kHz",
- "22kHz",
- "24kHz",
- "32kHz",
- "88kHz",
- "96kHz",
- "176kHz",
- "192kHz",
-};
-
-static const char * const tegra_machine_format_text[] = {
- "None",
- "16",
- "32",
-};
-
-static const struct soc_enum tegra_machine_codec_rate =
- SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(tegra_machine_srate_text),
- tegra_machine_srate_text);
-
-static const struct soc_enum tegra_machine_codec_format =
- SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(tegra_machine_format_text),
- tegra_machine_format_text);
-
-static const int tegra_machine_srate_values[] = {
- 0,
- 8000,
- 16000,
- 44100,
- 48000,
- 11025,
- 22050,
- 24000,
- 32000,
- 88200,
- 96000,
- 176400,
- 192000,
-};
-
-static int tegra_machine_codec_get_rate(struct snd_kcontrol *kcontrol,
- struct snd_ctl_elem_value *ucontrol)
-{
- struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
- struct tegra_machine *machine = snd_soc_card_get_drvdata(card);
-
- ucontrol->value.integer.value[0] = machine->rate_via_kcontrol;
-
- return 0;
-}
-
-static int tegra_machine_codec_put_rate(struct snd_kcontrol *kcontrol,
- struct snd_ctl_elem_value *ucontrol)
-{
- struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
- struct tegra_machine *machine = snd_soc_card_get_drvdata(card);
-
- /* set the rate control flag */
- machine->rate_via_kcontrol = ucontrol->value.integer.value[0];
-
- return 0;
-}
-
-static int tegra_machine_codec_get_format(struct snd_kcontrol *kcontrol,
- struct snd_ctl_elem_value *ucontrol)
-{
- struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
- struct tegra_machine *machine = snd_soc_card_get_drvdata(card);
-
- ucontrol->value.integer.value[0] = machine->fmt_via_kcontrol;
-
- return 0;
-}
-
-static int tegra_machine_codec_put_format(struct snd_kcontrol *kcontrol,
- struct snd_ctl_elem_value *ucontrol)
-{
- struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
- struct tegra_machine *machine = snd_soc_card_get_drvdata(card);
-
- /* set the format control flag */
- machine->fmt_via_kcontrol = ucontrol->value.integer.value[0];
-
- return 0;
-}
-
-static int tegra_machine_dai_init(struct snd_soc_pcm_runtime *runtime,
- unsigned int rate, unsigned int channels,
- u64 formats)
-{
- unsigned int mask = (1 << channels) - 1;
- struct snd_soc_card *card = runtime->card;
- struct tegra_machine *machine = snd_soc_card_get_drvdata(card);
- struct snd_soc_pcm_stream *dai_params;
- unsigned int aud_mclk, srate;
- u64 format_k, fmt;
- int err;
- struct snd_soc_pcm_runtime *rtd;
-
- srate = (machine->rate_via_kcontrol) ?
- tegra_machine_srate_values[machine->rate_via_kcontrol] :
- rate;
- format_k = (machine->fmt_via_kcontrol == 2) ?
- (1ULL << SNDRV_PCM_FORMAT_S32_LE) : formats;
-
- err = tegra_alt_asoc_utils_set_rate(&machine->audio_clock, srate, 0, 0);
- if (err < 0) {
- dev_err(card->dev, "Can't configure clocks\n");
- return err;
- }
-
- aud_mclk = machine->audio_clock.set_aud_mclk_rate;
-
- pr_debug("pll_a_out0 = %u Hz, aud_mclk = %u Hz, sample rate = %u Hz\n",
- machine->audio_clock.set_pll_out_rate, aud_mclk, srate);
-
- list_for_each_entry(rtd, &card->rtd_list, list) {
- if (!rtd->dai_link->params)
- continue;
- dai_params = (struct snd_soc_pcm_stream *)rtd->dai_link->params;
- dai_params->rate_min = srate;
- dai_params->channels_min = channels;
- dai_params->formats = format_k;
-
- fmt = rtd->dai_link->dai_fmt & SND_SOC_DAIFMT_FORMAT_MASK;
- /* set TDM slot mask */
- if (fmt == SND_SOC_DAIFMT_DSP_A ||
- fmt == SND_SOC_DAIFMT_DSP_B) {
- err = snd_soc_dai_set_tdm_slot(
- rtd->cpu_dai, mask,
- mask, 0, 0);
- if (err < 0) {
- dev_err(card->dev,
- "%s cpu DAI slot mask not set\n",
- rtd->cpu_dai->name);
- return err;
- }
- }
- }
-
- rtd = snd_soc_get_pcm_runtime(card, "rt565x-playback");
- if (rtd) {
- err = snd_soc_dai_set_sysclk(rtd->codec_dai, RT5659_SCLK_S_MCLK,
- aud_mclk, SND_SOC_CLOCK_IN);
- if (err < 0) {
- dev_err(card->dev, "codec_dai clock not set\n");
- return err;
- }
- }
-
- rtd = snd_soc_get_pcm_runtime(card, "rt565x-codec-sysclk-bclk1");
- if (rtd) {
- unsigned int bclk_rate;
- dai_params = (struct snd_soc_pcm_stream *)rtd->dai_link->params;
-
- switch (dai_params->formats) {
- case SNDRV_PCM_FMTBIT_S8:
- bclk_rate = srate * channels * 8;
- break;
- case SNDRV_PCM_FMTBIT_S16_LE:
- bclk_rate = srate * channels * 16;
- break;
- case SNDRV_PCM_FMTBIT_S32_LE:
- bclk_rate = srate * channels * 32;
- break;
- default:
- dev_err(card->dev, "invalid format %llu\n",
- dai_params->formats);
- return -EINVAL;
- }
-
- err = snd_soc_dai_set_pll(rtd->codec_dai, 0,
- RT5659_PLL1_S_BCLK1,
- bclk_rate, srate * 256);
- if (err < 0) {
- dev_err(card->dev, "failed to set codec pll\n");
- return err;
- }
-
- err = snd_soc_dai_set_sysclk(rtd->codec_dai, RT5659_SCLK_S_PLL1,
- srate * 256, SND_SOC_CLOCK_IN);
- if (err < 0) {
- dev_err(card->dev, "codec_dai clock not set\n");
- return err;
- }
- }
-
- rtd = snd_soc_get_pcm_runtime(card, "dspk-playback-r");
- if (rtd) {
- if (!strcmp(rtd->codec_dai->name, "tas2552-amplifier")) {
- err = snd_soc_dai_set_sysclk(rtd->codec_dai,
- TAS2552_PDM_CLK_IVCLKIN, aud_mclk,
- SND_SOC_CLOCK_IN);
- if (err < 0) {
- dev_err(card->dev, "codec_dai clock not set\n");
- return err;
- }
- }
- }
-
- rtd = snd_soc_get_pcm_runtime(card, "dspk-playback-l");
- if (rtd) {
- if (!strcmp(rtd->codec_dai->name, "tas2552-amplifier")) {
- err = snd_soc_dai_set_sysclk(rtd->codec_dai,
- TAS2552_PDM_CLK_IVCLKIN, aud_mclk,
- SND_SOC_CLOCK_IN);
- if (err < 0) {
- dev_err(card->dev, "codec_dai clock not set\n");
- return err;
- }
- }
- }
-
- return 0;
-}
-
-static int tegra_machine_pcm_hw_params(struct snd_pcm_substream *substream,
- struct snd_pcm_hw_params *params)
-{
- struct snd_soc_pcm_runtime *rtd = substream->private_data;
- struct snd_soc_card *card = rtd->card;
- int err;
-
- err = tegra_machine_dai_init(rtd, params_rate(params),
- params_channels(params),
- 1ULL << params_format(params));
- if (err < 0) {
- dev_err(card->dev, "Failed dai init\n");
- return err;
- }
-
- return 0;
-}
-
-static int tegra_machine_pcm_startup(struct snd_pcm_substream *substream)
-{
- struct snd_soc_pcm_runtime *rtd = substream->private_data;
- struct tegra_machine *machine = snd_soc_card_get_drvdata(rtd->card);
-
- tegra_alt_asoc_utils_clk_enable(&machine->audio_clock);
-
- return 0;
-}
-
-static void tegra_machine_pcm_shutdown(struct snd_pcm_substream *substream)
-{
- struct snd_soc_pcm_runtime *rtd = substream->private_data;
- struct tegra_machine *machine = snd_soc_card_get_drvdata(rtd->card);
-
- tegra_alt_asoc_utils_clk_disable(&machine->audio_clock);
-}
-
-static int tegra_machine_suspend_pre(struct snd_soc_card *card)
-{
- struct snd_soc_pcm_runtime *rtd;
-
- /* DAPM dai link stream work for non pcm links */
- list_for_each_entry(rtd, &card->rtd_list, list) {
- if (rtd->dai_link->params)
- INIT_DELAYED_WORK(&rtd->delayed_work, NULL);
- }
-
- return 0;
-}
-
-static int tegra_machine_compr_startup(struct snd_compr_stream *cstream)
-{
- struct snd_soc_pcm_runtime *rtd = cstream->private_data;
- struct snd_soc_card *card = rtd->card;
- struct tegra_machine *machine = snd_soc_card_get_drvdata(card);
-
- tegra_alt_asoc_utils_clk_enable(&machine->audio_clock);
-
- return 0;
-}
-
-static void tegra_machine_compr_shutdown(struct snd_compr_stream *cstream)
-{
- struct snd_soc_pcm_runtime *rtd = cstream->private_data;
- struct snd_soc_card *card = rtd->card;
- struct tegra_machine *machine = snd_soc_card_get_drvdata(card);
-
- tegra_alt_asoc_utils_clk_disable(&machine->audio_clock);
-}
-
-static int tegra_machine_compr_set_params(struct snd_compr_stream *cstream)
-{
- struct snd_soc_pcm_runtime *rtd = cstream->private_data;
- struct snd_soc_card *card = rtd->card;
- struct snd_soc_platform *platform = rtd->platform;
- struct snd_codec codec_params;
- int err;
-
- if (platform->driver->compr_ops &&
- platform->driver->compr_ops->get_params) {
- err = platform->driver->compr_ops->get_params(cstream,
- &codec_params);
- if (err < 0) {
- dev_err(card->dev, "Failed to get compr params\n");
- return err;
- }
- } else {
- dev_err(card->dev, "compr ops not set\n");
- return -EINVAL;
- }
-
- err = tegra_machine_dai_init(rtd, codec_params.sample_rate,
- codec_params.ch_out,
- SNDRV_PCM_FMTBIT_S16_LE);
- if (err < 0) {
- dev_err(card->dev, "Failed dai init\n");
- return err;
- }
-
- return 0;
-}
-
-static int tegra_machine_fepi_init(struct snd_soc_pcm_runtime *rtd)
-{
- struct device *dev = rtd->card->dev;
- int err;
-
- err = snd_soc_dai_set_sysclk(rtd->codec_dai, SGTL5000_SYSCLK, 12288000,
- SND_SOC_CLOCK_IN);
- if (err) {
- dev_err(dev, "failed to set sgtl5000 sysclk!\n");
- return err;
- }
-
- return 0;
-}
-
-static int tegra_machine_rt565x_init(struct snd_soc_pcm_runtime *rtd)
-{
- struct snd_soc_card *card = rtd->card;
- struct snd_soc_jack *jack;
- int err;
-
- jack = devm_kzalloc(card->dev, sizeof(struct snd_soc_jack), GFP_KERNEL);
- if (!jack)
- return -ENOMEM;
-
- err = snd_soc_card_jack_new(card, "Headset Jack", SND_JACK_HEADSET,
- jack, NULL, 0);
- if (err) {
- dev_err(card->dev, "Headset Jack creation failed %d\n", err);
- return err;
- }
-
- err = tegra_machine_add_codec_jack_control(card, rtd, jack);
- if (err) {
- dev_err(card->dev, "Failed to add jack control: %d\n", err);
- return err;
- }
-
- err = rt5659_set_jack_detect(rtd->codec, jack);
- if (err) {
- dev_err(card->dev, "Failed to set jack for RT565x: %d\n", err);
- return err;
- }
-
- /* single button supporting play/pause */
- snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_MEDIA);
-
- /* multiple buttons supporting play/pause and volume up/down */
- snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_MEDIA);
- snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEUP);
- snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOLUMEDOWN);
-
- snd_soc_dapm_sync(&card->dapm);
-
- return 0;
-}
-
-static int codec_init(struct tegra_machine *machine)
-{
- struct snd_soc_dai_link *dai_links = machine->asoc->dai_links;
- unsigned int num_links = machine->asoc->num_links, i;
-
- if (!dai_links || !num_links)
- return -EINVAL;
-
- for (i = 0; i < num_links; i++) {
- if (!dai_links[i].name)
- continue;
-
- if (strstr(dai_links[i].name, "rt565x-playback") ||
- strstr(dai_links[i].name, "rt565x-codec-sysclk-bclk1"))
- dai_links[i].init = tegra_machine_rt565x_init;
- else if (strstr(dai_links[i].name, "fe-pi-audio-z-v2"))
- dai_links[i].init = tegra_machine_fepi_init;
- }
-
- return 0;
-}
-
-static struct snd_soc_ops tegra_machine_pcm_ops = {
- .hw_params = tegra_machine_pcm_hw_params,
- .startup = tegra_machine_pcm_startup,
- .shutdown = tegra_machine_pcm_shutdown,
-};
-
-static struct snd_soc_compr_ops tegra_machine_compr_ops = {
- .set_params = tegra_machine_compr_set_params,
- .startup = tegra_machine_compr_startup,
- .shutdown = tegra_machine_compr_shutdown,
-};
-
-static int add_dai_links(struct snd_soc_card *card)
-{
- struct tegra_machine *machine = snd_soc_card_get_drvdata(card);
- int ret;
-
- ret = parse_card_info(card, &tegra_machine_pcm_ops,
- &tegra_machine_compr_ops);
- if (ret < 0)
- return ret;
-
- ret = codec_init(machine);
- if (ret < 0)
- return ret;
-
- return 0;
-}
-
-static const struct snd_kcontrol_new tegra_machine_controls[] = {
- SOC_ENUM_EXT("codec-x rate", tegra_machine_codec_rate,
- tegra_machine_codec_get_rate, tegra_machine_codec_put_rate),
- SOC_ENUM_EXT("codec-x format", tegra_machine_codec_format,
- tegra_machine_codec_get_format, tegra_machine_codec_put_format),
-};
-
-static struct snd_soc_card snd_soc_tegra_card = {
- .owner = THIS_MODULE,
- .controls = tegra_machine_controls,
- .num_controls = ARRAY_SIZE(tegra_machine_controls),
- .suspend_pre = tegra_machine_suspend_pre,
- .fully_routed = true,
-};
-
-/* structure to match device tree node */
-static const struct of_device_id tegra_machine_of_match[] = {
- { .compatible = "nvidia,tegra-audio-t186ref-mobile-rt565x" },
- { .compatible = "nvidia,tegra-audio-t210ref-mobile-rt565x" },
- {},
-};
-
-static int tegra_machine_driver_probe(struct platform_device *pdev)
-{
- struct snd_soc_card *card = &snd_soc_tegra_card;
- struct tegra_machine *machine;
- int ret = 0;
-
- machine = devm_kzalloc(&pdev->dev, sizeof(*machine), GFP_KERNEL);
- if (!machine)
- return -ENOMEM;
-
- machine->asoc = devm_kzalloc(&pdev->dev, sizeof(*machine->asoc),
- GFP_KERNEL);
- if (!machine->asoc)
- return -ENOMEM;
-
- card->dev = &pdev->dev;
- platform_set_drvdata(pdev, card);
- snd_soc_card_set_drvdata(card, machine);
-
- card->dapm.idle_bias_off = true;
-
- memset(&machine->audio_clock, 0, sizeof(machine->audio_clock));
- ret = tegra_alt_asoc_utils_init(&machine->audio_clock,
- &pdev->dev,
- card);
- if (ret < 0)
- return ret;
-
- ret = add_dai_links(card);
- if (ret < 0)
- goto cleanup_asoc;
-
- ret = snd_soc_register_card(card);
- if (ret) {
- dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n",
- ret);
- goto cleanup_asoc;
- }
-
- tegra_machine_add_i2s_codec_controls(card);
-
- return 0;
-cleanup_asoc:
- release_asoc_phandles(machine);
- return ret;
-}
-
-static int tegra_machine_driver_remove(struct platform_device *pdev)
-{
- struct snd_soc_card *card = platform_get_drvdata(pdev);
-
- snd_soc_unregister_card(card);
-
- return 0;
-}
-
-#if CONFIG_PM
-static void tegra_asoc_machine_resume(struct device *dev)
-{
- WARN_ON(snd_soc_resume(dev));
-}
-#else
-#define tegra_asoc_machine_resume NULL
-#endif
-
-static const struct dev_pm_ops tegra_asoc_machine_pm_ops = {
- .prepare = snd_soc_suspend,
- .complete = tegra_asoc_machine_resume,
- .poweroff = snd_soc_poweroff,
-};
-
-static struct platform_driver tegra_asoc_machine_driver = {
- .driver = {
- .name = DRV_NAME,
- .owner = THIS_MODULE,
- .pm = &tegra_asoc_machine_pm_ops,
- .of_match_table = tegra_machine_of_match,
- },
- .probe = tegra_machine_driver_probe,
- .remove = tegra_machine_driver_remove,
-};
-module_platform_driver(tegra_asoc_machine_driver);
-
-MODULE_AUTHOR("Mohan Kumar , Sameer Pujar ");
-MODULE_DESCRIPTION("Tegra ASoC machine driver");
-MODULE_LICENSE("GPL");
-MODULE_ALIAS("platform:" DRV_NAME);
-MODULE_DEVICE_TABLE(of, tegra_machine_of_match);
diff --git a/sound/soc/tegra-alt/tegra210_spdif_alt.c b/sound/soc/tegra-alt/tegra210_spdif_alt.c
deleted file mode 100644
index 981e14da..00000000
--- a/sound/soc/tegra-alt/tegra210_spdif_alt.c
+++ /dev/null
@@ -1,485 +0,0 @@
-/*
- * tegra210_spdif_alt.c - Tegra210 SPDIF driver
- *
- * Copyright (c) 2014-2019 NVIDIA CORPORATION. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope 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, see .
- */
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include "tegra210_xbar_alt.h"
-#include "tegra210_spdif_alt.h"
-
-#define DRV_NAME "tegra210-spdif"
-
-static const struct reg_default tegra210_spdif_reg_defaults[] = {
- { TEGRA210_SPDIF_CIF_TXD_CTRL, 0x00001100},
- { TEGRA210_SPDIF_CIF_RXD_CTRL, 0x00001100},
- { TEGRA210_SPDIF_CIF_TXU_CTRL, 0x00001100},
- { TEGRA210_SPDIF_CIF_RXU_CTRL, 0x00001100},
- { TEGRA210_SPDIF_FLOWCTL_CTRL, 0x80000000},
- { TEGRA210_SPDIF_TX_STEP, 0x00008000},
- { TEGRA210_SPDIF_LCOEF_1_4_0, 0x0000002e},
- { TEGRA210_SPDIF_LCOEF_1_4_1, 0x0000f9e6},
- { TEGRA210_SPDIF_LCOEF_1_4_2, 0x000020ca},
- { TEGRA210_SPDIF_LCOEF_1_4_3, 0x00007147},
- { TEGRA210_SPDIF_LCOEF_1_4_4, 0x0000f17e},
- { TEGRA210_SPDIF_LCOEF_1_4_5, 0x000001e0},
- { TEGRA210_SPDIF_LCOEF_2_4_0, 0x00000117},
- { TEGRA210_SPDIF_LCOEF_2_4_1, 0x0000f26b},
- { TEGRA210_SPDIF_LCOEF_2_4_2, 0x00004c07},
-};
-
-static int tegra210_spdif_runtime_suspend(struct device *dev)
-{
- struct tegra210_spdif *spdif = dev_get_drvdata(dev);
- int ret;
-
- regcache_cache_only(spdif->regmap, true);
- regcache_mark_dirty(spdif->regmap);
- if (!(tegra_platform_is_unit_fpga() || tegra_platform_is_fpga())) {
- clk_disable_unprepare(spdif->clk_spdif_out);
- clk_disable_unprepare(spdif->clk_spdif_in);
- }
-
- return 0;
-}
-
-static int tegra210_spdif_runtime_resume(struct device *dev)
-{
- struct tegra210_spdif *spdif = dev_get_drvdata(dev);
- int ret;
-
- if (!(tegra_platform_is_unit_fpga() || tegra_platform_is_fpga())) {
- ret = clk_prepare_enable(spdif->clk_spdif_out);
- if (ret) {
- dev_err(dev, "spdif_out_clk_enable failed: %d\n", ret);
- return ret;
- }
-
- ret = clk_prepare_enable(spdif->clk_spdif_in);
- if (ret) {
- dev_err(dev, "spdif_in_clk_enable failed: %d\n", ret);
- return ret;
- }
- }
-
- regcache_cache_only(spdif->regmap, false);
- regcache_sync(spdif->regmap);
-
- return 0;
-}
-
-static int tegra210_spdif_set_dai_sysclk(struct snd_soc_dai *dai,
- int clk_id, unsigned int freq, int dir)
-{
- struct device *dev = dai->dev;
- struct tegra210_spdif *spdif = snd_soc_dai_get_drvdata(dai);
- int spdif_out_clock_rate, spdif_in_clock_rate;
- int ret;
-
- switch (freq) {
- case 32000:
- spdif_out_clock_rate = 4096000;
- spdif_in_clock_rate = 48000000;
- break;
- case 44100:
- spdif_out_clock_rate = 5644800;
- spdif_in_clock_rate = 48000000;
- break;
- case 48000:
- spdif_out_clock_rate = 6144000;
- spdif_in_clock_rate = 48000000;
- break;
- case 88200:
- spdif_out_clock_rate = 11289600;
- spdif_in_clock_rate = 72000000;
- break;
- case 96000:
- spdif_out_clock_rate = 12288000;
- spdif_in_clock_rate = 72000000;
- break;
- case 176400:
- spdif_out_clock_rate = 22579200;
- spdif_in_clock_rate = 108000000;
- break;
- case 192000:
- spdif_out_clock_rate = 24576000;
- spdif_in_clock_rate = 108000000;
- break;
- default:
- return -EINVAL;
- }
-
- if (!(tegra_platform_is_unit_fpga() || tegra_platform_is_fpga())) {
- if (dir == SND_SOC_CLOCK_OUT) {
- ret = clk_set_rate(spdif->clk_spdif_out,
- spdif_out_clock_rate);
- if (ret) {
- dev_err(dev,
- "Can't set SPDIF Out clock rate: %d\n",
- ret);
- return ret;
- }
- } else {
- ret = clk_set_rate(spdif->clk_spdif_in,
- spdif_in_clock_rate);
- if (ret) {
- dev_err(dev,
- "Can't set SPDIF In clock rate: %d\n",
- ret);
- return ret;
- }
- }
- }
-
- return 0;
-}
-
-static int tegra210_spdif_hw_params(struct snd_pcm_substream *substream,
- struct snd_pcm_hw_params *params,
- struct snd_soc_dai *dai)
-{
- struct device *dev = dai->dev;
- struct tegra210_spdif *spdif = snd_soc_dai_get_drvdata(dai);
- int channels, audio_bits, bit_mode;
- struct tegra210_xbar_cif_conf cif_conf;
-
- memset(&cif_conf, 0, sizeof(struct tegra210_xbar_cif_conf));
-
- channels = params_channels(params);
-
- if (channels < 2) {
- dev_err(dev, "Doesn't support %d channels\n", channels);
- return -EINVAL;
- }
-
- switch (params_format(params)) {
- case SNDRV_PCM_FORMAT_S16_LE:
- audio_bits = TEGRA210_AUDIOCIF_BITS_16;
- bit_mode = TEGRA210_SPDIF_BIT_MODE16;
- break;
- case SNDRV_PCM_FORMAT_S32_LE:
- audio_bits = TEGRA210_AUDIOCIF_BITS_32;
- bit_mode = TEGRA210_SPDIF_BIT_MODERAW;
- break;
- default:
- return -EINVAL;
- }
-
- cif_conf.audio_channels = channels;
- cif_conf.client_channels = channels;
- cif_conf.audio_bits = audio_bits;
- cif_conf.client_bits = audio_bits;
-
- regmap_update_bits(spdif->regmap, TEGRA210_SPDIF_CTRL,
- TEGRA210_SPDIF_CTRL_BIT_MODE_MASK,
- bit_mode);
-
- /* As a CODEC DAI, CAPTURE is transmit */
- if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
- tegra210_xbar_set_cif(spdif->regmap,
- TEGRA210_SPDIF_CIF_TXD_CTRL,
- &cif_conf);
- } else {
- tegra210_xbar_set_cif(spdif->regmap,
- TEGRA210_SPDIF_CIF_RXD_CTRL,
- &cif_conf);
- }
-
- return 0;
-}
-
-static struct snd_soc_dai_ops tegra210_spdif_dai_ops = {
- .hw_params = tegra210_spdif_hw_params,
- .set_sysclk = tegra210_spdif_set_dai_sysclk,
-};
-
-static struct snd_soc_dai_driver tegra210_spdif_dais[] = {
- {
- .name = "CIF",
- .playback = {
- .stream_name = "CIF Receive",
- .channels_min = 1,
- .channels_max = 16,
- .rates = SNDRV_PCM_RATE_8000_96000,
- .formats = SNDRV_PCM_FMTBIT_S16_LE,
- },
- .capture = {
- .stream_name = "CIF Transmit",
- .channels_min = 1,
- .channels_max = 16,
- .rates = SNDRV_PCM_RATE_8000_96000,
- .formats = SNDRV_PCM_FMTBIT_S16_LE,
- },
- },
- {
- .name = "DAP",
- .playback = {
- .stream_name = "DAP Receive",
- .channels_min = 1,
- .channels_max = 16,
- .rates = SNDRV_PCM_RATE_8000_96000,
- .formats = SNDRV_PCM_FMTBIT_S16_LE,
- },
- .capture = {
- .stream_name = "DAP Transmit",
- .channels_min = 1,
- .channels_max = 16,
- .rates = SNDRV_PCM_RATE_8000_96000,
- .formats = SNDRV_PCM_FMTBIT_S16_LE,
- },
- .ops = &tegra210_spdif_dai_ops,
- }
-};
-
-static int tegra210_spdif_loopback_get(struct snd_kcontrol *kcontrol,
- struct snd_ctl_elem_value *ucontrol)
-{
- struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
- struct tegra210_spdif *spdif = snd_soc_codec_get_drvdata(codec);
-
- ucontrol->value.integer.value[0] = spdif->loopback;
-
- return 0;
-}
-
-static int tegra210_spdif_loopback_put(struct snd_kcontrol *kcontrol,
- struct snd_ctl_elem_value *ucontrol)
-{
- struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
- struct tegra210_spdif *spdif = snd_soc_codec_get_drvdata(codec);
-
- spdif->loopback = ucontrol->value.integer.value[0];
-
- pm_runtime_get_sync(codec->dev);
- regmap_update_bits(spdif->regmap, TEGRA210_SPDIF_CTRL,
- TEGRA210_SPDIF_CTRL_LBK_EN_ENABLE_MASK,
- spdif->loopback << TEGRA210_SPDIF_CTRL_LBK_EN_ENABLE_SHIFT);
- pm_runtime_put(codec->dev);
-
- return 0;
-}
-
-static const struct snd_kcontrol_new tegra210_spdif_controls[] = {
- SOC_SINGLE_EXT("Loopback", SND_SOC_NOPM, 0, 1, 0,
- tegra210_spdif_loopback_get, tegra210_spdif_loopback_put),
-};
-
-static const struct snd_soc_dapm_widget tegra210_spdif_widgets[] = {
- SND_SOC_DAPM_AIF_IN("CIF RX", NULL, 0, SND_SOC_NOPM, 0, 0),
- SND_SOC_DAPM_AIF_OUT("CIF TX", NULL, 0, SND_SOC_NOPM, 0, 0),
- SND_SOC_DAPM_AIF_IN("DAP RX", NULL, 0, TEGRA210_SPDIF_CTRL, 29, 0),
- SND_SOC_DAPM_AIF_OUT("DAP TX", NULL, 0, TEGRA210_SPDIF_CTRL, 28, 0),
-};
-
-static const struct snd_soc_dapm_route tegra210_spdif_routes[] = {
- { "CIF RX", NULL, "CIF Receive"},
- { "DAP TX", NULL, "CIF RX"},
- { "DAP Transmit", NULL, "DAP TX"},
-
- { "DAP RX", NULL, "DAP Receive"},
- { "CIF TX", NULL, "DAP RX"},
- { "CIF Transmit", NULL, "CIF TX"},
-};
-
-static struct snd_soc_codec_driver tegra210_spdif_codec = {
- .idle_bias_off = 1,
- .component_driver = {
- .dapm_widgets = tegra210_spdif_widgets,
- .num_dapm_widgets = ARRAY_SIZE(tegra210_spdif_widgets),
- .dapm_routes = tegra210_spdif_routes,
- .num_dapm_routes = ARRAY_SIZE(tegra210_spdif_routes),
- .controls = tegra210_spdif_controls,
- .num_controls = ARRAY_SIZE(tegra210_spdif_controls),
- },
-};
-
-static bool tegra210_spdif_wr_rd_reg(struct device *dev, unsigned int reg)
-{
- switch (reg) {
- case TEGRA210_SPDIF_CTRL:
- case TEGRA210_SPDIF_STROBE_CTRL:
- case TEGRA210_SPDIF_CIF_TXD_CTRL:
- case TEGRA210_SPDIF_CIF_RXD_CTRL:
- case TEGRA210_SPDIF_CIF_TXU_CTRL:
- case TEGRA210_SPDIF_CIF_RXU_CTRL:
- case TEGRA210_SPDIF_CH_STA_RX_A:
- case TEGRA210_SPDIF_CH_STA_RX_B:
- case TEGRA210_SPDIF_CH_STA_RX_C:
- case TEGRA210_SPDIF_CH_STA_RX_D:
- case TEGRA210_SPDIF_CH_STA_RX_E:
- case TEGRA210_SPDIF_CH_STA_RX_F:
- case TEGRA210_SPDIF_CH_STA_TX_A:
- case TEGRA210_SPDIF_CH_STA_TX_B:
- case TEGRA210_SPDIF_CH_STA_TX_C:
- case TEGRA210_SPDIF_CH_STA_TX_D:
- case TEGRA210_SPDIF_CH_STA_TX_E:
- case TEGRA210_SPDIF_CH_STA_TX_F:
- case TEGRA210_SPDIF_FLOWCTL_CTRL:
- case TEGRA210_SPDIF_TX_STEP:
- case TEGRA210_SPDIF_FLOW_STATUS:
- case TEGRA210_SPDIF_FLOW_TOTAL:
- case TEGRA210_SPDIF_FLOW_OVER:
- case TEGRA210_SPDIF_FLOW_UNDER:
- case TEGRA210_SPDIF_LCOEF_1_4_0:
- case TEGRA210_SPDIF_LCOEF_1_4_1:
- case TEGRA210_SPDIF_LCOEF_1_4_2:
- case TEGRA210_SPDIF_LCOEF_1_4_3:
- case TEGRA210_SPDIF_LCOEF_1_4_4:
- case TEGRA210_SPDIF_LCOEF_1_4_5:
- case TEGRA210_SPDIF_LCOEF_2_4_0:
- case TEGRA210_SPDIF_LCOEF_2_4_1:
- case TEGRA210_SPDIF_LCOEF_2_4_2:
- return true;
- default:
- return false;
- };
-}
-
-static const struct regmap_config tegra210_spdif_regmap_config = {
- .reg_bits = 32,
- .reg_stride = 4,
- .val_bits = 32,
- .max_register = TEGRA210_SPDIF_LCOEF_2_4_2,
- .writeable_reg = tegra210_spdif_wr_rd_reg,
- .readable_reg = tegra210_spdif_wr_rd_reg,
- .reg_defaults = tegra210_spdif_reg_defaults,
- .num_reg_defaults = ARRAY_SIZE(tegra210_spdif_reg_defaults),
- .cache_type = REGCACHE_FLAT,
-};
-
-static const struct of_device_id tegra210_spdif_of_match[] = {
- { .compatible = "nvidia,tegra210-spdif" },
- {},
-};
-
-static int tegra210_spdif_platform_probe(struct platform_device *pdev)
-{
- struct tegra210_spdif *spdif;
- struct device_node *np = pdev->dev.of_node;
- struct resource *mem;
- void __iomem *regs;
- const struct of_device_id *match;
- const char *prod_name;
- int ret;
-
- match = of_match_device(tegra210_spdif_of_match, &pdev->dev);
- if (!match) {
- dev_err(&pdev->dev, "Error: No device match found\n");
- return -ENODEV;
- }
-
- spdif = devm_kzalloc(&pdev->dev, sizeof(*spdif), GFP_KERNEL);
- if (!spdif)
- return -ENOMEM;
-
- dev_set_drvdata(&pdev->dev, spdif);
-
- if (!(tegra_platform_is_unit_fpga() || tegra_platform_is_fpga())) {
- spdif->clk_spdif_out = devm_clk_get(&pdev->dev, "spdif_out");
- if (IS_ERR(spdif->clk_spdif_out)) {
- dev_err(&pdev->dev, "Can't retrieve spdif clock\n");
- return PTR_ERR(spdif->clk_spdif_out);
- }
-
- spdif->clk_spdif_in = devm_clk_get(&pdev->dev, "spdif_in");
- if (IS_ERR(spdif->clk_spdif_in)) {
- dev_err(&pdev->dev, "Can't retrieve spdif clock\n");
- return PTR_ERR(spdif->clk_spdif_in);
- }
- }
-
- mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- regs = devm_ioremap_resource(&pdev->dev, mem);
- if (IS_ERR(regs))
- return PTR_ERR(regs);
- spdif->regmap = devm_regmap_init_mmio(&pdev->dev, regs,
- &tegra210_spdif_regmap_config);
- if (IS_ERR(spdif->regmap)) {
- dev_err(&pdev->dev, "regmap init failed\n");
- return PTR_ERR(spdif->regmap);
- }
- regcache_cache_only(spdif->regmap, true);
-
- pm_runtime_enable(&pdev->dev);
- ret = snd_soc_register_codec(&pdev->dev, &tegra210_spdif_codec,
- tegra210_spdif_dais,
- ARRAY_SIZE(tegra210_spdif_dais));
- if (ret != 0) {
- dev_err(&pdev->dev, "Could not register CODEC: %d\n", ret);
- pm_runtime_disable(&pdev->dev);
- return ret;
- }
-
- if (of_property_read_string(np, "prod-name", &prod_name) == 0) {
- ret = tegra_pinctrl_config_prod(&pdev->dev, prod_name);
- if (ret < 0)
- dev_warn(&pdev->dev, "Failed to set %s setting\n",
- prod_name);
- }
-
- return 0;
-}
-
-static int tegra210_spdif_platform_remove(struct platform_device *pdev)
-{
- snd_soc_unregister_codec(&pdev->dev);
-
- pm_runtime_disable(&pdev->dev);
- if (!pm_runtime_status_suspended(&pdev->dev))
- tegra210_spdif_runtime_suspend(&pdev->dev);
-
- return 0;
-}
-
-static const struct dev_pm_ops tegra210_spdif_pm_ops = {
- SET_RUNTIME_PM_OPS(tegra210_spdif_runtime_suspend,
- tegra210_spdif_runtime_resume, NULL)
- SET_LATE_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
- pm_runtime_force_resume)
-};
-
-static struct platform_driver tegra210_spdif_driver = {
- .driver = {
- .name = DRV_NAME,
- .owner = THIS_MODULE,
- .of_match_table = tegra210_spdif_of_match,
- .pm = &tegra210_spdif_pm_ops,
- },
- .probe = tegra210_spdif_platform_probe,
- .remove = tegra210_spdif_platform_remove,
-};
-module_platform_driver(tegra210_spdif_driver);
-
-MODULE_AUTHOR("Arun Shamanna Lakshmi ");
-MODULE_AUTHOR("Songhee Baek ");
-MODULE_DESCRIPTION("Tegra210 SPDIF ASoC driver");
-MODULE_LICENSE("GPL v2");
-MODULE_ALIAS("platform:" DRV_NAME);
-MODULE_DEVICE_TABLE(of, tegra210_spdif_of_match);
diff --git a/sound/soc/tegra-alt/tegra210_xbar_alt.c b/sound/soc/tegra-alt/tegra210_xbar_alt.c
deleted file mode 100644
index 03a018df..00000000
--- a/sound/soc/tegra-alt/tegra210_xbar_alt.c
+++ /dev/null
@@ -1,1393 +0,0 @@
-/*
- * tegra210_xbar_alt.c - Tegra210 XBAR driver
- *
- * Copyright (c) 2014-2020 NVIDIA CORPORATION. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope 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, see .
- */
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include "tegra210_xbar_alt.h"
-
-#define DRV_NAME "tegra210-axbar"
-
-static int tegra_xbar_get_value_enum(struct snd_kcontrol *kcontrol,
- struct snd_ctl_elem_value *ucontrol)
-{
- struct snd_soc_codec *codec = snd_soc_dapm_kcontrol_codec(kcontrol);
- struct tegra_xbar *xbar = snd_soc_codec_get_drvdata(codec);
- struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
- unsigned int reg, i, bit_pos = 0;
-
- /*
- * Find the bit position of current MUX input.
- * If nothing is set, position would be 0 and it corresponds to 'None'.
- */
- for (i = 0; i < xbar->soc_data->reg_count; i++) {
- unsigned int reg_val;
-
- reg = e->reg + (TEGRA210_XBAR_PART1_RX * i);
- reg_val = snd_soc_read(codec, reg) & xbar->soc_data->mask[i];
-
- if (reg_val) {
- bit_pos = ffs(reg_val) +
- (8 * codec->component.val_bytes * i);
- break;
- }
- }
-
- /* Find index related to the item in array *_xbar_mux_texts[] */
- for (i = 0; i < e->items; i++) {
- if (bit_pos == e->values[i]) {
- ucontrol->value.enumerated.item[0] = i;
- break;
- }
- }
-
- return 0;
-}
-
-static int tegra_xbar_put_value_enum(struct snd_kcontrol *kctl,
- struct snd_ctl_elem_value *uctl)
-{
- struct snd_soc_codec *codec = snd_soc_dapm_kcontrol_codec(kctl);
- struct tegra_xbar *xbar = snd_soc_codec_get_drvdata(codec);
- struct snd_soc_dapm_context *dapm = snd_soc_dapm_kcontrol_dapm(kctl);
- struct soc_enum *e = (struct soc_enum *)kctl->private_value;
- struct snd_soc_dapm_update update[TEGRA_XBAR_UPDATE_MAX_REG] = { };
- unsigned int *item = uctl->value.enumerated.item;
- unsigned int value = e->values[item[0]];
- unsigned int i, bit_pos, reg_idx = 0, reg_val = 0;
-
- if (item[0] >= e->items)
- return -EINVAL;
-
- if (value) {
- /* get the register index and value to set */
- reg_idx = (value - 1) / (8 * codec->component.val_bytes);
- bit_pos = (value - 1) % (8 * codec->component.val_bytes);
- reg_val = BIT(bit_pos);
- }
-
- /*
- * Run through all parts of a MUX register to find the state changes.
- * There will be an additional update if new MUX input value is from
- * different part of the MUX register.
- */
- for (i = 0; i < xbar->soc_data->reg_count; i++) {
- update[i].reg = e->reg + (TEGRA210_XBAR_PART1_RX * i);
- update[i].val = (i == reg_idx) ? reg_val : 0;
- update[i].mask = xbar->soc_data->mask[i];
- update[i].kcontrol = kctl;
-
- /* update widget power if state has changed */
- if (snd_soc_test_bits(codec, update[i].reg, update[i].mask,
- update[i].val))
- snd_soc_dapm_mux_update_power(dapm, kctl, item[0], e,
- &update[i]);
- }
-
- return 0;
-}
-
-static struct snd_soc_dai_driver tegra210_xbar_dais[] = {
- DAI(ADMAIF1),
- DAI(ADMAIF2),
- DAI(ADMAIF3),
- DAI(ADMAIF4),
- DAI(ADMAIF5),
- DAI(ADMAIF6),
- DAI(ADMAIF7),
- DAI(ADMAIF8),
- DAI(ADMAIF9),
- DAI(ADMAIF10),
- DAI(I2S1),
- DAI(I2S2),
- DAI(I2S3),
- DAI(I2S4),
- DAI(I2S5),
- DAI(SFC1),
- DAI(SFC2),
- DAI(SFC3),
- DAI(SFC4),
- DAI(MIXER1-1),
- DAI(MIXER1-2),
- DAI(MIXER1-3),
- DAI(MIXER1-4),
- DAI(MIXER1-5),
- DAI(MIXER1-6),
- DAI(MIXER1-7),
- DAI(MIXER1-8),
- DAI(MIXER1-9),
- DAI(MIXER1-10),
- DAI(AFC1),
- DAI(AFC2),
- DAI(AFC3),
- DAI(AFC4),
- DAI(AFC5),
- DAI(AFC6),
- DAI(OPE1),
- DAI(SPKPROT1),
- DAI(MVC1),
- DAI(MVC2),
- DAI(IQC1-1),
- DAI(IQC1-2),
- DAI(IQC2-1),
- DAI(IQC2-2),
- DAI(DMIC1),
- DAI(DMIC2),
- DAI(DMIC3),
- DAI(AMX1),
- DAI(AMX1-1),
- DAI(AMX1-2),
- DAI(AMX1-3),
- DAI(AMX1-4),
- DAI(AMX2),
- DAI(AMX2-1),
- DAI(AMX2-2),
- DAI(AMX2-3),
- DAI(AMX2-4),
- DAI(ADX1-1),
- DAI(ADX1-2),
- DAI(ADX1-3),
- DAI(ADX1-4),
- DAI(ADX1),
- DAI(ADX2-1),
- DAI(ADX2-2),
- DAI(ADX2-3),
- DAI(ADX2-4),
- DAI(ADX2),
- DAI(OPE2),
-};
-
-static struct snd_soc_dai_driver tegra186_xbar_dais[] = {
- DAI(ADMAIF1),
- DAI(ADMAIF2),
- DAI(ADMAIF3),
- DAI(ADMAIF4),
- DAI(ADMAIF5),
- DAI(ADMAIF6),
- DAI(ADMAIF7),
- DAI(ADMAIF8),
- DAI(ADMAIF9),
- DAI(ADMAIF10),
- DAI(I2S1),
- DAI(I2S2),
- DAI(I2S3),
- DAI(I2S4),
- DAI(I2S5),
- DAI(SFC1),
- DAI(SFC2),
- DAI(SFC3),
- DAI(SFC4),
- DAI(MIXER1-1),
- DAI(MIXER1-2),
- DAI(MIXER1-3),
- DAI(MIXER1-4),
- DAI(MIXER1-5),
- DAI(MIXER1-6),
- DAI(MIXER1-7),
- DAI(MIXER1-8),
- DAI(MIXER1-9),
- DAI(MIXER1-10),
- DAI(AFC1),
- DAI(AFC2),
- DAI(AFC3),
- DAI(AFC4),
- DAI(AFC5),
- DAI(AFC6),
- DAI(OPE1),
- DAI(SPKPROT1),
- DAI(MVC1),
- DAI(MVC2),
- DAI(IQC1-1),
- DAI(IQC1-2),
- DAI(IQC2-1),
- DAI(IQC2-2),
- DAI(DMIC1),
- DAI(DMIC2),
- DAI(DMIC3),
- DAI(AMX1),
- DAI(AMX1-1),
- DAI(AMX1-2),
- DAI(AMX1-3),
- DAI(AMX1-4),
- DAI(AMX2),
- DAI(AMX2-1),
- DAI(AMX2-2),
- DAI(AMX2-3),
- DAI(AMX2-4),
- DAI(ADX1-1),
- DAI(ADX1-2),
- DAI(ADX1-3),
- DAI(ADX1-4),
- DAI(ADX1),
- DAI(ADX2-1),
- DAI(ADX2-2),
- DAI(ADX2-3),
- DAI(ADX2-4),
- DAI(ADX2),
- DAI(ADMAIF11),
- DAI(ADMAIF12),
- DAI(ADMAIF13),
- DAI(ADMAIF14),
- DAI(ADMAIF15),
- DAI(ADMAIF16),
- DAI(ADMAIF17),
- DAI(ADMAIF18),
- DAI(ADMAIF19),
- DAI(ADMAIF20),
- DAI(I2S6),
- DAI(AMX3),
- DAI(AMX3-1),
- DAI(AMX3-2),
- DAI(AMX3-3),
- DAI(AMX3-4),
- DAI(AMX4),
- DAI(AMX4-1),
- DAI(AMX4-2),
- DAI(AMX4-3),
- DAI(AMX4-4),
- DAI(ADX3-1),
- DAI(ADX3-2),
- DAI(ADX3-3),
- DAI(ADX3-4),
- DAI(ADX3),
- DAI(ADX4-1),
- DAI(ADX4-2),
- DAI(ADX4-3),
- DAI(ADX4-4),
- DAI(ADX4),
- DAI(DMIC4),
- DAI(ASRC1-1),
- DAI(ASRC1-2),
- DAI(ASRC1-3),
- DAI(ASRC1-4),
- DAI(ASRC1-5),
- DAI(ASRC1-6),
- DAI(ASRC1-7),
- DAI(ARAD1),
- DAI(DSPK1),
- DAI(DSPK2),
-};
-
-static const char * const tegra210_xbar_mux_texts[] = {
- "None",
- "ADMAIF1",
- "ADMAIF2",
- "ADMAIF3",
- "ADMAIF4",
- "ADMAIF5",
- "ADMAIF6",
- "ADMAIF7",
- "ADMAIF8",
- "ADMAIF9",
- "ADMAIF10",
- "I2S1",
- "I2S2",
- "I2S3",
- "I2S4",
- "I2S5",
- "SFC1",
- "SFC2",
- "SFC3",
- "SFC4",
- /* index 0..19 above are inputs of PART0 Mux */
- "MIXER1-1",
- "MIXER1-2",
- "MIXER1-3",
- "MIXER1-4",
- "MIXER1-5",
- "AMX1",
- "AMX2",
- "AFC1",
- "AFC2",
- "AFC3",
- "AFC4",
- "AFC5",
- "AFC6",
- /* index 20..34 above are inputs of PART1 Mux */
- "OPE1",
- "OPE2",
- "SPKPROT1",
- "MVC1",
- "MVC2",
- "IQC1-1",
- "IQC1-2",
- "IQC2-1",
- "IQC2-2",
- "DMIC1",
- "DMIC2",
- "DMIC3",
- "ADX1-1",
- "ADX1-2",
- "ADX1-3",
- "ADX1-4",
- "ADX2-1",
- "ADX2-2",
- "ADX2-3",
- "ADX2-4",
- /* index 35..53 above are inputs of PART2 Mux */
-};
-
-static const char * const tegra186_xbar_mux_texts[] = {
- "None",
- "ADMAIF1",
- "ADMAIF2",
- "ADMAIF3",
- "ADMAIF4",
- "ADMAIF5",
- "ADMAIF6",
- "ADMAIF7",
- "ADMAIF8",
- "ADMAIF9",
- "ADMAIF10",
- "ADMAIF11",
- "ADMAIF12",
- "ADMAIF13",
- "ADMAIF14",
- "ADMAIF15",
- "ADMAIF16",
- "I2S1",
- "I2S2",
- "I2S3",
- "I2S4",
- "I2S5",
- "I2S6",
- "SFC1",
- "SFC2",
- "SFC3",
- "SFC4",
- /* index 0..19 above are inputs of PART0 Mux */
- "MIXER1-1",
- "MIXER1-2",
- "MIXER1-3",
- "MIXER1-4",
- "MIXER1-5",
- "AMX1",
- "AMX2",
- "AMX3",
- "AMX4",
- "ARAD1",
- "AFC1",
- "AFC2",
- "AFC3",
- "AFC4",
- "AFC5",
- "AFC6",
- /* index 20..34 above are inputs of PART1 Mux */
- "OPE1",
- "SPKPROT1",
- "MVC1",
- "MVC2",
- "IQC1-1",
- "IQC1-2",
- "IQC2-1",
- "IQC2-2",
- "DMIC1",
- "DMIC2",
- "DMIC3",
- "DMIC4",
- "ADX1-1",
- "ADX1-2",
- "ADX1-3",
- "ADX1-4",
- "ADX2-1",
- "ADX2-2",
- "ADX2-3",
- "ADX2-4",
- /* index 35..53 above are inputs of PART2 Mux */
- "ADX3-1",
- "ADX3-2",
- "ADX3-3",
- "ADX3-4",
- "ADX4-1",
- "ADX4-2",
- "ADX4-3",
- "ADX4-4",
- "ADMAIF17",
- "ADMAIF18",
- "ADMAIF19",
- "ADMAIF20",
- "ASRC1-1",
- "ASRC1-2",
- "ASRC1-3",
- "ASRC1-4",
- "ASRC1-5",
- "ASRC1-6",
- /* index 54..71 above are inputs of PART3 Mux */
-};
-
-static const int tegra210_xbar_mux_values[] = {
- /* Mux0 input, Mux1 input, Mux2 input */
- 0,
- MUX_VALUE(0, 0),
- MUX_VALUE(0, 1),
- MUX_VALUE(0, 2),
- MUX_VALUE(0, 3),
- MUX_VALUE(0, 4),
- MUX_VALUE(0, 5),
- MUX_VALUE(0, 6),
- MUX_VALUE(0, 7),
- MUX_VALUE(0, 8),
- MUX_VALUE(0, 9),
- MUX_VALUE(0, 16),
- MUX_VALUE(0, 17),
- MUX_VALUE(0, 18),
- MUX_VALUE(0, 19),
- MUX_VALUE(0, 20),
- MUX_VALUE(0, 24),
- MUX_VALUE(0, 25),
- MUX_VALUE(0, 26),
- MUX_VALUE(0, 27),
- /* index 0..19 above are inputs of PART0 Mux */
- MUX_VALUE(1, 0),
- MUX_VALUE(1, 1),
- MUX_VALUE(1, 2),
- MUX_VALUE(1, 3),
- MUX_VALUE(1, 4),
- MUX_VALUE(1, 8),
- MUX_VALUE(1, 9),
- MUX_VALUE(1, 24),
- MUX_VALUE(1, 25),
- MUX_VALUE(1, 26),
- MUX_VALUE(1, 27),
- MUX_VALUE(1, 28),
- MUX_VALUE(1, 29),
- /* index 20..34 above are inputs of PART1 Mux */
- MUX_VALUE(2, 0),
- MUX_VALUE(2, 1),
- MUX_VALUE(2, 4),
- MUX_VALUE(2, 8),
- MUX_VALUE(2, 9),
- MUX_VALUE(2, 12),
- MUX_VALUE(2, 13),
- MUX_VALUE(2, 14),
- MUX_VALUE(2, 15),
- MUX_VALUE(2, 18),
- MUX_VALUE(2, 19),
- MUX_VALUE(2, 20),
- MUX_VALUE(2, 24),
- MUX_VALUE(2, 25),
- MUX_VALUE(2, 26),
- MUX_VALUE(2, 27),
- MUX_VALUE(2, 28),
- MUX_VALUE(2, 29),
- MUX_VALUE(2, 30),
- MUX_VALUE(2, 31),
- /* index 35..53 above are inputs of PART2 Mux */
-};
-
-static const int tegra186_xbar_mux_values[] = {
- /* Mux0 input, Mux1 input, Mux2 input */
- 0,
- MUX_VALUE(0, 0),
- MUX_VALUE(0, 1),
- MUX_VALUE(0, 2),
- MUX_VALUE(0, 3),
- MUX_VALUE(0, 4),
- MUX_VALUE(0, 5),
- MUX_VALUE(0, 6),
- MUX_VALUE(0, 7),
- MUX_VALUE(0, 8),
- MUX_VALUE(0, 9),
- MUX_VALUE(0, 10),
- MUX_VALUE(0, 11),
- MUX_VALUE(0, 12),
- MUX_VALUE(0, 13),
- MUX_VALUE(0, 14),
- MUX_VALUE(0, 15),
- MUX_VALUE(0, 16),
- MUX_VALUE(0, 17),
- MUX_VALUE(0, 18),
- MUX_VALUE(0, 19),
- MUX_VALUE(0, 20),
- MUX_VALUE(0, 21),
- MUX_VALUE(0, 24),
- MUX_VALUE(0, 25),
- MUX_VALUE(0, 26),
- MUX_VALUE(0, 27),
- /* index 0..19 above are inputs of PART0 Mux */
- MUX_VALUE(1, 0),
- MUX_VALUE(1, 1),
- MUX_VALUE(1, 2),
- MUX_VALUE(1, 3),
- MUX_VALUE(1, 4),
- MUX_VALUE(1, 8),
- MUX_VALUE(1, 9),
- MUX_VALUE(1, 10),
- MUX_VALUE(1, 11),
- MUX_VALUE(1, 16),
- MUX_VALUE(1, 24),
- MUX_VALUE(1, 25),
- MUX_VALUE(1, 26),
- MUX_VALUE(1, 27),
- MUX_VALUE(1, 28),
- MUX_VALUE(1, 29),
- /* index 20..34 above are inputs of PART1 Mux */
- MUX_VALUE(2, 0),
- MUX_VALUE(2, 4),
- MUX_VALUE(2, 8),
- MUX_VALUE(2, 9),
- MUX_VALUE(2, 12),
- MUX_VALUE(2, 13),
- MUX_VALUE(2, 14),
- MUX_VALUE(2, 15),
- MUX_VALUE(2, 18),
- MUX_VALUE(2, 19),
- MUX_VALUE(2, 20),
- MUX_VALUE(2, 21),
- MUX_VALUE(2, 24),
- MUX_VALUE(2, 25),
- MUX_VALUE(2, 26),
- MUX_VALUE(2, 27),
- MUX_VALUE(2, 28),
- MUX_VALUE(2, 29),
- MUX_VALUE(2, 30),
- MUX_VALUE(2, 31),
- /* index 35..53 above are inputs of PART2 Mux */
- MUX_VALUE(3, 0),
- MUX_VALUE(3, 1),
- MUX_VALUE(3, 2),
- MUX_VALUE(3, 3),
- MUX_VALUE(3, 4),
- MUX_VALUE(3, 5),
- MUX_VALUE(3, 6),
- MUX_VALUE(3, 7),
- MUX_VALUE(3, 16),
- MUX_VALUE(3, 17),
- MUX_VALUE(3, 18),
- MUX_VALUE(3, 19),
- MUX_VALUE(3, 24),
- MUX_VALUE(3, 25),
- MUX_VALUE(3, 26),
- MUX_VALUE(3, 27),
- MUX_VALUE(3, 28),
- MUX_VALUE(3, 29),
- /* index 54..71 above are inputs of PART3 Mux */
-};
-
-/* controls for t210 */
-MUX_ENUM_CTRL_DECL(t210_admaif1_tx, 0x00);
-MUX_ENUM_CTRL_DECL(t210_admaif2_tx, 0x01);
-MUX_ENUM_CTRL_DECL(t210_admaif3_tx, 0x02);
-MUX_ENUM_CTRL_DECL(t210_admaif4_tx, 0x03);
-MUX_ENUM_CTRL_DECL(t210_admaif5_tx, 0x04);
-MUX_ENUM_CTRL_DECL(t210_admaif6_tx, 0x05);
-MUX_ENUM_CTRL_DECL(t210_admaif7_tx, 0x06);
-MUX_ENUM_CTRL_DECL(t210_admaif8_tx, 0x07);
-MUX_ENUM_CTRL_DECL(t210_admaif9_tx, 0x08);
-MUX_ENUM_CTRL_DECL(t210_admaif10_tx, 0x09);
-MUX_ENUM_CTRL_DECL(t210_i2s1_tx, 0x10);
-MUX_ENUM_CTRL_DECL(t210_i2s2_tx, 0x11);
-MUX_ENUM_CTRL_DECL(t210_i2s3_tx, 0x12);
-MUX_ENUM_CTRL_DECL(t210_i2s4_tx, 0x13);
-MUX_ENUM_CTRL_DECL(t210_i2s5_tx, 0x14);
-MUX_ENUM_CTRL_DECL(t210_sfc1_tx, 0x18);
-MUX_ENUM_CTRL_DECL(t210_sfc2_tx, 0x19);
-MUX_ENUM_CTRL_DECL(t210_sfc3_tx, 0x1a);
-MUX_ENUM_CTRL_DECL(t210_sfc4_tx, 0x1b);
-MUX_ENUM_CTRL_DECL(t210_mixer11_tx, 0x20);
-MUX_ENUM_CTRL_DECL(t210_mixer12_tx, 0x21);
-MUX_ENUM_CTRL_DECL(t210_mixer13_tx, 0x22);
-MUX_ENUM_CTRL_DECL(t210_mixer14_tx, 0x23);
-MUX_ENUM_CTRL_DECL(t210_mixer15_tx, 0x24);
-MUX_ENUM_CTRL_DECL(t210_mixer16_tx, 0x25);
-MUX_ENUM_CTRL_DECL(t210_mixer17_tx, 0x26);
-MUX_ENUM_CTRL_DECL(t210_mixer18_tx, 0x27);
-MUX_ENUM_CTRL_DECL(t210_mixer19_tx, 0x28);
-MUX_ENUM_CTRL_DECL(t210_mixer110_tx, 0x29);
-MUX_ENUM_CTRL_DECL(t210_afc1_tx, 0x34);
-MUX_ENUM_CTRL_DECL(t210_afc2_tx, 0x35);
-MUX_ENUM_CTRL_DECL(t210_afc3_tx, 0x36);
-MUX_ENUM_CTRL_DECL(t210_afc4_tx, 0x37);
-MUX_ENUM_CTRL_DECL(t210_afc5_tx, 0x38);
-MUX_ENUM_CTRL_DECL(t210_afc6_tx, 0x39);
-MUX_ENUM_CTRL_DECL(t210_ope1_tx, 0x40);
-MUX_ENUM_CTRL_DECL(t210_ope2_tx, 0x41);
-MUX_ENUM_CTRL_DECL(t210_spkprot_tx, 0x44);
-MUX_ENUM_CTRL_DECL(t210_mvc1_tx, 0x48);
-MUX_ENUM_CTRL_DECL(t210_mvc2_tx, 0x49);
-MUX_ENUM_CTRL_DECL(t210_amx11_tx, 0x50);
-MUX_ENUM_CTRL_DECL(t210_amx12_tx, 0x51);
-MUX_ENUM_CTRL_DECL(t210_amx13_tx, 0x52);
-MUX_ENUM_CTRL_DECL(t210_amx14_tx, 0x53);
-MUX_ENUM_CTRL_DECL(t210_amx21_tx, 0x54);
-MUX_ENUM_CTRL_DECL(t210_amx22_tx, 0x55);
-MUX_ENUM_CTRL_DECL(t210_amx23_tx, 0x56);
-MUX_ENUM_CTRL_DECL(t210_amx24_tx, 0x57);
-MUX_ENUM_CTRL_DECL(t210_adx1_tx, 0x58);
-MUX_ENUM_CTRL_DECL(t210_adx2_tx, 0x59);
-
-/* controls for t186 */
-MUX_ENUM_CTRL_DECL_186(t186_admaif1_tx, 0x00);
-MUX_ENUM_CTRL_DECL_186(t186_admaif2_tx, 0x01);
-MUX_ENUM_CTRL_DECL_186(t186_admaif3_tx, 0x02);
-MUX_ENUM_CTRL_DECL_186(t186_admaif4_tx, 0x03);
-MUX_ENUM_CTRL_DECL_186(t186_admaif5_tx, 0x04);
-MUX_ENUM_CTRL_DECL_186(t186_admaif6_tx, 0x05);
-MUX_ENUM_CTRL_DECL_186(t186_admaif7_tx, 0x06);
-MUX_ENUM_CTRL_DECL_186(t186_admaif8_tx, 0x07);
-MUX_ENUM_CTRL_DECL_186(t186_admaif9_tx, 0x08);
-MUX_ENUM_CTRL_DECL_186(t186_admaif10_tx, 0x09);
-MUX_ENUM_CTRL_DECL_186(t186_i2s1_tx, 0x10);
-MUX_ENUM_CTRL_DECL_186(t186_i2s2_tx, 0x11);
-MUX_ENUM_CTRL_DECL_186(t186_i2s3_tx, 0x12);
-MUX_ENUM_CTRL_DECL_186(t186_i2s4_tx, 0x13);
-MUX_ENUM_CTRL_DECL_186(t186_i2s5_tx, 0x14);
-MUX_ENUM_CTRL_DECL_186(t186_sfc1_tx, 0x18);
-MUX_ENUM_CTRL_DECL_186(t186_sfc2_tx, 0x19);
-MUX_ENUM_CTRL_DECL_186(t186_sfc3_tx, 0x1a);
-MUX_ENUM_CTRL_DECL_186(t186_sfc4_tx, 0x1b);
-MUX_ENUM_CTRL_DECL_186(t186_mixer11_tx, 0x20);
-MUX_ENUM_CTRL_DECL_186(t186_mixer12_tx, 0x21);
-MUX_ENUM_CTRL_DECL_186(t186_mixer13_tx, 0x22);
-MUX_ENUM_CTRL_DECL_186(t186_mixer14_tx, 0x23);
-MUX_ENUM_CTRL_DECL_186(t186_mixer15_tx, 0x24);
-MUX_ENUM_CTRL_DECL_186(t186_mixer16_tx, 0x25);
-MUX_ENUM_CTRL_DECL_186(t186_mixer17_tx, 0x26);
-MUX_ENUM_CTRL_DECL_186(t186_mixer18_tx, 0x27);
-MUX_ENUM_CTRL_DECL_186(t186_mixer19_tx, 0x28);
-MUX_ENUM_CTRL_DECL_186(t186_mixer110_tx, 0x29);
-MUX_ENUM_CTRL_DECL_186(t186_afc1_tx, 0x38);
-MUX_ENUM_CTRL_DECL_186(t186_afc2_tx, 0x39);
-MUX_ENUM_CTRL_DECL_186(t186_afc3_tx, 0x3a);
-MUX_ENUM_CTRL_DECL_186(t186_afc4_tx, 0x3b);
-MUX_ENUM_CTRL_DECL_186(t186_afc5_tx, 0x3c);
-MUX_ENUM_CTRL_DECL_186(t186_afc6_tx, 0x3d);
-MUX_ENUM_CTRL_DECL_186(t186_ope1_tx, 0x40);
-MUX_ENUM_CTRL_DECL_186(t186_spkprot_tx, 0x44);
-MUX_ENUM_CTRL_DECL_186(t186_mvc1_tx, 0x48);
-MUX_ENUM_CTRL_DECL_186(t186_mvc2_tx, 0x49);
-MUX_ENUM_CTRL_DECL_186(t186_amx11_tx, 0x50);
-MUX_ENUM_CTRL_DECL_186(t186_amx12_tx, 0x51);
-MUX_ENUM_CTRL_DECL_186(t186_amx13_tx, 0x52);
-MUX_ENUM_CTRL_DECL_186(t186_amx14_tx, 0x53);
-MUX_ENUM_CTRL_DECL_186(t186_amx21_tx, 0x54);
-MUX_ENUM_CTRL_DECL_186(t186_amx22_tx, 0x55);
-MUX_ENUM_CTRL_DECL_186(t186_amx23_tx, 0x56);
-MUX_ENUM_CTRL_DECL_186(t186_amx24_tx, 0x57);
-MUX_ENUM_CTRL_DECL_186(t186_adx1_tx, 0x60);
-MUX_ENUM_CTRL_DECL_186(t186_adx2_tx, 0x61);
-MUX_ENUM_CTRL_DECL_186(t186_dspk1_tx, 0x30);
-MUX_ENUM_CTRL_DECL_186(t186_dspk2_tx, 0x31);
-MUX_ENUM_CTRL_DECL_186(t186_amx31_tx, 0x58);
-MUX_ENUM_CTRL_DECL_186(t186_amx32_tx, 0x59);
-MUX_ENUM_CTRL_DECL_186(t186_amx33_tx, 0x5a);
-MUX_ENUM_CTRL_DECL_186(t186_amx34_tx, 0x5b);
-MUX_ENUM_CTRL_DECL_186(t186_amx41_tx, 0x64);
-MUX_ENUM_CTRL_DECL_186(t186_amx42_tx, 0x65);
-MUX_ENUM_CTRL_DECL_186(t186_amx43_tx, 0x66);
-MUX_ENUM_CTRL_DECL_186(t186_amx44_tx, 0x67);
-MUX_ENUM_CTRL_DECL_186(t186_admaif11_tx, 0x0a);
-MUX_ENUM_CTRL_DECL_186(t186_admaif12_tx, 0x0b);
-MUX_ENUM_CTRL_DECL_186(t186_admaif13_tx, 0x0c);
-MUX_ENUM_CTRL_DECL_186(t186_admaif14_tx, 0x0d);
-MUX_ENUM_CTRL_DECL_186(t186_admaif15_tx, 0x0e);
-MUX_ENUM_CTRL_DECL_186(t186_admaif16_tx, 0x0f);
-MUX_ENUM_CTRL_DECL_186(t186_i2s6_tx, 0x15);
-MUX_ENUM_CTRL_DECL_186(t186_adx3_tx, 0x62);
-MUX_ENUM_CTRL_DECL_186(t186_adx4_tx, 0x63);
-MUX_ENUM_CTRL_DECL_186(t186_admaif17_tx, 0x68);
-MUX_ENUM_CTRL_DECL_186(t186_admaif18_tx, 0x69);
-MUX_ENUM_CTRL_DECL_186(t186_admaif19_tx, 0x6a);
-MUX_ENUM_CTRL_DECL_186(t186_admaif20_tx, 0x6b);
-MUX_ENUM_CTRL_DECL_186(t186_asrc11_tx, 0x6c);
-MUX_ENUM_CTRL_DECL_186(t186_asrc12_tx, 0x6d);
-MUX_ENUM_CTRL_DECL_186(t186_asrc13_tx, 0x6e);
-MUX_ENUM_CTRL_DECL_186(t186_asrc14_tx, 0x6f);
-MUX_ENUM_CTRL_DECL_186(t186_asrc15_tx, 0x70);
-MUX_ENUM_CTRL_DECL_186(t186_asrc16_tx, 0x71);
-MUX_ENUM_CTRL_DECL_186(t186_asrc17_tx, 0x72);
-
-/*
- * The number of entries in, and order of, this array is closely tied to the
- * calculation of tegra210_xbar_codec.num_dapm_widgets near the end of
- * tegra210_xbar_probe()
- */
-static const struct snd_soc_dapm_widget tegra210_xbar_widgets[] = {
- WIDGETS("ADMAIF1", t210_admaif1_tx),
- WIDGETS("ADMAIF2", t210_admaif2_tx),
- WIDGETS("ADMAIF3", t210_admaif3_tx),
- WIDGETS("ADMAIF4", t210_admaif4_tx),
- WIDGETS("ADMAIF5", t210_admaif5_tx),
- WIDGETS("ADMAIF6", t210_admaif6_tx),
- WIDGETS("ADMAIF7", t210_admaif7_tx),
- WIDGETS("ADMAIF8", t210_admaif8_tx),
- WIDGETS("ADMAIF9", t210_admaif9_tx),
- WIDGETS("ADMAIF10", t210_admaif10_tx),
- WIDGETS("I2S1", t210_i2s1_tx),
- WIDGETS("I2S2", t210_i2s2_tx),
- WIDGETS("I2S3", t210_i2s3_tx),
- WIDGETS("I2S4", t210_i2s4_tx),
- WIDGETS("I2S5", t210_i2s5_tx),
- WIDGETS("SFC1", t210_sfc1_tx),
- WIDGETS("SFC2", t210_sfc2_tx),
- WIDGETS("SFC3", t210_sfc3_tx),
- WIDGETS("SFC4", t210_sfc4_tx),
- WIDGETS("MIXER1-1", t210_mixer11_tx),
- WIDGETS("MIXER1-2", t210_mixer12_tx),
- WIDGETS("MIXER1-3", t210_mixer13_tx),
- WIDGETS("MIXER1-4", t210_mixer14_tx),
- WIDGETS("MIXER1-5", t210_mixer15_tx),
- WIDGETS("MIXER1-6", t210_mixer16_tx),
- WIDGETS("MIXER1-7", t210_mixer17_tx),
- WIDGETS("MIXER1-8", t210_mixer18_tx),
- WIDGETS("MIXER1-9", t210_mixer19_tx),
- WIDGETS("MIXER1-10", t210_mixer110_tx),
- WIDGETS("AFC1", t210_afc1_tx),
- WIDGETS("AFC2", t210_afc2_tx),
- WIDGETS("AFC3", t210_afc3_tx),
- WIDGETS("AFC4", t210_afc4_tx),
- WIDGETS("AFC5", t210_afc5_tx),
- WIDGETS("AFC6", t210_afc6_tx),
- WIDGETS("OPE1", t210_ope1_tx),
- WIDGETS("OPE2", t210_ope2_tx),
- WIDGETS("SPKPROT1", t210_spkprot_tx),
- WIDGETS("MVC1", t210_mvc1_tx),
- WIDGETS("MVC2", t210_mvc2_tx),
- WIDGETS("AMX1-1", t210_amx11_tx),
- WIDGETS("AMX1-2", t210_amx12_tx),
- WIDGETS("AMX1-3", t210_amx13_tx),
- WIDGETS("AMX1-4", t210_amx14_tx),
- WIDGETS("AMX2-1", t210_amx21_tx),
- WIDGETS("AMX2-2", t210_amx22_tx),
- WIDGETS("AMX2-3", t210_amx23_tx),
- WIDGETS("AMX2-4", t210_amx24_tx),
- WIDGETS("ADX1", t210_adx1_tx),
- WIDGETS("ADX2", t210_adx2_tx),
- TX_WIDGETS("IQC1-1"),
- TX_WIDGETS("IQC1-2"),
- TX_WIDGETS("IQC2-1"),
- TX_WIDGETS("IQC2-2"),
- TX_WIDGETS("DMIC1"),
- TX_WIDGETS("DMIC2"),
- TX_WIDGETS("DMIC3"),
- TX_WIDGETS("AMX1"),
- TX_WIDGETS("ADX1-1"),
- TX_WIDGETS("ADX1-2"),
- TX_WIDGETS("ADX1-3"),
- TX_WIDGETS("ADX1-4"),
- TX_WIDGETS("AMX2"),
- TX_WIDGETS("ADX2-1"),
- TX_WIDGETS("ADX2-2"),
- TX_WIDGETS("ADX2-3"),
- TX_WIDGETS("ADX2-4"),
-};
-
-static const struct snd_soc_dapm_widget tegra186_xbar_widgets[] = {
- WIDGETS("ADMAIF1", t186_admaif1_tx),
- WIDGETS("ADMAIF2", t186_admaif2_tx),
- WIDGETS("ADMAIF3", t186_admaif3_tx),
- WIDGETS("ADMAIF4", t186_admaif4_tx),
- WIDGETS("ADMAIF5", t186_admaif5_tx),
- WIDGETS("ADMAIF6", t186_admaif6_tx),
- WIDGETS("ADMAIF7", t186_admaif7_tx),
- WIDGETS("ADMAIF8", t186_admaif8_tx),
- WIDGETS("ADMAIF9", t186_admaif9_tx),
- WIDGETS("ADMAIF10", t186_admaif10_tx),
- WIDGETS("I2S1", t186_i2s1_tx),
- WIDGETS("I2S2", t186_i2s2_tx),
- WIDGETS("I2S3", t186_i2s3_tx),
- WIDGETS("I2S4", t186_i2s4_tx),
- WIDGETS("I2S5", t186_i2s5_tx),
- WIDGETS("SFC1", t186_sfc1_tx),
- WIDGETS("SFC2", t186_sfc2_tx),
- WIDGETS("SFC3", t186_sfc3_tx),
- WIDGETS("SFC4", t186_sfc4_tx),
- WIDGETS("MIXER1-1", t186_mixer11_tx),
- WIDGETS("MIXER1-2", t186_mixer12_tx),
- WIDGETS("MIXER1-3", t186_mixer13_tx),
- WIDGETS("MIXER1-4", t186_mixer14_tx),
- WIDGETS("MIXER1-5", t186_mixer15_tx),
- WIDGETS("MIXER1-6", t186_mixer16_tx),
- WIDGETS("MIXER1-7", t186_mixer17_tx),
- WIDGETS("MIXER1-8", t186_mixer18_tx),
- WIDGETS("MIXER1-9", t186_mixer19_tx),
- WIDGETS("MIXER1-10", t186_mixer110_tx),
- WIDGETS("AFC1", t186_afc1_tx),
- WIDGETS("AFC2", t186_afc2_tx),
- WIDGETS("AFC3", t186_afc3_tx),
- WIDGETS("AFC4", t186_afc4_tx),
- WIDGETS("AFC5", t186_afc5_tx),
- WIDGETS("AFC6", t186_afc6_tx),
- WIDGETS("OPE1", t186_ope1_tx),
- WIDGETS("SPKPROT1", t186_spkprot_tx),
- WIDGETS("MVC1", t186_mvc1_tx),
- WIDGETS("MVC2", t186_mvc2_tx),
- WIDGETS("AMX1-1", t186_amx11_tx),
- WIDGETS("AMX1-2", t186_amx12_tx),
- WIDGETS("AMX1-3", t186_amx13_tx),
- WIDGETS("AMX1-4", t186_amx14_tx),
- WIDGETS("AMX2-1", t186_amx21_tx),
- WIDGETS("AMX2-2", t186_amx22_tx),
- WIDGETS("AMX2-3", t186_amx23_tx),
- WIDGETS("AMX2-4", t186_amx24_tx),
- WIDGETS("ADX1", t186_adx1_tx),
- WIDGETS("ADX2", t186_adx2_tx),
- TX_WIDGETS("IQC1-1"),
- TX_WIDGETS("IQC1-2"),
- TX_WIDGETS("IQC2-1"),
- TX_WIDGETS("IQC2-2"),
- TX_WIDGETS("DMIC1"),
- TX_WIDGETS("DMIC2"),
- TX_WIDGETS("DMIC3"),
- TX_WIDGETS("AMX1"),
- TX_WIDGETS("ADX1-1"),
- TX_WIDGETS("ADX1-2"),
- TX_WIDGETS("ADX1-3"),
- TX_WIDGETS("ADX1-4"),
- TX_WIDGETS("AMX2"),
- TX_WIDGETS("ADX2-1"),
- TX_WIDGETS("ADX2-2"),
- TX_WIDGETS("ADX2-3"),
- TX_WIDGETS("ADX2-4"),
- WIDGETS("ADMAIF11", t186_admaif11_tx),
- WIDGETS("ADMAIF12", t186_admaif12_tx),
- WIDGETS("ADMAIF13", t186_admaif13_tx),
- WIDGETS("ADMAIF14", t186_admaif14_tx),
- WIDGETS("ADMAIF15", t186_admaif15_tx),
- WIDGETS("ADMAIF16", t186_admaif16_tx),
- WIDGETS("ADMAIF17", t186_admaif17_tx),
- WIDGETS("ADMAIF18", t186_admaif18_tx),
- WIDGETS("ADMAIF19", t186_admaif19_tx),
- WIDGETS("ADMAIF20", t186_admaif20_tx),
- WIDGETS("I2S6", t186_i2s6_tx),
- WIDGETS("AMX3-1", t186_amx31_tx),
- WIDGETS("AMX3-2", t186_amx32_tx),
- WIDGETS("AMX3-3", t186_amx33_tx),
- WIDGETS("AMX3-4", t186_amx34_tx),
- WIDGETS("AMX4-1", t186_amx41_tx),
- WIDGETS("AMX4-2", t186_amx42_tx),
- WIDGETS("AMX4-3", t186_amx43_tx),
- WIDGETS("AMX4-4", t186_amx44_tx),
- WIDGETS("ADX3", t186_adx3_tx),
- WIDGETS("ADX4", t186_adx4_tx),
- WIDGETS("ASRC1-1", t186_asrc11_tx),
- WIDGETS("ASRC1-2", t186_asrc12_tx),
- WIDGETS("ASRC1-3", t186_asrc13_tx),
- WIDGETS("ASRC1-4", t186_asrc14_tx),
- WIDGETS("ASRC1-5", t186_asrc15_tx),
- WIDGETS("ASRC1-6", t186_asrc16_tx),
- WIDGETS("ASRC1-7", t186_asrc17_tx),
- WIDGETS("DSPK1", t186_dspk1_tx),
- WIDGETS("DSPK2", t186_dspk2_tx),
- TX_WIDGETS("AMX3"),
- TX_WIDGETS("ADX3-1"),
- TX_WIDGETS("ADX3-2"),
- TX_WIDGETS("ADX3-3"),
- TX_WIDGETS("ADX3-4"),
- TX_WIDGETS("AMX4"),
- TX_WIDGETS("ADX4-1"),
- TX_WIDGETS("ADX4-2"),
- TX_WIDGETS("ADX4-3"),
- TX_WIDGETS("ADX4-4"),
- TX_WIDGETS("DMIC4"),
- TX_WIDGETS("ARAD1"),
-};
-
-#define TEGRA_COMMON_ROUTES(name) \
- { name " RX", NULL, name " Receive"}, \
- { name " Transmit", NULL, name " TX"}, \
- { name " TX", NULL, name " Mux"}, \
- { name " Mux", "ADMAIF1", "ADMAIF1 RX" }, \
- { name " Mux", "ADMAIF2", "ADMAIF2 RX" }, \
- { name " Mux", "ADMAIF3", "ADMAIF3 RX" }, \
- { name " Mux", "ADMAIF4", "ADMAIF4 RX" }, \
- { name " Mux", "ADMAIF5", "ADMAIF5 RX" }, \
- { name " Mux", "ADMAIF6", "ADMAIF6 RX" }, \
- { name " Mux", "ADMAIF7", "ADMAIF7 RX" }, \
- { name " Mux", "ADMAIF8", "ADMAIF8 RX" }, \
- { name " Mux", "ADMAIF9", "ADMAIF9 RX" }, \
- { name " Mux", "ADMAIF10", "ADMAIF10 RX" }, \
- { name " Mux", "I2S1", "I2S1 RX" }, \
- { name " Mux", "I2S2", "I2S2 RX" }, \
- { name " Mux", "I2S3", "I2S3 RX" }, \
- { name " Mux", "I2S4", "I2S4 RX" }, \
- { name " Mux", "I2S5", "I2S5 RX" }, \
- { name " Mux", "SFC1", "SFC1 RX" }, \
- { name " Mux", "SFC2", "SFC2 RX" }, \
- { name " Mux", "SFC3", "SFC3 RX" }, \
- { name " Mux", "SFC4", "SFC4 RX" }, \
- { name " Mux", "MIXER1-1", "MIXER1-1 RX" }, \
- { name " Mux", "MIXER1-2", "MIXER1-2 RX" }, \
- { name " Mux", "MIXER1-3", "MIXER1-3 RX" }, \
- { name " Mux", "MIXER1-4", "MIXER1-4 RX" }, \
- { name " Mux", "MIXER1-5", "MIXER1-5 RX" }, \
- { name " Mux", "AFC1", "AFC1 RX" }, \
- { name " Mux", "AFC2", "AFC2 RX" }, \
- { name " Mux", "AFC3", "AFC3 RX" }, \
- { name " Mux", "AFC4", "AFC4 RX" }, \
- { name " Mux", "AFC5", "AFC5 RX" }, \
- { name " Mux", "AFC6", "AFC6 RX" }, \
- { name " Mux", "OPE1", "OPE1 RX" }, \
- { name " Mux", "MVC1", "MVC1 RX" }, \
- { name " Mux", "MVC2", "MVC2 RX" }, \
- { name " Mux", "IQC1-1", "IQC1-1 RX" }, \
- { name " Mux", "IQC1-2", "IQC1-2 RX" }, \
- { name " Mux", "IQC2-1", "IQC2-1 RX" }, \
- { name " Mux", "IQC2-2", "IQC2-2 RX" }, \
- { name " Mux", "DMIC1", "DMIC1 RX" }, \
- { name " Mux", "DMIC2", "DMIC2 RX" }, \
- { name " Mux", "DMIC3", "DMIC3 RX" }, \
- { name " Mux", "AMX1", "AMX1 RX" }, \
- { name " Mux", "ADX1-1", "ADX1-1 RX" }, \
- { name " Mux", "ADX1-2", "ADX1-2 RX" }, \
- { name " Mux", "ADX1-3", "ADX1-3 RX" }, \
- { name " Mux", "ADX1-4", "ADX1-4 RX" }, \
- { name " Mux", "AMX2", "AMX2 RX" }, \
- { name " Mux", "ADX2-1", "ADX2-1 RX" }, \
- { name " Mux", "ADX2-2", "ADX2-2 RX" }, \
- { name " Mux", "ADX2-3", "ADX2-3 RX" }, \
- { name " Mux", "ADX2-4", "ADX2-4 RX" },
-
-#define TEGRA210_ONLY_ROUTES(name) \
- { name " Mux", "OPE2", "OPE2 RX" },
-
-#define TEGRA186_ONLY_ROUTES(name) \
- { name " Mux", "ADMAIF11", "ADMAIF11 RX" }, \
- { name " Mux", "ADMAIF12", "ADMAIF12 RX" }, \
- { name " Mux", "ADMAIF13", "ADMAIF13 RX" }, \
- { name " Mux", "ADMAIF14", "ADMAIF14 RX" }, \
- { name " Mux", "ADMAIF15", "ADMAIF15 RX" }, \
- { name " Mux", "ADMAIF16", "ADMAIF16 RX" }, \
- { name " Mux", "ADMAIF17", "ADMAIF17 RX" }, \
- { name " Mux", "ADMAIF18", "ADMAIF18 RX" }, \
- { name " Mux", "ADMAIF19", "ADMAIF19 RX" }, \
- { name " Mux", "ADMAIF20", "ADMAIF20 RX" }, \
- { name " Mux", "DMIC4", "DMIC4 RX" }, \
- { name " Mux", "I2S6", "I2S6 RX" }, \
- { name " Mux", "ASRC1-1", "ASRC1-1 RX" }, \
- { name " Mux", "ASRC1-2", "ASRC1-2 RX" }, \
- { name " Mux", "ASRC1-3", "ASRC1-3 RX" }, \
- { name " Mux", "ASRC1-4", "ASRC1-4 RX" }, \
- { name " Mux", "ASRC1-5", "ASRC1-5 RX" }, \
- { name " Mux", "ASRC1-6", "ASRC1-6 RX" }, \
- { name " Mux", "AMX3", "AMX3 RX" }, \
- { name " Mux", "ADX3-1", "ADX3-1 RX" }, \
- { name " Mux", "ADX3-2", "ADX3-2 RX" }, \
- { name " Mux", "ADX3-3", "ADX3-3 RX" }, \
- { name " Mux", "ADX3-4", "ADX3-4 RX" }, \
- { name " Mux", "AMX4", "AMX4 RX" }, \
- { name " Mux", "ADX4-1", "ADX4-1 RX" }, \
- { name " Mux", "ADX4-2", "ADX4-2 RX" }, \
- { name " Mux", "ADX4-3", "ADX4-3 RX" }, \
- { name " Mux", "ADX4-4", "ADX4-4 RX" }, \
- { name " Mux", "ARAD1", "ARAD1 RX" },
-
-#define TEGRA210_ROUTES(name) \
- TEGRA_COMMON_ROUTES(name) \
- TEGRA210_ONLY_ROUTES(name)
-
-#define TEGRA186_ROUTES(name) \
- TEGRA_COMMON_ROUTES(name) \
- TEGRA186_ONLY_ROUTES(name)
-/*
- * The number of entries in, and order of, this array is closely tied to the
- * calculation of tegra210_xbar_codec.num_dapm_routes near the end of
- * tegra210_xbar_probe()
- */
-static const struct snd_soc_dapm_route tegra210_xbar_routes[] = {
- TEGRA210_ROUTES("ADMAIF1")
- TEGRA210_ROUTES("ADMAIF2")
- TEGRA210_ROUTES("ADMAIF3")
- TEGRA210_ROUTES("ADMAIF4")
- TEGRA210_ROUTES("ADMAIF5")
- TEGRA210_ROUTES("ADMAIF6")
- TEGRA210_ROUTES("ADMAIF7")
- TEGRA210_ROUTES("ADMAIF8")
- TEGRA210_ROUTES("ADMAIF9")
- TEGRA210_ROUTES("ADMAIF10")
- TEGRA210_ROUTES("I2S1")
- TEGRA210_ROUTES("I2S2")
- TEGRA210_ROUTES("I2S3")
- TEGRA210_ROUTES("I2S4")
- TEGRA210_ROUTES("I2S5")
- TEGRA210_ROUTES("SFC1")
- TEGRA210_ROUTES("SFC2")
- TEGRA210_ROUTES("SFC3")
- TEGRA210_ROUTES("SFC4")
- TEGRA210_ROUTES("MIXER1-1")
- TEGRA210_ROUTES("MIXER1-2")
- TEGRA210_ROUTES("MIXER1-3")
- TEGRA210_ROUTES("MIXER1-4")
- TEGRA210_ROUTES("MIXER1-5")
- TEGRA210_ROUTES("MIXER1-6")
- TEGRA210_ROUTES("MIXER1-7")
- TEGRA210_ROUTES("MIXER1-8")
- TEGRA210_ROUTES("MIXER1-9")
- TEGRA210_ROUTES("MIXER1-10")
- TEGRA210_ROUTES("AFC1")
- TEGRA210_ROUTES("AFC2")
- TEGRA210_ROUTES("AFC3")
- TEGRA210_ROUTES("AFC4")
- TEGRA210_ROUTES("AFC5")
- TEGRA210_ROUTES("AFC6")
- TEGRA210_ROUTES("OPE1")
- TEGRA210_ROUTES("OPE2")
- TEGRA210_ROUTES("SPKPROT1")
- TEGRA210_ROUTES("MVC1")
- TEGRA210_ROUTES("MVC2")
- TEGRA210_ROUTES("AMX1-1")
- TEGRA210_ROUTES("AMX1-2")
- TEGRA210_ROUTES("AMX1-3")
- TEGRA210_ROUTES("AMX1-4")
- TEGRA210_ROUTES("AMX2-1")
- TEGRA210_ROUTES("AMX2-2")
- TEGRA210_ROUTES("AMX2-3")
- TEGRA210_ROUTES("AMX2-4")
- TEGRA210_ROUTES("ADX1")
- TEGRA210_ROUTES("ADX2")
- IN_OUT_ROUTES("IQC1-1")
- IN_OUT_ROUTES("IQC1-2")
- IN_OUT_ROUTES("IQC2-1")
- IN_OUT_ROUTES("IQC2-1")
- IN_OUT_ROUTES("DMIC1")
- IN_OUT_ROUTES("DMIC2")
- IN_OUT_ROUTES("DMIC3")
- IN_OUT_ROUTES("AMX1")
- IN_OUT_ROUTES("AMX2")
- IN_OUT_ROUTES("ADX1-1")
- IN_OUT_ROUTES("ADX1-2")
- IN_OUT_ROUTES("ADX1-3")
- IN_OUT_ROUTES("ADX1-4")
- IN_OUT_ROUTES("ADX2-1")
- IN_OUT_ROUTES("ADX2-2")
- IN_OUT_ROUTES("ADX2-3")
- IN_OUT_ROUTES("ADX2-4")
-};
-
-static const struct snd_soc_dapm_route tegra186_xbar_routes[] = {
- TEGRA186_ROUTES("ADMAIF1")
- TEGRA186_ROUTES("ADMAIF2")
- TEGRA186_ROUTES("ADMAIF3")
- TEGRA186_ROUTES("ADMAIF4")
- TEGRA186_ROUTES("ADMAIF5")
- TEGRA186_ROUTES("ADMAIF6")
- TEGRA186_ROUTES("ADMAIF7")
- TEGRA186_ROUTES("ADMAIF8")
- TEGRA186_ROUTES("ADMAIF9")
- TEGRA186_ROUTES("ADMAIF10")
- TEGRA186_ROUTES("I2S1")
- TEGRA186_ROUTES("I2S2")
- TEGRA186_ROUTES("I2S3")
- TEGRA186_ROUTES("I2S4")
- TEGRA186_ROUTES("I2S5")
- TEGRA186_ROUTES("SFC1")
- TEGRA186_ROUTES("SFC2")
- TEGRA186_ROUTES("SFC3")
- TEGRA186_ROUTES("SFC4")
- TEGRA186_ROUTES("MIXER1-1")
- TEGRA186_ROUTES("MIXER1-2")
- TEGRA186_ROUTES("MIXER1-3")
- TEGRA186_ROUTES("MIXER1-4")
- TEGRA186_ROUTES("MIXER1-5")
- TEGRA186_ROUTES("MIXER1-6")
- TEGRA186_ROUTES("MIXER1-7")
- TEGRA186_ROUTES("MIXER1-8")
- TEGRA186_ROUTES("MIXER1-9")
- TEGRA186_ROUTES("MIXER1-10")
- TEGRA186_ROUTES("AFC1")
- TEGRA186_ROUTES("AFC2")
- TEGRA186_ROUTES("AFC3")
- TEGRA186_ROUTES("AFC4")
- TEGRA186_ROUTES("AFC5")
- TEGRA186_ROUTES("AFC6")
- TEGRA186_ROUTES("OPE1")
- TEGRA186_ROUTES("SPKPROT1")
- TEGRA186_ROUTES("MVC1")
- TEGRA186_ROUTES("MVC2")
- TEGRA186_ROUTES("AMX1-1")
- TEGRA186_ROUTES("AMX1-2")
- TEGRA186_ROUTES("AMX1-3")
- TEGRA186_ROUTES("AMX1-4")
- TEGRA186_ROUTES("AMX2-1")
- TEGRA186_ROUTES("AMX2-2")
- TEGRA186_ROUTES("AMX2-3")
- TEGRA186_ROUTES("AMX2-4")
- TEGRA186_ROUTES("ADX1")
- TEGRA186_ROUTES("ADX2")
- IN_OUT_ROUTES("IQC1-1")
- IN_OUT_ROUTES("IQC1-2")
- IN_OUT_ROUTES("IQC2-1")
- IN_OUT_ROUTES("IQC2-1")
- IN_OUT_ROUTES("DMIC1")
- IN_OUT_ROUTES("DMIC2")
- IN_OUT_ROUTES("DMIC3")
- IN_OUT_ROUTES("AMX1")
- IN_OUT_ROUTES("AMX2")
- IN_OUT_ROUTES("ADX1-1")
- IN_OUT_ROUTES("ADX1-2")
- IN_OUT_ROUTES("ADX1-3")
- IN_OUT_ROUTES("ADX1-4")
- IN_OUT_ROUTES("ADX2-1")
- IN_OUT_ROUTES("ADX2-2")
- IN_OUT_ROUTES("ADX2-3")
- IN_OUT_ROUTES("ADX2-4")
- TEGRA186_ROUTES("ADMAIF11")
- TEGRA186_ROUTES("ADMAIF12")
- TEGRA186_ROUTES("ADMAIF13")
- TEGRA186_ROUTES("ADMAIF14")
- TEGRA186_ROUTES("ADMAIF15")
- TEGRA186_ROUTES("ADMAIF16")
- TEGRA186_ROUTES("ADMAIF17")
- TEGRA186_ROUTES("ADMAIF18")
- TEGRA186_ROUTES("ADMAIF19")
- TEGRA186_ROUTES("ADMAIF20")
- TEGRA186_ROUTES("AMX3-1")
- TEGRA186_ROUTES("AMX3-2")
- TEGRA186_ROUTES("AMX3-3")
- TEGRA186_ROUTES("AMX3-4")
- TEGRA186_ROUTES("AMX4-1")
- TEGRA186_ROUTES("AMX4-2")
- TEGRA186_ROUTES("AMX4-3")
- TEGRA186_ROUTES("AMX4-4")
- TEGRA186_ROUTES("ADX3")
- TEGRA186_ROUTES("ADX4")
- TEGRA186_ROUTES("I2S6")
- TEGRA186_ROUTES("ASRC1-1")
- TEGRA186_ROUTES("ASRC1-2")
- TEGRA186_ROUTES("ASRC1-3")
- TEGRA186_ROUTES("ASRC1-4")
- TEGRA186_ROUTES("ASRC1-5")
- TEGRA186_ROUTES("ASRC1-6")
- TEGRA186_ROUTES("ASRC1-7")
- TEGRA186_ROUTES("DSPK1")
- TEGRA186_ROUTES("DSPK2")
- IN_OUT_ROUTES("DMIC4")
- IN_OUT_ROUTES("AMX3")
- IN_OUT_ROUTES("AMX4")
- IN_OUT_ROUTES("ADX3-1")
- IN_OUT_ROUTES("ADX3-2")
- IN_OUT_ROUTES("ADX3-3")
- IN_OUT_ROUTES("ADX3-4")
- IN_OUT_ROUTES("ADX4-1")
- IN_OUT_ROUTES("ADX4-2")
- IN_OUT_ROUTES("ADX4-3")
- IN_OUT_ROUTES("ADX4-4")
- IN_OUT_ROUTES("ARAD1")
-};
-
-static struct snd_soc_codec_driver tegra210_xbar_codec = {
- .idle_bias_off = 1,
- .component_driver = {
- .dapm_widgets = tegra210_xbar_widgets,
- .dapm_routes = tegra210_xbar_routes,
- .num_dapm_widgets = ARRAY_SIZE(tegra210_xbar_widgets),
- .num_dapm_routes = ARRAY_SIZE(tegra210_xbar_routes),
- },
-};
-
-static struct snd_soc_codec_driver tegra186_xbar_codec = {
- .idle_bias_off = 1,
- .component_driver = {
- .dapm_widgets = tegra186_xbar_widgets,
- .dapm_routes = tegra186_xbar_routes,
- .num_dapm_widgets = ARRAY_SIZE(tegra186_xbar_widgets),
- .num_dapm_routes = ARRAY_SIZE(tegra186_xbar_routes),
- },
-};
-
-static const struct regmap_config tegra210_xbar_regmap_config = {
- .reg_bits = 32,
- .val_bits = 32,
- .reg_stride = 4,
- .max_register = TEGRA210_MAX_REGISTER_ADDR,
- .cache_type = REGCACHE_FLAT,
-};
-
-static const struct regmap_config tegra186_xbar_regmap_config = {
- .reg_bits = 32,
- .val_bits = 32,
- .reg_stride = 4,
- .max_register = TEGRA186_MAX_REGISTER_ADDR,
- .cache_type = REGCACHE_FLAT,
-};
-
-static const struct tegra_xbar_soc_data soc_data_tegra210 = {
- .regmap_config = &tegra210_xbar_regmap_config,
- .mask[0] = TEGRA210_XBAR_REG_MASK_0,
- .mask[1] = TEGRA210_XBAR_REG_MASK_1,
- .mask[2] = TEGRA210_XBAR_REG_MASK_2,
- .mask[3] = TEGRA210_XBAR_REG_MASK_3,
- .reg_count = TEGRA210_XBAR_UPDATE_MAX_REG,
- .codec_drv = &tegra210_xbar_codec,
- .dai_drv = tegra210_xbar_dais,
- .num_dais = ARRAY_SIZE(tegra210_xbar_dais),
-};
-
-static const struct tegra_xbar_soc_data soc_data_tegra186 = {
- .regmap_config = &tegra186_xbar_regmap_config,
- .mask[0] = TEGRA186_XBAR_REG_MASK_0,
- .mask[1] = TEGRA186_XBAR_REG_MASK_1,
- .mask[2] = TEGRA186_XBAR_REG_MASK_2,
- .mask[3] = TEGRA186_XBAR_REG_MASK_3,
- .reg_count = TEGRA186_XBAR_UPDATE_MAX_REG,
- .codec_drv = &tegra186_xbar_codec,
- .dai_drv = tegra186_xbar_dais,
- .num_dais = ARRAY_SIZE(tegra186_xbar_dais),
-};
-
-static const struct of_device_id tegra_xbar_of_match[] = {
- { .compatible = "nvidia,tegra210-axbar", .data = &soc_data_tegra210 },
- { .compatible = "nvidia,tegra186-axbar", .data = &soc_data_tegra186 },
- {},
-};
-
-static int tegra_xbar_runtime_suspend(struct device *dev)
-{
- struct tegra_xbar *xbar = dev_get_drvdata(dev);
-
-#ifdef CONFIG_TEGRA186_AHC
- tegra186_free_ahc_interrupts();
-#endif
- regcache_cache_only(xbar->regmap, true);
- regcache_mark_dirty(xbar->regmap);
-
- if (!(tegra_platform_is_unit_fpga() || tegra_platform_is_fpga()))
- clk_disable_unprepare(xbar->clk);
-
- return 0;
-}
-
-static int tegra_xbar_runtime_resume(struct device *dev)
-{
- struct tegra_xbar *xbar = dev_get_drvdata(dev);
- int ret;
-
- if (!(tegra_platform_is_unit_fpga() || tegra_platform_is_fpga())) {
- ret = clk_prepare_enable(xbar->clk);
- if (ret) {
- dev_err(dev, "clk_prepare_enable failed: %d\n", ret);
- return ret;
- }
- }
-#ifdef CONFIG_TEGRA186_AHC
- tegra186_setup_ahc_interrupts();
-#endif
- regcache_cache_only(xbar->regmap, false);
- regcache_sync(xbar->regmap);
-
- return 0;
-}
-
-static int tegra_xbar_probe(struct platform_device *pdev)
-{
- const struct of_device_id *match;
- struct tegra_xbar *xbar;
- struct resource *res;
- void __iomem *regs;
- int ret;
-
- xbar = devm_kzalloc(&pdev->dev, sizeof(*xbar), GFP_KERNEL);
- if (!xbar)
- return -ENOMEM;
-
- match = of_match_device(tegra_xbar_of_match, &pdev->dev);
- if (!match) {
- dev_err(&pdev->dev, "Error: No device match found\n");
- return -ENODEV;
- }
-
- xbar->soc_data = (struct tegra_xbar_soc_data *)match->data;
-
- dev_set_drvdata(&pdev->dev, xbar);
-
- if (!(tegra_platform_is_unit_fpga() || tegra_platform_is_fpga())) {
- xbar->clk = devm_clk_get(&pdev->dev, "ahub");
- if (IS_ERR(xbar->clk)) {
- dev_err(&pdev->dev, "Can't retrieve ahub clock\n");
- return PTR_ERR(xbar->clk);
- }
- }
-
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-
- regs = devm_ioremap_resource(&pdev->dev, res);
- if (IS_ERR(regs))
- return PTR_ERR(regs);
-
- xbar->regmap = devm_regmap_init_mmio(&pdev->dev, regs,
- xbar->soc_data->regmap_config);
- if (IS_ERR(xbar->regmap)) {
- dev_err(&pdev->dev, "regmap init failed\n");
- return PTR_ERR(xbar->regmap);
- }
-
- regcache_cache_only(xbar->regmap, true);
-
- ret = snd_soc_register_codec(&pdev->dev,
- xbar->soc_data->codec_drv,
- xbar->soc_data->dai_drv,
- xbar->soc_data->num_dais);
-
- if (ret < 0)
- return ret;
-
- ret = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev);
- if (ret < 0) {
- snd_soc_unregister_codec(&pdev->dev);
- return ret;
- }
-
- pm_runtime_enable(&pdev->dev);
-
- return 0;
-}
-
-static int tegra_xbar_remove(struct platform_device *pdev)
-{
- snd_soc_unregister_codec(&pdev->dev);
-
- pm_runtime_disable(&pdev->dev);
- if (!pm_runtime_status_suspended(&pdev->dev))
- tegra_xbar_runtime_suspend(&pdev->dev);
-
- return 0;
-}
-
-static const struct dev_pm_ops tegra_xbar_pm_ops = {
- SET_RUNTIME_PM_OPS(tegra_xbar_runtime_suspend,
- tegra_xbar_runtime_resume, NULL)
- SET_LATE_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
- pm_runtime_force_resume)
-};
-
-static struct platform_driver tegra_xbar_driver = {
- .probe = tegra_xbar_probe,
- .remove = tegra_xbar_remove,
- .driver = {
- .name = DRV_NAME,
- .owner = THIS_MODULE,
- .of_match_table = tegra_xbar_of_match,
- .pm = &tegra_xbar_pm_ops,
- },
-};
-module_platform_driver(tegra_xbar_driver);
-
-MODULE_AUTHOR("Stephen Warren ");
-MODULE_AUTHOR("Mohan Kumar ");
-MODULE_DESCRIPTION("Tegra XBAR driver");
-MODULE_LICENSE("GPL v2");
-MODULE_ALIAS("platform:" DRV_NAME);
-MODULE_DEVICE_TABLE(of, tegra_xbar_of_match);
diff --git a/sound/soc/tegra-alt/utils/tegra_asoc_dt_parser.c b/sound/soc/tegra-alt/utils/tegra_asoc_dt_parser.c
deleted file mode 100644
index fe8d41da..00000000
--- a/sound/soc/tegra-alt/utils/tegra_asoc_dt_parser.c
+++ /dev/null
@@ -1,463 +0,0 @@
-/*
- * tegra_asoc_dt_parser.c - Tegra DAI links parser
- *
- * Copyright (c) 2019 NVIDIA CORPORATION. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope 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, see .
- */
-
-#include
-#include
-#include
-#include
-#include
-#include "tegra_asoc_machine_alt.h"
-
-#define PREFIX "nvidia-audio-card,"
-#define CELL "#sound-dai-cells"
-#define DAI "sound-dai"
-
-/* DT also uses similar values to specify link type */
-enum dai_link_type {
- PCM_LINK,
- COMPR_LINK,
- C2C_LINK,
-};
-
-struct snd_soc_pcm_stream link_params = {
- .formats = SNDRV_PCM_FMTBIT_S8 |
- SNDRV_PCM_FMTBIT_S16_LE |
- SNDRV_PCM_FMTBIT_S32_LE,
- .rate_min = 8000,
- .rate_max = 192000,
- .channels_min = 1,
- .channels_max = 16,
-};
-
-/* find if DAI link or its cpu/codec DAI nodes are disabled */
-static bool of_dai_link_is_available(struct device_node *link_node)
-{
- struct device_node *child, *dai_node;
-
- if (!of_device_is_available(link_node))
- return false;
-
- for_each_child_of_node(link_node, child) {
- /* check for "cpu" and "codec" nodes only */
- if (of_node_cmp(child->name, "cpu") &&
- of_node_cmp(child->name, "codec"))
- continue;
-
- /*
- * Skip a codec subnode if DAI property is missing. For a
- * link with multiple codecs, at least one codec needs to
- * have DAI property (which is ensured while counting the
- * number of links that DT exposes). Other codec subnodes
- * can be empty and populated in override file.
- */
- if (!of_property_read_bool(child, DAI) &&
- !of_node_cmp(child->name, "codec"))
- continue;
-
- dai_node = of_parse_phandle(child, DAI, 0);
- if (!dai_node) {
- of_node_put(child);
- return false;
- }
-
- if (!of_device_is_available(dai_node)) {
- of_node_put(dai_node);
- of_node_put(child);
- return false;
- }
-
- of_node_put(dai_node);
- }
-
- return true;
-}
-
-/* find number of child nodes with given name and containing DAI property */
-static int of_get_child_count_with_name(struct device_node *node,
- const char *name)
-{
- struct device_node *child;
- int num = 0;
-
- for_each_child_of_node(node, child)
- if (!of_node_cmp(child->name, name) &&
- of_property_read_bool(child, DAI))
- num++;
-
- return num;
-}
-
-static int get_num_dai_links(struct platform_device *pdev,
- unsigned int *num_links)
-{
- struct device_node *top = pdev->dev.of_node;
- struct device_node *link_node, *codec;
- unsigned int link_count = 0, num_codecs;
-
- link_node = of_get_child_by_name(top, PREFIX "dai-link");
- if (!link_node) {
- dev_err(&pdev->dev, "no dai links found\n");
- return -ENOENT;
- }
-
- do {
- if (!of_dai_link_is_available(link_node)) {
- link_node = of_get_next_child(top, link_node);
- continue;
- }
-
- /*
- * depending on the number of codec subnodes, DAI link
- * count is incremented. DT can have one DAI link entry
- * with multiple codec nodes(for ex: DSPK), driver can
- * create multiple links out of it.
- */
- num_codecs = of_get_child_count_with_name(link_node,
- "codec");
- if (!num_codecs) {
- of_node_put(link_node);
- dev_err(&pdev->dev,
- "no codec subnode or sound-dai property\n");
- return -EINVAL;
- }
-
- for_each_child_of_node(link_node, codec) {
- if (of_node_cmp(codec->name, "codec"))
- continue;
-
- if (of_property_read_bool(codec, DAI))
- link_count++;
- }
-
- link_node = of_get_next_child(top, link_node);
- } while (link_node);
-
- *num_links = link_count;
-
- return 0;
-}
-
-static int get_num_codec_confs(struct platform_device *pdev, int *num_confs)
-{
- struct device_node *top = pdev->dev.of_node;
- struct device_node *link_node, *codec;
- unsigned int conf_count = 0, num_codecs;
-
- link_node = of_get_child_by_name(top, PREFIX "dai-link");
- if (!link_node) {
- dev_err(&pdev->dev, "no dai links found\n");
- return -EINVAL;
- }
-
- do {
- if (!of_dai_link_is_available(link_node)) {
- link_node = of_get_next_child(top, link_node);
- continue;
- }
-
- num_codecs = of_get_child_count_with_name(link_node,
- "codec");
- if (!num_codecs) {
- of_node_put(link_node);
- dev_err(&pdev->dev, "missing codec subnode\n");
- return -EINVAL;
- }
-
- for_each_child_of_node(link_node, codec) {
- if (of_node_cmp(codec->name, "codec"))
- continue;
-
- if (of_property_read_bool(codec, "prefix"))
- conf_count++;
- }
-
- link_node = of_get_next_child(top, link_node);
- } while (link_node);
-
- *num_confs = conf_count;
-
- return 0;
-}
-
-static void parse_mclk_fs(struct snd_soc_card *card)
-{
- struct tegra_machine *machine = snd_soc_card_get_drvdata(card);
- struct platform_device *pdev = to_platform_device(card->dev);
-
- if (of_property_read_u32(pdev->dev.of_node, PREFIX "mclk-fs",
- &machine->audio_clock.mclk_scale))
- dev_dbg(&pdev->dev, "'%smclk-fs' property is missing\n",
- PREFIX);
-}
-
-static int parse_dt_codec_confs(struct snd_soc_card *card)
-{
- struct platform_device *pdev = to_platform_device(card->dev);
- struct tegra_machine *machine = snd_soc_card_get_drvdata(card);
- struct device_node *top = pdev->dev.of_node;
- struct device_node *link_node;
- struct snd_soc_codec_conf *codec_confs;
- unsigned int num_confs, i = 0;
- int err;
-
- err = get_num_codec_confs(pdev, &machine->asoc->num_confs);
- if (err < 0)
- return err;
-
- num_confs = machine->asoc->num_confs;
- if (!num_confs)
- return 0;
-
- machine->asoc->codec_confs = devm_kcalloc(&pdev->dev,
- num_confs,
- sizeof(*codec_confs),
- GFP_KERNEL);
- if (!machine->asoc->codec_confs)
- return -ENOMEM;
- codec_confs = machine->asoc->codec_confs;
-
- link_node = of_get_child_by_name(top, PREFIX "dai-link");
- if (!link_node) {
- dev_err(&pdev->dev, "DAI links not found in DT\n");
- return -ENOENT;
- }
-
- do {
- struct of_phandle_args args;
- struct device_node *codec;
-
- if (!of_dai_link_is_available(link_node)) {
- link_node = of_get_next_child(top, link_node);
- continue;
- }
-
- for_each_child_of_node(link_node, codec) {
- if (of_node_cmp(codec->name, "codec"))
- continue;
-
- if (!of_property_read_bool(codec, "prefix"))
- continue;
-
- err = of_parse_phandle_with_args(codec, DAI, CELL, 0,
- &args);
- if (err < 0) {
- of_node_put(codec);
- of_node_put(link_node);
- return err;
- }
-
- codec_confs[i].of_node = args.np;
- codec_confs[i].dev_name = NULL;
- of_property_read_string(codec, "prefix",
- &codec_confs[i].name_prefix);
-
- i++;
- }
-
- link_node = of_get_next_child(top, link_node);
- } while (link_node);
-
- card->num_configs = num_confs;
- card->codec_conf = codec_confs;
-
- return 0;
-}
-
-static int parse_dt_dai_links(struct snd_soc_card *card,
- struct snd_soc_ops *pcm_ops,
- struct snd_soc_compr_ops *compr_ops)
-{
- struct platform_device *pdev = to_platform_device(card->dev);
- struct tegra_machine *machine = snd_soc_card_get_drvdata(card);
- struct device_node *top = pdev->dev.of_node;
- struct device_node *link_node;
- struct snd_soc_dai_link *dai_links;
- unsigned int num_links, link_count = 0;
- int ret;
-
- ret = get_num_dai_links(pdev, &machine->asoc->num_links);
- if (ret < 0)
- return ret;
-
- num_links = machine->asoc->num_links;
- if (!num_links)
- return -EINVAL;
-
- dai_links = devm_kcalloc(&pdev->dev, num_links, sizeof(*dai_links),
- GFP_KERNEL);
- if (!dai_links)
- return -ENOMEM;
- machine->asoc->dai_links = dai_links;
-
- link_node = of_get_child_by_name(top, PREFIX "dai-link");
- if (!link_node) {
- dev_err(&pdev->dev, "DAI links not found in DT\n");
- return -ENOENT;
- }
-
- do {
- struct device_node *codec = NULL, *cpu = NULL;
- struct snd_soc_dai_link *dai_link;
- int link_type = 0, codec_count = 0;
-
- if (!of_dai_link_is_available(link_node)) {
- link_node = of_get_next_child(top, link_node);
- continue;
- }
-
- dev_dbg(&pdev->dev, "parsing (%pOF)\n", link_node);
-
- cpu = of_get_child_by_name(link_node, "cpu");
- if (!cpu) {
- dev_err(&pdev->dev, "cpu subnode is missing");
- ret = -ENOENT;
- goto cleanup;
- }
-
- for_each_child_of_node(link_node, codec) {
- /* loop over codecs only */
- if (of_node_cmp(codec->name, "codec"))
- continue;
-
- if (!of_property_read_bool(codec, DAI)) {
- dev_dbg(&pdev->dev,
- "sound-dai prop missing for (%pOF)\n",
- codec);
- codec_count++;
- continue;
- }
-
- dai_link = &dai_links[link_count];
-
- /* parse CPU DAI */
- ret = asoc_simple_card_parse_cpu(cpu, dai_link, DAI,
- CELL, NULL);
- if (ret < 0)
- goto cleanup;
-
- /* parse CODEC DAI */
- ret = asoc_simple_card_parse_codec(codec, dai_link,
- DAI, CELL);
- if (ret < 0)
- goto cleanup;
-
- /* set DAI link name */
- if (of_property_read_string_index(link_node,
- "link-name",
- codec_count,
- &dai_link->name)) {
- ret = asoc_simple_card_set_dailink_name(
- &pdev->dev, dai_link, "%s-%d",
- "tegra-dlink", link_count);
- if (ret < 0)
- goto cleanup;
- }
-
- asoc_simple_card_parse_daifmt(&pdev->dev, link_node,
- codec, NULL,
- &dai_link->dai_fmt);
-
- of_property_read_u32(link_node, "link-type",
- &link_type);
- switch (link_type) {
- case PCM_LINK:
- dai_link->ops = pcm_ops;
- asoc_simple_card_canonicalize_dailink(dai_link);
- dai_link->ignore_pmdown_time = 1;
- break;
- case COMPR_LINK:
- dai_link->compr_ops = compr_ops;
- asoc_simple_card_canonicalize_dailink(dai_link);
- dai_link->ignore_pmdown_time = 1;
- break;
- case C2C_LINK:
- dai_link->params = &link_params;
- break;
- default:
- dev_err(&pdev->dev, "DAI link type invalid\n");
- ret = -EINVAL;
- goto cleanup;
- }
-
- link_count++;
- codec_count++;
- }
-cleanup:
- of_node_put(cpu);
- if (ret < 0) {
- of_node_put(codec);
- of_node_put(link_node);
- return ret;
- }
-
- link_node = of_get_next_child(top, link_node);
- } while (link_node);
-
- card->num_links = num_links;
- card->dai_link = dai_links;
-
- return 0;
-}
-
-int parse_card_info(struct snd_soc_card *card, struct snd_soc_ops *pcm_ops,
- struct snd_soc_compr_ops *compr_ops)
-{
- struct device_node *node = card->dev->of_node;
- int ret;
-
- ret = asoc_simple_card_parse_card_name(card, PREFIX);
- if (ret < 0)
- return ret;
-
- /* parse machine DAPM widgets */
- if (of_property_read_bool(node, PREFIX "widgets")) {
- ret = snd_soc_of_parse_audio_simple_widgets(card,
- PREFIX "widgets");
- if (ret < 0)
- return ret;
- }
-
- /*
- * Below property of routing map is required only when there
- * are DAPM input/output widgets available for external codec,
- * which require them to be connected to machine source/sink
- * DAPM widgets.
- */
- if (of_property_read_bool(node, PREFIX "routing")) {
- ret = snd_soc_of_parse_audio_routing(card, PREFIX "routing");
- if (ret < 0)
- return ret;
- }
-
- parse_mclk_fs(card);
-
- ret = parse_dt_dai_links(card, pcm_ops, compr_ops);
- if (ret < 0)
- return ret;
-
- ret = parse_dt_codec_confs(card);
- if (ret < 0)
- return ret;
-
- return 0;
-}
-EXPORT_SYMBOL_GPL(parse_card_info);
-
-MODULE_DESCRIPTION("Tegra ASoC Machine driver DT parser code");
-MODULE_AUTHOR("Sameer Pujar ");
-MODULE_LICENSE("GPL v2");
diff --git a/sound/soc/tegra-alt/tegra186_arad_alt.c b/sound/soc/tegra/tegra186_arad.c
similarity index 100%
rename from sound/soc/tegra-alt/tegra186_arad_alt.c
rename to sound/soc/tegra/tegra186_arad.c
diff --git a/sound/soc/tegra-alt/include/tegra186_arad_alt.h b/sound/soc/tegra/tegra186_arad.h
similarity index 100%
rename from sound/soc/tegra-alt/include/tegra186_arad_alt.h
rename to sound/soc/tegra/tegra186_arad.h
diff --git a/sound/soc/tegra-alt/tegra186_asrc_alt.c b/sound/soc/tegra/tegra186_asrc.c
similarity index 100%
rename from sound/soc/tegra-alt/tegra186_asrc_alt.c
rename to sound/soc/tegra/tegra186_asrc.c
diff --git a/sound/soc/tegra-alt/include/tegra186_asrc_alt.h b/sound/soc/tegra/tegra186_asrc.h
similarity index 100%
rename from sound/soc/tegra-alt/include/tegra186_asrc_alt.h
rename to sound/soc/tegra/tegra186_asrc.h
diff --git a/sound/soc/tegra-alt/tegra186_dspk_alt.c b/sound/soc/tegra/tegra186_dspk.c
similarity index 100%
rename from sound/soc/tegra-alt/tegra186_dspk_alt.c
rename to sound/soc/tegra/tegra186_dspk.c
diff --git a/sound/soc/tegra-alt/include/tegra186_dspk_alt.h b/sound/soc/tegra/tegra186_dspk.h
similarity index 100%
rename from sound/soc/tegra-alt/include/tegra186_dspk_alt.h
rename to sound/soc/tegra/tegra186_dspk.h
diff --git a/sound/soc/tegra-alt/tegra210_admaif_alt.c b/sound/soc/tegra/tegra210_admaif.c
similarity index 100%
rename from sound/soc/tegra-alt/tegra210_admaif_alt.c
rename to sound/soc/tegra/tegra210_admaif.c
diff --git a/sound/soc/tegra-alt/include/tegra210_admaif_alt.h b/sound/soc/tegra/tegra210_admaif.h
similarity index 100%
rename from sound/soc/tegra-alt/include/tegra210_admaif_alt.h
rename to sound/soc/tegra/tegra210_admaif.h
diff --git a/sound/soc/tegra-alt/tegra210_adx_alt.c b/sound/soc/tegra/tegra210_adx.c
similarity index 100%
rename from sound/soc/tegra-alt/tegra210_adx_alt.c
rename to sound/soc/tegra/tegra210_adx.c
diff --git a/sound/soc/tegra-alt/include/tegra210_adx_alt.h b/sound/soc/tegra/tegra210_adx.h
similarity index 100%
rename from sound/soc/tegra-alt/include/tegra210_adx_alt.h
rename to sound/soc/tegra/tegra210_adx.h
diff --git a/sound/soc/tegra-alt/tegra210_afc_alt.c b/sound/soc/tegra/tegra210_afc.c
similarity index 100%
rename from sound/soc/tegra-alt/tegra210_afc_alt.c
rename to sound/soc/tegra/tegra210_afc.c
diff --git a/sound/soc/tegra-alt/include/tegra210_afc_alt.h b/sound/soc/tegra/tegra210_afc.h
similarity index 100%
rename from sound/soc/tegra-alt/include/tegra210_afc_alt.h
rename to sound/soc/tegra/tegra210_afc.h
diff --git a/sound/soc/tegra-alt/tegra210_amx_alt.c b/sound/soc/tegra/tegra210_amx.c
similarity index 100%
rename from sound/soc/tegra-alt/tegra210_amx_alt.c
rename to sound/soc/tegra/tegra210_amx.c
diff --git a/sound/soc/tegra-alt/include/tegra210_amx_alt.h b/sound/soc/tegra/tegra210_amx.h
similarity index 100%
rename from sound/soc/tegra-alt/include/tegra210_amx_alt.h
rename to sound/soc/tegra/tegra210_amx.h
diff --git a/sound/soc/tegra-alt/tegra210_dmic_alt.c b/sound/soc/tegra/tegra210_dmic.c
similarity index 100%
rename from sound/soc/tegra-alt/tegra210_dmic_alt.c
rename to sound/soc/tegra/tegra210_dmic.c
diff --git a/sound/soc/tegra-alt/include/tegra210_dmic_alt.h b/sound/soc/tegra/tegra210_dmic.h
similarity index 100%
rename from sound/soc/tegra-alt/include/tegra210_dmic_alt.h
rename to sound/soc/tegra/tegra210_dmic.h
diff --git a/sound/soc/tegra-alt/tegra210_i2s_alt.c b/sound/soc/tegra/tegra210_i2s.c
similarity index 100%
rename from sound/soc/tegra-alt/tegra210_i2s_alt.c
rename to sound/soc/tegra/tegra210_i2s.c
diff --git a/sound/soc/tegra-alt/include/tegra210_i2s_alt.h b/sound/soc/tegra/tegra210_i2s.h
similarity index 100%
rename from sound/soc/tegra-alt/include/tegra210_i2s_alt.h
rename to sound/soc/tegra/tegra210_i2s.h
diff --git a/sound/soc/tegra-alt/tegra210_iqc_alt.c b/sound/soc/tegra/tegra210_iqc.c
similarity index 100%
rename from sound/soc/tegra-alt/tegra210_iqc_alt.c
rename to sound/soc/tegra/tegra210_iqc.c
diff --git a/sound/soc/tegra-alt/include/tegra210_iqc_alt.h b/sound/soc/tegra/tegra210_iqc.h
similarity index 100%
rename from sound/soc/tegra-alt/include/tegra210_iqc_alt.h
rename to sound/soc/tegra/tegra210_iqc.h
diff --git a/sound/soc/tegra-alt/tegra210_mbdrc_alt.c b/sound/soc/tegra/tegra210_mbdrc.c
similarity index 100%
rename from sound/soc/tegra-alt/tegra210_mbdrc_alt.c
rename to sound/soc/tegra/tegra210_mbdrc.c
diff --git a/sound/soc/tegra-alt/include/tegra210_mbdrc_alt.h b/sound/soc/tegra/tegra210_mbdrc.h
similarity index 100%
rename from sound/soc/tegra-alt/include/tegra210_mbdrc_alt.h
rename to sound/soc/tegra/tegra210_mbdrc.h
diff --git a/sound/soc/tegra-alt/tegra210_mixer_alt.c b/sound/soc/tegra/tegra210_mixer.c
similarity index 100%
rename from sound/soc/tegra-alt/tegra210_mixer_alt.c
rename to sound/soc/tegra/tegra210_mixer.c
diff --git a/sound/soc/tegra-alt/include/tegra210_mixer_alt.h b/sound/soc/tegra/tegra210_mixer.h
similarity index 100%
rename from sound/soc/tegra-alt/include/tegra210_mixer_alt.h
rename to sound/soc/tegra/tegra210_mixer.h
diff --git a/sound/soc/tegra-alt/tegra210_mvc_alt.c b/sound/soc/tegra/tegra210_mvc.c
similarity index 100%
rename from sound/soc/tegra-alt/tegra210_mvc_alt.c
rename to sound/soc/tegra/tegra210_mvc.c
diff --git a/sound/soc/tegra-alt/include/tegra210_mvc_alt.h b/sound/soc/tegra/tegra210_mvc.h
similarity index 100%
rename from sound/soc/tegra-alt/include/tegra210_mvc_alt.h
rename to sound/soc/tegra/tegra210_mvc.h
diff --git a/sound/soc/tegra-alt/tegra210_ope_alt.c b/sound/soc/tegra/tegra210_ope.c
similarity index 100%
rename from sound/soc/tegra-alt/tegra210_ope_alt.c
rename to sound/soc/tegra/tegra210_ope.c
diff --git a/sound/soc/tegra-alt/include/tegra210_ope_alt.h b/sound/soc/tegra/tegra210_ope.h
similarity index 100%
rename from sound/soc/tegra-alt/include/tegra210_ope_alt.h
rename to sound/soc/tegra/tegra210_ope.h
diff --git a/sound/soc/tegra-alt/tegra210_peq_alt.c b/sound/soc/tegra/tegra210_peq.c
similarity index 100%
rename from sound/soc/tegra-alt/tegra210_peq_alt.c
rename to sound/soc/tegra/tegra210_peq.c
diff --git a/sound/soc/tegra-alt/include/tegra210_peq_alt.h b/sound/soc/tegra/tegra210_peq.h
similarity index 100%
rename from sound/soc/tegra-alt/include/tegra210_peq_alt.h
rename to sound/soc/tegra/tegra210_peq.h
diff --git a/sound/soc/tegra-alt/tegra210_sfc_alt.c b/sound/soc/tegra/tegra210_sfc.c
similarity index 100%
rename from sound/soc/tegra-alt/tegra210_sfc_alt.c
rename to sound/soc/tegra/tegra210_sfc.c
diff --git a/sound/soc/tegra-alt/include/tegra210_sfc_alt.h b/sound/soc/tegra/tegra210_sfc.h
similarity index 100%
rename from sound/soc/tegra-alt/include/tegra210_sfc_alt.h
rename to sound/soc/tegra/tegra210_sfc.h