Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/sound/cs-amp-lib.h
49231 views
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[] __counted_by(count);
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_read_cal_coeffs(struct cs_dsp *dsp,
51
const struct cirrus_amp_cal_controls *controls,
52
struct cirrus_amp_cal_data *data);
53
int cs_amp_write_ambient_temp(struct cs_dsp *dsp,
54
const struct cirrus_amp_cal_controls *controls,
55
u32 temp);
56
int cs_amp_get_efi_calibration_data(struct device *dev, u64 target_uid, int amp_index,
57
struct cirrus_amp_cal_data *out_data);
58
int cs_amp_set_efi_calibration_data(struct device *dev, int amp_index, int num_amps,
59
const struct cirrus_amp_cal_data *in_data);
60
int cs_amp_get_vendor_spkid(struct device *dev);
61
struct dentry *cs_amp_create_debugfs(struct device *dev);
62
63
static inline u64 cs_amp_cal_target_u64(const struct cirrus_amp_cal_data *data)
64
{
65
return ((u64)data->calTarget[1] << 32) | data->calTarget[0];
66
}
67
68
struct cs_amp_test_hooks {
69
efi_status_t (*get_efi_variable)(efi_char16_t *name,
70
efi_guid_t *guid,
71
u32 *returned_attr,
72
unsigned long *size,
73
void *buf);
74
efi_status_t (*set_efi_variable)(efi_char16_t *name,
75
efi_guid_t *guid,
76
u32 attr,
77
unsigned long size,
78
void *buf);
79
80
int (*write_cal_coeff)(struct cs_dsp *dsp,
81
const struct cirrus_amp_cal_controls *controls,
82
const char *ctl_name, u32 val);
83
84
int (*read_cal_coeff)(struct cs_dsp *dsp,
85
const struct cirrus_amp_cal_controls *controls,
86
const char *ctl_name, u32 *val);
87
};
88
extern const struct cs_amp_test_hooks * const cs_amp_test_hooks;
89
90
#endif /* CS_AMP_LIB_H */
91
92