1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * tegra30_ahub.h - Definitions for Tegra30 AHUB driver 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (c) 2011,2012, NVIDIA CORPORATION. All rights reserved. 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef __TEGRA30_AHUB_H__ 9*4882a593Smuzhiyun #define __TEGRA30_AHUB_H__ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun /* Fields in *_CIF_RX/TX_CTRL; used by AHUB FIFOs, and all other audio modules */ 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_FIFO_THRESHOLD_SHIFT 28 14*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_FIFO_THRESHOLD_MASK_US 0xf 15*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_FIFO_THRESHOLD_MASK (TEGRA30_AUDIOCIF_CTRL_FIFO_THRESHOLD_MASK_US << TEGRA30_AUDIOCIF_CTRL_FIFO_THRESHOLD_SHIFT) 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #define TEGRA124_AUDIOCIF_CTRL_FIFO_THRESHOLD_SHIFT 24 18*4882a593Smuzhiyun #define TEGRA124_AUDIOCIF_CTRL_FIFO_THRESHOLD_MASK_US 0x3f 19*4882a593Smuzhiyun #define TEGRA124_AUDIOCIF_CTRL_FIFO_THRESHOLD_MASK (TEGRA124_AUDIOCIF_CTRL_FIFO_THRESHOLD_MASK_US << TEGRA124_AUDIOCIF_CTRL_FIFO_THRESHOLD_SHIFT) 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun /* Channel count minus 1 */ 22*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_AUDIO_CHANNELS_SHIFT 24 23*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_AUDIO_CHANNELS_MASK_US 7 24*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_AUDIO_CHANNELS_MASK (TEGRA30_AUDIOCIF_CTRL_AUDIO_CHANNELS_MASK_US << TEGRA30_AUDIOCIF_CTRL_AUDIO_CHANNELS_SHIFT) 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun /* Channel count minus 1 */ 27*4882a593Smuzhiyun #define TEGRA124_AUDIOCIF_CTRL_AUDIO_CHANNELS_SHIFT 20 28*4882a593Smuzhiyun #define TEGRA124_AUDIOCIF_CTRL_AUDIO_CHANNELS_MASK_US 0xf 29*4882a593Smuzhiyun #define TEGRA124_AUDIOCIF_CTRL_AUDIO_CHANNELS_MASK (TEGRA124_AUDIOCIF_CTRL_AUDIO_CHANNELS_MASK_US << TEGRA124_AUDIOCIF_CTRL_AUDIO_CHANNELS_SHIFT) 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun /* Channel count minus 1 */ 32*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_CLIENT_CHANNELS_SHIFT 16 33*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_CLIENT_CHANNELS_MASK_US 7 34*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_CLIENT_CHANNELS_MASK (TEGRA30_AUDIOCIF_CTRL_CLIENT_CHANNELS_MASK_US << TEGRA30_AUDIOCIF_CTRL_CLIENT_CHANNELS_SHIFT) 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun /* Channel count minus 1 */ 37*4882a593Smuzhiyun #define TEGRA124_AUDIOCIF_CTRL_CLIENT_CHANNELS_SHIFT 16 38*4882a593Smuzhiyun #define TEGRA124_AUDIOCIF_CTRL_CLIENT_CHANNELS_MASK_US 0xf 39*4882a593Smuzhiyun #define TEGRA124_AUDIOCIF_CTRL_CLIENT_CHANNELS_MASK (TEGRA30_AUDIOCIF_CTRL_CLIENT_CHANNELS_MASK_US << TEGRA30_AUDIOCIF_CTRL_CLIENT_CHANNELS_SHIFT) 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_BITS_4 0 42*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_BITS_8 1 43*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_BITS_12 2 44*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_BITS_16 3 45*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_BITS_20 4 46*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_BITS_24 5 47*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_BITS_28 6 48*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_BITS_32 7 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT 12 51*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_MASK (7 << TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT) 52*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_4 (TEGRA30_AUDIOCIF_BITS_4 << TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT) 53*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_8 (TEGRA30_AUDIOCIF_BITS_8 << TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT) 54*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_12 (TEGRA30_AUDIOCIF_BITS_12 << TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT) 55*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_16 (TEGRA30_AUDIOCIF_BITS_16 << TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT) 56*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_20 (TEGRA30_AUDIOCIF_BITS_20 << TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT) 57*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_24 (TEGRA30_AUDIOCIF_BITS_24 << TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT) 58*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_28 (TEGRA30_AUDIOCIF_BITS_28 << TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT) 59*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_32 (TEGRA30_AUDIOCIF_BITS_32 << TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT) 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT 8 62*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_MASK (7 << TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT) 63*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_4 (TEGRA30_AUDIOCIF_BITS_4 << TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT) 64*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_8 (TEGRA30_AUDIOCIF_BITS_8 << TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT) 65*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_12 (TEGRA30_AUDIOCIF_BITS_12 << TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT) 66*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_16 (TEGRA30_AUDIOCIF_BITS_16 << TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT) 67*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_20 (TEGRA30_AUDIOCIF_BITS_20 << TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT) 68*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_24 (TEGRA30_AUDIOCIF_BITS_24 << TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT) 69*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_28 (TEGRA30_AUDIOCIF_BITS_28 << TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT) 70*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_32 (TEGRA30_AUDIOCIF_BITS_32 << TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT) 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_EXPAND_ZERO 0 73*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_EXPAND_ONE 1 74*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_EXPAND_LFSR 2 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_EXPAND_SHIFT 6 77*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_EXPAND_MASK (3 << TEGRA30_AUDIOCIF_CTRL_EXPAND_SHIFT) 78*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_EXPAND_ZERO (TEGRA30_AUDIOCIF_EXPAND_ZERO << TEGRA30_AUDIOCIF_CTRL_EXPAND_SHIFT) 79*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_EXPAND_ONE (TEGRA30_AUDIOCIF_EXPAND_ONE << TEGRA30_AUDIOCIF_CTRL_EXPAND_SHIFT) 80*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_EXPAND_LFSR (TEGRA30_AUDIOCIF_EXPAND_LFSR << TEGRA30_AUDIOCIF_CTRL_EXPAND_SHIFT) 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_STEREO_CONV_CH0 0 83*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_STEREO_CONV_CH1 1 84*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_STEREO_CONV_AVG 2 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_STEREO_CONV_SHIFT 4 87*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_STEREO_CONV_MASK (3 << TEGRA30_AUDIOCIF_CTRL_STEREO_CONV_SHIFT) 88*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_STEREO_CONV_CH0 (TEGRA30_AUDIOCIF_STEREO_CONV_CH0 << TEGRA30_AUDIOCIF_CTRL_STEREO_CONV_SHIFT) 89*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_STEREO_CONV_CH1 (TEGRA30_AUDIOCIF_STEREO_CONV_CH1 << TEGRA30_AUDIOCIF_CTRL_STEREO_CONV_SHIFT) 90*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_STEREO_CONV_AVG (TEGRA30_AUDIOCIF_STEREO_CONV_AVG << TEGRA30_AUDIOCIF_CTRL_STEREO_CONV_SHIFT) 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_REPLICATE_SHIFT 3 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_DIRECTION_TX 0 95*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_DIRECTION_RX 1 96*4882a593Smuzhiyun 97*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_DIRECTION_SHIFT 2 98*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_DIRECTION_MASK (1 << TEGRA30_AUDIOCIF_CTRL_DIRECTION_SHIFT) 99*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_DIRECTION_TX (TEGRA30_AUDIOCIF_DIRECTION_TX << TEGRA30_AUDIOCIF_CTRL_DIRECTION_SHIFT) 100*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_DIRECTION_RX (TEGRA30_AUDIOCIF_DIRECTION_RX << TEGRA30_AUDIOCIF_CTRL_DIRECTION_SHIFT) 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_TRUNCATE_ROUND 0 103*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_TRUNCATE_CHOP 1 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_TRUNCATE_SHIFT 1 106*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_TRUNCATE_MASK (1 << TEGRA30_AUDIOCIF_CTRL_TRUNCATE_SHIFT) 107*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_TRUNCATE_ROUND (TEGRA30_AUDIOCIF_TRUNCATE_ROUND << TEGRA30_AUDIOCIF_CTRL_TRUNCATE_SHIFT) 108*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_TRUNCATE_CHOP (TEGRA30_AUDIOCIF_TRUNCATE_CHOP << TEGRA30_AUDIOCIF_CTRL_TRUNCATE_SHIFT) 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_MONO_CONV_ZERO 0 111*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_MONO_CONV_COPY 1 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_MONO_CONV_SHIFT 0 114*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_MONO_CONV_MASK (1 << TEGRA30_AUDIOCIF_CTRL_MONO_CONV_SHIFT) 115*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_MONO_CONV_ZERO (TEGRA30_AUDIOCIF_MONO_CONV_ZERO << TEGRA30_AUDIOCIF_CTRL_MONO_CONV_SHIFT) 116*4882a593Smuzhiyun #define TEGRA30_AUDIOCIF_CTRL_MONO_CONV_COPY (TEGRA30_AUDIOCIF_MONO_CONV_COPY << TEGRA30_AUDIOCIF_CTRL_MONO_CONV_SHIFT) 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun /* Registers within TEGRA30_AUDIO_CLUSTER_BASE */ 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun /* TEGRA30_AHUB_CHANNEL_CTRL */ 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL 0x0 123*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_STRIDE 0x20 124*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_COUNT 4 125*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_TX_EN (1 << 31) 126*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_RX_EN (1 << 30) 127*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_LOOPBACK (1 << 29) 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_TX_THRESHOLD_SHIFT 16 130*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_TX_THRESHOLD_MASK_US 0xff 131*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_TX_THRESHOLD_MASK (TEGRA30_AHUB_CHANNEL_CTRL_TX_THRESHOLD_MASK_US << TEGRA30_AHUB_CHANNEL_CTRL_TX_THRESHOLD_SHIFT) 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_RX_THRESHOLD_SHIFT 8 134*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_RX_THRESHOLD_MASK_US 0xff 135*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_RX_THRESHOLD_MASK (TEGRA30_AHUB_CHANNEL_CTRL_RX_THRESHOLD_MASK_US << TEGRA30_AHUB_CHANNEL_CTRL_RX_THRESHOLD_SHIFT) 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_EN (1 << 6) 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun #define TEGRA30_PACK_8_4 2 140*4882a593Smuzhiyun #define TEGRA30_PACK_16 3 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_SHIFT 4 143*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_MASK_US 3 144*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_MASK (TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_MASK_US << TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_SHIFT) 145*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_8_4 (TEGRA30_PACK_8_4 << TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_SHIFT) 146*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_16 (TEGRA30_PACK_16 << TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_SHIFT) 147*4882a593Smuzhiyun 148*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_EN (1 << 2) 149*4882a593Smuzhiyun 150*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_SHIFT 0 151*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_MASK_US 3 152*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_MASK (TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_MASK_US << TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_SHIFT) 153*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_8_4 (TEGRA30_PACK_8_4 << TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_SHIFT) 154*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_16 (TEGRA30_PACK_16 << TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_SHIFT) 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun /* TEGRA30_AHUB_CHANNEL_CLEAR */ 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CLEAR 0x4 159*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CLEAR_STRIDE 0x20 160*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CLEAR_COUNT 4 161*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CLEAR_TX_SOFT_RESET (1 << 31) 162*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_CLEAR_RX_SOFT_RESET (1 << 30) 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun /* TEGRA30_AHUB_CHANNEL_STATUS */ 165*4882a593Smuzhiyun 166*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_STATUS 0x8 167*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_STATUS_STRIDE 0x20 168*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_STATUS_COUNT 4 169*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_STATUS_TX_FREE_SHIFT 24 170*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_STATUS_TX_FREE_MASK_US 0xff 171*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_STATUS_TX_FREE_MASK (TEGRA30_AHUB_CHANNEL_STATUS_TX_FREE_MASK_US << TEGRA30_AHUB_CHANNEL_STATUS_TX_FREE_SHIFT) 172*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_STATUS_RX_FREE_SHIFT 16 173*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_STATUS_RX_FREE_MASK_US 0xff 174*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_STATUS_RX_FREE_MASK (TEGRA30_AHUB_CHANNEL_STATUS_RX_FREE_MASK_US << TEGRA30_AHUB_CHANNEL_STATUS_RX_FREE_SHIFT) 175*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_STATUS_TX_TRIG (1 << 1) 176*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_STATUS_RX_TRIG (1 << 0) 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun /* TEGRA30_AHUB_CHANNEL_TXFIFO */ 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_TXFIFO 0xc 181*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_TXFIFO_STRIDE 0x20 182*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_TXFIFO_COUNT 4 183*4882a593Smuzhiyun 184*4882a593Smuzhiyun /* TEGRA30_AHUB_CHANNEL_RXFIFO */ 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_RXFIFO 0x10 187*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_RXFIFO_STRIDE 0x20 188*4882a593Smuzhiyun #define TEGRA30_AHUB_CHANNEL_RXFIFO_COUNT 4 189*4882a593Smuzhiyun 190*4882a593Smuzhiyun /* TEGRA30_AHUB_CIF_TX_CTRL */ 191*4882a593Smuzhiyun 192*4882a593Smuzhiyun #define TEGRA30_AHUB_CIF_TX_CTRL 0x14 193*4882a593Smuzhiyun #define TEGRA30_AHUB_CIF_TX_CTRL_STRIDE 0x20 194*4882a593Smuzhiyun #define TEGRA30_AHUB_CIF_TX_CTRL_COUNT 4 195*4882a593Smuzhiyun /* Uses field from TEGRA30_AUDIOCIF_CTRL_* */ 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun /* TEGRA30_AHUB_CIF_RX_CTRL */ 198*4882a593Smuzhiyun 199*4882a593Smuzhiyun #define TEGRA30_AHUB_CIF_RX_CTRL 0x18 200*4882a593Smuzhiyun #define TEGRA30_AHUB_CIF_RX_CTRL_STRIDE 0x20 201*4882a593Smuzhiyun #define TEGRA30_AHUB_CIF_RX_CTRL_COUNT 4 202*4882a593Smuzhiyun /* Uses field from TEGRA30_AUDIOCIF_CTRL_* */ 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun /* TEGRA30_AHUB_CONFIG_LINK_CTRL */ 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun #define TEGRA30_AHUB_CONFIG_LINK_CTRL 0x80 207*4882a593Smuzhiyun #define TEGRA30_AHUB_CONFIG_LINK_CTRL_MASTER_FIFO_FULL_CNT_SHIFT 28 208*4882a593Smuzhiyun #define TEGRA30_AHUB_CONFIG_LINK_CTRL_MASTER_FIFO_FULL_CNT_MASK_US 0xf 209*4882a593Smuzhiyun #define TEGRA30_AHUB_CONFIG_LINK_CTRL_MASTER_FIFO_FULL_CNT_MASK (TEGRA30_AHUB_CONFIG_LINK_CTRL_MASTER_FIFO_FULL_CNT_MASK_US << TEGRA30_AHUB_CONFIG_LINK_CTRL_MASTER_FIFO_FULL_CNT_SHIFT) 210*4882a593Smuzhiyun #define TEGRA30_AHUB_CONFIG_LINK_CTRL_TIMEOUT_CNT_SHIFT 16 211*4882a593Smuzhiyun #define TEGRA30_AHUB_CONFIG_LINK_CTRL_TIMEOUT_CNT_MASK_US 0xfff 212*4882a593Smuzhiyun #define TEGRA30_AHUB_CONFIG_LINK_CTRL_TIMEOUT_CNT_MASK (TEGRA30_AHUB_CONFIG_LINK_CTRL_TIMEOUT_CNT_MASK_US << TEGRA30_AHUB_CONFIG_LINK_CTRL_TIMEOUT_CNT_SHIFT) 213*4882a593Smuzhiyun #define TEGRA30_AHUB_CONFIG_LINK_CTRL_IDLE_CNT_SHIFT 4 214*4882a593Smuzhiyun #define TEGRA30_AHUB_CONFIG_LINK_CTRL_IDLE_CNT_MASK_US 0xfff 215*4882a593Smuzhiyun #define TEGRA30_AHUB_CONFIG_LINK_CTRL_IDLE_CNT_MASK (TEGRA30_AHUB_CONFIG_LINK_CTRL_IDLE_CNT_MASK_US << TEGRA30_AHUB_CONFIG_LINK_CTRL_IDLE_CNT_SHIFT) 216*4882a593Smuzhiyun #define TEGRA30_AHUB_CONFIG_LINK_CTRL_CG_EN (1 << 2) 217*4882a593Smuzhiyun #define TEGRA30_AHUB_CONFIG_LINK_CTRL_CLEAR_TIMEOUT_CNTR (1 << 1) 218*4882a593Smuzhiyun #define TEGRA30_AHUB_CONFIG_LINK_CTRL_SOFT_RESET (1 << 0) 219*4882a593Smuzhiyun 220*4882a593Smuzhiyun /* TEGRA30_AHUB_MISC_CTRL */ 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun #define TEGRA30_AHUB_MISC_CTRL 0x84 223*4882a593Smuzhiyun #define TEGRA30_AHUB_MISC_CTRL_AUDIO_ACTIVE (1 << 31) 224*4882a593Smuzhiyun #define TEGRA30_AHUB_MISC_CTRL_AUDIO_CG_EN (1 << 8) 225*4882a593Smuzhiyun #define TEGRA30_AHUB_MISC_CTRL_AUDIO_OBS_SEL_SHIFT 0 226*4882a593Smuzhiyun #define TEGRA30_AHUB_MISC_CTRL_AUDIO_OBS_SEL_MASK (0x1f << TEGRA30_AHUB_MISC_CTRL_AUDIO_OBS_SEL_SHIFT) 227*4882a593Smuzhiyun 228*4882a593Smuzhiyun /* TEGRA30_AHUB_APBDMA_LIVE_STATUS */ 229*4882a593Smuzhiyun 230*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS 0x88 231*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH3_RX_CIF_FIFO_FULL (1 << 31) 232*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH3_TX_CIF_FIFO_FULL (1 << 30) 233*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH2_RX_CIF_FIFO_FULL (1 << 29) 234*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH2_TX_CIF_FIFO_FULL (1 << 28) 235*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH1_RX_CIF_FIFO_FULL (1 << 27) 236*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH1_TX_CIF_FIFO_FULL (1 << 26) 237*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH0_RX_CIF_FIFO_FULL (1 << 25) 238*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH0_TX_CIF_FIFO_FULL (1 << 24) 239*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH3_RX_CIF_FIFO_EMPTY (1 << 23) 240*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH3_TX_CIF_FIFO_EMPTY (1 << 22) 241*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH2_RX_CIF_FIFO_EMPTY (1 << 21) 242*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH2_TX_CIF_FIFO_EMPTY (1 << 20) 243*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH1_RX_CIF_FIFO_EMPTY (1 << 19) 244*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH1_TX_CIF_FIFO_EMPTY (1 << 18) 245*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH0_RX_CIF_FIFO_EMPTY (1 << 17) 246*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH0_TX_CIF_FIFO_EMPTY (1 << 16) 247*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH3_RX_DMA_FIFO_FULL (1 << 15) 248*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH3_TX_DMA_FIFO_FULL (1 << 14) 249*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH2_RX_DMA_FIFO_FULL (1 << 13) 250*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH2_TX_DMA_FIFO_FULL (1 << 12) 251*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH1_RX_DMA_FIFO_FULL (1 << 11) 252*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH1_TX_DMA_FIFO_FULL (1 << 10) 253*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH0_RX_DMA_FIFO_FULL (1 << 9) 254*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH0_TX_DMA_FIFO_FULL (1 << 8) 255*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH3_RX_DMA_FIFO_EMPTY (1 << 7) 256*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH3_TX_DMA_FIFO_EMPTY (1 << 6) 257*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH2_RX_DMA_FIFO_EMPTY (1 << 5) 258*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH2_TX_DMA_FIFO_EMPTY (1 << 4) 259*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH1_RX_DMA_FIFO_EMPTY (1 << 3) 260*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH1_TX_DMA_FIFO_EMPTY (1 << 2) 261*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH0_RX_DMA_FIFO_EMPTY (1 << 1) 262*4882a593Smuzhiyun #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH0_TX_DMA_FIFO_EMPTY (1 << 0) 263*4882a593Smuzhiyun 264*4882a593Smuzhiyun /* TEGRA30_AHUB_I2S_LIVE_STATUS */ 265*4882a593Smuzhiyun 266*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS 0x8c 267*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S4_RX_FIFO_FULL (1 << 29) 268*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S4_TX_FIFO_FULL (1 << 28) 269*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S3_RX_FIFO_FULL (1 << 27) 270*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S3_TX_FIFO_FULL (1 << 26) 271*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S2_RX_FIFO_FULL (1 << 25) 272*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S2_TX_FIFO_FULL (1 << 24) 273*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S1_RX_FIFO_FULL (1 << 23) 274*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S1_TX_FIFO_FULL (1 << 22) 275*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S0_RX_FIFO_FULL (1 << 21) 276*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S0_TX_FIFO_FULL (1 << 20) 277*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S4_RX_FIFO_ENABLED (1 << 19) 278*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S4_TX_FIFO_ENABLED (1 << 18) 279*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S3_RX_FIFO_ENABLED (1 << 17) 280*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S3_TX_FIFO_ENABLED (1 << 16) 281*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S2_RX_FIFO_ENABLED (1 << 15) 282*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S2_TX_FIFO_ENABLED (1 << 14) 283*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S1_RX_FIFO_ENABLED (1 << 13) 284*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S1_TX_FIFO_ENABLED (1 << 12) 285*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S0_RX_FIFO_ENABLED (1 << 11) 286*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S0_TX_FIFO_ENABLED (1 << 10) 287*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S4_RX_FIFO_EMPTY (1 << 9) 288*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S4_TX_FIFO_EMPTY (1 << 8) 289*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S3_RX_FIFO_EMPTY (1 << 7) 290*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S3_TX_FIFO_EMPTY (1 << 6) 291*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S2_RX_FIFO_EMPTY (1 << 5) 292*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S2_TX_FIFO_EMPTY (1 << 4) 293*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S1_RX_FIFO_EMPTY (1 << 3) 294*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S1_TX_FIFO_EMPTY (1 << 2) 295*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S0_RX_FIFO_EMPTY (1 << 1) 296*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S0_TX_FIFO_EMPTY (1 << 0) 297*4882a593Smuzhiyun 298*4882a593Smuzhiyun /* TEGRA30_AHUB_DAM0_LIVE_STATUS */ 299*4882a593Smuzhiyun 300*4882a593Smuzhiyun #define TEGRA30_AHUB_DAM_LIVE_STATUS 0x90 301*4882a593Smuzhiyun #define TEGRA30_AHUB_DAM_LIVE_STATUS_STRIDE 0x8 302*4882a593Smuzhiyun #define TEGRA30_AHUB_DAM_LIVE_STATUS_COUNT 3 303*4882a593Smuzhiyun #define TEGRA30_AHUB_DAM_LIVE_STATUS_TX_ENABLED (1 << 26) 304*4882a593Smuzhiyun #define TEGRA30_AHUB_DAM_LIVE_STATUS_RX1_ENABLED (1 << 25) 305*4882a593Smuzhiyun #define TEGRA30_AHUB_DAM_LIVE_STATUS_RX0_ENABLED (1 << 24) 306*4882a593Smuzhiyun #define TEGRA30_AHUB_DAM_LIVE_STATUS_TXFIFO_FULL (1 << 15) 307*4882a593Smuzhiyun #define TEGRA30_AHUB_DAM_LIVE_STATUS_RX1FIFO_FULL (1 << 9) 308*4882a593Smuzhiyun #define TEGRA30_AHUB_DAM_LIVE_STATUS_RX0FIFO_FULL (1 << 8) 309*4882a593Smuzhiyun #define TEGRA30_AHUB_DAM_LIVE_STATUS_TXFIFO_EMPTY (1 << 7) 310*4882a593Smuzhiyun #define TEGRA30_AHUB_DAM_LIVE_STATUS_RX1FIFO_EMPTY (1 << 1) 311*4882a593Smuzhiyun #define TEGRA30_AHUB_DAM_LIVE_STATUS_RX0FIFO_EMPTY (1 << 0) 312*4882a593Smuzhiyun 313*4882a593Smuzhiyun /* TEGRA30_AHUB_SPDIF_LIVE_STATUS */ 314*4882a593Smuzhiyun 315*4882a593Smuzhiyun #define TEGRA30_AHUB_SPDIF_LIVE_STATUS 0xa8 316*4882a593Smuzhiyun #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_USER_TX_ENABLED (1 << 11) 317*4882a593Smuzhiyun #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_USER_RX_ENABLED (1 << 10) 318*4882a593Smuzhiyun #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_DATA_TX_ENABLED (1 << 9) 319*4882a593Smuzhiyun #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_DATA_RX_ENABLED (1 << 8) 320*4882a593Smuzhiyun #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_USER_TXFIFO_FULL (1 << 7) 321*4882a593Smuzhiyun #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_USER_RXFIFO_FULL (1 << 6) 322*4882a593Smuzhiyun #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_DATA_TXFIFO_FULL (1 << 5) 323*4882a593Smuzhiyun #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_DATA_RXFIFO_FULL (1 << 4) 324*4882a593Smuzhiyun #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_USER_TXFIFO_EMPTY (1 << 3) 325*4882a593Smuzhiyun #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_USER_RXFIFO_EMPTY (1 << 2) 326*4882a593Smuzhiyun #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_DATA_TXFIFO_EMPTY (1 << 1) 327*4882a593Smuzhiyun #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_DATA_RXFIFO_EMPTY (1 << 0) 328*4882a593Smuzhiyun 329*4882a593Smuzhiyun /* TEGRA30_AHUB_I2S_INT_MASK */ 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_INT_MASK 0xb0 332*4882a593Smuzhiyun 333*4882a593Smuzhiyun /* TEGRA30_AHUB_DAM_INT_MASK */ 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun #define TEGRA30_AHUB_DAM_INT_MASK 0xb4 336*4882a593Smuzhiyun 337*4882a593Smuzhiyun /* TEGRA30_AHUB_SPDIF_INT_MASK */ 338*4882a593Smuzhiyun 339*4882a593Smuzhiyun #define TEGRA30_AHUB_SPDIF_INT_MASK 0xbc 340*4882a593Smuzhiyun 341*4882a593Smuzhiyun /* TEGRA30_AHUB_APBIF_INT_MASK */ 342*4882a593Smuzhiyun 343*4882a593Smuzhiyun #define TEGRA30_AHUB_APBIF_INT_MASK 0xc0 344*4882a593Smuzhiyun 345*4882a593Smuzhiyun /* TEGRA30_AHUB_I2S_INT_STATUS */ 346*4882a593Smuzhiyun 347*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_INT_STATUS 0xc8 348*4882a593Smuzhiyun 349*4882a593Smuzhiyun /* TEGRA30_AHUB_DAM_INT_STATUS */ 350*4882a593Smuzhiyun 351*4882a593Smuzhiyun #define TEGRA30_AHUB_DAM_INT_STATUS 0xcc 352*4882a593Smuzhiyun 353*4882a593Smuzhiyun /* TEGRA30_AHUB_SPDIF_INT_STATUS */ 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun #define TEGRA30_AHUB_SPDIF_INT_STATUS 0xd4 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun /* TEGRA30_AHUB_APBIF_INT_STATUS */ 358*4882a593Smuzhiyun 359*4882a593Smuzhiyun #define TEGRA30_AHUB_APBIF_INT_STATUS 0xd8 360*4882a593Smuzhiyun 361*4882a593Smuzhiyun /* TEGRA30_AHUB_I2S_INT_SOURCE */ 362*4882a593Smuzhiyun 363*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_INT_SOURCE 0xe0 364*4882a593Smuzhiyun 365*4882a593Smuzhiyun /* TEGRA30_AHUB_DAM_INT_SOURCE */ 366*4882a593Smuzhiyun 367*4882a593Smuzhiyun #define TEGRA30_AHUB_DAM_INT_SOURCE 0xe4 368*4882a593Smuzhiyun 369*4882a593Smuzhiyun /* TEGRA30_AHUB_SPDIF_INT_SOURCE */ 370*4882a593Smuzhiyun 371*4882a593Smuzhiyun #define TEGRA30_AHUB_SPDIF_INT_SOURCE 0xec 372*4882a593Smuzhiyun 373*4882a593Smuzhiyun /* TEGRA30_AHUB_APBIF_INT_SOURCE */ 374*4882a593Smuzhiyun 375*4882a593Smuzhiyun #define TEGRA30_AHUB_APBIF_INT_SOURCE 0xf0 376*4882a593Smuzhiyun 377*4882a593Smuzhiyun /* TEGRA30_AHUB_I2S_INT_SET */ 378*4882a593Smuzhiyun 379*4882a593Smuzhiyun #define TEGRA30_AHUB_I2S_INT_SET 0xf8 380*4882a593Smuzhiyun 381*4882a593Smuzhiyun /* TEGRA30_AHUB_DAM_INT_SET */ 382*4882a593Smuzhiyun 383*4882a593Smuzhiyun #define TEGRA30_AHUB_DAM_INT_SET 0xfc 384*4882a593Smuzhiyun 385*4882a593Smuzhiyun /* TEGRA30_AHUB_SPDIF_INT_SET */ 386*4882a593Smuzhiyun 387*4882a593Smuzhiyun #define TEGRA30_AHUB_SPDIF_INT_SET 0x100 388*4882a593Smuzhiyun 389*4882a593Smuzhiyun /* TEGRA30_AHUB_APBIF_INT_SET */ 390*4882a593Smuzhiyun 391*4882a593Smuzhiyun #define TEGRA30_AHUB_APBIF_INT_SET 0x104 392*4882a593Smuzhiyun 393*4882a593Smuzhiyun /* Registers within TEGRA30_AHUB_BASE */ 394*4882a593Smuzhiyun 395*4882a593Smuzhiyun #define TEGRA30_AHUB_AUDIO_RX 0x0 396*4882a593Smuzhiyun #define TEGRA30_AHUB_AUDIO_RX_STRIDE 0x4 397*4882a593Smuzhiyun #define TEGRA30_AHUB_AUDIO_RX_COUNT 17 398*4882a593Smuzhiyun /* This register repeats once for each entry in enum tegra30_ahub_rxcif */ 399*4882a593Smuzhiyun /* The fields in this register are 1 bit per entry in tegra30_ahub_txcif */ 400*4882a593Smuzhiyun 401*4882a593Smuzhiyun /* 402*4882a593Smuzhiyun * Terminology: 403*4882a593Smuzhiyun * AHUB: Audio Hub; a cross-bar switch between the audio devices: DMA FIFOs, 404*4882a593Smuzhiyun * I2S controllers, SPDIF controllers, and DAMs. 405*4882a593Smuzhiyun * XBAR: The core cross-bar component of the AHUB. 406*4882a593Smuzhiyun * CIF: Client Interface; the HW module connecting an audio device to the 407*4882a593Smuzhiyun * XBAR. 408*4882a593Smuzhiyun * DAM: Digital Audio Mixer: A HW module that mixes multiple audio streams, 409*4882a593Smuzhiyun * possibly including sample-rate conversion. 410*4882a593Smuzhiyun * 411*4882a593Smuzhiyun * Each TX CIF transmits data into the XBAR. Each RX CIF can receive audio 412*4882a593Smuzhiyun * transmitted by a particular TX CIF. 413*4882a593Smuzhiyun * 414*4882a593Smuzhiyun * This driver is currently very simplistic; many HW features are not 415*4882a593Smuzhiyun * exposed; DAMs are not supported, only 16-bit stereo audio is supported, 416*4882a593Smuzhiyun * etc. 417*4882a593Smuzhiyun */ 418*4882a593Smuzhiyun 419*4882a593Smuzhiyun enum tegra30_ahub_txcif { 420*4882a593Smuzhiyun TEGRA30_AHUB_TXCIF_APBIF_TX0, 421*4882a593Smuzhiyun TEGRA30_AHUB_TXCIF_APBIF_TX1, 422*4882a593Smuzhiyun TEGRA30_AHUB_TXCIF_APBIF_TX2, 423*4882a593Smuzhiyun TEGRA30_AHUB_TXCIF_APBIF_TX3, 424*4882a593Smuzhiyun TEGRA30_AHUB_TXCIF_I2S0_TX0, 425*4882a593Smuzhiyun TEGRA30_AHUB_TXCIF_I2S1_TX0, 426*4882a593Smuzhiyun TEGRA30_AHUB_TXCIF_I2S2_TX0, 427*4882a593Smuzhiyun TEGRA30_AHUB_TXCIF_I2S3_TX0, 428*4882a593Smuzhiyun TEGRA30_AHUB_TXCIF_I2S4_TX0, 429*4882a593Smuzhiyun TEGRA30_AHUB_TXCIF_DAM0_TX0, 430*4882a593Smuzhiyun TEGRA30_AHUB_TXCIF_DAM1_TX0, 431*4882a593Smuzhiyun TEGRA30_AHUB_TXCIF_DAM2_TX0, 432*4882a593Smuzhiyun TEGRA30_AHUB_TXCIF_SPDIF_TX0, 433*4882a593Smuzhiyun TEGRA30_AHUB_TXCIF_SPDIF_TX1, 434*4882a593Smuzhiyun }; 435*4882a593Smuzhiyun 436*4882a593Smuzhiyun enum tegra30_ahub_rxcif { 437*4882a593Smuzhiyun TEGRA30_AHUB_RXCIF_APBIF_RX0, 438*4882a593Smuzhiyun TEGRA30_AHUB_RXCIF_APBIF_RX1, 439*4882a593Smuzhiyun TEGRA30_AHUB_RXcIF_APBIF_RX2, 440*4882a593Smuzhiyun TEGRA30_AHUB_RXCIF_APBIF_RX3, 441*4882a593Smuzhiyun TEGRA30_AHUB_RXCIF_I2S0_RX0, 442*4882a593Smuzhiyun TEGRA30_AHUB_RXCIF_I2S1_RX0, 443*4882a593Smuzhiyun TEGRA30_AHUB_RXCIF_I2S2_RX0, 444*4882a593Smuzhiyun TEGRA30_AHUB_RXCIF_I2S3_RX0, 445*4882a593Smuzhiyun TEGRA30_AHUB_RXCIF_I2S4_RX0, 446*4882a593Smuzhiyun TEGRA30_AHUB_RXCIF_DAM0_RX0, 447*4882a593Smuzhiyun TEGRA30_AHUB_RXCIF_DAM0_RX1, 448*4882a593Smuzhiyun TEGRA30_AHUB_RXCIF_DAM1_RX0, 449*4882a593Smuzhiyun TEGRA30_AHUB_RXCIF_DAM2_RX1, 450*4882a593Smuzhiyun TEGRA30_AHUB_RXCIF_DAM3_RX0, 451*4882a593Smuzhiyun TEGRA30_AHUB_RXCIF_DAM3_RX1, 452*4882a593Smuzhiyun TEGRA30_AHUB_RXCIF_SPDIF_RX0, 453*4882a593Smuzhiyun TEGRA30_AHUB_RXCIF_SPDIF_RX1, 454*4882a593Smuzhiyun }; 455*4882a593Smuzhiyun 456*4882a593Smuzhiyun extern int tegra30_ahub_allocate_rx_fifo(enum tegra30_ahub_rxcif *rxcif, 457*4882a593Smuzhiyun char *dmachan, int dmachan_len, 458*4882a593Smuzhiyun dma_addr_t *fiforeg); 459*4882a593Smuzhiyun extern int tegra30_ahub_enable_rx_fifo(enum tegra30_ahub_rxcif rxcif); 460*4882a593Smuzhiyun extern int tegra30_ahub_disable_rx_fifo(enum tegra30_ahub_rxcif rxcif); 461*4882a593Smuzhiyun extern int tegra30_ahub_free_rx_fifo(enum tegra30_ahub_rxcif rxcif); 462*4882a593Smuzhiyun 463*4882a593Smuzhiyun extern int tegra30_ahub_allocate_tx_fifo(enum tegra30_ahub_txcif *txcif, 464*4882a593Smuzhiyun char *dmachan, int dmachan_len, 465*4882a593Smuzhiyun dma_addr_t *fiforeg); 466*4882a593Smuzhiyun extern int tegra30_ahub_enable_tx_fifo(enum tegra30_ahub_txcif txcif); 467*4882a593Smuzhiyun extern int tegra30_ahub_disable_tx_fifo(enum tegra30_ahub_txcif txcif); 468*4882a593Smuzhiyun extern int tegra30_ahub_free_tx_fifo(enum tegra30_ahub_txcif txcif); 469*4882a593Smuzhiyun 470*4882a593Smuzhiyun extern int tegra30_ahub_set_rx_cif_source(enum tegra30_ahub_rxcif rxcif, 471*4882a593Smuzhiyun enum tegra30_ahub_txcif txcif); 472*4882a593Smuzhiyun extern int tegra30_ahub_unset_rx_cif_source(enum tegra30_ahub_rxcif rxcif); 473*4882a593Smuzhiyun 474*4882a593Smuzhiyun struct tegra30_ahub_cif_conf { 475*4882a593Smuzhiyun unsigned int threshold; 476*4882a593Smuzhiyun unsigned int audio_channels; 477*4882a593Smuzhiyun unsigned int client_channels; 478*4882a593Smuzhiyun unsigned int audio_bits; 479*4882a593Smuzhiyun unsigned int client_bits; 480*4882a593Smuzhiyun unsigned int expand; 481*4882a593Smuzhiyun unsigned int stereo_conv; 482*4882a593Smuzhiyun unsigned int replicate; 483*4882a593Smuzhiyun unsigned int direction; 484*4882a593Smuzhiyun unsigned int truncate; 485*4882a593Smuzhiyun unsigned int mono_conv; 486*4882a593Smuzhiyun }; 487*4882a593Smuzhiyun 488*4882a593Smuzhiyun void tegra30_ahub_set_cif(struct regmap *regmap, unsigned int reg, 489*4882a593Smuzhiyun struct tegra30_ahub_cif_conf *conf); 490*4882a593Smuzhiyun void tegra124_ahub_set_cif(struct regmap *regmap, unsigned int reg, 491*4882a593Smuzhiyun struct tegra30_ahub_cif_conf *conf); 492*4882a593Smuzhiyun 493*4882a593Smuzhiyun struct tegra30_ahub_soc_data { 494*4882a593Smuzhiyun u32 mod_list_mask; 495*4882a593Smuzhiyun void (*set_audio_cif)(struct regmap *regmap, 496*4882a593Smuzhiyun unsigned int reg, 497*4882a593Smuzhiyun struct tegra30_ahub_cif_conf *conf); 498*4882a593Smuzhiyun /* 499*4882a593Smuzhiyun * FIXME: There are many more differences in HW, such as: 500*4882a593Smuzhiyun * - More APBIF channels. 501*4882a593Smuzhiyun * - Extra separate chunks of register address space to represent 502*4882a593Smuzhiyun * the extra APBIF channels. 503*4882a593Smuzhiyun * - More units connected to the AHUB, so that tegra30_ahub_[rt]xcif 504*4882a593Smuzhiyun * need expansion, coupled with there being more defined bits in 505*4882a593Smuzhiyun * the AHUB routing registers. 506*4882a593Smuzhiyun * However, the driver doesn't support those new features yet, so we 507*4882a593Smuzhiyun * don't represent them here yet. 508*4882a593Smuzhiyun */ 509*4882a593Smuzhiyun }; 510*4882a593Smuzhiyun 511*4882a593Smuzhiyun struct tegra30_ahub { 512*4882a593Smuzhiyun const struct tegra30_ahub_soc_data *soc_data; 513*4882a593Smuzhiyun struct device *dev; 514*4882a593Smuzhiyun struct clk *clk_d_audio; 515*4882a593Smuzhiyun struct clk *clk_apbif; 516*4882a593Smuzhiyun resource_size_t apbif_addr; 517*4882a593Smuzhiyun struct regmap *regmap_apbif; 518*4882a593Smuzhiyun struct regmap *regmap_ahub; 519*4882a593Smuzhiyun DECLARE_BITMAP(rx_usage, TEGRA30_AHUB_CHANNEL_CTRL_COUNT); 520*4882a593Smuzhiyun DECLARE_BITMAP(tx_usage, TEGRA30_AHUB_CHANNEL_CTRL_COUNT); 521*4882a593Smuzhiyun }; 522*4882a593Smuzhiyun 523*4882a593Smuzhiyun #endif 524