1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * linux/arch/arm/mach-omap2/mcbsp.c 4 * 5 * Copyright (C) 2008 Instituto Nokia de Tecnologia 6 * Contact: Eduardo Valentin <eduardo.valentin@indt.org.br> 7 * 8 * Multichannel mode not supported. 9 */ 10 #include <linux/module.h> 11 #include <linux/init.h> 12 #include <linux/clk.h> 13 #include <linux/err.h> 14 #include <linux/io.h> 15 #include <linux/of.h> 16 #include <linux/platform_device.h> 17 #include <linux/slab.h> 18 #include <linux/platform_data/asoc-ti-mcbsp.h> 19 #include <linux/pm_runtime.h> 20 21 #include <linux/omap-dma.h> 22 23 #include "soc.h" 24 #include "omap_device.h" 25 #include "clock.h" 26 27 /* 28 * FIXME: Find a mechanism to enable/disable runtime the McBSP ICLK autoidle. 29 * Sidetone needs non-gated ICLK and sidetone autoidle is broken. 30 */ 31 #include "cm3xxx.h" 32 #include "cm-regbits-34xx.h" 33 34 static int omap3_mcbsp_force_ick_on(struct clk *clk, bool force_on) 35 { 36 if (!clk) 37 return 0; 38 39 if (force_on) 40 return omap2_clk_deny_idle(clk); 41 else 42 return omap2_clk_allow_idle(clk); 43 } 44 45 void __init omap3_mcbsp_init_pdata_callback( 46 struct omap_mcbsp_platform_data *pdata) 47 { 48 if (!pdata) 49 return; 50 51 pdata->force_ick_on = omap3_mcbsp_force_ick_on; 52 } 53