Commit 0759ac8a authored by Stephen Boyd's avatar Stephen Boyd
Browse files

clk: fixed-factor: Add hw based registration APIs



Add registration APIs in the clk fixed-factor code to return
struct clk_hw pointers instead of struct clk pointers. This way
we hide the struct clk pointer from providers unless they need to
use consumer facing APIs.

Signed-off-by: default avatarStephen Boyd <sboyd@codeaurora.org>
parent 264b3171
Loading
Loading
Loading
Loading
+35 −7
Original line number Original line Diff line number Diff line
@@ -68,13 +68,14 @@ const struct clk_ops clk_fixed_factor_ops = {
};
};
EXPORT_SYMBOL_GPL(clk_fixed_factor_ops);
EXPORT_SYMBOL_GPL(clk_fixed_factor_ops);


struct clk *clk_register_fixed_factor(struct device *dev, const char *name,
struct clk_hw *clk_hw_register_fixed_factor(struct device *dev,
		const char *parent_name, unsigned long flags,
		const char *name, const char *parent_name, unsigned long flags,
		unsigned int mult, unsigned int div)
		unsigned int mult, unsigned int div)
{
{
	struct clk_fixed_factor *fix;
	struct clk_fixed_factor *fix;
	struct clk_init_data init;
	struct clk_init_data init;
	struct clk *clk;
	struct clk_hw *hw;
	int ret;


	fix = kmalloc(sizeof(*fix), GFP_KERNEL);
	fix = kmalloc(sizeof(*fix), GFP_KERNEL);
	if (!fix)
	if (!fix)
@@ -91,12 +92,28 @@ struct clk *clk_register_fixed_factor(struct device *dev, const char *name,
	init.parent_names = &parent_name;
	init.parent_names = &parent_name;
	init.num_parents = 1;
	init.num_parents = 1;


	clk = clk_register(dev, &fix->hw);
	hw = &fix->hw;

	ret = clk_hw_register(dev, hw);
	if (IS_ERR(clk))
	if (ret) {
		kfree(fix);
		kfree(fix);
		hw = ERR_PTR(ret);
	}


	return clk;
	return hw;
}
EXPORT_SYMBOL_GPL(clk_hw_register_fixed_factor);

struct clk *clk_register_fixed_factor(struct device *dev, const char *name,
		const char *parent_name, unsigned long flags,
		unsigned int mult, unsigned int div)
{
	struct clk_hw *hw;

	hw = clk_hw_register_fixed_factor(dev, name, parent_name, flags, mult,
					  div);
	if (IS_ERR(hw))
		return ERR_CAST(hw);
	return hw->clk;
}
}
EXPORT_SYMBOL_GPL(clk_register_fixed_factor);
EXPORT_SYMBOL_GPL(clk_register_fixed_factor);


@@ -113,6 +130,17 @@ void clk_unregister_fixed_factor(struct clk *clk)
}
}
EXPORT_SYMBOL_GPL(clk_unregister_fixed_factor);
EXPORT_SYMBOL_GPL(clk_unregister_fixed_factor);


void clk_hw_unregister_fixed_factor(struct clk_hw *hw)
{
	struct clk_fixed_factor *fix;

	fix = to_clk_fixed_factor(hw);

	clk_hw_unregister(hw);
	kfree(fix);
}
EXPORT_SYMBOL_GPL(clk_hw_unregister_fixed_factor);

#ifdef CONFIG_OF
#ifdef CONFIG_OF
/**
/**
 * of_fixed_factor_clk_setup() - Setup function for simple fixed factor clock
 * of_fixed_factor_clk_setup() - Setup function for simple fixed factor clock
+4 −0
Original line number Original line Diff line number Diff line
@@ -525,6 +525,10 @@ struct clk *clk_register_fixed_factor(struct device *dev, const char *name,
		const char *parent_name, unsigned long flags,
		const char *parent_name, unsigned long flags,
		unsigned int mult, unsigned int div);
		unsigned int mult, unsigned int div);
void clk_unregister_fixed_factor(struct clk *clk);
void clk_unregister_fixed_factor(struct clk *clk);
struct clk_hw *clk_hw_register_fixed_factor(struct device *dev,
		const char *name, const char *parent_name, unsigned long flags,
		unsigned int mult, unsigned int div);
void clk_hw_unregister_fixed_factor(struct clk_hw *hw);


/**
/**
 * struct clk_fractional_divider - adjustable fractional divider clock
 * struct clk_fractional_divider - adjustable fractional divider clock