ASoC: cs-amp-lib: Add helpers for factory calibration data
authorRichard Fitzgerald <rf@opensource.cirrus.com>
Fri, 23 Feb 2024 15:39:06 +0000 (15:39 +0000)
committerMark Brown <broonie@kernel.org>
Fri, 23 Feb 2024 17:21:39 +0000 (17:21 +0000)
commit1cad8725f2b98965ed3658bc917090b30adb14fa
treeedf4394c43847e1e18c069d7e3109559557f49b0
parent5519ac3a7164d5d1c31879bf5b0d279b58c8e88f
ASoC: cs-amp-lib: Add helpers for factory calibration data

Create a new library for code that is used by multiple Cirrus Logic
amps. This initially implements extracting amp calibration data
from EFI and writing it to firmware controls.

During factory calibration of built-in speakers the firmware
calibration constants are stored in an EFI file. The file contains
an array of calibration constants for each of the speakers.
cs_amp_get_calibration_data() searches for an entry matching the
requested UID stamp, otherwise by array index. If the data is found in
EFI the constants for that speaker are copied back to the caller.

If EFI is not enabled, the cs_amp_get_calibration_data() implementation
will compile to simply return -ENOENT and the linker can drop the code.

The code to write calibration controls uses cs_dsp. Building of cs_dsp
is not forced. Instead, the code will compile away the calls to
cs_dsp if cs_dsp is not reachable.

This strategy of conditional code allows cs-amp-lib to be shared by
multiple drivers without forcing inclusion of other modules that might
be unnecessary.

The calls to efi.get_variable() and cs_dsp are in small wrapper
functions. This is so that a KUNIT_STATIC_STUB_REDIRECT can be added in
a future patch to redirect these calls to replacement functions for
KUnit testing.

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20240223153910.2063698-3-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/cs-amp-lib.h [new file with mode: 0644]
sound/soc/codecs/Kconfig
sound/soc/codecs/Makefile
sound/soc/codecs/cs-amp-lib.c [new file with mode: 0644]