tegra210_i2s.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * tegra210_i2s.h - Definitions for Tegra210 I2S driver
  4. *
  5. * Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved.
  6. *
  7. */
  8. #ifndef __TEGRA210_I2S_H__
  9. #define __TEGRA210_I2S_H__
  10. /* Register offsets from I2S*_BASE */
  11. #define TEGRA210_I2S_RX_ENABLE 0x0
  12. #define TEGRA210_I2S_RX_SOFT_RESET 0x4
  13. #define TEGRA210_I2S_RX_STATUS 0x0c
  14. #define TEGRA210_I2S_RX_INT_STATUS 0x10
  15. #define TEGRA210_I2S_RX_INT_MASK 0x14
  16. #define TEGRA210_I2S_RX_INT_SET 0x18
  17. #define TEGRA210_I2S_RX_INT_CLEAR 0x1c
  18. #define TEGRA210_I2S_RX_CIF_CTRL 0x20
  19. #define TEGRA210_I2S_RX_CTRL 0x24
  20. #define TEGRA210_I2S_RX_SLOT_CTRL 0x28
  21. #define TEGRA210_I2S_RX_CLK_TRIM 0x2c
  22. #define TEGRA210_I2S_RX_CYA 0x30
  23. #define TEGRA210_I2S_RX_CIF_FIFO_STATUS 0x34
  24. #define TEGRA210_I2S_TX_ENABLE 0x40
  25. #define TEGRA210_I2S_TX_SOFT_RESET 0x44
  26. #define TEGRA210_I2S_TX_STATUS 0x4c
  27. #define TEGRA210_I2S_TX_INT_STATUS 0x50
  28. #define TEGRA210_I2S_TX_INT_MASK 0x54
  29. #define TEGRA210_I2S_TX_INT_SET 0x58
  30. #define TEGRA210_I2S_TX_INT_CLEAR 0x5c
  31. #define TEGRA210_I2S_TX_CIF_CTRL 0x60
  32. #define TEGRA210_I2S_TX_CTRL 0x64
  33. #define TEGRA210_I2S_TX_SLOT_CTRL 0x68
  34. #define TEGRA210_I2S_TX_CLK_TRIM 0x6c
  35. #define TEGRA210_I2S_TX_CYA 0x70
  36. #define TEGRA210_I2S_TX_CIF_FIFO_STATUS 0x74
  37. #define TEGRA210_I2S_ENABLE 0x80
  38. #define TEGRA210_I2S_SOFT_RESET 0x84
  39. #define TEGRA210_I2S_CG 0x88
  40. #define TEGRA210_I2S_STATUS 0x8c
  41. #define TEGRA210_I2S_INT_STATUS 0x90
  42. #define TEGRA210_I2S_CTRL 0xa0
  43. #define TEGRA210_I2S_TIMING 0xa4
  44. #define TEGRA210_I2S_SLOT_CTRL 0xa8
  45. #define TEGRA210_I2S_CLK_TRIM 0xac
  46. #define TEGRA210_I2S_CYA 0xb0
  47. /* Bit fields, shifts and masks */
  48. #define I2S_DATA_SHIFT 8
  49. #define I2S_CTRL_DATA_OFFSET_MASK (0x7ff << I2S_DATA_SHIFT)
  50. #define I2S_EN_SHIFT 0
  51. #define I2S_EN_MASK BIT(I2S_EN_SHIFT)
  52. #define I2S_EN BIT(I2S_EN_SHIFT)
  53. #define I2S_FSYNC_WIDTH_SHIFT 24
  54. #define I2S_CTRL_FSYNC_WIDTH_MASK (0xff << I2S_FSYNC_WIDTH_SHIFT)
  55. #define I2S_POS_EDGE 0
  56. #define I2S_NEG_EDGE 1
  57. #define I2S_EDGE_SHIFT 20
  58. #define I2S_CTRL_EDGE_CTRL_MASK BIT(I2S_EDGE_SHIFT)
  59. #define I2S_CTRL_EDGE_CTRL_POS_EDGE (I2S_POS_EDGE << I2S_EDGE_SHIFT)
  60. #define I2S_CTRL_EDGE_CTRL_NEG_EDGE (I2S_NEG_EDGE << I2S_EDGE_SHIFT)
  61. #define I2S_FMT_LRCK 0
  62. #define I2S_FMT_FSYNC 1
  63. #define I2S_FMT_SHIFT 12
  64. #define I2S_CTRL_FRAME_FMT_MASK (7 << I2S_FMT_SHIFT)
  65. #define I2S_CTRL_FRAME_FMT_LRCK_MODE (I2S_FMT_LRCK << I2S_FMT_SHIFT)
  66. #define I2S_CTRL_FRAME_FMT_FSYNC_MODE (I2S_FMT_FSYNC << I2S_FMT_SHIFT)
  67. #define I2S_CTRL_MASTER_EN_SHIFT 10
  68. #define I2S_CTRL_MASTER_EN_MASK BIT(I2S_CTRL_MASTER_EN_SHIFT)
  69. #define I2S_CTRL_MASTER_EN BIT(I2S_CTRL_MASTER_EN_SHIFT)
  70. #define I2S_CTRL_LRCK_POL_SHIFT 9
  71. #define I2S_CTRL_LRCK_POL_MASK BIT(I2S_CTRL_LRCK_POL_SHIFT)
  72. #define I2S_CTRL_LRCK_POL_LOW (0 << I2S_CTRL_LRCK_POL_SHIFT)
  73. #define I2S_CTRL_LRCK_POL_HIGH BIT(I2S_CTRL_LRCK_POL_SHIFT)
  74. #define I2S_CTRL_LPBK_SHIFT 8
  75. #define I2S_CTRL_LPBK_MASK BIT(I2S_CTRL_LPBK_SHIFT)
  76. #define I2S_CTRL_LPBK_EN BIT(I2S_CTRL_LPBK_SHIFT)
  77. #define I2S_BITS_8 1
  78. #define I2S_BITS_16 3
  79. #define I2S_BITS_32 7
  80. #define I2S_CTRL_BIT_SIZE_MASK 0x7
  81. #define I2S_TIMING_CH_BIT_CNT_MASK 0x7ff
  82. #define I2S_TIMING_CH_BIT_CNT_SHIFT 0
  83. #define I2S_SOFT_RESET_SHIFT 0
  84. #define I2S_SOFT_RESET_MASK BIT(I2S_SOFT_RESET_SHIFT)
  85. #define I2S_SOFT_RESET_EN BIT(I2S_SOFT_RESET_SHIFT)
  86. #define I2S_RX_FIFO_DEPTH 64
  87. #define DEFAULT_I2S_RX_FIFO_THRESHOLD 3
  88. #define DEFAULT_I2S_SLOT_MASK 0xffff
  89. enum tegra210_i2s_path {
  90. I2S_RX_PATH,
  91. I2S_TX_PATH,
  92. I2S_PATHS,
  93. };
  94. struct tegra210_i2s {
  95. struct clk *clk_i2s;
  96. struct clk *clk_sync_input;
  97. struct regmap *regmap;
  98. unsigned int stereo_to_mono[I2S_PATHS];
  99. unsigned int mono_to_stereo[I2S_PATHS];
  100. unsigned int dai_fmt;
  101. unsigned int fsync_width;
  102. unsigned int bclk_ratio;
  103. unsigned int tx_mask;
  104. unsigned int rx_mask;
  105. unsigned int rx_fifo_th;
  106. bool loopback;
  107. };
  108. #endif