Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * tegra30_ahub.h - Definitions for Tegra30 AHUB driver
0004  *
0005  * Copyright (c) 2011,2012, NVIDIA CORPORATION.  All rights reserved.
0006  */
0007 
0008 #ifndef __TEGRA30_AHUB_H__
0009 #define __TEGRA30_AHUB_H__
0010 
0011 /* Fields in *_CIF_RX/TX_CTRL; used by AHUB FIFOs, and all other audio modules */
0012 
0013 #define TEGRA30_AUDIOCIF_CTRL_FIFO_THRESHOLD_SHIFT  28
0014 #define TEGRA30_AUDIOCIF_CTRL_FIFO_THRESHOLD_MASK_US    0xf
0015 #define TEGRA30_AUDIOCIF_CTRL_FIFO_THRESHOLD_MASK   (TEGRA30_AUDIOCIF_CTRL_FIFO_THRESHOLD_MASK_US << TEGRA30_AUDIOCIF_CTRL_FIFO_THRESHOLD_SHIFT)
0016 
0017 #define TEGRA124_AUDIOCIF_CTRL_FIFO_THRESHOLD_SHIFT 24
0018 #define TEGRA124_AUDIOCIF_CTRL_FIFO_THRESHOLD_MASK_US   0x3f
0019 #define TEGRA124_AUDIOCIF_CTRL_FIFO_THRESHOLD_MASK  (TEGRA124_AUDIOCIF_CTRL_FIFO_THRESHOLD_MASK_US << TEGRA124_AUDIOCIF_CTRL_FIFO_THRESHOLD_SHIFT)
0020 
0021 /* Channel count minus 1 */
0022 #define TEGRA30_AUDIOCIF_CTRL_AUDIO_CHANNELS_SHIFT  24
0023 #define TEGRA30_AUDIOCIF_CTRL_AUDIO_CHANNELS_MASK_US    7
0024 #define TEGRA30_AUDIOCIF_CTRL_AUDIO_CHANNELS_MASK   (TEGRA30_AUDIOCIF_CTRL_AUDIO_CHANNELS_MASK_US << TEGRA30_AUDIOCIF_CTRL_AUDIO_CHANNELS_SHIFT)
0025 
0026 /* Channel count minus 1 */
0027 #define TEGRA124_AUDIOCIF_CTRL_AUDIO_CHANNELS_SHIFT 20
0028 #define TEGRA124_AUDIOCIF_CTRL_AUDIO_CHANNELS_MASK_US   0xf
0029 #define TEGRA124_AUDIOCIF_CTRL_AUDIO_CHANNELS_MASK  (TEGRA124_AUDIOCIF_CTRL_AUDIO_CHANNELS_MASK_US << TEGRA124_AUDIOCIF_CTRL_AUDIO_CHANNELS_SHIFT)
0030 
0031 /* Channel count minus 1 */
0032 #define TEGRA30_AUDIOCIF_CTRL_CLIENT_CHANNELS_SHIFT 16
0033 #define TEGRA30_AUDIOCIF_CTRL_CLIENT_CHANNELS_MASK_US   7
0034 #define TEGRA30_AUDIOCIF_CTRL_CLIENT_CHANNELS_MASK  (TEGRA30_AUDIOCIF_CTRL_CLIENT_CHANNELS_MASK_US << TEGRA30_AUDIOCIF_CTRL_CLIENT_CHANNELS_SHIFT)
0035 
0036 /* Channel count minus 1 */
0037 #define TEGRA124_AUDIOCIF_CTRL_CLIENT_CHANNELS_SHIFT    16
0038 #define TEGRA124_AUDIOCIF_CTRL_CLIENT_CHANNELS_MASK_US  0xf
0039 #define TEGRA124_AUDIOCIF_CTRL_CLIENT_CHANNELS_MASK (TEGRA30_AUDIOCIF_CTRL_CLIENT_CHANNELS_MASK_US << TEGRA30_AUDIOCIF_CTRL_CLIENT_CHANNELS_SHIFT)
0040 
0041 #define TEGRA30_AUDIOCIF_BITS_4             0
0042 #define TEGRA30_AUDIOCIF_BITS_8             1
0043 #define TEGRA30_AUDIOCIF_BITS_12            2
0044 #define TEGRA30_AUDIOCIF_BITS_16            3
0045 #define TEGRA30_AUDIOCIF_BITS_20            4
0046 #define TEGRA30_AUDIOCIF_BITS_24            5
0047 #define TEGRA30_AUDIOCIF_BITS_28            6
0048 #define TEGRA30_AUDIOCIF_BITS_32            7
0049 
0050 #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT      12
0051 #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_MASK       (7                        << TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT)
0052 #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_4      (TEGRA30_AUDIOCIF_BITS_4  << TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT)
0053 #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_8      (TEGRA30_AUDIOCIF_BITS_8  << TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT)
0054 #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_12     (TEGRA30_AUDIOCIF_BITS_12 << TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT)
0055 #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_16     (TEGRA30_AUDIOCIF_BITS_16 << TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT)
0056 #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_20     (TEGRA30_AUDIOCIF_BITS_20 << TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT)
0057 #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_24     (TEGRA30_AUDIOCIF_BITS_24 << TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT)
0058 #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_28     (TEGRA30_AUDIOCIF_BITS_28 << TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT)
0059 #define TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_32     (TEGRA30_AUDIOCIF_BITS_32 << TEGRA30_AUDIOCIF_CTRL_AUDIO_BITS_SHIFT)
0060 
0061 #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT     8
0062 #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_MASK      (7                        << TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT)
0063 #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_4     (TEGRA30_AUDIOCIF_BITS_4  << TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT)
0064 #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_8     (TEGRA30_AUDIOCIF_BITS_8  << TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT)
0065 #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_12        (TEGRA30_AUDIOCIF_BITS_12 << TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT)
0066 #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_16        (TEGRA30_AUDIOCIF_BITS_16 << TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT)
0067 #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_20        (TEGRA30_AUDIOCIF_BITS_20 << TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT)
0068 #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_24        (TEGRA30_AUDIOCIF_BITS_24 << TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT)
0069 #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_28        (TEGRA30_AUDIOCIF_BITS_28 << TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT)
0070 #define TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_32        (TEGRA30_AUDIOCIF_BITS_32 << TEGRA30_AUDIOCIF_CTRL_CLIENT_BITS_SHIFT)
0071 
0072 #define TEGRA30_AUDIOCIF_EXPAND_ZERO            0
0073 #define TEGRA30_AUDIOCIF_EXPAND_ONE         1
0074 #define TEGRA30_AUDIOCIF_EXPAND_LFSR            2
0075 
0076 #define TEGRA30_AUDIOCIF_CTRL_EXPAND_SHIFT      6
0077 #define TEGRA30_AUDIOCIF_CTRL_EXPAND_MASK       (3                            << TEGRA30_AUDIOCIF_CTRL_EXPAND_SHIFT)
0078 #define TEGRA30_AUDIOCIF_CTRL_EXPAND_ZERO       (TEGRA30_AUDIOCIF_EXPAND_ZERO << TEGRA30_AUDIOCIF_CTRL_EXPAND_SHIFT)
0079 #define TEGRA30_AUDIOCIF_CTRL_EXPAND_ONE        (TEGRA30_AUDIOCIF_EXPAND_ONE  << TEGRA30_AUDIOCIF_CTRL_EXPAND_SHIFT)
0080 #define TEGRA30_AUDIOCIF_CTRL_EXPAND_LFSR       (TEGRA30_AUDIOCIF_EXPAND_LFSR << TEGRA30_AUDIOCIF_CTRL_EXPAND_SHIFT)
0081 
0082 #define TEGRA30_AUDIOCIF_STEREO_CONV_CH0        0
0083 #define TEGRA30_AUDIOCIF_STEREO_CONV_CH1        1
0084 #define TEGRA30_AUDIOCIF_STEREO_CONV_AVG        2
0085 
0086 #define TEGRA30_AUDIOCIF_CTRL_STEREO_CONV_SHIFT     4
0087 #define TEGRA30_AUDIOCIF_CTRL_STEREO_CONV_MASK      (3                                << TEGRA30_AUDIOCIF_CTRL_STEREO_CONV_SHIFT)
0088 #define TEGRA30_AUDIOCIF_CTRL_STEREO_CONV_CH0       (TEGRA30_AUDIOCIF_STEREO_CONV_CH0 << TEGRA30_AUDIOCIF_CTRL_STEREO_CONV_SHIFT)
0089 #define TEGRA30_AUDIOCIF_CTRL_STEREO_CONV_CH1       (TEGRA30_AUDIOCIF_STEREO_CONV_CH1 << TEGRA30_AUDIOCIF_CTRL_STEREO_CONV_SHIFT)
0090 #define TEGRA30_AUDIOCIF_CTRL_STEREO_CONV_AVG       (TEGRA30_AUDIOCIF_STEREO_CONV_AVG << TEGRA30_AUDIOCIF_CTRL_STEREO_CONV_SHIFT)
0091 
0092 #define TEGRA30_AUDIOCIF_CTRL_REPLICATE_SHIFT       3
0093 
0094 #define TEGRA30_AUDIOCIF_DIRECTION_TX           0
0095 #define TEGRA30_AUDIOCIF_DIRECTION_RX           1
0096 
0097 #define TEGRA30_AUDIOCIF_CTRL_DIRECTION_SHIFT       2
0098 #define TEGRA30_AUDIOCIF_CTRL_DIRECTION_MASK        (1                             << TEGRA30_AUDIOCIF_CTRL_DIRECTION_SHIFT)
0099 #define TEGRA30_AUDIOCIF_CTRL_DIRECTION_TX      (TEGRA30_AUDIOCIF_DIRECTION_TX << TEGRA30_AUDIOCIF_CTRL_DIRECTION_SHIFT)
0100 #define TEGRA30_AUDIOCIF_CTRL_DIRECTION_RX      (TEGRA30_AUDIOCIF_DIRECTION_RX << TEGRA30_AUDIOCIF_CTRL_DIRECTION_SHIFT)
0101 
0102 #define TEGRA30_AUDIOCIF_TRUNCATE_ROUND         0
0103 #define TEGRA30_AUDIOCIF_TRUNCATE_CHOP          1
0104 
0105 #define TEGRA30_AUDIOCIF_CTRL_TRUNCATE_SHIFT        1
0106 #define TEGRA30_AUDIOCIF_CTRL_TRUNCATE_MASK     (1                               << TEGRA30_AUDIOCIF_CTRL_TRUNCATE_SHIFT)
0107 #define TEGRA30_AUDIOCIF_CTRL_TRUNCATE_ROUND        (TEGRA30_AUDIOCIF_TRUNCATE_ROUND << TEGRA30_AUDIOCIF_CTRL_TRUNCATE_SHIFT)
0108 #define TEGRA30_AUDIOCIF_CTRL_TRUNCATE_CHOP     (TEGRA30_AUDIOCIF_TRUNCATE_CHOP  << TEGRA30_AUDIOCIF_CTRL_TRUNCATE_SHIFT)
0109 
0110 #define TEGRA30_AUDIOCIF_MONO_CONV_ZERO         0
0111 #define TEGRA30_AUDIOCIF_MONO_CONV_COPY         1
0112 
0113 #define TEGRA30_AUDIOCIF_CTRL_MONO_CONV_SHIFT       0
0114 #define TEGRA30_AUDIOCIF_CTRL_MONO_CONV_MASK        (1                               << TEGRA30_AUDIOCIF_CTRL_MONO_CONV_SHIFT)
0115 #define TEGRA30_AUDIOCIF_CTRL_MONO_CONV_ZERO        (TEGRA30_AUDIOCIF_MONO_CONV_ZERO << TEGRA30_AUDIOCIF_CTRL_MONO_CONV_SHIFT)
0116 #define TEGRA30_AUDIOCIF_CTRL_MONO_CONV_COPY        (TEGRA30_AUDIOCIF_MONO_CONV_COPY << TEGRA30_AUDIOCIF_CTRL_MONO_CONV_SHIFT)
0117 
0118 /* Registers within TEGRA30_AUDIO_CLUSTER_BASE */
0119 
0120 /* TEGRA30_AHUB_CHANNEL_CTRL */
0121 
0122 #define TEGRA30_AHUB_CHANNEL_CTRL           0x0
0123 #define TEGRA30_AHUB_CHANNEL_CTRL_STRIDE        0x20
0124 #define TEGRA30_AHUB_CHANNEL_CTRL_COUNT         4
0125 #define TEGRA30_AHUB_CHANNEL_CTRL_TX_EN         (1 << 31)
0126 #define TEGRA30_AHUB_CHANNEL_CTRL_RX_EN         (1 << 30)
0127 #define TEGRA30_AHUB_CHANNEL_CTRL_LOOPBACK      (1 << 29)
0128 
0129 #define TEGRA30_AHUB_CHANNEL_CTRL_TX_THRESHOLD_SHIFT    16
0130 #define TEGRA30_AHUB_CHANNEL_CTRL_TX_THRESHOLD_MASK_US  0xff
0131 #define TEGRA30_AHUB_CHANNEL_CTRL_TX_THRESHOLD_MASK (TEGRA30_AHUB_CHANNEL_CTRL_TX_THRESHOLD_MASK_US << TEGRA30_AHUB_CHANNEL_CTRL_TX_THRESHOLD_SHIFT)
0132 
0133 #define TEGRA30_AHUB_CHANNEL_CTRL_RX_THRESHOLD_SHIFT    8
0134 #define TEGRA30_AHUB_CHANNEL_CTRL_RX_THRESHOLD_MASK_US  0xff
0135 #define TEGRA30_AHUB_CHANNEL_CTRL_RX_THRESHOLD_MASK (TEGRA30_AHUB_CHANNEL_CTRL_RX_THRESHOLD_MASK_US << TEGRA30_AHUB_CHANNEL_CTRL_RX_THRESHOLD_SHIFT)
0136 
0137 #define TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_EN        (1 << 6)
0138 
0139 #define TEGRA30_PACK_8_4                2
0140 #define TEGRA30_PACK_16                 3
0141 
0142 #define TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_SHIFT     4
0143 #define TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_MASK_US   3
0144 #define TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_MASK      (TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_MASK_US << TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_SHIFT)
0145 #define TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_8_4       (TEGRA30_PACK_8_4                          << TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_SHIFT)
0146 #define TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_16        (TEGRA30_PACK_16                           << TEGRA30_AHUB_CHANNEL_CTRL_TX_PACK_SHIFT)
0147 
0148 #define TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_EN        (1 << 2)
0149 
0150 #define TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_SHIFT     0
0151 #define TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_MASK_US   3
0152 #define TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_MASK      (TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_MASK_US << TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_SHIFT)
0153 #define TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_8_4       (TEGRA30_PACK_8_4                          << TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_SHIFT)
0154 #define TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_16        (TEGRA30_PACK_16                           << TEGRA30_AHUB_CHANNEL_CTRL_RX_PACK_SHIFT)
0155 
0156 /* TEGRA30_AHUB_CHANNEL_CLEAR */
0157 
0158 #define TEGRA30_AHUB_CHANNEL_CLEAR          0x4
0159 #define TEGRA30_AHUB_CHANNEL_CLEAR_STRIDE       0x20
0160 #define TEGRA30_AHUB_CHANNEL_CLEAR_COUNT        4
0161 #define TEGRA30_AHUB_CHANNEL_CLEAR_TX_SOFT_RESET    (1 << 31)
0162 #define TEGRA30_AHUB_CHANNEL_CLEAR_RX_SOFT_RESET    (1 << 30)
0163 
0164 /* TEGRA30_AHUB_CHANNEL_STATUS */
0165 
0166 #define TEGRA30_AHUB_CHANNEL_STATUS         0x8
0167 #define TEGRA30_AHUB_CHANNEL_STATUS_STRIDE      0x20
0168 #define TEGRA30_AHUB_CHANNEL_STATUS_COUNT       4
0169 #define TEGRA30_AHUB_CHANNEL_STATUS_TX_FREE_SHIFT   24
0170 #define TEGRA30_AHUB_CHANNEL_STATUS_TX_FREE_MASK_US 0xff
0171 #define TEGRA30_AHUB_CHANNEL_STATUS_TX_FREE_MASK    (TEGRA30_AHUB_CHANNEL_STATUS_TX_FREE_MASK_US << TEGRA30_AHUB_CHANNEL_STATUS_TX_FREE_SHIFT)
0172 #define TEGRA30_AHUB_CHANNEL_STATUS_RX_FREE_SHIFT   16
0173 #define TEGRA30_AHUB_CHANNEL_STATUS_RX_FREE_MASK_US 0xff
0174 #define TEGRA30_AHUB_CHANNEL_STATUS_RX_FREE_MASK    (TEGRA30_AHUB_CHANNEL_STATUS_RX_FREE_MASK_US << TEGRA30_AHUB_CHANNEL_STATUS_RX_FREE_SHIFT)
0175 #define TEGRA30_AHUB_CHANNEL_STATUS_TX_TRIG     (1 << 1)
0176 #define TEGRA30_AHUB_CHANNEL_STATUS_RX_TRIG     (1 << 0)
0177 
0178 /* TEGRA30_AHUB_CHANNEL_TXFIFO */
0179 
0180 #define TEGRA30_AHUB_CHANNEL_TXFIFO         0xc
0181 #define TEGRA30_AHUB_CHANNEL_TXFIFO_STRIDE      0x20
0182 #define TEGRA30_AHUB_CHANNEL_TXFIFO_COUNT       4
0183 
0184 /* TEGRA30_AHUB_CHANNEL_RXFIFO */
0185 
0186 #define TEGRA30_AHUB_CHANNEL_RXFIFO         0x10
0187 #define TEGRA30_AHUB_CHANNEL_RXFIFO_STRIDE      0x20
0188 #define TEGRA30_AHUB_CHANNEL_RXFIFO_COUNT       4
0189 
0190 /* TEGRA30_AHUB_CIF_TX_CTRL */
0191 
0192 #define TEGRA30_AHUB_CIF_TX_CTRL            0x14
0193 #define TEGRA30_AHUB_CIF_TX_CTRL_STRIDE         0x20
0194 #define TEGRA30_AHUB_CIF_TX_CTRL_COUNT          4
0195 /* Uses field from TEGRA30_AUDIOCIF_CTRL_* */
0196 
0197 /* TEGRA30_AHUB_CIF_RX_CTRL */
0198 
0199 #define TEGRA30_AHUB_CIF_RX_CTRL            0x18
0200 #define TEGRA30_AHUB_CIF_RX_CTRL_STRIDE         0x20
0201 #define TEGRA30_AHUB_CIF_RX_CTRL_COUNT          4
0202 /* Uses field from TEGRA30_AUDIOCIF_CTRL_* */
0203 
0204 /* TEGRA30_AHUB_CONFIG_LINK_CTRL */
0205 
0206 #define TEGRA30_AHUB_CONFIG_LINK_CTRL                   0x80
0207 #define TEGRA30_AHUB_CONFIG_LINK_CTRL_MASTER_FIFO_FULL_CNT_SHIFT    28
0208 #define TEGRA30_AHUB_CONFIG_LINK_CTRL_MASTER_FIFO_FULL_CNT_MASK_US  0xf
0209 #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)
0210 #define TEGRA30_AHUB_CONFIG_LINK_CTRL_TIMEOUT_CNT_SHIFT         16
0211 #define TEGRA30_AHUB_CONFIG_LINK_CTRL_TIMEOUT_CNT_MASK_US       0xfff
0212 #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)
0213 #define TEGRA30_AHUB_CONFIG_LINK_CTRL_IDLE_CNT_SHIFT            4
0214 #define TEGRA30_AHUB_CONFIG_LINK_CTRL_IDLE_CNT_MASK_US          0xfff
0215 #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)
0216 #define TEGRA30_AHUB_CONFIG_LINK_CTRL_CG_EN             (1 << 2)
0217 #define TEGRA30_AHUB_CONFIG_LINK_CTRL_CLEAR_TIMEOUT_CNTR        (1 << 1)
0218 #define TEGRA30_AHUB_CONFIG_LINK_CTRL_SOFT_RESET            (1 << 0)
0219 
0220 /* TEGRA30_AHUB_MISC_CTRL */
0221 
0222 #define TEGRA30_AHUB_MISC_CTRL              0x84
0223 #define TEGRA30_AHUB_MISC_CTRL_AUDIO_ACTIVE     (1 << 31)
0224 #define TEGRA30_AHUB_MISC_CTRL_AUDIO_CG_EN      (1 << 8)
0225 #define TEGRA30_AHUB_MISC_CTRL_AUDIO_OBS_SEL_SHIFT  0
0226 #define TEGRA30_AHUB_MISC_CTRL_AUDIO_OBS_SEL_MASK   (0x1f << TEGRA30_AHUB_MISC_CTRL_AUDIO_OBS_SEL_SHIFT)
0227 
0228 /* TEGRA30_AHUB_APBDMA_LIVE_STATUS */
0229 
0230 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS             0x88
0231 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH3_RX_CIF_FIFO_FULL    (1 << 31)
0232 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH3_TX_CIF_FIFO_FULL    (1 << 30)
0233 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH2_RX_CIF_FIFO_FULL    (1 << 29)
0234 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH2_TX_CIF_FIFO_FULL    (1 << 28)
0235 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH1_RX_CIF_FIFO_FULL    (1 << 27)
0236 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH1_TX_CIF_FIFO_FULL    (1 << 26)
0237 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH0_RX_CIF_FIFO_FULL    (1 << 25)
0238 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH0_TX_CIF_FIFO_FULL    (1 << 24)
0239 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH3_RX_CIF_FIFO_EMPTY   (1 << 23)
0240 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH3_TX_CIF_FIFO_EMPTY   (1 << 22)
0241 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH2_RX_CIF_FIFO_EMPTY   (1 << 21)
0242 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH2_TX_CIF_FIFO_EMPTY   (1 << 20)
0243 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH1_RX_CIF_FIFO_EMPTY   (1 << 19)
0244 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH1_TX_CIF_FIFO_EMPTY   (1 << 18)
0245 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH0_RX_CIF_FIFO_EMPTY   (1 << 17)
0246 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH0_TX_CIF_FIFO_EMPTY   (1 << 16)
0247 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH3_RX_DMA_FIFO_FULL    (1 << 15)
0248 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH3_TX_DMA_FIFO_FULL    (1 << 14)
0249 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH2_RX_DMA_FIFO_FULL    (1 << 13)
0250 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH2_TX_DMA_FIFO_FULL    (1 << 12)
0251 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH1_RX_DMA_FIFO_FULL    (1 << 11)
0252 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH1_TX_DMA_FIFO_FULL    (1 << 10)
0253 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH0_RX_DMA_FIFO_FULL    (1 << 9)
0254 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH0_TX_DMA_FIFO_FULL    (1 << 8)
0255 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH3_RX_DMA_FIFO_EMPTY   (1 << 7)
0256 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH3_TX_DMA_FIFO_EMPTY   (1 << 6)
0257 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH2_RX_DMA_FIFO_EMPTY   (1 << 5)
0258 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH2_TX_DMA_FIFO_EMPTY   (1 << 4)
0259 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH1_RX_DMA_FIFO_EMPTY   (1 << 3)
0260 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH1_TX_DMA_FIFO_EMPTY   (1 << 2)
0261 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH0_RX_DMA_FIFO_EMPTY   (1 << 1)
0262 #define TEGRA30_AHUB_APBDMA_LIVE_STATUS_CH0_TX_DMA_FIFO_EMPTY   (1 << 0)
0263 
0264 /* TEGRA30_AHUB_I2S_LIVE_STATUS */
0265 
0266 #define TEGRA30_AHUB_I2S_LIVE_STATUS                0x8c
0267 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S4_RX_FIFO_FULL      (1 << 29)
0268 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S4_TX_FIFO_FULL      (1 << 28)
0269 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S3_RX_FIFO_FULL      (1 << 27)
0270 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S3_TX_FIFO_FULL      (1 << 26)
0271 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S2_RX_FIFO_FULL      (1 << 25)
0272 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S2_TX_FIFO_FULL      (1 << 24)
0273 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S1_RX_FIFO_FULL      (1 << 23)
0274 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S1_TX_FIFO_FULL      (1 << 22)
0275 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S0_RX_FIFO_FULL      (1 << 21)
0276 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S0_TX_FIFO_FULL      (1 << 20)
0277 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S4_RX_FIFO_ENABLED   (1 << 19)
0278 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S4_TX_FIFO_ENABLED   (1 << 18)
0279 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S3_RX_FIFO_ENABLED   (1 << 17)
0280 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S3_TX_FIFO_ENABLED   (1 << 16)
0281 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S2_RX_FIFO_ENABLED   (1 << 15)
0282 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S2_TX_FIFO_ENABLED   (1 << 14)
0283 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S1_RX_FIFO_ENABLED   (1 << 13)
0284 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S1_TX_FIFO_ENABLED   (1 << 12)
0285 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S0_RX_FIFO_ENABLED   (1 << 11)
0286 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S0_TX_FIFO_ENABLED   (1 << 10)
0287 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S4_RX_FIFO_EMPTY     (1 << 9)
0288 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S4_TX_FIFO_EMPTY     (1 << 8)
0289 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S3_RX_FIFO_EMPTY     (1 << 7)
0290 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S3_TX_FIFO_EMPTY     (1 << 6)
0291 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S2_RX_FIFO_EMPTY     (1 << 5)
0292 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S2_TX_FIFO_EMPTY     (1 << 4)
0293 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S1_RX_FIFO_EMPTY     (1 << 3)
0294 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S1_TX_FIFO_EMPTY     (1 << 2)
0295 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S0_RX_FIFO_EMPTY     (1 << 1)
0296 #define TEGRA30_AHUB_I2S_LIVE_STATUS_I2S0_TX_FIFO_EMPTY     (1 << 0)
0297 
0298 /* TEGRA30_AHUB_DAM0_LIVE_STATUS */
0299 
0300 #define TEGRA30_AHUB_DAM_LIVE_STATUS                0x90
0301 #define TEGRA30_AHUB_DAM_LIVE_STATUS_STRIDE         0x8
0302 #define TEGRA30_AHUB_DAM_LIVE_STATUS_COUNT          3
0303 #define TEGRA30_AHUB_DAM_LIVE_STATUS_TX_ENABLED         (1 << 26)
0304 #define TEGRA30_AHUB_DAM_LIVE_STATUS_RX1_ENABLED        (1 << 25)
0305 #define TEGRA30_AHUB_DAM_LIVE_STATUS_RX0_ENABLED        (1 << 24)
0306 #define TEGRA30_AHUB_DAM_LIVE_STATUS_TXFIFO_FULL        (1 << 15)
0307 #define TEGRA30_AHUB_DAM_LIVE_STATUS_RX1FIFO_FULL       (1 << 9)
0308 #define TEGRA30_AHUB_DAM_LIVE_STATUS_RX0FIFO_FULL       (1 << 8)
0309 #define TEGRA30_AHUB_DAM_LIVE_STATUS_TXFIFO_EMPTY       (1 << 7)
0310 #define TEGRA30_AHUB_DAM_LIVE_STATUS_RX1FIFO_EMPTY      (1 << 1)
0311 #define TEGRA30_AHUB_DAM_LIVE_STATUS_RX0FIFO_EMPTY      (1 << 0)
0312 
0313 /* TEGRA30_AHUB_SPDIF_LIVE_STATUS */
0314 
0315 #define TEGRA30_AHUB_SPDIF_LIVE_STATUS              0xa8
0316 #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_USER_TX_ENABLED      (1 << 11)
0317 #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_USER_RX_ENABLED      (1 << 10)
0318 #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_DATA_TX_ENABLED      (1 << 9)
0319 #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_DATA_RX_ENABLED      (1 << 8)
0320 #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_USER_TXFIFO_FULL     (1 << 7)
0321 #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_USER_RXFIFO_FULL     (1 << 6)
0322 #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_DATA_TXFIFO_FULL     (1 << 5)
0323 #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_DATA_RXFIFO_FULL     (1 << 4)
0324 #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_USER_TXFIFO_EMPTY    (1 << 3)
0325 #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_USER_RXFIFO_EMPTY    (1 << 2)
0326 #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_DATA_TXFIFO_EMPTY    (1 << 1)
0327 #define TEGRA30_AHUB_SPDIF_LIVE_STATUS_DATA_RXFIFO_EMPTY    (1 << 0)
0328 
0329 /* TEGRA30_AHUB_I2S_INT_MASK */
0330 
0331 #define TEGRA30_AHUB_I2S_INT_MASK               0xb0
0332 
0333 /* TEGRA30_AHUB_DAM_INT_MASK */
0334 
0335 #define TEGRA30_AHUB_DAM_INT_MASK               0xb4
0336 
0337 /* TEGRA30_AHUB_SPDIF_INT_MASK */
0338 
0339 #define TEGRA30_AHUB_SPDIF_INT_MASK             0xbc
0340 
0341 /* TEGRA30_AHUB_APBIF_INT_MASK */
0342 
0343 #define TEGRA30_AHUB_APBIF_INT_MASK             0xc0
0344 
0345 /* TEGRA30_AHUB_I2S_INT_STATUS */
0346 
0347 #define TEGRA30_AHUB_I2S_INT_STATUS             0xc8
0348 
0349 /* TEGRA30_AHUB_DAM_INT_STATUS */
0350 
0351 #define TEGRA30_AHUB_DAM_INT_STATUS             0xcc
0352 
0353 /* TEGRA30_AHUB_SPDIF_INT_STATUS */
0354 
0355 #define TEGRA30_AHUB_SPDIF_INT_STATUS               0xd4
0356 
0357 /* TEGRA30_AHUB_APBIF_INT_STATUS */
0358 
0359 #define TEGRA30_AHUB_APBIF_INT_STATUS               0xd8
0360 
0361 /* TEGRA30_AHUB_I2S_INT_SOURCE */
0362 
0363 #define TEGRA30_AHUB_I2S_INT_SOURCE             0xe0
0364 
0365 /* TEGRA30_AHUB_DAM_INT_SOURCE */
0366 
0367 #define TEGRA30_AHUB_DAM_INT_SOURCE             0xe4
0368 
0369 /* TEGRA30_AHUB_SPDIF_INT_SOURCE */
0370 
0371 #define TEGRA30_AHUB_SPDIF_INT_SOURCE               0xec
0372 
0373 /* TEGRA30_AHUB_APBIF_INT_SOURCE */
0374 
0375 #define TEGRA30_AHUB_APBIF_INT_SOURCE               0xf0
0376 
0377 /* TEGRA30_AHUB_I2S_INT_SET */
0378 
0379 #define TEGRA30_AHUB_I2S_INT_SET                0xf8
0380 
0381 /* TEGRA30_AHUB_DAM_INT_SET */
0382 
0383 #define TEGRA30_AHUB_DAM_INT_SET                0xfc
0384 
0385 /* TEGRA30_AHUB_SPDIF_INT_SET */
0386 
0387 #define TEGRA30_AHUB_SPDIF_INT_SET              0x100
0388 
0389 /* TEGRA30_AHUB_APBIF_INT_SET */
0390 
0391 #define TEGRA30_AHUB_APBIF_INT_SET              0x104
0392 
0393 /* Registers within TEGRA30_AHUB_BASE */
0394 
0395 #define TEGRA30_AHUB_AUDIO_RX                   0x0
0396 #define TEGRA30_AHUB_AUDIO_RX_STRIDE                0x4
0397 #define TEGRA30_AHUB_AUDIO_RX_COUNT             17
0398 /* This register repeats once for each entry in enum tegra30_ahub_rxcif */
0399 /* The fields in this register are 1 bit per entry in tegra30_ahub_txcif */
0400 
0401 /*
0402  * Terminology:
0403  * AHUB: Audio Hub; a cross-bar switch between the audio devices: DMA FIFOs,
0404  *       I2S controllers, SPDIF controllers, and DAMs.
0405  * XBAR: The core cross-bar component of the AHUB.
0406  * CIF:  Client Interface; the HW module connecting an audio device to the
0407  *       XBAR.
0408  * DAM:  Digital Audio Mixer: A HW module that mixes multiple audio streams,
0409  *       possibly including sample-rate conversion.
0410  *
0411  * Each TX CIF transmits data into the XBAR. Each RX CIF can receive audio
0412  * transmitted by a particular TX CIF.
0413  *
0414  * This driver is currently very simplistic; many HW features are not
0415  * exposed; DAMs are not supported, only 16-bit stereo audio is supported,
0416  * etc.
0417  */
0418 
0419 enum tegra30_ahub_txcif {
0420     TEGRA30_AHUB_TXCIF_APBIF_TX0,
0421     TEGRA30_AHUB_TXCIF_APBIF_TX1,
0422     TEGRA30_AHUB_TXCIF_APBIF_TX2,
0423     TEGRA30_AHUB_TXCIF_APBIF_TX3,
0424     TEGRA30_AHUB_TXCIF_I2S0_TX0,
0425     TEGRA30_AHUB_TXCIF_I2S1_TX0,
0426     TEGRA30_AHUB_TXCIF_I2S2_TX0,
0427     TEGRA30_AHUB_TXCIF_I2S3_TX0,
0428     TEGRA30_AHUB_TXCIF_I2S4_TX0,
0429     TEGRA30_AHUB_TXCIF_DAM0_TX0,
0430     TEGRA30_AHUB_TXCIF_DAM1_TX0,
0431     TEGRA30_AHUB_TXCIF_DAM2_TX0,
0432     TEGRA30_AHUB_TXCIF_SPDIF_TX0,
0433     TEGRA30_AHUB_TXCIF_SPDIF_TX1,
0434 };
0435 
0436 enum tegra30_ahub_rxcif {
0437     TEGRA30_AHUB_RXCIF_APBIF_RX0,
0438     TEGRA30_AHUB_RXCIF_APBIF_RX1,
0439     TEGRA30_AHUB_RXcIF_APBIF_RX2,
0440     TEGRA30_AHUB_RXCIF_APBIF_RX3,
0441     TEGRA30_AHUB_RXCIF_I2S0_RX0,
0442     TEGRA30_AHUB_RXCIF_I2S1_RX0,
0443     TEGRA30_AHUB_RXCIF_I2S2_RX0,
0444     TEGRA30_AHUB_RXCIF_I2S3_RX0,
0445     TEGRA30_AHUB_RXCIF_I2S4_RX0,
0446     TEGRA30_AHUB_RXCIF_DAM0_RX0,
0447     TEGRA30_AHUB_RXCIF_DAM0_RX1,
0448     TEGRA30_AHUB_RXCIF_DAM1_RX0,
0449     TEGRA30_AHUB_RXCIF_DAM2_RX1,
0450     TEGRA30_AHUB_RXCIF_DAM3_RX0,
0451     TEGRA30_AHUB_RXCIF_DAM3_RX1,
0452     TEGRA30_AHUB_RXCIF_SPDIF_RX0,
0453     TEGRA30_AHUB_RXCIF_SPDIF_RX1,
0454 };
0455 
0456 extern int tegra30_ahub_allocate_rx_fifo(enum tegra30_ahub_rxcif *rxcif,
0457                      char *dmachan, int dmachan_len,
0458                      dma_addr_t *fiforeg);
0459 extern int tegra30_ahub_enable_rx_fifo(enum tegra30_ahub_rxcif rxcif);
0460 extern int tegra30_ahub_disable_rx_fifo(enum tegra30_ahub_rxcif rxcif);
0461 extern int tegra30_ahub_free_rx_fifo(enum tegra30_ahub_rxcif rxcif);
0462 
0463 extern int tegra30_ahub_allocate_tx_fifo(enum tegra30_ahub_txcif *txcif,
0464                      char *dmachan, int dmachan_len,
0465                      dma_addr_t *fiforeg);
0466 extern int tegra30_ahub_enable_tx_fifo(enum tegra30_ahub_txcif txcif);
0467 extern int tegra30_ahub_disable_tx_fifo(enum tegra30_ahub_txcif txcif);
0468 extern int tegra30_ahub_free_tx_fifo(enum tegra30_ahub_txcif txcif);
0469 
0470 extern int tegra30_ahub_set_rx_cif_source(enum tegra30_ahub_rxcif rxcif,
0471                       enum tegra30_ahub_txcif txcif);
0472 extern int tegra30_ahub_unset_rx_cif_source(enum tegra30_ahub_rxcif rxcif);
0473 
0474 struct tegra30_ahub_cif_conf {
0475     unsigned int threshold;
0476     unsigned int audio_channels;
0477     unsigned int client_channels;
0478     unsigned int audio_bits;
0479     unsigned int client_bits;
0480     unsigned int expand;
0481     unsigned int stereo_conv;
0482     unsigned int replicate;
0483     unsigned int direction;
0484     unsigned int truncate;
0485     unsigned int mono_conv;
0486 };
0487 
0488 void tegra30_ahub_set_cif(struct regmap *regmap, unsigned int reg,
0489               struct tegra30_ahub_cif_conf *conf);
0490 void tegra124_ahub_set_cif(struct regmap *regmap, unsigned int reg,
0491                struct tegra30_ahub_cif_conf *conf);
0492 
0493 struct tegra30_ahub_soc_data {
0494     unsigned int num_resets;
0495     void (*set_audio_cif)(struct regmap *regmap,
0496                   unsigned int reg,
0497                   struct tegra30_ahub_cif_conf *conf);
0498     /*
0499      * FIXME: There are many more differences in HW, such as:
0500      * - More APBIF channels.
0501      * - Extra separate chunks of register address space to represent
0502      *   the extra APBIF channels.
0503      * - More units connected to the AHUB, so that tegra30_ahub_[rt]xcif
0504      *   need expansion, coupled with there being more defined bits in
0505      *   the AHUB routing registers.
0506      * However, the driver doesn't support those new features yet, so we
0507      * don't represent them here yet.
0508      */
0509 };
0510 
0511 struct tegra30_ahub {
0512     const struct tegra30_ahub_soc_data *soc_data;
0513     struct device *dev;
0514     struct reset_control_bulk_data resets[21];
0515     unsigned int nresets;
0516     struct clk_bulk_data clocks[2];
0517     unsigned int nclocks;
0518     resource_size_t apbif_addr;
0519     struct regmap *regmap_apbif;
0520     struct regmap *regmap_ahub;
0521     DECLARE_BITMAP(rx_usage, TEGRA30_AHUB_CHANNEL_CTRL_COUNT);
0522     DECLARE_BITMAP(tx_usage, TEGRA30_AHUB_CHANNEL_CTRL_COUNT);
0523 };
0524 
0525 #endif