blob: c3604b4585a44974a100342bf46b9ba2371f9955 [file] [log] [blame]
Thomas Gleixnerd2912cb2019-06-04 10:11:33 +02001// SPDX-License-Identifier: GPL-2.0-only
Eduardo Valentin78673bc2008-07-03 12:24:40 +03002/*
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 *
Eduardo Valentin78673bc2008-07-03 12:24:40 +03008 * 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>
Peter Ujfalusie586e952012-08-16 16:41:07 +030015#include <linux/of.h>
Eduardo Valentin78673bc2008-07-03 12:24:40 +030016#include <linux/platform_device.h>
Tejun Heo5a0e3ad2010-03-24 17:04:11 +090017#include <linux/slab.h>
Arnd Bergmann22037472012-08-24 15:21:06 +020018#include <linux/platform_data/asoc-ti-mcbsp.h>
Tony Lindgren25c7d492012-10-02 17:25:48 -070019#include <linux/pm_runtime.h>
Eduardo Valentin78673bc2008-07-03 12:24:40 +030020
Tony Lindgren45c3eb72012-11-30 08:41:50 -080021#include <linux/omap-dma.h>
Tony Lindgren25c7d492012-10-02 17:25:48 -070022
Tony Lindgrenb76c8b192013-01-11 11:24:18 -080023#include "soc.h"
Tony Lindgren25c7d492012-10-02 17:25:48 -070024#include "omap_device.h"
Tero Kristo7a90da22013-10-11 19:15:33 +030025#include "clock.h"
Paul Walmsley4814ced2010-10-08 11:40:20 -060026
Jarkko Nikula1743d142011-09-26 10:45:44 +030027/*
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 */
Paul Walmsleyd9a16f92012-10-29 20:57:39 -060031#include "cm3xxx.h"
Jarkko Nikula1743d142011-09-26 10:45:44 +030032#include "cm-regbits-34xx.h"
33
Peter Ujfalusi53ae95f2016-05-30 11:23:46 +030034static 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
Peter Ujfalusic26c84c2016-05-30 11:23:47 +030045void __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}