ASoC: SOF: topology: Add support for AMD ACP DAIs
[linux-2.6-microblaze.git] / include / sound / sof / dai.h
1 /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
2 /*
3  * This file is provided under a dual BSD/GPLv2 license.  When using or
4  * redistributing this file, you may do so under either license.
5  *
6  * Copyright(c) 2018 Intel Corporation. All rights reserved.
7  */
8
9 #ifndef __INCLUDE_SOUND_SOF_DAI_H__
10 #define __INCLUDE_SOUND_SOF_DAI_H__
11
12 #include <sound/sof/header.h>
13 #include <sound/sof/dai-intel.h>
14 #include <sound/sof/dai-imx.h>
15 #include <sound/sof/dai-amd.h>
16
17 /*
18  * DAI Configuration.
19  *
20  * Each different DAI type will have it's own structure and IPC cmd.
21  */
22
23 #define SOF_DAI_FMT_I2S         1 /**< I2S mode */
24 #define SOF_DAI_FMT_RIGHT_J     2 /**< Right Justified mode */
25 #define SOF_DAI_FMT_LEFT_J      3 /**< Left Justified mode */
26 #define SOF_DAI_FMT_DSP_A       4 /**< L data MSB after FRM LRC */
27 #define SOF_DAI_FMT_DSP_B       5 /**< L data MSB during FRM LRC */
28 #define SOF_DAI_FMT_PDM         6 /**< Pulse density modulation */
29
30 #define SOF_DAI_FMT_CONT        (1 << 4) /**< continuous clock */
31 #define SOF_DAI_FMT_GATED       (0 << 4) /**< clock is gated */
32
33 #define SOF_DAI_FMT_NB_NF       (0 << 8) /**< normal bit clock + frame */
34 #define SOF_DAI_FMT_NB_IF       (2 << 8) /**< normal BCLK + inv FRM */
35 #define SOF_DAI_FMT_IB_NF       (3 << 8) /**< invert BCLK + nor FRM */
36 #define SOF_DAI_FMT_IB_IF       (4 << 8) /**< invert BCLK + FRM */
37
38 #define SOF_DAI_FMT_CBP_CFP     (0 << 12) /**< codec bclk provider & frame provider */
39 #define SOF_DAI_FMT_CBC_CFP     (2 << 12) /**< codec bclk consumer & frame provider */
40 #define SOF_DAI_FMT_CBP_CFC     (3 << 12) /**< codec bclk provider & frame consumer */
41 #define SOF_DAI_FMT_CBC_CFC     (4 << 12) /**< codec bclk consumer & frame consumer */
42
43 /* keep old definitions for backwards compatibility */
44 #define SOF_DAI_FMT_CBM_CFM     SOF_DAI_FMT_CBP_CFP
45 #define SOF_DAI_FMT_CBS_CFM     SOF_DAI_FMT_CBC_CFP
46 #define SOF_DAI_FMT_CBM_CFS     SOF_DAI_FMT_CBP_CFC
47 #define SOF_DAI_FMT_CBS_CFS     SOF_DAI_FMT_CBC_CFC
48
49 #define SOF_DAI_FMT_FORMAT_MASK         0x000f
50 #define SOF_DAI_FMT_CLOCK_MASK          0x00f0
51 #define SOF_DAI_FMT_INV_MASK            0x0f00
52 #define SOF_DAI_FMT_CLOCK_PROVIDER_MASK 0xf000
53
54 /* DAI_CONFIG flags */
55 #define SOF_DAI_CONFIG_FLAGS_MASK       0x3
56 #define SOF_DAI_CONFIG_FLAGS_NONE       (0 << 0) /**< DAI_CONFIG sent without stage information */
57 #define SOF_DAI_CONFIG_FLAGS_HW_PARAMS  (1 << 0) /**< DAI_CONFIG sent during hw_params stage */
58 #define SOF_DAI_CONFIG_FLAGS_HW_FREE    (2 << 0) /**< DAI_CONFIG sent during hw_free stage */
59 #define SOF_DAI_CONFIG_FLAGS_RFU        (3 << 0) /**< not used, reserved for future use */
60
61 /** \brief Types of DAI */
62 enum sof_ipc_dai_type {
63         SOF_DAI_INTEL_NONE = 0,         /**< None */
64         SOF_DAI_INTEL_SSP,              /**< Intel SSP */
65         SOF_DAI_INTEL_DMIC,             /**< Intel DMIC */
66         SOF_DAI_INTEL_HDA,              /**< Intel HD/A */
67         SOF_DAI_INTEL_ALH,              /**< Intel ALH  */
68         SOF_DAI_IMX_SAI,                /**< i.MX SAI */
69         SOF_DAI_IMX_ESAI,               /**< i.MX ESAI */
70         SOF_DAI_AMD_BT,                 /**< AMD ACP BT*/
71         SOF_DAI_AMD_SP,                 /**< AMD ACP SP */
72         SOF_DAI_AMD_DMIC,               /**< AMD ACP DMIC */
73 };
74
75 /* general purpose DAI configuration */
76 struct sof_ipc_dai_config {
77         struct sof_ipc_cmd_hdr hdr;
78         uint32_t type;          /**< DAI type - enum sof_ipc_dai_type */
79         uint32_t dai_index;     /**< index of this type dai */
80
81         /* physical protocol and clocking */
82         uint16_t format;        /**< SOF_DAI_FMT_ */
83         uint8_t group_id;       /**< group ID, 0 means no group (ABI 3.17) */
84         uint8_t flags;          /**< SOF_DAI_CONFIG_FLAGS_ (ABI 3.19) */
85
86         /* reserved for future use */
87         uint32_t reserved[8];
88
89         /* HW specific data */
90         union {
91                 struct sof_ipc_dai_ssp_params ssp;
92                 struct sof_ipc_dai_dmic_params dmic;
93                 struct sof_ipc_dai_hda_params hda;
94                 struct sof_ipc_dai_alh_params alh;
95                 struct sof_ipc_dai_esai_params esai;
96                 struct sof_ipc_dai_sai_params sai;
97                 struct sof_ipc_dai_acp_params acpbt;
98                 struct sof_ipc_dai_acp_params acpsp;
99                 struct sof_ipc_dai_acp_params acpdmic;
100         };
101 } __packed;
102
103 #endif