Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
arm
mach-omap2
clkt2xxx_osc.c
Go to the documentation of this file.
1
/*
2
* OMAP2xxx osc_clk-specific clock code
3
*
4
* Copyright (C) 2005-2008 Texas Instruments, Inc.
5
* Copyright (C) 2004-2010 Nokia Corporation
6
*
7
* Contacts:
8
* Richard Woodruff <
[email protected]
>
9
* Paul Walmsley
10
*
11
* Based on earlier work by Tuukka Tikkanen, Tony Lindgren,
12
* Gordon McNutt and RidgeRun, Inc.
13
*
14
* This program is free software; you can redistribute it and/or modify
15
* it under the terms of the GNU General Public License version 2 as
16
* published by the Free Software Foundation.
17
*/
18
#undef DEBUG
19
20
#include <linux/module.h>
21
#include <linux/kernel.h>
22
#include <linux/errno.h>
23
#include <
linux/clk.h
>
24
#include <
linux/io.h
>
25
26
#include <plat/clock.h>
27
28
#include "
clock.h
"
29
#include "
clock2xxx.h
"
30
#include "
prm2xxx_3xxx.h
"
31
#include "
prm-regbits-24xx.h
"
32
33
/*
34
* XXX This does not actually enable the osc_ck, since the osc_ck must
35
* be running for this function to be called. Instead, this function
36
* is used to disable an autoidle mode on the osc_ck. The existing
37
* clk_enable/clk_disable()-based usecounting for osc_ck should be
38
* replaced with autoidle-based usecounting.
39
*/
40
static
int
omap2_enable_osc_ck(
struct
clk
*
clk
)
41
{
42
u32
pcc;
43
44
pcc =
__raw_readl
(
prcm_clksrc_ctrl
);
45
46
__raw_writel
(pcc & ~
OMAP_AUTOEXTCLKMODE_MASK
,
prcm_clksrc_ctrl
);
47
48
return
0;
49
}
50
51
/*
52
* XXX This does not actually disable the osc_ck, since doing so would
53
* immediately halt the system. Instead, this function is used to
54
* enable an autoidle mode on the osc_ck. The existing
55
* clk_enable/clk_disable()-based usecounting for osc_ck should be
56
* replaced with autoidle-based usecounting.
57
*/
58
static
void
omap2_disable_osc_ck(
struct
clk
*
clk
)
59
{
60
u32
pcc;
61
62
pcc =
__raw_readl
(
prcm_clksrc_ctrl
);
63
64
__raw_writel
(pcc |
OMAP_AUTOEXTCLKMODE_MASK
,
prcm_clksrc_ctrl
);
65
}
66
67
const
struct
clkops
clkops_oscck
= {
68
.enable = omap2_enable_osc_ck,
69
.disable = omap2_disable_osc_ck,
70
};
71
72
unsigned
long
omap2_osc_clk_recalc
(
struct
clk
*
clk
)
73
{
74
return
omap2xxx_get_apll_clkin
() *
omap2xxx_get_sysclkdiv
();
75
}
76
Generated on Thu Jan 10 2013 13:00:25 for Linux Kernel by
1.8.2