soc-card.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /* SPDX-License-Identifier: GPL-2.0
  2. *
  3. * soc-card.h
  4. *
  5. * Copyright (C) 2019 Renesas Electronics Corp.
  6. * Kuninori Morimoto <[email protected]>
  7. */
  8. #ifndef __SOC_CARD_H
  9. #define __SOC_CARD_H
  10. enum snd_soc_card_subclass {
  11. SND_SOC_CARD_CLASS_ROOT = 0,
  12. SND_SOC_CARD_CLASS_RUNTIME = 1,
  13. };
  14. static inline void snd_soc_card_mutex_lock_root(struct snd_soc_card *card)
  15. {
  16. mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_ROOT);
  17. }
  18. static inline void snd_soc_card_mutex_lock(struct snd_soc_card *card)
  19. {
  20. mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_RUNTIME);
  21. }
  22. static inline void snd_soc_card_mutex_unlock(struct snd_soc_card *card)
  23. {
  24. mutex_unlock(&card->mutex);
  25. }
  26. struct snd_kcontrol *snd_soc_card_get_kcontrol(struct snd_soc_card *soc_card,
  27. const char *name);
  28. int snd_soc_card_jack_new(struct snd_soc_card *card, const char *id, int type,
  29. struct snd_soc_jack *jack);
  30. int snd_soc_card_jack_new_pins(struct snd_soc_card *card, const char *id,
  31. int type, struct snd_soc_jack *jack,
  32. struct snd_soc_jack_pin *pins,
  33. unsigned int num_pins);
  34. int snd_soc_card_suspend_pre(struct snd_soc_card *card);
  35. int snd_soc_card_suspend_post(struct snd_soc_card *card);
  36. int snd_soc_card_resume_pre(struct snd_soc_card *card);
  37. int snd_soc_card_resume_post(struct snd_soc_card *card);
  38. int snd_soc_card_probe(struct snd_soc_card *card);
  39. int snd_soc_card_late_probe(struct snd_soc_card *card);
  40. void snd_soc_card_fixup_controls(struct snd_soc_card *card);
  41. int snd_soc_card_remove(struct snd_soc_card *card);
  42. int snd_soc_card_set_bias_level(struct snd_soc_card *card,
  43. struct snd_soc_dapm_context *dapm,
  44. enum snd_soc_bias_level level);
  45. int snd_soc_card_set_bias_level_post(struct snd_soc_card *card,
  46. struct snd_soc_dapm_context *dapm,
  47. enum snd_soc_bias_level level);
  48. int snd_soc_card_add_dai_link(struct snd_soc_card *card,
  49. struct snd_soc_dai_link *dai_link);
  50. void snd_soc_card_remove_dai_link(struct snd_soc_card *card,
  51. struct snd_soc_dai_link *dai_link);
  52. /* device driver data */
  53. static inline void snd_soc_card_set_drvdata(struct snd_soc_card *card,
  54. void *data)
  55. {
  56. card->drvdata = data;
  57. }
  58. static inline void *snd_soc_card_get_drvdata(struct snd_soc_card *card)
  59. {
  60. return card->drvdata;
  61. }
  62. static inline
  63. struct snd_soc_dai *snd_soc_card_get_codec_dai(struct snd_soc_card *card,
  64. const char *dai_name)
  65. {
  66. struct snd_soc_pcm_runtime *rtd;
  67. for_each_card_rtds(card, rtd) {
  68. if (!strcmp(asoc_rtd_to_codec(rtd, 0)->name, dai_name))
  69. return asoc_rtd_to_codec(rtd, 0);
  70. }
  71. return NULL;
  72. }
  73. #endif /* __SOC_CARD_H */