Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
de22dc7
ASoC: doc: use SND_SOC_DAILINK_xxx() macro
morimoto Mar 5, 2025
b92bc4d
ASoC: soc-pcm: merge soc_pcm_hw_update_format/subformat()
morimoto Mar 5, 2025
927e6be
ASoC: rt1320: set wake_capable = 0 explicitly
bardliao Mar 5, 2025
8b36447
ASoC: Intel: adl: add 2xrt1316 audio configuration
bardliao Mar 5, 2025
0246734
ASoC: Intel: soc-acpi-intel-ptl-match: add rt712_vb_l3_rt1320_l2 support
ujfalusi Mar 5, 2025
ffe450c
ASoC: Intel: soc-acpi-intel-ptl-match: add rt713_vb_l3_rt1320_l12 sup…
ujfalusi Mar 5, 2025
65e246d
ASoC: sdw_utils: add mic and amp dais to 0xaaaa codec
bardliao Mar 5, 2025
e1a0657
ASoC: Intel: add multi-function SDW mockup codec match
bardliao Mar 5, 2025
4384057
ASoC: Intel: soc-acpi-intel-lnl-match: add sdw multi function mockup …
bardliao Mar 5, 2025
c7a6a74
ASoC: Intel: soc-acpi-intel-ptl-match: add sdw multi function mockup …
bardliao Mar 5, 2025
1ff0752
ASoC: Intel: soc-acpi-intel-lnl-match: add cs42l43 6x cs35l56 support
bardliao Mar 5, 2025
7172d9a
ASoC: Intel: soc-acpi-intel-ptl-match: add cs42l43 6x cs35l56 support
bardliao Mar 5, 2025
0eba2a7
ASoC: ops: Consistently treat platform_max as control value
charleskeepax Feb 28, 2025
a1462fb
ASoC: Intel: boards: updates for 6.15
broonie Mar 5, 2025
c6141ba
ASoC: Merge up fixes
broonie Mar 5, 2025
269b844
ASoC: dapm: Fix changes to DECLARE_ADAU17X1_DSP_MUX_CTRL
charleskeepax Mar 6, 2025
2c2eadd
ASoC: cs42l43: convert to SYSTEM_SLEEP_PM_OPS
arndb Mar 5, 2025
e26f1cf
ASoC: cs42l43: Fix maximum ADC Volume
charleskeepax Mar 6, 2025
7a2ff05
ASoC: soc-pcm: reuse dpcm_state_string()
morimoto Mar 6, 2025
5d5eceb
ASoC: soc-dai: add snd_soc_dai_mute_is_ctrled_at_trigger()
morimoto Mar 6, 2025
e3cd33a
ALSA: seq: Improve data consistency at polling
tiwai Mar 7, 2025
ef749c8
ALSA: seq: Avoid client data changes during proc reads
tiwai Mar 7, 2025
0704a15
ASoC: amd: yc: Support mic on another Lenovo ThinkPad E16 Gen 2 model
ThomasMiz Mar 8, 2025
6982333
ASoC: SOF: Intel: mtl: Split up dsp_ops setup code
ujfalusi Mar 7, 2025
0d2d276
ASoC: SOF: Intel: lnl/ptl: Only set dsp_ops which differs from MTL
ujfalusi Mar 7, 2025
8041622
ASoC: SOF: Intel: mtl: Stop exporting dsp_ops callback functions
ujfalusi Mar 7, 2025
8aeb7d2
ASoC: SOF: Intel: Create ptl.c as placeholder for Panther Lake features
ujfalusi Mar 7, 2025
eea84a7
ASoC: SOF: ipc4: Add support for Intel HW managed mic privacy messaging
ujfalusi Mar 7, 2025
0978e82
ASoC: SOF: Intel: hda-mlink: Add support for mic privacy in VS SHIM r…
ujfalusi Mar 7, 2025
a0db661
ASoC: SOF: hda/shim: Add callbacks to handle mic privacy change for sdw
ujfalusi Mar 7, 2025
4a43c32
ASoC: SOF: Intel: ptl: Add support for mic privacy
ujfalusi Mar 7, 2025
a8fed0b
ASoC: dt-bindings: add regulator support to dmic codec
Mar 6, 2025
d3321a2
ASoC: dmic: add regulator support
Mar 6, 2025
db91ad8
ASoC: dt-bindings: fsl,imx-asrc: Document audio graph port
TE-N-ShengjiuWang Mar 6, 2025
1ec3f1d
ASoC: dmic: add regulator support
broonie Mar 9, 2025
8a7e7a0
ASoC: SOF: Intel: Add support for ACE3+ mic privacy
broonie Mar 9, 2025
8ecfae0
Merge remote-tracking branch 'asoc/for-6.15' into asoc-next
broonie Mar 10, 2025
3641c63
Documentation: driver: add SoundWire BRA description
plbossart Feb 27, 2025
3e3ae0c
soundwire: cadence: add BTP support for DP0
plbossart Feb 27, 2025
df896e4
soundwire: extend sdw_stream_type to BPT
plbossart Feb 27, 2025
dc90bbe
soundwire: stream: extend sdw_alloc_stream() to take 'type' parameter
plbossart Feb 27, 2025
00f5719
soundwire: stream: special-case the bus compute_params() routine
plbossart Feb 27, 2025
b422b72
soundwire: stream: reuse existing code for BPT stream
plbossart Feb 27, 2025
9a75628
soundwire: bus: add send_async/wait APIs for BPT protocol
plbossart Feb 27, 2025
8e4a239
soundwire: bus: add bpt_stream pointer
plbossart Feb 27, 2025
8eb5d7a
soundwire: cadence: add BTP/BRA helpers to format data
plbossart Feb 27, 2025
7f17a73
soundwire: intel_auxdevice: add indirection for BPT send_async/wait
plbossart Feb 27, 2025
5d5cb86
ASoC: SOF: Intel: hda-sdw-bpt: add helpers for SoundWire BPT DMA
plbossart Feb 27, 2025
5cdc237
soundwire: intel: add BPT context definition
plbossart Feb 27, 2025
4c1ce9f
soundwire: intel_ace2x: add BPT send_async/wait callbacks
plbossart Feb 27, 2025
3394e2b
ASoC: SOF: Intel: hda-sdw-bpt: add CHAIN_DMA support
bardliao Feb 27, 2025
bb5cb09
soundwire: debugfs: add interface for BPT/BRA transfers
plbossart Feb 27, 2025
9452422
ASoC: rt711-sdca: add DP0 support
plbossart Feb 27, 2025
87552ee
Merge remote-tracking branch 'takashi/for-next' into sound/upstream-2…
bardliao Mar 10, 2025
7fc61a0
Merge remote-tracking branch 'soundwire/next' into sound/upstream-202…
bardliao Mar 10, 2025
464014f
Merge remote-tracking branch 'regmap/for-next' into sound/upstream-20…
bardliao Mar 10, 2025
dae3134
Merge branch 'sound/upstream-20250310' into merge/sound-upstream-2025…
bardliao Mar 10, 2025
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
3 changes: 3 additions & 0 deletions Documentation/devicetree/bindings/sound/dmic-codec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ properties:
'#sound-dai-cells':
const: 0

vref-supply:
description: Phandle to the digital microphone reference supply

dmicen-gpios:
description: GPIO specifier for DMIC to control start and stop
maxItems: 1
Expand Down
12 changes: 12 additions & 0 deletions Documentation/devicetree/bindings/sound/fsl,imx-asrc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,10 @@ properties:
power-domains:
maxItems: 1

port:
$ref: audio-graph-port.yaml#
unevaluatedProperties: false

fsl,asrc-rate:
$ref: /schemas/types.yaml#/definitions/uint32
description: The mutual sample rate used by DPCM Back Ends
Expand Down Expand Up @@ -174,4 +178,12 @@ examples:
"txa", "txb", "txc";
fsl,asrc-rate = <48000>;
fsl,asrc-width = <16>;

port {
playback-only;

asrc_endpoint: endpoint {
remote-endpoint = <&fe00_ep>;
};
};
};
1 change: 0 additions & 1 deletion Documentation/driver-api/soundwire/bra_cadence.rst
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,3 @@ write command followed by a read command.
+ | | | pad | RD Data CRC |
+ 0 | 1 | | pad | RD Ftr Rsp |
+---+---+--------+---------------+---------------+

19 changes: 11 additions & 8 deletions Documentation/sound/soc/dpcm.rst
Original file line number Diff line number Diff line change
Expand Up @@ -147,14 +147,16 @@ For the example above we have to define 4 FE DAI links and 6 BE DAI links. The
FE DAI links are defined as follows :-
::

SND_SOC_DAILINK_DEFS(pcm0,
DAILINK_COMP_ARRAY(COMP_CPU("System Pin")),
DAILINK_COMP_ARRAY(COMP_DUMMY()),
DAILINK_COMP_ARRAY(COMP_PLATFORM("dsp-audio")));

static struct snd_soc_dai_link machine_dais[] = {
{
.name = "PCM0 System",
.stream_name = "System Playback",
.cpu_dai_name = "System Pin",
.platform_name = "dsp-audio",
.codec_name = "snd-soc-dummy",
.codec_dai_name = "snd-soc-dummy-dai",
SND_SOC_DAILINK_REG(pcm0),
.dynamic = 1,
.trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST},
},
Expand All @@ -174,15 +176,16 @@ dynamic and will change depending on runtime config.
The BE DAIs are configured as follows :-
::

SND_SOC_DAILINK_DEFS(headset,
DAILINK_COMP_ARRAY(COMP_CPU("ssp-dai.0")),
DAILINK_COMP_ARRAY(COMP_CODEC("rt5640.0-001c", "rt5640-aif1")));

static struct snd_soc_dai_link machine_dais[] = {
.....< FE DAI links here >
{
.name = "Codec Headset",
.cpu_dai_name = "ssp-dai.0",
.platform_name = "snd-soc-dummy",
SND_SOC_DAILINK_REG(headset),
.no_pcm = 1,
.codec_name = "rt5640.0-001c",
.codec_dai_name = "rt5640-aif1",
.ignore_suspend = 1,
.ignore_pmdown_time = 1,
.be_hw_params_fixup = hswult_ssp0_fixup,
Expand Down
6 changes: 3 additions & 3 deletions drivers/soundwire/cadence_master.c
Original file line number Diff line number Diff line change
Expand Up @@ -2044,11 +2044,11 @@ static const u8 sdw_crc8_lookup_msb[CRC8_TABLE_SIZE] = {
#define SDW_CDNS_BRA_FOOTER_RESP 1 /* defined by MIPI */
#define SDW_CDNS_BRA_FOOTER_RESP_PAD 1 /* Cadence only */

#define SDW_CDNS_WRITE_PDI1_BUFFER_SIZE \
((SDW_CDNS_BRA_HDR_RESP + SDW_CDNS_BRA_HDR_RESP_PAD + \
#define SDW_CDNS_WRITE_PDI1_BUFFER_SIZE \
((SDW_CDNS_BRA_HDR_RESP + SDW_CDNS_BRA_HDR_RESP_PAD + \
SDW_CDNS_BRA_FOOTER_RESP + SDW_CDNS_BRA_FOOTER_RESP_PAD) * 2)

#define SDW_CDNS_READ_PDI0_BUFFER_SIZE \
#define SDW_CDNS_READ_PDI0_BUFFER_SIZE \
((SDW_CDNS_BRA_HDR + SDW_CDNS_BRA_HDR_CRC + SDW_CDNS_BRA_HDR_CRC_PAD) * 2)

static unsigned int sdw_cdns_bra_actual_data_size(unsigned int allocated_bytes_per_frame)
Expand Down
2 changes: 1 addition & 1 deletion include/sound/soc-dai.h
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ int snd_soc_dai_prepare(struct snd_soc_dai *dai,
/* Digital Audio Interface mute */
int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute,
int direction);

int snd_soc_dai_mute_is_ctrled_at_trigger(struct snd_soc_dai *dai);

int snd_soc_dai_get_channel_map(const struct snd_soc_dai *dai,
unsigned int *tx_num, unsigned int *tx_slot,
Expand Down
5 changes: 4 additions & 1 deletion include/sound/soc.h
Original file line number Diff line number Diff line change
Expand Up @@ -1223,7 +1223,10 @@ void snd_soc_close_delayed_work(struct snd_soc_pcm_runtime *rtd);

/* mixer control */
struct soc_mixer_control {
int min, max, platform_max;
/* Minimum and maximum specified as written to the hardware */
int min, max;
/* Limited maximum value specified as presented through the control */
int platform_max;
int reg, rreg;
unsigned int shift, rshift;
u32 num_channels;
Expand Down
7 changes: 3 additions & 4 deletions sound/core/seq/seq_clientmgr.c
Original file line number Diff line number Diff line change
Expand Up @@ -1136,8 +1136,7 @@ static __poll_t snd_seq_poll(struct file *file, poll_table * wait)
if (snd_seq_file_flags(file) & SNDRV_SEQ_LFLG_OUTPUT) {

/* check if data is available in the pool */
if (!snd_seq_write_pool_allocated(client) ||
snd_seq_pool_poll_wait(client->pool, file, wait))
if (snd_seq_pool_poll_wait(client->pool, file, wait))
mask |= EPOLLOUT | EPOLLWRNORM;
}

Expand Down Expand Up @@ -2572,8 +2571,6 @@ int snd_seq_kernel_client_write_poll(int clientid, struct file *file, poll_table
if (client == NULL)
return -ENXIO;

if (! snd_seq_write_pool_allocated(client))
return 1;
if (snd_seq_pool_poll_wait(client->pool, file, wait))
return 1;
return 0;
Expand Down Expand Up @@ -2715,6 +2712,7 @@ void snd_seq_info_clients_read(struct snd_info_entry *entry,
continue;
}

mutex_lock(&client->ioctl_mutex);
snd_iprintf(buffer, "Client %3d : \"%s\" [%s %s]\n",
c, client->name,
client->type == USER_CLIENT ? "User" : "Kernel",
Expand All @@ -2732,6 +2730,7 @@ void snd_seq_info_clients_read(struct snd_info_entry *entry,
snd_iprintf(buffer, " Input pool :\n");
snd_seq_info_pool(buffer, client->data.user.fifo->pool, " ");
}
mutex_unlock(&client->ioctl_mutex);
snd_seq_client_unlock(client);
}
}
Expand Down
1 change: 1 addition & 0 deletions sound/core/seq/seq_memory.c
Original file line number Diff line number Diff line change
Expand Up @@ -427,6 +427,7 @@ int snd_seq_pool_poll_wait(struct snd_seq_pool *pool, struct file *file,
poll_table *wait)
{
poll_wait(file, &pool->output_sleep, wait);
guard(spinlock_irq)(&pool->lock);
return snd_seq_output_ok(pool);
}

Expand Down
7 changes: 7 additions & 0 deletions sound/soc/amd/yc/acp6x-mach.c
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = {
DMI_MATCH(DMI_PRODUCT_NAME, "21M5"),
}
},
{
.driver_data = &acp6x_card,
.matches = {
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
DMI_MATCH(DMI_PRODUCT_NAME, "21M6"),
}
},
{
.driver_data = &acp6x_card,
.matches = {
Expand Down
10 changes: 4 additions & 6 deletions sound/soc/codecs/adau17x1.c
Original file line number Diff line number Diff line change
Expand Up @@ -254,13 +254,11 @@ static int adau17x1_dsp_mux_enum_get(struct snd_kcontrol *kcontrol,
}

#define DECLARE_ADAU17X1_DSP_MUX_CTRL(_name, _label, _stream, _text) \
const struct soc_enum _name##_enum = \
SOC_ENUM_SINGLE(SND_SOC_NOPM, _stream, \
ARRAY_SIZE(_text), _text); \
const struct snd_kcontrol_new _name = \
SOC_DAPM_ENUM_EXT(_label, _name##_enum, \
adau17x1_dsp_mux_enum_get, \
adau17x1_dsp_mux_enum_put)
SOC_ENUM_EXT(_label, (const struct soc_enum)\
SOC_ENUM_SINGLE(SND_SOC_NOPM, _stream, \
ARRAY_SIZE(_text), _text), \
adau17x1_dsp_mux_enum_get, adau17x1_dsp_mux_enum_put)

static const char * const adau17x1_dac_mux_text[] = {
"DSP",
Expand Down
4 changes: 2 additions & 2 deletions sound/soc/codecs/cs42l43.c
Original file line number Diff line number Diff line change
Expand Up @@ -1146,7 +1146,7 @@ static const struct snd_kcontrol_new cs42l43_controls[] = {

SOC_DOUBLE_R_SX_TLV("ADC Volume", CS42L43_ADC_B_CTRL1, CS42L43_ADC_B_CTRL2,
CS42L43_ADC_PGA_GAIN_SHIFT,
0xF, 5, cs42l43_adc_tlv),
0xF, 4, cs42l43_adc_tlv),

SOC_DOUBLE("PDM1 Invert Switch", CS42L43_DMIC_PDM_CTRL,
CS42L43_PDM1L_INV_SHIFT, CS42L43_PDM1R_INV_SHIFT, 1, 0),
Expand Down Expand Up @@ -2417,7 +2417,7 @@ static int cs42l43_codec_runtime_force_suspend(struct device *dev)

static const struct dev_pm_ops cs42l43_codec_pm_ops = {
RUNTIME_PM_OPS(NULL, cs42l43_codec_runtime_resume, NULL)
SET_SYSTEM_SLEEP_PM_OPS(cs42l43_codec_runtime_force_suspend, pm_runtime_force_resume)
SYSTEM_SLEEP_PM_OPS(cs42l43_codec_runtime_force_suspend, pm_runtime_force_resume)
};

static const struct platform_device_id cs42l43_codec_id_table[] = {
Expand Down
19 changes: 18 additions & 1 deletion sound/soc/codecs/dmic.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <linux/gpio.h>
#include <linux/gpio/consumer.h>
#include <linux/platform_device.h>
#include <linux/regulator/consumer.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <sound/core.h>
Expand All @@ -25,6 +26,7 @@ module_param(wakeup_delay, uint, 0644);

struct dmic {
struct gpio_desc *gpio_en;
struct regulator *vref;
int wakeup_delay;
/* Delay after DMIC mode switch */
int modeswitch_delay;
Expand Down Expand Up @@ -55,22 +57,33 @@ static int dmic_aif_event(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *kcontrol, int event) {
struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
struct dmic *dmic = snd_soc_component_get_drvdata(component);
int ret = 0;

switch (event) {
case SND_SOC_DAPM_POST_PMU:
if (dmic->gpio_en)
gpiod_set_value_cansleep(dmic->gpio_en, 1);

if (dmic->vref) {
ret = regulator_enable(dmic->vref);
if (ret)
return ret;
}

if (dmic->wakeup_delay)
msleep(dmic->wakeup_delay);
break;
case SND_SOC_DAPM_POST_PMD:
if (dmic->gpio_en)
gpiod_set_value_cansleep(dmic->gpio_en, 0);

if (dmic->vref)
ret = regulator_disable(dmic->vref);

break;
}

return 0;
return ret;
}

static struct snd_soc_dai_driver dmic_dai = {
Expand Down Expand Up @@ -100,6 +113,10 @@ static int dmic_component_probe(struct snd_soc_component *component)
if (!dmic)
return -ENOMEM;

dmic->vref = devm_regulator_get_optional(component->dev, "vref");
if (IS_ERR(dmic->vref) && PTR_ERR(dmic->vref) != -ENODEV)
return dev_err_probe(component->dev, PTR_ERR(dmic->vref), "Failed to get vref\n");

dmic->gpio_en = devm_gpiod_get_optional(component->dev,
"dmicen", GPIOD_OUT_LOW);
if (IS_ERR(dmic->gpio_en))
Expand Down
12 changes: 10 additions & 2 deletions sound/soc/soc-dai.c
Original file line number Diff line number Diff line change
Expand Up @@ -364,6 +364,14 @@ int snd_soc_dai_prepare(struct snd_soc_dai *dai,
}
EXPORT_SYMBOL_GPL(snd_soc_dai_prepare);

int snd_soc_dai_mute_is_ctrled_at_trigger(struct snd_soc_dai *dai)
{
if (dai->driver->ops)
return dai->driver->ops->mute_unmute_on_trigger;

return 0;
}

/**
* snd_soc_dai_digital_mute - configure DAI system or master clock.
* @dai: DAI
Expand Down Expand Up @@ -620,7 +628,7 @@ int snd_soc_pcm_dai_trigger(struct snd_pcm_substream *substream,
if (ret < 0)
break;

if (dai->driver->ops && dai->driver->ops->mute_unmute_on_trigger)
if (snd_soc_dai_mute_is_ctrled_at_trigger(dai))
snd_soc_dai_digital_mute(dai, 0, substream->stream);

soc_dai_mark_push(dai, substream, trigger);
Expand All @@ -633,7 +641,7 @@ int snd_soc_pcm_dai_trigger(struct snd_pcm_substream *substream,
if (rollback && !soc_dai_mark_match(dai, substream, trigger))
continue;

if (dai->driver->ops && dai->driver->ops->mute_unmute_on_trigger)
if (snd_soc_dai_mute_is_ctrled_at_trigger(dai))
snd_soc_dai_digital_mute(dai, 1, substream->stream);

r = soc_dai_trigger(dai, substream, cmd);
Expand Down
15 changes: 7 additions & 8 deletions sound/soc/soc-ops.c
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ int snd_soc_put_volsw(struct snd_kcontrol *kcontrol,
if (ucontrol->value.integer.value[0] < 0)
return -EINVAL;
val = ucontrol->value.integer.value[0];
if (mc->platform_max && ((int)val + min) > mc->platform_max)
if (mc->platform_max && val > mc->platform_max)
return -EINVAL;
if (val > max - min)
return -EINVAL;
Expand All @@ -338,7 +338,7 @@ int snd_soc_put_volsw(struct snd_kcontrol *kcontrol,
if (ucontrol->value.integer.value[1] < 0)
return -EINVAL;
val2 = ucontrol->value.integer.value[1];
if (mc->platform_max && ((int)val2 + min) > mc->platform_max)
if (mc->platform_max && val2 > mc->platform_max)
return -EINVAL;
if (val2 > max - min)
return -EINVAL;
Expand Down Expand Up @@ -491,17 +491,16 @@ int snd_soc_info_volsw_range(struct snd_kcontrol *kcontrol,
{
struct soc_mixer_control *mc =
(struct soc_mixer_control *)kcontrol->private_value;
int platform_max;
int min = mc->min;
int max;

if (!mc->platform_max)
mc->platform_max = mc->max;
platform_max = mc->platform_max;
max = mc->max - mc->min;
if (mc->platform_max && mc->platform_max < max)
max = mc->platform_max;

uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
uinfo->count = snd_soc_volsw_is_stereo(mc) ? 2 : 1;
uinfo->value.integer.min = 0;
uinfo->value.integer.max = platform_max - min;
uinfo->value.integer.max = max;

return 0;
}
Expand Down
Loading
Loading