acp-mach.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
  2. /*
  3. * This file is provided under a dual BSD/GPLv2 license. When using or
  4. * redistributing this file, you may do so under either license.
  5. *
  6. * Copyright(c) 2021 Advanced Micro Devices, Inc. All rights reserved.
  7. *
  8. * Author: Ajit Kumar Pandey <AjitKumar.Pandey@amd.com>
  9. */
  10. #ifndef __ACP_MACH_H
  11. #define __ACP_MACH_H
  12. #include <sound/core.h>
  13. #include <sound/jack.h>
  14. #include <sound/pcm_params.h>
  15. #include <sound/soc-dapm.h>
  16. #include <linux/input.h>
  17. #include <linux/module.h>
  18. #include <sound/soc.h>
  19. #define TDM_CHANNELS 8
  20. #define ACP_OPS(priv, cb) ((priv)->ops.cb)
  21. #define acp_get_drvdata(card) ((struct acp_card_drvdata *)(card)->drvdata)
  22. enum be_id {
  23. HEADSET_BE_ID = 0,
  24. AMP_BE_ID,
  25. DMIC_BE_ID,
  26. BT_BE_ID,
  27. };
  28. enum cpu_endpoints {
  29. NONE = 0,
  30. I2S_HS,
  31. I2S_SP,
  32. I2S_BT,
  33. DMIC,
  34. };
  35. enum codec_endpoints {
  36. DUMMY = 0,
  37. RT5682,
  38. RT1019,
  39. MAX98360A,
  40. RT5682S,
  41. NAU8825,
  42. NAU8821,
  43. MAX98388,
  44. ES83XX,
  45. };
  46. enum platform_end_point {
  47. RENOIR = 0,
  48. REMBRANDT,
  49. ACP63,
  50. ACP70,
  51. ACP71,
  52. };
  53. struct acp_mach_ops {
  54. int (*probe)(struct snd_soc_card *card);
  55. int (*configure_link)(struct snd_soc_card *card, struct snd_soc_dai_link *dai_link);
  56. int (*configure_widgets)(struct snd_soc_card *card);
  57. int (*suspend_pre)(struct snd_soc_card *card);
  58. int (*resume_post)(struct snd_soc_card *card);
  59. };
  60. struct acp_card_drvdata {
  61. unsigned int hs_cpu_id;
  62. unsigned int amp_cpu_id;
  63. unsigned int bt_cpu_id;
  64. unsigned int dmic_cpu_id;
  65. unsigned int hs_codec_id;
  66. unsigned int amp_codec_id;
  67. unsigned int bt_codec_id;
  68. unsigned int dmic_codec_id;
  69. unsigned int dai_fmt;
  70. unsigned int platform;
  71. struct clk *wclk;
  72. struct clk *bclk;
  73. struct acp_mach_ops ops;
  74. struct snd_soc_acpi_mach *acpi_mach;
  75. void *mach_priv;
  76. bool soc_mclk;
  77. bool tdm_mode;
  78. };
  79. int acp_sofdsp_dai_links_create(struct snd_soc_card *card);
  80. int acp_legacy_dai_links_create(struct snd_soc_card *card);
  81. extern const struct dmi_system_id acp_quirk_table[];
  82. static inline int acp_ops_probe(struct snd_soc_card *card)
  83. {
  84. int ret = 1;
  85. struct acp_card_drvdata *priv = acp_get_drvdata(card);
  86. if (ACP_OPS(priv, probe))
  87. ret = ACP_OPS(priv, probe)(card);
  88. return ret;
  89. }
  90. static inline int acp_ops_configure_link(struct snd_soc_card *card,
  91. struct snd_soc_dai_link *dai_link)
  92. {
  93. int ret = 1;
  94. struct acp_card_drvdata *priv = acp_get_drvdata(card);
  95. if (ACP_OPS(priv, configure_link))
  96. ret = ACP_OPS(priv, configure_link)(card, dai_link);
  97. return ret;
  98. }
  99. static inline int acp_ops_configure_widgets(struct snd_soc_card *card)
  100. {
  101. int ret = 1;
  102. struct acp_card_drvdata *priv = acp_get_drvdata(card);
  103. if (ACP_OPS(priv, configure_widgets))
  104. ret = ACP_OPS(priv, configure_widgets)(card);
  105. return ret;
  106. }
  107. static inline int acp_ops_suspend_pre(struct snd_soc_card *card)
  108. {
  109. int ret = 1;
  110. struct acp_card_drvdata *priv = acp_get_drvdata(card);
  111. if (ACP_OPS(priv, suspend_pre))
  112. ret = ACP_OPS(priv, suspend_pre)(card);
  113. return ret;
  114. }
  115. static inline int acp_ops_resume_post(struct snd_soc_card *card)
  116. {
  117. int ret = 1;
  118. struct acp_card_drvdata *priv = acp_get_drvdata(card);
  119. if (ACP_OPS(priv, resume_post))
  120. ret = ACP_OPS(priv, resume_post)(card);
  121. return ret;
  122. }
  123. #endif