diff options
-rw-r--r-- | arch/arm/mach-s3c6410/Kconfig | 17 | ||||
-rw-r--r-- | arch/arm/mach-s3c6410/mach-smdk6410.c | 131 |
2 files changed, 148 insertions, 0 deletions
diff --git a/arch/arm/mach-s3c6410/Kconfig b/arch/arm/mach-s3c6410/Kconfig index 1d5010070027..ffa4974efddf 100644 --- a/arch/arm/mach-s3c6410/Kconfig +++ b/arch/arm/mach-s3c6410/Kconfig | |||
@@ -60,3 +60,20 @@ config SMDK6410_SD_CH1 | |||
60 | channels 0 and 1 are the same. | 60 | channels 0 and 1 are the same. |
61 | 61 | ||
62 | endchoice | 62 | endchoice |
63 | |||
64 | config SMDK6410_WM1190_EV1 | ||
65 | bool "Support Wolfson Microelectronics 1190-EV1 PMIC card" | ||
66 | depends on MACH_SMDK6410 | ||
67 | select REGULATOR | ||
68 | select REGULATOR_WM8350 | ||
69 | select MFD_WM8350_I2C | ||
70 | select MFD_WM8350_CONFIG_MODE_0 | ||
71 | select MFD_WM8350_CONFIG_MODE_3 | ||
72 | select MFD_WM8352_CONFIG_MODE_0 | ||
73 | help | ||
74 | The Wolfson Microelectronics 1190-EV1 is a WM835x based PMIC | ||
75 | and audio daughtercard for the Samsung SMDK6410 reference | ||
76 | platform. Enabling this option will build support for this | ||
77 | module into the kernel. The presence of the module will be | ||
78 | detected at runtime so the the resulting kernel can be used | ||
79 | with or without the 1190-EV1 fitted. | ||
diff --git a/arch/arm/mach-s3c6410/mach-smdk6410.c b/arch/arm/mach-s3c6410/mach-smdk6410.c index dfd84d00f8d0..466dee0954f4 100644 --- a/arch/arm/mach-s3c6410/mach-smdk6410.c +++ b/arch/arm/mach-s3c6410/mach-smdk6410.c | |||
@@ -26,6 +26,11 @@ | |||
26 | #include <linux/delay.h> | 26 | #include <linux/delay.h> |
27 | #include <linux/smsc911x.h> | 27 | #include <linux/smsc911x.h> |
28 | 28 | ||
29 | #ifdef CONFIG_SMDK6410_WM1190_EV1 | ||
30 | #include <linux/mfd/wm8350/core.h> | ||
31 | #include <linux/mfd/wm8350/pmic.h> | ||
32 | #endif | ||
33 | |||
29 | #include <video/platform_lcd.h> | 34 | #include <video/platform_lcd.h> |
30 | 35 | ||
31 | #include <asm/mach/arch.h> | 36 | #include <asm/mach/arch.h> |
@@ -182,9 +187,135 @@ static struct platform_device *smdk6410_devices[] __initdata = { | |||
182 | &smdk6410_smsc911x, | 187 | &smdk6410_smsc911x, |
183 | }; | 188 | }; |
184 | 189 | ||
190 | #ifdef CONFIG_SMDK6410_WM1190_EV1 | ||
191 | /* S3C64xx internal logic & PLL */ | ||
192 | static struct regulator_init_data wm8350_dcdc1_data = { | ||
193 | .constraints = { | ||
194 | .name = "PVDD_INT/PVDD_PLL", | ||
195 | .min_uV = 1200000, | ||
196 | .max_uV = 1200000, | ||
197 | .always_on = 1, | ||
198 | .apply_uV = 1, | ||
199 | }, | ||
200 | }; | ||
201 | |||
202 | /* Memory */ | ||
203 | static struct regulator_init_data wm8350_dcdc3_data = { | ||
204 | .constraints = { | ||
205 | .name = "PVDD_MEM", | ||
206 | .min_uV = 1800000, | ||
207 | .max_uV = 1800000, | ||
208 | .always_on = 1, | ||
209 | .state_mem = { | ||
210 | .uV = 1800000, | ||
211 | .mode = REGULATOR_MODE_NORMAL, | ||
212 | .enabled = 1, | ||
213 | }, | ||
214 | .initial_state = PM_SUSPEND_MEM, | ||
215 | }, | ||
216 | }; | ||
217 | |||
218 | /* USB, EXT, PCM, ADC/DAC, USB, MMC */ | ||
219 | static struct regulator_init_data wm8350_dcdc4_data = { | ||
220 | .constraints = { | ||
221 | .name = "PVDD_HI/PVDD_EXT/PVDD_SYS/PVCCM2MTV", | ||
222 | .min_uV = 3000000, | ||
223 | .max_uV = 3000000, | ||
224 | .always_on = 1, | ||
225 | }, | ||
226 | }; | ||
227 | |||
228 | /* ARM core */ | ||
229 | static struct regulator_init_data wm8350_dcdc6_data = { | ||
230 | .constraints = { | ||
231 | .name = "PVDD_ARM", | ||
232 | .min_uV = 1000000, | ||
233 | .max_uV = 1300000, | ||
234 | .always_on = 1, | ||
235 | }, | ||
236 | }; | ||
237 | |||
238 | /* Alive */ | ||
239 | static struct regulator_init_data wm8350_ldo1_data = { | ||
240 | .constraints = { | ||
241 | .name = "PVDD_ALIVE", | ||
242 | .min_uV = 1200000, | ||
243 | .max_uV = 1200000, | ||
244 | .always_on = 1, | ||
245 | .apply_uV = 1, | ||
246 | }, | ||
247 | }; | ||
248 | |||
249 | /* OTG */ | ||
250 | static struct regulator_init_data wm8350_ldo2_data = { | ||
251 | .constraints = { | ||
252 | .name = "PVDD_OTG", | ||
253 | .min_uV = 3300000, | ||
254 | .max_uV = 3300000, | ||
255 | }, | ||
256 | }; | ||
257 | |||
258 | /* LCD */ | ||
259 | static struct regulator_init_data wm8350_ldo3_data = { | ||
260 | .constraints = { | ||
261 | .name = "PVDD_LCD", | ||
262 | .min_uV = 3000000, | ||
263 | .max_uV = 3000000, | ||
264 | }, | ||
265 | }; | ||
266 | |||
267 | /* OTGi/1190-EV1 HPVDD & AVDD */ | ||
268 | static struct regulator_init_data wm8350_ldo4_data = { | ||
269 | .constraints = { | ||
270 | .name = "PVDD_OTGI/HPVDD/AVDD", | ||
271 | .min_uV = 1200000, | ||
272 | .max_uV = 1200000, | ||
273 | .apply_uV = 1, | ||
274 | }, | ||
275 | }; | ||
276 | |||
277 | static struct { | ||
278 | int regulator; | ||
279 | struct regulator_init_data *initdata; | ||
280 | } wm1190_regulators[] = { | ||
281 | { WM8350_DCDC_1, &wm8350_dcdc1_data }, | ||
282 | { WM8350_DCDC_3, &wm8350_dcdc3_data }, | ||
283 | { WM8350_DCDC_4, &wm8350_dcdc4_data }, | ||
284 | { WM8350_DCDC_6, &wm8350_dcdc6_data }, | ||
285 | { WM8350_LDO_1, &wm8350_ldo1_data }, | ||
286 | { WM8350_LDO_2, &wm8350_ldo2_data }, | ||
287 | { WM8350_LDO_3, &wm8350_ldo3_data }, | ||
288 | { WM8350_LDO_4, &wm8350_ldo4_data }, | ||
289 | }; | ||
290 | |||
291 | static int __init smdk6410_wm8350_init(struct wm8350 *wm8350) | ||
292 | { | ||
293 | int i; | ||
294 | |||
295 | /* Instantiate the regulators */ | ||
296 | for (i = 0; i < ARRAY_SIZE(wm1190_regulators); i++) | ||
297 | wm8350_register_regulator(wm8350, | ||
298 | wm1190_regulators[i].regulator, | ||
299 | wm1190_regulators[i].initdata); | ||
300 | |||
301 | return 0; | ||
302 | } | ||
303 | |||
304 | static struct wm8350_platform_data __initdata smdk6410_wm8350_pdata = { | ||
305 | .init = smdk6410_wm8350_init, | ||
306 | }; | ||
307 | #endif | ||
308 | |||
185 | static struct i2c_board_info i2c_devs0[] __initdata = { | 309 | static struct i2c_board_info i2c_devs0[] __initdata = { |
186 | { I2C_BOARD_INFO("24c08", 0x50), }, | 310 | { I2C_BOARD_INFO("24c08", 0x50), }, |
187 | { I2C_BOARD_INFO("wm8580", 0x1b), }, | 311 | { I2C_BOARD_INFO("wm8580", 0x1b), }, |
312 | |||
313 | #ifdef CONFIG_SMDK6410_WM1190_EV1 | ||
314 | { I2C_BOARD_INFO("wm8350", 0x1a), | ||
315 | .platform_data = &smdk6410_wm8350_pdata, | ||
316 | .irq = S3C_EINT(12), | ||
317 | }, | ||
318 | #endif | ||
188 | }; | 319 | }; |
189 | 320 | ||
190 | static struct i2c_board_info i2c_devs1[] __initdata = { | 321 | static struct i2c_board_info i2c_devs1[] __initdata = { |