Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
7f585bbf
Commit
7f585bbf
authored
Apr 03, 2013
by
Tony Lindgren
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'omap-timer-for-v3.10' of
git://github.com/jonhunter/linux
into omap-for-v3.10/timer
Conflicts: arch/arm/mach-omap2/timer.c
parents
43231b5b
4615943c
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
66 additions
and
65 deletions
+66
-65
arch/arm/mach-omap2/board-cm-t3517.c
arch/arm/mach-omap2/board-cm-t3517.c
+1
-1
arch/arm/mach-omap2/board-generic.c
arch/arm/mach-omap2/board-generic.c
+1
-1
arch/arm/mach-omap2/common.h
arch/arm/mach-omap2/common.h
+1
-2
arch/arm/mach-omap2/timer.c
arch/arm/mach-omap2/timer.c
+63
-61
No files found.
arch/arm/mach-omap2/board-cm-t3517.c
View file @
7f585bbf
...
@@ -324,6 +324,6 @@ MACHINE_START(CM_T3517, "Compulab CM-T3517")
...
@@ -324,6 +324,6 @@ MACHINE_START(CM_T3517, "Compulab CM-T3517")
.
handle_irq
=
omap3_intc_handle_irq
,
.
handle_irq
=
omap3_intc_handle_irq
,
.
init_machine
=
cm_t3517_init
,
.
init_machine
=
cm_t3517_init
,
.
init_late
=
am35xx_init_late
,
.
init_late
=
am35xx_init_late
,
.
init_time
=
omap3_gp
_gp
timer_timer_init
,
.
init_time
=
omap3_gptimer_timer_init
,
.
restart
=
omap3xxx_restart
,
.
restart
=
omap3xxx_restart
,
MACHINE_END
MACHINE_END
arch/arm/mach-omap2/board-generic.c
View file @
7f585bbf
...
@@ -140,7 +140,7 @@ DT_MACHINE_START(AM33XX_DT, "Generic AM33XX (Flattened Device Tree)")
...
@@ -140,7 +140,7 @@ DT_MACHINE_START(AM33XX_DT, "Generic AM33XX (Flattened Device Tree)")
.
init_irq
=
omap_intc_of_init
,
.
init_irq
=
omap_intc_of_init
,
.
handle_irq
=
omap3_intc_handle_irq
,
.
handle_irq
=
omap3_intc_handle_irq
,
.
init_machine
=
omap_generic_init
,
.
init_machine
=
omap_generic_init
,
.
init_time
=
omap3_
am33xx_
gptimer_timer_init
,
.
init_time
=
omap3_gptimer_timer_init
,
.
dt_compat
=
am33xx_boards_compat
,
.
dt_compat
=
am33xx_boards_compat
,
.
restart
=
am33xx_restart
,
.
restart
=
am33xx_restart
,
MACHINE_END
MACHINE_END
...
...
arch/arm/mach-omap2/common.h
View file @
7f585bbf
...
@@ -82,8 +82,7 @@ extern void omap2_init_common_infrastructure(void);
...
@@ -82,8 +82,7 @@ extern void omap2_init_common_infrastructure(void);
extern
void
omap2_sync32k_timer_init
(
void
);
extern
void
omap2_sync32k_timer_init
(
void
);
extern
void
omap3_sync32k_timer_init
(
void
);
extern
void
omap3_sync32k_timer_init
(
void
);
extern
void
omap3_secure_sync32k_timer_init
(
void
);
extern
void
omap3_secure_sync32k_timer_init
(
void
);
extern
void
omap3_gp_gptimer_timer_init
(
void
);
extern
void
omap3_gptimer_timer_init
(
void
);
extern
void
omap3_am33xx_gptimer_timer_init
(
void
);
extern
void
omap4_local_timer_init
(
void
);
extern
void
omap4_local_timer_init
(
void
);
extern
void
omap5_realtime_timer_init
(
void
);
extern
void
omap5_realtime_timer_init
(
void
);
...
...
arch/arm/mach-omap2/timer.c
View file @
7f585bbf
...
@@ -57,16 +57,6 @@
...
@@ -57,16 +57,6 @@
#include "common.h"
#include "common.h"
#include "powerdomain.h"
#include "powerdomain.h"
/* Parent clocks, eventually these will come from the clock framework */
#define OMAP2_MPU_SOURCE "sys_ck"
#define OMAP3_MPU_SOURCE OMAP2_MPU_SOURCE
#define OMAP4_MPU_SOURCE "sys_clkin_ck"
#define OMAP5_MPU_SOURCE "sys_clkin"
#define OMAP2_32K_SOURCE "func_32k_ck"
#define OMAP3_32K_SOURCE "omap_32k_fck"
#define OMAP4_32K_SOURCE "sys_32k_ck"
#define REALTIME_COUNTER_BASE 0x48243200
#define REALTIME_COUNTER_BASE 0x48243200
#define INCREMENTER_NUMERATOR_OFFSET 0x10
#define INCREMENTER_NUMERATOR_OFFSET 0x10
#define INCREMENTER_DENUMERATOR_RELOAD_OFFSET 0x14
#define INCREMENTER_DENUMERATOR_RELOAD_OFFSET 0x14
...
@@ -130,7 +120,6 @@ static void omap2_gp_timer_set_mode(enum clock_event_mode mode,
...
@@ -130,7 +120,6 @@ static void omap2_gp_timer_set_mode(enum clock_event_mode mode,
}
}
static
struct
clock_event_device
clockevent_gpt
=
{
static
struct
clock_event_device
clockevent_gpt
=
{
.
name
=
"gp_timer"
,
.
features
=
CLOCK_EVT_FEAT_PERIODIC
|
CLOCK_EVT_FEAT_ONESHOT
,
.
features
=
CLOCK_EVT_FEAT_PERIODIC
|
CLOCK_EVT_FEAT_ONESHOT
,
.
rating
=
300
,
.
rating
=
300
,
.
set_next_event
=
omap2_gp_timer_set_next_event
,
.
set_next_event
=
omap2_gp_timer_set_next_event
,
...
@@ -171,6 +160,12 @@ static struct device_node * __init omap_get_timer_dt(struct of_device_id *match,
...
@@ -171,6 +160,12 @@ static struct device_node * __init omap_get_timer_dt(struct of_device_id *match,
if
(
property
&&
!
of_get_property
(
np
,
property
,
NULL
))
if
(
property
&&
!
of_get_property
(
np
,
property
,
NULL
))
continue
;
continue
;
if
(
!
property
&&
(
of_get_property
(
np
,
"ti,timer-alwon"
,
NULL
)
||
of_get_property
(
np
,
"ti,timer-dsp"
,
NULL
)
||
of_get_property
(
np
,
"ti,timer-pwm"
,
NULL
)
||
of_get_property
(
np
,
"ti,timer-secure"
,
NULL
)))
continue
;
of_add_property
(
np
,
&
device_disabled
);
of_add_property
(
np
,
&
device_disabled
);
return
np
;
return
np
;
}
}
...
@@ -215,16 +210,17 @@ static u32 __init omap_dm_timer_get_errata(void)
...
@@ -215,16 +210,17 @@ static u32 __init omap_dm_timer_get_errata(void)
}
}
static
int
__init
omap_dm_timer_init_one
(
struct
omap_dm_timer
*
timer
,
static
int
__init
omap_dm_timer_init_one
(
struct
omap_dm_timer
*
timer
,
int
gptimer_id
,
const
char
*
fck_source
,
const
char
*
fck_source
,
const
char
*
property
,
const
char
*
property
,
const
char
**
timer_name
,
int
posted
)
int
posted
)
{
{
char
name
[
10
];
/* 10 = sizeof("gptXX_Xck0") */
char
name
[
10
];
/* 10 = sizeof("gptXX_Xck0") */
const
char
*
oh_name
;
const
char
*
oh_name
;
struct
device_node
*
np
;
struct
device_node
*
np
;
struct
omap_hwmod
*
oh
;
struct
omap_hwmod
*
oh
;
struct
resource
irq
,
mem
;
struct
resource
irq
,
mem
;
struct
clk
*
src
;
int
r
=
0
;
int
r
=
0
;
if
(
of_have_populated_dt
())
{
if
(
of_have_populated_dt
())
{
...
@@ -244,10 +240,10 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
...
@@ -244,10 +240,10 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
of_node_put
(
np
);
of_node_put
(
np
);
}
else
{
}
else
{
if
(
omap_dm_timer_reserve_systimer
(
gptimer_
id
))
if
(
omap_dm_timer_reserve_systimer
(
timer
->
id
))
return
-
ENODEV
;
return
-
ENODEV
;
sprintf
(
name
,
"timer%d"
,
gptimer_
id
);
sprintf
(
name
,
"timer%d"
,
timer
->
id
);
oh_name
=
name
;
oh_name
=
name
;
}
}
...
@@ -255,6 +251,8 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
...
@@ -255,6 +251,8 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
if
(
!
oh
)
if
(
!
oh
)
return
-
ENODEV
;
return
-
ENODEV
;
*
timer_name
=
oh
->
name
;
if
(
!
of_have_populated_dt
())
{
if
(
!
of_have_populated_dt
())
{
r
=
omap_hwmod_get_resource_byname
(
oh
,
IORESOURCE_IRQ
,
NULL
,
r
=
omap_hwmod_get_resource_byname
(
oh
,
IORESOURCE_IRQ
,
NULL
,
&
irq
);
&
irq
);
...
@@ -277,24 +275,24 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
...
@@ -277,24 +275,24 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
/* After the dmtimer is using hwmod these clocks won't be needed */
/* After the dmtimer is using hwmod these clocks won't be needed */
timer
->
fclk
=
clk_get
(
NULL
,
omap_hwmod_get_main_clk
(
oh
));
timer
->
fclk
=
clk_get
(
NULL
,
omap_hwmod_get_main_clk
(
oh
));
if
(
IS_ERR
(
timer
->
fclk
))
if
(
IS_ERR
(
timer
->
fclk
))
return
-
ENODEV
;
return
PTR_ERR
(
timer
->
fclk
)
;
/* FIXME: Need to remove hard-coded test on timer ID */
src
=
clk_get
(
NULL
,
fck_source
);
if
(
gptimer_id
!=
12
)
{
if
(
IS_ERR
(
src
))
struct
clk
*
src
;
return
PTR_ERR
(
src
);
src
=
clk_get
(
NULL
,
fck_source
);
if
(
clk_get_parent
(
timer
->
fclk
)
!=
src
)
{
if
(
IS_ERR
(
src
))
{
r
=
clk_set_parent
(
timer
->
fclk
,
src
);
r
=
-
EINVAL
;
if
(
r
<
0
)
{
}
else
{
pr_warn
(
"%s: %s cannot set source
\n
"
,
__func__
,
r
=
clk_set_parent
(
timer
->
fclk
,
src
);
oh
->
name
);
if
(
r
<
0
)
pr_warn
(
"%s: %s cannot set source
\n
"
,
__func__
,
oh
->
name
);
clk_put
(
src
);
clk_put
(
src
);
return
r
;
}
}
}
}
clk_put
(
src
);
omap_hwmod_setup_one
(
oh_name
);
omap_hwmod_setup_one
(
oh_name
);
omap_hwmod_enable
(
oh
);
omap_hwmod_enable
(
oh
);
__omap_dm_timer_init_regs
(
timer
);
__omap_dm_timer_init_regs
(
timer
);
...
@@ -318,6 +316,7 @@ static void __init omap2_gp_clockevent_init(int gptimer_id,
...
@@ -318,6 +316,7 @@ static void __init omap2_gp_clockevent_init(int gptimer_id,
{
{
int
res
;
int
res
;
clkev
.
id
=
gptimer_id
;
clkev
.
errata
=
omap_dm_timer_get_errata
();
clkev
.
errata
=
omap_dm_timer_get_errata
();
/*
/*
...
@@ -327,8 +326,8 @@ static void __init omap2_gp_clockevent_init(int gptimer_id,
...
@@ -327,8 +326,8 @@ static void __init omap2_gp_clockevent_init(int gptimer_id,
*/
*/
__omap_dm_timer_override_errata
(
&
clkev
,
OMAP_TIMER_ERRATA_I103_I767
);
__omap_dm_timer_override_errata
(
&
clkev
,
OMAP_TIMER_ERRATA_I103_I767
);
res
=
omap_dm_timer_init_one
(
&
clkev
,
gptimer_id
,
fck_source
,
property
,
res
=
omap_dm_timer_init_one
(
&
clkev
,
fck_source
,
property
,
OMAP_TIMER_POSTED
);
&
clockevent_gpt
.
name
,
OMAP_TIMER_POSTED
);
BUG_ON
(
res
);
BUG_ON
(
res
);
omap2_gp_timer_irq
.
dev_id
=
&
clkev
;
omap2_gp_timer_irq
.
dev_id
=
&
clkev
;
...
@@ -342,8 +341,8 @@ static void __init omap2_gp_clockevent_init(int gptimer_id,
...
@@ -342,8 +341,8 @@ static void __init omap2_gp_clockevent_init(int gptimer_id,
3
,
/* Timer internal resynch latency */
3
,
/* Timer internal resynch latency */
0xffffffff
);
0xffffffff
);
pr_info
(
"OMAP clockevent source:
GPTIMER%d at %lu Hz
\n
"
,
pr_info
(
"OMAP clockevent source:
%s at %lu Hz
\n
"
,
clockevent_gpt
.
name
,
gptimer_id
,
clkev
.
rate
);
clkev
.
rate
);
}
}
/* Clocksource code */
/* Clocksource code */
...
@@ -360,7 +359,6 @@ static cycle_t clocksource_read_cycles(struct clocksource *cs)
...
@@ -360,7 +359,6 @@ static cycle_t clocksource_read_cycles(struct clocksource *cs)
}
}
static
struct
clocksource
clocksource_gpt
=
{
static
struct
clocksource
clocksource_gpt
=
{
.
name
=
"gp_timer"
,
.
rating
=
300
,
.
rating
=
300
,
.
read
=
clocksource_read_cycles
,
.
read
=
clocksource_read_cycles
,
.
mask
=
CLOCKSOURCE_MASK
(
32
),
.
mask
=
CLOCKSOURCE_MASK
(
32
),
...
@@ -443,13 +441,16 @@ static int __init __maybe_unused omap2_sync32k_clocksource_init(void)
...
@@ -443,13 +441,16 @@ static int __init __maybe_unused omap2_sync32k_clocksource_init(void)
}
}
static
void
__init
omap2_gptimer_clocksource_init
(
int
gptimer_id
,
static
void
__init
omap2_gptimer_clocksource_init
(
int
gptimer_id
,
const
char
*
fck_source
)
const
char
*
fck_source
,
const
char
*
property
)
{
{
int
res
;
int
res
;
clksrc
.
id
=
gptimer_id
;
clksrc
.
errata
=
omap_dm_timer_get_errata
();
clksrc
.
errata
=
omap_dm_timer_get_errata
();
res
=
omap_dm_timer_init_one
(
&
clksrc
,
gptimer_id
,
fck_source
,
NULL
,
res
=
omap_dm_timer_init_one
(
&
clksrc
,
fck_source
,
property
,
&
clocksource_gpt
.
name
,
OMAP_TIMER_NONPOSTED
);
OMAP_TIMER_NONPOSTED
);
BUG_ON
(
res
);
BUG_ON
(
res
);
...
@@ -462,8 +463,8 @@ static void __init omap2_gptimer_clocksource_init(int gptimer_id,
...
@@ -462,8 +463,8 @@ static void __init omap2_gptimer_clocksource_init(int gptimer_id,
pr_err
(
"Could not register clocksource %s
\n
"
,
pr_err
(
"Could not register clocksource %s
\n
"
,
clocksource_gpt
.
name
);
clocksource_gpt
.
name
);
else
else
pr_info
(
"OMAP clocksource:
GPTIMER%d
at %lu Hz
\n
"
,
pr_info
(
"OMAP clocksource:
%s
at %lu Hz
\n
"
,
gptimer_id
,
clksrc
.
rate
);
clocksource_gpt
.
name
,
clksrc
.
rate
);
}
}
#ifdef CONFIG_SOC_HAS_REALTIME_COUNTER
#ifdef CONFIG_SOC_HAS_REALTIME_COUNTER
...
@@ -488,7 +489,7 @@ static void __init realtime_counter_init(void)
...
@@ -488,7 +489,7 @@ static void __init realtime_counter_init(void)
pr_err
(
"%s: ioremap failed
\n
"
,
__func__
);
pr_err
(
"%s: ioremap failed
\n
"
,
__func__
);
return
;
return
;
}
}
sys_clk
=
clk_get
(
NULL
,
OMAP5_MPU_SOURCE
);
sys_clk
=
clk_get
(
NULL
,
"sys_clkin"
);
if
(
IS_ERR
(
sys_clk
))
{
if
(
IS_ERR
(
sys_clk
))
{
pr_err
(
"%s: failed to get system clock handle
\n
"
,
__func__
);
pr_err
(
"%s: failed to get system clock handle
\n
"
,
__func__
);
iounmap
(
base
);
iounmap
(
base
);
...
@@ -545,49 +546,52 @@ static inline void __init realtime_counter_init(void)
...
@@ -545,49 +546,52 @@ static inline void __init realtime_counter_init(void)
#endif
#endif
#define OMAP_SYS_GP_TIMER_INIT(name, clkev_nr, clkev_src, clkev_prop, \
#define OMAP_SYS_GP_TIMER_INIT(name, clkev_nr, clkev_src, clkev_prop, \
clksrc_nr, clksrc_src
)
\
clksrc_nr, clksrc_src
, clksrc_prop)
\
void __init omap##name##_gptimer_timer_init(void) \
void __init omap##name##_gptimer_timer_init(void) \
{ \
{ \
omap_dmtimer_init(); \
omap_dmtimer_init(); \
omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \
omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \
omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src); \
omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src, \
clksrc_prop); \
}
}
#define OMAP_SYS_32K_TIMER_INIT(name, clkev_nr, clkev_src, clkev_prop, \
#define OMAP_SYS_32K_TIMER_INIT(name, clkev_nr, clkev_src, clkev_prop, \
clksrc_nr, clksrc_src
)
\
clksrc_nr, clksrc_src
, clksrc_prop)
\
void __init omap##name##_sync32k_timer_init(void) \
void __init omap##name##_sync32k_timer_init(void) \
{ \
{ \
omap_dmtimer_init(); \
omap_dmtimer_init(); \
omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \
omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \
/* Enable the use of clocksource="gp_timer" kernel parameter */
\
/* Enable the use of clocksource="gp_timer" kernel parameter */
\
if (use_gptimer_clksrc) \
if (use_gptimer_clksrc) \
omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src);\
omap2_gptimer_clocksource_init((clksrc_nr), clksrc_src, \
clksrc_prop); \
else \
else \
omap2_sync32k_clocksource_init(); \
omap2_sync32k_clocksource_init(); \
}
}
#ifdef CONFIG_ARCH_OMAP2
#ifdef CONFIG_ARCH_OMAP2
OMAP_SYS_32K_TIMER_INIT
(
2
,
1
,
OMAP2_32K_SOURCE
,
"ti,timer-alwon"
,
OMAP_SYS_32K_TIMER_INIT
(
2
,
1
,
"timer_32k_ck"
,
"ti,timer-alwon"
,
2
,
OMAP2_MPU_SOURCE
);
2
,
"timer_sys_ck"
,
NULL
);
#endif
/* CONFIG_ARCH_OMAP2 */
#endif
/* CONFIG_ARCH_OMAP2 */
#ifdef CONFIG_ARCH_OMAP3
#ifdef CONFIG_ARCH_OMAP3
OMAP_SYS_32K_TIMER_INIT
(
3
,
1
,
OMAP3_32K_SOURCE
,
"ti,timer-alwon"
,
OMAP_SYS_32K_TIMER_INIT
(
3
,
1
,
"timer_32k_ck"
,
"ti,timer-alwon"
,
2
,
OMAP3_MPU_SOURCE
);
2
,
"timer_sys_ck"
,
NULL
);
OMAP_SYS_32K_TIMER_INIT
(
3
_secure
,
12
,
OMAP3_32K_SOURCE
,
"ti,timer-secure"
,
OMAP_SYS_32K_TIMER_INIT
(
3
_secure
,
12
,
"secure_32k_fck"
,
"ti,timer-secure"
,
2
,
OMAP3_MPU_SOURCE
);
2
,
"timer_sys_ck"
,
NULL
);
OMAP_SYS_GP_TIMER_INIT
(
3
_gp
,
1
,
OMAP3_MPU_SOURCE
,
"ti,timer-alwon"
,
2
,
OMAP3_MPU_SOURCE
);
#endif
/* CONFIG_ARCH_OMAP3 */
#endif
/* CONFIG_ARCH_OMAP3 */
#ifdef CONFIG_SOC_AM33XX
#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM33XX)
OMAP_SYS_GP_TIMER_INIT
(
3
_am33xx
,
1
,
OMAP4_MPU_SOURCE
,
"ti,timer-alwon"
,
OMAP_SYS_GP_TIMER_INIT
(
3
,
2
,
"timer_sys_ck"
,
NULL
,
2
,
OMAP4_MPU_SOURCE
);
1
,
"timer_sys_ck"
,
"ti,timer-alwon"
);
#endif
/* CONFIG_SOC_AM33XX */
#endif
#if defined(CONFIG_ARCH_OMAP4) || defined(CONFIG_SOC_OMAP5)
static
OMAP_SYS_32K_TIMER_INIT
(
4
,
1
,
"timer_32k_ck"
,
"ti,timer-alwon"
,
2
,
"sys_clkin_ck"
,
NULL
);
#endif
#ifdef CONFIG_ARCH_OMAP4
#ifdef CONFIG_ARCH_OMAP4
OMAP_SYS_32K_TIMER_INIT
(
4
,
1
,
OMAP4_32K_SOURCE
,
"ti,timer-alwon"
,
2
,
OMAP4_MPU_SOURCE
);
#ifdef CONFIG_LOCAL_TIMERS
#ifdef CONFIG_LOCAL_TIMERS
static
DEFINE_TWD_LOCAL_TIMER
(
twd_local_timer
,
OMAP44XX_LOCAL_TWD_BASE
,
29
);
static
DEFINE_TWD_LOCAL_TIMER
(
twd_local_timer
,
OMAP44XX_LOCAL_TWD_BASE
,
29
);
void
__init
omap4_local_timer_init
(
void
)
void
__init
omap4_local_timer_init
(
void
)
...
@@ -616,13 +620,11 @@ void __init omap4_local_timer_init(void)
...
@@ -616,13 +620,11 @@ void __init omap4_local_timer_init(void)
#endif
/* CONFIG_ARCH_OMAP4 */
#endif
/* CONFIG_ARCH_OMAP4 */
#ifdef CONFIG_SOC_OMAP5
#ifdef CONFIG_SOC_OMAP5
OMAP_SYS_32K_TIMER_INIT
(
5
,
1
,
OMAP4_32K_SOURCE
,
"ti,timer-alwon"
,
2
,
OMAP5_MPU_SOURCE
);
void
__init
omap5_realtime_timer_init
(
void
)
void
__init
omap5_realtime_timer_init
(
void
)
{
{
int
err
;
int
err
;
omap
5
_sync32k_timer_init
();
omap
4
_sync32k_timer_init
();
realtime_counter_init
();
realtime_counter_init
();
err
=
arch_timer_of_register
();
err
=
arch_timer_of_register
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment