PageRenderTime 17ms CodeModel.GetById 10ms app.highlight 5ms RepoModel.GetById 1ms app.codeStats 0ms

/arch/arm/mach-omap2/dpll44xx.c

https://github.com/AICP/kernel_asus_grouper
C | 84 lines | 53 code | 18 blank | 13 comment | 9 complexity | 1c406bbd7187ee566190af16ad60f8a2 MD5 | raw file
 1/*
 2 * OMAP4-specific DPLL control functions
 3 *
 4 * Copyright (C) 2011 Texas Instruments, Inc.
 5 * Rajendra Nayak
 6 *
 7 * This program is free software; you can redistribute it and/or modify
 8 * it under the terms of the GNU General Public License version 2 as
 9 * published by the Free Software Foundation.
10 */
11
12#include <linux/kernel.h>
13#include <linux/errno.h>
14#include <linux/clk.h>
15#include <linux/io.h>
16#include <linux/bitops.h>
17
18#include <plat/cpu.h>
19#include <plat/clock.h>
20
21#include "clock.h"
22#include "cm-regbits-44xx.h"
23
24/* Supported only on OMAP4 */
25int omap4_dpllmx_gatectrl_read(struct clk *clk)
26{
27	u32 v;
28	u32 mask;
29
30	if (!clk || !clk->clksel_reg || !cpu_is_omap44xx())
31		return -EINVAL;
32
33	mask = clk->flags & CLOCK_CLKOUTX2 ?
34			OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK :
35			OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK;
36
37	v = __raw_readl(clk->clksel_reg);
38	v &= mask;
39	v >>= __ffs(mask);
40
41	return v;
42}
43
44void omap4_dpllmx_allow_gatectrl(struct clk *clk)
45{
46	u32 v;
47	u32 mask;
48
49	if (!clk || !clk->clksel_reg || !cpu_is_omap44xx())
50		return;
51
52	mask = clk->flags & CLOCK_CLKOUTX2 ?
53			OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK :
54			OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK;
55
56	v = __raw_readl(clk->clksel_reg);
57	/* Clear the bit to allow gatectrl */
58	v &= ~mask;
59	__raw_writel(v, clk->clksel_reg);
60}
61
62void omap4_dpllmx_deny_gatectrl(struct clk *clk)
63{
64	u32 v;
65	u32 mask;
66
67	if (!clk || !clk->clksel_reg || !cpu_is_omap44xx())
68		return;
69
70	mask = clk->flags & CLOCK_CLKOUTX2 ?
71			OMAP4430_DPLL_CLKOUTX2_GATE_CTRL_MASK :
72			OMAP4430_DPLL_CLKOUT_GATE_CTRL_MASK;
73
74	v = __raw_readl(clk->clksel_reg);
75	/* Set the bit to deny gatectrl */
76	v |= mask;
77	__raw_writel(v, clk->clksel_reg);
78}
79
80const struct clkops clkops_omap4_dpllmx_ops = {
81	.allow_idle	= omap4_dpllmx_allow_gatectrl,
82	.deny_idle	= omap4_dpllmx_deny_gatectrl,
83};
84