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
10#include "usb_offload_utils.h"
11
12int qcom_snd_usb_offload_jack_setup(struct snd_soc_pcm_runtime *rtd,
13 struct snd_soc_jack *jack, bool *jack_setup)
14{
15 struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
16 struct snd_soc_dai *codec_dai = snd_soc_rtd_to_codec(rtd, 0);
17 int ret = 0;
18
19 if (cpu_dai->id != USB_RX)
20 return -EINVAL;
21
22 if (!*jack_setup) {
23 ret = snd_soc_usb_setup_offload_jack(component: codec_dai->component, jack);
24 if (ret)
25 return ret;
26 }
27
28 *jack_setup = true;
29
30 return 0;
31}
32EXPORT_SYMBOL_GPL(qcom_snd_usb_offload_jack_setup);
33
34int qcom_snd_usb_offload_jack_remove(struct snd_soc_pcm_runtime *rtd,
35 bool *jack_setup)
36{
37 struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
38 struct snd_soc_dai *codec_dai = snd_soc_rtd_to_codec(rtd, 0);
39 int ret = 0;
40
41 if (cpu_dai->id != USB_RX)
42 return -EINVAL;
43
44 if (*jack_setup) {
45 ret = snd_soc_component_set_jack(component: codec_dai->component, NULL, NULL);
46 if (ret)
47 return ret;
48 }
49
50 *jack_setup = false;
51
52 return 0;
53}
54EXPORT_SYMBOL_GPL(qcom_snd_usb_offload_jack_remove);
55MODULE_DESCRIPTION("ASoC Q6 USB offload controls");
56MODULE_LICENSE("GPL");
57

source code of linux/sound/soc/qcom/usb_offload_utils.c