ASoC: rsnd: Add audmapp clock and reset support for RZ/G3E

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@bp.renesas.com>
Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://patch.msgid.link/20260525110230.4014435-7-john.madieu.xa@bp.renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
John Madieu 2026-05-25 11:02:18 +00:00 committed by Mark Brown
parent 948b075ebc
commit fb859f6fc4
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0

View File

@ -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);