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
include
linux
mfd
core.h
Go to the documentation of this file.
1
/*
2
* drivers/mfd/mfd-core.h
3
*
4
* core MFD support
5
* Copyright (c) 2006 Ian Molton
6
* Copyright (c) 2007 Dmitry Baryshkov
7
*
8
* This program is free software; you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License version 2 as
10
* published by the Free Software Foundation.
11
*
12
*/
13
14
#ifndef MFD_CORE_H
15
#define MFD_CORE_H
16
17
#include <
linux/platform_device.h
>
18
19
struct
irq_domain
;
20
21
/*
22
* This struct describes the MFD part ("cell").
23
* After registration the copy of this structure will become the platform data
24
* of the resulting platform_device
25
*/
26
struct
mfd_cell
{
27
const
char
*
name
;
28
int
id
;
29
30
/* refcounting for multiple drivers to use a single cell */
31
atomic_t
*
usage_count
;
32
int
(*
enable
)(
struct
platform_device
*
dev
);
33
int
(*
disable
)(
struct
platform_device
*
dev
);
34
35
int
(*
suspend
)(
struct
platform_device
*
dev
);
36
int
(*
resume
)(
struct
platform_device
*
dev
);
37
38
/* platform data passed to the sub devices drivers */
39
void
*
platform_data
;
40
size_t
pdata_size
;
41
/*
42
* Device Tree compatible string
43
* See: Documentation/devicetree/usage-model.txt Chapter 2.2 for details
44
*/
45
const
char
*
of_compatible
;
46
47
/*
48
* These resources can be specified relative to the parent device.
49
* For accessing hardware you should use resources from the platform dev
50
*/
51
int
num_resources
;
52
const
struct
resource
*
resources
;
53
54
/* don't check for resource conflicts */
55
bool
ignore_resource_conflicts
;
56
57
/*
58
* Disable runtime PM callbacks for this subdevice - see
59
* pm_runtime_no_callbacks().
60
*/
61
bool
pm_runtime_no_callbacks
;
62
};
63
64
/*
65
* Convenience functions for clients using shared cells. Refcounting
66
* happens automatically, with the cell's enable/disable callbacks
67
* being called only when a device is first being enabled or no other
68
* clients are making use of it.
69
*/
70
extern
int
mfd_cell_enable
(
struct
platform_device
*pdev);
71
extern
int
mfd_cell_disable
(
struct
platform_device
*pdev);
72
73
/*
74
* "Clone" multiple platform devices for a single cell. This is to be used
75
* for devices that have multiple users of a cell. For example, if an mfd
76
* driver wants the cell "foo" to be used by a GPIO driver, an MTD driver,
77
* and a platform driver, the following bit of code would be use after first
78
* calling mfd_add_devices():
79
*
80
* const char *fclones[] = { "foo-gpio", "foo-mtd" };
81
* err = mfd_clone_cells("foo", fclones, ARRAY_SIZE(fclones));
82
*
83
* Each driver (MTD, GPIO, and platform driver) would then register
84
* platform_drivers for "foo-mtd", "foo-gpio", and "foo", respectively.
85
* The cell's .enable/.disable hooks should be used to deal with hardware
86
* resource contention.
87
*/
88
extern
int
mfd_clone_cell
(
const
char
*cell,
const
char
**clones,
89
size_t
n_clones);
90
91
/*
92
* Given a platform device that's been created by mfd_add_devices(), fetch
93
* the mfd_cell that created it.
94
*/
95
static
inline
const
struct
mfd_cell
*mfd_get_cell(
struct
platform_device
*pdev)
96
{
97
return
pdev->
mfd_cell
;
98
}
99
100
extern
int
mfd_add_devices
(
struct
device
*parent,
int
id
,
101
struct
mfd_cell
*cells,
int
n_devs,
102
struct
resource
*
mem_base
,
103
int
irq_base,
struct
irq_domain
*
irq_domain
);
104
105
extern
void
mfd_remove_devices
(
struct
device
*parent);
106
107
#endif
Generated on Thu Jan 10 2013 12:58:11 for Linux Kernel by
1.8.2