162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * linux/arch/arm/mach-omap2/mcbsp.c 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2008 Instituto Nokia de Tecnologia 662306a36Sopenharmony_ci * Contact: Eduardo Valentin <eduardo.valentin@indt.org.br> 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * Multichannel mode not supported. 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci#include <linux/module.h> 1162306a36Sopenharmony_ci#include <linux/init.h> 1262306a36Sopenharmony_ci#include <linux/clk.h> 1362306a36Sopenharmony_ci#include <linux/err.h> 1462306a36Sopenharmony_ci#include <linux/io.h> 1562306a36Sopenharmony_ci#include <linux/of.h> 1662306a36Sopenharmony_ci#include <linux/platform_device.h> 1762306a36Sopenharmony_ci#include <linux/slab.h> 1862306a36Sopenharmony_ci#include <linux/platform_data/asoc-ti-mcbsp.h> 1962306a36Sopenharmony_ci#include <linux/pm_runtime.h> 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#include <linux/omap-dma.h> 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#include "soc.h" 2462306a36Sopenharmony_ci#include "omap_device.h" 2562306a36Sopenharmony_ci#include "clock.h" 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci/* 2862306a36Sopenharmony_ci * FIXME: Find a mechanism to enable/disable runtime the McBSP ICLK autoidle. 2962306a36Sopenharmony_ci * Sidetone needs non-gated ICLK and sidetone autoidle is broken. 3062306a36Sopenharmony_ci */ 3162306a36Sopenharmony_ci#include "cm3xxx.h" 3262306a36Sopenharmony_ci#include "cm-regbits-34xx.h" 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistatic int omap3_mcbsp_force_ick_on(struct clk *clk, bool force_on) 3562306a36Sopenharmony_ci{ 3662306a36Sopenharmony_ci if (!clk) 3762306a36Sopenharmony_ci return 0; 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci if (force_on) 4062306a36Sopenharmony_ci return omap2_clk_deny_idle(clk); 4162306a36Sopenharmony_ci else 4262306a36Sopenharmony_ci return omap2_clk_allow_idle(clk); 4362306a36Sopenharmony_ci} 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_civoid __init omap3_mcbsp_init_pdata_callback( 4662306a36Sopenharmony_ci struct omap_mcbsp_platform_data *pdata) 4762306a36Sopenharmony_ci{ 4862306a36Sopenharmony_ci if (!pdata) 4962306a36Sopenharmony_ci return; 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci pdata->force_ick_on = omap3_mcbsp_force_ick_on; 5262306a36Sopenharmony_ci} 53