Hi Péter

On Thu, 15 Dec 2011, Peter Ujfalusi wrote:

> With OMAP4 the clock names are different compared to OMAP2/3. The 
> internal fclk name depends on the McBSP instance number. In case of 
> MCBSP_TYPE4 (OMAP4) we should use different clock selection method 
> compared to OMAP2/3.
> 
> Signed-off-by: Peter Ujfalusi <[email protected]>
> ---
>  arch/arm/mach-omap2/mcbsp.c |   29 ++++++++++++++++++++++++++---
>  1 files changed, 26 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/arm/mach-omap2/mcbsp.c b/arch/arm/mach-omap2/mcbsp.c
> index 9129003..829f4c7 100644
> --- a/arch/arm/mach-omap2/mcbsp.c
> +++ b/arch/arm/mach-omap2/mcbsp.c
> @@ -111,6 +111,23 @@ static int omap2_mcbsp_set_clk_src(struct device *dev, 
> struct clk *clk,
>       return omap2_mcbsp_reparent_clk(dev, clk, fck_src_name);
>  }
>  
> +/* McBSP CLKS source switching for OMAP4 */
> +static int omap4_mcbsp_set_clk_src(struct device *dev, struct clk *clk,
> +                                const char *src)
> +{
> +     struct omap_mcbsp *mcbsp = dev_get_drvdata(dev);
> +     char fck_src_name[30];
> +
> +     if (!strcmp(src, "clks_ext"))
> +             strcpy(fck_src_name, "pad_clks_ck");
> +     else if (!strcmp(src, "clks_fclk"))
> +             sprintf(fck_src_name, "mcbsp%d_sync_mux_ck", mcbsp->id);
> +     else
> +             return -EINVAL;
> +
> +     return omap2_mcbsp_reparent_clk(dev, clk, fck_src_name);
> +}

What do you think about using clkdev alias lines and hwmod optional clks 
for this instead?  With these mechanisms, you can give clocks a consistent 
"role name" for a given device, even if the underlying clock changes on 
different platforms.

So in the mach-omap2/clock*_data.c files, you'd do something like

        CLK("omap-mcbsp.1",     "pad_fck",      &mcbsp_clks,  CK_3XXX),

for OMAP3, and 

        CLK("omap-mcbsp.1",     "pad_fck",      &pad_clks_clk,  CK_44XX),

for OMAP4.

Then in the hwmod data files, you'd add them as optional clocks - 
something like:

static struct omap_hwmod_opt_clk mcbsp1_opt_clks[] = {
        { .role = "pad_fck", .clk = "mcbsp_clks" },
};

for OMAP3, and

static struct omap_hwmod_opt_clk mcbsp1_opt_clks[] = {
        { .role = "pad_fck", .clk = "pad_clks_clk" },
};

for OMAP4.

I think this might work for your needs?


- Paul

Reply via email to