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