* [PATCH 0/2] OMAP4: McBSP: Fix clock reparenting @ 2011-12-15 9:37 Peter Ujfalusi 2011-12-15 9:37 ` [PATCH 1/2] OMAP2+: mcbsp: Restructure clk reparenting code Peter Ujfalusi 2011-12-15 9:37 ` [PATCH 2/2] OMAP4: mcbsp: Clock reparenting support Peter Ujfalusi 0 siblings, 2 replies; 5+ messages in thread From: Peter Ujfalusi @ 2011-12-15 9:37 UTC (permalink / raw) To: Tony Lindgren; +Cc: Jarkko Nikula, linux-omap, linux-arm-kernel Hello, OMAP4 has different clock names compared to OMAP2/3. Restructure the clock reparenting code for omap2plus in order to be able to suport OMAP4 clock source selection without breaking upper layer API. Regards, Peter --- Peter Ujfalusi (2): OMAP2+: mcbsp: Restructure clk reparenting code OMAP4: mcbsp: Clock reparenting support arch/arm/mach-omap2/mcbsp.c | 66 +++++++++++++++++++++++++++++++----------- 1 files changed, 48 insertions(+), 18 deletions(-) -- 1.7.8 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] OMAP2+: mcbsp: Restructure clk reparenting code 2011-12-15 9:37 [PATCH 0/2] OMAP4: McBSP: Fix clock reparenting Peter Ujfalusi @ 2011-12-15 9:37 ` Peter Ujfalusi 2011-12-15 9:37 ` [PATCH 2/2] OMAP4: mcbsp: Clock reparenting support Peter Ujfalusi 1 sibling, 0 replies; 5+ messages in thread From: Peter Ujfalusi @ 2011-12-15 9:37 UTC (permalink / raw) To: Tony Lindgren; +Cc: Jarkko Nikula, linux-omap, linux-arm-kernel In OMAP4 we have different clk names compared to OMAP2/3. To be able to support OMAP4 clock reparenting the set_clk_src function need to be separated into two function. One for selecting the platform's clock names, the other will do the reparenting. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> --- arch/arm/mach-omap2/mcbsp.c | 37 ++++++++++++++++++++++--------------- 1 files changed, 22 insertions(+), 15 deletions(-) diff --git a/arch/arm/mach-omap2/mcbsp.c b/arch/arm/mach-omap2/mcbsp.c index 857860b..9129003 100644 --- a/arch/arm/mach-omap2/mcbsp.c +++ b/arch/arm/mach-omap2/mcbsp.c @@ -65,25 +65,16 @@ static int omap2_mcbsp1_mux_rx_clk(struct device *dev, const char *signal, return 0; } -/* McBSP CLKS source switching function */ -static int omap2_mcbsp_set_clk_src(struct device *dev, struct clk *clk, - const char *src) +static int omap2_mcbsp_reparent_clk(struct device *dev, struct clk *clk, + char *fck_src_name) { struct clk *fck_src; - char *fck_src_name; int r; - if (!strcmp(src, "clks_ext")) - fck_src_name = "pad_fck"; - else if (!strcmp(src, "clks_fclk")) - fck_src_name = "prcm_fck"; - else - return -EINVAL; - fck_src = clk_get(dev, fck_src_name); if (IS_ERR_OR_NULL(fck_src)) { - pr_err("omap-mcbsp: %s: could not clk_get() %s\n", "clks", - fck_src_name); + dev_err(dev, "clk reparent: could not clk_get() %s\n", + fck_src_name); return -EINVAL; } @@ -91,8 +82,8 @@ static int omap2_mcbsp_set_clk_src(struct device *dev, struct clk *clk, r = clk_set_parent(clk, fck_src); if (IS_ERR_VALUE(r)) { - pr_err("omap-mcbsp: %s: could not clk_set_parent() to %s\n", - "clks", fck_src_name); + dev_err(dev, "clk reparent: could not clk_set_parent() to %s\n", + fck_src_name); clk_put(fck_src); return -EINVAL; } @@ -104,6 +95,22 @@ static int omap2_mcbsp_set_clk_src(struct device *dev, struct clk *clk, return 0; } +/* McBSP CLKS source switching for OMAP2/3 */ +static int omap2_mcbsp_set_clk_src(struct device *dev, struct clk *clk, + const char *src) +{ + char *fck_src_name; + + if (!strcmp(src, "clks_ext")) + fck_src_name = "pad_fck"; + else if (!strcmp(src, "clks_fclk")) + fck_src_name = "prcm_fck"; + else + return -EINVAL; + + return omap2_mcbsp_reparent_clk(dev, clk, fck_src_name); +} + static int omap3_enable_st_clock(unsigned int id, bool enable) { unsigned int w; -- 1.7.8 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] OMAP4: mcbsp: Clock reparenting support 2011-12-15 9:37 [PATCH 0/2] OMAP4: McBSP: Fix clock reparenting Peter Ujfalusi 2011-12-15 9:37 ` [PATCH 1/2] OMAP2+: mcbsp: Restructure clk reparenting code Peter Ujfalusi @ 2011-12-15 9:37 ` Peter Ujfalusi 2011-12-17 0:37 ` Paul Walmsley 1 sibling, 1 reply; 5+ messages in thread From: Peter Ujfalusi @ 2011-12-15 9:37 UTC (permalink / raw) To: Tony Lindgren; +Cc: Jarkko Nikula, linux-omap, linux-arm-kernel 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 <peter.ujfalusi@ti.com> --- 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); +} + static int omap3_enable_st_clock(unsigned int id, bool enable) { unsigned int w; @@ -184,9 +201,15 @@ static int omap_init_mcbsp(struct omap_hwmod *oh, void *unused) name, oh->name); return PTR_ERR(pdev); } - pdata->set_clk_src = omap2_mcbsp_set_clk_src; - if (id == 1) - pdata->mux_signal = omap2_mcbsp1_mux_rx_clk; + + if (oh->class->rev == MCBSP_CONFIG_TYPE4) + pdata->set_clk_src = omap4_mcbsp_set_clk_src; + else { + pdata->set_clk_src = omap2_mcbsp_set_clk_src; + if (id == 1) + pdata->mux_signal = omap2_mcbsp1_mux_rx_clk; + } + omap_mcbsp_count++; return 0; } -- 1.7.8 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] OMAP4: mcbsp: Clock reparenting support 2011-12-15 9:37 ` [PATCH 2/2] OMAP4: mcbsp: Clock reparenting support Peter Ujfalusi @ 2011-12-17 0:37 ` Paul Walmsley 2011-12-22 16:23 ` Peter Ujfalusi 0 siblings, 1 reply; 5+ messages in thread From: Paul Walmsley @ 2011-12-17 0:37 UTC (permalink / raw) To: Peter Ujfalusi; +Cc: Tony Lindgren, Jarkko Nikula, linux-omap, linux-arm-kernel [-- Attachment #1: Type: TEXT/PLAIN, Size: 2234 bytes --] 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 <peter.ujfalusi@ti.com> > --- > 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 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] OMAP4: mcbsp: Clock reparenting support 2011-12-17 0:37 ` Paul Walmsley @ 2011-12-22 16:23 ` Peter Ujfalusi 0 siblings, 0 replies; 5+ messages in thread From: Peter Ujfalusi @ 2011-12-22 16:23 UTC (permalink / raw) To: Paul Walmsley; +Cc: Tony Lindgren, Jarkko Nikula, linux-omap, linux-arm-kernel Hi Paul, On 12/17/2011 02:37 AM, Paul Walmsley wrote: > 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. I need to look into the clock framework, but sounds promising. I can see quite big difference between the clock3xxx_data, and clock44xx_data regarding to McBSPs. Need to understand why, and what need to be changed to achieve what I want. > 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? Is it OK if I do this as an incremental patch as soon as I figured out the way to do it nicely? Thank you, Péter -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2011-12-22 16:23 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-12-15 9:37 [PATCH 0/2] OMAP4: McBSP: Fix clock reparenting Peter Ujfalusi 2011-12-15 9:37 ` [PATCH 1/2] OMAP2+: mcbsp: Restructure clk reparenting code Peter Ujfalusi 2011-12-15 9:37 ` [PATCH 2/2] OMAP4: mcbsp: Clock reparenting support Peter Ujfalusi 2011-12-17 0:37 ` Paul Walmsley 2011-12-22 16:23 ` Peter Ujfalusi
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).