msm_sdw_regmap.c 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. /* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 and
  5. * only version 2 as published by the Free Software Foundation.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. */
  12. #include <linux/regmap.h>
  13. #include "msm_sdw.h"
  14. static const struct reg_default msm_sdw_defaults[] = {
  15. /* Page #10 registers */
  16. { MSM_SDW_PAGE_REGISTER, 0x00 },
  17. { MSM_SDW_TX9_SPKR_PROT_PATH_CTL, 0x02 },
  18. { MSM_SDW_TX9_SPKR_PROT_PATH_CFG0, 0x00 },
  19. { MSM_SDW_TX10_SPKR_PROT_PATH_CTL, 0x02 },
  20. { MSM_SDW_TX10_SPKR_PROT_PATH_CFG0, 0x00 },
  21. { MSM_SDW_TX11_SPKR_PROT_PATH_CTL, 0x02 },
  22. { MSM_SDW_TX11_SPKR_PROT_PATH_CFG0, 0x00 },
  23. { MSM_SDW_TX12_SPKR_PROT_PATH_CTL, 0x02 },
  24. { MSM_SDW_TX12_SPKR_PROT_PATH_CFG0, 0x00 },
  25. /* Page #11 registers */
  26. { MSM_SDW_COMPANDER7_CTL0, 0x60 },
  27. { MSM_SDW_COMPANDER7_CTL1, 0xdb },
  28. { MSM_SDW_COMPANDER7_CTL2, 0xff },
  29. { MSM_SDW_COMPANDER7_CTL3, 0x35 },
  30. { MSM_SDW_COMPANDER7_CTL4, 0xff },
  31. { MSM_SDW_COMPANDER7_CTL5, 0x00 },
  32. { MSM_SDW_COMPANDER7_CTL6, 0x01 },
  33. { MSM_SDW_COMPANDER8_CTL0, 0x60 },
  34. { MSM_SDW_COMPANDER8_CTL1, 0xdb },
  35. { MSM_SDW_COMPANDER8_CTL2, 0xff },
  36. { MSM_SDW_COMPANDER8_CTL3, 0x35 },
  37. { MSM_SDW_COMPANDER8_CTL4, 0xff },
  38. { MSM_SDW_COMPANDER8_CTL5, 0x00 },
  39. { MSM_SDW_COMPANDER8_CTL6, 0x01 },
  40. { MSM_SDW_RX7_RX_PATH_CTL, 0x04 },
  41. { MSM_SDW_RX7_RX_PATH_CFG0, 0x00 },
  42. { MSM_SDW_RX7_RX_PATH_CFG2, 0x8f },
  43. { MSM_SDW_RX7_RX_VOL_CTL, 0x00 },
  44. { MSM_SDW_RX7_RX_PATH_MIX_CTL, 0x04 },
  45. { MSM_SDW_RX7_RX_VOL_MIX_CTL, 0x00 },
  46. { MSM_SDW_RX7_RX_PATH_SEC2, 0x00 },
  47. { MSM_SDW_RX7_RX_PATH_SEC3, 0x00 },
  48. { MSM_SDW_RX7_RX_PATH_SEC5, 0x00 },
  49. { MSM_SDW_RX7_RX_PATH_SEC6, 0x00 },
  50. { MSM_SDW_RX7_RX_PATH_SEC7, 0x00 },
  51. { MSM_SDW_RX7_RX_PATH_MIX_SEC1, 0x00 },
  52. { MSM_SDW_RX8_RX_PATH_CTL, 0x04 },
  53. { MSM_SDW_RX8_RX_PATH_CFG0, 0x00 },
  54. { MSM_SDW_RX8_RX_PATH_CFG2, 0x8f },
  55. { MSM_SDW_RX8_RX_VOL_CTL, 0x00 },
  56. { MSM_SDW_RX8_RX_PATH_MIX_CTL, 0x04 },
  57. { MSM_SDW_RX8_RX_VOL_MIX_CTL, 0x00 },
  58. { MSM_SDW_RX8_RX_PATH_SEC2, 0x00 },
  59. { MSM_SDW_RX8_RX_PATH_SEC3, 0x00 },
  60. { MSM_SDW_RX8_RX_PATH_SEC5, 0x00 },
  61. { MSM_SDW_RX8_RX_PATH_SEC6, 0x00 },
  62. { MSM_SDW_RX8_RX_PATH_SEC7, 0x00 },
  63. { MSM_SDW_RX8_RX_PATH_MIX_SEC1, 0x00 },
  64. /* Page #12 registers */
  65. { MSM_SDW_BOOST0_BOOST_PATH_CTL, 0x00 },
  66. { MSM_SDW_BOOST0_BOOST_CTL, 0xb2 },
  67. { MSM_SDW_BOOST0_BOOST_CFG1, 0x00 },
  68. { MSM_SDW_BOOST0_BOOST_CFG2, 0x00 },
  69. { MSM_SDW_BOOST1_BOOST_PATH_CTL, 0x00 },
  70. { MSM_SDW_BOOST1_BOOST_CTL, 0xb2 },
  71. { MSM_SDW_BOOST1_BOOST_CFG1, 0x00 },
  72. { MSM_SDW_BOOST1_BOOST_CFG2, 0x00 },
  73. { MSM_SDW_AHB_BRIDGE_WR_DATA_0, 0x00 },
  74. { MSM_SDW_AHB_BRIDGE_WR_DATA_1, 0x00 },
  75. { MSM_SDW_AHB_BRIDGE_WR_DATA_2, 0x00 },
  76. { MSM_SDW_AHB_BRIDGE_WR_DATA_3, 0x00 },
  77. { MSM_SDW_AHB_BRIDGE_WR_ADDR_0, 0x00 },
  78. { MSM_SDW_AHB_BRIDGE_WR_ADDR_1, 0x00 },
  79. { MSM_SDW_AHB_BRIDGE_WR_ADDR_2, 0x00 },
  80. { MSM_SDW_AHB_BRIDGE_WR_ADDR_3, 0x00 },
  81. { MSM_SDW_AHB_BRIDGE_RD_ADDR_0, 0x00 },
  82. { MSM_SDW_AHB_BRIDGE_RD_ADDR_1, 0x00 },
  83. { MSM_SDW_AHB_BRIDGE_RD_ADDR_2, 0x00 },
  84. { MSM_SDW_AHB_BRIDGE_RD_ADDR_3, 0x00 },
  85. { MSM_SDW_AHB_BRIDGE_RD_DATA_0, 0x00 },
  86. { MSM_SDW_AHB_BRIDGE_RD_DATA_1, 0x00 },
  87. { MSM_SDW_AHB_BRIDGE_RD_DATA_2, 0x00 },
  88. { MSM_SDW_AHB_BRIDGE_RD_DATA_3, 0x00 },
  89. { MSM_SDW_AHB_BRIDGE_ACCESS_CFG, 0x0f },
  90. { MSM_SDW_AHB_BRIDGE_ACCESS_STATUS, 0x03 },
  91. /* Page #13 registers */
  92. { MSM_SDW_CLK_RST_CTRL_MCLK_CONTROL, 0x00 },
  93. { MSM_SDW_CLK_RST_CTRL_FS_CNT_CONTROL, 0x00 },
  94. { MSM_SDW_CLK_RST_CTRL_SWR_CONTROL, 0x00 },
  95. { MSM_SDW_TOP_TOP_CFG0, 0x00 },
  96. { MSM_SDW_TOP_TOP_CFG1, 0x00 },
  97. { MSM_SDW_TOP_RX_I2S_CTL, 0x0C },
  98. { MSM_SDW_TOP_TX_I2S_CTL, 0x00 },
  99. { MSM_SDW_TOP_I2S_CLK, 0x00 },
  100. { MSM_SDW_TOP_RX7_PATH_INPUT0_MUX, 0x00 },
  101. { MSM_SDW_TOP_RX7_PATH_INPUT1_MUX, 0x00 },
  102. { MSM_SDW_TOP_RX8_PATH_INPUT0_MUX, 0x00 },
  103. { MSM_SDW_TOP_RX8_PATH_INPUT1_MUX, 0x00 },
  104. { MSM_SDW_TOP_FREQ_MCLK, 0x00 },
  105. { MSM_SDW_TOP_DEBUG_BUS_SEL, 0x00 },
  106. { MSM_SDW_TOP_DEBUG_EN, 0x00 },
  107. { MSM_SDW_TOP_I2S_RESET, 0x00 },
  108. { MSM_SDW_TOP_BLOCKS_RESET, 0x00 },
  109. };
  110. static bool msm_sdw_is_readable_register(struct device *dev, unsigned int reg)
  111. {
  112. return msm_sdw_reg_readable[reg];
  113. }
  114. static bool msm_sdw_is_writeable_register(struct device *dev, unsigned int reg)
  115. {
  116. return msm_sdw_reg_writeable[reg];
  117. }
  118. static bool msm_sdw_is_volatile_register(struct device *dev, unsigned int reg)
  119. {
  120. switch (reg) {
  121. case MSM_SDW_AHB_BRIDGE_WR_DATA_0:
  122. case MSM_SDW_AHB_BRIDGE_WR_DATA_1:
  123. case MSM_SDW_AHB_BRIDGE_WR_DATA_2:
  124. case MSM_SDW_AHB_BRIDGE_WR_DATA_3:
  125. case MSM_SDW_AHB_BRIDGE_WR_ADDR_0:
  126. case MSM_SDW_AHB_BRIDGE_WR_ADDR_1:
  127. case MSM_SDW_AHB_BRIDGE_WR_ADDR_2:
  128. case MSM_SDW_AHB_BRIDGE_WR_ADDR_3:
  129. case MSM_SDW_AHB_BRIDGE_RD_DATA_0:
  130. case MSM_SDW_AHB_BRIDGE_RD_DATA_1:
  131. case MSM_SDW_AHB_BRIDGE_RD_DATA_2:
  132. case MSM_SDW_AHB_BRIDGE_RD_DATA_3:
  133. case MSM_SDW_AHB_BRIDGE_RD_ADDR_0:
  134. case MSM_SDW_AHB_BRIDGE_RD_ADDR_1:
  135. case MSM_SDW_AHB_BRIDGE_RD_ADDR_2:
  136. case MSM_SDW_AHB_BRIDGE_RD_ADDR_3:
  137. case MSM_SDW_CLK_RST_CTRL_MCLK_CONTROL:
  138. case MSM_SDW_CLK_RST_CTRL_FS_CNT_CONTROL:
  139. return true;
  140. default:
  141. return false;
  142. }
  143. }
  144. const struct regmap_config msm_sdw_regmap_config = {
  145. .reg_bits = 16,
  146. .val_bits = 8,
  147. .reg_stride = 4,
  148. .cache_type = REGCACHE_RBTREE,
  149. .reg_defaults = msm_sdw_defaults,
  150. .num_reg_defaults = ARRAY_SIZE(msm_sdw_defaults),
  151. .max_register = MSM_SDW_MAX_REGISTER,
  152. .writeable_reg = msm_sdw_is_writeable_register,
  153. .volatile_reg = msm_sdw_is_volatile_register,
  154. .readable_reg = msm_sdw_is_readable_register,
  155. };