/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ /* * This file is provided under a dual BSD/GPLv2 license. When using or * redistributing this file, you may do so under either license. * * Copyright(c) 2018 Intel Corporation */ #ifndef __INCLUDE_SOUND_SOF_DAI_INTEL_H__ #define __INCLUDE_SOUND_SOF_DAI_INTEL_H__ #include <sound/sof/header.h> /* ssc1: TINTE */ #define SOF_DAI_INTEL_SSP_QUIRK_TINTE … /* ssc1: PINTE */ #define SOF_DAI_INTEL_SSP_QUIRK_PINTE … /* ssc2: SMTATF */ #define SOF_DAI_INTEL_SSP_QUIRK_SMTATF … /* ssc2: MMRATF */ #define SOF_DAI_INTEL_SSP_QUIRK_MMRATF … /* ssc2: PSPSTWFDFD */ #define SOF_DAI_INTEL_SSP_QUIRK_PSPSTWFDFD … /* ssc2: PSPSRWFDFD */ #define SOF_DAI_INTEL_SSP_QUIRK_PSPSRWFDFD … /* ssc1: LBM */ #define SOF_DAI_INTEL_SSP_QUIRK_LBM … /* here is the possibility to define others aux macros */ #define SOF_DAI_INTEL_SSP_FRAME_PULSE_WIDTH_MAX … #define SOF_DAI_INTEL_SSP_SLOT_PADDING_MAX … /* SSP clocks control settings * * Macros for clks_control field in sof_ipc_dai_ssp_params struct. */ /* mclk 0 disable */ #define SOF_DAI_INTEL_SSP_MCLK_0_DISABLE … /* mclk 1 disable */ #define SOF_DAI_INTEL_SSP_MCLK_1_DISABLE … /* mclk keep active */ #define SOF_DAI_INTEL_SSP_CLKCTRL_MCLK_KA … /* bclk keep active */ #define SOF_DAI_INTEL_SSP_CLKCTRL_BCLK_KA … /* fs keep active */ #define SOF_DAI_INTEL_SSP_CLKCTRL_FS_KA … /* bclk idle */ #define SOF_DAI_INTEL_SSP_CLKCTRL_BCLK_IDLE_HIGH … /* mclk early start */ #define SOF_DAI_INTEL_SSP_CLKCTRL_MCLK_ES … /* bclk early start */ #define SOF_DAI_INTEL_SSP_CLKCTRL_BCLK_ES … /* mclk always on */ #define SOF_DAI_INTEL_SSP_CLKCTRL_MCLK_AON … /* DMIC max. four controllers for eight microphone channels */ #define SOF_DAI_INTEL_DMIC_NUM_CTRL … /* SSP Configuration Request - SOF_IPC_DAI_SSP_CONFIG */ struct sof_ipc_dai_ssp_params { … } __packed; /* HDA Configuration Request - SOF_IPC_DAI_HDA_CONFIG */ struct sof_ipc_dai_hda_params { … } __packed; /* ALH Configuration Request - SOF_IPC_DAI_ALH_CONFIG */ struct sof_ipc_dai_alh_params { … } __packed; /* DMIC Configuration Request - SOF_IPC_DAI_DMIC_CONFIG */ /* This struct is defined per 2ch PDM controller available in the platform. * Normally it is sufficient to set the used microphone specific enables to 1 * and keep other parameters as zero. The customizations are: * * 1. If a device mixes different microphones types with different polarity * and/or the absolute polarity matters the PCM signal from a microphone * can be inverted with the controls. * * 2. If the microphones in a stereo pair do not appear in captured stream * in desired order due to board schematics choises they can be swapped with * the clk_edge parameter. * * 3. If PDM bit errors are seen in capture (poor quality) the skew parameter * that delays the sampling time of data by half cycles of DMIC source clock * can be tried for improvement. However there is no guarantee for this to fix * data integrity problems. */ struct sof_ipc_dai_dmic_pdm_ctrl { … } __packed; /* This struct contains the global settings for all 2ch PDM controllers. The * version number used in configuration data is checked vs. version used by * device driver src/drivers/dmic.c need to match. It is incremented from * initial value 1 if updates done for the to driver would alter the operation * of the microphone. * * Note: The microphone clock (pdmclk_min, pdmclk_max, duty_min, duty_max) * parameters need to be set as defined in microphone data sheet. E.g. clock * range 1.0 - 3.2 MHz is usually supported microphones. Some microphones are * multi-mode capable and there may be denied mic clock frequencies between * the modes. In such case set the clock range limits of the desired mode to * avoid the driver to set clock to an illegal rate. * * The duty cycle could be set to 48-52% if not known. Generally these * parameters can be altered within data sheet specified limits to match * required audio application performance power. * * The microphone clock needs to be usually about 50-80 times the used audio * sample rate. With highest sample rates above 48 kHz this can relaxed * somewhat. * * The parameter wake_up_time describes how long time the microphone needs * for the data line to produce valid output from mic clock start. The driver * will mute the captured audio for the given time. The min_clock_on_time * parameter is used to prevent too short clock bursts to happen. The driver * will keep the clock active after capture stop if this time is not yet * met. The unit for both is microseconds (us). Exceed of 100 ms will be * treated as an error. */ struct sof_ipc_dai_dmic_params { … } __packed; #endif