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
plat-omap
include
plat
omap_device.h
Go to the documentation of this file.
1
/*
2
* omap_device headers
3
*
4
* Copyright (C) 2009 Nokia Corporation
5
* Paul Walmsley
6
*
7
* Developed in collaboration with (alphabetical order): Benoit
8
* Cousson, Kevin Hilman, Tony Lindgren, Rajendra Nayak, Vikram
9
* Pandita, Sakari Poussa, Anand Sawant, Santosh Shilimkar, Richard
10
* Woodruff
11
*
12
* This program is free software; you can redistribute it and/or modify
13
* it under the terms of the GNU General Public License version 2 as
14
* published by the Free Software Foundation.
15
*
16
* Eventually this type of functionality should either be
17
* a) implemented via arch-specific pointers in platform_device
18
* or
19
* b) implemented as a proper omap_bus/omap_device in Linux, no more
20
* platform_device
21
*
22
* omap_device differs from omap_hwmod in that it includes external
23
* (e.g., board- and system-level) integration details. omap_hwmod
24
* stores hardware data that is invariant for a given OMAP chip.
25
*
26
* To do:
27
* - GPIO integration
28
* - regulator integration
29
*
30
*/
31
#ifndef __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_OMAP_DEVICE_H
32
#define __ARCH_ARM_PLAT_OMAP_INCLUDE_MACH_OMAP_DEVICE_H
33
34
#include <linux/kernel.h>
35
#include <
linux/platform_device.h
>
36
37
#include <
plat/omap_hwmod.h
>
38
39
extern
struct
dev_pm_domain
omap_device_pm_domain
;
40
41
/* omap_device._state values */
42
#define OMAP_DEVICE_STATE_UNKNOWN 0
43
#define OMAP_DEVICE_STATE_ENABLED 1
44
#define OMAP_DEVICE_STATE_IDLE 2
45
#define OMAP_DEVICE_STATE_SHUTDOWN 3
46
47
/* omap_device.flags values */
48
#define OMAP_DEVICE_SUSPENDED BIT(0)
49
#define OMAP_DEVICE_NO_IDLE_ON_SUSPEND BIT(1)
50
71
struct
omap_device
{
72
struct
platform_device
*
pdev
;
73
struct
omap_hwmod
**
hwmods
;
74
struct
omap_device_pm_latency
*
pm_lats
;
75
u32
dev_wakeup_lat
;
76
u32
_dev_wakeup_lat_limit
;
77
unsigned
long
_driver_status
;
78
u8
pm_lats_cnt
;
79
s8
pm_lat_level
;
80
u8
hwmods_cnt
;
81
u8
_state
;
82
u8
flags
;
83
};
84
85
/* Device driver interface (call via platform_data fn ptrs) */
86
87
int
omap_device_enable
(
struct
platform_device
*pdev);
88
int
omap_device_idle
(
struct
platform_device
*pdev);
89
int
omap_device_shutdown
(
struct
platform_device
*pdev);
90
91
/* Core code interface */
92
93
struct
platform_device
*
omap_device_build
(
const
char
*pdev_name,
int
pdev_id,
94
struct
omap_hwmod
*oh,
void
*
pdata
,
95
int
pdata_len,
96
struct
omap_device_pm_latency
*pm_lats,
97
int
pm_lats_cnt,
int
is_early_device);
98
99
struct
platform_device
*
omap_device_build_ss
(
const
char
*pdev_name,
int
pdev_id,
100
struct
omap_hwmod
**oh,
int
oh_cnt,
101
void
*
pdata
,
int
pdata_len,
102
struct
omap_device_pm_latency
*pm_lats,
103
int
pm_lats_cnt,
int
is_early_device);
104
105
struct
omap_device
*
omap_device_alloc
(
struct
platform_device
*
pdev
,
106
struct
omap_hwmod
**ohs,
int
oh_cnt,
107
struct
omap_device_pm_latency
*
pm_lats
,
108
int
pm_lats_cnt
);
109
void
omap_device_delete
(
struct
omap_device
*od);
110
int
omap_device_register
(
struct
platform_device
*
pdev
);
111
112
void
__iomem
*
omap_device_get_rt_va
(
struct
omap_device
*od);
113
struct
device
*
omap_device_get_by_hwmod_name
(
const
char
*oh_name);
114
115
/* OMAP PM interface */
116
int
omap_device_align_pm_lat
(
struct
platform_device
*pdev,
117
u32
new_wakeup_lat_limit);
118
struct
powerdomain
*
omap_device_get_pwrdm
(
struct
omap_device
*od);
119
int
omap_device_get_context_loss_count
(
struct
platform_device
*pdev);
120
121
/* Other */
122
123
int
omap_device_assert_hardreset
(
struct
platform_device
*pdev,
124
const
char
*
name
);
125
int
omap_device_deassert_hardreset
(
struct
platform_device
*pdev,
126
const
char
*
name
);
127
int
omap_device_idle_hwmods
(
struct
omap_device
*od);
128
int
omap_device_enable_hwmods
(
struct
omap_device
*od);
129
130
int
omap_device_disable_clocks
(
struct
omap_device
*od);
131
int
omap_device_enable_clocks
(
struct
omap_device
*od);
132
133
/*
134
* Entries should be kept in latency order ascending
135
*
136
* deact_lat is the maximum number of microseconds required to complete
137
* deactivate_func() at the device's slowest OPP.
138
*
139
* act_lat is the maximum number of microseconds required to complete
140
* activate_func() at the device's slowest OPP.
141
*
142
* This will result in some suboptimal power management decisions at fast
143
* OPPs, but avoids having to recompute all device power management decisions
144
* if the system shifts from a fast OPP to a slow OPP (in order to meet
145
* latency requirements).
146
*
147
* XXX should deactivate_func/activate_func() take platform_device pointers
148
* rather than omap_device pointers?
149
*/
150
struct
omap_device_pm_latency
{
151
u32
deactivate_lat
;
152
u32
deactivate_lat_worst
;
153
int
(*
deactivate_func
)(
struct
omap_device
*od);
154
u32
activate_lat
;
155
u32
activate_lat_worst
;
156
int
(*
activate_func
)(
struct
omap_device
*od);
157
u32
flags
;
158
};
159
160
#define OMAP_DEVICE_LATENCY_AUTO_ADJUST BIT(1)
161
162
/* Get omap_device pointer from platform_device pointer */
163
static
inline
struct
omap_device
*to_omap_device(
struct
platform_device
*
pdev
)
164
{
165
return
pdev ? pdev->
archdata
.od :
NULL
;
166
}
167
168
static
inline
169
void
omap_device_disable_idle_on_suspend(
struct
platform_device
*
pdev
)
170
{
171
struct
omap_device
*od = to_omap_device(pdev);
172
173
od->
flags
|=
OMAP_DEVICE_NO_IDLE_ON_SUSPEND
;
174
}
175
176
#endif
Generated on Thu Jan 10 2013 13:03:18 for Linux Kernel by
1.8.2