[PATCH 4/4] clk: samsung: add infrastructure to add separate aliases
Thomas Abraham
thomas.abraham at linaro.org
Tue Mar 12 06:48:52 EDT 2013
On 12 March 2013 15:34, Heiko Stübner <heiko at sntech.de> wrote:
> Am Dienstag, 12. März 2013, 10:57:30 schrieb Thomas Abraham:
>> On 12 March 2013 05:15, Heiko Stübner <heiko at sntech.de> wrote:
>> > 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: Heiko Stuebner <heiko at sntech.de>
>> > ---
>> > change since the discussion: removed the list->alias check
>> >
>> > drivers/clk/samsung/clk.c | 33 +++++++++++++++++++++++++++++++++
>> > drivers/clk/samsung/clk.h | 21 +++++++++++++++++++++
>> > 2 files changed, 54 insertions(+), 0 deletions(-)
>> >
>> > diff --git a/drivers/clk/samsung/clk.c b/drivers/clk/samsung/clk.c
>> > index 7c943f8..20ec566 100644
>> > --- a/drivers/clk/samsung/clk.c
>> > +++ b/drivers/clk/samsung/clk.c
>> > @@ -94,6 +94,39 @@ void samsung_clk_add_lookup(struct clk *clk, unsigned
>> > int id)
>> >
>> > 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 */
>> > void __init samsung_clk_register_fixed_rate(
>> >
>> > struct samsung_fixed_rate_clock *list, unsigned int
>> > nr_clk)
>> >
>> > diff --git a/drivers/clk/samsung/clk.h b/drivers/clk/samsung/clk.h
>> > index 26a752b..6bacd6f 100644
>> > --- a/drivers/clk/samsung/clk.h
>> > +++ b/drivers/clk/samsung/clk.h
>> > @@ -23,6 +23,25 @@
>> >
>> > #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
>> > * @id: platform specific id of the clock.
>> > * @name: name of this fixed-rate clock.
>> >
>> > @@ -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_register_alias(struct samsung_clock_alias *list,
>> > + unsigned int nr_clk);
>> >
>> > extern void __init samsung_clk_register_fixed_rate(
>> >
>> > struct samsung_fixed_rate_clock *clk_list, unsigned int
>> > nr_clk);
>> >
>> > extern void __init samsung_clk_register_fixed_factor(
>> >
>> > --
>> > 1.7.2.3
>>
>> This change looks fine but as discussed on 3/4 patch of this series,
>> allocating clk_table for non-dt platforms would not be very helpful.
>
> But how would we look up the previously registered clk otherwise?
> Using clk_table for this lookup seemed like the best way to easily access
> these clocks.
I did assume that the aliases for a clock are set when that clock is
registered. Are there any instances where the aliases have to be set
after a clock has been registered (using the samsung clock driver
helper functions)?
Thanks,
Thomas.
>
>
> Thanks
> Heiko
More information about the linux-arm-kernel
mailing list