/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright (C) 2024 Cirrus Logic, Inc. and * Cirrus Logic International Semiconductor Ltd. */ #ifndef CS_AMP_LIB_H #define CS_AMP_LIB_H #include <linux/efi.h> #include <linux/types.h> struct cs_dsp; struct cirrus_amp_cal_data { u32 calTarget[2]; u32 calTime[2]; s8 calAmbient; u8 calStatus; u16 calR; } __packed; struct cirrus_amp_efi_data { u32 size; u32 count; struct cirrus_amp_cal_data data[]; } __packed; /** * struct cirrus_amp_cal_controls - definition of firmware calibration controls * @alg_id: ID of algorithm containing the controls. * @mem_region: DSP memory region containing the controls. * @ambient: Name of control for calAmbient value. * @calr: Name of control for calR value. * @status: Name of control for calStatus value. * @checksum: Name of control for checksum value. */ struct cirrus_amp_cal_controls { unsigned int alg_id; int mem_region; const char *ambient; const char *calr; const char *status; const char *checksum; }; int cs_amp_write_cal_coeffs(struct cs_dsp *dsp, const struct cirrus_amp_cal_controls *controls, const struct cirrus_amp_cal_data *data); int cs_amp_get_efi_calibration_data(struct device *dev, u64 target_uid, int amp_index, struct cirrus_amp_cal_data *out_data); struct cs_amp_test_hooks { efi_status_t (*get_efi_variable)(efi_char16_t *name, efi_guid_t *guid, unsigned long *size, void *buf); int (*write_cal_coeff)(struct cs_dsp *dsp, const struct cirrus_amp_cal_controls *controls, const char *ctl_name, u32 val); }; extern const struct cs_amp_test_hooks * const cs_amp_test_hooks; #endif /* CS_AMP_LIB_H */