Commit 1ae79c46 authored by Tero Kristo's avatar Tero Kristo
Browse files

clk: ti: use automatic clock alias generation framework



Generate clock aliases automatically for all TI clock drivers.

Signed-off-by: default avatarTero Kristo <t-kristo@ti.com>
Acked-by: default avatarTony Lindgren <tony@atomide.com>
parent c17435c5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -164,7 +164,7 @@ static void __init omap_clk_register_apll(struct clk_hw *hw,

	ad->clk_bypass = __clk_get_hw(clk);

	clk = clk_register(NULL, &clk_hw->hw);
	clk = ti_clk_register(NULL, &clk_hw->hw, node->name);
	if (!IS_ERR(clk)) {
		of_clk_add_provider(node, of_clk_src_simple_get, clk);
		kfree(clk_hw->hw.init->parent_names);
+10 −1
Original line number Diff line number Diff line
@@ -24,6 +24,9 @@
#include <linux/of_address.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/clk/ti.h>

#include "clock.h"

#define DRA7_ATL_INSTANCES	4

@@ -171,6 +174,7 @@ static void __init of_dra7_atl_clock_setup(struct device_node *node)
	struct clk_init_data init = { NULL };
	const char **parent_names = NULL;
	struct clk *clk;
	int ret;

	clk_hw = kzalloc(sizeof(*clk_hw), GFP_KERNEL);
	if (!clk_hw) {
@@ -200,9 +204,14 @@ static void __init of_dra7_atl_clock_setup(struct device_node *node)

	init.parent_names = parent_names;

	clk = clk_register(NULL, &clk_hw->hw);
	clk = ti_clk_register(NULL, &clk_hw->hw, node->name);

	if (!IS_ERR(clk)) {
		ret = ti_clk_add_alias(NULL, clk, node->name);
		if (ret) {
			clk_unregister(clk);
			goto cleanup;
		}
		of_clk_add_provider(node, of_clk_src_simple_get, clk);
		kfree(parent_names);
		return;
+15 −5
Original line number Diff line number Diff line
@@ -298,6 +298,7 @@ struct clk __init *ti_clk_register_clk(struct ti_clk *setup)
	struct ti_clk_fixed *fixed;
	struct ti_clk_fixed_factor *fixed_factor;
	struct clk_hw *clk_hw;
	int ret;

	if (setup->clk)
		return setup->clk;
@@ -308,6 +309,13 @@ struct clk __init *ti_clk_register_clk(struct ti_clk *setup)

		clk = clk_register_fixed_rate(NULL, setup->name, NULL, 0,
					      fixed->frequency);
		if (!IS_ERR(clk)) {
			ret = ti_clk_add_alias(NULL, clk, setup->name);
			if (ret) {
				clk_unregister(clk);
				clk = ERR_PTR(ret);
			}
		}
		break;
	case TI_CLK_MUX:
		clk = ti_clk_register_mux(setup);
@@ -325,6 +333,13 @@ struct clk __init *ti_clk_register_clk(struct ti_clk *setup)
						fixed_factor->parent,
						0, fixed_factor->mult,
						fixed_factor->div);
		if (!IS_ERR(clk)) {
			ret = ti_clk_add_alias(NULL, clk, setup->name);
			if (ret) {
				clk_unregister(clk);
				clk = ERR_PTR(ret);
			}
		}
		break;
	case TI_CLK_GATE:
		clk = ti_clk_register_gate(setup);
@@ -378,9 +393,6 @@ int __init ti_clk_register_legacy_clks(struct ti_clk_alias *clks)
				       clks->clk->name, PTR_ERR(clk));
				return PTR_ERR(clk);
			}
		} else {
			clks->lk.clk = clk;
			clkdev_add(&clks->lk);
		}
		clks++;
	}
@@ -403,8 +415,6 @@ int __init ti_clk_register_legacy_clks(struct ti_clk_alias *clks)
				}
			} else {
				retry = true;
				retry_clk->lk.clk = clk;
				clkdev_add(&retry_clk->lk);
				list_del(&retry_clk->link);
			}
		}
+15 −1
Original line number Diff line number Diff line
@@ -126,6 +126,7 @@ struct clk *ti_clk_register_composite(struct ti_clk *setup)
	int num_parents = 1;
	const char **parent_names = NULL;
	struct clk *clk;
	int ret;

	comp = setup->data;

@@ -150,6 +151,12 @@ struct clk *ti_clk_register_composite(struct ti_clk *setup)
				     &ti_composite_divider_ops, gate,
				     &ti_composite_gate_ops, 0);

	ret = ti_clk_add_alias(NULL, clk, setup->name);
	if (ret) {
		clk_unregister(clk);
		return ERR_PTR(ret);
	}

	return clk;
}
#endif
@@ -163,6 +170,7 @@ static void __init _register_composite(struct clk_hw *hw,
	int num_parents = 0;
	const char **parent_names = NULL;
	int i;
	int ret;

	/* Check for presence of each component clock */
	for (i = 0; i < CLK_COMPONENT_TYPE_MAX; i++) {
@@ -217,8 +225,14 @@ static void __init _register_composite(struct clk_hw *hw,
				     _get_hw(cclk, CLK_COMPONENT_TYPE_GATE),
				     &ti_composite_gate_ops, 0);

	if (!IS_ERR(clk))
	if (!IS_ERR(clk)) {
		ret = ti_clk_add_alias(NULL, clk, node->name);
		if (ret) {
			clk_unregister(clk);
			goto cleanup;
		}
		of_clk_add_provider(node, of_clk_src_simple_get, clk);
	}

cleanup:
	/* Free component clock list entries */
+1 −1
Original line number Diff line number Diff line
@@ -311,7 +311,7 @@ static struct clk *_register_divider(struct device *dev, const char *name,
	div->table = table;

	/* register the clock */
	clk = clk_register(dev, &div->hw);
	clk = ti_clk_register(dev, &div->hw, name);

	if (IS_ERR(clk))
		kfree(div);
Loading