67 lines
1.7 KiB
C
67 lines
1.7 KiB
C
/* 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 */
|