Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 01b5200a authored by Stephen Boyd's avatar Stephen Boyd Committed by Stephen Boyd
Browse files

clk: cdce: Migrate to clk_hw based OF and registration APIs



Now that we have clk_hw based provider APIs to register clks, we
can get rid of struct clk pointers while registering clks in
these drivers, allowing us to move closer to a clear split of
consumer and provider clk APIs.

Cc: Max Filippov <jcmvbkbc@gmail.com>
Signed-off-by: default avatarStephen Boyd <stephen.boyd@linaro.org>
Signed-off-by: default avatarStephen Boyd <sboyd@codeaurora.org>
parent 235d2aaa
Loading
Loading
Loading
Loading
+22 −18
Original line number Diff line number Diff line
@@ -71,7 +71,6 @@ struct cdce706_hw_data {
	struct cdce706_dev_data *dev_data;
	unsigned idx;
	unsigned parent;
	struct clk *clk;
	struct clk_hw hw;
	unsigned div;
	unsigned mul;
@@ -81,8 +80,6 @@ struct cdce706_hw_data {
struct cdce706_dev_data {
	struct i2c_client *client;
	struct regmap *regmap;
	struct clk_onecell_data onecell;
	struct clk *clks[6];
	struct clk *clkin_clk[2];
	const char *clkin_name[2];
	struct cdce706_hw_data clkin[1];
@@ -455,18 +452,19 @@ static int cdce706_register_hw(struct cdce706_dev_data *cdce,
			       struct clk_init_data *init)
{
	unsigned i;
	int ret;

	for (i = 0; i < num_hw; ++i, ++hw) {
		init->name = clk_names[i];
		hw->dev_data = cdce;
		hw->idx = i;
		hw->hw.init = init;
		hw->clk = devm_clk_register(&cdce->client->dev,
		ret = devm_clk_hw_register(&cdce->client->dev,
					    &hw->hw);
		if (IS_ERR(hw->clk)) {
		if (ret) {
			dev_err(&cdce->client->dev, "Failed to register %s\n",
				clk_names[i]);
			return PTR_ERR(hw->clk);
			return ret;
		}
	}
	return 0;
@@ -613,13 +611,23 @@ static int cdce706_register_clkouts(struct cdce706_dev_data *cdce)
			cdce->clkout[i].parent);
	}

	ret = cdce706_register_hw(cdce, cdce->clkout,
	return cdce706_register_hw(cdce, cdce->clkout,
				   ARRAY_SIZE(cdce->clkout),
				   cdce706_clkout_name, &init);
	for (i = 0; i < ARRAY_SIZE(cdce->clkout); ++i)
		cdce->clks[i] = cdce->clkout[i].clk;
}

	return ret;
static struct clk_hw *
of_clk_cdce_get(struct of_phandle_args *clkspec, void *data)
{
	struct cdce706_dev_data *cdce = data;
	unsigned int idx = clkspec->args[0];

	if (idx >= ARRAY_SIZE(cdce->clkout)) {
		pr_err("%s: invalid index %u\n", __func__, idx);
		return ERR_PTR(-EINVAL);
	}

	return &cdce->clkout[idx].hw;
}

static int cdce706_probe(struct i2c_client *client,
@@ -657,12 +665,8 @@ static int cdce706_probe(struct i2c_client *client,
	ret = cdce706_register_clkouts(cdce);
	if (ret < 0)
		return ret;
	cdce->onecell.clks = cdce->clks;
	cdce->onecell.clk_num = ARRAY_SIZE(cdce->clks);
	ret = of_clk_add_provider(client->dev.of_node, of_clk_src_onecell_get,
				  &cdce->onecell);

	return ret;
	return of_clk_add_hw_provider(client->dev.of_node, of_clk_cdce_get,
				      cdce);
}

static int cdce706_remove(struct i2c_client *client)