diff options
Diffstat (limited to 'include/linux/mfd')
-rw-r--r-- | include/linux/mfd/88pm8607.h | 217 | ||||
-rw-r--r-- | include/linux/mfd/ab4500.h | 262 | ||||
-rw-r--r-- | include/linux/mfd/adp5520.h | 299 | ||||
-rw-r--r-- | include/linux/mfd/da903x.h | 4 | ||||
-rw-r--r-- | include/linux/mfd/ezx-pcap.h | 7 | ||||
-rw-r--r-- | include/linux/mfd/mc13783-private.h | 208 | ||||
-rw-r--r-- | include/linux/mfd/mc13783.h | 120 | ||||
-rw-r--r-- | include/linux/mfd/mcp.h | 69 | ||||
-rw-r--r-- | include/linux/mfd/pcf50633/core.h | 10 | ||||
-rw-r--r-- | include/linux/mfd/sh_mobile_sdhi.h | 8 | ||||
-rw-r--r-- | include/linux/mfd/twl4030-codec.h | 272 | ||||
-rw-r--r-- | include/linux/mfd/ucb1x00.h | 258 | ||||
-rw-r--r-- | include/linux/mfd/wm831x/core.h | 43 | ||||
-rw-r--r-- | include/linux/mfd/wm831x/pdata.h | 1 | ||||
-rw-r--r-- | include/linux/mfd/wm831x/regulator.h | 4 | ||||
-rw-r--r-- | include/linux/mfd/wm8350/core.h | 14 | ||||
-rw-r--r-- | include/linux/mfd/wm8350/gpio.h | 18 |
17 files changed, 1569 insertions, 245 deletions
diff --git a/include/linux/mfd/88pm8607.h b/include/linux/mfd/88pm8607.h new file mode 100644 index 000000000000..f41b428d2cec --- /dev/null +++ b/include/linux/mfd/88pm8607.h | |||
@@ -0,0 +1,217 @@ | |||
1 | /* | ||
2 | * Marvell 88PM8607 Interface | ||
3 | * | ||
4 | * Copyright (C) 2009 Marvell International Ltd. | ||
5 | * Haojian Zhuang <haojian.zhuang@marvell.com> | ||
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 version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | #ifndef __LINUX_MFD_88PM8607_H | ||
13 | #define __LINUX_MFD_88PM8607_H | ||
14 | |||
15 | enum { | ||
16 | PM8607_ID_BUCK1 = 0, | ||
17 | PM8607_ID_BUCK2, | ||
18 | PM8607_ID_BUCK3, | ||
19 | |||
20 | PM8607_ID_LDO1, | ||
21 | PM8607_ID_LDO2, | ||
22 | PM8607_ID_LDO3, | ||
23 | PM8607_ID_LDO4, | ||
24 | PM8607_ID_LDO5, | ||
25 | PM8607_ID_LDO6, | ||
26 | PM8607_ID_LDO7, | ||
27 | PM8607_ID_LDO8, | ||
28 | PM8607_ID_LDO9, | ||
29 | PM8607_ID_LDO10, | ||
30 | PM8607_ID_LDO12, | ||
31 | PM8607_ID_LDO14, | ||
32 | |||
33 | PM8607_ID_RG_MAX, | ||
34 | }; | ||
35 | |||
36 | #define CHIP_ID (0x40) | ||
37 | #define CHIP_ID_MASK (0xF8) | ||
38 | |||
39 | /* Interrupt Registers */ | ||
40 | #define PM8607_STATUS_1 (0x01) | ||
41 | #define PM8607_STATUS_2 (0x02) | ||
42 | #define PM8607_INT_STATUS1 (0x03) | ||
43 | #define PM8607_INT_STATUS2 (0x04) | ||
44 | #define PM8607_INT_STATUS3 (0x05) | ||
45 | #define PM8607_INT_MASK_1 (0x06) | ||
46 | #define PM8607_INT_MASK_2 (0x07) | ||
47 | #define PM8607_INT_MASK_3 (0x08) | ||
48 | |||
49 | /* Regulator Control Registers */ | ||
50 | #define PM8607_LDO1 (0x10) | ||
51 | #define PM8607_LDO2 (0x11) | ||
52 | #define PM8607_LDO3 (0x12) | ||
53 | #define PM8607_LDO4 (0x13) | ||
54 | #define PM8607_LDO5 (0x14) | ||
55 | #define PM8607_LDO6 (0x15) | ||
56 | #define PM8607_LDO7 (0x16) | ||
57 | #define PM8607_LDO8 (0x17) | ||
58 | #define PM8607_LDO9 (0x18) | ||
59 | #define PM8607_LDO10 (0x19) | ||
60 | #define PM8607_LDO12 (0x1A) | ||
61 | #define PM8607_LDO14 (0x1B) | ||
62 | #define PM8607_SLEEP_MODE1 (0x1C) | ||
63 | #define PM8607_SLEEP_MODE2 (0x1D) | ||
64 | #define PM8607_SLEEP_MODE3 (0x1E) | ||
65 | #define PM8607_SLEEP_MODE4 (0x1F) | ||
66 | #define PM8607_GO (0x20) | ||
67 | #define PM8607_SLEEP_BUCK1 (0x21) | ||
68 | #define PM8607_SLEEP_BUCK2 (0x22) | ||
69 | #define PM8607_SLEEP_BUCK3 (0x23) | ||
70 | #define PM8607_BUCK1 (0x24) | ||
71 | #define PM8607_BUCK2 (0x25) | ||
72 | #define PM8607_BUCK3 (0x26) | ||
73 | #define PM8607_BUCK_CONTROLS (0x27) | ||
74 | #define PM8607_SUPPLIES_EN11 (0x2B) | ||
75 | #define PM8607_SUPPLIES_EN12 (0x2C) | ||
76 | #define PM8607_GROUP1 (0x2D) | ||
77 | #define PM8607_GROUP2 (0x2E) | ||
78 | #define PM8607_GROUP3 (0x2F) | ||
79 | #define PM8607_GROUP4 (0x30) | ||
80 | #define PM8607_GROUP5 (0x31) | ||
81 | #define PM8607_GROUP6 (0x32) | ||
82 | #define PM8607_SUPPLIES_EN21 (0x33) | ||
83 | #define PM8607_SUPPLIES_EN22 (0x34) | ||
84 | |||
85 | /* RTC Control Registers */ | ||
86 | #define PM8607_RTC1 (0xA0) | ||
87 | #define PM8607_RTC_COUNTER1 (0xA1) | ||
88 | #define PM8607_RTC_COUNTER2 (0xA2) | ||
89 | #define PM8607_RTC_COUNTER3 (0xA3) | ||
90 | #define PM8607_RTC_COUNTER4 (0xA4) | ||
91 | #define PM8607_RTC_EXPIRE1 (0xA5) | ||
92 | #define PM8607_RTC_EXPIRE2 (0xA6) | ||
93 | #define PM8607_RTC_EXPIRE3 (0xA7) | ||
94 | #define PM8607_RTC_EXPIRE4 (0xA8) | ||
95 | #define PM8607_RTC_TRIM1 (0xA9) | ||
96 | #define PM8607_RTC_TRIM2 (0xAA) | ||
97 | #define PM8607_RTC_TRIM3 (0xAB) | ||
98 | #define PM8607_RTC_TRIM4 (0xAC) | ||
99 | #define PM8607_RTC_MISC1 (0xAD) | ||
100 | #define PM8607_RTC_MISC2 (0xAE) | ||
101 | #define PM8607_RTC_MISC3 (0xAF) | ||
102 | |||
103 | /* Misc Registers */ | ||
104 | #define PM8607_CHIP_ID (0x00) | ||
105 | #define PM8607_LDO1 (0x10) | ||
106 | #define PM8607_DVC3 (0x26) | ||
107 | #define PM8607_MISC1 (0x40) | ||
108 | |||
109 | /* bit definitions for PM8607 events */ | ||
110 | #define PM8607_EVENT_ONKEY (1 << 0) | ||
111 | #define PM8607_EVENT_EXTON (1 << 1) | ||
112 | #define PM8607_EVENT_CHG (1 << 2) | ||
113 | #define PM8607_EVENT_BAT (1 << 3) | ||
114 | #define PM8607_EVENT_RTC (1 << 4) | ||
115 | #define PM8607_EVENT_CC (1 << 5) | ||
116 | #define PM8607_EVENT_VBAT (1 << 8) | ||
117 | #define PM8607_EVENT_VCHG (1 << 9) | ||
118 | #define PM8607_EVENT_VSYS (1 << 10) | ||
119 | #define PM8607_EVENT_TINT (1 << 11) | ||
120 | #define PM8607_EVENT_GPADC0 (1 << 12) | ||
121 | #define PM8607_EVENT_GPADC1 (1 << 13) | ||
122 | #define PM8607_EVENT_GPADC2 (1 << 14) | ||
123 | #define PM8607_EVENT_GPADC3 (1 << 15) | ||
124 | #define PM8607_EVENT_AUDIO_SHORT (1 << 16) | ||
125 | #define PM8607_EVENT_PEN (1 << 17) | ||
126 | #define PM8607_EVENT_HEADSET (1 << 18) | ||
127 | #define PM8607_EVENT_HOOK (1 << 19) | ||
128 | #define PM8607_EVENT_MICIN (1 << 20) | ||
129 | #define PM8607_EVENT_CHG_TIMEOUT (1 << 21) | ||
130 | #define PM8607_EVENT_CHG_DONE (1 << 22) | ||
131 | #define PM8607_EVENT_CHG_FAULT (1 << 23) | ||
132 | |||
133 | /* bit definitions of Status Query Interface */ | ||
134 | #define PM8607_STATUS_CC (1 << 3) | ||
135 | #define PM8607_STATUS_PEN (1 << 4) | ||
136 | #define PM8607_STATUS_HEADSET (1 << 5) | ||
137 | #define PM8607_STATUS_HOOK (1 << 6) | ||
138 | #define PM8607_STATUS_MICIN (1 << 7) | ||
139 | #define PM8607_STATUS_ONKEY (1 << 8) | ||
140 | #define PM8607_STATUS_EXTON (1 << 9) | ||
141 | #define PM8607_STATUS_CHG (1 << 10) | ||
142 | #define PM8607_STATUS_BAT (1 << 11) | ||
143 | #define PM8607_STATUS_VBUS (1 << 12) | ||
144 | #define PM8607_STATUS_OV (1 << 13) | ||
145 | |||
146 | /* bit definitions of BUCK3 */ | ||
147 | #define PM8607_BUCK3_DOUBLE (1 << 6) | ||
148 | |||
149 | /* bit definitions of Misc1 */ | ||
150 | #define PM8607_MISC1_PI2C (1 << 0) | ||
151 | |||
152 | /* Interrupt Number in 88PM8607 */ | ||
153 | enum { | ||
154 | PM8607_IRQ_ONKEY = 0, | ||
155 | PM8607_IRQ_EXTON, | ||
156 | PM8607_IRQ_CHG, | ||
157 | PM8607_IRQ_BAT, | ||
158 | PM8607_IRQ_RTC, | ||
159 | PM8607_IRQ_VBAT = 8, | ||
160 | PM8607_IRQ_VCHG, | ||
161 | PM8607_IRQ_VSYS, | ||
162 | PM8607_IRQ_TINT, | ||
163 | PM8607_IRQ_GPADC0, | ||
164 | PM8607_IRQ_GPADC1, | ||
165 | PM8607_IRQ_GPADC2, | ||
166 | PM8607_IRQ_GPADC3, | ||
167 | PM8607_IRQ_AUDIO_SHORT = 16, | ||
168 | PM8607_IRQ_PEN, | ||
169 | PM8607_IRQ_HEADSET, | ||
170 | PM8607_IRQ_HOOK, | ||
171 | PM8607_IRQ_MICIN, | ||
172 | PM8607_IRQ_CHG_FAIL, | ||
173 | PM8607_IRQ_CHG_DONE, | ||
174 | PM8607_IRQ_CHG_FAULT, | ||
175 | }; | ||
176 | |||
177 | enum { | ||
178 | PM8607_CHIP_A0 = 0x40, | ||
179 | PM8607_CHIP_A1 = 0x41, | ||
180 | PM8607_CHIP_B0 = 0x48, | ||
181 | }; | ||
182 | |||
183 | |||
184 | struct pm8607_chip { | ||
185 | struct device *dev; | ||
186 | struct mutex io_lock; | ||
187 | struct i2c_client *client; | ||
188 | |||
189 | int (*read)(struct pm8607_chip *chip, int reg, int bytes, void *dest); | ||
190 | int (*write)(struct pm8607_chip *chip, int reg, int bytes, void *src); | ||
191 | |||
192 | int buck3_double; /* DVC ramp slope double */ | ||
193 | unsigned char chip_id; | ||
194 | |||
195 | }; | ||
196 | |||
197 | #define PM8607_MAX_REGULATOR 15 /* 3 Bucks, 12 LDOs */ | ||
198 | |||
199 | enum { | ||
200 | GI2C_PORT = 0, | ||
201 | PI2C_PORT, | ||
202 | }; | ||
203 | |||
204 | struct pm8607_platform_data { | ||
205 | int i2c_port; /* Controlled by GI2C or PI2C */ | ||
206 | struct regulator_init_data *regulator[PM8607_MAX_REGULATOR]; | ||
207 | }; | ||
208 | |||
209 | extern int pm8607_reg_read(struct pm8607_chip *, int); | ||
210 | extern int pm8607_reg_write(struct pm8607_chip *, int, unsigned char); | ||
211 | extern int pm8607_bulk_read(struct pm8607_chip *, int, int, | ||
212 | unsigned char *); | ||
213 | extern int pm8607_bulk_write(struct pm8607_chip *, int, int, | ||
214 | unsigned char *); | ||
215 | extern int pm8607_set_bits(struct pm8607_chip *, int, unsigned char, | ||
216 | unsigned char); | ||
217 | #endif /* __LINUX_MFD_88PM8607_H */ | ||
diff --git a/include/linux/mfd/ab4500.h b/include/linux/mfd/ab4500.h new file mode 100644 index 000000000000..a42a7033ae53 --- /dev/null +++ b/include/linux/mfd/ab4500.h | |||
@@ -0,0 +1,262 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2009 ST-Ericsson | ||
3 | * | ||
4 | * Author: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com> | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2, as | ||
8 | * published by the Free Software Foundation. | ||
9 | * | ||
10 | * AB4500 device core funtions, for client access | ||
11 | */ | ||
12 | #ifndef MFD_AB4500_H | ||
13 | #define MFD_AB4500_H | ||
14 | |||
15 | #include <linux/device.h> | ||
16 | |||
17 | /* | ||
18 | * AB4500 bank addresses | ||
19 | */ | ||
20 | #define AB4500_SYS_CTRL1_BLOCK 0x1 | ||
21 | #define AB4500_SYS_CTRL2_BLOCK 0x2 | ||
22 | #define AB4500_REGU_CTRL1 0x3 | ||
23 | #define AB4500_REGU_CTRL2 0x4 | ||
24 | #define AB4500_USB 0x5 | ||
25 | #define AB4500_TVOUT 0x6 | ||
26 | #define AB4500_DBI 0x7 | ||
27 | #define AB4500_ECI_AV_ACC 0x8 | ||
28 | #define AB4500_RESERVED 0x9 | ||
29 | #define AB4500_GPADC 0xA | ||
30 | #define AB4500_CHARGER 0xB | ||
31 | #define AB4500_GAS_GAUGE 0xC | ||
32 | #define AB4500_AUDIO 0xD | ||
33 | #define AB4500_INTERRUPT 0xE | ||
34 | #define AB4500_RTC 0xF | ||
35 | #define AB4500_MISC 0x10 | ||
36 | #define AB4500_DEBUG 0x12 | ||
37 | #define AB4500_PROD_TEST 0x13 | ||
38 | #define AB4500_OTP_EMUL 0x15 | ||
39 | |||
40 | /* | ||
41 | * System control 1 register offsets. | ||
42 | * Bank = 0x01 | ||
43 | */ | ||
44 | #define AB4500_TURNON_STAT_REG 0x0100 | ||
45 | #define AB4500_RESET_STAT_REG 0x0101 | ||
46 | #define AB4500_PONKEY1_PRESS_STAT_REG 0x0102 | ||
47 | |||
48 | #define AB4500_FSM_STAT1_REG 0x0140 | ||
49 | #define AB4500_FSM_STAT2_REG 0x0141 | ||
50 | #define AB4500_SYSCLK_REQ_STAT_REG 0x0142 | ||
51 | #define AB4500_USB_STAT1_REG 0x0143 | ||
52 | #define AB4500_USB_STAT2_REG 0x0144 | ||
53 | #define AB4500_STATUS_SPARE1_REG 0x0145 | ||
54 | #define AB4500_STATUS_SPARE2_REG 0x0146 | ||
55 | |||
56 | #define AB4500_CTRL1_REG 0x0180 | ||
57 | #define AB4500_CTRL2_REG 0x0181 | ||
58 | |||
59 | /* | ||
60 | * System control 2 register offsets. | ||
61 | * bank = 0x02 | ||
62 | */ | ||
63 | #define AB4500_CTRL3_REG 0x0200 | ||
64 | #define AB4500_MAIN_WDOG_CTRL_REG 0x0201 | ||
65 | #define AB4500_MAIN_WDOG_TIMER_REG 0x0202 | ||
66 | #define AB4500_LOW_BAT_REG 0x0203 | ||
67 | #define AB4500_BATT_OK_REG 0x0204 | ||
68 | #define AB4500_SYSCLK_TIMER_REG 0x0205 | ||
69 | #define AB4500_SMPSCLK_CTRL_REG 0x0206 | ||
70 | #define AB4500_SMPSCLK_SEL1_REG 0x0207 | ||
71 | #define AB4500_SMPSCLK_SEL2_REG 0x0208 | ||
72 | #define AB4500_SMPSCLK_SEL3_REG 0x0209 | ||
73 | #define AB4500_SYSULPCLK_CONF_REG 0x020A | ||
74 | #define AB4500_SYSULPCLK_CTRL1_REG 0x020B | ||
75 | #define AB4500_SYSCLK_CTRL_REG 0x020C | ||
76 | #define AB4500_SYSCLK_REQ1_VALID_REG 0x020D | ||
77 | #define AB4500_SYSCLK_REQ_VALID_REG 0x020E | ||
78 | #define AB4500_SYSCTRL_SPARE_REG 0x020F | ||
79 | #define AB4500_PAD_CONF_REG 0x0210 | ||
80 | |||
81 | /* | ||
82 | * Regu control1 register offsets | ||
83 | * Bank = 0x03 | ||
84 | */ | ||
85 | #define AB4500_REGU_SERIAL_CTRL1_REG 0x0300 | ||
86 | #define AB4500_REGU_SERIAL_CTRL2_REG 0x0301 | ||
87 | #define AB4500_REGU_SERIAL_CTRL3_REG 0x0302 | ||
88 | #define AB4500_REGU_REQ_CTRL1_REG 0x0303 | ||
89 | #define AB4500_REGU_REQ_CTRL2_REG 0x0304 | ||
90 | #define AB4500_REGU_REQ_CTRL3_REG 0x0305 | ||
91 | #define AB4500_REGU_REQ_CTRL4_REG 0x0306 | ||
92 | #define AB4500_REGU_MISC1_REG 0x0380 | ||
93 | #define AB4500_REGU_OTGSUPPLY_CTRL_REG 0x0381 | ||
94 | #define AB4500_REGU_VUSB_CTRL_REG 0x0382 | ||
95 | #define AB4500_REGU_VAUDIO_SUPPLY_REG 0x0383 | ||
96 | #define AB4500_REGU_CTRL1_SPARE_REG 0x0384 | ||
97 | |||
98 | /* | ||
99 | * Regu control2 Vmod register offsets | ||
100 | */ | ||
101 | #define AB4500_REGU_VMOD_REGU_REG 0x0440 | ||
102 | #define AB4500_REGU_VMOD_SEL1_REG 0x0441 | ||
103 | #define AB4500_REGU_VMOD_SEL2_REG 0x0442 | ||
104 | #define AB4500_REGU_CTRL_DISCH_REG 0x0443 | ||
105 | #define AB4500_REGU_CTRL_DISCH2_REG 0x0444 | ||
106 | |||
107 | /* | ||
108 | * USB/ULPI register offsets | ||
109 | * Bank : 0x5 | ||
110 | */ | ||
111 | #define AB4500_USB_LINE_STAT_REG 0x0580 | ||
112 | #define AB4500_USB_LINE_CTRL1_REG 0x0581 | ||
113 | #define AB4500_USB_LINE_CTRL2_REG 0x0582 | ||
114 | #define AB4500_USB_LINE_CTRL3_REG 0x0583 | ||
115 | #define AB4500_USB_LINE_CTRL4_REG 0x0584 | ||
116 | #define AB4500_USB_LINE_CTRL5_REG 0x0585 | ||
117 | #define AB4500_USB_OTG_CTRL_REG 0x0587 | ||
118 | #define AB4500_USB_OTG_STAT_REG 0x0588 | ||
119 | #define AB4500_USB_OTG_STAT_REG 0x0588 | ||
120 | #define AB4500_USB_CTRL_SPARE_REG 0x0589 | ||
121 | #define AB4500_USB_PHY_CTRL_REG 0x058A | ||
122 | |||
123 | /* | ||
124 | * TVOUT / CTRL register offsets | ||
125 | * Bank : 0x06 | ||
126 | */ | ||
127 | #define AB4500_TVOUT_CTRL_REG 0x0680 | ||
128 | |||
129 | /* | ||
130 | * DBI register offsets | ||
131 | * Bank : 0x07 | ||
132 | */ | ||
133 | #define AB4500_DBI_REG1_REG 0x0700 | ||
134 | #define AB4500_DBI_REG2_REG 0x0701 | ||
135 | |||
136 | /* | ||
137 | * ECI regsiter offsets | ||
138 | * Bank : 0x08 | ||
139 | */ | ||
140 | #define AB4500_ECI_CTRL_REG 0x0800 | ||
141 | #define AB4500_ECI_HOOKLEVEL_REG 0x0801 | ||
142 | #define AB4500_ECI_DATAOUT_REG 0x0802 | ||
143 | #define AB4500_ECI_DATAIN_REG 0x0803 | ||
144 | |||
145 | /* | ||
146 | * AV Connector register offsets | ||
147 | * Bank : 0x08 | ||
148 | */ | ||
149 | #define AB4500_AV_CONN_REG 0x0840 | ||
150 | |||
151 | /* | ||
152 | * Accessory detection register offsets | ||
153 | * Bank : 0x08 | ||
154 | */ | ||
155 | #define AB4500_ACC_DET_DB1_REG 0x0880 | ||
156 | #define AB4500_ACC_DET_DB2_REG 0x0881 | ||
157 | |||
158 | /* | ||
159 | * GPADC register offsets | ||
160 | * Bank : 0x0A | ||
161 | */ | ||
162 | #define AB4500_GPADC_CTRL1_REG 0x0A00 | ||
163 | #define AB4500_GPADC_CTRL2_REG 0x0A01 | ||
164 | #define AB4500_GPADC_CTRL3_REG 0x0A02 | ||
165 | #define AB4500_GPADC_AUTO_TIMER_REG 0x0A03 | ||
166 | #define AB4500_GPADC_STAT_REG 0x0A04 | ||
167 | #define AB4500_GPADC_MANDATAL_REG 0x0A05 | ||
168 | #define AB4500_GPADC_MANDATAH_REG 0x0A06 | ||
169 | #define AB4500_GPADC_AUTODATAL_REG 0x0A07 | ||
170 | #define AB4500_GPADC_AUTODATAH_REG 0x0A08 | ||
171 | #define AB4500_GPADC_MUX_CTRL_REG 0x0A09 | ||
172 | |||
173 | /* | ||
174 | * Charger / status register offfsets | ||
175 | * Bank : 0x0B | ||
176 | */ | ||
177 | #define AB4500_CH_STATUS1_REG 0x0B00 | ||
178 | #define AB4500_CH_STATUS2_REG 0x0B01 | ||
179 | #define AB4500_CH_USBCH_STAT1_REG 0x0B02 | ||
180 | #define AB4500_CH_USBCH_STAT2_REG 0x0B03 | ||
181 | #define AB4500_CH_FSM_STAT_REG 0x0B04 | ||
182 | #define AB4500_CH_STAT_REG 0x0B05 | ||
183 | |||
184 | /* | ||
185 | * Charger / control register offfsets | ||
186 | * Bank : 0x0B | ||
187 | */ | ||
188 | #define AB4500_CH_VOLT_LVL_REG 0x0B40 | ||
189 | |||
190 | /* | ||
191 | * Charger / main control register offfsets | ||
192 | * Bank : 0x0B | ||
193 | */ | ||
194 | #define AB4500_MCH_CTRL1 0x0B80 | ||
195 | #define AB4500_MCH_CTRL2 0x0B81 | ||
196 | #define AB4500_MCH_IPT_CURLVL_REG 0x0B82 | ||
197 | #define AB4500_CH_WD_REG 0x0B83 | ||
198 | |||
199 | /* | ||
200 | * Charger / USB control register offsets | ||
201 | * Bank : 0x0B | ||
202 | */ | ||
203 | #define AB4500_USBCH_CTRL1_REG 0x0BC0 | ||
204 | #define AB4500_USBCH_CTRL2_REG 0x0BC1 | ||
205 | #define AB4500_USBCH_IPT_CRNTLVL_REG 0x0BC2 | ||
206 | |||
207 | /* | ||
208 | * RTC bank register offsets | ||
209 | * Bank : 0xF | ||
210 | */ | ||
211 | #define AB4500_RTC_SOFF_STAT_REG 0x0F00 | ||
212 | #define AB4500_RTC_CC_CONF_REG 0x0F01 | ||
213 | #define AB4500_RTC_READ_REQ_REG 0x0F02 | ||
214 | #define AB4500_RTC_WATCH_TSECMID_REG 0x0F03 | ||
215 | #define AB4500_RTC_WATCH_TSECHI_REG 0x0F04 | ||
216 | #define AB4500_RTC_WATCH_TMIN_LOW_REG 0x0F05 | ||
217 | #define AB4500_RTC_WATCH_TMIN_MID_REG 0x0F06 | ||
218 | #define AB4500_RTC_WATCH_TMIN_HI_REG 0x0F07 | ||
219 | #define AB4500_RTC_ALRM_MIN_LOW_REG 0x0F08 | ||
220 | #define AB4500_RTC_ALRM_MIN_MID_REG 0x0F09 | ||
221 | #define AB4500_RTC_ALRM_MIN_HI_REG 0x0F0A | ||
222 | #define AB4500_RTC_STAT_REG 0x0F0B | ||
223 | #define AB4500_RTC_BKUP_CHG_REG 0x0F0C | ||
224 | #define AB4500_RTC_FORCE_BKUP_REG 0x0F0D | ||
225 | #define AB4500_RTC_CALIB_REG 0x0F0E | ||
226 | #define AB4500_RTC_SWITCH_STAT_REG 0x0F0F | ||
227 | |||
228 | /* | ||
229 | * PWM Out generators | ||
230 | * Bank: 0x10 | ||
231 | */ | ||
232 | #define AB4500_PWM_OUT_CTRL1_REG 0x1060 | ||
233 | #define AB4500_PWM_OUT_CTRL2_REG 0x1061 | ||
234 | #define AB4500_PWM_OUT_CTRL3_REG 0x1062 | ||
235 | #define AB4500_PWM_OUT_CTRL4_REG 0x1063 | ||
236 | #define AB4500_PWM_OUT_CTRL5_REG 0x1064 | ||
237 | #define AB4500_PWM_OUT_CTRL6_REG 0x1065 | ||
238 | #define AB4500_PWM_OUT_CTRL7_REG 0x1066 | ||
239 | |||
240 | #define AB4500_I2C_PAD_CTRL_REG 0x1067 | ||
241 | #define AB4500_REV_REG 0x1080 | ||
242 | |||
243 | /** | ||
244 | * struct ab4500 | ||
245 | * @spi: spi device structure | ||
246 | * @tx_buf: transmit buffer | ||
247 | * @rx_buf: receive buffer | ||
248 | * @lock: sync primitive | ||
249 | */ | ||
250 | struct ab4500 { | ||
251 | struct spi_device *spi; | ||
252 | unsigned long tx_buf[4]; | ||
253 | unsigned long rx_buf[4]; | ||
254 | struct mutex lock; | ||
255 | }; | ||
256 | |||
257 | int ab4500_write(struct ab4500 *ab4500, unsigned char block, | ||
258 | unsigned long addr, unsigned char data); | ||
259 | int ab4500_read(struct ab4500 *ab4500, unsigned char block, | ||
260 | unsigned long addr); | ||
261 | |||
262 | #endif /* MFD_AB4500_H */ | ||
diff --git a/include/linux/mfd/adp5520.h b/include/linux/mfd/adp5520.h new file mode 100644 index 000000000000..ac37558a4673 --- /dev/null +++ b/include/linux/mfd/adp5520.h | |||
@@ -0,0 +1,299 @@ | |||
1 | /* | ||
2 | * Definitions and platform data for Analog Devices | ||
3 | * ADP5520/ADP5501 MFD PMICs (Backlight, LED, GPIO and Keys) | ||
4 | * | ||
5 | * Copyright 2009 Analog Devices Inc. | ||
6 | * | ||
7 | * Licensed under the GPL-2 or later. | ||
8 | */ | ||
9 | |||
10 | |||
11 | #ifndef __LINUX_MFD_ADP5520_H | ||
12 | #define __LINUX_MFD_ADP5520_H | ||
13 | |||
14 | #define ID_ADP5520 5520 | ||
15 | #define ID_ADP5501 5501 | ||
16 | |||
17 | /* | ||
18 | * ADP5520/ADP5501 Register Map | ||
19 | */ | ||
20 | |||
21 | #define ADP5520_MODE_STATUS 0x00 | ||
22 | #define ADP5520_INTERRUPT_ENABLE 0x01 | ||
23 | #define ADP5520_BL_CONTROL 0x02 | ||
24 | #define ADP5520_BL_TIME 0x03 | ||
25 | #define ADP5520_BL_FADE 0x04 | ||
26 | #define ADP5520_DAYLIGHT_MAX 0x05 | ||
27 | #define ADP5520_DAYLIGHT_DIM 0x06 | ||
28 | #define ADP5520_OFFICE_MAX 0x07 | ||
29 | #define ADP5520_OFFICE_DIM 0x08 | ||
30 | #define ADP5520_DARK_MAX 0x09 | ||
31 | #define ADP5520_DARK_DIM 0x0A | ||
32 | #define ADP5520_BL_VALUE 0x0B | ||
33 | #define ADP5520_ALS_CMPR_CFG 0x0C | ||
34 | #define ADP5520_L2_TRIP 0x0D | ||
35 | #define ADP5520_L2_HYS 0x0E | ||
36 | #define ADP5520_L3_TRIP 0x0F | ||
37 | #define ADP5520_L3_HYS 0x10 | ||
38 | #define ADP5520_LED_CONTROL 0x11 | ||
39 | #define ADP5520_LED_TIME 0x12 | ||
40 | #define ADP5520_LED_FADE 0x13 | ||
41 | #define ADP5520_LED1_CURRENT 0x14 | ||
42 | #define ADP5520_LED2_CURRENT 0x15 | ||
43 | #define ADP5520_LED3_CURRENT 0x16 | ||
44 | |||
45 | /* | ||
46 | * ADP5520 Register Map | ||
47 | */ | ||
48 | |||
49 | #define ADP5520_GPIO_CFG_1 0x17 | ||
50 | #define ADP5520_GPIO_CFG_2 0x18 | ||
51 | #define ADP5520_GPIO_IN 0x19 | ||
52 | #define ADP5520_GPIO_OUT 0x1A | ||
53 | #define ADP5520_GPIO_INT_EN 0x1B | ||
54 | #define ADP5520_GPIO_INT_STAT 0x1C | ||
55 | #define ADP5520_GPIO_INT_LVL 0x1D | ||
56 | #define ADP5520_GPIO_DEBOUNCE 0x1E | ||
57 | #define ADP5520_GPIO_PULLUP 0x1F | ||
58 | #define ADP5520_KP_INT_STAT_1 0x20 | ||
59 | #define ADP5520_KP_INT_STAT_2 0x21 | ||
60 | #define ADP5520_KR_INT_STAT_1 0x22 | ||
61 | #define ADP5520_KR_INT_STAT_2 0x23 | ||
62 | #define ADP5520_KEY_STAT_1 0x24 | ||
63 | #define ADP5520_KEY_STAT_2 0x25 | ||
64 | |||
65 | /* | ||
66 | * MODE_STATUS bits | ||
67 | */ | ||
68 | |||
69 | #define ADP5520_nSTNBY (1 << 7) | ||
70 | #define ADP5520_BL_EN (1 << 6) | ||
71 | #define ADP5520_DIM_EN (1 << 5) | ||
72 | #define ADP5520_OVP_INT (1 << 4) | ||
73 | #define ADP5520_CMPR_INT (1 << 3) | ||
74 | #define ADP5520_GPI_INT (1 << 2) | ||
75 | #define ADP5520_KR_INT (1 << 1) | ||
76 | #define ADP5520_KP_INT (1 << 0) | ||
77 | |||
78 | /* | ||
79 | * INTERRUPT_ENABLE bits | ||
80 | */ | ||
81 | |||
82 | #define ADP5520_AUTO_LD_EN (1 << 4) | ||
83 | #define ADP5520_CMPR_IEN (1 << 3) | ||
84 | #define ADP5520_OVP_IEN (1 << 2) | ||
85 | #define ADP5520_KR_IEN (1 << 1) | ||
86 | #define ADP5520_KP_IEN (1 << 0) | ||
87 | |||
88 | /* | ||
89 | * BL_CONTROL bits | ||
90 | */ | ||
91 | |||
92 | #define ADP5520_BL_LVL ((x) << 5) | ||
93 | #define ADP5520_BL_LAW ((x) << 4) | ||
94 | #define ADP5520_BL_AUTO_ADJ (1 << 3) | ||
95 | #define ADP5520_OVP_EN (1 << 2) | ||
96 | #define ADP5520_FOVR (1 << 1) | ||
97 | #define ADP5520_KP_BL_EN (1 << 0) | ||
98 | |||
99 | /* | ||
100 | * ALS_CMPR_CFG bits | ||
101 | */ | ||
102 | |||
103 | #define ADP5520_L3_OUT (1 << 3) | ||
104 | #define ADP5520_L2_OUT (1 << 2) | ||
105 | #define ADP5520_L3_EN (1 << 1) | ||
106 | |||
107 | #define ADP5020_MAX_BRIGHTNESS 0x7F | ||
108 | |||
109 | #define FADE_VAL(in, out) ((0xF & (in)) | ((0xF & (out)) << 4)) | ||
110 | #define BL_CTRL_VAL(law, auto) (((1 & (auto)) << 3) | ((0x3 & (law)) << 4)) | ||
111 | #define ALS_CMPR_CFG_VAL(filt, l3_en) (((0x7 & filt) << 5) | l3_en) | ||
112 | |||
113 | /* | ||
114 | * LEDs subdevice bits and masks | ||
115 | */ | ||
116 | |||
117 | #define ADP5520_01_MAXLEDS 3 | ||
118 | |||
119 | #define ADP5520_FLAG_LED_MASK 0x3 | ||
120 | #define ADP5520_FLAG_OFFT_SHIFT 8 | ||
121 | #define ADP5520_FLAG_OFFT_MASK 0x3 | ||
122 | |||
123 | #define ADP5520_R3_MODE (1 << 5) | ||
124 | #define ADP5520_C3_MODE (1 << 4) | ||
125 | #define ADP5520_LED_LAW (1 << 3) | ||
126 | #define ADP5520_LED3_EN (1 << 2) | ||
127 | #define ADP5520_LED2_EN (1 << 1) | ||
128 | #define ADP5520_LED1_EN (1 << 0) | ||
129 | |||
130 | /* | ||
131 | * GPIO subdevice bits and masks | ||
132 | */ | ||
133 | |||
134 | #define ADP5520_MAXGPIOS 8 | ||
135 | |||
136 | #define ADP5520_GPIO_C3 (1 << 7) /* LED2 or GPIO7 aka C3 */ | ||
137 | #define ADP5520_GPIO_C2 (1 << 6) | ||
138 | #define ADP5520_GPIO_C1 (1 << 5) | ||
139 | #define ADP5520_GPIO_C0 (1 << 4) | ||
140 | #define ADP5520_GPIO_R3 (1 << 3) /* LED3 or GPIO3 aka R3 */ | ||
141 | #define ADP5520_GPIO_R2 (1 << 2) | ||
142 | #define ADP5520_GPIO_R1 (1 << 1) | ||
143 | #define ADP5520_GPIO_R0 (1 << 0) | ||
144 | |||
145 | struct adp5520_gpio_platform_data { | ||
146 | unsigned gpio_start; | ||
147 | u8 gpio_en_mask; | ||
148 | u8 gpio_pullup_mask; | ||
149 | }; | ||
150 | |||
151 | /* | ||
152 | * Keypad subdevice bits and masks | ||
153 | */ | ||
154 | |||
155 | #define ADP5520_MAXKEYS 16 | ||
156 | |||
157 | #define ADP5520_COL_C3 (1 << 7) /* LED2 or GPIO7 aka C3 */ | ||
158 | #define ADP5520_COL_C2 (1 << 6) | ||
159 | #define ADP5520_COL_C1 (1 << 5) | ||
160 | #define ADP5520_COL_C0 (1 << 4) | ||
161 | #define ADP5520_ROW_R3 (1 << 3) /* LED3 or GPIO3 aka R3 */ | ||
162 | #define ADP5520_ROW_R2 (1 << 2) | ||
163 | #define ADP5520_ROW_R1 (1 << 1) | ||
164 | #define ADP5520_ROW_R0 (1 << 0) | ||
165 | |||
166 | #define ADP5520_KEY(row, col) (col + row * 4) | ||
167 | #define ADP5520_KEYMAPSIZE ADP5520_MAXKEYS | ||
168 | |||
169 | struct adp5520_keys_platform_data { | ||
170 | int rows_en_mask; /* Number of rows */ | ||
171 | int cols_en_mask; /* Number of columns */ | ||
172 | const unsigned short *keymap; /* Pointer to keymap */ | ||
173 | unsigned short keymapsize; /* Keymap size */ | ||
174 | unsigned repeat:1; /* Enable key repeat */ | ||
175 | }; | ||
176 | |||
177 | |||
178 | /* | ||
179 | * LEDs subdevice platform data | ||
180 | */ | ||
181 | |||
182 | #define FLAG_ID_ADP5520_LED1_ADP5501_LED0 1 /* ADP5520 PIN ILED */ | ||
183 | #define FLAG_ID_ADP5520_LED2_ADP5501_LED1 2 /* ADP5520 PIN C3 */ | ||
184 | #define FLAG_ID_ADP5520_LED3_ADP5501_LED2 3 /* ADP5520 PIN R3 */ | ||
185 | |||
186 | #define ADP5520_LED_DIS_BLINK (0 << ADP5520_FLAG_OFFT_SHIFT) | ||
187 | #define ADP5520_LED_OFFT_600ms (1 << ADP5520_FLAG_OFFT_SHIFT) | ||
188 | #define ADP5520_LED_OFFT_800ms (2 << ADP5520_FLAG_OFFT_SHIFT) | ||
189 | #define ADP5520_LED_OFFT_1200ms (3 << ADP5520_FLAG_OFFT_SHIFT) | ||
190 | |||
191 | #define ADP5520_LED_ONT_200ms 0 | ||
192 | #define ADP5520_LED_ONT_600ms 1 | ||
193 | #define ADP5520_LED_ONT_800ms 2 | ||
194 | #define ADP5520_LED_ONT_1200ms 3 | ||
195 | |||
196 | struct adp5520_leds_platform_data { | ||
197 | int num_leds; | ||
198 | struct led_info *leds; | ||
199 | u8 fade_in; /* Backlight Fade-In Timer */ | ||
200 | u8 fade_out; /* Backlight Fade-Out Timer */ | ||
201 | u8 led_on_time; | ||
202 | }; | ||
203 | |||
204 | /* | ||
205 | * Backlight subdevice platform data | ||
206 | */ | ||
207 | |||
208 | #define ADP5520_FADE_T_DIS 0 /* Fade Timer Disabled */ | ||
209 | #define ADP5520_FADE_T_300ms 1 /* 0.3 Sec */ | ||
210 | #define ADP5520_FADE_T_600ms 2 | ||
211 | #define ADP5520_FADE_T_900ms 3 | ||
212 | #define ADP5520_FADE_T_1200ms 4 | ||
213 | #define ADP5520_FADE_T_1500ms 5 | ||
214 | #define ADP5520_FADE_T_1800ms 6 | ||
215 | #define ADP5520_FADE_T_2100ms 7 | ||
216 | #define ADP5520_FADE_T_2400ms 8 | ||
217 | #define ADP5520_FADE_T_2700ms 9 | ||
218 | #define ADP5520_FADE_T_3000ms 10 | ||
219 | #define ADP5520_FADE_T_3500ms 11 | ||
220 | #define ADP5520_FADE_T_4000ms 12 | ||
221 | #define ADP5520_FADE_T_4500ms 13 | ||
222 | #define ADP5520_FADE_T_5000ms 14 | ||
223 | #define ADP5520_FADE_T_5500ms 15 /* 5.5 Sec */ | ||
224 | |||
225 | #define ADP5520_BL_LAW_LINEAR 0 | ||
226 | #define ADP5520_BL_LAW_SQUARE 1 | ||
227 | #define ADP5520_BL_LAW_CUBIC1 2 | ||
228 | #define ADP5520_BL_LAW_CUBIC2 3 | ||
229 | |||
230 | #define ADP5520_BL_AMBL_FILT_80ms 0 /* Light sensor filter time */ | ||
231 | #define ADP5520_BL_AMBL_FILT_160ms 1 | ||
232 | #define ADP5520_BL_AMBL_FILT_320ms 2 | ||
233 | #define ADP5520_BL_AMBL_FILT_640ms 3 | ||
234 | #define ADP5520_BL_AMBL_FILT_1280ms 4 | ||
235 | #define ADP5520_BL_AMBL_FILT_2560ms 5 | ||
236 | #define ADP5520_BL_AMBL_FILT_5120ms 6 | ||
237 | #define ADP5520_BL_AMBL_FILT_10240ms 7 /* 10.24 sec */ | ||
238 | |||
239 | /* | ||
240 | * Blacklight current 0..30mA | ||
241 | */ | ||
242 | #define ADP5520_BL_CUR_mA(I) ((I * 127) / 30) | ||
243 | |||
244 | /* | ||
245 | * L2 comparator current 0..1000uA | ||
246 | */ | ||
247 | #define ADP5520_L2_COMP_CURR_uA(I) ((I * 255) / 1000) | ||
248 | |||
249 | /* | ||
250 | * L3 comparator current 0..127uA | ||
251 | */ | ||
252 | #define ADP5520_L3_COMP_CURR_uA(I) ((I * 255) / 127) | ||
253 | |||
254 | struct adp5520_backlight_platform_data { | ||
255 | u8 fade_in; /* Backlight Fade-In Timer */ | ||
256 | u8 fade_out; /* Backlight Fade-Out Timer */ | ||
257 | u8 fade_led_law; /* fade-on/fade-off transfer characteristic */ | ||
258 | |||
259 | u8 en_ambl_sens; /* 1 = enable ambient light sensor */ | ||
260 | u8 abml_filt; /* Light sensor filter time */ | ||
261 | u8 l1_daylight_max; /* use BL_CUR_mA(I) 0 <= I <= 30 mA */ | ||
262 | u8 l1_daylight_dim; /* typ = 0, use BL_CUR_mA(I) 0 <= I <= 30 mA */ | ||
263 | u8 l2_office_max; /* use BL_CUR_mA(I) 0 <= I <= 30 mA */ | ||
264 | u8 l2_office_dim; /* typ = 0, use BL_CUR_mA(I) 0 <= I <= 30 mA */ | ||
265 | u8 l3_dark_max; /* use BL_CUR_mA(I) 0 <= I <= 30 mA */ | ||
266 | u8 l3_dark_dim; /* typ = 0, use BL_CUR_mA(I) 0 <= I <= 30 mA */ | ||
267 | u8 l2_trip; /* use L2_COMP_CURR_uA(I) 0 <= I <= 1000 uA */ | ||
268 | u8 l2_hyst; /* use L2_COMP_CURR_uA(I) 0 <= I <= 1000 uA */ | ||
269 | u8 l3_trip; /* use L3_COMP_CURR_uA(I) 0 <= I <= 127 uA */ | ||
270 | u8 l3_hyst; /* use L3_COMP_CURR_uA(I) 0 <= I <= 127 uA */ | ||
271 | }; | ||
272 | |||
273 | /* | ||
274 | * MFD chip platform data | ||
275 | */ | ||
276 | |||
277 | struct adp5520_platform_data { | ||
278 | struct adp5520_keys_platform_data *keys; | ||
279 | struct adp5520_gpio_platform_data *gpio; | ||
280 | struct adp5520_leds_platform_data *leds; | ||
281 | struct adp5520_backlight_platform_data *backlight; | ||
282 | }; | ||
283 | |||
284 | /* | ||
285 | * MFD chip functions | ||
286 | */ | ||
287 | |||
288 | extern int adp5520_read(struct device *dev, int reg, uint8_t *val); | ||
289 | extern int adp5520_write(struct device *dev, int reg, u8 val); | ||
290 | extern int adp5520_clr_bits(struct device *dev, int reg, uint8_t bit_mask); | ||
291 | extern int adp5520_set_bits(struct device *dev, int reg, uint8_t bit_mask); | ||
292 | |||
293 | extern int adp5520_register_notifier(struct device *dev, | ||
294 | struct notifier_block *nb, unsigned int events); | ||
295 | |||
296 | extern int adp5520_unregister_notifier(struct device *dev, | ||
297 | struct notifier_block *nb, unsigned int events); | ||
298 | |||
299 | #endif /* __LINUX_MFD_ADP5520_H */ | ||
diff --git a/include/linux/mfd/da903x.h b/include/linux/mfd/da903x.h index c63b65c94429..0aa3a1a49ee3 100644 --- a/include/linux/mfd/da903x.h +++ b/include/linux/mfd/da903x.h | |||
@@ -96,6 +96,10 @@ struct da9034_touch_pdata { | |||
96 | int y_inverted; | 96 | int y_inverted; |
97 | }; | 97 | }; |
98 | 98 | ||
99 | struct da9034_backlight_pdata { | ||
100 | int output_current; /* output current of WLED, from 0-31 (in mA) */ | ||
101 | }; | ||
102 | |||
99 | /* DA9030 battery charger data */ | 103 | /* DA9030 battery charger data */ |
100 | struct power_supply_info; | 104 | struct power_supply_info; |
101 | 105 | ||
diff --git a/include/linux/mfd/ezx-pcap.h b/include/linux/mfd/ezx-pcap.h index e5124ceea769..40c372165f3e 100644 --- a/include/linux/mfd/ezx-pcap.h +++ b/include/linux/mfd/ezx-pcap.h | |||
@@ -45,7 +45,7 @@ void pcap_set_ts_bits(struct pcap_chip *, u32); | |||
45 | #define PCAP_CLEAR_INTERRUPT_REGISTER 0x01ffffff | 45 | #define PCAP_CLEAR_INTERRUPT_REGISTER 0x01ffffff |
46 | #define PCAP_MASK_ALL_INTERRUPT 0x01ffffff | 46 | #define PCAP_MASK_ALL_INTERRUPT 0x01ffffff |
47 | 47 | ||
48 | /* registers acessible by both pcap ports */ | 48 | /* registers accessible by both pcap ports */ |
49 | #define PCAP_REG_ISR 0x0 /* Interrupt Status */ | 49 | #define PCAP_REG_ISR 0x0 /* Interrupt Status */ |
50 | #define PCAP_REG_MSR 0x1 /* Interrupt Mask */ | 50 | #define PCAP_REG_MSR 0x1 /* Interrupt Mask */ |
51 | #define PCAP_REG_PSTAT 0x2 /* Processor Status */ | 51 | #define PCAP_REG_PSTAT 0x2 /* Processor Status */ |
@@ -67,7 +67,7 @@ void pcap_set_ts_bits(struct pcap_chip *, u32); | |||
67 | #define PCAP_REG_VENDOR_TEST1 0x1e | 67 | #define PCAP_REG_VENDOR_TEST1 0x1e |
68 | #define PCAP_REG_VENDOR_TEST2 0x1f | 68 | #define PCAP_REG_VENDOR_TEST2 0x1f |
69 | 69 | ||
70 | /* registers acessible by pcap port 1 only (a1200, e2 & e6) */ | 70 | /* registers accessible by pcap port 1 only (a1200, e2 & e6) */ |
71 | #define PCAP_REG_INT_SEL 0x3 /* Interrupt Select */ | 71 | #define PCAP_REG_INT_SEL 0x3 /* Interrupt Select */ |
72 | #define PCAP_REG_SWCTRL 0x4 /* Switching Regulator Control */ | 72 | #define PCAP_REG_SWCTRL 0x4 /* Switching Regulator Control */ |
73 | #define PCAP_REG_VREG1 0x5 /* Regulator Bank 1 Control */ | 73 | #define PCAP_REG_VREG1 0x5 /* Regulator Bank 1 Control */ |
@@ -231,9 +231,6 @@ void pcap_set_ts_bits(struct pcap_chip *, u32); | |||
231 | #define PCAP_LED_4MA 1 | 231 | #define PCAP_LED_4MA 1 |
232 | #define PCAP_LED_5MA 2 | 232 | #define PCAP_LED_5MA 2 |
233 | #define PCAP_LED_9MA 3 | 233 | #define PCAP_LED_9MA 3 |
234 | #define PCAP_LED_GPIO_VAL_MASK 0x00ffffff | ||
235 | #define PCAP_LED_GPIO_EN 0x01000000 | ||
236 | #define PCAP_LED_GPIO_INVERT 0x02000000 | ||
237 | #define PCAP_LED_T_MASK 0xf | 234 | #define PCAP_LED_T_MASK 0xf |
238 | #define PCAP_LED_C_MASK 0x3 | 235 | #define PCAP_LED_C_MASK 0x3 |
239 | #define PCAP_BL_MASK 0x1f | 236 | #define PCAP_BL_MASK 0x1f |
diff --git a/include/linux/mfd/mc13783-private.h b/include/linux/mfd/mc13783-private.h index 47e698cb0f16..95cf9360553f 100644 --- a/include/linux/mfd/mc13783-private.h +++ b/include/linux/mfd/mc13783-private.h | |||
@@ -24,52 +24,23 @@ | |||
24 | 24 | ||
25 | #include <linux/platform_device.h> | 25 | #include <linux/platform_device.h> |
26 | #include <linux/mfd/mc13783.h> | 26 | #include <linux/mfd/mc13783.h> |
27 | #include <linux/workqueue.h> | ||
28 | #include <linux/mutex.h> | 27 | #include <linux/mutex.h> |
29 | 28 | #include <linux/interrupt.h> | |
30 | struct mc13783_irq { | ||
31 | void (*handler)(int, void *); | ||
32 | void *data; | ||
33 | }; | ||
34 | |||
35 | #define MC13783_NUM_IRQ 2 | ||
36 | #define MC13783_IRQ_TS 0 | ||
37 | #define MC13783_IRQ_REGULATOR 1 | ||
38 | |||
39 | #define MC13783_ADC_MODE_TS 1 | ||
40 | #define MC13783_ADC_MODE_SINGLE_CHAN 2 | ||
41 | #define MC13783_ADC_MODE_MULT_CHAN 3 | ||
42 | 29 | ||
43 | struct mc13783 { | 30 | struct mc13783 { |
44 | int revision; | 31 | struct spi_device *spidev; |
45 | struct device *dev; | 32 | struct mutex lock; |
46 | struct spi_device *spi_device; | ||
47 | |||
48 | int (*read_dev)(void *data, char reg, int count, u32 *dst); | ||
49 | int (*write_dev)(void *data, char reg, int count, const u32 *src); | ||
50 | |||
51 | struct mutex io_lock; | ||
52 | void *io_data; | ||
53 | int irq; | 33 | int irq; |
54 | unsigned int flags; | 34 | int flags; |
55 | 35 | ||
56 | struct mc13783_irq irq_handler[MC13783_NUM_IRQ]; | 36 | irq_handler_t irqhandler[MC13783_NUM_IRQ]; |
57 | struct work_struct work; | 37 | void *irqdata[MC13783_NUM_IRQ]; |
58 | struct completion adc_done; | ||
59 | unsigned int ts_active; | ||
60 | struct mutex adc_conv_lock; | ||
61 | 38 | ||
39 | /* XXX these should go as platformdata to the regulator subdevice */ | ||
62 | struct mc13783_regulator_init_data *regulators; | 40 | struct mc13783_regulator_init_data *regulators; |
63 | int num_regulators; | 41 | int num_regulators; |
64 | }; | 42 | }; |
65 | 43 | ||
66 | int mc13783_reg_read(struct mc13783 *, int reg_num, u32 *); | ||
67 | int mc13783_reg_write(struct mc13783 *, int, u32); | ||
68 | int mc13783_set_bits(struct mc13783 *, int, u32, u32); | ||
69 | int mc13783_free_irq(struct mc13783 *mc13783, int irq); | ||
70 | int mc13783_register_irq(struct mc13783 *mc13783, int irq, | ||
71 | void (*handler) (int, void *), void *data); | ||
72 | |||
73 | #define MC13783_REG_INTERRUPT_STATUS_0 0 | 44 | #define MC13783_REG_INTERRUPT_STATUS_0 0 |
74 | #define MC13783_REG_INTERRUPT_MASK_0 1 | 45 | #define MC13783_REG_INTERRUPT_MASK_0 1 |
75 | #define MC13783_REG_INTERRUPT_SENSE_0 2 | 46 | #define MC13783_REG_INTERRUPT_SENSE_0 2 |
@@ -136,55 +107,6 @@ int mc13783_register_irq(struct mc13783 *mc13783, int irq, | |||
136 | #define MC13783_REG_TEST_3 63 | 107 | #define MC13783_REG_TEST_3 63 |
137 | #define MC13783_REG_NB 64 | 108 | #define MC13783_REG_NB 64 |
138 | 109 | ||
139 | |||
140 | /* | ||
141 | * Interrupt Status | ||
142 | */ | ||
143 | #define MC13783_INT_STAT_ADCDONEI (1 << 0) | ||
144 | #define MC13783_INT_STAT_ADCBISDONEI (1 << 1) | ||
145 | #define MC13783_INT_STAT_TSI (1 << 2) | ||
146 | #define MC13783_INT_STAT_WHIGHI (1 << 3) | ||
147 | #define MC13783_INT_STAT_WLOWI (1 << 4) | ||
148 | #define MC13783_INT_STAT_CHGDETI (1 << 6) | ||
149 | #define MC13783_INT_STAT_CHGOVI (1 << 7) | ||
150 | #define MC13783_INT_STAT_CHGREVI (1 << 8) | ||
151 | #define MC13783_INT_STAT_CHGSHORTI (1 << 9) | ||
152 | #define MC13783_INT_STAT_CCCVI (1 << 10) | ||
153 | #define MC13783_INT_STAT_CHGCURRI (1 << 11) | ||
154 | #define MC13783_INT_STAT_BPONI (1 << 12) | ||
155 | #define MC13783_INT_STAT_LOBATLI (1 << 13) | ||
156 | #define MC13783_INT_STAT_LOBATHI (1 << 14) | ||
157 | #define MC13783_INT_STAT_UDPI (1 << 15) | ||
158 | #define MC13783_INT_STAT_USBI (1 << 16) | ||
159 | #define MC13783_INT_STAT_IDI (1 << 19) | ||
160 | #define MC13783_INT_STAT_Unused (1 << 20) | ||
161 | #define MC13783_INT_STAT_SE1I (1 << 21) | ||
162 | #define MC13783_INT_STAT_CKDETI (1 << 22) | ||
163 | #define MC13783_INT_STAT_UDMI (1 << 23) | ||
164 | |||
165 | /* | ||
166 | * Interrupt Mask | ||
167 | */ | ||
168 | #define MC13783_INT_MASK_ADCDONEM (1 << 0) | ||
169 | #define MC13783_INT_MASK_ADCBISDONEM (1 << 1) | ||
170 | #define MC13783_INT_MASK_TSM (1 << 2) | ||
171 | #define MC13783_INT_MASK_WHIGHM (1 << 3) | ||
172 | #define MC13783_INT_MASK_WLOWM (1 << 4) | ||
173 | #define MC13783_INT_MASK_CHGDETM (1 << 6) | ||
174 | #define MC13783_INT_MASK_CHGOVM (1 << 7) | ||
175 | #define MC13783_INT_MASK_CHGREVM (1 << 8) | ||
176 | #define MC13783_INT_MASK_CHGSHORTM (1 << 9) | ||
177 | #define MC13783_INT_MASK_CCCVM (1 << 10) | ||
178 | #define MC13783_INT_MASK_CHGCURRM (1 << 11) | ||
179 | #define MC13783_INT_MASK_BPONM (1 << 12) | ||
180 | #define MC13783_INT_MASK_LOBATLM (1 << 13) | ||
181 | #define MC13783_INT_MASK_LOBATHM (1 << 14) | ||
182 | #define MC13783_INT_MASK_UDPM (1 << 15) | ||
183 | #define MC13783_INT_MASK_USBM (1 << 16) | ||
184 | #define MC13783_INT_MASK_IDM (1 << 19) | ||
185 | #define MC13783_INT_MASK_SE1M (1 << 21) | ||
186 | #define MC13783_INT_MASK_CKDETM (1 << 22) | ||
187 | |||
188 | /* | 110 | /* |
189 | * Reg Regulator Mode 0 | 111 | * Reg Regulator Mode 0 |
190 | */ | 112 | */ |
@@ -284,113 +206,15 @@ int mc13783_register_irq(struct mc13783 *mc13783, int irq, | |||
284 | #define MC13783_SWCTRL_SW3_STBY (1 << 21) | 206 | #define MC13783_SWCTRL_SW3_STBY (1 << 21) |
285 | #define MC13783_SWCTRL_SW3_MODE (1 << 22) | 207 | #define MC13783_SWCTRL_SW3_MODE (1 << 22) |
286 | 208 | ||
287 | /* | 209 | static inline int mc13783_set_bits(struct mc13783 *mc13783, unsigned int offset, |
288 | * ADC/Touch | 210 | u32 mask, u32 val) |
289 | */ | 211 | { |
290 | #define MC13783_ADC0_LICELLCON (1 << 0) | 212 | int ret; |
291 | #define MC13783_ADC0_CHRGICON (1 << 1) | 213 | mc13783_lock(mc13783); |
292 | #define MC13783_ADC0_BATICON (1 << 2) | 214 | ret = mc13783_reg_rmw(mc13783, offset, mask, val); |
293 | #define MC13783_ADC0_RTHEN (1 << 3) | 215 | mc13783_unlock(mc13783); |
294 | #define MC13783_ADC0_DTHEN (1 << 4) | ||
295 | #define MC13783_ADC0_UIDEN (1 << 5) | ||
296 | #define MC13783_ADC0_ADOUTEN (1 << 6) | ||
297 | #define MC13783_ADC0_ADOUTPER (1 << 7) | ||
298 | #define MC13783_ADC0_ADREFEN (1 << 10) | ||
299 | #define MC13783_ADC0_ADREFMODE (1 << 11) | ||
300 | #define MC13783_ADC0_TSMOD0 (1 << 12) | ||
301 | #define MC13783_ADC0_TSMOD1 (1 << 13) | ||
302 | #define MC13783_ADC0_TSMOD2 (1 << 14) | ||
303 | #define MC13783_ADC0_CHRGRAWDIV (1 << 15) | ||
304 | #define MC13783_ADC0_ADINC1 (1 << 16) | ||
305 | #define MC13783_ADC0_ADINC2 (1 << 17) | ||
306 | #define MC13783_ADC0_WCOMP (1 << 18) | ||
307 | #define MC13783_ADC0_ADCBIS0 (1 << 23) | ||
308 | |||
309 | #define MC13783_ADC1_ADEN (1 << 0) | ||
310 | #define MC13783_ADC1_RAND (1 << 1) | ||
311 | #define MC13783_ADC1_ADSEL (1 << 3) | ||
312 | #define MC13783_ADC1_TRIGMASK (1 << 4) | ||
313 | #define MC13783_ADC1_ADA10 (1 << 5) | ||
314 | #define MC13783_ADC1_ADA11 (1 << 6) | ||
315 | #define MC13783_ADC1_ADA12 (1 << 7) | ||
316 | #define MC13783_ADC1_ADA20 (1 << 8) | ||
317 | #define MC13783_ADC1_ADA21 (1 << 9) | ||
318 | #define MC13783_ADC1_ADA22 (1 << 10) | ||
319 | #define MC13783_ADC1_ATO0 (1 << 11) | ||
320 | #define MC13783_ADC1_ATO1 (1 << 12) | ||
321 | #define MC13783_ADC1_ATO2 (1 << 13) | ||
322 | #define MC13783_ADC1_ATO3 (1 << 14) | ||
323 | #define MC13783_ADC1_ATO4 (1 << 15) | ||
324 | #define MC13783_ADC1_ATO5 (1 << 16) | ||
325 | #define MC13783_ADC1_ATO6 (1 << 17) | ||
326 | #define MC13783_ADC1_ATO7 (1 << 18) | ||
327 | #define MC13783_ADC1_ATOX (1 << 19) | ||
328 | #define MC13783_ADC1_ASC (1 << 20) | ||
329 | #define MC13783_ADC1_ADTRIGIGN (1 << 21) | ||
330 | #define MC13783_ADC1_ADONESHOT (1 << 22) | ||
331 | #define MC13783_ADC1_ADCBIS1 (1 << 23) | ||
332 | |||
333 | #define MC13783_ADC1_CHAN0_SHIFT 5 | ||
334 | #define MC13783_ADC1_CHAN1_SHIFT 8 | ||
335 | |||
336 | #define MC13783_ADC2_ADD10 (1 << 2) | ||
337 | #define MC13783_ADC2_ADD11 (1 << 3) | ||
338 | #define MC13783_ADC2_ADD12 (1 << 4) | ||
339 | #define MC13783_ADC2_ADD13 (1 << 5) | ||
340 | #define MC13783_ADC2_ADD14 (1 << 6) | ||
341 | #define MC13783_ADC2_ADD15 (1 << 7) | ||
342 | #define MC13783_ADC2_ADD16 (1 << 8) | ||
343 | #define MC13783_ADC2_ADD17 (1 << 9) | ||
344 | #define MC13783_ADC2_ADD18 (1 << 10) | ||
345 | #define MC13783_ADC2_ADD19 (1 << 11) | ||
346 | #define MC13783_ADC2_ADD20 (1 << 14) | ||
347 | #define MC13783_ADC2_ADD21 (1 << 15) | ||
348 | #define MC13783_ADC2_ADD22 (1 << 16) | ||
349 | #define MC13783_ADC2_ADD23 (1 << 17) | ||
350 | #define MC13783_ADC2_ADD24 (1 << 18) | ||
351 | #define MC13783_ADC2_ADD25 (1 << 19) | ||
352 | #define MC13783_ADC2_ADD26 (1 << 20) | ||
353 | #define MC13783_ADC2_ADD27 (1 << 21) | ||
354 | #define MC13783_ADC2_ADD28 (1 << 22) | ||
355 | #define MC13783_ADC2_ADD29 (1 << 23) | ||
356 | 216 | ||
357 | #define MC13783_ADC3_WHIGH0 (1 << 0) | 217 | return ret; |
358 | #define MC13783_ADC3_WHIGH1 (1 << 1) | 218 | } |
359 | #define MC13783_ADC3_WHIGH2 (1 << 2) | ||
360 | #define MC13783_ADC3_WHIGH3 (1 << 3) | ||
361 | #define MC13783_ADC3_WHIGH4 (1 << 4) | ||
362 | #define MC13783_ADC3_WHIGH5 (1 << 5) | ||
363 | #define MC13783_ADC3_ICID0 (1 << 6) | ||
364 | #define MC13783_ADC3_ICID1 (1 << 7) | ||
365 | #define MC13783_ADC3_ICID2 (1 << 8) | ||
366 | #define MC13783_ADC3_WLOW0 (1 << 9) | ||
367 | #define MC13783_ADC3_WLOW1 (1 << 10) | ||
368 | #define MC13783_ADC3_WLOW2 (1 << 11) | ||
369 | #define MC13783_ADC3_WLOW3 (1 << 12) | ||
370 | #define MC13783_ADC3_WLOW4 (1 << 13) | ||
371 | #define MC13783_ADC3_WLOW5 (1 << 14) | ||
372 | #define MC13783_ADC3_ADCBIS2 (1 << 23) | ||
373 | |||
374 | #define MC13783_ADC4_ADDBIS10 (1 << 2) | ||
375 | #define MC13783_ADC4_ADDBIS11 (1 << 3) | ||
376 | #define MC13783_ADC4_ADDBIS12 (1 << 4) | ||
377 | #define MC13783_ADC4_ADDBIS13 (1 << 5) | ||
378 | #define MC13783_ADC4_ADDBIS14 (1 << 6) | ||
379 | #define MC13783_ADC4_ADDBIS15 (1 << 7) | ||
380 | #define MC13783_ADC4_ADDBIS16 (1 << 8) | ||
381 | #define MC13783_ADC4_ADDBIS17 (1 << 9) | ||
382 | #define MC13783_ADC4_ADDBIS18 (1 << 10) | ||
383 | #define MC13783_ADC4_ADDBIS19 (1 << 11) | ||
384 | #define MC13783_ADC4_ADDBIS20 (1 << 14) | ||
385 | #define MC13783_ADC4_ADDBIS21 (1 << 15) | ||
386 | #define MC13783_ADC4_ADDBIS22 (1 << 16) | ||
387 | #define MC13783_ADC4_ADDBIS23 (1 << 17) | ||
388 | #define MC13783_ADC4_ADDBIS24 (1 << 18) | ||
389 | #define MC13783_ADC4_ADDBIS25 (1 << 19) | ||
390 | #define MC13783_ADC4_ADDBIS26 (1 << 20) | ||
391 | #define MC13783_ADC4_ADDBIS27 (1 << 21) | ||
392 | #define MC13783_ADC4_ADDBIS28 (1 << 22) | ||
393 | #define MC13783_ADC4_ADDBIS29 (1 << 23) | ||
394 | 219 | ||
395 | #endif /* __LINUX_MFD_MC13783_PRIV_H */ | 220 | #endif /* __LINUX_MFD_MC13783_PRIV_H */ |
396 | |||
diff --git a/include/linux/mfd/mc13783.h b/include/linux/mfd/mc13783.h index b3a2a7243573..35680409b8cf 100644 --- a/include/linux/mfd/mc13783.h +++ b/include/linux/mfd/mc13783.h | |||
@@ -1,28 +1,50 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright 2009 Pengutronix, Sascha Hauer <s.hauer@pengutronix.de> | 2 | * Copyright 2009 Pengutronix |
3 | * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de> | ||
3 | * | 4 | * |
4 | * Initial development of this code was funded by | 5 | * This program is free software; you can redistribute it and/or modify it under |
5 | * Phytec Messtechnik GmbH, http://www.phytec.de | 6 | * the terms of the GNU General Public License version 2 as published by the |
6 | * | 7 | * Free Software Foundation. |
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 | * This program is distributed in the hope that it will be useful, | ||
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
15 | * GNU General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
20 | */ | 8 | */ |
9 | #ifndef __LINUX_MFD_MC13783_H | ||
10 | #define __LINUX_MFD_MC13783_H | ||
21 | 11 | ||
22 | #ifndef __INCLUDE_LINUX_MFD_MC13783_H | 12 | #include <linux/interrupt.h> |
23 | #define __INCLUDE_LINUX_MFD_MC13783_H | ||
24 | 13 | ||
25 | struct mc13783; | 14 | struct mc13783; |
15 | |||
16 | void mc13783_lock(struct mc13783 *mc13783); | ||
17 | void mc13783_unlock(struct mc13783 *mc13783); | ||
18 | |||
19 | int mc13783_reg_read(struct mc13783 *mc13783, unsigned int offset, u32 *val); | ||
20 | int mc13783_reg_write(struct mc13783 *mc13783, unsigned int offset, u32 val); | ||
21 | int mc13783_reg_rmw(struct mc13783 *mc13783, unsigned int offset, | ||
22 | u32 mask, u32 val); | ||
23 | |||
24 | int mc13783_irq_request(struct mc13783 *mc13783, int irq, | ||
25 | irq_handler_t handler, const char *name, void *dev); | ||
26 | int mc13783_irq_request_nounmask(struct mc13783 *mc13783, int irq, | ||
27 | irq_handler_t handler, const char *name, void *dev); | ||
28 | int mc13783_irq_free(struct mc13783 *mc13783, int irq, void *dev); | ||
29 | int mc13783_ackirq(struct mc13783 *mc13783, int irq); | ||
30 | |||
31 | int mc13783_mask(struct mc13783 *mc13783, int irq); | ||
32 | int mc13783_unmask(struct mc13783 *mc13783, int irq); | ||
33 | |||
34 | #define MC13783_ADC0 43 | ||
35 | #define MC13783_ADC0_ADREFEN (1 << 10) | ||
36 | #define MC13783_ADC0_ADREFMODE (1 << 11) | ||
37 | #define MC13783_ADC0_TSMOD0 (1 << 12) | ||
38 | #define MC13783_ADC0_TSMOD1 (1 << 13) | ||
39 | #define MC13783_ADC0_TSMOD2 (1 << 14) | ||
40 | #define MC13783_ADC0_ADINC1 (1 << 16) | ||
41 | #define MC13783_ADC0_ADINC2 (1 << 17) | ||
42 | |||
43 | #define MC13783_ADC0_TSMOD_MASK (MC13783_ADC0_TSMOD0 | \ | ||
44 | MC13783_ADC0_TSMOD1 | \ | ||
45 | MC13783_ADC0_TSMOD2) | ||
46 | |||
47 | /* to be cleaned up */ | ||
26 | struct regulator_init_data; | 48 | struct regulator_init_data; |
27 | 49 | ||
28 | struct mc13783_regulator_init_data { | 50 | struct mc13783_regulator_init_data { |
@@ -30,23 +52,30 @@ struct mc13783_regulator_init_data { | |||
30 | struct regulator_init_data *init_data; | 52 | struct regulator_init_data *init_data; |
31 | }; | 53 | }; |
32 | 54 | ||
33 | struct mc13783_platform_data { | 55 | struct mc13783_regulator_platform_data { |
34 | struct mc13783_regulator_init_data *regulators; | ||
35 | int num_regulators; | 56 | int num_regulators; |
36 | unsigned int flags; | 57 | struct mc13783_regulator_init_data *regulators; |
37 | }; | 58 | }; |
38 | 59 | ||
39 | /* mc13783_platform_data flags */ | 60 | struct mc13783_platform_data { |
61 | int num_regulators; | ||
62 | struct mc13783_regulator_init_data *regulators; | ||
63 | |||
40 | #define MC13783_USE_TOUCHSCREEN (1 << 0) | 64 | #define MC13783_USE_TOUCHSCREEN (1 << 0) |
41 | #define MC13783_USE_CODEC (1 << 1) | 65 | #define MC13783_USE_CODEC (1 << 1) |
42 | #define MC13783_USE_ADC (1 << 2) | 66 | #define MC13783_USE_ADC (1 << 2) |
43 | #define MC13783_USE_RTC (1 << 3) | 67 | #define MC13783_USE_RTC (1 << 3) |
44 | #define MC13783_USE_REGULATOR (1 << 4) | 68 | #define MC13783_USE_REGULATOR (1 << 4) |
69 | unsigned int flags; | ||
70 | }; | ||
71 | |||
72 | #define MC13783_ADC_MODE_TS 1 | ||
73 | #define MC13783_ADC_MODE_SINGLE_CHAN 2 | ||
74 | #define MC13783_ADC_MODE_MULT_CHAN 3 | ||
45 | 75 | ||
46 | int mc13783_adc_do_conversion(struct mc13783 *mc13783, unsigned int mode, | 76 | int mc13783_adc_do_conversion(struct mc13783 *mc13783, unsigned int mode, |
47 | unsigned int channel, unsigned int *sample); | 77 | unsigned int channel, unsigned int *sample); |
48 | 78 | ||
49 | void mc13783_adc_set_ts_status(struct mc13783 *mc13783, unsigned int status); | ||
50 | 79 | ||
51 | #define MC13783_SW_SW1A 0 | 80 | #define MC13783_SW_SW1A 0 |
52 | #define MC13783_SW_SW1B 1 | 81 | #define MC13783_SW_SW1B 1 |
@@ -80,5 +109,46 @@ void mc13783_adc_set_ts_status(struct mc13783 *mc13783, unsigned int status); | |||
80 | #define MC13783_REGU_V3 29 | 109 | #define MC13783_REGU_V3 29 |
81 | #define MC13783_REGU_V4 30 | 110 | #define MC13783_REGU_V4 30 |
82 | 111 | ||
83 | #endif /* __INCLUDE_LINUX_MFD_MC13783_H */ | 112 | #define MC13783_IRQ_ADCDONE 0 |
113 | #define MC13783_IRQ_ADCBISDONE 1 | ||
114 | #define MC13783_IRQ_TS 2 | ||
115 | #define MC13783_IRQ_WHIGH 3 | ||
116 | #define MC13783_IRQ_WLOW 4 | ||
117 | #define MC13783_IRQ_CHGDET 6 | ||
118 | #define MC13783_IRQ_CHGOV 7 | ||
119 | #define MC13783_IRQ_CHGREV 8 | ||
120 | #define MC13783_IRQ_CHGSHORT 9 | ||
121 | #define MC13783_IRQ_CCCV 10 | ||
122 | #define MC13783_IRQ_CHGCURR 11 | ||
123 | #define MC13783_IRQ_BPON 12 | ||
124 | #define MC13783_IRQ_LOBATL 13 | ||
125 | #define MC13783_IRQ_LOBATH 14 | ||
126 | #define MC13783_IRQ_UDP 15 | ||
127 | #define MC13783_IRQ_USB 16 | ||
128 | #define MC13783_IRQ_ID 19 | ||
129 | #define MC13783_IRQ_SE1 21 | ||
130 | #define MC13783_IRQ_CKDET 22 | ||
131 | #define MC13783_IRQ_UDM 23 | ||
132 | #define MC13783_IRQ_1HZ 24 | ||
133 | #define MC13783_IRQ_TODA 25 | ||
134 | #define MC13783_IRQ_ONOFD1 27 | ||
135 | #define MC13783_IRQ_ONOFD2 28 | ||
136 | #define MC13783_IRQ_ONOFD3 29 | ||
137 | #define MC13783_IRQ_SYSRST 30 | ||
138 | #define MC13783_IRQ_RTCRST 31 | ||
139 | #define MC13783_IRQ_PC 32 | ||
140 | #define MC13783_IRQ_WARM 33 | ||
141 | #define MC13783_IRQ_MEMHLD 34 | ||
142 | #define MC13783_IRQ_PWRRDY 35 | ||
143 | #define MC13783_IRQ_THWARNL 36 | ||
144 | #define MC13783_IRQ_THWARNH 37 | ||
145 | #define MC13783_IRQ_CLK 38 | ||
146 | #define MC13783_IRQ_SEMAF 39 | ||
147 | #define MC13783_IRQ_MC2B 41 | ||
148 | #define MC13783_IRQ_HSDET 42 | ||
149 | #define MC13783_IRQ_HSL 43 | ||
150 | #define MC13783_IRQ_ALSPTH 44 | ||
151 | #define MC13783_IRQ_AHSSHORT 45 | ||
152 | #define MC13783_NUM_IRQ 46 | ||
84 | 153 | ||
154 | #endif /* __LINUX_MFD_MC13783_H */ | ||
diff --git a/include/linux/mfd/mcp.h b/include/linux/mfd/mcp.h new file mode 100644 index 000000000000..ee496708e38b --- /dev/null +++ b/include/linux/mfd/mcp.h | |||
@@ -0,0 +1,69 @@ | |||
1 | /* | ||
2 | * linux/drivers/mfd/mcp.h | ||
3 | * | ||
4 | * Copyright (C) 2001 Russell King, All Rights Reserved. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License. | ||
9 | */ | ||
10 | #ifndef MCP_H | ||
11 | #define MCP_H | ||
12 | |||
13 | #include <mach/dma.h> | ||
14 | |||
15 | struct mcp_ops; | ||
16 | |||
17 | struct mcp { | ||
18 | struct module *owner; | ||
19 | struct mcp_ops *ops; | ||
20 | spinlock_t lock; | ||
21 | int use_count; | ||
22 | unsigned int sclk_rate; | ||
23 | unsigned int rw_timeout; | ||
24 | dma_device_t dma_audio_rd; | ||
25 | dma_device_t dma_audio_wr; | ||
26 | dma_device_t dma_telco_rd; | ||
27 | dma_device_t dma_telco_wr; | ||
28 | struct device attached_device; | ||
29 | int gpio_base; | ||
30 | }; | ||
31 | |||
32 | struct mcp_ops { | ||
33 | void (*set_telecom_divisor)(struct mcp *, unsigned int); | ||
34 | void (*set_audio_divisor)(struct mcp *, unsigned int); | ||
35 | void (*reg_write)(struct mcp *, unsigned int, unsigned int); | ||
36 | unsigned int (*reg_read)(struct mcp *, unsigned int); | ||
37 | void (*enable)(struct mcp *); | ||
38 | void (*disable)(struct mcp *); | ||
39 | }; | ||
40 | |||
41 | void mcp_set_telecom_divisor(struct mcp *, unsigned int); | ||
42 | void mcp_set_audio_divisor(struct mcp *, unsigned int); | ||
43 | void mcp_reg_write(struct mcp *, unsigned int, unsigned int); | ||
44 | unsigned int mcp_reg_read(struct mcp *, unsigned int); | ||
45 | void mcp_enable(struct mcp *); | ||
46 | void mcp_disable(struct mcp *); | ||
47 | #define mcp_get_sclk_rate(mcp) ((mcp)->sclk_rate) | ||
48 | |||
49 | struct mcp *mcp_host_alloc(struct device *, size_t); | ||
50 | int mcp_host_register(struct mcp *); | ||
51 | void mcp_host_unregister(struct mcp *); | ||
52 | |||
53 | struct mcp_driver { | ||
54 | struct device_driver drv; | ||
55 | int (*probe)(struct mcp *); | ||
56 | void (*remove)(struct mcp *); | ||
57 | int (*suspend)(struct mcp *, pm_message_t); | ||
58 | int (*resume)(struct mcp *); | ||
59 | }; | ||
60 | |||
61 | int mcp_driver_register(struct mcp_driver *); | ||
62 | void mcp_driver_unregister(struct mcp_driver *); | ||
63 | |||
64 | #define mcp_get_drvdata(mcp) dev_get_drvdata(&(mcp)->attached_device) | ||
65 | #define mcp_set_drvdata(mcp,d) dev_set_drvdata(&(mcp)->attached_device, d) | ||
66 | |||
67 | #define mcp_priv(mcp) ((void *)((mcp)+1)) | ||
68 | |||
69 | #endif | ||
diff --git a/include/linux/mfd/pcf50633/core.h b/include/linux/mfd/pcf50633/core.h index 46df7f053c29..3398bd9aab11 100644 --- a/include/linux/mfd/pcf50633/core.h +++ b/include/linux/mfd/pcf50633/core.h | |||
@@ -45,10 +45,6 @@ struct pcf50633_platform_data { | |||
45 | u8 resumers[5]; | 45 | u8 resumers[5]; |
46 | }; | 46 | }; |
47 | 47 | ||
48 | struct pcf50633_subdev_pdata { | ||
49 | struct pcf50633 *pcf; | ||
50 | }; | ||
51 | |||
52 | struct pcf50633_irq { | 48 | struct pcf50633_irq { |
53 | void (*handler) (int, void *); | 49 | void (*handler) (int, void *); |
54 | void *data; | 50 | void *data; |
@@ -222,5 +218,9 @@ enum pcf50633_reg_int5 { | |||
222 | #define PCF50633_REG_LEDCTL 0x2a | 218 | #define PCF50633_REG_LEDCTL 0x2a |
223 | #define PCF50633_REG_LEDDIM 0x2b | 219 | #define PCF50633_REG_LEDDIM 0x2b |
224 | 220 | ||
225 | #endif | 221 | static inline struct pcf50633 *dev_to_pcf50633(struct device *dev) |
222 | { | ||
223 | return dev_get_drvdata(dev); | ||
224 | } | ||
226 | 225 | ||
226 | #endif | ||
diff --git a/include/linux/mfd/sh_mobile_sdhi.h b/include/linux/mfd/sh_mobile_sdhi.h new file mode 100644 index 000000000000..3bcd7163485c --- /dev/null +++ b/include/linux/mfd/sh_mobile_sdhi.h | |||
@@ -0,0 +1,8 @@ | |||
1 | #ifndef __SH_MOBILE_SDHI_H__ | ||
2 | #define __SH_MOBILE_SDHI_H__ | ||
3 | |||
4 | struct sh_mobile_sdhi_info { | ||
5 | void (*set_pwr)(struct platform_device *pdev, int state); | ||
6 | }; | ||
7 | |||
8 | #endif /* __SH_MOBILE_SDHI_H__ */ | ||
diff --git a/include/linux/mfd/twl4030-codec.h b/include/linux/mfd/twl4030-codec.h new file mode 100644 index 000000000000..2ec317c68e59 --- /dev/null +++ b/include/linux/mfd/twl4030-codec.h | |||
@@ -0,0 +1,272 @@ | |||
1 | /* | ||
2 | * MFD driver for twl4030 codec submodule | ||
3 | * | ||
4 | * Author: Peter Ujfalusi <peter.ujfalusi@nokia.com> | ||
5 | * | ||
6 | * Copyright: (C) 2009 Nokia Corporation | ||
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 | * This program is distributed in the hope that it will be useful, but | ||
13 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
15 | * General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA | ||
20 | * 02110-1301 USA | ||
21 | * | ||
22 | */ | ||
23 | |||
24 | #ifndef __TWL4030_CODEC_H__ | ||
25 | #define __TWL4030_CODEC_H__ | ||
26 | |||
27 | /* Codec registers */ | ||
28 | #define TWL4030_REG_CODEC_MODE 0x01 | ||
29 | #define TWL4030_REG_OPTION 0x02 | ||
30 | #define TWL4030_REG_UNKNOWN 0x03 | ||
31 | #define TWL4030_REG_MICBIAS_CTL 0x04 | ||
32 | #define TWL4030_REG_ANAMICL 0x05 | ||
33 | #define TWL4030_REG_ANAMICR 0x06 | ||
34 | #define TWL4030_REG_AVADC_CTL 0x07 | ||
35 | #define TWL4030_REG_ADCMICSEL 0x08 | ||
36 | #define TWL4030_REG_DIGMIXING 0x09 | ||
37 | #define TWL4030_REG_ATXL1PGA 0x0A | ||
38 | #define TWL4030_REG_ATXR1PGA 0x0B | ||
39 | #define TWL4030_REG_AVTXL2PGA 0x0C | ||
40 | #define TWL4030_REG_AVTXR2PGA 0x0D | ||
41 | #define TWL4030_REG_AUDIO_IF 0x0E | ||
42 | #define TWL4030_REG_VOICE_IF 0x0F | ||
43 | #define TWL4030_REG_ARXR1PGA 0x10 | ||
44 | #define TWL4030_REG_ARXL1PGA 0x11 | ||
45 | #define TWL4030_REG_ARXR2PGA 0x12 | ||
46 | #define TWL4030_REG_ARXL2PGA 0x13 | ||
47 | #define TWL4030_REG_VRXPGA 0x14 | ||
48 | #define TWL4030_REG_VSTPGA 0x15 | ||
49 | #define TWL4030_REG_VRX2ARXPGA 0x16 | ||
50 | #define TWL4030_REG_AVDAC_CTL 0x17 | ||
51 | #define TWL4030_REG_ARX2VTXPGA 0x18 | ||
52 | #define TWL4030_REG_ARXL1_APGA_CTL 0x19 | ||
53 | #define TWL4030_REG_ARXR1_APGA_CTL 0x1A | ||
54 | #define TWL4030_REG_ARXL2_APGA_CTL 0x1B | ||
55 | #define TWL4030_REG_ARXR2_APGA_CTL 0x1C | ||
56 | #define TWL4030_REG_ATX2ARXPGA 0x1D | ||
57 | #define TWL4030_REG_BT_IF 0x1E | ||
58 | #define TWL4030_REG_BTPGA 0x1F | ||
59 | #define TWL4030_REG_BTSTPGA 0x20 | ||
60 | #define TWL4030_REG_EAR_CTL 0x21 | ||
61 | #define TWL4030_REG_HS_SEL 0x22 | ||
62 | #define TWL4030_REG_HS_GAIN_SET 0x23 | ||
63 | #define TWL4030_REG_HS_POPN_SET 0x24 | ||
64 | #define TWL4030_REG_PREDL_CTL 0x25 | ||
65 | #define TWL4030_REG_PREDR_CTL 0x26 | ||
66 | #define TWL4030_REG_PRECKL_CTL 0x27 | ||
67 | #define TWL4030_REG_PRECKR_CTL 0x28 | ||
68 | #define TWL4030_REG_HFL_CTL 0x29 | ||
69 | #define TWL4030_REG_HFR_CTL 0x2A | ||
70 | #define TWL4030_REG_ALC_CTL 0x2B | ||
71 | #define TWL4030_REG_ALC_SET1 0x2C | ||
72 | #define TWL4030_REG_ALC_SET2 0x2D | ||
73 | #define TWL4030_REG_BOOST_CTL 0x2E | ||
74 | #define TWL4030_REG_SOFTVOL_CTL 0x2F | ||
75 | #define TWL4030_REG_DTMF_FREQSEL 0x30 | ||
76 | #define TWL4030_REG_DTMF_TONEXT1H 0x31 | ||
77 | #define TWL4030_REG_DTMF_TONEXT1L 0x32 | ||
78 | #define TWL4030_REG_DTMF_TONEXT2H 0x33 | ||
79 | #define TWL4030_REG_DTMF_TONEXT2L 0x34 | ||
80 | #define TWL4030_REG_DTMF_TONOFF 0x35 | ||
81 | #define TWL4030_REG_DTMF_WANONOFF 0x36 | ||
82 | #define TWL4030_REG_I2S_RX_SCRAMBLE_H 0x37 | ||
83 | #define TWL4030_REG_I2S_RX_SCRAMBLE_M 0x38 | ||
84 | #define TWL4030_REG_I2S_RX_SCRAMBLE_L 0x39 | ||
85 | #define TWL4030_REG_APLL_CTL 0x3A | ||
86 | #define TWL4030_REG_DTMF_CTL 0x3B | ||
87 | #define TWL4030_REG_DTMF_PGA_CTL2 0x3C | ||
88 | #define TWL4030_REG_DTMF_PGA_CTL1 0x3D | ||
89 | #define TWL4030_REG_MISC_SET_1 0x3E | ||
90 | #define TWL4030_REG_PCMBTMUX 0x3F | ||
91 | #define TWL4030_REG_RX_PATH_SEL 0x43 | ||
92 | #define TWL4030_REG_VDL_APGA_CTL 0x44 | ||
93 | #define TWL4030_REG_VIBRA_CTL 0x45 | ||
94 | #define TWL4030_REG_VIBRA_SET 0x46 | ||
95 | #define TWL4030_REG_VIBRA_PWM_SET 0x47 | ||
96 | #define TWL4030_REG_ANAMIC_GAIN 0x48 | ||
97 | #define TWL4030_REG_MISC_SET_2 0x49 | ||
98 | |||
99 | /* Bitfield Definitions */ | ||
100 | |||
101 | /* TWL4030_CODEC_MODE (0x01) Fields */ | ||
102 | #define TWL4030_APLL_RATE 0xF0 | ||
103 | #define TWL4030_APLL_RATE_8000 0x00 | ||
104 | #define TWL4030_APLL_RATE_11025 0x10 | ||
105 | #define TWL4030_APLL_RATE_12000 0x20 | ||
106 | #define TWL4030_APLL_RATE_16000 0x40 | ||
107 | #define TWL4030_APLL_RATE_22050 0x50 | ||
108 | #define TWL4030_APLL_RATE_24000 0x60 | ||
109 | #define TWL4030_APLL_RATE_32000 0x80 | ||
110 | #define TWL4030_APLL_RATE_44100 0x90 | ||
111 | #define TWL4030_APLL_RATE_48000 0xA0 | ||
112 | #define TWL4030_APLL_RATE_96000 0xE0 | ||
113 | #define TWL4030_SEL_16K 0x08 | ||
114 | #define TWL4030_CODECPDZ 0x02 | ||
115 | #define TWL4030_OPT_MODE 0x01 | ||
116 | #define TWL4030_OPTION_1 (1 << 0) | ||
117 | #define TWL4030_OPTION_2 (0 << 0) | ||
118 | |||
119 | /* TWL4030_OPTION (0x02) Fields */ | ||
120 | #define TWL4030_ATXL1_EN (1 << 0) | ||
121 | #define TWL4030_ATXR1_EN (1 << 1) | ||
122 | #define TWL4030_ATXL2_VTXL_EN (1 << 2) | ||
123 | #define TWL4030_ATXR2_VTXR_EN (1 << 3) | ||
124 | #define TWL4030_ARXL1_VRX_EN (1 << 4) | ||
125 | #define TWL4030_ARXR1_EN (1 << 5) | ||
126 | #define TWL4030_ARXL2_EN (1 << 6) | ||
127 | #define TWL4030_ARXR2_EN (1 << 7) | ||
128 | |||
129 | /* TWL4030_REG_MICBIAS_CTL (0x04) Fields */ | ||
130 | #define TWL4030_MICBIAS2_CTL 0x40 | ||
131 | #define TWL4030_MICBIAS1_CTL 0x20 | ||
132 | #define TWL4030_HSMICBIAS_EN 0x04 | ||
133 | #define TWL4030_MICBIAS2_EN 0x02 | ||
134 | #define TWL4030_MICBIAS1_EN 0x01 | ||
135 | |||
136 | /* ANAMICL (0x05) Fields */ | ||
137 | #define TWL4030_CNCL_OFFSET_START 0x80 | ||
138 | #define TWL4030_OFFSET_CNCL_SEL 0x60 | ||
139 | #define TWL4030_OFFSET_CNCL_SEL_ARX1 0x00 | ||
140 | #define TWL4030_OFFSET_CNCL_SEL_ARX2 0x20 | ||
141 | #define TWL4030_OFFSET_CNCL_SEL_VRX 0x40 | ||
142 | #define TWL4030_OFFSET_CNCL_SEL_ALL 0x60 | ||
143 | #define TWL4030_MICAMPL_EN 0x10 | ||
144 | #define TWL4030_CKMIC_EN 0x08 | ||
145 | #define TWL4030_AUXL_EN 0x04 | ||
146 | #define TWL4030_HSMIC_EN 0x02 | ||
147 | #define TWL4030_MAINMIC_EN 0x01 | ||
148 | |||
149 | /* ANAMICR (0x06) Fields */ | ||
150 | #define TWL4030_MICAMPR_EN 0x10 | ||
151 | #define TWL4030_AUXR_EN 0x04 | ||
152 | #define TWL4030_SUBMIC_EN 0x01 | ||
153 | |||
154 | /* AVADC_CTL (0x07) Fields */ | ||
155 | #define TWL4030_ADCL_EN 0x08 | ||
156 | #define TWL4030_AVADC_CLK_PRIORITY 0x04 | ||
157 | #define TWL4030_ADCR_EN 0x02 | ||
158 | |||
159 | /* TWL4030_REG_ADCMICSEL (0x08) Fields */ | ||
160 | #define TWL4030_DIGMIC1_EN 0x08 | ||
161 | #define TWL4030_TX2IN_SEL 0x04 | ||
162 | #define TWL4030_DIGMIC0_EN 0x02 | ||
163 | #define TWL4030_TX1IN_SEL 0x01 | ||
164 | |||
165 | /* AUDIO_IF (0x0E) Fields */ | ||
166 | #define TWL4030_AIF_SLAVE_EN 0x80 | ||
167 | #define TWL4030_DATA_WIDTH 0x60 | ||
168 | #define TWL4030_DATA_WIDTH_16S_16W 0x00 | ||
169 | #define TWL4030_DATA_WIDTH_32S_16W 0x40 | ||
170 | #define TWL4030_DATA_WIDTH_32S_24W 0x60 | ||
171 | #define TWL4030_AIF_FORMAT 0x18 | ||
172 | #define TWL4030_AIF_FORMAT_CODEC 0x00 | ||
173 | #define TWL4030_AIF_FORMAT_LEFT 0x08 | ||
174 | #define TWL4030_AIF_FORMAT_RIGHT 0x10 | ||
175 | #define TWL4030_AIF_FORMAT_TDM 0x18 | ||
176 | #define TWL4030_AIF_TRI_EN 0x04 | ||
177 | #define TWL4030_CLK256FS_EN 0x02 | ||
178 | #define TWL4030_AIF_EN 0x01 | ||
179 | |||
180 | /* VOICE_IF (0x0F) Fields */ | ||
181 | #define TWL4030_VIF_SLAVE_EN 0x80 | ||
182 | #define TWL4030_VIF_DIN_EN 0x40 | ||
183 | #define TWL4030_VIF_DOUT_EN 0x20 | ||
184 | #define TWL4030_VIF_SWAP 0x10 | ||
185 | #define TWL4030_VIF_FORMAT 0x08 | ||
186 | #define TWL4030_VIF_TRI_EN 0x04 | ||
187 | #define TWL4030_VIF_SUB_EN 0x02 | ||
188 | #define TWL4030_VIF_EN 0x01 | ||
189 | |||
190 | /* EAR_CTL (0x21) */ | ||
191 | #define TWL4030_EAR_GAIN 0x30 | ||
192 | |||
193 | /* HS_GAIN_SET (0x23) Fields */ | ||
194 | #define TWL4030_HSR_GAIN 0x0C | ||
195 | #define TWL4030_HSR_GAIN_PWR_DOWN 0x00 | ||
196 | #define TWL4030_HSR_GAIN_PLUS_6DB 0x04 | ||
197 | #define TWL4030_HSR_GAIN_0DB 0x08 | ||
198 | #define TWL4030_HSR_GAIN_MINUS_6DB 0x0C | ||
199 | #define TWL4030_HSL_GAIN 0x03 | ||
200 | #define TWL4030_HSL_GAIN_PWR_DOWN 0x00 | ||
201 | #define TWL4030_HSL_GAIN_PLUS_6DB 0x01 | ||
202 | #define TWL4030_HSL_GAIN_0DB 0x02 | ||
203 | #define TWL4030_HSL_GAIN_MINUS_6DB 0x03 | ||
204 | |||
205 | /* HS_POPN_SET (0x24) Fields */ | ||
206 | #define TWL4030_VMID_EN 0x40 | ||
207 | #define TWL4030_EXTMUTE 0x20 | ||
208 | #define TWL4030_RAMP_DELAY 0x1C | ||
209 | #define TWL4030_RAMP_DELAY_20MS 0x00 | ||
210 | #define TWL4030_RAMP_DELAY_40MS 0x04 | ||
211 | #define TWL4030_RAMP_DELAY_81MS 0x08 | ||
212 | #define TWL4030_RAMP_DELAY_161MS 0x0C | ||
213 | #define TWL4030_RAMP_DELAY_323MS 0x10 | ||
214 | #define TWL4030_RAMP_DELAY_645MS 0x14 | ||
215 | #define TWL4030_RAMP_DELAY_1291MS 0x18 | ||
216 | #define TWL4030_RAMP_DELAY_2581MS 0x1C | ||
217 | #define TWL4030_RAMP_EN 0x02 | ||
218 | |||
219 | /* PREDL_CTL (0x25) */ | ||
220 | #define TWL4030_PREDL_GAIN 0x30 | ||
221 | |||
222 | /* PREDR_CTL (0x26) */ | ||
223 | #define TWL4030_PREDR_GAIN 0x30 | ||
224 | |||
225 | /* PRECKL_CTL (0x27) */ | ||
226 | #define TWL4030_PRECKL_GAIN 0x30 | ||
227 | |||
228 | /* PRECKR_CTL (0x28) */ | ||
229 | #define TWL4030_PRECKR_GAIN 0x30 | ||
230 | |||
231 | /* HFL_CTL (0x29, 0x2A) Fields */ | ||
232 | #define TWL4030_HF_CTL_HB_EN 0x04 | ||
233 | #define TWL4030_HF_CTL_LOOP_EN 0x08 | ||
234 | #define TWL4030_HF_CTL_RAMP_EN 0x10 | ||
235 | #define TWL4030_HF_CTL_REF_EN 0x20 | ||
236 | |||
237 | /* APLL_CTL (0x3A) Fields */ | ||
238 | #define TWL4030_APLL_EN 0x10 | ||
239 | #define TWL4030_APLL_INFREQ 0x0F | ||
240 | #define TWL4030_APLL_INFREQ_19200KHZ 0x05 | ||
241 | #define TWL4030_APLL_INFREQ_26000KHZ 0x06 | ||
242 | #define TWL4030_APLL_INFREQ_38400KHZ 0x0F | ||
243 | |||
244 | /* REG_MISC_SET_1 (0x3E) Fields */ | ||
245 | #define TWL4030_CLK64_EN 0x80 | ||
246 | #define TWL4030_SCRAMBLE_EN 0x40 | ||
247 | #define TWL4030_FMLOOP_EN 0x20 | ||
248 | #define TWL4030_SMOOTH_ANAVOL_EN 0x02 | ||
249 | #define TWL4030_DIGMIC_LR_SWAP_EN 0x01 | ||
250 | |||
251 | /* VIBRA_CTL (0x45) */ | ||
252 | #define TWL4030_VIBRA_EN 0x01 | ||
253 | #define TWL4030_VIBRA_DIR 0x02 | ||
254 | #define TWL4030_VIBRA_AUDIO_SEL_L1 (0x00 << 2) | ||
255 | #define TWL4030_VIBRA_AUDIO_SEL_R1 (0x01 << 2) | ||
256 | #define TWL4030_VIBRA_AUDIO_SEL_L2 (0x02 << 2) | ||
257 | #define TWL4030_VIBRA_AUDIO_SEL_R2 (0x03 << 2) | ||
258 | #define TWL4030_VIBRA_SEL 0x10 | ||
259 | #define TWL4030_VIBRA_DIR_SEL 0x20 | ||
260 | |||
261 | /* TWL4030 codec resource IDs */ | ||
262 | enum twl4030_codec_res { | ||
263 | TWL4030_CODEC_RES_POWER = 0, | ||
264 | TWL4030_CODEC_RES_APLL, | ||
265 | TWL4030_CODEC_RES_MAX, | ||
266 | }; | ||
267 | |||
268 | int twl4030_codec_disable_resource(enum twl4030_codec_res id); | ||
269 | int twl4030_codec_enable_resource(enum twl4030_codec_res id); | ||
270 | unsigned int twl4030_codec_get_mclk(void); | ||
271 | |||
272 | #endif /* End of __TWL4030_CODEC_H__ */ | ||
diff --git a/include/linux/mfd/ucb1x00.h b/include/linux/mfd/ucb1x00.h new file mode 100644 index 000000000000..aa9c3789bed4 --- /dev/null +++ b/include/linux/mfd/ucb1x00.h | |||
@@ -0,0 +1,258 @@ | |||
1 | /* | ||
2 | * linux/include/mfd/ucb1x00.h | ||
3 | * | ||
4 | * Copyright (C) 2001 Russell King, All Rights Reserved. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License as published by | ||
8 | * the Free Software Foundation; either version 2 of the License. | ||
9 | */ | ||
10 | #ifndef UCB1200_H | ||
11 | #define UCB1200_H | ||
12 | |||
13 | #include <linux/mfd/mcp.h> | ||
14 | #include <linux/gpio.h> | ||
15 | |||
16 | #define UCB_IO_DATA 0x00 | ||
17 | #define UCB_IO_DIR 0x01 | ||
18 | |||
19 | #define UCB_IO_0 (1 << 0) | ||
20 | #define UCB_IO_1 (1 << 1) | ||
21 | #define UCB_IO_2 (1 << 2) | ||
22 | #define UCB_IO_3 (1 << 3) | ||
23 | #define UCB_IO_4 (1 << 4) | ||
24 | #define UCB_IO_5 (1 << 5) | ||
25 | #define UCB_IO_6 (1 << 6) | ||
26 | #define UCB_IO_7 (1 << 7) | ||
27 | #define UCB_IO_8 (1 << 8) | ||
28 | #define UCB_IO_9 (1 << 9) | ||
29 | |||
30 | #define UCB_IE_RIS 0x02 | ||
31 | #define UCB_IE_FAL 0x03 | ||
32 | #define UCB_IE_STATUS 0x04 | ||
33 | #define UCB_IE_CLEAR 0x04 | ||
34 | #define UCB_IE_ADC (1 << 11) | ||
35 | #define UCB_IE_TSPX (1 << 12) | ||
36 | #define UCB_IE_TSMX (1 << 13) | ||
37 | #define UCB_IE_TCLIP (1 << 14) | ||
38 | #define UCB_IE_ACLIP (1 << 15) | ||
39 | |||
40 | #define UCB_IRQ_TSPX 12 | ||
41 | |||
42 | #define UCB_TC_A 0x05 | ||
43 | #define UCB_TC_A_LOOP (1 << 7) /* UCB1200 */ | ||
44 | #define UCB_TC_A_AMPL (1 << 7) /* UCB1300 */ | ||
45 | |||
46 | #define UCB_TC_B 0x06 | ||
47 | #define UCB_TC_B_VOICE_ENA (1 << 3) | ||
48 | #define UCB_TC_B_CLIP (1 << 4) | ||
49 | #define UCB_TC_B_ATT (1 << 6) | ||
50 | #define UCB_TC_B_SIDE_ENA (1 << 11) | ||
51 | #define UCB_TC_B_MUTE (1 << 13) | ||
52 | #define UCB_TC_B_IN_ENA (1 << 14) | ||
53 | #define UCB_TC_B_OUT_ENA (1 << 15) | ||
54 | |||
55 | #define UCB_AC_A 0x07 | ||
56 | #define UCB_AC_B 0x08 | ||
57 | #define UCB_AC_B_LOOP (1 << 8) | ||
58 | #define UCB_AC_B_MUTE (1 << 13) | ||
59 | #define UCB_AC_B_IN_ENA (1 << 14) | ||
60 | #define UCB_AC_B_OUT_ENA (1 << 15) | ||
61 | |||
62 | #define UCB_TS_CR 0x09 | ||
63 | #define UCB_TS_CR_TSMX_POW (1 << 0) | ||
64 | #define UCB_TS_CR_TSPX_POW (1 << 1) | ||
65 | #define UCB_TS_CR_TSMY_POW (1 << 2) | ||
66 | #define UCB_TS_CR_TSPY_POW (1 << 3) | ||
67 | #define UCB_TS_CR_TSMX_GND (1 << 4) | ||
68 | #define UCB_TS_CR_TSPX_GND (1 << 5) | ||
69 | #define UCB_TS_CR_TSMY_GND (1 << 6) | ||
70 | #define UCB_TS_CR_TSPY_GND (1 << 7) | ||
71 | #define UCB_TS_CR_MODE_INT (0 << 8) | ||
72 | #define UCB_TS_CR_MODE_PRES (1 << 8) | ||
73 | #define UCB_TS_CR_MODE_POS (2 << 8) | ||
74 | #define UCB_TS_CR_BIAS_ENA (1 << 11) | ||
75 | #define UCB_TS_CR_TSPX_LOW (1 << 12) | ||
76 | #define UCB_TS_CR_TSMX_LOW (1 << 13) | ||
77 | |||
78 | #define UCB_ADC_CR 0x0a | ||
79 | #define UCB_ADC_SYNC_ENA (1 << 0) | ||
80 | #define UCB_ADC_VREFBYP_CON (1 << 1) | ||
81 | #define UCB_ADC_INP_TSPX (0 << 2) | ||
82 | #define UCB_ADC_INP_TSMX (1 << 2) | ||
83 | #define UCB_ADC_INP_TSPY (2 << 2) | ||
84 | #define UCB_ADC_INP_TSMY (3 << 2) | ||
85 | #define UCB_ADC_INP_AD0 (4 << 2) | ||
86 | #define UCB_ADC_INP_AD1 (5 << 2) | ||
87 | #define UCB_ADC_INP_AD2 (6 << 2) | ||
88 | #define UCB_ADC_INP_AD3 (7 << 2) | ||
89 | #define UCB_ADC_EXT_REF (1 << 5) | ||
90 | #define UCB_ADC_START (1 << 7) | ||
91 | #define UCB_ADC_ENA (1 << 15) | ||
92 | |||
93 | #define UCB_ADC_DATA 0x0b | ||
94 | #define UCB_ADC_DAT_VAL (1 << 15) | ||
95 | #define UCB_ADC_DAT(x) (((x) & 0x7fe0) >> 5) | ||
96 | |||
97 | #define UCB_ID 0x0c | ||
98 | #define UCB_ID_1200 0x1004 | ||
99 | #define UCB_ID_1300 0x1005 | ||
100 | #define UCB_ID_TC35143 0x9712 | ||
101 | |||
102 | #define UCB_MODE 0x0d | ||
103 | #define UCB_MODE_DYN_VFLAG_ENA (1 << 12) | ||
104 | #define UCB_MODE_AUD_OFF_CAN (1 << 13) | ||
105 | |||
106 | |||
107 | struct ucb1x00_irq { | ||
108 | void *devid; | ||
109 | void (*fn)(int, void *); | ||
110 | }; | ||
111 | |||
112 | struct ucb1x00 { | ||
113 | spinlock_t lock; | ||
114 | struct mcp *mcp; | ||
115 | unsigned int irq; | ||
116 | struct semaphore adc_sem; | ||
117 | spinlock_t io_lock; | ||
118 | u16 id; | ||
119 | u16 io_dir; | ||
120 | u16 io_out; | ||
121 | u16 adc_cr; | ||
122 | u16 irq_fal_enbl; | ||
123 | u16 irq_ris_enbl; | ||
124 | struct ucb1x00_irq irq_handler[16]; | ||
125 | struct device dev; | ||
126 | struct list_head node; | ||
127 | struct list_head devs; | ||
128 | struct gpio_chip gpio; | ||
129 | }; | ||
130 | |||
131 | struct ucb1x00_driver; | ||
132 | |||
133 | struct ucb1x00_dev { | ||
134 | struct list_head dev_node; | ||
135 | struct list_head drv_node; | ||
136 | struct ucb1x00 *ucb; | ||
137 | struct ucb1x00_driver *drv; | ||
138 | void *priv; | ||
139 | }; | ||
140 | |||
141 | struct ucb1x00_driver { | ||
142 | struct list_head node; | ||
143 | struct list_head devs; | ||
144 | int (*add)(struct ucb1x00_dev *dev); | ||
145 | void (*remove)(struct ucb1x00_dev *dev); | ||
146 | int (*suspend)(struct ucb1x00_dev *dev, pm_message_t state); | ||
147 | int (*resume)(struct ucb1x00_dev *dev); | ||
148 | }; | ||
149 | |||
150 | #define classdev_to_ucb1x00(cd) container_of(cd, struct ucb1x00, dev) | ||
151 | |||
152 | int ucb1x00_register_driver(struct ucb1x00_driver *); | ||
153 | void ucb1x00_unregister_driver(struct ucb1x00_driver *); | ||
154 | |||
155 | /** | ||
156 | * ucb1x00_clkrate - return the UCB1x00 SIB clock rate | ||
157 | * @ucb: UCB1x00 structure describing chip | ||
158 | * | ||
159 | * Return the SIB clock rate in Hz. | ||
160 | */ | ||
161 | static inline unsigned int ucb1x00_clkrate(struct ucb1x00 *ucb) | ||
162 | { | ||
163 | return mcp_get_sclk_rate(ucb->mcp); | ||
164 | } | ||
165 | |||
166 | /** | ||
167 | * ucb1x00_enable - enable the UCB1x00 SIB clock | ||
168 | * @ucb: UCB1x00 structure describing chip | ||
169 | * | ||
170 | * Enable the SIB clock. This can be called multiple times. | ||
171 | */ | ||
172 | static inline void ucb1x00_enable(struct ucb1x00 *ucb) | ||
173 | { | ||
174 | mcp_enable(ucb->mcp); | ||
175 | } | ||
176 | |||
177 | /** | ||
178 | * ucb1x00_disable - disable the UCB1x00 SIB clock | ||
179 | * @ucb: UCB1x00 structure describing chip | ||
180 | * | ||
181 | * Disable the SIB clock. The SIB clock will only be disabled | ||
182 | * when the number of ucb1x00_enable calls match the number of | ||
183 | * ucb1x00_disable calls. | ||
184 | */ | ||
185 | static inline void ucb1x00_disable(struct ucb1x00 *ucb) | ||
186 | { | ||
187 | mcp_disable(ucb->mcp); | ||
188 | } | ||
189 | |||
190 | /** | ||
191 | * ucb1x00_reg_write - write a UCB1x00 register | ||
192 | * @ucb: UCB1x00 structure describing chip | ||
193 | * @reg: UCB1x00 4-bit register index to write | ||
194 | * @val: UCB1x00 16-bit value to write | ||
195 | * | ||
196 | * Write the UCB1x00 register @reg with value @val. The SIB | ||
197 | * clock must be running for this function to return. | ||
198 | */ | ||
199 | static inline void ucb1x00_reg_write(struct ucb1x00 *ucb, unsigned int reg, unsigned int val) | ||
200 | { | ||
201 | mcp_reg_write(ucb->mcp, reg, val); | ||
202 | } | ||
203 | |||
204 | /** | ||
205 | * ucb1x00_reg_read - read a UCB1x00 register | ||
206 | * @ucb: UCB1x00 structure describing chip | ||
207 | * @reg: UCB1x00 4-bit register index to write | ||
208 | * | ||
209 | * Read the UCB1x00 register @reg and return its value. The SIB | ||
210 | * clock must be running for this function to return. | ||
211 | */ | ||
212 | static inline unsigned int ucb1x00_reg_read(struct ucb1x00 *ucb, unsigned int reg) | ||
213 | { | ||
214 | return mcp_reg_read(ucb->mcp, reg); | ||
215 | } | ||
216 | /** | ||
217 | * ucb1x00_set_audio_divisor - | ||
218 | * @ucb: UCB1x00 structure describing chip | ||
219 | * @div: SIB clock divisor | ||
220 | */ | ||
221 | static inline void ucb1x00_set_audio_divisor(struct ucb1x00 *ucb, unsigned int div) | ||
222 | { | ||
223 | mcp_set_audio_divisor(ucb->mcp, div); | ||
224 | } | ||
225 | |||
226 | /** | ||
227 | * ucb1x00_set_telecom_divisor - | ||
228 | * @ucb: UCB1x00 structure describing chip | ||
229 | * @div: SIB clock divisor | ||
230 | */ | ||
231 | static inline void ucb1x00_set_telecom_divisor(struct ucb1x00 *ucb, unsigned int div) | ||
232 | { | ||
233 | mcp_set_telecom_divisor(ucb->mcp, div); | ||
234 | } | ||
235 | |||
236 | void ucb1x00_io_set_dir(struct ucb1x00 *ucb, unsigned int, unsigned int); | ||
237 | void ucb1x00_io_write(struct ucb1x00 *ucb, unsigned int, unsigned int); | ||
238 | unsigned int ucb1x00_io_read(struct ucb1x00 *ucb); | ||
239 | |||
240 | #define UCB_NOSYNC (0) | ||
241 | #define UCB_SYNC (1) | ||
242 | |||
243 | unsigned int ucb1x00_adc_read(struct ucb1x00 *ucb, int adc_channel, int sync); | ||
244 | void ucb1x00_adc_enable(struct ucb1x00 *ucb); | ||
245 | void ucb1x00_adc_disable(struct ucb1x00 *ucb); | ||
246 | |||
247 | /* | ||
248 | * Which edges of the IRQ do you want to control today? | ||
249 | */ | ||
250 | #define UCB_RISING (1 << 0) | ||
251 | #define UCB_FALLING (1 << 1) | ||
252 | |||
253 | int ucb1x00_hook_irq(struct ucb1x00 *ucb, unsigned int idx, void (*fn)(int, void *), void *devid); | ||
254 | void ucb1x00_enable_irq(struct ucb1x00 *ucb, unsigned int idx, int edges); | ||
255 | void ucb1x00_disable_irq(struct ucb1x00 *ucb, unsigned int idx, int edges); | ||
256 | int ucb1x00_free_irq(struct ucb1x00 *ucb, unsigned int idx, void *devid); | ||
257 | |||
258 | #endif | ||
diff --git a/include/linux/mfd/wm831x/core.h b/include/linux/mfd/wm831x/core.h index 91eb493bf14c..5184b79c700b 100644 --- a/include/linux/mfd/wm831x/core.h +++ b/include/linux/mfd/wm831x/core.h | |||
@@ -16,7 +16,6 @@ | |||
16 | #define __MFD_WM831X_CORE_H__ | 16 | #define __MFD_WM831X_CORE_H__ |
17 | 17 | ||
18 | #include <linux/interrupt.h> | 18 | #include <linux/interrupt.h> |
19 | #include <linux/workqueue.h> | ||
20 | 19 | ||
21 | /* | 20 | /* |
22 | * Register values. | 21 | * Register values. |
@@ -117,6 +116,7 @@ | |||
117 | #define WM831X_DC3_SLEEP_CONTROL 0x4063 | 116 | #define WM831X_DC3_SLEEP_CONTROL 0x4063 |
118 | #define WM831X_DC4_CONTROL 0x4064 | 117 | #define WM831X_DC4_CONTROL 0x4064 |
119 | #define WM831X_DC4_SLEEP_CONTROL 0x4065 | 118 | #define WM831X_DC4_SLEEP_CONTROL 0x4065 |
119 | #define WM832X_DC4_SLEEP_CONTROL 0x4067 | ||
120 | #define WM831X_EPE1_CONTROL 0x4066 | 120 | #define WM831X_EPE1_CONTROL 0x4066 |
121 | #define WM831X_EPE2_CONTROL 0x4067 | 121 | #define WM831X_EPE2_CONTROL 0x4067 |
122 | #define WM831X_LDO1_CONTROL 0x4068 | 122 | #define WM831X_LDO1_CONTROL 0x4068 |
@@ -235,6 +235,8 @@ | |||
235 | 235 | ||
236 | struct regulator_dev; | 236 | struct regulator_dev; |
237 | 237 | ||
238 | #define WM831X_NUM_IRQ_REGS 5 | ||
239 | |||
238 | struct wm831x { | 240 | struct wm831x { |
239 | struct mutex io_lock; | 241 | struct mutex io_lock; |
240 | 242 | ||
@@ -248,10 +250,11 @@ struct wm831x { | |||
248 | 250 | ||
249 | int irq; /* Our chip IRQ */ | 251 | int irq; /* Our chip IRQ */ |
250 | struct mutex irq_lock; | 252 | struct mutex irq_lock; |
251 | struct workqueue_struct *irq_wq; | ||
252 | struct work_struct irq_work; | ||
253 | unsigned int irq_base; | 253 | unsigned int irq_base; |
254 | int irq_masks[5]; | 254 | int irq_masks_cur[WM831X_NUM_IRQ_REGS]; /* Currently active value */ |
255 | int irq_masks_cache[WM831X_NUM_IRQ_REGS]; /* Cached hardware value */ | ||
256 | |||
257 | int num_gpio; | ||
255 | 258 | ||
256 | struct mutex auxadc_lock; | 259 | struct mutex auxadc_lock; |
257 | 260 | ||
@@ -278,12 +281,30 @@ int wm831x_bulk_read(struct wm831x *wm831x, unsigned short reg, | |||
278 | int wm831x_irq_init(struct wm831x *wm831x, int irq); | 281 | int wm831x_irq_init(struct wm831x *wm831x, int irq); |
279 | void wm831x_irq_exit(struct wm831x *wm831x); | 282 | void wm831x_irq_exit(struct wm831x *wm831x); |
280 | 283 | ||
281 | int __must_check wm831x_request_irq(struct wm831x *wm831x, | 284 | static inline int __must_check wm831x_request_irq(struct wm831x *wm831x, |
282 | unsigned int irq, irq_handler_t handler, | 285 | unsigned int irq, |
283 | unsigned long flags, const char *name, | 286 | irq_handler_t handler, |
284 | void *dev); | 287 | unsigned long flags, |
285 | void wm831x_free_irq(struct wm831x *wm831x, unsigned int, void *); | 288 | const char *name, |
286 | void wm831x_disable_irq(struct wm831x *wm831x, int irq); | 289 | void *dev) |
287 | void wm831x_enable_irq(struct wm831x *wm831x, int irq); | 290 | { |
291 | return request_threaded_irq(irq, NULL, handler, flags, name, dev); | ||
292 | } | ||
293 | |||
294 | static inline void wm831x_free_irq(struct wm831x *wm831x, | ||
295 | unsigned int irq, void *dev) | ||
296 | { | ||
297 | free_irq(irq, dev); | ||
298 | } | ||
299 | |||
300 | static inline void wm831x_disable_irq(struct wm831x *wm831x, int irq) | ||
301 | { | ||
302 | disable_irq(irq); | ||
303 | } | ||
304 | |||
305 | static inline void wm831x_enable_irq(struct wm831x *wm831x, int irq) | ||
306 | { | ||
307 | enable_irq(irq); | ||
308 | } | ||
288 | 309 | ||
289 | #endif | 310 | #endif |
diff --git a/include/linux/mfd/wm831x/pdata.h b/include/linux/mfd/wm831x/pdata.h index 90d820260aad..415c228743d5 100644 --- a/include/linux/mfd/wm831x/pdata.h +++ b/include/linux/mfd/wm831x/pdata.h | |||
@@ -91,6 +91,7 @@ struct wm831x_pdata { | |||
91 | /** Called after subdevices are set up */ | 91 | /** Called after subdevices are set up */ |
92 | int (*post_init)(struct wm831x *wm831x); | 92 | int (*post_init)(struct wm831x *wm831x); |
93 | 93 | ||
94 | int irq_base; | ||
94 | int gpio_base; | 95 | int gpio_base; |
95 | struct wm831x_backlight_pdata *backlight; | 96 | struct wm831x_backlight_pdata *backlight; |
96 | struct wm831x_backup_pdata *backup; | 97 | struct wm831x_backup_pdata *backup; |
diff --git a/include/linux/mfd/wm831x/regulator.h b/include/linux/mfd/wm831x/regulator.h index f95466343fb2..955d30fc6a27 100644 --- a/include/linux/mfd/wm831x/regulator.h +++ b/include/linux/mfd/wm831x/regulator.h | |||
@@ -1212,7 +1212,7 @@ | |||
1212 | #define WM831X_LDO1_OK_SHIFT 0 /* LDO1_OK */ | 1212 | #define WM831X_LDO1_OK_SHIFT 0 /* LDO1_OK */ |
1213 | #define WM831X_LDO1_OK_WIDTH 1 /* LDO1_OK */ | 1213 | #define WM831X_LDO1_OK_WIDTH 1 /* LDO1_OK */ |
1214 | 1214 | ||
1215 | #define WM831X_ISINK_MAX_ISEL 56 | 1215 | #define WM831X_ISINK_MAX_ISEL 55 |
1216 | extern int wm831x_isinkv_values[WM831X_ISINK_MAX_ISEL]; | 1216 | extern int wm831x_isinkv_values[WM831X_ISINK_MAX_ISEL + 1]; |
1217 | 1217 | ||
1218 | #endif | 1218 | #endif |
diff --git a/include/linux/mfd/wm8350/core.h b/include/linux/mfd/wm8350/core.h index 1d595de6a055..43868899bf49 100644 --- a/include/linux/mfd/wm8350/core.h +++ b/include/linux/mfd/wm8350/core.h | |||
@@ -15,7 +15,7 @@ | |||
15 | 15 | ||
16 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
17 | #include <linux/mutex.h> | 17 | #include <linux/mutex.h> |
18 | #include <linux/workqueue.h> | 18 | #include <linux/interrupt.h> |
19 | 19 | ||
20 | #include <linux/mfd/wm8350/audio.h> | 20 | #include <linux/mfd/wm8350/audio.h> |
21 | #include <linux/mfd/wm8350/gpio.h> | 21 | #include <linux/mfd/wm8350/gpio.h> |
@@ -601,7 +601,7 @@ extern const u16 wm8352_mode3_defaults[]; | |||
601 | struct wm8350; | 601 | struct wm8350; |
602 | 602 | ||
603 | struct wm8350_irq { | 603 | struct wm8350_irq { |
604 | void (*handler) (struct wm8350 *, int, void *); | 604 | irq_handler_t handler; |
605 | void *data; | 605 | void *data; |
606 | }; | 606 | }; |
607 | 607 | ||
@@ -646,10 +646,12 @@ struct wm8350 { | |||
646 | * @init: Function called during driver initialisation. Should be | 646 | * @init: Function called during driver initialisation. Should be |
647 | * used by the platform to configure GPIO functions and similar. | 647 | * used by the platform to configure GPIO functions and similar. |
648 | * @irq_high: Set if WM8350 IRQ is active high. | 648 | * @irq_high: Set if WM8350 IRQ is active high. |
649 | * @irq_base: Base IRQ for genirq (not currently used). | ||
649 | */ | 650 | */ |
650 | struct wm8350_platform_data { | 651 | struct wm8350_platform_data { |
651 | int (*init)(struct wm8350 *wm8350); | 652 | int (*init)(struct wm8350 *wm8350); |
652 | int irq_high; | 653 | int irq_high; |
654 | int irq_base; | ||
653 | }; | 655 | }; |
654 | 656 | ||
655 | 657 | ||
@@ -676,11 +678,13 @@ int wm8350_block_write(struct wm8350 *wm8350, int reg, int size, u16 *src); | |||
676 | * WM8350 internal interrupts | 678 | * WM8350 internal interrupts |
677 | */ | 679 | */ |
678 | int wm8350_register_irq(struct wm8350 *wm8350, int irq, | 680 | int wm8350_register_irq(struct wm8350 *wm8350, int irq, |
679 | void (*handler) (struct wm8350 *, int, void *), | 681 | irq_handler_t handler, unsigned long flags, |
680 | void *data); | 682 | const char *name, void *data); |
681 | int wm8350_free_irq(struct wm8350 *wm8350, int irq); | 683 | int wm8350_free_irq(struct wm8350 *wm8350, int irq); |
682 | int wm8350_mask_irq(struct wm8350 *wm8350, int irq); | 684 | int wm8350_mask_irq(struct wm8350 *wm8350, int irq); |
683 | int wm8350_unmask_irq(struct wm8350 *wm8350, int irq); | 685 | int wm8350_unmask_irq(struct wm8350 *wm8350, int irq); |
684 | 686 | int wm8350_irq_init(struct wm8350 *wm8350, int irq, | |
687 | struct wm8350_platform_data *pdata); | ||
688 | int wm8350_irq_exit(struct wm8350 *wm8350); | ||
685 | 689 | ||
686 | #endif | 690 | #endif |
diff --git a/include/linux/mfd/wm8350/gpio.h b/include/linux/mfd/wm8350/gpio.h index ed91e8f5d298..71af3d6ebe9d 100644 --- a/include/linux/mfd/wm8350/gpio.h +++ b/include/linux/mfd/wm8350/gpio.h | |||
@@ -173,6 +173,24 @@ | |||
173 | #define WM8350_GPIO_DEBOUNCE_ON 1 | 173 | #define WM8350_GPIO_DEBOUNCE_ON 1 |
174 | 174 | ||
175 | /* | 175 | /* |
176 | * R30 (0x1E) - GPIO Interrupt Status | ||
177 | */ | ||
178 | #define WM8350_GP12_EINT 0x1000 | ||
179 | #define WM8350_GP11_EINT 0x0800 | ||
180 | #define WM8350_GP10_EINT 0x0400 | ||
181 | #define WM8350_GP9_EINT 0x0200 | ||
182 | #define WM8350_GP8_EINT 0x0100 | ||
183 | #define WM8350_GP7_EINT 0x0080 | ||
184 | #define WM8350_GP6_EINT 0x0040 | ||
185 | #define WM8350_GP5_EINT 0x0020 | ||
186 | #define WM8350_GP4_EINT 0x0010 | ||
187 | #define WM8350_GP3_EINT 0x0008 | ||
188 | #define WM8350_GP2_EINT 0x0004 | ||
189 | #define WM8350_GP1_EINT 0x0002 | ||
190 | #define WM8350_GP0_EINT 0x0001 | ||
191 | |||
192 | |||
193 | /* | ||
176 | * R128 (0x80) - GPIO Debounce | 194 | * R128 (0x80) - GPIO Debounce |
177 | */ | 195 | */ |
178 | #define WM8350_GP12_DB 0x1000 | 196 | #define WM8350_GP12_DB 0x1000 |