1 /* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */
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.
6 * Copyright(c) 2018 Intel Corporation. All rights reserved.
9 #ifndef __INCLUDE_SOUND_SOF_CONTROL_H__
10 #define __INCLUDE_SOUND_SOF_CONTROL_H__
12 #include <uapi/sound/sof/header.h>
13 #include <sound/sof/header.h>
16 * Component Mixers and Controls
19 /* channel positions - uses same values as ALSA */
21 SOF_CHMAP_UNKNOWN
= 0,
22 SOF_CHMAP_NA
, /**< N/A, silent */
23 SOF_CHMAP_MONO
, /**< mono stream */
24 SOF_CHMAP_FL
, /**< front left */
25 SOF_CHMAP_FR
, /**< front right */
26 SOF_CHMAP_RL
, /**< rear left */
27 SOF_CHMAP_RR
, /**< rear right */
28 SOF_CHMAP_FC
, /**< front centre */
29 SOF_CHMAP_LFE
, /**< LFE */
30 SOF_CHMAP_SL
, /**< side left */
31 SOF_CHMAP_SR
, /**< side right */
32 SOF_CHMAP_RC
, /**< rear centre */
33 SOF_CHMAP_FLC
, /**< front left centre */
34 SOF_CHMAP_FRC
, /**< front right centre */
35 SOF_CHMAP_RLC
, /**< rear left centre */
36 SOF_CHMAP_RRC
, /**< rear right centre */
37 SOF_CHMAP_FLW
, /**< front left wide */
38 SOF_CHMAP_FRW
, /**< front right wide */
39 SOF_CHMAP_FLH
, /**< front left high */
40 SOF_CHMAP_FCH
, /**< front centre high */
41 SOF_CHMAP_FRH
, /**< front right high */
42 SOF_CHMAP_TC
, /**< top centre */
43 SOF_CHMAP_TFL
, /**< top front left */
44 SOF_CHMAP_TFR
, /**< top front right */
45 SOF_CHMAP_TFC
, /**< top front centre */
46 SOF_CHMAP_TRL
, /**< top rear left */
47 SOF_CHMAP_TRR
, /**< top rear right */
48 SOF_CHMAP_TRC
, /**< top rear centre */
49 SOF_CHMAP_TFLC
, /**< top front left centre */
50 SOF_CHMAP_TFRC
, /**< top front right centre */
51 SOF_CHMAP_TSL
, /**< top side left */
52 SOF_CHMAP_TSR
, /**< top side right */
53 SOF_CHMAP_LLFE
, /**< left LFE */
54 SOF_CHMAP_RLFE
, /**< right LFE */
55 SOF_CHMAP_BC
, /**< bottom centre */
56 SOF_CHMAP_BLC
, /**< bottom left centre */
57 SOF_CHMAP_BRC
, /**< bottom right centre */
58 SOF_CHMAP_LAST
= SOF_CHMAP_BRC
,
61 /* control data type and direction */
62 enum sof_ipc_ctrl_type
{
63 /* per channel data - uses struct sof_ipc_ctrl_value_chan */
64 SOF_CTRL_TYPE_VALUE_CHAN_GET
= 0,
65 SOF_CTRL_TYPE_VALUE_CHAN_SET
,
66 /* component data - uses struct sof_ipc_ctrl_value_comp */
67 SOF_CTRL_TYPE_VALUE_COMP_GET
,
68 SOF_CTRL_TYPE_VALUE_COMP_SET
,
69 /* bespoke data - uses struct sof_abi_hdr */
70 SOF_CTRL_TYPE_DATA_GET
,
71 SOF_CTRL_TYPE_DATA_SET
,
74 /* control command type */
75 enum sof_ipc_ctrl_cmd
{
76 SOF_CTRL_CMD_VOLUME
= 0, /**< maps to ALSA volume style controls */
77 SOF_CTRL_CMD_ENUM
, /**< maps to ALSA enum style controls */
78 SOF_CTRL_CMD_SWITCH
, /**< maps to ALSA switch style controls */
79 SOF_CTRL_CMD_BINARY
, /**< maps to ALSA binary style controls */
82 /* generic channel mapped value data */
83 struct sof_ipc_ctrl_value_chan
{
84 uint32_t channel
; /**< channel map - enum sof_ipc_chmap */
88 /* generic component mapped value data */
89 struct sof_ipc_ctrl_value_comp
{
90 uint32_t index
; /**< component source/sink/control index in control */
97 /* generic control data */
98 struct sof_ipc_ctrl_data
{
99 struct sof_ipc_reply rhdr
;
102 /* control access and data type */
103 uint32_t type
; /**< enum sof_ipc_ctrl_type */
104 uint32_t cmd
; /**< enum sof_ipc_ctrl_cmd */
105 uint32_t index
; /**< control index for comps > 1 control */
107 /* control data - can either be appended or DMAed from host */
108 struct sof_ipc_host_buffer buffer
;
109 uint32_t num_elems
; /**< in array elems or bytes for data type */
110 uint32_t elems_remaining
; /**< elems remaining if sent in parts */
112 uint32_t msg_index
; /**< for large messages sent in parts */
114 /* reserved for future use */
115 uint32_t reserved
[6];
117 /* control data - add new types if needed */
119 /* channel values can be used by volume type controls */
120 struct sof_ipc_ctrl_value_chan chanv
[0];
121 /* component values used by routing controls like mux, mixer */
122 struct sof_ipc_ctrl_value_comp compv
[0];
123 /* data can be used by binary controls */
124 struct sof_abi_hdr data
[0];
129 enum sof_ipc_ctrl_event_type
{
130 SOF_CTRL_EVENT_GENERIC
= 0, /**< generic event */
131 SOF_CTRL_EVENT_GENERIC_METADATA
, /**< generic event with metadata */
132 SOF_CTRL_EVENT_KD
, /**< keyword detection event */
133 SOF_CTRL_EVENT_VAD
, /**< voice activity detection event */
137 * Generic notification data.
139 struct sof_ipc_comp_event
{
140 struct sof_ipc_reply rhdr
;
141 uint16_t src_comp_type
; /**< COMP_TYPE_ */
142 uint32_t src_comp_id
; /**< source component id */
143 uint32_t event_type
; /**< event type - SOF_CTRL_EVENT_* */
144 uint32_t num_elems
; /**< in array elems or bytes for data type */
146 /* reserved for future use */
147 uint32_t reserved
[8];
149 /* control data - add new types if needed */
151 /* data can be used by binary controls */
152 struct sof_abi_hdr data
[0];
153 /* event specific values */
154 uint32_t event_value
;