[PATCH v9 00/17] ASoC: qcom: Add AudioReach support
Srinivas Kandagatla
srinivas.kandagatla at linaro.org
Wed Oct 6 13:39:33 CEST 2021
Hi Mark,
This version addresses all the comments raised as part of v8 review.
QCOM SoC relevant non-audio patches in this series has been merged into
the Qualcomm drivers-for-5.16 tree, as this series depends those patches
an immutable tag is available at:
https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux.git tags/20210927135559.738-6-srinivas.kandagatla at linaro.org
This patchset adds ASoC driver support to configure signal processing
framework ("AudioReach") which is integral part of Qualcomm next
generation audio SDK and will be deployed on upcoming Qualcomm chipsets.
It makes use of ASoC Topology to load graphs on to the DSP which is then
managed by APM (Audio Processing Manager) service to prepare/start/stop.
Here is simplified high-level block diagram of AudioReach:
___________________________________________________________
| CPU (Application Processor) |
| +---------+ +---------+ +----------+ |
| | q6apm | | q6apm | | q6apm | |
| | dais | <------> | | <-----> |lpass-dais| |
| +---------+ +---------+ +----------+ |
| ^ ^ |
| | | +---------+ |
| +---------+ v +---------->|topology | |
| | q6prm | +---------+ | | |
| | |<-------->| GPR | +---------+ |
| +---------+ +---------+ |
| ^ ^ |
| | | |
| +----------+ | |
| | q6prm | | |
| |lpass-clks| | |
| +----------+ | |
|____________________________|______________________________|
|
| RPMSG (IPC over GLINK)
____________________________|______________________________
| | |
| +-----------------------+ |
| | | |
| v v q6 (Audio DSP) |
|+-----+ +----------------------------------+ |
|| PRM | | APM (Audio Processing Manager) | |
|+-----+ | . Graph Management | |
| | . Command Handing | |
| | . Event Management | |
| | ... | |
| +----------------------------------+ |
| ^ |
|____________________________|______________________________|
|
| LPASS AIF
____________________________|______________________________
| | Audio I/O |
| v |
| +--------------------------------------------------+ |
| | Audio devices | |
| | CODEC | HDMI-TX | PCM | SLIMBUS | I2S |MI2S |...| |
| | | |
| +--------------------------------------------------+ |
|___________________________________________________________|
AudioReach has constructs of sub-graph, container and modules.
Each sub-graph can have N containers and each Container can have N Modules
and connections between them can be linear or non-linear.
An audio function can be realized with one or many connected
sub-graphs. There are also control/event paths between modules that can
be wired up while building graph to achieve various control mechanism
between modules. These concepts of Sub-Graph, Containers and Modules
are represented in ASoC topology.
Here is simple I2S graph with a Write Shared Memory and a
Volume control module within a single Subgraph (1) with one Container (1)
and 5 modules.
____________________________________________________________
| Sub-Graph [1] |
| _______________________________________________________ |
| | Container [1] | |
| | [WR_SH] -> [PCM DEC] -> [PCM CONV] -> [VOL]-> [I2S-EP]| |
| |_______________________________________________________| |
|____________________________________________________________|
For now this graph is split into two subgraphs to achieve dpcm like below:
________________________________________________ _________________
| Sub-Graph [1] | | Sub-Graph [2] |
| ____________________________________________ | | _____________ |
| | Container [1] | | | |Container [2]| |
| | [WR_SH] -> [PCM DEC] -> [PCM CONV] -> [VOL]| | | | [I2S-EP] | |
| |____________________________________________| | | |_____________| |
|________________________________________________| |_________________|
_________________
| Sub-Graph [3] |
| _____________ |
| |Container [3]| |
| | [DMA-EP] | |
| |_____________| |
|_________________|
This patchset adds very minimal support for AudioReach which includes
supporting sub-graphs containing CODEC DMA ports and simple PCM
Decoder/Encoder and Logger Modules. Additional capabilities will
be built over time to expose features offered by AudioReach.
This patchset is Tested on SM8250 SoC based Qualcomm Robotics Platform RB5
and SM9250 MTP with WSA881X Smart Speaker Amplifiers, DMICs connected via
VA Macro and WCD938x Codec connected via TX and RX Macro and HDMI audio
via I2S.
First 10 Patches are mostly reorganization existing Old QDSP Audio
Framework code and bindings so that we could reuse them on AudioReach.
ASoC topology graphs for DragonBoard RB5 and SM8250 MTP are available at
https://git.linaro.org/people/srinivas.kandagatla/audioreach-topology.git/
and Qualcomm AudioReach DSP headers are available at:
https://source.codeaurora.org/quic/la/platform/vendor/opensource/arspf-headers
Note: There is one false positive warning in this patchset:
audioreach.c:80:45: warning: array of flexible structures
Thanks,
srini
Changes since v8:
- made use of struct_size where possible.
- fixed an incorrect indent.
- adding __packed for consistency on structures that are passed to dsp.
- rebased to sound-next branch.
Srinivas Kandagatla (17):
ASoC: dt-bindings: move LPASS dai related bindings out of q6afe
ASoC: dt-bindings: move LPASS clocks related bindings out of q6afe
ASoC: dt-bindings: rename q6afe.h to q6dsp-lpass-ports.h
ASoC: qdsp6: q6afe-dai: move lpass audio ports to common file
ASoC: qdsp6: q6afe-clocks: move audio-clocks to common file
ASoC: dt-bindings: q6dsp: add q6apm-lpass-dai compatible
ASoC: dt-bindings: lpass-clocks: add q6prm clocks compatible
ASoC: dt-bindings: add q6apm digital audio stream bindings
ASoC: qdsp6: audioreach: add basic pkt alloc support
ASoC: qdsp6: audioreach: add q6apm support
ASoC: qdsp6: audioreach: add module configuration command helpers
ASoC: qdsp6: audioreach: add Kconfig and Makefile
ASoC: qdsp6: audioreach: add topology support
ASoC: qdsp6: audioreach: add q6apm-dai support
ASoC: qdsp6: audioreach: add q6apm lpass dai support
ASoC: qdsp6: audioreach: add q6prm support
ASoC: qdsp6: audioreach: add support for q6prm-clocks
.../devicetree/bindings/sound/qcom,q6afe.txt | 181 ---
.../bindings/sound/qcom,q6apm-dai.yaml | 53 +
.../sound/qcom,q6dsp-lpass-clocks.yaml | 77 ++
.../sound/qcom,q6dsp-lpass-ports.yaml | 205 +++
include/dt-bindings/sound/qcom,q6afe.h | 203 +--
.../sound/qcom,q6dsp-lpass-ports.h | 208 +++
include/uapi/sound/snd_ar_tokens.h | 208 +++
sound/soc/qcom/Kconfig | 22 +
sound/soc/qcom/qdsp6/Makefile | 11 +-
sound/soc/qcom/qdsp6/audioreach.c | 1130 +++++++++++++++++
sound/soc/qcom/qdsp6/audioreach.h | 726 +++++++++++
sound/soc/qcom/qdsp6/q6afe-clocks.c | 187 +--
sound/soc/qcom/qdsp6/q6afe-dai.c | 687 +---------
sound/soc/qcom/qdsp6/q6apm-dai.c | 416 ++++++
sound/soc/qcom/qdsp6/q6apm-lpass-dais.c | 260 ++++
sound/soc/qcom/qdsp6/q6apm.c | 822 ++++++++++++
sound/soc/qcom/qdsp6/q6apm.h | 152 +++
sound/soc/qcom/qdsp6/q6dsp-lpass-clocks.c | 186 +++
sound/soc/qcom/qdsp6/q6dsp-lpass-clocks.h | 30 +
sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c | 627 +++++++++
sound/soc/qcom/qdsp6/q6dsp-lpass-ports.h | 22 +
sound/soc/qcom/qdsp6/q6prm-clocks.c | 85 ++
sound/soc/qcom/qdsp6/q6prm.c | 202 +++
sound/soc/qcom/qdsp6/q6prm.h | 78 ++
sound/soc/qcom/qdsp6/topology.c | 1113 ++++++++++++++++
25 files changed, 6664 insertions(+), 1227 deletions(-)
create mode 100644 Documentation/devicetree/bindings/sound/qcom,q6apm-dai.yaml
create mode 100644 Documentation/devicetree/bindings/sound/qcom,q6dsp-lpass-clocks.yaml
create mode 100644 Documentation/devicetree/bindings/sound/qcom,q6dsp-lpass-ports.yaml
create mode 100644 include/dt-bindings/sound/qcom,q6dsp-lpass-ports.h
create mode 100644 include/uapi/sound/snd_ar_tokens.h
create mode 100644 sound/soc/qcom/qdsp6/audioreach.c
create mode 100644 sound/soc/qcom/qdsp6/audioreach.h
create mode 100644 sound/soc/qcom/qdsp6/q6apm-dai.c
create mode 100644 sound/soc/qcom/qdsp6/q6apm-lpass-dais.c
create mode 100644 sound/soc/qcom/qdsp6/q6apm.c
create mode 100644 sound/soc/qcom/qdsp6/q6apm.h
create mode 100644 sound/soc/qcom/qdsp6/q6dsp-lpass-clocks.c
create mode 100644 sound/soc/qcom/qdsp6/q6dsp-lpass-clocks.h
create mode 100644 sound/soc/qcom/qdsp6/q6dsp-lpass-ports.c
create mode 100644 sound/soc/qcom/qdsp6/q6dsp-lpass-ports.h
create mode 100644 sound/soc/qcom/qdsp6/q6prm-clocks.c
create mode 100644 sound/soc/qcom/qdsp6/q6prm.c
create mode 100644 sound/soc/qcom/qdsp6/q6prm.h
create mode 100644 sound/soc/qcom/qdsp6/topology.c
--
2.21.0
More information about the Alsa-devel
mailing list