• Richard Fitzgerald's avatar
    ASoC: cs-amp-lib: Add helpers for factory calibration data · 1cad8725
    Richard Fitzgerald authored
    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: default avatarRichard Fitzgerald <rf@opensource.cirrus.com>
    Link: https://lore.kernel.org/r/20240223153910.2063698-3-rf@opensource.cirrus.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    1cad8725
cs-amp-lib.c 7.48 KB