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  
omap3_mcbsp_force_ick_on(struct clk * clk,bool force_on)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  
omap3_mcbsp_init_pdata_callback(struct omap_mcbsp_platform_data * pdata)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