The SoC sound core will generate a driver name by normalizing the card
name. However, most of the time that name does not tell anything about
the driver and is therefore useless for this purpose.
Make the driver name more useful by setting it explicitly during card
initialization.
Signed-off-by: Thierry Reding <treding@nvidia.com>
Link: https://lore.kernel.org/r/20210330180657.1867971-1-thierry.reding@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Runtime PM is always available on Tegra since commit 40b2bb1b13
("ARM: tegra: enforce PM requirement"), hence there is no need to
handle the case of a disabled RPM by Tegra drivers. Remove handing
of a disabled runtime PM from Tegra30 AHUB driver.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/20210314154459.15375-18-digetx@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Tegra30 AHUB driver always syncs hardware state on a runtime PM resume,
hence there is no needed to re-sync the state on system resume. Replace
the suspend-resume callbacks with a generic helpers which ensure that
AHUB is suspended using RPM callbacks across system suspend-resume.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/20210314154459.15375-17-digetx@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Tegra30 AHUB uses global variable that is never reset by the driver on
a probe failure and on driver removal, meaning that driver will never try
to re-probe and can't be unbound. Make driver to reset the variable.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/20210314154459.15375-16-digetx@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Runtime PM is always available on Tegra since commit 40b2bb1b13
("ARM: tegra: enforce PM requirement"), hence there is no need to
handle the case of a disabled RPM by Tegra drivers. Remove handing
of a disabled runtime PM from Tegra30 I2S driver.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/20210314154459.15375-15-digetx@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Tegra30 I2S driver has a wrong driver removal order, which should be
opposite to the registration order, but it's not. In particular the
runtime PM is disabled in a wrong order. Fix the order.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/20210314154459.15375-13-digetx@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Runtime PM is always available on Tegra since commit 40b2bb1b13
("ARM: tegra: enforce PM requirement"), hence there is no need to
handle the case of a disabled RPM by Tegra drivers. Remove handing
of a disabled runtime PM from Tegra20 I2S driver.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/20210314154459.15375-12-digetx@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Tegra20 I2S driver has a wrong driver removal order, which should be
opposite to the registration order, but it's not. In particular the
runtime PM is disabled in a wrong order. Fix the order.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/20210314154459.15375-10-digetx@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Add system level suspend-resume callbacks in order to ensure that I2S
is gated before system is suspended. This puts Tegra20 I2S driver on
par with the Tegra30 I2S driver.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/20210314154459.15375-9-digetx@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Runtime PM is always available on Tegra since commit 40b2bb1b13
("ARM: tegra: enforce PM requirement"), hence there is no need to
handle the case of a disabled RPM by Tegra drivers. Remove handing
of a disabled runtime PM from Tegra20 SPDIF driver.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/20210314154459.15375-8-digetx@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Tegra20 SPDIF driver has a wrong driver removal order, which should be
opposite to the registration order, but it's not. In particular the
runtime PM is disabled in a wrong order. Fix the order.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/20210314154459.15375-7-digetx@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Tegra30 I2S driver syncs regmap cache only on resume from system suspend,
but hardware is reset across the runtime suspend because RPM of the parent
AHUB driver resets the I2S hardware, hence h/w state is lost after each
RPM resume. The problem isn't visible because hardware happens to be fully
reprogrammed after each RPM resume. Move hardware syncing to RPM resume in
order to restore h/w state properly.
Fixes: ed9ce1ed22 ("ASoC: tegra: ahub: Reset hardware properly")
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/20210314154459.15375-4-digetx@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
The I2S reset may be asserted at a boot time, in particular this is the
case on Tegra20 AC100 netbook. Tegra20 I2S driver doesn't manage the
reset control and currently it happens to work because reset is implicitly
deasserted by the tegra-clk driver when I2S clock is enabled. The I2S
permanently stays in a reset once tegra-clk is fixed to not touch the
resets, which it shouldn't be doing. Add reset control to the Tegra20
I2S driver.
Note that I2S reset was always specified in Tegra20 device-tree, hence
DTB ABI changes aren't required.
Tested-by: Paul Fertser <fercerpav@gmail.com> # T20 AC100
Reported-by: Paul Fertser <fercerpav@gmail.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/20210314154459.15375-3-digetx@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Tegra20 AC97 driver doesn't manage the AC97 controller reset, relying on
implicit deassertion of the reset by tegra-clk driver, which needs to be
fixed since this behaviour is unacceptable by other Tegra drivers. Add
explicit reset control to the Tegra20 AC97 driver.
Note that AC97 reset was always specified in Tegra20 device-tree, hence
DTB ABI changes aren't required.
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/20210314154459.15375-2-digetx@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
There is cleanup required, related to release of phandles, during driver
removal and hence point remove callback to audio_graph_remove().
Fixes: 202e2f7745 ("ASoC: tegra: Add audio graph based card driver")
Depends-on: "ASoC: audio-graph: Rename functions needed for export"
Signed-off-by: Sameer Pujar <spujar@nvidia.com>
Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/1612719418-5858-3-git-send-email-spujar@nvidia.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Following functions are renamed for a better global visibility.
graph_card_probe() --> audio_graph_card_probe()
graph_parse_of() --> audio_graph_parse_of()
graph_remove() --> audio_graph_remove() [exported as well]
The references of these are updated in audio graph and Tegra audio
graph card drivers.
Signed-off-by: Sameer Pujar <spujar@nvidia.com>
Cc: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/1612719418-5858-2-git-send-email-spujar@nvidia.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Audio Graph Card based Tegra driver is only useful on NVIDIA Tegra SoCs.
Hence add a dependency on SND_SOC_TEGRA, to prevent asking the user
about this driver when configuring a kernel without Tegra sound support.
Wrap all Tegra sound config options inside a big if/endif block, instead
of just adding the dependency to the single config option that does not
have it yet, to preventing similar future mistakes.
Fixes: 202e2f7745 ("ASoC: tegra: Add audio graph based card driver")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Acked-by: Sameer Pujar <spujar@nvidia.com>
Link: https://lore.kernel.org/r/20210129125915.2652952-1-geert+renesas@glider.be
Signed-off-by: Mark Brown <broonie@kernel.org>
Assert hardware resets before clocks are enabled and then de-assert them
after clocks are enabled. This brings hardware into a predictable state.
Tested-by: Peter Geis <pgwipeout@gmail.com> # Ouya T30 audio works
Tested-by: Matt Merhar <mattmerhar@protonmail.com> # Ouya T30 boot-tested
Tested-by: Dmitry Osipenko <digetx@gmail.com> # Nexus7 T30 audio works
Tested-by: Nicolas Chauvet <kwizart@gmail.com> # TK1 boot-tested
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/20210120003154.26749-7-digetx@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
AHUB driver misses D_AUDIO and APBIF resets. CPU hangs on trying to
access hardware if resets aren't de-asserted. This problem is currently
masked by the tegra-clk driver which implicitly de-asserts the resets when
the corresponding clocks are enabled. Soon the implicit de-assertion will
be gone from the tegra-clk driver, thus we need to fix the AHUB driver.
Add the missing resets to the driver.
Tested-by: Peter Geis <pgwipeout@gmail.com> # Ouya T30 audio works
Tested-by: Matt Merhar <mattmerhar@protonmail.com> # Ouya T30 boot-tested
Tested-by: Dmitry Osipenko <digetx@gmail.com> # Nexus7 T30 audio works
Tested-by: Nicolas Chauvet <kwizart@gmail.com> # TK1 boot-tested
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/20210120003154.26749-5-digetx@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This series adds audio graph based sound card support for Tegra210
platforms like Jetson-TX1 an Jetson-Nano. The following preparatory
audio graph enhancement series is already merged.
* https://patchwork.kernel.org/project/alsa-devel/list/?series=375629&state=*
Following are the summary of changes:
* Add graph/audio-graph based schemas or schema updates for Tegra210
component and machine drivers.
* Add Tegra audio graph machine driver.
* Add required DT support for Jetson-TX1/Nano.
This work is based on earlier discussion of DPCM usage for Tegra
and simple card driver updates.
* https://lkml.org/lkml/2020/4/30/519
* https://lkml.org/lkml/2020/6/27/4
Original v6 series was sent about 6-7 weeks back. The dependency commit,
https://lore.kernel.org/alsa-devel/1610948585-16286-1-git-send-email-spujar@nvidia.com/
is now merged. Resending this now to appear in the top of the mail list.
Changelog
=========
v5 -> v6
--------
* Added ports or port description in YAML docs for Tegra AHUB
devices and graph card in patch 1/6 and 2/6. Reference of
audio-graph-port.yaml is used for AHUB devices.
* Dropped redundant NULL check return for of_device_get_match_data()
in patch 3/6.
* Added 'Reviewed-by' tag from Jon Hunter.
* No changes in remaining patches.
v4 -> v5
--------
* Audio graph related changes were sent in separate v5 series as
mentioned above and are dropped from current series.
* Graph and audio graph doc patches are dropped from this series
and are sent separately as mentioned above.
* Minor change with phandle label for TX1 and Nano platform DT files.
* No changes in other patches.
v3 -> v4
--------
* Added new patches to convert graph.txt and audio-graph-card.txt
to corresponding json-schema files. Later these references
are used in Tegra audio graph schema.
* AHUB component binding docs are updated to reflect the usage
of ports/port/endpoint
* More common stuff is moved into graph_parse_of() and this is
used by both generic and Tegra audio graph.
* DT binding for Tegra audio graph is updated to included "ports { }"
* As per the suggestion 'void *data' member is dropped from
'asoc_simple_priv' and instead container method is used to
maintain required custom data internal to Tegra audio graph.
v2 -> v3
--------
* Dropped new compatible addition in generic graph driver
after reviewing it with Morimoto-san. Instead added Tegra
audio graph driver and new compatibles are added in the same.
* Added new patches to expose new members for customization
in audio graph driver.
* Added new patch for Tegra audio graph driver and related
documentation.
* Minor change in below commit where mutex version of helper is used
"ASoC: audio-graph: Identify 'no_pcm' DAI links for DPCM"
* DT binding is updated to use the newly exposed compatibles
* No changes in other patches
v1 -> v2
--------
* Re-organized ports/endpoints description for ADMAIF and XBAR.
Updated DT patches accordingly.
* After above change, multiple Codec endpoint support is not
required and hence dropped for now. This will be considered
separately if at all required in future.
* Re-ordered patches in the series.
Sameer Pujar (6):
ASoC: dt-bindings: tegra: Add graph bindings
ASoC: dt-bindings: tegra: Add json-schema for Tegra audio graph card
ASoC: tegra: Add audio graph based card driver
arm64: defconfig: Enable Tegra audio graph card driver
arm64: tegra: Audio graph header for Tegra210
arm64: tegra: Audio graph sound card for Jetson Nano and TX1
.../sound/nvidia,tegra-audio-graph-card.yaml | 187 +++++++++++++++
.../bindings/sound/nvidia,tegra186-dspk.yaml | 18 +-
.../bindings/sound/nvidia,tegra210-admaif.yaml | 13 +-
.../bindings/sound/nvidia,tegra210-ahub.yaml | 13 +-
.../bindings/sound/nvidia,tegra210-dmic.yaml | 18 +-
.../bindings/sound/nvidia,tegra210-i2s.yaml | 18 +-
.../boot/dts/nvidia/tegra210-audio-graph.dtsi | 153 ++++++++++++
arch/arm64/boot/dts/nvidia/tegra210-p2371-2180.dts | 262 +++++++++++++++++++++
arch/arm64/boot/dts/nvidia/tegra210-p3450-0000.dts | 146 ++++++++++++
arch/arm64/configs/defconfig | 1 +
sound/soc/tegra/Kconfig | 9 +
sound/soc/tegra/Makefile | 2 +
sound/soc/tegra/tegra_audio_graph_card.c | 251 ++++++++++++++++++++
13 files changed, 1085 insertions(+), 6 deletions(-)
create mode 100644 Documentation/devicetree/bindings/sound/nvidia,tegra-audio-graph-card.yaml
create mode 100644 arch/arm64/boot/dts/nvidia/tegra210-audio-graph.dtsi
create mode 100644 sound/soc/tegra/tegra_audio_graph_card.c
--
2.7.4
Add Tegra audio machine driver which is based on generic audio graph card
driver. It re-uses most of the common stuff from audio graph driver and
uses the same DT binding. Required Tegra specific customizations are done
in the driver and additional DT bindings are required for clock handling.
Details on the customizations done:
- Update PLL rates at runtime: Tegra HW supports multiple sample rates
(multiples of 8x and 11.025x) and both of these groups require different
PLL rates. Hence there is a requirement to update this at runtime.
This is achieved by providing a custom 'snd_soc_ops' and in hw_param()
callback PLL rate is updated as per the sample rate.
- Internal structure 'tegra_audio_graph_data' is used to maintain clock
handles of PLL.
- The 'force_dpcm' flag is set to use DPCM for all DAI links.
- The 'component_chaining' flag is set to use DPCM with component model.
Signed-off-by: Sameer Pujar <spujar@nvidia.com>
Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
Link: https://lore.kernel.org/r/1611048496-24650-4-git-send-email-spujar@nvidia.com
Signed-off-by: Mark Brown <broonie@kernel.org>
ASoC tegra PCM code still has explicit calls of dma_set_mask() and
dma_set_coherent_mask().
Let's simplify with dma_set_mask_and_coherent().
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Jonathan Hunter <jonathanh@nvidia.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/20210114133337.1039-4-tiwai@suse.de
Signed-off-by: Mark Brown <broonie@kernel.org>
Deferred probe is an expected return value for snd_soc_register_card().
Given that the driver deals with it properly, there's no need to output
a warning that may potentially confuse users.
Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
Link: https://lore.kernel.org/r/20201111103245.152189-1-jonathanh@nvidia.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Fix trivial compile warnings wrt unused functions by adding
__maybe_unused prefix:
sound/soc/tegra/tegra210_i2s.c:167:12: warning: 'tegra210_i2s_runtime_suspend' defined but not used [-Wunused-function]
sound/soc/tegra/tegra210_i2s.c:179:12: warning: 'tegra210_i2s_runtime_resume' defined but not used [-Wunused-function]
Fixes: c0bfa98349 ("ASoC: tegra: Add Tegra210 based I2S driver")
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/20200803141850.23713-6-tiwai@suse.de
Signed-off-by: Mark Brown <broonie@kernel.org>
Fix trivial compile warnings wrt unused functions by adding
__maybe_unused prefix:
sound/soc/tegra/tegra210_dmic.c:43:12: warning: 'tegra210_dmic_runtime_suspend' defined but not used [-Wunused-function]
sound/soc/tegra/tegra210_dmic.c:55:12: warning: 'tegra210_dmic_runtime_resume' defined but not used [-Wunused-function]
Fixes: 8c8ff982e9 ("ASoC: tegra: Add Tegra210 based DMIC driver")
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/20200803141850.23713-5-tiwai@suse.de
Signed-off-by: Mark Brown <broonie@kernel.org>
Fix trivial compile warnings wrt unused functions by adding
__maybe_unused prefix:
sound/soc/tegra/tegra210_ahub.c:567:12: warning: 'tegra_ahub_runtime_suspend' defined but not used [-Wunused-function]
sound/soc/tegra/tegra210_ahub.c:579:12: warning: 'tegra_ahub_runtime_resume' defined but not used [-Wunused-function]
Fixes: 16e1bcc2ca ("ASoC: tegra: Add Tegra210 based AHUB driver")
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/20200803141850.23713-4-tiwai@suse.de
Signed-off-by: Mark Brown <broonie@kernel.org>
Fix trivial compile warnings wrt unused functions by adding
__maybe_unused prefix:
sound/soc/tegra/tegra210_admaif.c:232:12: warning: 'tegra_admaif_runtime_resume' defined but not used [-Wunused-function]
sound/soc/tegra/tegra210_ahub.c:567:12: warning: 'tegra_ahub_runtime_suspend' defined but not used [-Wunused-function]
Fixes: f74028e159 ("ASoC: tegra: Add Tegra210 based ADMAIF driver")
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/20200803141850.23713-3-tiwai@suse.de
Signed-off-by: Mark Brown <broonie@kernel.org>
Fix trivial compile warnings wrt unused functions by adding
__maybe_unused prefix:
sound/soc/tegra/tegra186_dspk.c:74:12: warning: 'tegra186_dspk_runtime_suspend' defined but not used [-Wunused-function]
sound/soc/tegra/tegra186_dspk.c:86:12: warning: 'tegra186_dspk_runtime_resume' defined but not used [-Wunused-function]
Fixes: 327ef64702 ("ASoC: tegra: Add Tegra186 based DSPK driver")
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/20200803141850.23713-2-tiwai@suse.de
Signed-off-by: Mark Brown <broonie@kernel.org>
Build errors are seen on 32-bit platforms because of a plain 64-by-32
division. For example, following build erros were reported.
"ERROR: modpost: "__udivdi3" [sound/soc/tegra/snd-soc-tegra210-dmic.ko]
undefined!"
"ERROR: modpost: "__divdi3" [sound/soc/tegra/snd-soc-tegra210-dmic.ko]
undefined!"
This can be fixed by using div_u64() helper from 'math64.h' header.
Fixes: 8c8ff982e9 ("ASoC: tegra: Add Tegra210 based DMIC driver")
Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Reported-by: Randy Dunlap <rdunlap@infradead.org>
Signed-off-by: Sameer Pujar <spujar@nvidia.com>
Link: https://lore.kernel.org/r/1595492011-2411-1-git-send-email-spujar@nvidia.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Overview
========
Audio Processing Engine (APE) comprises of Audio DMA (ADMA) and Audio
Hub (AHUB) unit. AHUB is a collection of hardware accelerators for audio
pre-processing and post-processing. It also includes a programmable full
crossbar for routing audio data across these accelerators.
This series exposes some of these below mentioned HW devices as ASoC
components for Tegra platforms from Tegra210 onwards.
* ADMAIF : The interface between ADMA and AHUB
* XBAR : Crossbar for routing audio samples across various modules
* I2S : Inter-IC Sound Controller
* DMIC : Digital Microphone
* DSPK : Digital Speaker
Following is the summary of current series.
* Add YAML DT binding documentation for above mentioned modules.
* Helper function for ACIF programming is exposed for Tegra210 and later.
* Add ASoC driver components for each of the above modules.
* Build ACONNECT and ADMA drivers which are essential to realize audio
use case.
* Add DT entries for above components for Tegra210, Tegra186 and
Tegra194.
As per the suggestion in [0] audio graph based sound card support
is pushed in a separate series.
[0] https://lkml.org/lkml/2020/6/27/4
Changelog
=========
v4 -> v5
--------
* Common changes
- simple-card driver changes are dropped. Changes are migrated to audio
graph card and are moved to a separate series as suggested.
- '#sound-dai-cells' property is not needed for planned audio graph card
Hence dropped from documentation and related DT binding of component
drivers.
- CIF and DAP DAIs are added for I/O drivers (DMIC, DSPK, I2S) to
represent DAI links using audio graph card. Similary DAIs are added in
AHUB driver to describe endpoints in audio crossbar. Routing is updated
to reflect the same in drivers.
v3 -> v4
--------
* [1/23] "ASoC: dt-bindings: tegra: Add DT bindings for Tegra210"
- Removed multiple examples and retained one example per doc
- Fixed as per inputs on the previous series
- Tested bindings with 'make dt_binding_check/dtbs_check'
* [2/23] "ASoC: tegra: Add support for CIF programming"
- No change
* Common changes (for patch [3/10] to [7/10])
- Mixer control overrides, for PCM parameters (rate, channel, bits),
in each driver are dropped.
- Updated routing as per DPCM usage
- Minor changes related to formatting
* New changes (patch [8/23] to [18/23] and patch [23/23])
- Based on discussions in following threads DPCM is used for Tegra Audio.
https://lkml.org/lkml/2020/2/20/91https://lkml.org/lkml/2020/4/30/519
- The simple-card driver is used for Tegra Audio and accordingly
some enhancements are made in simple-card and core drivers.
- Patch [8/23] to [18/23] are related to simple-card and core changes.
- Patch [23/23] adds sound card support to realize complete audio path.
This is based on simple-card driver with proposed enhancements.
- Re-ordered patches depending on above
v2 -> v3
--------
* [1/10] "dt-bindings: sound: tegra: add DT binding for AHUB
- Updated licence
- Removed redundancy w.r.t items/const/enum
- Added constraints wherever needed with "pattern" property
* [2/10] "ASoC: tegra: add support for CIF programming"
- Removed tegra_cif.c
- Instead added inline helper function in tegra_cif.h
* common changes (for patch [3/10] to [7/10])
- Replace LATE system calls with Normal sleep
- Remove explicit RPM suspend in driver remove() call
- Use devm_kzalloc() instead of devm_kcalloc() for single element
- Replace 'ret' with 'err' for better reading
- Consistent error printing style across drivers
- Minor formating fixes
* [8/10] "arm64: tegra: add AHUB components for few Tegra chips"
- no change
* [9/10] "arm64: tegra: enable AHUB modules for few Tegra chips"
- no change
* [10/10] "arm64: defconfig: enable AHUB components for Tegra210 and later"
(New patch)
- Enables ACONNECT and AHUB components. With this AHUB and components are
registered with ASoC core.
v1 -> v2
--------
* [1/9] "dt-bindings: sound: tegra: add DT binding for AHUB"
- no changes
* [2/9] "ASoC: tegra: add support for CIF programming"
- removed CIF programming changes for legacy chips.
- this patch now exposes helper function for CIF programming,
which can be used on Tegra210 later.
- later tegra_cif.c can be extended for legacy chips as well.
- updated commit message accordingly
* [3/9] "ASoC: tegra: add Tegra210 based DMIC driver"
- removed unnecessary initialization of 'ret' in probe()
* [4/9] "ASoC: tegra: add Tegra210 based I2S driver"
- removed unnecessary initialization of 'ret' in probe()
- fixed indentation
- added consistent bracing for if-else clauses
- updated 'rx_fifo_th' type to 'unsigned int'
- used BIT() macro for defines like '1 << {x}' in tegra210_i2s.h
* [5/9] "ASoC: tegra: add Tegra210 based AHUB driver"
- used of_device_get_match_data() to get 'soc_data' and removed
explicit of_match_device()
- used devm_platform_ioremap_resource() and removed explicit
platform_get_resource()
- fixed indentation for devm_snd_soc_register_component()
- updated commit message
- updated commit message to reflect compatible binding for Tegra186 and
Tegra194.
* [6/9] "ASoC: tegra: add Tegra186 based DSPK driver"
- removed unnecessary initialization of 'ret' in probe()
- updated 'max_th' to 'unsigned int'
- shortened lengthy macro names to avoid wrapping in
tegra186_dspk_wr_reg() and to be consistent
* [7/9] "ASoC: tegra: add Tegra210 based ADMAIF driver"
- used of_device_get_match_data() and removed explicit of_match_device()
- used BIT() macro for defines like '1 << {x}' in tegra210_admaif.h
- updated commit message to reflect compatible binding for Tegra186 and
Tegra194.
* [8/9] "arm64: tegra: add AHUB components for few Tegra chips"
- no change
* [9/9] "arm64: tegra: enable AHUB modules for few Tegra chips"
- no change
* common changes for patch [3/9] to [7/9]
- sorted headers in alphabetical order
- moved MODULE_DEVICE_TABLE() right below *_of_match table
- removed macro DRV_NAME
- removed explicit 'owner' field from platform_driver structure
- added 'const' to snd_soc_dai_ops structure
Sameer Pujar (11):
ASoC: dt-bindings: tegra: Add DT bindings for Tegra210
ASoC: tegra: Add support for CIF programming
ASoC: tegra: Add Tegra210 based DMIC driver
ASoC: tegra: Add Tegra210 based I2S driver
ASoC: tegra: Add Tegra210 based AHUB driver
ASoC: tegra: Add Tegra186 based DSPK driver
ASoC: tegra: Add Tegra210 based ADMAIF driver
arm64: defconfig: Build AHUB component drivers
arm64: defconfig: Build ADMA and ACONNECT driver
arm64: tegra: Enable ACONNECT, ADMA and AGIC on Jetson Nano
arm64: tegra: Add DT binding for AHUB components
.../bindings/sound/nvidia,tegra186-dspk.yaml | 83 +++
.../bindings/sound/nvidia,tegra210-admaif.yaml | 111 +++
.../bindings/sound/nvidia,tegra210-ahub.yaml | 136 ++++
.../bindings/sound/nvidia,tegra210-dmic.yaml | 83 +++
.../bindings/sound/nvidia,tegra210-i2s.yaml | 101 +++
arch/arm64/boot/dts/nvidia/tegra186.dtsi | 217 +++++-
arch/arm64/boot/dts/nvidia/tegra194.dtsi | 225 +++++-
arch/arm64/boot/dts/nvidia/tegra210-p3450-0000.dts | 12 +
arch/arm64/boot/dts/nvidia/tegra210.dtsi | 140 ++++
arch/arm64/configs/defconfig | 8 +
sound/soc/tegra/Kconfig | 56 ++
sound/soc/tegra/Makefile | 10 +
sound/soc/tegra/tegra186_dspk.c | 442 +++++++++++
sound/soc/tegra/tegra186_dspk.h | 70 ++
sound/soc/tegra/tegra210_admaif.c | 800 ++++++++++++++++++++
sound/soc/tegra/tegra210_admaif.h | 162 ++++
sound/soc/tegra/tegra210_ahub.c | 676 +++++++++++++++++
sound/soc/tegra/tegra210_ahub.h | 127 ++++
sound/soc/tegra/tegra210_dmic.c | 455 ++++++++++++
sound/soc/tegra/tegra210_dmic.h | 82 +++
sound/soc/tegra/tegra210_i2s.c | 812 +++++++++++++++++++++
sound/soc/tegra/tegra210_i2s.h | 126 ++++
sound/soc/tegra/tegra_cif.h | 65 ++
sound/soc/tegra/tegra_pcm.c | 235 +++++-
sound/soc/tegra/tegra_pcm.h | 21 +-
25 files changed, 5251 insertions(+), 4 deletions(-)
create mode 100644 Documentation/devicetree/bindings/sound/nvidia,tegra186-dspk.yaml
create mode 100644 Documentation/devicetree/bindings/sound/nvidia,tegra210-admaif.yaml
create mode 100644 Documentation/devicetree/bindings/sound/nvidia,tegra210-ahub.yaml
create mode 100644 Documentation/devicetree/bindings/sound/nvidia,tegra210-dmic.yaml
create mode 100644 Documentation/devicetree/bindings/sound/nvidia,tegra210-i2s.yaml
create mode 100644 sound/soc/tegra/tegra186_dspk.c
create mode 100644 sound/soc/tegra/tegra186_dspk.h
create mode 100644 sound/soc/tegra/tegra210_admaif.c
create mode 100644 sound/soc/tegra/tegra210_admaif.h
create mode 100644 sound/soc/tegra/tegra210_ahub.c
create mode 100644 sound/soc/tegra/tegra210_ahub.h
create mode 100644 sound/soc/tegra/tegra210_dmic.c
create mode 100644 sound/soc/tegra/tegra210_dmic.h
create mode 100644 sound/soc/tegra/tegra210_i2s.c
create mode 100644 sound/soc/tegra/tegra210_i2s.h
create mode 100644 sound/soc/tegra/tegra_cif.h
--
2.7.4
ADMAIF is the interface between ADMA and AHUB. Each ADMA channel that
sends/receives data to/from AHUB must intreface through an ADMAIF channel.
ADMA channel sending data to AHUB pairs with an ADMAIF Tx channel and
similarly ADMA channel receiving data from AHUB pairs with an ADMAIF Rx
channel. Buffer size is configurable for each ADMAIF channel, but currently
SW uses default values.
This patch registers ADMAIF driver with ASoC framework. The component
driver exposes DAPM widgets, routes and kcontrols for the device. The DAI
driver exposes ADMAIF interfaces, which can be used to connect different
components in the ASoC layer. Makefile and Kconfig support is added to
allow to build the driver. The ADMAIF device can be enabled in the DT via
"nvidia,tegra210-admaif" compatible binding.
Tegra PCM driver is updated to expose required PCM interfaces and
snd_pcm_ops callbacks.
Signed-off-by: Sameer Pujar <spujar@nvidia.com>
Link: https://lore.kernel.org/r/1595134890-16470-8-git-send-email-spujar@nvidia.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Overview
========
Audio Processing Engine (APE) comprises of Audio DMA (ADMA) and Audio
Hub (AHUB) unit. AHUB is a collection of hardware accelerators for audio
pre-processing and post-processing. It also includes a programmable full
crossbar for routing audio data across these accelerators.
This series exposes some of these below mentioned HW devices as ASoC
components for Tegra platforms from Tegra210 onwards.
* ADMAIF : The interface between ADMA and AHUB
* XBAR : Crossbar for routing audio samples across various modules
* I2S : Inter-IC Sound Controller
* DMIC : Digital Microphone
* DSPK : Digital Speaker
Following is the summary of current series.
* Add YAML DT binding documentation for above mentioned modules.
* Helper function for ACIF programming is exposed for Tegra210 and later.
* Add ASoC driver components for each of the above modules.
* Build ACONNECT and ADMA drivers which are essential to realize audio
use case.
* Add DT entries for above components for Tegra210, Tegra186 and
Tegra194.
As per the suggestion in [0] audio graph based sound card support
is pushed in a separate series.
[0] https://lkml.org/lkml/2020/6/27/4
Changelog
=========
v4 -> v5
--------
* Common changes
- simple-card driver changes are dropped. Changes are migrated to audio
graph card and are moved to a separate series as suggested.
- '#sound-dai-cells' property is not needed for planned audio graph card
Hence dropped from documentation and related DT binding of component
drivers.
- CIF and DAP DAIs are added for I/O drivers (DMIC, DSPK, I2S) to
represent DAI links using audio graph card. Similary DAIs are added in
AHUB driver to describe endpoints in audio crossbar. Routing is updated
to reflect the same in drivers.
v3 -> v4
--------
* [1/23] "ASoC: dt-bindings: tegra: Add DT bindings for Tegra210"
- Removed multiple examples and retained one example per doc
- Fixed as per inputs on the previous series
- Tested bindings with 'make dt_binding_check/dtbs_check'
* [2/23] "ASoC: tegra: Add support for CIF programming"
- No change
* Common changes (for patch [3/10] to [7/10])
- Mixer control overrides, for PCM parameters (rate, channel, bits),
in each driver are dropped.
- Updated routing as per DPCM usage
- Minor changes related to formatting
* New changes (patch [8/23] to [18/23] and patch [23/23])
- Based on discussions in following threads DPCM is used for Tegra Audio.
https://lkml.org/lkml/2020/2/20/91https://lkml.org/lkml/2020/4/30/519
- The simple-card driver is used for Tegra Audio and accordingly
some enhancements are made in simple-card and core drivers.
- Patch [8/23] to [18/23] are related to simple-card and core changes.
- Patch [23/23] adds sound card support to realize complete audio path.
This is based on simple-card driver with proposed enhancements.
- Re-ordered patches depending on above
v2 -> v3
--------
* [1/10] "dt-bindings: sound: tegra: add DT binding for AHUB
- Updated licence
- Removed redundancy w.r.t items/const/enum
- Added constraints wherever needed with "pattern" property
* [2/10] "ASoC: tegra: add support for CIF programming"
- Removed tegra_cif.c
- Instead added inline helper function in tegra_cif.h
* common changes (for patch [3/10] to [7/10])
- Replace LATE system calls with Normal sleep
- Remove explicit RPM suspend in driver remove() call
- Use devm_kzalloc() instead of devm_kcalloc() for single element
- Replace 'ret' with 'err' for better reading
- Consistent error printing style across drivers
- Minor formating fixes
* [8/10] "arm64: tegra: add AHUB components for few Tegra chips"
- no change
* [9/10] "arm64: tegra: enable AHUB modules for few Tegra chips"
- no change
* [10/10] "arm64: defconfig: enable AHUB components for Tegra210 and later"
(New patch)
- Enables ACONNECT and AHUB components. With this AHUB and components are
registered with ASoC core.
v1 -> v2
--------
* [1/9] "dt-bindings: sound: tegra: add DT binding for AHUB"
- no changes
* [2/9] "ASoC: tegra: add support for CIF programming"
- removed CIF programming changes for legacy chips.
- this patch now exposes helper function for CIF programming,
which can be used on Tegra210 later.
- later tegra_cif.c can be extended for legacy chips as well.
- updated commit message accordingly
* [3/9] "ASoC: tegra: add Tegra210 based DMIC driver"
- removed unnecessary initialization of 'ret' in probe()
* [4/9] "ASoC: tegra: add Tegra210 based I2S driver"
- removed unnecessary initialization of 'ret' in probe()
- fixed indentation
- added consistent bracing for if-else clauses
- updated 'rx_fifo_th' type to 'unsigned int'
- used BIT() macro for defines like '1 << {x}' in tegra210_i2s.h
* [5/9] "ASoC: tegra: add Tegra210 based AHUB driver"
- used of_device_get_match_data() to get 'soc_data' and removed
explicit of_match_device()
- used devm_platform_ioremap_resource() and removed explicit
platform_get_resource()
- fixed indentation for devm_snd_soc_register_component()
- updated commit message
- updated commit message to reflect compatible binding for Tegra186 and
Tegra194.
* [6/9] "ASoC: tegra: add Tegra186 based DSPK driver"
- removed unnecessary initialization of 'ret' in probe()
- updated 'max_th' to 'unsigned int'
- shortened lengthy macro names to avoid wrapping in
tegra186_dspk_wr_reg() and to be consistent
* [7/9] "ASoC: tegra: add Tegra210 based ADMAIF driver"
- used of_device_get_match_data() and removed explicit of_match_device()
- used BIT() macro for defines like '1 << {x}' in tegra210_admaif.h
- updated commit message to reflect compatible binding for Tegra186 and
Tegra194.
* [8/9] "arm64: tegra: add AHUB components for few Tegra chips"
- no change
* [9/9] "arm64: tegra: enable AHUB modules for few Tegra chips"
- no change
* common changes for patch [3/9] to [7/9]
- sorted headers in alphabetical order
- moved MODULE_DEVICE_TABLE() right below *_of_match table
- removed macro DRV_NAME
- removed explicit 'owner' field from platform_driver structure
- added 'const' to snd_soc_dai_ops structure
Sameer Pujar (11):
ASoC: dt-bindings: tegra: Add DT bindings for Tegra210
ASoC: tegra: Add support for CIF programming
ASoC: tegra: Add Tegra210 based DMIC driver
ASoC: tegra: Add Tegra210 based I2S driver
ASoC: tegra: Add Tegra210 based AHUB driver
ASoC: tegra: Add Tegra186 based DSPK driver
ASoC: tegra: Add Tegra210 based ADMAIF driver
arm64: defconfig: Build AHUB component drivers
arm64: defconfig: Build ADMA and ACONNECT driver
arm64: tegra: Enable ACONNECT, ADMA and AGIC on Jetson Nano
arm64: tegra: Add DT binding for AHUB components
.../bindings/sound/nvidia,tegra186-dspk.yaml | 83 +++
.../bindings/sound/nvidia,tegra210-admaif.yaml | 111 +++
.../bindings/sound/nvidia,tegra210-ahub.yaml | 136 ++++
.../bindings/sound/nvidia,tegra210-dmic.yaml | 83 +++
.../bindings/sound/nvidia,tegra210-i2s.yaml | 101 +++
arch/arm64/boot/dts/nvidia/tegra186.dtsi | 217 +++++-
arch/arm64/boot/dts/nvidia/tegra194.dtsi | 225 +++++-
arch/arm64/boot/dts/nvidia/tegra210-p3450-0000.dts | 12 +
arch/arm64/boot/dts/nvidia/tegra210.dtsi | 140 ++++
arch/arm64/configs/defconfig | 8 +
sound/soc/tegra/Kconfig | 56 ++
sound/soc/tegra/Makefile | 10 +
sound/soc/tegra/tegra186_dspk.c | 442 +++++++++++
sound/soc/tegra/tegra186_dspk.h | 70 ++
sound/soc/tegra/tegra210_admaif.c | 800 ++++++++++++++++++++
sound/soc/tegra/tegra210_admaif.h | 162 ++++
sound/soc/tegra/tegra210_ahub.c | 676 +++++++++++++++++
sound/soc/tegra/tegra210_ahub.h | 127 ++++
sound/soc/tegra/tegra210_dmic.c | 455 ++++++++++++
sound/soc/tegra/tegra210_dmic.h | 82 +++
sound/soc/tegra/tegra210_i2s.c | 812 +++++++++++++++++++++
sound/soc/tegra/tegra210_i2s.h | 126 ++++
sound/soc/tegra/tegra_cif.h | 65 ++
sound/soc/tegra/tegra_pcm.c | 235 +++++-
sound/soc/tegra/tegra_pcm.h | 21 +-
25 files changed, 5251 insertions(+), 4 deletions(-)
create mode 100644 Documentation/devicetree/bindings/sound/nvidia,tegra186-dspk.yaml
create mode 100644 Documentation/devicetree/bindings/sound/nvidia,tegra210-admaif.yaml
create mode 100644 Documentation/devicetree/bindings/sound/nvidia,tegra210-ahub.yaml
create mode 100644 Documentation/devicetree/bindings/sound/nvidia,tegra210-dmic.yaml
create mode 100644 Documentation/devicetree/bindings/sound/nvidia,tegra210-i2s.yaml
create mode 100644 sound/soc/tegra/tegra186_dspk.c
create mode 100644 sound/soc/tegra/tegra186_dspk.h
create mode 100644 sound/soc/tegra/tegra210_admaif.c
create mode 100644 sound/soc/tegra/tegra210_admaif.h
create mode 100644 sound/soc/tegra/tegra210_ahub.c
create mode 100644 sound/soc/tegra/tegra210_ahub.h
create mode 100644 sound/soc/tegra/tegra210_dmic.c
create mode 100644 sound/soc/tegra/tegra210_dmic.h
create mode 100644 sound/soc/tegra/tegra210_i2s.c
create mode 100644 sound/soc/tegra/tegra210_i2s.h
create mode 100644 sound/soc/tegra/tegra_cif.h
--
2.7.4
The Digital Speaker Controller (DSPK) converts the multi-bit Pulse Code
Modulation (PCM) audio input to oversampled 1-bit Pulse Density Modulation
(PDM) output. From the signal flow perpsective, the DSPK can be viewed as
a PDM transmitter that up-samples the input to the desired sampling rate
by interpolation then converts the oversampled PCM input to the desired
1-bit output via Delta Sigma Modulation (DSM).
This patch registers DSPK component with ASoC framework. The component
driver exposes DAPM widgets, routes and kcontrols for the device. The DAI
driver exposes DSPK interfaces, which can be used to connect different
components in the ASoC layer. Makefile and Kconfig support is added to
allow to build the driver. The DSPK devices can be enabled in the DT via
"nvidia,tegra186-dspk" compatible binding. This driver can be used
on Tegra194 chip as well.
Signed-off-by: Sameer Pujar <spujar@nvidia.com>
Link: https://lore.kernel.org/r/1595134890-16470-7-git-send-email-spujar@nvidia.com
Signed-off-by: Mark Brown <broonie@kernel.org>
The Audio Hub (AHUB) comprises a collection of hardware accelerators for
audio pre/post-processing and a programmable full crossbar (XBAR) for
routing audio data across these accelerators in time and in parallel.
AHUB supports multiple interfaces to I2S, DSPK, DMIC etc., XBAR is a
switch used to configure or modify audio routing between HW accelerators
present inside AHUB.
This patch registers AHUB component with ASoC framework. The component
driver exposes DAPM widgets, routes and kcontrols for the device. The DAI
driver exposes AHUB interfaces, which can be used to connect different
components in the ASoC layer. Currently the driver takes care of XBAR
programming to allow audio data flow through various clients of the AHUB.
Makefile and Kconfig support is added to allow to build the driver. The
AHUB component can be enabled in the DT via below compatible bindings.
- "nvidia,tegra210-ahub" for Tegra210
- "nvidia,tegra186-ahub" for Tegra186 and Tegra194
Signed-off-by: Sameer Pujar <spujar@nvidia.com>
Link: https://lore.kernel.org/r/1595134890-16470-6-git-send-email-spujar@nvidia.com
Signed-off-by: Mark Brown <broonie@kernel.org>
The Inter-IC Sound (I2S) controller implements full-duplex, bi-directional
and single direction point to point serial interface. It can interface
with I2S compatible devices. Tegra I2S controller can operate as both
master and slave.
This patch registers I2S controller with ASoC framework. The component
driver exposes DAPM widgets, routes and kcontrols for the device. The DAI
driver exposes I2S interfaces, which can be used to connect different
components in the ASoC layer. Makefile and Kconfig support is added to
allow to build the driver. The I2S devices can be enabled in the DT via
"nvidia,tegra210-i2s" compatible binding.
Signed-off-by: Sameer Pujar <spujar@nvidia.com>
Link: https://lore.kernel.org/r/1595134890-16470-5-git-send-email-spujar@nvidia.com
Signed-off-by: Mark Brown <broonie@kernel.org>
The Digital MIC (DMIC) Controller is used to interface with Pulse Density
Modulation (PDM) input devices. The DMIC controller implements a converter
to convert PDM signals to Pulse Code Modulation (PCM) signals. From signal
flow perspective, the DMIC can be viewed as a PDM receiver.
This patch registers DMIC component with ASoC framework. The component
driver exposes DAPM widgets, routes and kcontrols for the device. The DAI
driver exposes DMIC interfaces, which can be used to connect different
components in the ASoC layer. Makefile and Kconfig support is added to
allow to build the driver. The DMIC devices can be enabled in the DT via
"nvidia,tegra210-dmic" compatible string. This driver can be used for
Tegra186 and Tegra194 chips as well.
Signed-off-by: Sameer Pujar <spujar@nvidia.com>
Link: https://lore.kernel.org/r/1595134890-16470-4-git-send-email-spujar@nvidia.com
Signed-off-by: Mark Brown <broonie@kernel.org>