Commit 5e2e0195 authored by Heiko Stuebner's avatar Heiko Stuebner Committed by Kukjin Kim

clk: samsung: add infrastructure to add separate aliases

The current code adds aliases, if necessary, directly when adding
the clock, limiting the number of possible aliases to one.

Some platforms need more than one alias, like the hsmmc pclocks on
s3c2416 which need a "hsmmc" and "mmc_busclk.0" alias for the s3c-
sdhci driver.

Therefore add the possibility to separately add clock aliases for
previously created clocks.
Signed-off-by: default avatarHeiko Stuebner <heiko@sntech.de>
Acked-by: default avatarMike Turquette <mturquette@linaro.org>
Signed-off-by: default avatarKukjin Kim <kgene.kim@samsung.com>
parent 6e92bf5a
...@@ -97,6 +97,39 @@ void samsung_clk_add_lookup(struct clk *clk, unsigned int id) ...@@ -97,6 +97,39 @@ void samsung_clk_add_lookup(struct clk *clk, unsigned int id)
clk_table[id] = clk; clk_table[id] = clk;
} }
/* register a list of aliases */
void __init samsung_clk_register_alias(struct samsung_clock_alias *list,
unsigned int nr_clk)
{
struct clk *clk;
unsigned int idx, ret;
if (!clk_table) {
pr_err("%s: clock table missing\n", __func__);
return;
}
for (idx = 0; idx < nr_clk; idx++, list++) {
if (!list->id) {
pr_err("%s: clock id missing for index %d\n", __func__,
idx);
continue;
}
clk = clk_table[list->id];
if (!clk) {
pr_err("%s: failed to find clock %d\n", __func__,
list->id);
continue;
}
ret = clk_register_clkdev(clk, list->alias, list->dev_name);
if (ret)
pr_err("%s: failed to register lookup %s\n",
__func__, list->alias);
}
}
/* register a list of fixed clocks */ /* register a list of fixed clocks */
void __init samsung_clk_register_fixed_rate( void __init samsung_clk_register_fixed_rate(
struct samsung_fixed_rate_clock *list, unsigned int nr_clk) struct samsung_fixed_rate_clock *list, unsigned int nr_clk)
......
...@@ -22,6 +22,25 @@ ...@@ -22,6 +22,25 @@
#include <mach/map.h> #include <mach/map.h>
/**
* struct samsung_clock_alias: information about mux clock
* @id: platform specific id of the clock.
* @dev_name: name of the device to which this clock belongs.
* @alias: optional clock alias name to be assigned to this clock.
*/
struct samsung_clock_alias {
unsigned int id;
const char *dev_name;
const char *alias;
};
#define ALIAS(_id, dname, a) \
{ \
.id = _id, \
.dev_name = dname, \
.alias = a, \
}
/** /**
* struct samsung_fixed_rate_clock: information about fixed-rate clock * struct samsung_fixed_rate_clock: information about fixed-rate clock
* @id: platform specific id of the clock. * @id: platform specific id of the clock.
...@@ -251,6 +270,8 @@ extern void __init samsung_clk_of_register_fixed_ext( ...@@ -251,6 +270,8 @@ extern void __init samsung_clk_of_register_fixed_ext(
extern void samsung_clk_add_lookup(struct clk *clk, unsigned int id); extern void samsung_clk_add_lookup(struct clk *clk, unsigned int id);
extern void samsung_clk_register_alias(struct samsung_clock_alias *list,
unsigned int nr_clk);
extern void __init samsung_clk_register_fixed_rate( extern void __init samsung_clk_register_fixed_rate(
struct samsung_fixed_rate_clock *clk_list, unsigned int nr_clk); struct samsung_fixed_rate_clock *clk_list, unsigned int nr_clk);
extern void __init samsung_clk_register_fixed_factor( extern void __init samsung_clk_register_fixed_factor(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment