tegra210_admaif.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * tegra210_admaif.h - Tegra ADMAIF registers
  4. *
  5. * Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved.
  6. *
  7. */
  8. #ifndef __TEGRA_ADMAIF_H__
  9. #define __TEGRA_ADMAIF_H__
  10. #define TEGRA_ADMAIF_CHANNEL_REG_STRIDE 0x40
  11. /* Tegra210 specific */
  12. #define TEGRA210_ADMAIF_LAST_REG 0x75f
  13. #define TEGRA210_ADMAIF_CHANNEL_COUNT 10
  14. #define TEGRA210_ADMAIF_RX_BASE 0x0
  15. #define TEGRA210_ADMAIF_TX_BASE 0x300
  16. #define TEGRA210_ADMAIF_GLOBAL_BASE 0x700
  17. /* Tegra186 specific */
  18. #define TEGRA186_ADMAIF_LAST_REG 0xd5f
  19. #define TEGRA186_ADMAIF_CHANNEL_COUNT 20
  20. #define TEGRA186_ADMAIF_RX_BASE 0x0
  21. #define TEGRA186_ADMAIF_TX_BASE 0x500
  22. #define TEGRA186_ADMAIF_GLOBAL_BASE 0xd00
  23. /* Global registers */
  24. #define TEGRA_ADMAIF_GLOBAL_ENABLE 0x0
  25. #define TEGRA_ADMAIF_GLOBAL_CG_0 0x8
  26. #define TEGRA_ADMAIF_GLOBAL_STATUS 0x10
  27. #define TEGRA_ADMAIF_GLOBAL_RX_ENABLE_STATUS 0x20
  28. #define TEGRA_ADMAIF_GLOBAL_TX_ENABLE_STATUS 0x24
  29. /* RX channel registers */
  30. #define TEGRA_ADMAIF_RX_ENABLE 0x0
  31. #define TEGRA_ADMAIF_RX_SOFT_RESET 0x4
  32. #define TEGRA_ADMAIF_RX_STATUS 0xc
  33. #define TEGRA_ADMAIF_RX_INT_STATUS 0x10
  34. #define TEGRA_ADMAIF_RX_INT_MASK 0x14
  35. #define TEGRA_ADMAIF_RX_INT_SET 0x18
  36. #define TEGRA_ADMAIF_RX_INT_CLEAR 0x1c
  37. #define TEGRA_ADMAIF_CH_ACIF_RX_CTRL 0x20
  38. #define TEGRA_ADMAIF_RX_FIFO_CTRL 0x28
  39. #define TEGRA_ADMAIF_RX_FIFO_READ 0x2c
  40. /* TX channel registers */
  41. #define TEGRA_ADMAIF_TX_ENABLE 0x0
  42. #define TEGRA_ADMAIF_TX_SOFT_RESET 0x4
  43. #define TEGRA_ADMAIF_TX_STATUS 0xc
  44. #define TEGRA_ADMAIF_TX_INT_STATUS 0x10
  45. #define TEGRA_ADMAIF_TX_INT_MASK 0x14
  46. #define TEGRA_ADMAIF_TX_INT_SET 0x18
  47. #define TEGRA_ADMAIF_TX_INT_CLEAR 0x1c
  48. #define TEGRA_ADMAIF_CH_ACIF_TX_CTRL 0x20
  49. #define TEGRA_ADMAIF_TX_FIFO_CTRL 0x28
  50. #define TEGRA_ADMAIF_TX_FIFO_WRITE 0x2c
  51. /* Bit fields */
  52. #define PACK8_EN_SHIFT 31
  53. #define PACK8_EN_MASK BIT(PACK8_EN_SHIFT)
  54. #define PACK8_EN BIT(PACK8_EN_SHIFT)
  55. #define PACK16_EN_SHIFT 30
  56. #define PACK16_EN_MASK BIT(PACK16_EN_SHIFT)
  57. #define PACK16_EN BIT(PACK16_EN_SHIFT)
  58. #define TX_ENABLE_SHIFT 0
  59. #define TX_ENABLE_MASK BIT(TX_ENABLE_SHIFT)
  60. #define TX_ENABLE BIT(TX_ENABLE_SHIFT)
  61. #define RX_ENABLE_SHIFT 0
  62. #define RX_ENABLE_MASK BIT(RX_ENABLE_SHIFT)
  63. #define RX_ENABLE BIT(RX_ENABLE_SHIFT)
  64. #define SW_RESET_MASK 1
  65. #define SW_RESET 1
  66. /* Default values - Tegra210 */
  67. #define TEGRA210_ADMAIF_RX1_FIFO_CTRL_REG_DEFAULT 0x00000300
  68. #define TEGRA210_ADMAIF_RX2_FIFO_CTRL_REG_DEFAULT 0x00000304
  69. #define TEGRA210_ADMAIF_RX3_FIFO_CTRL_REG_DEFAULT 0x00000208
  70. #define TEGRA210_ADMAIF_RX4_FIFO_CTRL_REG_DEFAULT 0x0000020b
  71. #define TEGRA210_ADMAIF_RX5_FIFO_CTRL_REG_DEFAULT 0x0000020e
  72. #define TEGRA210_ADMAIF_RX6_FIFO_CTRL_REG_DEFAULT 0x00000211
  73. #define TEGRA210_ADMAIF_RX7_FIFO_CTRL_REG_DEFAULT 0x00000214
  74. #define TEGRA210_ADMAIF_RX8_FIFO_CTRL_REG_DEFAULT 0x00000217
  75. #define TEGRA210_ADMAIF_RX9_FIFO_CTRL_REG_DEFAULT 0x0000021a
  76. #define TEGRA210_ADMAIF_RX10_FIFO_CTRL_REG_DEFAULT 0x0000021d
  77. #define TEGRA210_ADMAIF_TX1_FIFO_CTRL_REG_DEFAULT 0x02000300
  78. #define TEGRA210_ADMAIF_TX2_FIFO_CTRL_REG_DEFAULT 0x02000304
  79. #define TEGRA210_ADMAIF_TX3_FIFO_CTRL_REG_DEFAULT 0x01800208
  80. #define TEGRA210_ADMAIF_TX4_FIFO_CTRL_REG_DEFAULT 0x0180020b
  81. #define TEGRA210_ADMAIF_TX5_FIFO_CTRL_REG_DEFAULT 0x0180020e
  82. #define TEGRA210_ADMAIF_TX6_FIFO_CTRL_REG_DEFAULT 0x01800211
  83. #define TEGRA210_ADMAIF_TX7_FIFO_CTRL_REG_DEFAULT 0x01800214
  84. #define TEGRA210_ADMAIF_TX8_FIFO_CTRL_REG_DEFAULT 0x01800217
  85. #define TEGRA210_ADMAIF_TX9_FIFO_CTRL_REG_DEFAULT 0x0180021a
  86. #define TEGRA210_ADMAIF_TX10_FIFO_CTRL_REG_DEFAULT 0x0180021d
  87. /* Default values - Tegra186 */
  88. #define TEGRA186_ADMAIF_RX1_FIFO_CTRL_REG_DEFAULT 0x00000300
  89. #define TEGRA186_ADMAIF_RX2_FIFO_CTRL_REG_DEFAULT 0x00000304
  90. #define TEGRA186_ADMAIF_RX3_FIFO_CTRL_REG_DEFAULT 0x00000308
  91. #define TEGRA186_ADMAIF_RX4_FIFO_CTRL_REG_DEFAULT 0x0000030c
  92. #define TEGRA186_ADMAIF_RX5_FIFO_CTRL_REG_DEFAULT 0x00000210
  93. #define TEGRA186_ADMAIF_RX6_FIFO_CTRL_REG_DEFAULT 0x00000213
  94. #define TEGRA186_ADMAIF_RX7_FIFO_CTRL_REG_DEFAULT 0x00000216
  95. #define TEGRA186_ADMAIF_RX8_FIFO_CTRL_REG_DEFAULT 0x00000219
  96. #define TEGRA186_ADMAIF_RX9_FIFO_CTRL_REG_DEFAULT 0x0000021c
  97. #define TEGRA186_ADMAIF_RX10_FIFO_CTRL_REG_DEFAULT 0x0000021f
  98. #define TEGRA186_ADMAIF_RX11_FIFO_CTRL_REG_DEFAULT 0x00000222
  99. #define TEGRA186_ADMAIF_RX12_FIFO_CTRL_REG_DEFAULT 0x00000225
  100. #define TEGRA186_ADMAIF_RX13_FIFO_CTRL_REG_DEFAULT 0x00000228
  101. #define TEGRA186_ADMAIF_RX14_FIFO_CTRL_REG_DEFAULT 0x0000022b
  102. #define TEGRA186_ADMAIF_RX15_FIFO_CTRL_REG_DEFAULT 0x0000022e
  103. #define TEGRA186_ADMAIF_RX16_FIFO_CTRL_REG_DEFAULT 0x00000231
  104. #define TEGRA186_ADMAIF_RX17_FIFO_CTRL_REG_DEFAULT 0x00000234
  105. #define TEGRA186_ADMAIF_RX18_FIFO_CTRL_REG_DEFAULT 0x00000237
  106. #define TEGRA186_ADMAIF_RX19_FIFO_CTRL_REG_DEFAULT 0x0000023a
  107. #define TEGRA186_ADMAIF_RX20_FIFO_CTRL_REG_DEFAULT 0x0000023d
  108. #define TEGRA186_ADMAIF_TX1_FIFO_CTRL_REG_DEFAULT 0x02000300
  109. #define TEGRA186_ADMAIF_TX2_FIFO_CTRL_REG_DEFAULT 0x02000304
  110. #define TEGRA186_ADMAIF_TX3_FIFO_CTRL_REG_DEFAULT 0x02000308
  111. #define TEGRA186_ADMAIF_TX4_FIFO_CTRL_REG_DEFAULT 0x0200030c
  112. #define TEGRA186_ADMAIF_TX5_FIFO_CTRL_REG_DEFAULT 0x01800210
  113. #define TEGRA186_ADMAIF_TX6_FIFO_CTRL_REG_DEFAULT 0x01800213
  114. #define TEGRA186_ADMAIF_TX7_FIFO_CTRL_REG_DEFAULT 0x01800216
  115. #define TEGRA186_ADMAIF_TX8_FIFO_CTRL_REG_DEFAULT 0x01800219
  116. #define TEGRA186_ADMAIF_TX9_FIFO_CTRL_REG_DEFAULT 0x0180021c
  117. #define TEGRA186_ADMAIF_TX10_FIFO_CTRL_REG_DEFAULT 0x0180021f
  118. #define TEGRA186_ADMAIF_TX11_FIFO_CTRL_REG_DEFAULT 0x01800222
  119. #define TEGRA186_ADMAIF_TX12_FIFO_CTRL_REG_DEFAULT 0x01800225
  120. #define TEGRA186_ADMAIF_TX13_FIFO_CTRL_REG_DEFAULT 0x01800228
  121. #define TEGRA186_ADMAIF_TX14_FIFO_CTRL_REG_DEFAULT 0x0180022b
  122. #define TEGRA186_ADMAIF_TX15_FIFO_CTRL_REG_DEFAULT 0x0180022e
  123. #define TEGRA186_ADMAIF_TX16_FIFO_CTRL_REG_DEFAULT 0x01800231
  124. #define TEGRA186_ADMAIF_TX17_FIFO_CTRL_REG_DEFAULT 0x01800234
  125. #define TEGRA186_ADMAIF_TX18_FIFO_CTRL_REG_DEFAULT 0x01800237
  126. #define TEGRA186_ADMAIF_TX19_FIFO_CTRL_REG_DEFAULT 0x0180023a
  127. #define TEGRA186_ADMAIF_TX20_FIFO_CTRL_REG_DEFAULT 0x0180023d
  128. enum {
  129. DATA_8BIT,
  130. DATA_16BIT,
  131. DATA_32BIT
  132. };
  133. enum {
  134. ADMAIF_RX_PATH,
  135. ADMAIF_TX_PATH,
  136. ADMAIF_PATHS,
  137. };
  138. struct tegra_admaif_soc_data {
  139. const struct snd_soc_component_driver *cmpnt;
  140. const struct regmap_config *regmap_conf;
  141. struct snd_soc_dai_driver *dais;
  142. unsigned int global_base;
  143. unsigned int tx_base;
  144. unsigned int rx_base;
  145. unsigned int num_ch;
  146. };
  147. struct tegra_admaif {
  148. struct snd_dmaengine_dai_dma_data *capture_dma_data;
  149. struct snd_dmaengine_dai_dma_data *playback_dma_data;
  150. const struct tegra_admaif_soc_data *soc_data;
  151. unsigned int *mono_to_stereo[ADMAIF_PATHS];
  152. unsigned int *stereo_to_mono[ADMAIF_PATHS];
  153. struct regmap *regmap;
  154. };
  155. #endif