ARM: OMAP3: McBSP: New callback for McBSP2/3 ICLK idle configuration
authorPeter Ujfalusi <peter.ujfalusi@ti.com>
Mon, 30 May 2016 08:23:46 +0000 (11:23 +0300)
committerTony Lindgren <tony@atomide.com>
Fri, 10 Jun 2016 12:07:22 +0000 (05:07 -0700)
McBSP2/3 module's sidetone module operates using the module's ICLK clock.
When the Sidetone is in use the interface clock of the module must not
idle. The new callback expects to receive the *clk of the module's ick and
not the id number of the McBSP. This will allow us more cleanups and going
to simplify the ICLK handling.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap2/mcbsp.c
include/linux/platform_data/asoc-ti-mcbsp.h

index b4ac3af1160c79b0ecc6c65391cbb6bab3ae6fd9..959cb4cb1062ab8c6e5bbd190bb4e3a922464793 100644 (file)
@@ -48,6 +48,17 @@ static int omap3_enable_st_clock(unsigned int id, bool enable)
                return omap2_clk_allow_idle(mcbsp_iclks[id]);
 }
 
+static int omap3_mcbsp_force_ick_on(struct clk *clk, bool force_on)
+{
+       if (!clk)
+               return 0;
+
+       if (force_on)
+               return omap2_clk_deny_idle(clk);
+       else
+               return omap2_clk_allow_idle(clk);
+}
+
 static int __init omap_init_mcbsp(struct omap_hwmod *oh, void *unused)
 {
        int id, count = 1;
@@ -97,6 +108,7 @@ static int __init omap_init_mcbsp(struct omap_hwmod *oh, void *unused)
                oh_device[1] = omap_hwmod_lookup((
                (struct omap_mcbsp_dev_attr *)(oh->dev_attr))->sidetone);
                pdata->enable_st_clock = omap3_enable_st_clock;
+               pdata->force_ick_on = omap3_mcbsp_force_ick_on;
                sprintf(clk_name, "mcbsp%d_ick", id);
                mcbsp_iclks[id] = clk_get(NULL, clk_name);
                count++;
index 3c73c045f8da961dd8a3ddb6d5c17a169b2a2b42..73e5e832fa23d68d9ad7163dabb065c31c06a113 100644 (file)
@@ -45,6 +45,7 @@ struct omap_mcbsp_platform_data {
        bool has_wakeup; /* Wakeup capability */
        bool has_ccr; /* Transceiver has configuration control registers */
        int (*enable_st_clock)(unsigned int, bool);
+       int (*force_ick_on)(struct clk *clk, bool force_on);
 };
 
 /**