[PATCH v7 06/18] ASoC: rsnd: Add audmapp clock and reset support for RZ/G3E

From: John Madieu

Date: Mon May 25 2026 - 07:06:50 EST


RZ/G3E requires additional audmapp clock and reset lines for
Audio DMA-PP operation.

Add global audmapp clock/reset management in rsnd_dma_probe()
using optional APIs to remain transparent to other platforms.

Signed-off-by: John Madieu <john.madieu.xa@xxxxxxxxxxxxxx>
---

Changes:

v7:
- Fix the "audmacpp" spelling to "audmapp" in the patch subject
and commit message, matching the clock/reset name and the rest
of the driver. No code change.

v6:
- Enable the audmapp clock before deasserting the audmapp reset
so the block sees a stable clock on the way out of reset.
- Drop redundant braces around single-statement if blocks (style).

v5:
- Add comment on audmapp clock/reset acquisition clarifying these
are optional and transparent to platforms that don't have them
in DT, per Kuninori's request.
- Drop spurious blank line added to struct rsnd_priv in rsnd.h.

v4:
- Move audmapp_clk and audmapp_rstc from struct rsnd_priv into
struct rsnd_dma_ctrl.

v3: No changes
v2: No changes

sound/soc/renesas/rcar/dma.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)

diff --git a/sound/soc/renesas/rcar/dma.c b/sound/soc/renesas/rcar/dma.c
index 68c859897e68..d52cada711e5 100644
--- a/sound/soc/renesas/rcar/dma.c
+++ b/sound/soc/renesas/rcar/dma.c
@@ -47,6 +47,9 @@ struct rsnd_dma_ctrl {
phys_addr_t ppres;
int dmaen_num;
int dmapp_num;
+ /* RZ/G3E: Audio DMAC peri-peri clock and reset */
+ struct clk *audmapp_clk;
+ struct reset_control *audmapp_rstc;
};

#define rsnd_priv_to_dmac(p) ((struct rsnd_dma_ctrl *)(p)->dma)
@@ -870,6 +873,25 @@ int rsnd_dma_probe(struct rsnd_priv *priv)
return 0; /* it will be PIO mode */
}

+ /*
+ * Audio DMAC peri-peri clock and reset for RZ/G3E.
+ * These use optional APIs, so they gracefully return NULL
+ * (no error) on platforms whose DT does not provide them.
+ *
+ * Enable the clock first so the block sees a stable clock on
+ * the way out of reset, then deassert the reset line.
+ */
+ dmac->audmapp_clk = devm_clk_get_optional_enabled(dev, "audmapp");
+ if (IS_ERR(dmac->audmapp_clk))
+ return dev_err_probe(dev, PTR_ERR(dmac->audmapp_clk),
+ "failed to get audmapp clock\n");
+
+ dmac->audmapp_rstc =
+ devm_reset_control_get_optional_exclusive_deasserted(dev, "audmapp");
+ if (IS_ERR(dmac->audmapp_rstc))
+ return dev_err_probe(dev, PTR_ERR(dmac->audmapp_rstc),
+ "failed to get audmapp reset\n");
+
dmac->dmapp_num = 0;
dmac->ppres = res->start;
dmac->ppbase = devm_ioremap_resource(dev, res);
--
2.25.1