ASoC: rsnd: call unregister for null_hw when removed

commit d6956a7dde ("ASoC: rsnd: add null CLOCKIN support")
added null_clk, but it is using local static valuable.
It will be leaked if rsnd driver was removed.
This patch moves it to priv, and call unregister when removing.

Fixes: d6956a7dde ("ASoC: rsnd: add null CLOCKIN support")
Link: https://lore.kernel.org/r/87tumsoe2p.wl-kuninori.morimoto.gx@renesas.com
Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Message-Id: <877djknbl5.wl-kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Kuninori Morimoto 2021-05-27 11:40:22 +09:00 committed by Mark Brown
parent 058efb4064
commit 965386c976
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0
2 changed files with 6 additions and 4 deletions

View File

@ -392,10 +392,9 @@ void rsnd_adg_clk_control(struct rsnd_priv *priv, int enable)
#define NULL_CLK "rsnd_adg_null" #define NULL_CLK "rsnd_adg_null"
static struct clk *rsnd_adg_null_clk_get(struct rsnd_priv *priv) static struct clk *rsnd_adg_null_clk_get(struct rsnd_priv *priv)
{ {
static struct clk_hw *hw;
struct device *dev = rsnd_priv_to_dev(priv); struct device *dev = rsnd_priv_to_dev(priv);
if (!hw) { if (!priv->null_hw) {
struct clk_hw *_hw; struct clk_hw *_hw;
int ret; int ret;
@ -407,10 +406,10 @@ static struct clk *rsnd_adg_null_clk_get(struct rsnd_priv *priv)
if (ret < 0) if (ret < 0)
clk_hw_unregister_fixed_rate(_hw); clk_hw_unregister_fixed_rate(_hw);
hw = _hw; priv->null_hw = _hw;
} }
return clk_hw_get_clk(hw, NULL_CLK); return clk_hw_get_clk(priv->null_hw, NULL_CLK);
} }
static void rsnd_adg_get_clkin(struct rsnd_priv *priv, static void rsnd_adg_get_clkin(struct rsnd_priv *priv,
@ -649,6 +648,8 @@ void rsnd_adg_remove(struct rsnd_priv *priv)
for_each_rsnd_clkout(clk, adg, i) for_each_rsnd_clkout(clk, adg, i)
if (adg->clkout[i]) if (adg->clkout[i])
clk_unregister_fixed_rate(adg->clkout[i]); clk_unregister_fixed_rate(adg->clkout[i]);
if (priv->null_hw)
clk_hw_unregister_fixed_rate(priv->null_hw);
of_clk_del_provider(np); of_clk_del_provider(np);

View File

@ -635,6 +635,7 @@ struct rsnd_priv {
* below value will be filled on rsnd_adg_probe() * below value will be filled on rsnd_adg_probe()
*/ */
void *adg; void *adg;
struct clk_hw *null_hw;
/* /*
* below value will be filled on rsnd_dma_probe() * below value will be filled on rsnd_dma_probe()