commit
d6956a7dde6fb ("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:
d6956a7dde6fb ("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>
#define NULL_CLK "rsnd_adg_null"
static struct clk *rsnd_adg_null_clk_get(struct rsnd_priv *priv)
{
#define NULL_CLK "rsnd_adg_null"
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);
struct clk_hw *_hw;
int ret;
struct clk_hw *_hw;
int ret;
if (ret < 0)
clk_hw_unregister_fixed_rate(_hw);
if (ret < 0)
clk_hw_unregister_fixed_rate(_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,
for_each_rsnd_clkout(clk, adg, i)
if (adg->clkout[i])
clk_unregister_fixed_rate(adg->clkout[i]);
for_each_rsnd_clkout(clk, adg, i)
if (adg->clkout[i])
clk_unregister_fixed_rate(adg->clkout[i]);
+ if (priv->null_hw)
+ clk_hw_unregister_fixed_rate(priv->null_hw);
* below value will be filled on rsnd_adg_probe()
*/
void *adg;
* below value will be filled on rsnd_adg_probe()
*/
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()