Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide-2.6
[pandora-kernel.git] / arch / arm / plat-spear / include / plat / padmux.h
1 /*
2  * arch/arm/plat-spear/include/plat/padmux.h
3  *
4  * SPEAr platform specific gpio pads muxing file
5  *
6  * Copyright (C) 2009 ST Microelectronics
7  * Viresh Kumar<viresh.kumar@st.com>
8  *
9  * This file is licensed under the terms of the GNU General Public
10  * License version 2. This program is licensed "as is" without any
11  * warranty of any kind, whether express or implied.
12  */
13
14 #ifndef __PLAT_PADMUX_H
15 #define __PLAT_PADMUX_H
16
17 #include <linux/types.h>
18
19 /*
20  * struct pmx_reg: configuration structure for mode reg and mux reg
21  *
22  * offset: offset of mode reg
23  * mask: mask of mode reg
24  */
25 struct pmx_reg {
26         u32 offset;
27         u32 mask;
28 };
29
30 /*
31  * struct pmx_dev_mode: configuration structure every group of modes of a device
32  *
33  * ids: all modes for this configuration
34  * mask: mask for supported mode
35  */
36 struct pmx_dev_mode {
37         u32 ids;
38         u32 mask;
39 };
40
41 /*
42  * struct pmx_mode: mode definition structure
43  *
44  * name: mode name
45  * mask: mode mask
46  */
47 struct pmx_mode {
48         char *name;
49         u32 id;
50         u32 mask;
51 };
52
53 /*
54  * struct pmx_dev: device definition structure
55  *
56  * name: device name
57  * modes: device configuration array for different modes supported
58  * mode_count: size of modes array
59  * is_active: is peripheral active/enabled
60  * enb_on_reset: if 1, mask bits to be cleared in reg otherwise to be set in reg
61  */
62 struct pmx_dev {
63         char *name;
64         struct pmx_dev_mode *modes;
65         u8 mode_count;
66         bool is_active;
67         bool enb_on_reset;
68 };
69
70 /*
71  * struct pmx_driver: driver definition structure
72  *
73  * mode: mode to be set
74  * devs: array of pointer to pmx devices
75  * devs_count: ARRAY_SIZE of devs
76  * base: base address of soc config registers
77  * mode_reg: structure of mode config register
78  * mux_reg: structure of device mux config register
79  */
80 struct pmx_driver {
81         struct pmx_mode *mode;
82         struct pmx_dev **devs;
83         u8 devs_count;
84         u32 *base;
85         struct pmx_reg mode_reg;
86         struct pmx_reg mux_reg;
87 };
88
89 /* pmx functions */
90 int pmx_register(struct pmx_driver *driver);
91
92 #endif /* __PLAT_PADMUX_H */