mirror of https://github.com/torvalds/linux.git
91 lines
2.6 KiB
C
91 lines
2.6 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[] __counted_by(count);
|
|
} __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_read_cal_coeffs(struct cs_dsp *dsp,
|
|
const struct cirrus_amp_cal_controls *controls,
|
|
struct cirrus_amp_cal_data *data);
|
|
int cs_amp_write_ambient_temp(struct cs_dsp *dsp,
|
|
const struct cirrus_amp_cal_controls *controls,
|
|
u32 temp);
|
|
int cs_amp_get_efi_calibration_data(struct device *dev, u64 target_uid, int amp_index,
|
|
struct cirrus_amp_cal_data *out_data);
|
|
int cs_amp_set_efi_calibration_data(struct device *dev, int amp_index, int num_amps,
|
|
const struct cirrus_amp_cal_data *in_data);
|
|
int cs_amp_get_vendor_spkid(struct device *dev);
|
|
struct dentry *cs_amp_create_debugfs(struct device *dev);
|
|
|
|
static inline u64 cs_amp_cal_target_u64(const struct cirrus_amp_cal_data *data)
|
|
{
|
|
return ((u64)data->calTarget[1] << 32) | data->calTarget[0];
|
|
}
|
|
|
|
struct cs_amp_test_hooks {
|
|
efi_status_t (*get_efi_variable)(efi_char16_t *name,
|
|
efi_guid_t *guid,
|
|
u32 *returned_attr,
|
|
unsigned long *size,
|
|
void *buf);
|
|
efi_status_t (*set_efi_variable)(efi_char16_t *name,
|
|
efi_guid_t *guid,
|
|
u32 attr,
|
|
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);
|
|
|
|
int (*read_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 */
|