0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef __TEGRA_ADMAIF_H__
0010 #define __TEGRA_ADMAIF_H__
0011
0012 #define TEGRA_ADMAIF_CHANNEL_REG_STRIDE 0x40
0013
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
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
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
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
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
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
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
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