Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
bd8a936
--- patches from sdm670 ---
May 1, 2026
ac6db3f
ASoC: qdsp6: Add shared session management for q6voice services
stephan-gh Apr 28, 2020
ff434d9
ASoC: qdsp6: Add driver for Q6 Multimode Voice Manager (q6mvm)
stephan-gh Apr 28, 2020
d0cd196
ASoC: qdsp6: Add driver for Q6 Core Voice Processor (q6cvp)
stephan-gh Apr 28, 2020
0cf4a44
ASoC: qdsp6: Add driver for Q6 Core Voice Stream (q6cvs)
stephan-gh Apr 28, 2020
35da5bc
ASoC: qdsp6: Add voice call functionality in Q6 Voice driver
stephan-gh Apr 28, 2020
b4b39da
ASoC: qdsp6: Add Q6 Voice DAI driver (v2.1)
stephan-gh Apr 28, 2020
ac0e100
ASoC: qdsp6: q6voice: Add getter/setter for rx and tx ports
vknecht Sep 28, 2021
419a296
ASoC: qdsp6: q6voice-dai: Add controls for voice rx and tx ports
vknecht Oct 6, 2021
952e2cd
ASoC: qdsp6: q6voice-dai: Add VoiceMMode1 DAI
affenull2345 Apr 20, 2023
22bc2e2
ASoC: qdsp6: q6afe: pass tdm ctrl_sync_data_delay from config
flamingradian Jun 25, 2024
128633b
ASoC: qdsp6: q6afe-dai: configure tdm data delay from device tree
flamingradian Jun 25, 2024
943bf97
ASoC: qdsp6: q6core: add support for registering topologies
flamingradian Oct 8, 2024
6f84fd7
ASoC: qdsp6: q6cvp: add commands in cvd 2.3
flamingradian Sep 12, 2023
5317226
ASoC: qdsp6: q6voice: add cvd 2.3 initialization sequence
flamingradian Sep 12, 2023
c173ca1
ASoC: qdsp6: q6cvp: add topology ID parameters to session functions
flamingradian Oct 8, 2024
0e05c33
ASoC: qdsp6: q6voice: pass new topology property to q6cvp
flamingradian Oct 8, 2024
854a137
ASoC: qdsp6: q6voice-dai: add ALSA controls for the topology ID
flamingradian Oct 8, 2024
6dd9df2
ASoC: qdsp6: q6voice: Constify APR callback response data
flamingradian Mar 7, 2026
5eb95f5
ASoC: qdsp6: q6voice: rename snd_soc_dapm_kcontrol_dapm() to snd_soc_…
flamingradian Apr 27, 2026
ddc906c
--- sc7280 related patches ---
May 1, 2026
4904562
ASoC: qdsp6: q6voice-dai: add routes for TX_CODEC_DMA_TX to VOICEMMODE1
Feb 3, 2026
c719bd2
ASoC: qdsp6: q6voice-dai: add routes for Senary MI2S
valpackett Apr 7, 2026
de32785
ASoC: qdsp6: q6voice: default to NONE topology for TX
valpackett Apr 20, 2026
ecd66e3
arm64: dts: qcom: kodiak: add q6voice related nodes
Feb 2, 2026
0c96d8a
arm64: dts: qcom: qcm6490-fairphone-fp5: add q6voice related nodes
Feb 2, 2026
6f21609
Remove power-on mute code
chrisduerr Aug 10, 2026
0215430
ASoC: codecs: aw88261: expose hardware mute control
f-izzo Aug 16, 2026
8a68b8c
arm64: dts: qcom: sm7325-motorola-dubai: add q6voice related nodes
f-izzo Aug 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions arch/arm64/boot/dts/qcom/kodiak.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -4550,6 +4550,35 @@
#sound-dai-cells = <0>;
};
};

q6mvm: apr-service@9 {
compatible = "qcom,q6mvm";
reg = <APR_SVC_ADSP_MVM>;
qcom,protection-domain = "avs/audio", "msm/adsp/audio_pd";
status = "disabled";

q6voicedai: dais {
compatible = "qcom,q6voice-dais";
#address-cells = <1>;
#size-cells = <0>;
#sound-dai-cells = <1>;
};
};

q6cvs: apr-service@a {
compatible = "qcom,q6cvs";
reg = <APR_SVC_ADSP_CVS>;
qcom,protection-domain = "avs/audio", "msm/adsp/audio_pd";
status = "disabled";
};

q6cvp: apr-service@b {
compatible = "qcom,q6cvp";
reg = <APR_SVC_ADSP_CVP>;
qcom,protection-domain = "avs/audio", "msm/adsp/audio_pd";
status = "disabled";
};

};

fastrpc {
Expand Down
41 changes: 41 additions & 0 deletions arch/arm64/boot/dts/qcom/qcm6490-fairphone-fp5.dts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
#include <dt-bindings/sound/qcom,q6asm.h>
#include <dt-bindings/sound/qcom,q6dsp-lpass-ports.h>
#include <dt-bindings/sound/qcom,q6voice.h>

#include "kodiak.dtsi"
#include "pm7250b.dtsi"
#include "pm7325.dtsi"
Expand Down Expand Up @@ -1298,7 +1300,38 @@
status = "okay";
};

&q6cvp {
status = "okay";
};

&q6cvs {
status = "okay";
};

&q6mvm {
status = "okay";
};


&q6voicedai {
dai@1 {
reg = <VOICEMMODE1>;
};
};

&q6afedai {
dai@104 {
reg = <DISPLAY_PORT_RX>;
};

dai@113 {
reg = <RX_CODEC_DMA_RX_0>;
};

dai@120 {
reg = <TX_CODEC_DMA_TX_3>;
};

dai@127 {
reg = <QUINARY_MI2S_RX>;
qcom,sd-lines = <0>;
Expand Down Expand Up @@ -1483,6 +1516,14 @@
sound-dai = <&q6routing>;
};
};

voicemmode1-dai-link {
link-name = "VoiceMMode1";
cpu {
sound-dai = <&q6voicedai VOICEMMODE1>;
};
};

};

&spi13 {
Expand Down
27 changes: 27 additions & 0 deletions arch/arm64/boot/dts/qcom/sm7325-motorola-dubai-common.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
#include <dt-bindings/sound/qcom,q6afe.h>
#include <dt-bindings/sound/qcom,q6asm.h>
#include <dt-bindings/sound/qcom,q6voice.h>

#include "sm7325.dtsi"
#include "pm7325.dtsi"
Expand Down Expand Up @@ -1325,6 +1326,24 @@
};
};

&q6cvp {
status = "okay";
};

&q6cvs {
status = "okay";
};

&q6mvm {
status = "okay";
};

&q6voicedai {
dai@1 {
reg = <VOICEMMODE1>;
};
};

&qfprom {
vcc-supply = <&vdd_qfprom>;
};
Expand Down Expand Up @@ -1493,6 +1512,14 @@
};
};

voicemmode1-dai-link {
link-name = "VoiceMMode1";

cpu {
sound-dai = <&q6voicedai VOICEMMODE1>;
};
};

wcd-capture-dai-link {
link-name = "WCD Capture";

Expand Down
8 changes: 8 additions & 0 deletions include/dt-bindings/sound/qcom,q6voice.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __DT_BINDINGS_Q6_VOICE_H__
#define __DT_BINDINGS_Q6_VOICE_H__

#define CS_VOICE 0
#define VOICEMMODE1 1

#endif /* __DT_BINDINGS_Q6_VOICE_H__ */
41 changes: 30 additions & 11 deletions sound/soc/codecs/aw88261.c
Original file line number Diff line number Diff line change
Expand Up @@ -417,17 +417,7 @@ static int aw88261_dev_reg_update(struct aw88261 *aw88261,
break;
}

ret = aw88261_dev_set_vcalb(aw_dev);
if (ret)
return ret;

if (aw_dev->prof_cur != aw_dev->prof_index)
vol_desc->ctl_volume = 0;

/* keep min volume */
aw88261_dev_set_volume(aw_dev, vol_desc->mute_volume);

return ret;
return aw88261_dev_set_vcalb(aw_dev);
}

static int aw88261_dev_get_prof_name(struct aw_device *aw_dev, int index, char **prof_name)
Expand Down Expand Up @@ -1016,6 +1006,33 @@ static int aw88261_volume_set(struct snd_kcontrol *kcontrol,
return 0;
}

static int aw88261_mute_get(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
struct snd_soc_component *codec = snd_kcontrol_chip(kcontrol);
struct aw88261 *aw88261 = snd_soc_component_get_drvdata(codec);

ucontrol->value.integer.value[0] = !aw88261->mute_st;
return 0;
}

static int aw88261_mute_put(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
struct snd_soc_component *codec = snd_kcontrol_chip(kcontrol);
struct aw88261 *aw88261 = snd_soc_component_get_drvdata(codec);
bool mute = !ucontrol->value.integer.value[0];

if (aw88261->mute_st == mute)
return 0;

aw88261->mute_st = mute;
if (aw88261->aw_pa->status == AW88261_DEV_PW_ON)
aw88261_dev_mute(aw88261->aw_pa, mute);

return 1;
}

/*
* The field contains 4 bits in units of 6dB + 6 bits in units of 0.125dB
* which is too precise for TLV (!) so we have to multiply the scale by 2.
Expand All @@ -1028,6 +1045,8 @@ static const struct snd_kcontrol_new aw88261_controls[] = {
SOC_SINGLE_EXT_TLV("PCM Playback Volume", AW88261_SYSCTRL2_REG,
6, AW88261_CTL_MAX_VOL, 1,
aw88261_volume_get, aw88261_volume_set, volume_tlv),
SOC_SINGLE_EXT("Playback Switch", 0, 0, 1, 0,
aw88261_mute_get, aw88261_mute_put),
AW88261_PROFILE_EXT("Profile Set", aw88261_profile_info,
aw88261_profile_get, aw88261_profile_set),
};
Expand Down
8 changes: 8 additions & 0 deletions sound/soc/qcom/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,14 @@ config SND_SOC_QDSP6
audio drivers. This includes q6asm, q6adm,
q6afe interfaces to DSP using apr.

config SND_SOC_QDSP6_Q6VOICE_DAI
tristate

config SND_SOC_QDSP6_Q6VOICE
tristate "QDSP6 Q6Voice audio driver"
depends on SND_SOC_QDSP6
select SND_SOC_QDSP6_Q6VOICE_DAI

config SND_SOC_MSM8996
tristate "SoC Machine driver for MSM8996 and APQ8096 boards"
depends on QCOM_APR
Expand Down
3 changes: 3 additions & 0 deletions sound/soc/qcom/qdsp6/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ obj-$(CONFIG_SND_SOC_QDSP6_ADM) += q6adm.o
obj-$(CONFIG_SND_SOC_QDSP6_ROUTING) += q6routing.o
obj-$(CONFIG_SND_SOC_QDSP6_ASM) += q6asm.o
obj-$(CONFIG_SND_SOC_QDSP6_ASM_DAI) += q6asm-dai.o
obj-$(CONFIG_SND_SOC_QDSP6_Q6VOICE) += q6cvp.o q6cvs.o q6mvm.o q6voice-common.o
obj-$(CONFIG_SND_SOC_QDSP6_Q6VOICE) += q6voice.o
obj-$(CONFIG_SND_SOC_QDSP6_Q6VOICE_DAI) += q6voice-dai.o

obj-$(CONFIG_SND_SOC_QDSP6_APM) += snd-q6apm.o
obj-$(CONFIG_SND_SOC_QDSP6_APM_DAI) += q6apm-dai.o
Expand Down
1 change: 1 addition & 0 deletions sound/soc/qcom/qdsp6/q6afe-dai.c
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,7 @@ static int q6tdm_hw_params(struct snd_pcm_substream *substream,
tdm->data_align_type = dai_data->priv[dai->id].data_align;
tdm->sync_src = dai_data->priv[dai->id].sync_src;
tdm->sync_mode = dai_data->priv[dai->id].sync_mode;
tdm->data_delay = dai_data->priv[dai->id].data_delay;

return 0;
}
Expand Down
1 change: 1 addition & 0 deletions sound/soc/qcom/qdsp6/q6afe.c
Original file line number Diff line number Diff line change
Expand Up @@ -1366,6 +1366,7 @@ void q6afe_tdm_port_prepare(struct q6afe_port *port,
pcfg->tdm_cfg.sync_mode = cfg->sync_mode;
pcfg->tdm_cfg.sync_src = cfg->sync_src;
pcfg->tdm_cfg.nslots_per_frame = cfg->nslots_per_frame;
pcfg->tdm_cfg.ctrl_sync_data_delay = cfg->data_delay;

pcfg->tdm_cfg.slot_width = cfg->slot_width;
pcfg->tdm_cfg.slot_mask = cfg->slot_mask;
Expand Down
1 change: 1 addition & 0 deletions sound/soc/qcom/qdsp6/q6afe.h
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ struct q6afe_tdm_cfg {
u16 sync_mode;
u16 sync_src;
u16 nslots_per_frame;
u16 data_delay;
u16 slot_width;
u16 slot_mask;
u32 data_align_type;
Expand Down
Loading