[PATCH 1/3] arm/dt: add basic mx51 device tree support

Shawn Guo shawn.guo at linaro.org
Mon Feb 28 17:48:49 EST 2011


On 18 February 2011 16:12, Jason Liu <r64343 at freescale.com> wrote:
> Signed-off-by: Jason Liu <r64343 at freescale.com>
> ---
>  arch/arm/mach-mx5/Kconfig               |    6 +++
>  arch/arm/mach-mx5/Makefile              |    1 +
>  arch/arm/mach-mx5/board-dt.c            |   64 +++++++++++++++++++++++++++++++
>  arch/arm/mach-mx5/clock-mx51-mx53.c     |   45 +++++++++++++++++++++-
>  arch/arm/plat-mxc/include/mach/common.h |    1 +
>  5 files changed, 116 insertions(+), 1 deletions(-)
>
[...]
> diff --git a/arch/arm/mach-mx5/clock-mx51-mx53.c b/arch/arm/mach-mx5/clock-mx51-mx53.c
> index 0a19e75..b8a608e 100644
> --- a/arch/arm/mach-mx5/clock-mx51-mx53.c
> +++ b/arch/arm/mach-mx5/clock-mx51-mx53.c
> @@ -15,13 +15,19 @@
>  #include <linux/clk.h>
>  #include <linux/io.h>
>  #include <linux/clkdev.h>
> -
> +#include <linux/err.h>
>  #include <asm/div64.h>
>
>  #include <mach/hardware.h>
>  #include <mach/common.h>
>  #include <mach/clock.h>
>
> +#ifdef CONFIG_OF
> +#include <linux/of.h>
> +#include <linux/of_address.h>
> +#include <linux/of_clk.h>
> +#endif /* CONFIG_OF */
> +
>  #include "crm_regs.h"
>
>  /* External clock values passed-in by the board code */
> @@ -1432,3 +1438,40 @@ int __init mx53_clocks_init(unsigned long ckil, unsigned long osc,
>                MX53_INT_GPT);
>        return 0;
>  }
> +
> +#ifdef CONFIG_OF
> +static struct clk* mx5_dt_clk_get(struct device_node *np,
> +                                       const char *output_id, void *data)
> +{
> +       return data;
> +}
> +
> +static __init void mx5_dt_scan_clks(void)
> +{
> +       struct device_node *node;
> +       struct clk *clk;
> +       const char *id;
> +       int rc;
> +
> +       for_each_compatible_node(node, NULL, "clock") {
> +               id = of_get_property(node, "clock-outputs", NULL);
> +               if (!id)
> +                       continue;
> +
> +               clk = clk_get_sys(id, NULL);
> +               if (IS_ERR(clk))
> +                       continue;
> +
> +               rc = of_clk_add_provider(node, mx5_dt_clk_get, clk);
> +               if (rc) {
> +                       kfree(clk);

In this particular implementation, kfree here may not be needed, as
all the "clk" are currently created in the static way.  And I'm trying
to change it to the dynamic way by scanning clock node from dt,
creating and registering the "clk" correspondingly.

> +                       pr_err("error adding fixed clk %s\n", node->name);
> +               }
> +       }
> +}
> +
> +void __init mx5_clk_dt_init(void)
> +{
> +       mx5_dt_scan_clks();
> +}
> +#endif

-- 
Regards,
Shawn


More information about the devicetree-discuss mailing list