Unverified Commit 653bdab2 authored by Stephen Boyd's avatar Stephen Boyd Committed by Mark Brown
Browse files

ASoC: rt5682: Use clk_hw based APIs for registration



The (new?) style of clk registration uses clk_hw based APIs so that we
can more easily see the difference between clk providers and clk
consumers. Use the clk_hw based APIs to do this and migrate to devm for
the clkdev creation so that we can reduce the amount of code.

Signed-off-by: default avatarStephen Boyd <swboyd@chromium.org>
Cc: Cheng-Yi Chiang <cychiang@chromium.org>
Cc: Shuming Fan <shumingf@realtek.com>
Link: https://lore.kernel.org/r/20200804000531.920688-4-swboyd@chromium.org


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent edbd24ea
Loading
Loading
Loading
Loading
+11 −36
Original line number Original line Diff line number Diff line
@@ -2755,8 +2755,6 @@ static int rt5682_register_dai_clks(struct snd_soc_component *component)
	struct device *dev = component->dev;
	struct device *dev = component->dev;
	struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
	struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
	struct rt5682_platform_data *pdata = &rt5682->pdata;
	struct rt5682_platform_data *pdata = &rt5682->pdata;
	struct clk *dai_clk;
	struct clk_lookup *dai_clk_lookup;
	struct clk_hw *dai_clk_hw;
	struct clk_hw *dai_clk_hw;
	int i, ret;
	int i, ret;


@@ -2784,8 +2782,7 @@ static int rt5682_register_dai_clks(struct snd_soc_component *component)
			break;
			break;
		default:
		default:
			dev_err(dev, "Invalid clock index\n");
			dev_err(dev, "Invalid clock index\n");
			ret = -EINVAL;
			return -EINVAL;
			goto err;
		}
		}


		init.name = pdata->dai_clk_names[i];
		init.name = pdata->dai_clk_names[i];
@@ -2793,39 +2790,26 @@ static int rt5682_register_dai_clks(struct snd_soc_component *component)
		init.flags = CLK_GET_RATE_NOCACHE | CLK_SET_RATE_GATE;
		init.flags = CLK_GET_RATE_NOCACHE | CLK_SET_RATE_GATE;
		dai_clk_hw->init = &init;
		dai_clk_hw->init = &init;


		dai_clk = devm_clk_register(dev, dai_clk_hw);
		ret = devm_clk_hw_register(dev, dai_clk_hw);
		if (IS_ERR(dai_clk)) {
		if (ret) {
			dev_warn(dev, "Failed to register %s: %ld\n",
			dev_warn(dev, "Failed to register %s: %d\n",
				 init.name, PTR_ERR(dai_clk));
				 init.name, ret);
			ret = PTR_ERR(dai_clk);
			return ret;
			goto err;
		}
		}
		rt5682->dai_clks[i] = dai_clk;


		if (dev->of_node) {
		if (dev->of_node) {
			devm_of_clk_add_hw_provider(dev, of_clk_hw_simple_get,
			devm_of_clk_add_hw_provider(dev, of_clk_hw_simple_get,
						    dai_clk_hw);
						    dai_clk_hw);
		} else {
		} else {
			dai_clk_lookup = clkdev_create(dai_clk, init.name,
			ret = devm_clk_hw_register_clkdev(dev, dai_clk_hw,
						       "%s", dev_name(dev));
							  init.name,
			if (!dai_clk_lookup) {
							  dev_name(dev));
				ret = -ENOMEM;
			if (ret)
				goto err;
				return ret;
			} else {
				rt5682->dai_clks_lookup[i] = dai_clk_lookup;
			}
		}
		}
	}
	}


	return 0;
	return 0;

err:
	do {
		if (rt5682->dai_clks_lookup[i])
			clkdev_drop(rt5682->dai_clks_lookup[i]);
	} while (i-- > 0);

	return ret;
}
}
#endif /* CONFIG_COMMON_CLK */
#endif /* CONFIG_COMMON_CLK */


@@ -2882,15 +2866,6 @@ static void rt5682_remove(struct snd_soc_component *component)
{
{
	struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
	struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);


#ifdef CONFIG_COMMON_CLK
	int i;

	for (i = RT5682_DAI_NUM_CLKS - 1; i >= 0; --i) {
		if (rt5682->dai_clks_lookup[i])
			clkdev_drop(rt5682->dai_clks_lookup[i]);
	}
#endif

	rt5682_reset(rt5682);
	rt5682_reset(rt5682);
}
}


+0 −2
Original line number Original line Diff line number Diff line
@@ -1411,8 +1411,6 @@ struct rt5682_priv {


#ifdef CONFIG_COMMON_CLK
#ifdef CONFIG_COMMON_CLK
	struct clk_hw dai_clks_hw[RT5682_DAI_NUM_CLKS];
	struct clk_hw dai_clks_hw[RT5682_DAI_NUM_CLKS];
	struct clk_lookup *dai_clks_lookup[RT5682_DAI_NUM_CLKS];
	struct clk *dai_clks[RT5682_DAI_NUM_CLKS];
	struct clk *mclk;
	struct clk *mclk;
#endif
#endif