linux/sound
Richard Fitzgerald e2bcbf99d0
ASoC: cs48l32: Add driver for Cirrus Logic CS48L32 audio DSP
Add a codec driver for the Cirrus Logic CS48L32 audio DSP.

The CS48L32 is a low-power audio DSP with microphone inputs for
"Always on Voice" (i.e. voice trigger) and voice command processing.
It has a programmable Halo Core DSP and a variety of power-efficient
fixed-function audio processors, with configurable digital mixing
and routing.

There are two I2S/TDM audio serial ports.

Four analogue inputs are available through IN1. These feed into a
2-channel ADC through an analogue mux. There is an ALSA control for
each IN1 ADC channel to select which analogue input to use.

A dedicated digital mic (DMIC) PDM input is available on IN2.

Two PDM outputs can feed DMIC inputs on another codec or a host DMIC/PDM
input.

An on-board regulator provides a power supply or bias voltage to
attached microphones. Three switchable MICBIAS outputs are fed from this
allowing only the microphone in use to be powered-up. There are DAPM
widgets for these outputs: MICBIAS1A, MICBIAS1B and MICBIAS1C. The machine
driver must create a DAPM route from the required MICBIAS1x widget to the
INn input widgets to make the MICBIAS switch on when the audio input is
powered-up. For example if the microphone feeding CS48L32 pin IN1LN_1 is
powered from MICBIAS1A, the machine driver must create the path:

  (sink) IN1LN_1   <----- (source) MICBIAS1A

Co-developed-by: Stuart Henderson <stuarth@opensource.cirrus.com>
Signed-off-by: Stuart Henderson <stuarth@opensource.cirrus.com>
Co-developed-by: Qi Zhou <qi.zhou@cirrus.com>
Signed-off-by: Qi Zhou <qi.zhou@cirrus.com>
Co-developed-by: Piotr Stankiewicz <piotrs@opensource.cirrus.com>
Signed-off-by: Piotr Stankiewicz <piotrs@opensource.cirrus.com>
Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Link: https://patch.msgid.link/20250415115016.505777-3-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
2025-04-15 13:58:43 +01:00
..
ac97 ALSA: ac97: Convert to RUNTIME_PM_OPS() macro 2025-03-14 11:07:13 +01:00
aoa ALSA: Drop explicit initialization of struct i2c_device_id::driver_data to 0 2024-09-20 17:44:52 +02:00
arm ALSA: arm: aaci: Constify amba_id table 2025-02-23 18:14:49 +01:00
atmel ALSA: atmel: Convert to DEFINE_SIMPLE_DEV_PM_OPS() macro 2025-03-14 11:07:13 +01:00
core treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
drivers treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
firewire ALSA: firewire: Simplify with str_on_off() 2025-01-08 07:58:39 +01:00
hda ALSA/hda: intel-sdw-acpi: Remove (explicitly) unused header 2025-03-31 11:31:36 +02:00
i2c treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
isa treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
mips sound: Switch back to struct platform_driver::remove() 2024-10-30 14:47:59 +01:00
oss sound: Switch back to struct platform_driver::remove() 2024-10-30 14:47:59 +01:00
parisc
pci treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
pcmcia ALSA: vxpocket: Fix a typo at conversion to dev_*() 2024-08-08 20:23:41 +02:00
ppc ALSA: ppc: Remove i2c client removal hack 2025-01-03 13:21:54 +01:00
sh treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
soc ASoC: cs48l32: Add driver for Cirrus Logic CS48L32 audio DSP 2025-04-15 13:58:43 +01:00
sparc sound: Switch back to struct platform_driver::remove() 2024-10-30 14:47:59 +01:00
spi
synth ALSA: emux: Use standard print API 2024-08-08 07:49:46 +02:00
usb treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
virtio sound/virtio: Fix cancel_sync warnings on uninitialized work_structs 2025-02-25 07:10:46 -05:00
x86 ALSA: intel-hdmi-audio: Convert to SYSTEM_SLEEP_PM_OPS() 2025-03-14 11:07:14 +01:00
xen
ac97_bus.c
Kconfig sound: Make CONFIG_SND depend on INDIRECT_IOMEM instead of UML 2024-10-10 16:11:18 +02:00
last.c
Makefile
sound_core.c