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-at91
at91x40.c
Go to the documentation of this file.
1
/*
2
* arch/arm/mach-at91/at91x40.c
3
*
4
* (C) Copyright 2007, Greg Ungerer <
[email protected]
>
5
* Copyright (C) 2005 SAN People
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 as published by
9
* the Free Software Foundation; either version 2 of the License, or
10
* (at your option) any later version.
11
*/
12
13
#include <linux/kernel.h>
14
#include <
linux/init.h
>
15
#include <
linux/irq.h
>
16
#include <
linux/io.h
>
17
#include <asm/proc-fns.h>
18
#include <asm/system_misc.h>
19
#include <
asm/mach/arch.h
>
20
#include <
mach/at91x40.h
>
21
#include <
mach/at91_aic.h
>
22
#include <
mach/at91_st.h
>
23
#include <mach/timex.h>
24
#include "
generic.h
"
25
26
/*
27
* Export the clock functions for the AT91X40. Some external code common
28
* to all AT91 family parts relys on this, like the gpio and serial support.
29
*/
30
int
clk_enable
(
struct
clk
*
clk
)
31
{
32
return
0;
33
}
34
35
void
clk_disable
(
struct
clk
*
clk
)
36
{
37
}
38
39
unsigned
long
clk_get_rate
(
struct
clk
*
clk
)
40
{
41
return
AT91X40_MASTER_CLOCK;
42
}
43
44
static
void
at91x40_idle(
void
)
45
{
46
/*
47
* Disable the processor clock. The processor will be automatically
48
* re-enabled by an interrupt or by a reset.
49
*/
50
__raw_writel
(
AT91_PS_CR_CPU
,
AT91_IO_P2V
(
AT91_PS_CR
));
51
cpu_do_idle
();
52
}
53
54
void
__init
at91x40_initialize
(
unsigned
long
main_clock)
55
{
56
arm_pm_idle
= at91x40_idle;
57
at91_extern_irq
= (1 <<
AT91X40_ID_IRQ0
) | (1 <<
AT91X40_ID_IRQ1
)
58
| (1 <<
AT91X40_ID_IRQ2
);
59
}
60
61
/*
62
* The default interrupt priority levels (0 = lowest, 7 = highest).
63
*/
64
static
unsigned
int
at91x40_default_irq_priority[
NR_AIC_IRQS
]
__initdata
= {
65
7,
/* Advanced Interrupt Controller (FIQ) */
66
0,
/* System Peripherals */
67
0,
/* USART 0 */
68
0,
/* USART 1 */
69
2,
/* Timer Counter 0 */
70
2,
/* Timer Counter 1 */
71
2,
/* Timer Counter 2 */
72
0,
/* Watchdog timer */
73
0,
/* Parallel IO Controller A */
74
0,
/* Reserved */
75
0,
/* Reserved */
76
0,
/* Reserved */
77
0,
/* Reserved */
78
0,
/* Reserved */
79
0,
/* Reserved */
80
0,
/* Reserved */
81
0,
/* External IRQ0 */
82
0,
/* External IRQ1 */
83
0,
/* External IRQ2 */
84
};
85
86
void
__init
at91x40_init_interrupts
(
unsigned
int
priority
[
NR_AIC_IRQS
])
87
{
88
if
(!
priority
)
89
priority
= at91x40_default_irq_priority;
90
91
at91_aic_init
(
priority
,
at91_extern_irq
);
92
}
93
Generated on Thu Jan 10 2013 12:56:33 for Linux Kernel by
1.8.2