Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * tegra210_admaif.h - Tegra ADMAIF registers
0004  *
0005  * Copyright (c) 2020 NVIDIA CORPORATION.  All rights reserved.
0006  *
0007  */
0008 
0009 #ifndef __TEGRA_ADMAIF_H__
0010 #define __TEGRA_ADMAIF_H__
0011 
0012 #define TEGRA_ADMAIF_CHANNEL_REG_STRIDE         0x40
0013 /* Tegra210 specific */
0014 #define TEGRA210_ADMAIF_LAST_REG            0x75f
0015 #define TEGRA210_ADMAIF_CHANNEL_COUNT           10
0016 #define TEGRA210_ADMAIF_RX_BASE             0x0
0017 #define TEGRA210_ADMAIF_TX_BASE             0x300
0018 #define TEGRA210_ADMAIF_GLOBAL_BASE         0x700
0019 /* Tegra186 specific */
0020 #define TEGRA186_ADMAIF_LAST_REG            0xd5f
0021 #define TEGRA186_ADMAIF_CHANNEL_COUNT           20
0022 #define TEGRA186_ADMAIF_RX_BASE             0x0
0023 #define TEGRA186_ADMAIF_TX_BASE             0x500
0024 #define TEGRA186_ADMAIF_GLOBAL_BASE         0xd00
0025 /* Global registers */
0026 #define TEGRA_ADMAIF_GLOBAL_ENABLE          0x0
0027 #define TEGRA_ADMAIF_GLOBAL_CG_0            0x8
0028 #define TEGRA_ADMAIF_GLOBAL_STATUS          0x10
0029 #define TEGRA_ADMAIF_GLOBAL_RX_ENABLE_STATUS        0x20
0030 #define TEGRA_ADMAIF_GLOBAL_TX_ENABLE_STATUS        0x24
0031 /* RX channel registers */
0032 #define TEGRA_ADMAIF_RX_ENABLE              0x0
0033 #define TEGRA_ADMAIF_RX_SOFT_RESET          0x4
0034 #define TEGRA_ADMAIF_RX_STATUS              0xc
0035 #define TEGRA_ADMAIF_RX_INT_STATUS          0x10
0036 #define TEGRA_ADMAIF_RX_INT_MASK            0x14
0037 #define TEGRA_ADMAIF_RX_INT_SET             0x18
0038 #define TEGRA_ADMAIF_RX_INT_CLEAR           0x1c
0039 #define TEGRA_ADMAIF_CH_ACIF_RX_CTRL            0x20
0040 #define TEGRA_ADMAIF_RX_FIFO_CTRL           0x28
0041 #define TEGRA_ADMAIF_RX_FIFO_READ           0x2c
0042 /* TX channel registers */
0043 #define TEGRA_ADMAIF_TX_ENABLE              0x0
0044 #define TEGRA_ADMAIF_TX_SOFT_RESET          0x4
0045 #define TEGRA_ADMAIF_TX_STATUS              0xc
0046 #define TEGRA_ADMAIF_TX_INT_STATUS          0x10
0047 #define TEGRA_ADMAIF_TX_INT_MASK            0x14
0048 #define TEGRA_ADMAIF_TX_INT_SET             0x18
0049 #define TEGRA_ADMAIF_TX_INT_CLEAR           0x1c
0050 #define TEGRA_ADMAIF_CH_ACIF_TX_CTRL            0x20
0051 #define TEGRA_ADMAIF_TX_FIFO_CTRL           0x28
0052 #define TEGRA_ADMAIF_TX_FIFO_WRITE          0x2c
0053 /* Bit fields */
0054 #define PACK8_EN_SHIFT                  31
0055 #define PACK8_EN_MASK                   BIT(PACK8_EN_SHIFT)
0056 #define PACK8_EN                    BIT(PACK8_EN_SHIFT)
0057 #define PACK16_EN_SHIFT                 30
0058 #define PACK16_EN_MASK                  BIT(PACK16_EN_SHIFT)
0059 #define PACK16_EN                   BIT(PACK16_EN_SHIFT)
0060 #define TX_ENABLE_SHIFT                 0
0061 #define TX_ENABLE_MASK                  BIT(TX_ENABLE_SHIFT)
0062 #define TX_ENABLE                   BIT(TX_ENABLE_SHIFT)
0063 #define RX_ENABLE_SHIFT                 0
0064 #define RX_ENABLE_MASK                  BIT(RX_ENABLE_SHIFT)
0065 #define RX_ENABLE                   BIT(RX_ENABLE_SHIFT)
0066 #define SW_RESET_MASK                   1
0067 #define SW_RESET                    1
0068 /* Default values - Tegra210 */
0069 #define TEGRA210_ADMAIF_RX1_FIFO_CTRL_REG_DEFAULT   0x00000300
0070 #define TEGRA210_ADMAIF_RX2_FIFO_CTRL_REG_DEFAULT   0x00000304
0071 #define TEGRA210_ADMAIF_RX3_FIFO_CTRL_REG_DEFAULT   0x00000208
0072 #define TEGRA210_ADMAIF_RX4_FIFO_CTRL_REG_DEFAULT   0x0000020b
0073 #define TEGRA210_ADMAIF_RX5_FIFO_CTRL_REG_DEFAULT   0x0000020e
0074 #define TEGRA210_ADMAIF_RX6_FIFO_CTRL_REG_DEFAULT   0x00000211
0075 #define TEGRA210_ADMAIF_RX7_FIFO_CTRL_REG_DEFAULT   0x00000214
0076 #define TEGRA210_ADMAIF_RX8_FIFO_CTRL_REG_DEFAULT   0x00000217
0077 #define TEGRA210_ADMAIF_RX9_FIFO_CTRL_REG_DEFAULT   0x0000021a
0078 #define TEGRA210_ADMAIF_RX10_FIFO_CTRL_REG_DEFAULT  0x0000021d
0079 #define TEGRA210_ADMAIF_TX1_FIFO_CTRL_REG_DEFAULT   0x02000300
0080 #define TEGRA210_ADMAIF_TX2_FIFO_CTRL_REG_DEFAULT   0x02000304
0081 #define TEGRA210_ADMAIF_TX3_FIFO_CTRL_REG_DEFAULT   0x01800208
0082 #define TEGRA210_ADMAIF_TX4_FIFO_CTRL_REG_DEFAULT   0x0180020b
0083 #define TEGRA210_ADMAIF_TX5_FIFO_CTRL_REG_DEFAULT   0x0180020e
0084 #define TEGRA210_ADMAIF_TX6_FIFO_CTRL_REG_DEFAULT   0x01800211
0085 #define TEGRA210_ADMAIF_TX7_FIFO_CTRL_REG_DEFAULT   0x01800214
0086 #define TEGRA210_ADMAIF_TX8_FIFO_CTRL_REG_DEFAULT   0x01800217
0087 #define TEGRA210_ADMAIF_TX9_FIFO_CTRL_REG_DEFAULT   0x0180021a
0088 #define TEGRA210_ADMAIF_TX10_FIFO_CTRL_REG_DEFAULT  0x0180021d
0089 /* Default values - Tegra186 */
0090 #define TEGRA186_ADMAIF_RX1_FIFO_CTRL_REG_DEFAULT   0x00000300
0091 #define TEGRA186_ADMAIF_RX2_FIFO_CTRL_REG_DEFAULT   0x00000304
0092 #define TEGRA186_ADMAIF_RX3_FIFO_CTRL_REG_DEFAULT   0x00000308
0093 #define TEGRA186_ADMAIF_RX4_FIFO_CTRL_REG_DEFAULT   0x0000030c
0094 #define TEGRA186_ADMAIF_RX5_FIFO_CTRL_REG_DEFAULT   0x00000210
0095 #define TEGRA186_ADMAIF_RX6_FIFO_CTRL_REG_DEFAULT   0x00000213
0096 #define TEGRA186_ADMAIF_RX7_FIFO_CTRL_REG_DEFAULT   0x00000216
0097 #define TEGRA186_ADMAIF_RX8_FIFO_CTRL_REG_DEFAULT   0x00000219
0098 #define TEGRA186_ADMAIF_RX9_FIFO_CTRL_REG_DEFAULT   0x0000021c
0099 #define TEGRA186_ADMAIF_RX10_FIFO_CTRL_REG_DEFAULT  0x0000021f
0100 #define TEGRA186_ADMAIF_RX11_FIFO_CTRL_REG_DEFAULT  0x00000222
0101 #define TEGRA186_ADMAIF_RX12_FIFO_CTRL_REG_DEFAULT  0x00000225
0102 #define TEGRA186_ADMAIF_RX13_FIFO_CTRL_REG_DEFAULT  0x00000228
0103 #define TEGRA186_ADMAIF_RX14_FIFO_CTRL_REG_DEFAULT  0x0000022b
0104 #define TEGRA186_ADMAIF_RX15_FIFO_CTRL_REG_DEFAULT  0x0000022e
0105 #define TEGRA186_ADMAIF_RX16_FIFO_CTRL_REG_DEFAULT  0x00000231
0106 #define TEGRA186_ADMAIF_RX17_FIFO_CTRL_REG_DEFAULT  0x00000234
0107 #define TEGRA186_ADMAIF_RX18_FIFO_CTRL_REG_DEFAULT  0x00000237
0108 #define TEGRA186_ADMAIF_RX19_FIFO_CTRL_REG_DEFAULT  0x0000023a
0109 #define TEGRA186_ADMAIF_RX20_FIFO_CTRL_REG_DEFAULT  0x0000023d
0110 #define TEGRA186_ADMAIF_TX1_FIFO_CTRL_REG_DEFAULT   0x02000300
0111 #define TEGRA186_ADMAIF_TX2_FIFO_CTRL_REG_DEFAULT   0x02000304
0112 #define TEGRA186_ADMAIF_TX3_FIFO_CTRL_REG_DEFAULT   0x02000308
0113 #define TEGRA186_ADMAIF_TX4_FIFO_CTRL_REG_DEFAULT   0x0200030c
0114 #define TEGRA186_ADMAIF_TX5_FIFO_CTRL_REG_DEFAULT   0x01800210
0115 #define TEGRA186_ADMAIF_TX6_FIFO_CTRL_REG_DEFAULT   0x01800213
0116 #define TEGRA186_ADMAIF_TX7_FIFO_CTRL_REG_DEFAULT   0x01800216
0117 #define TEGRA186_ADMAIF_TX8_FIFO_CTRL_REG_DEFAULT   0x01800219
0118 #define TEGRA186_ADMAIF_TX9_FIFO_CTRL_REG_DEFAULT   0x0180021c
0119 #define TEGRA186_ADMAIF_TX10_FIFO_CTRL_REG_DEFAULT  0x0180021f
0120 #define TEGRA186_ADMAIF_TX11_FIFO_CTRL_REG_DEFAULT  0x01800222
0121 #define TEGRA186_ADMAIF_TX12_FIFO_CTRL_REG_DEFAULT  0x01800225
0122 #define TEGRA186_ADMAIF_TX13_FIFO_CTRL_REG_DEFAULT  0x01800228
0123 #define TEGRA186_ADMAIF_TX14_FIFO_CTRL_REG_DEFAULT  0x0180022b
0124 #define TEGRA186_ADMAIF_TX15_FIFO_CTRL_REG_DEFAULT  0x0180022e
0125 #define TEGRA186_ADMAIF_TX16_FIFO_CTRL_REG_DEFAULT  0x01800231
0126 #define TEGRA186_ADMAIF_TX17_FIFO_CTRL_REG_DEFAULT  0x01800234
0127 #define TEGRA186_ADMAIF_TX18_FIFO_CTRL_REG_DEFAULT  0x01800237
0128 #define TEGRA186_ADMAIF_TX19_FIFO_CTRL_REG_DEFAULT  0x0180023a
0129 #define TEGRA186_ADMAIF_TX20_FIFO_CTRL_REG_DEFAULT  0x0180023d
0130 
0131 enum {
0132     DATA_8BIT,
0133     DATA_16BIT,
0134     DATA_32BIT
0135 };
0136 
0137 enum {
0138     ADMAIF_RX_PATH,
0139     ADMAIF_TX_PATH,
0140     ADMAIF_PATHS,
0141 };
0142 
0143 struct tegra_admaif_soc_data {
0144     const struct snd_soc_component_driver *cmpnt;
0145     const struct regmap_config *regmap_conf;
0146     struct snd_soc_dai_driver *dais;
0147     unsigned int global_base;
0148     unsigned int tx_base;
0149     unsigned int rx_base;
0150     unsigned int num_ch;
0151 };
0152 
0153 struct tegra_admaif {
0154     struct snd_dmaengine_dai_dma_data *capture_dma_data;
0155     struct snd_dmaengine_dai_dma_data *playback_dma_data;
0156     const struct tegra_admaif_soc_data *soc_data;
0157     unsigned int *mono_to_stereo[ADMAIF_PATHS];
0158     unsigned int *stereo_to_mono[ADMAIF_PATHS];
0159     struct regmap *regmap;
0160 };
0161 
0162 #endif