From: Srinivas Kandagatla srinivas.kandagatla@linaro.org
This patchset aims to provide a very basic version of QCOM DSP based audio support which is available in downstream andriod kernels. This patchset only support Digital audio based for HDMI-TX and will add support to other features as we move on.
Why do we need this now: On All Qualcomm SOCs the audio services are usually provided by an on chip DSP using LPASS, however LPASS is mostly tied with a Q6DSP on most of the SOCs. So Bypassing the DSP is becoming almost impossible with new generation of QCOM SOCs.
QDSP has 3 modules AFE (Audio FrontEnd), ADM (Audio Device Manager), and ASM(Audio Stream Manager) to provide this audio services. All these services use APR (Asynchronous Packet Router) protocol via smd/glink transport to communicate with Application processor. More details on each module is availble in there respective patch.
This patchset is tested on DB820c, with HDMI audio playback on top of mainline with few additional patches.
Here is block diagram to give a quick overview of the components
+---------+ +---------+ +---------+ | q6pcm | |q6routing| | q6hdmi | | ASoC(FE | <------> | ASoC(BE | <-----> | ASoC(BE | | cpu dai)| |Platform)| | cpu dai)| | | | | | | +---------+ +---------+ +---------+ ^ ^ ^ | | | | +------------------+----------------+ | | | | | | v v v v v +---------+ +---------+ +---------+ | | | | | | | q6ASM | | q6ADM | | q6AFE | | | | | | | | | | | | | +---------+ +---------+ +---------+ ^ ^ ^ ^ | | | CPU Side | ------+---------------------+-------------------+-------- | | | | |APR(smd/glink) | | | | | | | | +------------------+----------------+ | | | | | +-----+--+-----------------------------------+--+------- | | | | QDSP Side | v v v v v +---------+ +---------+ +---------+ | | | | | | | ASM | <------> | ADM | <-----> | AFE | | | | | | | | | | | | | +---------+ +---------+ +---------+ ^ | +-------------------+ | ---------------------------+-------------------------- | Audio I/O | v v +--------------------------------------------------+ | Audio devices | | CODEC | HDMI-TX | PCM | SLIMBUS | I2S |MI2S |...| | | +--------------------------------------------------+
Srinivas Kandagatla (9): soc: qcom: add support APR driver ASoC: qcom: qdsp6v2: Add support to Q6AFE ASoC: qcom: qdsp6v2: Add support to Q6ADM ASoC: qcom: qdsp6v2: Add support to Q6ASM ASoC: qcom: qdsp6v2: Add support to q6 routing driver ASoC: qcom: qdsp6v2: Add support to q6 HDMI dai driver ASoC: qcom: qdsp6v2: Add support to q6 pcm driver ASoC: qcom: apq8096: Add db820c machine driver arm64: dts: msm8996: db820c: Add sound card support
.../devicetree/bindings/soc/qcom/qcom,apr.txt | 66 ++ .../devicetree/bindings/sound/qcom,apq8096.txt | 85 ++ .../devicetree/bindings/sound/qcom,q6adm.txt | 15 + .../devicetree/bindings/sound/qcom,q6afe.txt | 15 + .../devicetree/bindings/sound/qcom,q6asm.txt | 15 + .../devicetree/bindings/sound/qcom,q6hdmi.txt | 27 + .../bindings/sound/qcom,q6pcm-routing.txt | 21 + .../devicetree/bindings/sound/qcom,q6pcm.txt | 21 + arch/arm64/boot/dts/qcom/apq8096-db820c.dtsi | 37 + arch/arm64/boot/dts/qcom/msm8996.dtsi | 67 ++ drivers/soc/qcom/Kconfig | 8 + drivers/soc/qcom/Makefile | 1 + drivers/soc/qcom/apr.c | 406 ++++++++ include/dt-bindings/sound/qcom,afe.h | 8 + include/dt-bindings/sound/qcom,asm.h | 13 + include/linux/soc/qcom/apr.h | 163 ++++ sound/soc/qcom/Kconfig | 46 + sound/soc/qcom/Makefile | 5 + sound/soc/qcom/apq8096.c | 174 ++++ sound/soc/qcom/qdsp6v2/Makefile | 6 + sound/soc/qcom/qdsp6v2/common.h | 225 +++++ sound/soc/qcom/qdsp6v2/q6adm-v2.h | 76 ++ sound/soc/qcom/qdsp6v2/q6adm.c | 603 ++++++++++++ sound/soc/qcom/qdsp6v2/q6afe-v2.h | 62 ++ sound/soc/qcom/qdsp6v2/q6afe.c | 499 ++++++++++ sound/soc/qcom/qdsp6v2/q6asm-v2.h | 176 ++++ sound/soc/qcom/qdsp6v2/q6asm.c | 1008 ++++++++++++++++++++ sound/soc/qcom/qdsp6v2/q6hdmi.c | 258 +++++ sound/soc/qcom/qdsp6v2/q6pcm.c | 558 +++++++++++ sound/soc/qcom/qdsp6v2/q6routing-v2.h | 8 + sound/soc/qcom/qdsp6v2/q6routing.c | 403 ++++++++ 31 files changed, 5075 insertions(+) create mode 100644 Documentation/devicetree/bindings/soc/qcom/qcom,apr.txt create mode 100644 Documentation/devicetree/bindings/sound/qcom,apq8096.txt create mode 100644 Documentation/devicetree/bindings/sound/qcom,q6adm.txt create mode 100644 Documentation/devicetree/bindings/sound/qcom,q6afe.txt create mode 100644 Documentation/devicetree/bindings/sound/qcom,q6asm.txt create mode 100644 Documentation/devicetree/bindings/sound/qcom,q6hdmi.txt create mode 100644 Documentation/devicetree/bindings/sound/qcom,q6pcm-routing.txt create mode 100644 Documentation/devicetree/bindings/sound/qcom,q6pcm.txt create mode 100644 drivers/soc/qcom/apr.c create mode 100644 include/dt-bindings/sound/qcom,afe.h create mode 100644 include/dt-bindings/sound/qcom,asm.h create mode 100644 include/linux/soc/qcom/apr.h create mode 100644 sound/soc/qcom/apq8096.c create mode 100644 sound/soc/qcom/qdsp6v2/Makefile create mode 100644 sound/soc/qcom/qdsp6v2/common.h create mode 100644 sound/soc/qcom/qdsp6v2/q6adm-v2.h create mode 100644 sound/soc/qcom/qdsp6v2/q6adm.c create mode 100644 sound/soc/qcom/qdsp6v2/q6afe-v2.h create mode 100644 sound/soc/qcom/qdsp6v2/q6afe.c create mode 100644 sound/soc/qcom/qdsp6v2/q6asm-v2.h create mode 100644 sound/soc/qcom/qdsp6v2/q6asm.c create mode 100644 sound/soc/qcom/qdsp6v2/q6hdmi.c create mode 100644 sound/soc/qcom/qdsp6v2/q6pcm.c create mode 100644 sound/soc/qcom/qdsp6v2/q6routing-v2.h create mode 100644 sound/soc/qcom/qdsp6v2/q6routing.c