summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2023-08-14ASoC: amd: merge DAI call back functions into opsKuninori Morimoto4-18/+12
ALSA SoC merges DAI call backs into .ops. This patch merge these into one. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://lore.kernel.org/r/87pm3xb0va.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-14ASoC: adi: merge DAI call back functions into opsKuninori Morimoto1-1/+1
ALSA SoC merges DAI call backs into .ops. This patch merge these into one. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://lore.kernel.org/r/87r0odb0vg.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-14ASoC: adi: merge DAI call back functions into opsKuninori Morimoto1-1/+1
ALSA SoC merges DAI call backs into .ops. This patch merge these into one. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://lore.kernel.org/r/87sf8tb0vp.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-14ASoC: ti: merge DAI call back functions into opsKuninori Morimoto5-61/+60
ALSA SoC merges DAI call backs into .ops. This patch merge these into one. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://lore.kernel.org/r/87ttt9b0vw.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-14ASoC: soc-dai.h: merge DAI call back functions into opsKuninori Morimoto4-20/+64
snd_soc_dai_driver has .ops for call back functions (A), but it also has other call back functions (B). It is duplicated and confusable. struct snd_soc_dai_driver { ... ^ int (*probe)(...); | int (*remove)(...); (B) int (*compress_new)(...); | int (*pcm_new)(...); v ... (A) const struct snd_soc_dai_ops *ops; ... } This patch merges (B) into (A). Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://lore.kernel.org/r/87v8dpb0w6.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-14ASoC: rt: Drop unused GPIO includesMark Brown14-21/+0
Merge series from Linus Walleij <linus.walleij@linaro.org>: These drivers include legacy GPIO headers for no reason at all, so get rid of the includes.
2023-08-14sound: Remove redundant of_match_ptr() macroMark Brown9-9/+9
Merge series from Ruan Jinjie <ruanjinjie@huawei.com>: Since these sound drivers depend on CONFIG_OF, there is no need to wrap the macro of_match_ptr() here.
2023-08-13ASoC: rt715: Drop GPIO includesLinus Walleij1-3/+0
This driver include two GPIO legacy headers and one contemporary, yet doesn't use symbols from any of them. Drop the includes. Signed-off-by: Linus Walleij <linus.walleij@linaro.org Link: https://lore.kernel.org/r/20230812-descriptors-asoc-v1-14-eb4dca1f68af@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: rt5682-sdw: Drop GPIO includesLinus Walleij1-2/+0
This driver include two GPIO legacy headers yet doesn't use symbols from any of them. Drop the includes. Signed-off-by: Linus Walleij <linus.walleij@linaro.org Link: https://lore.kernel.org/r/20230812-descriptors-asoc-v1-13-eb4dca1f68af@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: rt5660: Drop GPIO includesLinus Walleij1-2/+0
This driver include two GPIO legacy headers yet doesn't use symbols from any of them. Drop the includes. Signed-off-by: Linus Walleij <linus.walleij@linaro.org Link: https://lore.kernel.org/r/20230812-descriptors-asoc-v1-12-eb4dca1f68af@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: rt5659: Drop legacy GPIO includeLinus Walleij1-1/+0
This driver include the GPIO legacy header <linux/gpio.h yet doesn't use symbols from it. It is using the new consumer include <linux/gpio/consumer.h already. Drop the surplus include. Signed-off-by: Linus Walleij <linus.walleij@linaro.org Link: https://lore.kernel.org/r/20230812-descriptors-asoc-v1-11-eb4dca1f68af@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: rt5645: Drop legacy GPIO includeLinus Walleij1-1/+0
This driver include the GPIO legacy header <linux/gpio.h yet doesn't use symbols from it. It is using the new consumer include <linux/gpio/consumer.h already. Drop the surplus include. Signed-off-by: Linus Walleij <linus.walleij@linaro.org Link: https://lore.kernel.org/r/20230812-descriptors-asoc-v1-10-eb4dca1f68af@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: rt5514: Drop GPIO includeLinus Walleij1-1/+0
This driver include the GPIO legacy header <linux/gpio.h yet doesn't use symbols from it. Drop the include. Signed-off-by: Linus Walleij <linus.walleij@linaro.org Link: https://lore.kernel.org/r/20230812-descriptors-asoc-v1-9-eb4dca1f68af@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: rt5514-spi: Drop GPIO includeLinus Walleij1-1/+0
This driver include the GPIO legacy header <linux/gpio.h yet doesn't use symbols from it. Drop the include. Signed-off-by: Linus Walleij <linus.walleij@linaro.org Link: https://lore.kernel.org/r/20230812-descriptors-asoc-v1-8-eb4dca1f68af@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: rt1308: Drop GPIO includesLinus Walleij1-2/+0
This driver include two GPIO legacy headers yet doesn't use symbols from any of them. Drop the includes. Signed-off-by: Linus Walleij <linus.walleij@linaro.org Link: https://lore.kernel.org/r/20230812-descriptors-asoc-v1-7-eb4dca1f68af@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: rt1305: Drop GPIO includesLinus Walleij1-2/+0
This driver include two GPIO legacy headers yet doesn't use symbols from any of them. Drop the includes. Signed-off-by: Linus Walleij <linus.walleij@linaro.org Link: https://lore.kernel.org/r/20230812-descriptors-asoc-v1-6-eb4dca1f68af@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: rt1019: Drop GPIO includeLinus Walleij1-1/+0
This driver include the GPIO legacy header <linux/gpio.h yet doesn't use symbols from it. Drop the include. Signed-off-by: Linus Walleij <linus.walleij@linaro.org Link: https://lore.kernel.org/r/20230812-descriptors-asoc-v1-5-eb4dca1f68af@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: rt1016: Drop GPIO includeLinus Walleij1-1/+0
This driver include the GPIO legacy header <linux/gpio.h yet doesn't use symbols from it. Drop the include. Signed-off-by: Linus Walleij <linus.walleij@linaro.org Link: https://lore.kernel.org/r/20230812-descriptors-asoc-v1-4-eb4dca1f68af@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: rt1015p: Drop legacy GPIO includeLinus Walleij1-1/+0
This driver include the GPIO legacy header <linux/gpio.h yet doesn't use symbols from it. It is using the new consumer include <linux/gpio/consumer.h already. Drop the surplus include. Signed-off-by: Linus Walleij <linus.walleij@linaro.org Link: https://lore.kernel.org/r/20230812-descriptors-asoc-v1-3-eb4dca1f68af@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: rt1015: Drop GPIO includeLinus Walleij1-1/+0
This driver include the GPIO legacy header <linux/gpio.h yet doesn't use symbols from it. Drop the include. Signed-off-by: Linus Walleij <linus.walleij@linaro.org Link: https://lore.kernel.org/r/20230812-descriptors-asoc-v1-2-eb4dca1f68af@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: rt1011: Drop GPIO includesLinus Walleij1-2/+0
This driver include two GPIO legacy headers yet doesn't use symbols from any of them. Drop the includes. Signed-off-by: Linus Walleij <linus.walleij@linaro.org Link: https://lore.kernel.org/r/20230812-descriptors-asoc-v1-1-eb4dca1f68af@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ALSA: Remove redundant of_match_ptr()Ruan Jinjie1-1/+1
The driver depends on CONFIG_OF, it is not necessary to use of_match_ptr() here. Signed-off-by: Ruan Jinjie <ruanjinjie@huawei.com Reviewed-by: Takashi Iwai <tiwai@suse.de Link: https://lore.kernel.org/r/20230811071426.2343133-6-ruanjinjie@huawei.com Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: ssm3515: Remove redundant of_match_ptr()Ruan Jinjie1-1/+1
The driver depends on CONFIG_OF, it is not necessary to use of_match_ptr() here. Signed-off-by: Ruan Jinjie <ruanjinjie@huawei.com Link: https://lore.kernel.org/r/20230811071426.2343133-5-ruanjinjie@huawei.com Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: sunxi: sun4i-spdif: Remove redundant of_match_ptr()Ruan Jinjie1-1/+1
The driver depends on CONFIG_OF, it is not necessary to use of_match_ptr() here. Signed-off-by: Ruan Jinjie <ruanjinjie@huawei.com Acked-by: Jernej Skrabec <jernej.skrabec@gmail.com Link: https://lore.kernel.org/r/20230811071426.2343133-4-ruanjinjie@huawei.com Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: atmel: tse850-pcm5142: Remove redundant of_match_ptr()Ruan Jinjie1-1/+1
The driver depends on CONFIG_OF, it is not necessary to use of_match_ptr() here. Signed-off-by: Ruan Jinjie <ruanjinjie@huawei.com Link: https://lore.kernel.org/r/20230811071426.2343133-3-ruanjinjie@huawei.com Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: atmel: Remove redundant of_match_ptr()Ruan Jinjie5-5/+5
The driver depends on CONFIG_OF, it is not necessary to use of_match_ptr() here. Signed-off-by: Ruan Jinjie <ruanjinjie@huawei.com Link: https://lore.kernel.org/r/20230811071426.2343133-2-ruanjinjie@huawei.com Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: cygnus: Remove unused declarationsYue Haibing1-2/+0
Commit a6ee05d94e8f ("ASoC: cygnus: Add Cygnus audio DAI driver") declared but never implemented these. Signed-off-by: Yue Haibing <yuehaibing@huawei.com Link: https://lore.kernel.org/r/20230811110021.31656-1-yuehaibing@huawei.com Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-13ASoC: q6dsp: Remove unused declarationYue Haibing1-2/+0
Commit 5477518b8a0e ("ASoC: qdsp6: audioreach: add q6apm support") declared but never implemented these. Signed-off-by: Yue Haibing <yuehaibing@huawei.com Link: https://lore.kernel.org/r/20230811100130.36664-1-yuehaibing@huawei.com Signed-off-by: Mark Brown <broonie@kernel.org
2023-08-10ASoC: SOF: Intel: Remove duplicated include in lnl.cYang Li1-1/+0
./sound/soc/sof/intel/lnl.c: hda.h is included more than once. Signed-off-by: Yang Li <yang.lee@linux.alibaba.com> Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20230810005555.4610-1-yang.lee@linux.alibaba.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-10ASoC: rt715: Add software reset in io initJack Yu2-0/+63
Add software reset before setting preset registers to make sure all the registers are the default value before preset. Signed-off-by: Jack Yu <jack.yu@realtek.com> Link: https://lore.kernel.org/r/4f405c7deb9642e1a8599c5f103b5759@realtek.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-10dt-bindings: sound: gtm601: Add descriptionGuido Günther1-2/+4
This allows to us to document the channel and sampling rate requirements. Signed-off-by: Guido Günther <agx@sigxcpu.org> Reviewed-by: David Heidelberg <david@ixit.cz> Link: https://lore.kernel.org/r/b6e85fdfaa87d7684a120ccedc1e07d8fe87957f.1691606520.git.agx@sigxcpu.org Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-10ASoC: SOF: Intel: Initialize chip in hda_sdw_check_wakeen_irq()Nathan Chancellor1-0/+1
Clang warns (or errors with CONFIG_WERROR): sound/soc/sof/intel/hda.c:423:6: error: variable 'chip' is uninitialized when used here [-Werror,-Wuninitialized] 423 | if (chip && chip->check_sdw_wakeen_irq) | ^~~~ sound/soc/sof/intel/hda.c:418:39: note: initialize the variable 'chip' to silence this warning 418 | const struct sof_intel_dsp_desc *chip; | ^ | = NULL 1 error generated. Add the missing initialization, following the pattern of the other irq functions. Fixes: 9362ab78f175 ("ASoC: SOF: Intel: add abstraction for SoundWire wake-ups") Signed-off-by: Nathan Chancellor <nathan@kernel.org> Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20230809-intel-hda-missing-chip-init-v1-1-61557ca6fa8a@kernel.org Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-10ASoC: Merge up fixesMark Brown11-19/+35
For the benefit of CI
2023-08-09ASoC: cs35l56: BugfixesMark Brown3-17/+25
Merge series from Richard Fitzgerald <rf@opensource.cirrus.com>: Miscellaneous bugfixes for the cs35l56 codec driver.
2023-08-09ASoC: SOF: ipc4-topology: Update the basecfg for copier earlierPeter Ujfalusi1-3/+3
The sof_ipc4_update_resource_usage() call updates the CPC value in basecfg and it must be done prior to making a copy of the copier configuration for the init message. Other module types do the resource update as last step or in case of a process module at the correct time, before the memcpy. Fixes: d8a2c9879349 ("ASoC: SOF: ipc4-loader/topology: Query the CPC value from manifest") Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Adrian Bonislawski <adrian.bonislawski@intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Chao Song <chao.song@linux.intel.com> Link: https://lore.kernel.org/r/20230809125656.27585-1-peter.ujfalusi@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-09ASoC: samsung: midas_wm1811: Fix 'Headphone Switch' control creationMarek Szyprowski1-1/+0
'Headphone Switch' control is already registered from sound/soc/codecs/wm_hubs.c:479, so duplicating it in midas_wm1811 causes following probe failure: midas-audio sound: control 2:0:0:Headphone Switch:0 is already present midas-audio sound: ASoC: Failed to add Headphone Switch: -16 midas-audio sound: Failed to register card: -16 midas-audio: probe of sound failed with error -16 Fix this by dropping duplicated control. Fixes: d27224a45e54 ("ASoC: samsung: midas_wm1811: Map missing jack kcontrols") Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Link: https://lore.kernel.org/r/20230809100446.2105825-1-m.szyprowski@samsung.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-09ASoC: rsnd: call of_node_put() when breakKuninori Morimoto1-0/+2
We need to call of_node_put() when break from for_each_child_of_node(). This patch add missing of_node_put(). Reported-by: kernel test robot <lkp@intel.com> Reported-by: Julia Lawall <julia.lawall@inria.fr> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://lore.kernel.org/r/87bkfh9g68.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-09ASoC: cs35l56: Call wm_adsp_power_down() before reloading firmwareSimon Trimmer1-0/+1
When cs35l56_system_resume() needs to reload firmware it should call wm_adsp_power_down() to put cs_dsp into a powered-down state before cs35l56_secure_patch() or cs35l56_patch() calls wm_adsp_power_up(). Signed-off-by: Simon Trimmer <simont@opensource.cirrus.com> Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com> Link: https://lore.kernel.org/r/20230808164702.21272-6-rf@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-09ASoC: wm_adsp: Expose the DSP power down actions as wm_adsp_power_down()Simon Trimmer2-1/+8
To support self-booting DSPs that operate outside of a conventional DAPM event life cycle expose a companion function to wm_adsp_power_up() so that the correct state of the DSP firmware and controls can be recorded. Signed-off-by: Simon Trimmer <simont@opensource.cirrus.com> Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com> Link: https://lore.kernel.org/r/20230808164702.21272-5-rf@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-09ASoC: cs35l56: Wait for control port ready during system-resumeRichard Fitzgerald1-0/+6
The CS35L56 could be hard-reset during a system suspend-resume cycle, either by the codec driver, in cs35l56_system_resume_early(), or by ACPI. After a hard reset the driver must wait for the control port to be ready (datasheet tIRS time) before attempting to access the CS35L56. Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com> Link: https://lore.kernel.org/r/20230808164702.21272-4-rf@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-09ASoC: cs35l56: Don't rely on GPIOD_OUT_LOW to set RESET initially lowRichard Fitzgerald1-0/+2
The ACPI setting for a GPIO default state has higher priority than the flag passed to devm_gpiod_get_optional() so ACPI can override the GPIOD_OUT_LOW. Explicitly set the GPIO low when hard resetting. Although GPIOD_OUT_LOW can't be relied on this doesn't seem like a reason to stop passing it to devm_gpiod_get_optional(). So we still pass it to state our intent, but can deal with it having no effect. Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com> Link: https://lore.kernel.org/r/20230808164702.21272-3-rf@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-09ASoC: cs35l56: Avoid uninitialized variable in cs35l56_set_asp_slot_positions()Richard Fitzgerald1-16/+8
Re-implement setting of ASP TDM slots so that only the common loop to build the register word is factored out. The original cs35l56_set_asp_slot_positions() had an apparent uninitialized variable if the passed register address was neither of the ASP slot registers. In fact this would never happen because the calling code passed valid registers. While it's trivial to initialize the variable or add a default case, actually the only common code was the loop at the end of the function, which simply manipulates some mask values and is identical for either register. Factoring out the regmap_write() didn't really gain anything. So instead re-implement the code to replace the original function with cs35l56_make_tdm_config_word() that only does the loop, and change the calling code to call regmap_write() directly. Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com> Link: https://lore.kernel.org/r/20230808164702.21272-2-rf@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-08ASoC: pxa: address unused variable warningYu Liao1-7/+1
gcc with W=1 reports sound/soc/pxa/pxa-ssp.c:594:15: warning: variable 'acds' set but not used [-Wunused-but-set-variable] ^ This variable is not used so remove it. Reported-by: kernel test robot <lkp@intel.com> Closes: https://lore.kernel.org/oe-kbuild-all/202308040619.BEismjFv-lkp@intel.com/ Signed-off-by: Yu Liao <liaoyu15@huawei.com> Link: https://lore.kernel.org/r/20230808132519.637452-1-liaoyu15@huawei.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-08ASoC: codecs: aw88261: avoid uninitialized variable warningArnd Bergmann1-0/+2
aw88261_reg_update() returns an unintialized error code in the success path: sound/soc/codecs/aw88261.c:651:7: error: variable 'ret' is used uninitialized whenever 'if' condition is false [-Werror,-Wsometimes-uninitialized] if (aw_dev->prof_cur != aw_dev->prof_index) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ sound/soc/codecs/aw88261.c:660:9: note: uninitialized use occurs here return ret; ^~~ sound/soc/codecs/aw88261.c:651:3: note: remove the 'if' if its condition is always true if (aw_dev->prof_cur != aw_dev->prof_index) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Return zero instead here. Fixes: 028a2ae256916 ("ASoC: codecs: Add aw88261 amplifier driver") Signed-off-by: Arnd Bergmann <arnd@arndb.de> Link: https://lore.kernel.org/r/20230808125703.1611325-1-arnd@kernel.org Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-08ASoC: intel: sof_sdw: Simplify get_slave_infoCharles Keepax1-26/+12
Now the first device on a link is not treated specially there is no need to have a separate loop to handle the current link over the future links, as the logic is identical. Combine this all into a single processing loop. Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://lore.kernel.org/r/20230808132013.889419-12-ckeepax@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-08ASoC: intel: sof_sdw: Allow different devices on the same linkCharles Keepax1-15/+7
If the current code encounters a new type of device on a SoundWire link, it will abort processing that link and move onto the next link. However, there is no reason to disallow this setup, it would appear this was being disallowed to work around issues introduced by only the first endpoint on each link being checked, which is now fixed. The device type shouldn't determine which DAI link it is connected to, the group ID and aggregation status should. Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://lore.kernel.org/r/20230808132013.889419-11-ckeepax@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-08ASoC: intel: sof_sdw: Support multiple groups on the same linkCharles Keepax1-21/+21
The current code checks the first device on a link and assumes that all the other devices on the link will have the same endpoint aggregation status and endpoint group ID. Say for example a system looked like: SDW0 - Amp 1 (Aggregated, Group 1), Mic 1 (Aggregated, Group 2) SDW1 - Amp 2 (Aggregated, Group 1), Mic 2 (Aggregated, Group 2) The current code would create the DAI link for the aggregated amps, although it is worth noting that the only reason Mic 2 is not added is the additional check that aborts processing the link when the device changes. Then when processing the DAI link for the microphones, Mic 2 would not be added, as the check will only be done on the first device, which would be Amp 2 and thus the wrong group, causing the whole link to be skipped. Move the endpoint check to be for each device rather than the first device on each link. Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://lore.kernel.org/r/20230808132013.889419-10-ckeepax@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-08ASoC: intel: sof_sdw: Device loop should not always start at adr_indexCharles Keepax1-1/+4
The current loops at the top of create_sdw_dailink process the devices on each link starting from device index adr_index. But adr_index is only meaningful on the first on these SoundWire links, as it is the index of the current device on that link. This means devices will be skipped on later links. Say for example the system looks like this: SDW0 - Codec (Not Aggregated), Amp 1 (Aggregated, Group 1) SDW1 - Amp 2 (Aggregated, Group 1), Amp 3 (Aggregated, Group 1) The code should create 2 DAI links, one for the CODEC and one for the aggregated amps. It will create the DAI link for the codec no problem. When it creates the DAI link for Group 1 however, create_sdw_dailink will be called with an adr_index of 1, since that is the index of Amp 1 on SDW0. However, as the loop in create_sdw_dailink moves onto SDW1 it will again start from adr_index, skipping Amp 2. Resulting in the amp DAI link only have amps 1 and 3 in it. It is reasonable to start at adr_index on the first link, since earlier devices have by definition already been processed. However, update the code when processing later links to handle all devices. Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://lore.kernel.org/r/20230808132013.889419-9-ckeepax@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-08ASoC: intel: sof_sdw: Move range check of codec_conf into inner loopCharles Keepax1-6/+6
There are two problems with the current range check on the codec_conf array. Firstly, adr_link_next->num_adr refers to the number of devices on the current SoundWire link, but adr_index refers to the first SoundWire link involved in the DAI link. This means that subtracting these two numbers is only meaningful on the first SoundWire link in the DAI and broken on later links. Secondly, the intention of the range check is to add the number of remaining devices on the currently link to the current index and ensure enough space remains. However, this assumes that all remaining devices on the SoundWire link will be added to the current DAI link. Ideally this would not be the case, and devices could be grouped as the user desired. Moving the range check into the inner loop both simplifies the code (no need to add and subtract offsets) and allows future refactoring such that devices on a single SoundWire link don't have to all be grouped onto a single DAI link. The check will be processed slightly more often since it is processed for each device rather each link but this is probe time and the numbers involved are very small here (4 links, likely no more than 2-4 devices per link). Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://lore.kernel.org/r/20230808132013.889419-8-ckeepax@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
2023-08-08ASoC: intel: sof_sdw: Update DLC index each time one is addedCharles Keepax1-6/+4
In create_sdw_dailink, rather than bulk updating the index into the DAI link components array, at the end of processing a link, do so each time the code adds a new component. This simplifies things slightly, as an intermediate variable is no longer needed to track the current place in the DAI link components array. Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://lore.kernel.org/r/20230808132013.889419-7-ckeepax@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>