mirror of
https://github.com/alsa-project/alsa-utils
synced 2024-11-10 07:55:42 +01:00
f9e6010d5e
Add Intel nhlt acpi table encoder plugin into topology2.0 processing. Nhlt internal structure is defined in: https://01.org/sites/default/files/595976_intel_sst_nhlt.pdf Nhlt acpi table contain vendor specific binary data blobs that are used in some Intel dsp platforms for configuring the dmic and ssp hardware. The function of this code is mainly to generate the vendor specific binary blobs, but as there is existing nhlt parser code and header in kernel there's no point of re-inventing the container: just use the existing nhlt acpi table format. Basically this code is creating similar nhlt acpi table that you would get from: cat /sys/firmware/acpi/tables/NHLT This code will have implementation for dmic and ssp endpoints. Thus the code will translate the topology dai tokens into vendor specific binary blobs and pack them into nhlt acpi table. Ssp and dmic code is lifted from Sound Open Firmware (sof) code base, thus it will have BSD-3 license. This plugin can be enabled from command line with: alsatplg -DPREPROCESS_PLUGINS="nhlt" -c foo.conf -p -o bar.tplg You can also dump the nhlt binary into a file with additional define: -DNHLT_BIN="nhlt.bin" Link: https://github.com/alsa-project/alsa-utils/pull/129 Signed-off-by: Jaska Uimonen <jaska.uimonen@linux.intel.com> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
41 lines
1.9 KiB
C
41 lines
1.9 KiB
C
// SPDX-License-Identifier: BSD-3-Clause
|
|
//
|
|
// Copyright(c) 2021 Intel Corporation. All rights reserved.
|
|
//
|
|
// Author: Liam Girdwood <liam.r.girdwood@linux.intel.com>
|
|
// Keyon Jie <yang.jie@linux.intel.com>
|
|
// Rander Wang <rander.wang@linux.intel.com>
|
|
// Jaska Uimonen <jaska.uimonen@linux.intel.com>
|
|
|
|
#ifndef __SSP_PROCESS_H
|
|
#define __SSP_PROCESS_H
|
|
|
|
#include <stdint.h>
|
|
|
|
/* initialize and set default values before parsing */
|
|
int ssp_init_params(struct intel_nhlt_params *nhlt);
|
|
|
|
/* set parameters when parsing topology2 conf */
|
|
int ssp_set_params(struct intel_nhlt_params *nhlt, const char *dir, int dai_index, int io_clk,
|
|
int bclk_delay, int sample_bits, int mclk_id, int clks_control,
|
|
int frame_pulse_width, const char *tdm_padding_per_slot, const char *quirks);
|
|
int ssp_hw_set_params(struct intel_nhlt_params *nhlt, const char *format, const char *mclk,
|
|
const char *bclk, const char *bclk_invert, const char *fsync,
|
|
const char *fsync_invert, int mclk_freq, int bclk_freq, int fsync_freq,
|
|
int tdm_slots, int tdm_slot_width, int tx_slots, int rx_slots);
|
|
|
|
/* calculate the blob after parsing the values*/
|
|
int ssp_calculate(struct intel_nhlt_params *nhlt);
|
|
/* get spec parameters when building the nhlt endpoint */
|
|
int ssp_get_params(struct intel_nhlt_params *nhlt, int dai_index, uint32_t *virtualbus_id,
|
|
uint32_t *formats_count);
|
|
int ssp_get_hw_params(struct intel_nhlt_params *nhlt, int hw_index, uint32_t *sample_rate,
|
|
uint16_t *channel_count, uint32_t *bits_per_sample);
|
|
int ssp_get_dir(struct intel_nhlt_params *nhlt, int dai_index, uint8_t *dir);
|
|
/* get vendor specific blob when building the nhlt endpoint */
|
|
int ssp_get_vendor_blob_count(struct intel_nhlt_params *nhlt);
|
|
int ssp_get_vendor_blob_size(struct intel_nhlt_params *nhlt, size_t *size);
|
|
int ssp_get_vendor_blob(struct intel_nhlt_params *nhlt, uint8_t *vendor_blob, int dai_index,
|
|
int hw_config_index);
|
|
|
|
#endif
|