1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Copyright(c) 2021 Intel Corporation
4 *
5 * Authors: Cezary Rojewski <cezary.rojewski@intel.com>
6 * Amadeusz Slawinski <amadeuszx.slawinski@linux.intel.com>
7 */
8
9#ifndef __SOUND_SOC_INTEL_AVS_PATH_H
10#define __SOUND_SOC_INTEL_AVS_PATH_H
11
12#include <linux/list.h>
13#include "avs.h"
14#include "topology.h"
15
16#define AVS_COND_TYPE_NONE 0
17#define AVS_COND_TYPE_AECREF 1
18
19struct avs_path {
20 u32 dma_id;
21 struct list_head ppl_list;
22 u32 state;
23
24 /* condpath navigation for standard paths */
25 struct list_head source_list;
26 struct list_head sink_list;
27
28 /* conditional path fields */
29 struct avs_path *source;
30 struct avs_path *sink;
31 struct list_head source_node;
32 struct list_head sink_node;
33
34 struct avs_tplg_path *template;
35 struct avs_dev *owner;
36 /* device path management */
37 struct list_head node;
38};
39
40struct avs_path_pipeline {
41 u8 instance_id;
42 struct list_head mod_list;
43 struct list_head binding_list;
44
45 struct avs_tplg_pipeline *template;
46 struct avs_path *owner;
47 /* path pipelines management */
48 struct list_head node;
49};
50
51struct avs_path_module {
52 u16 module_id;
53 u8 instance_id;
54 union avs_gtw_attributes gtw_attrs;
55
56 struct avs_tplg_module *template;
57 struct avs_path_pipeline *owner;
58 /* pipeline modules management */
59 struct list_head node;
60};
61
62struct avs_path_binding {
63 struct avs_path_module *source;
64 u8 source_pin;
65 struct avs_path_module *sink;
66 u8 sink_pin;
67
68 struct avs_tplg_binding *template;
69 struct avs_path_pipeline *owner;
70 /* pipeline bindings management */
71 struct list_head node;
72};
73
74void avs_path_free(struct avs_path *path);
75struct avs_path *avs_path_create(struct avs_dev *adev, u32 dma_id,
76 struct avs_tplg_path_template *template,
77 struct snd_pcm_hw_params *fe_params,
78 struct snd_pcm_hw_params *be_params);
79int avs_path_bind(struct avs_path *path);
80int avs_path_unbind(struct avs_path *path);
81int avs_path_reset(struct avs_path *path);
82int avs_path_pause(struct avs_path *path);
83int avs_path_run(struct avs_path *path, int trigger);
84
85int avs_path_set_constraint(struct avs_dev *adev, struct avs_tplg_path_template *template,
86 struct snd_pcm_hw_constraint_list *rate_list,
87 struct snd_pcm_hw_constraint_list *channels_list,
88 struct snd_pcm_hw_constraint_list *sample_bits_list);
89
90int avs_peakvol_set_volume(struct avs_dev *adev, struct avs_path_module *mod,
91 struct soc_mixer_control *mc, long *input);
92int avs_peakvol_set_mute(struct avs_dev *adev, struct avs_path_module *mod,
93 struct soc_mixer_control *mc, long *input);
94
95#endif
96

source code of linux/sound/soc/intel/avs/path.h