usb_offload_utils.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (c) 2022-2025 Qualcomm Innovation Center, Inc. All rights reserved.
  4. */
  5. #include <dt-bindings/sound/qcom,q6afe.h>
  6. #include <linux/module.h>
  7. #include <sound/jack.h>
  8. #include <sound/soc-usb.h>
  9. #include "usb_offload_utils.h"
  10. int qcom_snd_usb_offload_jack_setup(struct snd_soc_pcm_runtime *rtd,
  11. struct snd_soc_jack *jack, bool *jack_setup)
  12. {
  13. struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
  14. struct snd_soc_dai *codec_dai = snd_soc_rtd_to_codec(rtd, 0);
  15. int ret = 0;
  16. if (cpu_dai->id != USB_RX)
  17. return -EINVAL;
  18. if (!*jack_setup) {
  19. ret = snd_soc_usb_setup_offload_jack(codec_dai->component, jack);
  20. if (ret)
  21. return ret;
  22. }
  23. *jack_setup = true;
  24. return 0;
  25. }
  26. EXPORT_SYMBOL_GPL(qcom_snd_usb_offload_jack_setup);
  27. int qcom_snd_usb_offload_jack_remove(struct snd_soc_pcm_runtime *rtd,
  28. bool *jack_setup)
  29. {
  30. struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
  31. struct snd_soc_dai *codec_dai = snd_soc_rtd_to_codec(rtd, 0);
  32. int ret = 0;
  33. if (cpu_dai->id != USB_RX)
  34. return -EINVAL;
  35. if (*jack_setup) {
  36. ret = snd_soc_component_set_jack(codec_dai->component, NULL, NULL);
  37. if (ret)
  38. return ret;
  39. }
  40. *jack_setup = false;
  41. return 0;
  42. }
  43. EXPORT_SYMBOL_GPL(qcom_snd_usb_offload_jack_remove);
  44. MODULE_DESCRIPTION("ASoC Q6 USB offload controls");
  45. MODULE_LICENSE("GPL");