Krzysztof Kozlowski [Tue, 25 Jun 2024 16:57:35 +0000 (18:57 +0200)]
ASoC: codecs: lpass-macro: Gracefully handle unknown version
Qualcomm LPASS macro codec driver parses registers in order to
detect version of the codec. It recognizes codecs v2.0 - v2.8, however
we know that there are earlier versions and 'enum lpass_codec_version'
has also v1.0, v1.1 and v1.2. If by any chance we run on unrecognized
version, driver will use random value from the stack as the codec
version.
Fix it by mapping such cases to an enum of value 0:
LPASS_CODEC_VERSION_UNKNOWN.
Fixes: 378918d59181 ("ASoC: codecs: lpass-macro: add helpers to get codec version") Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Link: https://patch.msgid.link/20240625165736.722106-1-krzysztof.kozlowski@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org>
Krzysztof Kozlowski [Tue, 25 Jun 2024 16:58:47 +0000 (18:58 +0200)]
ASoC: codecs: lpass-wsa-macro: Correct support for newer v2.5 version
Starting with v2.5 of Qualcomm LPASS Codec, few registers in the WSA
macro block change. Bring proper support for this v2.5 and newer
versions, to fix second speaker playback (speaker was silent).
Krzysztof Kozlowski [Tue, 25 Jun 2024 16:58:46 +0000 (18:58 +0200)]
ASoC: codecs: lpass-wsa-macro: Prepare to accommodate new codec versions
The driver for Qualcomm LPASS WSA macro codec was developed and tested
on codec v2.1, however v2.5 has significant changes in the registers.
The driver correctly works for v2.1 codec, but has issues when running
on SoC with v2.5 codec (so starting with SM8450, even though playback
works properly on that SoC).
Prepare the driver for handling differences in register layouts of newer
version. This does not have functional impact on older codec versions,
but just:
1. Renames few soc_enums and widgets as v2.1,
2. For registers being different in v2.5, moves the defaults and regmap
configuration to new structures,
3. Adds new 'struct wsa_reg_layout' with offsets and masks for few
registers, so most of the code can stay unchaged on v2.5,
4. Chooses proper widgets, regmap config and register layout based on
version of the codec.
Shuming Fan [Tue, 25 Jun 2024 08:43:03 +0000 (16:43 +0800)]
ASoC: rt711-sdca: add GE selected mode control
The SDCA spec defines a 'selected_mode' control which can override
the 'detected_mode' reported by hardware.
This is useful for platform integration as well as in cases
where the hardware(e.g. 3.5mm jack cable) is not able to accurately detect the jack type.
Uwe Kleine-König [Mon, 24 Jun 2024 13:17:27 +0000 (15:17 +0200)]
ASoC: codecs: Drop explicit initialization of struct i2c_device_id::driver_data to 0
These drivers don't use the driver_data member of struct i2c_device_id,
so don't explicitly initialize this member.
This prepares putting driver_data in an anonymous union which requires
either no initialization or named designators. But it's also a nice
cleanup on its own.
Lukas Bulwahn [Tue, 25 Jun 2024 03:34:19 +0000 (05:34 +0200)]
MAINTAINERS: adjust file entries after adding vendor prefix in sound dtbs
Commit ae8fc2948b48 ("ASoC: dt-bindings: add missing vender prefix on
filename") renames a few files in Documentation/devicetree/bindings/sound/,
but misses to adjust the file entries pointing to those files in
MAINTAINERS.
Hence, ./scripts/get_maintainer.pl --self-test=patterns complains about
broken references.
Adjust the file entries in NXP SGTL5000 DRIVER and TEXAS INSTRUMENTS AUDIO
(ASoC/HDA) DRIVERS.
Mark Brown [Tue, 25 Jun 2024 11:34:44 +0000 (12:34 +0100)]
ASoC: codecs: ES8326: Solving headphone detection and
Merge series from Zhang Yi <zhangyi@everest-semi.com>:
We propose four patches to solve headphone detection and suspend issues.
And there are several registers that should be read-only registers. So
we create es8326_writeable_register, and set these registers to false.
Peter Ujfalusi [Mon, 24 Jun 2024 12:15:18 +0000 (14:15 +0200)]
ASoC: SOF: ipc4-topology: Use correct queue_id for requesting input pin format
It is incorrect to request the input pin format of the destination widget
using the output pin index of the source module as the indexes are not
necessarily matching.
moduleA.out_pin1 can be connected to moduleB.in_pin0 for example.
Use the dst_queue_id to request the input format of the destination module.
This bug remained unnoticed likely because in nocodec topologies we don't
have process modules after a module copier, thus the pin/queue index is
ignored.
For the process module case, the code was likely have been tested in a
controlled way where all the pin/queue/format properties were present to
work.
Update the debug prints to have better information.
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Cc: stable@vger.kernel.org # v6.8+ Link: https://patch.msgid.link/20240624121519.91703-3-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
There are two hardware connection methods for DMICs on the MT6358. In cases
where more than two DMICs are used, we need to time-multiplex these DMICs.
Therefore, we need to dynamically switch the modes of these DMICs based on
the actual usage scenarios.
---- DMIC1
AU_VIN0 ---
---- DMIC2
AU_VIN2 --- ----DMIC3
When we want to use DMIC1/2, configure it to one-wire mode. When we want to
use DMIC1/3, configure it to two-wire mode.
Zhang Yi [Mon, 24 Jun 2024 03:06:07 +0000 (11:06 +0800)]
ASoC: codecs: ES8326: regcache_sync error issue
We modified the regmap_config members to fix cach sync error.
There are several registers that should be read-only registers.
If these registers are written while synchronizing the register values,
the codec will enter an error state.So we create es8326_writeable_register,
and set these registers to false
Zhang Yi [Mon, 24 Jun 2024 03:06:06 +0000 (11:06 +0800)]
ASoC: codecs: ES8326: Minimize the pop noise
Executing regcache_sync at initialization, we can hear a gentle pop
noise. So we created es8326_init for initialization instead of
executing es8326_resume
Mark Brown [Sun, 23 Jun 2024 12:13:14 +0000 (13:13 +0100)]
ASoC: nau8822: add MCLK support
Merge series from Andrejs Cainikovs <andrejs.cainikovs@gmail.com>:
This change adds local MCLK handling, which would cover a case when a
reference audio clock is present in a system, but is not allowed to be
changed, see [1].
Mark Brown [Sun, 23 Jun 2024 12:13:07 +0000 (13:13 +0100)]
ASoC: qcom: display port changes
Merge series from srinivas.kandagatla@linaro.org:
This patchset adds support for.
1. parse Display Port module tokens from ASoC topology
2. add support to DP/HDMI Jack events.
3. fixes a typo in function name in sm8250
Verified these patches on X13s along with changes to tplg in
https://git.codelinaro.org/linaro/qcomlt/audioreach-topology/-/tree/topic/x13s-dp?ref_type=heads
and ucm changes from https://github.com/Srinivas-Kandagatla/alsa-ucm-conf/tree/topic/x13s-dp
x1e80100 is verified by Krzysztof with his changes in tplg
Mark Brown [Sun, 23 Jun 2024 12:13:00 +0000 (13:13 +0100)]
ASoC: Few constifications (mostly arguments)
Merge series from Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>:
Make few pointers in ASoC functions as pointers to const, so the code is
clearer to read, a bit safer and allows further constifications (e.g.
placing some data as rodata).
Mark Brown [Sun, 23 Jun 2024 12:12:24 +0000 (13:12 +0100)]
tlv320adc3xxx: Allow MICBIAS pins to be used as
Merge series from Ricard Wanderlof <ricard.wanderlof@axis.com>:
In some cases, depending on system design, the MICBIAS pins on the
chip are not needed as such, but a couple of extra GPIO pins would be
useful. This patch allows the MICBIAS pins to be configured in the
device tree as general purpose output pins, controlled via the GPIO
framework.
Owing to their originally intended purpose there are some limitations:
when the MICBIAS pins are deactivated, they will float, so will likely
need a pulldown in many applications. When activated, they will
assume the voltage specified by the micbias1-vg and micbias2-vg
properties, respectively, meaning that the resulting output voltage
will be 2.0 V, 2.5 V or AVDD .
Mark Brown [Sun, 23 Jun 2024 12:12:16 +0000 (13:12 +0100)]
Cirrus Logic Family of ADCs
Merge series from Paul Handrigan <paulha@opensource.cirrus.com>:
This patchset provides ASoC support for the latest family
of Cirrus Logic multichannel, high performance audio ADCs.
The devices that are supported are CS5302 (2 channel ADC),
CS5304 (4 channel ADC), and CS5308 (8 channel ADC).
Hao Ge [Mon, 17 Jun 2024 02:09:54 +0000 (10:09 +0800)]
ASoc: PCM6240: Return directly after a failed devm_kzalloc() in pcmdevice_i2c_probe()
The value “-ENOMEM” was assigned to the local variable “ret”
in one if branch after a devm_kzalloc() call failed at the beginning.
This error code will trigger then a pcmdevice_remove() call with a passed
null pointer so that an undesirable dereference will be performed.
Thus return the appropriate error code directly.
I2S clock generation registers should be programmed before starting the I2S
dma when I2S controller is programmed as clock master. Move i2s clock
generation register programming sequence prior to i2s dma start.
Vijendar Mukunda [Mon, 17 Jun 2024 07:28:39 +0000 (12:58 +0530)]
ASoC: amd: acp: modify conditional check for programming i2s mclk
ACP provides different IO configurations(ACP PDM, I2S and SoundWire).
I2S mclk should be programmed only when I2S configuration is selected and
I2S controller is programmed as clock master.
Modify the conditional check for programming i2s mclk.
Vijendar Mukunda [Mon, 17 Jun 2024 07:28:37 +0000 (12:58 +0530)]
ASoC: amd: acp: remove acp_i2s_probe function
In acp_i2s_probe(), acp_base null check is verified.
As already acp_base null check will be verified in acp platform
driver probe sequence, additional NULL check in acp_i2s_probe() is not
needed. Remove acp_i2s_probe() function.
Elinor Montmasson [Thu, 20 Jun 2024 13:25:03 +0000 (15:25 +0200)]
ASoC: fsl-asoc-card: set priv->pdev before using it
priv->pdev pointer was set after being used in
fsl_asoc_card_audmux_init().
Move this assignment at the start of the probe function, so
sub-functions can correctly use pdev through priv.
fsl_asoc_card_audmux_init() dereferences priv->pdev to get access to the
dev struct, used with dev_err macros.
As priv is zero-initialised, there would be a NULL pointer dereference.
Note that if priv->dev is dereferenced before assignment but never used,
for example if there is no error to be printed, the driver won't crash
probably due to compiler optimisations.
Kuninori Morimoto [Thu, 20 Jun 2024 00:32:39 +0000 (00:32 +0000)]
ASoC: dt-bindings: add missing vender prefix on filename
Many Sound yaml files doesn't have vender prefix on filename.
Add missing vender prefix for these files.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Link: https://msgid.link/r/87wmmkpi6w.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
chip->flag variable assignment will be skipped when acp platform device
creation is skipped. In this case chip>flag value will not be set.
chip->flag variable should be assigned along with other structure
variables for 'chip' structure. Move chip->flag variable assignment
prior to acp platform device creation.
Vijendar Mukunda [Mon, 17 Jun 2024 07:28:35 +0000 (12:58 +0530)]
ASoC: amd: acp: remove i2s configuration check in acp_i2s_probe()
ACP supports different pin configurations for I2S IO. Checking ACP pin
configuration value against specific value breaks the functionality for
other I2S pin configurations. This check is no longer required in i2s dai
driver probe call as i2s configuration check will be verified during acp
platform device creation sequence.
Remove i2s_mode check in acp_i2s_probe() function.
Vijendar Mukunda [Mon, 17 Jun 2024 07:28:34 +0000 (12:58 +0530)]
ASoC: amd: acp: add a null check for chip_pdev structure
When acp platform device creation is skipped, chip->chip_pdev value will
remain NULL. Add NULL check for chip->chip_pdev structure in
snd_acp_resume() function to avoid null pointer dereference.
Simon Trimmer [Mon, 17 Jun 2024 13:53:38 +0000 (14:53 +0100)]
ASoC: cs35l56: Accept values greater than 0 as IRQ numbers
IRQ lookup functions such as those in ACPI can return error values when
an IRQ is not defined. The i2c core driver converts the error codes to a
value of 0 and the SPI bus driver passes them unaltered to client device
drivers.
The cs35l56 driver should only accept positive non-zero values as IRQ
numbers.
Krzysztof Kozlowski [Wed, 12 Jun 2024 16:15:23 +0000 (18:15 +0200)]
ASoC: codecs: wcd934x: Handle nicer probe deferral and simplify with dev_err_probe()
wcd934x_codec_parse_data() function is called only from probe(), so
printing errors on resource acquisition is discouraged, because it can
pollute dmesg in case of probe deferral. The actual deferral is here
unlikely, but still the code is a bit simpler with dev_err_probe().
Krzysztof Kozlowski [Wed, 12 Jun 2024 16:15:22 +0000 (18:15 +0200)]
ASoC: codecs: wcd934x: Drop unused mic bias voltage fields
Driver stores the voltage of mic bias in fields in state container
structure, but actually never reads them - except for the mic2 bias
(micb2_mv field). Drop the fields from the structure so the code will
be a bit simpler.
Krzysztof Kozlowski [Wed, 12 Jun 2024 16:15:19 +0000 (18:15 +0200)]
ASoC: codecs: wcd9335: Drop unused dmic rate handling
Driver was prepared to adjust DMIC microphone parameters according to
DMIC clock rate which is read from platform data or Devicetree. The
latter part never happened, so the code is always called with
dmic_clk_rate=0, prints error and uses default/fallback values. All
this part can be simplified by dropping dead parts of code.
Krzysztof Kozlowski [Wed, 12 Jun 2024 16:15:18 +0000 (18:15 +0200)]
ASoC: codecs: wcd9335: Drop unneeded error message
Error-level should not be used as debugging. The code (function
wcd9335_get_dmic_clk_val()) will always be called with same parameters,
so this is not really useful debug anyway, so drop it.
Krzysztof Kozlowski [Wed, 12 Jun 2024 16:15:17 +0000 (18:15 +0200)]
ASoC: codecs: wcd9335: Handle nicer probe deferral and simplify with dev_err_probe()
wcd9335_parse_dt() function is called only from probe(), so printing
errors on resource acquisition is discouraged, because it can pollute
dmesg. Use dev_err_probe() to fix this and also make the code a bit
simpler.
The wcd-mbhc-v2 helper code/module does not modify passed array of
registry fields, thus it can be made const for code safety. It will
also allow individual drivers to allocate the array in rodata.
Shenghao Ding [Fri, 14 Jun 2024 13:36:45 +0000 (21:36 +0800)]
ASoc: tas2781: Enable RCA-based playback without DSP firmware download
In only loading RCA (Reconfigurable Architecture) binary case, no DSP
program will be working inside tas2563/tas2781, that is dsp-bypass mode,
do not support speaker protection, or audio acoustic algorithms in this
mode.
Andrejs Cainikovs [Thu, 13 Jun 2024 08:46:52 +0000 (10:46 +0200)]
ASoC: nau8822: add MCLK support
This change adds MCLK clock handling directly within driver.
When used in combination with simple-audio-card, and mclk-fs is set,
simple-audio-card will change MCLK frequency before configuring PLL.
In some cases, however, MCLK reference clock should be static (see [1]),
which means it needs to be moved away from simple-audio-card.
Andrejs Cainikovs [Thu, 13 Jun 2024 08:46:50 +0000 (10:46 +0200)]
ASoC: nau8822: move nau8822_set_dai_sysclk()
Next commit in series makes a change which calls nau8822_set_pll() from
nau8822_set_dai_sysclk(). Moving latter after the former would avoid a
forward declaration, and this is exactly what this change does.
Ricard Wanderlof [Fri, 7 Jun 2024 15:22:05 +0000 (17:22 +0200)]
ASoC: tlv320adc3xxx: Add support for using MICBIAS pins as GPO
Add boolean ti,micbias1-gpo and ti,micbias2-gpo devicetree properties.
When set, the respective MICBIAS pins can be used as general purpose
outputs controlled via the GPIO framework, in addition to the two
configurable GPIO pins.
This is useful in applications where the MICBIAS functionality is
not required, but it is useful to have a couple of extra GPIO pins.
The voltage on the respective MICBIAS pin in the active state is
governed by the ti,micbias1-vg and ti,micbias2-vg properties,
respectively (same properties as when the pins are used as
MICBIAS pins).
Add properties for configuring the MICBIAS pins as general purpose
outputs, with some limitations: The voltage on the pin when activated
may be set using another property to 2.0 V, 2.5 V or AVDD.
When deactivated the pin will float.
Krzysztof Kozlowski [Mon, 17 Jun 2024 13:03:23 +0000 (15:03 +0200)]
ASoC: Constify return of snd_soc_dai_get_pcm_stream()
Returned 'struct snd_soc_pcm_stream' by snd_soc_dai_get_pcm_stream() is
not modified by the users, so it can be changed as pointer to const.
This is a necessary step towards making the 'dai->driver' a pointer to
const.
Krzysztof Kozlowski [Mon, 17 Jun 2024 13:03:22 +0000 (15:03 +0200)]
ASoC: Constify DAI passed to get_channel_map
get_channel_map() is supposed to obtain map of channels without
modifying the state of the given DAI, so make the pointer to 'struct
snd_soc_dai' as pointing to const.
Krzysztof Kozlowski [Mon, 17 Jun 2024 13:03:21 +0000 (15:03 +0200)]
ASoC: Constify passed data to core function
Several ASoC functions receive pointers to data which is not modified,
e.g. pointers to 'snd_soc_dai', 'snd_soc_pcm_runtime',
'snd_pcm_hw_params' and 'snd_soc_dai_link'.
All these pointers can be made as a pointer to const. This makes code
safer, serves as clear annotation of function's intentions (no ownership
passed to the function, no modifications) and allows putting pointed
structures in rodata (if ever applicable).
Krzysztof Kozlowski [Mon, 17 Jun 2024 13:03:20 +0000 (15:03 +0200)]
ASoC: Constify of_phandle_args in snd_soc_dai_link_component
ASoC core code does not modify contents of 'of_phandle_args' in 'struct
snd_soc_dai_link_component', so the pointer can be made as a pointer to
const. This makes code safer, serves as clear annotation of core's
intentions and allows putting pointed structures in rodata (if ever
applicable).
Krzysztof Kozlowski [Mon, 17 Jun 2024 13:03:19 +0000 (15:03 +0200)]
ASoC: Constify of_phandle_args in snd_soc_dai_driver
ASoC core code does not modify contents of 'of_phandle_args' in 'struct
snd_soc_dai_driver', so the pointer can be made as a pointer to const.
This makes code safer, serves as clear annotation of core's intentions
and allows putting pointed structures in rodata (if ever applicable).
Krzysztof Kozlowski [Mon, 17 Jun 2024 12:57:34 +0000 (14:57 +0200)]
ASoC: soc-dai.h: Constify DAI ops auto_selectable_formats
The core ASoC code does not modify contents of the
'auto_selectable_formats' array passed in 'struct snd_soc_dai_ops', so
make it const for code safety.
Srinivas Kandagatla [Thu, 13 Jun 2024 10:49:33 +0000 (11:49 +0100)]
ASoC: codec: lpass-rx-macro: add support for 2.5 codec version
LPASS Codec v2.5 has significant changes in the rx register strides.
Due to this headset playback on SM8550, SM8650, x1e80100 and all SoCs
after SM8450 have only Left working.
This patch adjusts the registers to accomdate 2.5 changes. With this
fixed now L and R are functional on Headset playback.
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> Tested-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8650-HDK Link: https://lore.kernel.org/r/20240612-lpass-codec-v25-v4-3-f63d3676dbc4@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org>