GNU Linux-libre 6.9.1-gnu
[releases.git] / include / sound / cs-amp-lib.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (C) 2024 Cirrus Logic, Inc. and
4  *                    Cirrus Logic International Semiconductor Ltd.
5  */
6
7 #ifndef CS_AMP_LIB_H
8 #define CS_AMP_LIB_H
9
10 #include <linux/efi.h>
11 #include <linux/types.h>
12
13 struct cs_dsp;
14
15 struct cirrus_amp_cal_data {
16         u32 calTarget[2];
17         u32 calTime[2];
18         s8  calAmbient;
19         u8  calStatus;
20         u16 calR;
21 } __packed;
22
23 struct cirrus_amp_efi_data {
24         u32 size;
25         u32 count;
26         struct cirrus_amp_cal_data data[];
27 } __packed;
28
29 /**
30  * struct cirrus_amp_cal_controls - definition of firmware calibration controls
31  * @alg_id:     ID of algorithm containing the controls.
32  * @mem_region: DSP memory region containing the controls.
33  * @ambient:    Name of control for calAmbient value.
34  * @calr:       Name of control for calR value.
35  * @status:     Name of control for calStatus value.
36  * @checksum:   Name of control for checksum value.
37  */
38 struct cirrus_amp_cal_controls {
39         unsigned int alg_id;
40         int mem_region;
41         const char *ambient;
42         const char *calr;
43         const char *status;
44         const char *checksum;
45 };
46
47 int cs_amp_write_cal_coeffs(struct cs_dsp *dsp,
48                             const struct cirrus_amp_cal_controls *controls,
49                             const struct cirrus_amp_cal_data *data);
50 int cs_amp_get_efi_calibration_data(struct device *dev, u64 target_uid, int amp_index,
51                                     struct cirrus_amp_cal_data *out_data);
52
53 struct cs_amp_test_hooks {
54         efi_status_t (*get_efi_variable)(efi_char16_t *name,
55                                          efi_guid_t *guid,
56                                          unsigned long *size,
57                                          void *buf);
58
59         int (*write_cal_coeff)(struct cs_dsp *dsp,
60                                const struct cirrus_amp_cal_controls *controls,
61                                const char *ctl_name, u32 val);
62 };
63
64 extern const struct cs_amp_test_hooks * const cs_amp_test_hooks;
65
66 #endif /* CS_AMP_LIB_H */