msm_common.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #ifndef _MSM_COMMON_H_
  7. #define _MSM_COMMON_H_
  8. #include <sound/soc.h>
  9. #include <sound/pcm.h>
  10. enum {
  11. MI2S = 0,
  12. TDM,
  13. AUXPCM,
  14. };
  15. enum {
  16. PRI_MI2S_TDM_AUXPCM = 0,
  17. SEC_MI2S_TDM_AUXPCM,
  18. TER_MI2S_TDM_AUXPCM,
  19. QUAT_MI2S_TDM_AUXPCM,
  20. QUIN_MI2S_TDM_AUXPCM,
  21. SEN_MI2S_TDM_AUXPCM,
  22. SEP_MI2S_TDM_AUXPCM,
  23. MI2S_TDM_AUXPCM_MAX,
  24. };
  25. typedef enum snd_card_status_t {
  26. SND_CARD_STATUS_OFFLINE = 0,
  27. SND_CARD_STATUS_ONLINE = 1,
  28. } snd_card_status_t;
  29. struct msm_common_pdata {
  30. uint8_t *aud_dev_state;
  31. struct kobject aud_dev_kobj;
  32. struct mutex aud_dev_lock;
  33. uint32_t num_aud_devs;
  34. struct device_node *mi2s_gpio_p[MI2S_TDM_AUXPCM_MAX];
  35. struct mutex lock[MI2S_TDM_AUXPCM_MAX];
  36. u32 tdm_max_slots; /* Max TDM slots used */
  37. atomic_t mi2s_gpio_ref_cnt[MI2S_TDM_AUXPCM_MAX];
  38. atomic_t lpass_intf_clk_ref_cnt[MI2S_TDM_AUXPCM_MAX];
  39. atomic_t lpass_audio_hw_vote_ref_cnt;
  40. struct clk *lpass_audio_hw_vote;
  41. uint32_t is_audio_hw_vote_required[MI2S_TDM_AUXPCM_MAX];
  42. uint32_t tdm_clk_attribute[MI2S_TDM_AUXPCM_MAX];
  43. uint32_t mi2s_clk_attribute[MI2S_TDM_AUXPCM_MAX];
  44. };
  45. int snd_card_notify_user(snd_card_status_t card_status);
  46. int snd_card_set_card_status(snd_card_status_t card_status);
  47. struct msm_common_pdata *msm_common_get_pdata(struct snd_soc_card *card);
  48. void msm_common_set_pdata(struct snd_soc_card *card,
  49. struct msm_common_pdata *pdata);
  50. int snd_card_sysfs_init(void);
  51. int msm_common_snd_hw_params(struct snd_pcm_substream *substream,
  52. struct snd_pcm_hw_params *params);
  53. int msm_common_snd_startup(struct snd_pcm_substream *substream);
  54. void msm_common_snd_shutdown(struct snd_pcm_substream *substream);
  55. int msm_common_snd_init(struct platform_device *pdev,
  56. struct snd_soc_card *card);
  57. void msm_common_snd_deinit(struct msm_common_pdata *pdata);
  58. int msm_common_dai_link_init(struct snd_soc_pcm_runtime *rtd);
  59. #endif