Takashi Iwai
0163717ed5
Merge tag 'asoc-v5.19' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
...
ASoC: Updates for v5.19
This is quite a big update, partly due to the addition of some larger
drivers (more of which is to follow since at least the AVS driver is
still a work in progress) and partly due to Charles' work sorting out
our handling of endianness. As has been the case recently it's much
more about drivers than the core.
- Overhaul of endianness specification for data formats, avoiding
needless restrictions due to CODECs.
- Initial stages of Intel AVS driver merge.
- Introduction of v4 IPC mechanism for SOF.
- TDM mode support for AK4613.
- Support for Analog Devices ADAU1361, Cirrus Logic CS35L45, Maxim
MAX98396, MediaTek MT8186, NXP i.MX8 micfil and SAI interfaces,
nVidia Tegra186 ASRC, and Texas Instruments TAS2764 and TAS2780
2022-05-23 16:03:04 +02:00
Stefan Binding
0db99577c4
ASoC: cs35l41: Move cs_dsp config struct into shared code
...
This can then be used by HDA code to configure cs_dsp.
Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com >
Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com >
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220509214703.4482-9-vitalyr@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-05-16 09:55:08 +02:00
Stefan Binding
ff8aad072e
ASoC: cs35l41: Move cs35l41 fs errata into shared code
...
This sequence is required to setup firmware, and will
be needed for hda driver.
Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com >
Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com >
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220509214703.4482-8-vitalyr@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-05-16 09:54:22 +02:00
Stefan Binding
caf7c1f1de
ASoC: cs35l41: Move cs35l41_set_cspl_mbox_cmd to shared code
...
This function is used to control the DSP Firmware for cs35l41,
and will be needed by the cs35l41 hda driver, when firmware
support is added.
Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com >
Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com >
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220509214703.4482-7-vitalyr@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-05-16 09:54:14 +02:00
Charles Keepax
f0688b567f
ASoC: cs35l41: Add endianness flag in snd_soc_component_driver
...
The endianness flag is used on the CODEC side to specify an
ambivalence to endian, typically because it is lost over the hardware
link. This device receives audio over an I2S DAI and as such should
have endianness applied.
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220504170905.332415-15-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2022-05-09 12:46:24 +01:00
Lucas Tanure
bb06c203f8
ASoC: cs35l41: Support external boost
...
Add support for external boost voltage, where GPIO1 must control a
switch to isolate CS35L41 from the external Boost Voltage
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Acked-by: Mark Brown <broonie@kernel.org >
Link: https://lore.kernel.org/r/20220413083728.10730-17-tanureal@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-04-13 10:42:34 +02:00
Lucas Tanure
fcad8950a5
ALSA: cs35l41: Move cs35l41_gpio_config to shared lib
...
ASoC and HDA can use a single function to configure the chip gpios.
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220413083728.10730-4-tanureal@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-04-13 10:42:33 +02:00
Lucas Tanure
2603c974b4
ALSA: cs35l41: Check hw_config before using it
...
The driver can receive an empty hw_config, so mark as valid if
successfully read from device tree/ACPI or set by the driver itself.
Platforms not marked with a valid hw config will not be supported.
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220413083728.10730-3-tanureal@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-04-13 10:42:32 +02:00
Lucas Tanure
f7f207375d
ALSA: cs35l41: Unify hardware configuration
...
Both ASoC and HDA require to configure the GPIOs and Boost, so
create a single shared struct for hardware configuration.
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220413083728.10730-2-tanureal@opensource.cirrus.com
Signed-off-by: Takashi Iwai <tiwai@suse.de >
2022-04-13 10:42:32 +02:00
Takashi Iwai
646b907e15
Merge tag 'asoc-v5.18' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
...
ASoC: Updates for v5.18
Quite a quiet release for ASoC, lots of work on drivers and platforms
but nothing too groundbreaking but not much on the core itself:
- Start of moving SoF to support multiple IPC mechanisms.
- Use of NHLT ACPI table to reduce the amount of quirking required for
Intel systems.
- Some building blocks for use in forthcoming Intel AVS driver for
legacy Intel DSP firmwares.
- Support for AMD PDM, Atmel PDMC, Awinic AW8738, i.MX cards with
TLV320AIC31xx, Intel machines with CS35L41 and ESSX8336, Mediatek
MT8181 wideband bluetooth, nVidia Tegra234, Qualcomm SC7280, Renesas
RZ/V2L, Texas Instruments TAS585M
2022-03-21 16:19:21 +01:00
Lucas Tanure
139cad4bde
ASoC: cs35l41: Remove unnecessary param
...
cs35l41_private is not used on cs35l41_handle_pdata
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220304150721.3802-5-tanureal@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2022-03-07 13:14:54 +00:00
Lucas Tanure
dacf1497a8
ASoC: cs35l41: Fix max number of TX channels
...
This device only has 4 TX channels.
Fixes: fe1024d504 ("ASoC: cs35l41: Combine adjacent register writes")
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220304150721.3802-3-tanureal@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2022-03-07 13:14:53 +00:00
Lucas Tanure
5e02fb590e
ASoC: cs35l41: Fix DSP mbox start command and global enable order
...
Global enable must happen before CSPL_MBOX_CMD_RESUME command
is sent. Move it to PRE_PMU as both events use
SND_SOC_DAPM_OUT_DRV_E macro.
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220303173059.269657-4-tanureal@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2022-03-07 13:12:38 +00:00
Lucas Tanure
16639d39bd
ASoC: cs35l41: Fix max number of TX channels
...
This device only has 4 TX channels.
Fixes: fe1024d504 ("ASoC: cs35l41: Combine adjacent register writes")
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220303173059.269657-3-tanureal@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2022-03-07 13:12:37 +00:00
David Rhodes
03a7895ee7
ASoC: cs35l41: Fix GPIO2 configuration
...
Fix GPIO2 polarity and direction configuration
Fixes: fe1024d504 ("ASoC: cs35l41: Combine adjacent register writes")
Signed-off-by: David Rhodes <drhodes@opensource.cirrus.com >
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220303173059.269657-2-tanureal@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2022-03-07 13:12:36 +00:00
Charles Keepax
f517ba4924
ASoC: cs35l41: Add support for hibernate memory retention mode
...
The cs35l41 supports a low power DSP memory retention mode. Add support
for entering this mode when then device is not in use.
Co-authored-by: David Rhodes <david.rhodes@cirrus.com >
Signed-off-by: David Rhodes <david.rhodes@cirrus.com >
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220107160636.6555-3-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2022-01-07 17:14:27 +00:00
Charles Keepax
d92321bbe4
ASoC: cs35l41: Update handling of test key registers
...
In preparation for the addition of PM runtime support move the test
key out of the register patches themselves. This is necessary to
allow the test key to be held during cache synchronisation, which is
required by the OTP settings which were unpacked from the device and
written by the driver.
Also whilst at it, the driver uses a mixture of accessing the test key
register by name and by address, consistently use the name.
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220107160636.6555-2-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2022-01-07 17:14:26 +00:00
Charles Keepax
56852cf4b2
ASoC: cs35l41: Correct DSP power down
...
The wm_adsp_event should be called before the early_event on power
down, event stops the core running and early_event then powers down
the core. Additionally, the core should only be stopped if it was
actually running in the first place.
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220105113026.18955-4-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2022-01-05 13:53:51 +00:00
Charles Keepax
4e7c3cd87d
ASoC: cs35l41: Remove incorrect comment
...
The IRQ is not used for the PDN_DONE bit, this is polled during the DAPM
sequence, remove the misleading comment.
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20220105113026.18955-3-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2022-01-05 13:53:50 +00:00
Lucas Tanure
e8e4fcc047
ASoC: cs35l41: Create shared function for boost configuration
...
ASoC and HDA will use the same registers to configure
internal boost for the device
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20211217115708.882525-7-tanureal@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2021-12-31 13:21:06 +00:00
Lucas Tanure
3bc3e3da65
ASoC: cs35l41: Create shared function for setting channels
...
ASoC and HDA will use the same register to set channels
for the device
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20211217115708.882525-6-tanureal@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2021-12-31 13:21:04 +00:00
Lucas Tanure
8b2278604b
ASoC: cs35l41: Create shared function for errata patches
...
ASoC and HDA systems require the same errata patches, so
move it to the shared code using a function the correctly
applies the patches by revision
Also, move CS35L41_DSP1_CCM_CORE_CTRL write to errata
patch function as is required to be written at boot,
but not in regmap_register_patch sequence as will affect
waking up from hibernation
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20211217115708.882525-5-tanureal@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2021-12-31 13:21:03 +00:00
Lucas Tanure
062ce05933
ASoC: cs35l41: Move power initializations to reg_sequence
...
ASoC and HDA systems for all revisions of CS35L41 will benefit
from having this initialization, so add it to reg_sequence of
each revision
By moving to reg_sequence all gains are set to zero. And boost,
monitoring parts, and class D amplifier are disabled.
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20211217115708.882525-4-tanureal@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2021-12-31 13:21:02 +00:00
Lucas Tanure
fe120d4cb6
ASoC: cs35l41: Move cs35l41_otp_unpack to shared code
...
ASoC and HDA will do the same cs35l41_otp_unpack, so move it
to shared code
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20211217115708.882525-3-tanureal@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2021-12-31 13:21:01 +00:00
Mark Brown
67140b64b6
Merge branch 'for-5.16' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into asoc-5.17 so we can apply new Tegra work
2021-12-01 14:15:12 +00:00
Lucas Tanure
a5e0091d62
ASoC: cs35l41: Fix link problem
...
Can't link I2C and SPI to the same binary, better
to move CS35L41 to 3 modules approach.
And instead of exposing cs35l41_reg, volatile_reg,
readable_reg and precious_reg arrays, move
cs35l41_regmap_i2c/spi to new module and expose it.
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20211125143501.7720-1-tanureal@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2021-11-26 13:24:31 +00:00
Lucas Tanure
872fc0b6bd
ASoC: cs35l41: Set the max SPI speed for the whole device
...
Higher speeds are only supported when PLL is enabled, but
the current driver doesn't enable PLL outside of stream
use cases, so better to set the lowest SPI speed accepted
by the entire device.
Move the current frequency set to the spi sub-driver so
the whole device can benefit from that speed.
spi-max-frequency property could be used, but ACPI systems don't
support it, so by setting it in the spi sub-driver probe
both Device Trees and ACPI systems are supported.
Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com >
Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20211123163149.1530535-2-tanureal@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2021-11-24 12:57:10 +00:00
David Rhodes
bae9e13fc5
ASoC: cs35l41: DSP Support
...
Support for HALO DSP and firmware
Signed-off-by: David Rhodes <drhodes@opensource.cirrus.com >
Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20211029214028.401284-2-drhodes@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2021-11-15 19:25:20 +00:00
Charles Keepax
a2697972b9
ASoC: cs35l41: Change monitor widgets to siggens
...
Currently the internal monitor sources are input widgets, which means
if the card is set to fully routed these will not enable unless connected
to something in the machine driver. However, all these are internal
monitor signals so it makes no sense to connect them to something in the
machine driver. As such switch them to siggen widgets which will have
the same behaviour except not require external linkage on a fully routed
card.
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Signed-off-by: David Rhodes <drhodes@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20211029214028.401284-1-drhodes@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2021-11-02 13:39:58 +00:00
Uwe Kleine-König
ca7270a7b6
ASoC: cs35l41: Make cs35l41_remove() return void
...
Up to now cs35l41_remove() returns zero unconditionally. Make it
return void instead which makes it easier to see in the callers that
there is no error to handle.
Also the return value of i2c, platform and spi remove callbacks is
ignored anyway.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de >
Link: https://lore.kernel.org/r/20211020132416.30288-1-u.kleine-koenig@pengutronix.de
Signed-off-by: Mark Brown <broonie@kernel.org >
2021-10-25 12:36:19 +01:00
Charles Keepax
c6d1fa6c8f
misc: cs35l41: Remove unused pdn variable
...
Remove pdn variable that was made redundant in an earlier patch.
Fixes: c2f14cc2bc ("ASoC: cs35l41: Fix use of an uninitialised variable")
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20210916082346.12001-1-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2021-09-16 14:11:16 +01:00
Charles Keepax
4295c8cc17
ASoC: cs35l41: Fix a bunch of trivial code formating/style issues
...
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20210914141349.30218-6-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2021-09-15 13:12:35 +01:00
Charles Keepax
3e60abeb5c
ASoC: cs35l41: Fixup the error messages
...
It is not idiomatic for ASoC to print the function name in the error
messages, however it is expected to show the return code. Update the
error messages to follow these conventions.
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20210914141349.30218-5-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2021-09-15 13:12:34 +01:00
Charles Keepax
e371eadf2a
ASoC: cs35l41: Don't overwrite returned error code
...
In multiple places the driver overwrites the error code returned with
a static error code, this is not helpful for debugging. Update to pass
the error codes straight through.
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20210914141349.30218-4-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2021-09-15 13:12:33 +01:00
Charles Keepax
fe1024d504
ASoC: cs35l41: Combine adjacent register writes
...
cs35l41 is often connected over I2C which is a very slow bus, as such
timings can be greatly improved combining writes where acceptable.
Update several points where the driver does multiple register writes
when a single one would suffice.
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20210914141349.30218-3-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2021-09-15 13:12:32 +01:00
Charles Keepax
3a2eb0b4b0
ASoC: cs35l41: Use regmap_read_poll_timeout to wait for OTP boot
...
Just clean up the code a little by using the helper rather than open
coding waiting for OTP_BOOT_DONE.
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20210914141349.30218-2-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2021-09-15 13:12:31 +01:00
Charles Keepax
c2f14cc2bc
ASoC: cs35l41: Fix use of an uninitialised variable
...
The loop checking PDN_DONE doesn't check the return value from
regmap_read, nor does it initialise val. This means if regmap_read fails
val will be checked for the PDN_DONE bit whilst being uninitialised.
Fix this up by switching to regmap_read_poll_timeout which tidies up the
code and avoids the uninitialised variable.
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20210914141349.30218-1-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2021-09-15 13:12:30 +01:00
David Rhodes
6450ef5590
ASoC: cs35l41: CS35L41 Boosted Smart Amplifier
...
SoC Audio driver for the Cirrus Logic CS35L41 amplifier
Signed-off-by: David Rhodes <drhodes@opensource.cirrus.com >
Tested-by: Charles Keepax <ckeepax@opensource.cirrus.com >
Link: https://lore.kernel.org/r/20210907225719.2018115-2-drhodes@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org >
2021-09-13 01:45:11 +01:00