1 /*
2  * arch/arm/mach-pxa/raumfeld.c
3  *
4  * Support for the following Raumfeld devices:
5  *
6  * 	* Controller
7  *  	* Connector
8  *  	* Speaker S/M
9  *
10  * See http://www.raumfeld.com for details.
11  *
12  * Copyright (c) 2009 Daniel Mack <daniel@caiaq.de>
13  *
14  * This program is free software; you can redistribute it and/or modify
15  * it under the terms of the GNU General Public License version 2 as
16  * published by the Free Software Foundation.
17  */
18 
19 #include <linux/init.h>
20 #include <linux/kernel.h>
21 #include <linux/platform_device.h>
22 #include <linux/interrupt.h>
23 #include <linux/gpio.h>
24 #include <linux/smsc911x.h>
25 #include <linux/input.h>
26 #include <linux/rotary_encoder.h>
27 #include <linux/gpio_keys.h>
28 #include <linux/input/eeti_ts.h>
29 #include <linux/leds.h>
30 #include <linux/w1-gpio.h>
31 #include <linux/sched.h>
32 #include <linux/pwm_backlight.h>
33 #include <linux/i2c.h>
34 #include <linux/i2c/pxa-i2c.h>
35 #include <linux/spi/spi.h>
36 #include <linux/spi/spi_gpio.h>
37 #include <linux/lis3lv02d.h>
38 #include <linux/pda_power.h>
39 #include <linux/power_supply.h>
40 #include <linux/regulator/max8660.h>
41 #include <linux/regulator/machine.h>
42 #include <linux/regulator/fixed.h>
43 #include <linux/regulator/consumer.h>
44 #include <linux/delay.h>
45 
46 #include <asm/mach-types.h>
47 #include <asm/mach/arch.h>
48 
49 #include <mach/pxa300.h>
50 #include <mach/ohci.h>
51 #include <mach/pxafb.h>
52 #include <mach/mmc.h>
53 #include <plat/pxa3xx_nand.h>
54 
55 #include "generic.h"
56 #include "devices.h"
57 #include "clock.h"
58 
59 /* common GPIO	definitions */
60 
61 /* inputs */
62 #define GPIO_ON_OFF		(14)
63 #define GPIO_VOLENC_A		(19)
64 #define GPIO_VOLENC_B		(20)
65 #define GPIO_CHARGE_DONE	(23)
66 #define GPIO_CHARGE_IND		(27)
67 #define GPIO_TOUCH_IRQ		(32)
68 #define GPIO_ETH_IRQ		(40)
69 #define GPIO_SPI_MISO		(98)
70 #define GPIO_ACCEL_IRQ		(104)
71 #define GPIO_RESCUE_BOOT	(115)
72 #define GPIO_DOCK_DETECT	(116)
73 #define GPIO_KEY1		(117)
74 #define GPIO_KEY2		(118)
75 #define GPIO_KEY3		(119)
76 #define GPIO_CHARGE_USB_OK	(112)
77 #define GPIO_CHARGE_DC_OK	(101)
78 #define GPIO_CHARGE_USB_SUSP	(102)
79 
80 /* outputs */
81 #define GPIO_SHUTDOWN_SUPPLY	(16)
82 #define GPIO_SHUTDOWN_BATT	(18)
83 #define GPIO_CHRG_PEN2		(31)
84 #define GPIO_TFT_VA_EN		(33)
85 #define GPIO_SPDIF_CS		(34)
86 #define GPIO_LED2		(35)
87 #define GPIO_LED1		(36)
88 #define GPIO_SPDIF_RESET	(38)
89 #define GPIO_SPI_CLK		(95)
90 #define GPIO_MCLK_DAC_CS	(96)
91 #define GPIO_SPI_MOSI		(97)
92 #define GPIO_W1_PULLUP_ENABLE	(105)
93 #define GPIO_DISPLAY_ENABLE	(106)
94 #define GPIO_MCLK_RESET		(111)
95 #define GPIO_W2W_RESET		(113)
96 #define GPIO_W2W_PDN		(114)
97 #define GPIO_CODEC_RESET	(120)
98 #define GPIO_AUDIO_VA_ENABLE	(124)
99 #define GPIO_ACCEL_CS		(125)
100 #define GPIO_ONE_WIRE		(126)
101 
102 /*
103  * GPIO configurations
104  */
105 static mfp_cfg_t raumfeld_controller_pin_config[] __initdata = {
106 	/* UART1 */
107 	GPIO77_UART1_RXD,
108 	GPIO78_UART1_TXD,
109 	GPIO79_UART1_CTS,
110 	GPIO81_UART1_DSR,
111 	GPIO83_UART1_DTR,
112 	GPIO84_UART1_RTS,
113 
114 	/* UART3 */
115 	GPIO110_UART3_RXD,
116 
117 	/* USB Host */
118 	GPIO0_2_USBH_PEN,
119 	GPIO1_2_USBH_PWR,
120 
121 	/* I2C */
122 	GPIO21_I2C_SCL | MFP_LPM_FLOAT | MFP_PULL_FLOAT,
123 	GPIO22_I2C_SDA | MFP_LPM_FLOAT | MFP_PULL_FLOAT,
124 
125 	/* SPI */
126 	GPIO34_GPIO,	/* SPDIF_CS */
127 	GPIO96_GPIO,	/* MCLK_CS */
128 	GPIO125_GPIO,	/* ACCEL_CS */
129 
130 	/* MMC */
131 	GPIO3_MMC1_DAT0,
132 	GPIO4_MMC1_DAT1,
133 	GPIO5_MMC1_DAT2,
134 	GPIO6_MMC1_DAT3,
135 	GPIO7_MMC1_CLK,
136 	GPIO8_MMC1_CMD,
137 
138 	/* One-wire */
139 	GPIO126_GPIO | MFP_LPM_FLOAT,
140 	GPIO105_GPIO | MFP_PULL_LOW | MFP_LPM_PULL_LOW,
141 
142 	/* CHRG_USB_OK */
143 	GPIO101_GPIO | MFP_PULL_HIGH,
144 	/* CHRG_USB_OK */
145 	GPIO112_GPIO | MFP_PULL_HIGH,
146 	/* CHRG_USB_SUSP */
147 	GPIO102_GPIO,
148 	/* DISPLAY_ENABLE */
149 	GPIO106_GPIO,
150 	/* DOCK_DETECT */
151 	GPIO116_GPIO | MFP_LPM_FLOAT | MFP_PULL_FLOAT,
152 
153 	/* LCD */
154 	GPIO54_LCD_LDD_0,
155 	GPIO55_LCD_LDD_1,
156 	GPIO56_LCD_LDD_2,
157 	GPIO57_LCD_LDD_3,
158 	GPIO58_LCD_LDD_4,
159 	GPIO59_LCD_LDD_5,
160 	GPIO60_LCD_LDD_6,
161 	GPIO61_LCD_LDD_7,
162 	GPIO62_LCD_LDD_8,
163 	GPIO63_LCD_LDD_9,
164 	GPIO64_LCD_LDD_10,
165 	GPIO65_LCD_LDD_11,
166 	GPIO66_LCD_LDD_12,
167 	GPIO67_LCD_LDD_13,
168 	GPIO68_LCD_LDD_14,
169 	GPIO69_LCD_LDD_15,
170 	GPIO70_LCD_LDD_16,
171 	GPIO71_LCD_LDD_17,
172 	GPIO72_LCD_FCLK,
173 	GPIO73_LCD_LCLK,
174 	GPIO74_LCD_PCLK,
175 	GPIO75_LCD_BIAS,
176 };
177 
178 static mfp_cfg_t raumfeld_connector_pin_config[] __initdata = {
179 	/* UART1 */
180 	GPIO77_UART1_RXD,
181 	GPIO78_UART1_TXD,
182 	GPIO79_UART1_CTS,
183 	GPIO81_UART1_DSR,
184 	GPIO83_UART1_DTR,
185 	GPIO84_UART1_RTS,
186 
187 	/* UART3 */
188 	GPIO110_UART3_RXD,
189 
190 	/* USB Host */
191 	GPIO0_2_USBH_PEN,
192 	GPIO1_2_USBH_PWR,
193 
194 	/* I2C */
195 	GPIO21_I2C_SCL | MFP_LPM_FLOAT | MFP_PULL_FLOAT,
196 	GPIO22_I2C_SDA | MFP_LPM_FLOAT | MFP_PULL_FLOAT,
197 
198 	/* SPI */
199 	GPIO34_GPIO,	/* SPDIF_CS */
200 	GPIO96_GPIO,	/* MCLK_CS */
201 	GPIO125_GPIO,	/* ACCEL_CS */
202 
203 	/* MMC */
204 	GPIO3_MMC1_DAT0,
205 	GPIO4_MMC1_DAT1,
206 	GPIO5_MMC1_DAT2,
207 	GPIO6_MMC1_DAT3,
208 	GPIO7_MMC1_CLK,
209 	GPIO8_MMC1_CMD,
210 
211 	/* Ethernet */
212 	GPIO1_nCS2,			/* CS */
213 	GPIO40_GPIO | MFP_PULL_HIGH,	/* IRQ */
214 
215 	/* SSP for I2S */
216 	GPIO85_SSP1_SCLK,
217 	GPIO89_SSP1_EXTCLK,
218 	GPIO86_SSP1_FRM,
219 	GPIO87_SSP1_TXD,
220 	GPIO88_SSP1_RXD,
221 	GPIO90_SSP1_SYSCLK,
222 
223 	/* SSP2 for S/PDIF */
224 	GPIO25_SSP2_SCLK,
225 	GPIO26_SSP2_FRM,
226 	GPIO27_SSP2_TXD,
227 	GPIO29_SSP2_EXTCLK,
228 
229 	/* LEDs */
230 	GPIO35_GPIO | MFP_LPM_PULL_LOW,
231 	GPIO36_GPIO | MFP_LPM_DRIVE_HIGH,
232 };
233 
234 static mfp_cfg_t raumfeld_speaker_pin_config[] __initdata = {
235 	/* UART1 */
236 	GPIO77_UART1_RXD,
237 	GPIO78_UART1_TXD,
238 	GPIO79_UART1_CTS,
239 	GPIO81_UART1_DSR,
240 	GPIO83_UART1_DTR,
241 	GPIO84_UART1_RTS,
242 
243 	/* UART3 */
244 	GPIO110_UART3_RXD,
245 
246 	/* USB Host */
247 	GPIO0_2_USBH_PEN,
248 	GPIO1_2_USBH_PWR,
249 
250 	/* I2C */
251 	GPIO21_I2C_SCL | MFP_LPM_FLOAT | MFP_PULL_FLOAT,
252 	GPIO22_I2C_SDA | MFP_LPM_FLOAT | MFP_PULL_FLOAT,
253 
254 	/* SPI */
255 	GPIO34_GPIO,	/* SPDIF_CS */
256 	GPIO96_GPIO,	/* MCLK_CS */
257 	GPIO125_GPIO,	/* ACCEL_CS */
258 
259 	/* MMC */
260 	GPIO3_MMC1_DAT0,
261 	GPIO4_MMC1_DAT1,
262 	GPIO5_MMC1_DAT2,
263 	GPIO6_MMC1_DAT3,
264 	GPIO7_MMC1_CLK,
265 	GPIO8_MMC1_CMD,
266 
267 	/* Ethernet */
268 	GPIO1_nCS2,			/* CS */
269 	GPIO40_GPIO | MFP_PULL_HIGH,	/* IRQ */
270 
271 	/* SSP for I2S */
272 	GPIO85_SSP1_SCLK,
273 	GPIO89_SSP1_EXTCLK,
274 	GPIO86_SSP1_FRM,
275 	GPIO87_SSP1_TXD,
276 	GPIO88_SSP1_RXD,
277 	GPIO90_SSP1_SYSCLK,
278 
279 	/* LEDs */
280 	GPIO35_GPIO | MFP_LPM_PULL_LOW,
281 	GPIO36_GPIO | MFP_LPM_DRIVE_HIGH,
282 };
283 
284 /*
285  * SMSC LAN9220 Ethernet
286  */
287 
288 static struct resource smc91x_resources[] = {
289 	{
290 		.start	= PXA3xx_CS2_PHYS,
291 		.end	= PXA3xx_CS2_PHYS + 0xfffff,
292 		.flags	= IORESOURCE_MEM,
293 	},
294 	{
295 		.start	= PXA_GPIO_TO_IRQ(GPIO_ETH_IRQ),
296 		.end	= PXA_GPIO_TO_IRQ(GPIO_ETH_IRQ),
297 		.flags	= IORESOURCE_IRQ | IRQF_TRIGGER_FALLING,
298 	}
299 };
300 
301 static struct smsc911x_platform_config raumfeld_smsc911x_config = {
302 	.phy_interface	= PHY_INTERFACE_MODE_MII,
303 	.irq_polarity	= SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
304 	.irq_type	= SMSC911X_IRQ_TYPE_OPEN_DRAIN,
305 	.flags		= SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
306 };
307 
308 static struct platform_device smc91x_device = {
309 	.name		= "smsc911x",
310 	.id		= -1,
311 	.num_resources	= ARRAY_SIZE(smc91x_resources),
312 	.resource	= smc91x_resources,
313 	.dev		= {
314 		.platform_data = &raumfeld_smsc911x_config,
315 	}
316 };
317 
318 /**
319  * NAND
320  */
321 
322 static struct mtd_partition raumfeld_nand_partitions[] = {
323 	{
324 		.name		= "Bootloader",
325 		.offset		= 0,
326 		.size		= 0xa0000,
327 		.mask_flags	= MTD_WRITEABLE, /* force read-only */
328 	},
329 	{
330 		.name		= "BootloaderEnvironment",
331 		.offset		= 0xa0000,
332 		.size		= 0x20000,
333 	},
334 	{
335 		.name		= "BootloaderSplashScreen",
336 		.offset		= 0xc0000,
337 		.size		= 0x60000,
338 	},
339 	{
340 		.name		= "UBI",
341 		.offset		= 0x120000,
342 		.size		= MTDPART_SIZ_FULL,
343 	},
344 };
345 
346 static struct pxa3xx_nand_platform_data raumfeld_nand_info = {
347 	.enable_arbiter	= 1,
348 	.keep_config	= 1,
349 	.num_cs		= 1,
350 	.parts[0]	= raumfeld_nand_partitions,
351 	.nr_parts[0]	= ARRAY_SIZE(raumfeld_nand_partitions),
352 };
353 
354 /**
355  * USB (OHCI) support
356  */
357 
358 static struct pxaohci_platform_data raumfeld_ohci_info = {
359 	.port_mode      = PMM_GLOBAL_MODE,
360 	.flags		= ENABLE_PORT1,
361 };
362 
363 /**
364  * Rotary encoder input device
365  */
366 
367 static struct rotary_encoder_platform_data raumfeld_rotary_encoder_info = {
368 	.steps		= 24,
369 	.axis		= REL_X,
370 	.relative_axis	= 1,
371 	.gpio_a		= GPIO_VOLENC_A,
372 	.gpio_b		= GPIO_VOLENC_B,
373 	.inverted_a	= 1,
374 	.inverted_b	= 0,
375 };
376 
377 static struct platform_device rotary_encoder_device = {
378 	.name		= "rotary-encoder",
379 	.id		= 0,
380 	.dev		= {
381 		.platform_data = &raumfeld_rotary_encoder_info,
382 	}
383 };
384 
385 /**
386  * GPIO buttons
387  */
388 
389 static struct gpio_keys_button gpio_keys_button[] = {
390 	{
391 		.code			= KEY_F1,
392 		.type			= EV_KEY,
393 		.gpio			= GPIO_KEY1,
394 		.active_low		= 1,
395 		.wakeup			= 0,
396 		.debounce_interval	= 5, /* ms */
397 		.desc			= "Button 1",
398 	},
399 	{
400 		.code			= KEY_F2,
401 		.type			= EV_KEY,
402 		.gpio			= GPIO_KEY2,
403 		.active_low		= 1,
404 		.wakeup			= 0,
405 		.debounce_interval	= 5, /* ms */
406 		.desc			= "Button 2",
407 	},
408 	{
409 		.code			= KEY_F3,
410 		.type			= EV_KEY,
411 		.gpio			= GPIO_KEY3,
412 		.active_low		= 1,
413 		.wakeup			= 0,
414 		.debounce_interval	= 5, /* ms */
415 		.desc			= "Button 3",
416 	},
417 	{
418 		.code			= KEY_F4,
419 		.type			= EV_KEY,
420 		.gpio			= GPIO_RESCUE_BOOT,
421 		.active_low		= 0,
422 		.wakeup			= 0,
423 		.debounce_interval	= 5, /* ms */
424 		.desc			= "rescue boot button",
425 	},
426 	{
427 		.code			= KEY_F5,
428 		.type			= EV_KEY,
429 		.gpio			= GPIO_DOCK_DETECT,
430 		.active_low		= 1,
431 		.wakeup			= 0,
432 		.debounce_interval	= 5, /* ms */
433 		.desc			= "dock detect",
434 	},
435 	{
436 		.code			= KEY_F6,
437 		.type			= EV_KEY,
438 		.gpio			= GPIO_ON_OFF,
439 		.active_low		= 0,
440 		.wakeup			= 0,
441 		.debounce_interval	= 5, /* ms */
442 		.desc			= "on_off button",
443 	},
444 };
445 
446 static struct gpio_keys_platform_data gpio_keys_platform_data = {
447 	.buttons	= gpio_keys_button,
448 	.nbuttons	= ARRAY_SIZE(gpio_keys_button),
449 	.rep		= 0,
450 };
451 
452 static struct platform_device raumfeld_gpio_keys_device = {
453 	.name	= "gpio-keys",
454 	.id	= -1,
455 	.dev 	= {
456 		.platform_data	= &gpio_keys_platform_data,
457 	}
458 };
459 
460 /**
461  * GPIO LEDs
462  */
463 
464 static struct gpio_led raumfeld_leds[] = {
465 	{
466 		.name		= "raumfeld:1",
467 		.gpio		= GPIO_LED1,
468 		.active_low	= 1,
469 		.default_state	= LEDS_GPIO_DEFSTATE_ON,
470 	},
471 	{
472 		.name		= "raumfeld:2",
473 		.gpio		= GPIO_LED2,
474 		.active_low	= 0,
475 		.default_state	= LEDS_GPIO_DEFSTATE_OFF,
476 	}
477 };
478 
479 static struct gpio_led_platform_data raumfeld_led_platform_data = {
480 	.leds		= raumfeld_leds,
481 	.num_leds	= ARRAY_SIZE(raumfeld_leds),
482 };
483 
484 static struct platform_device raumfeld_led_device = {
485 	.name	= "leds-gpio",
486 	.id	= -1,
487 	.dev	= {
488 		.platform_data = &raumfeld_led_platform_data,
489 	},
490 };
491 
492 /**
493  * One-wire (W1 bus) support
494  */
495 
w1_enable_external_pullup(int enable)496 static void w1_enable_external_pullup(int enable)
497 {
498 	gpio_set_value(GPIO_W1_PULLUP_ENABLE, enable);
499 	msleep(100);
500 }
501 
502 static struct w1_gpio_platform_data w1_gpio_platform_data = {
503 	.pin			= GPIO_ONE_WIRE,
504 	.is_open_drain		= 0,
505 	.enable_external_pullup	= w1_enable_external_pullup,
506 };
507 
508 struct platform_device raumfeld_w1_gpio_device = {
509 	.name	= "w1-gpio",
510 	.dev	= {
511 		.platform_data = &w1_gpio_platform_data
512 	}
513 };
514 
raumfeld_w1_init(void)515 static void __init raumfeld_w1_init(void)
516 {
517 	int ret = gpio_request(GPIO_W1_PULLUP_ENABLE,
518 				"W1 external pullup enable");
519 
520 	if (ret < 0)
521 		pr_warning("Unable to request GPIO_W1_PULLUP_ENABLE\n");
522 	else
523 		gpio_direction_output(GPIO_W1_PULLUP_ENABLE, 0);
524 
525 	platform_device_register(&raumfeld_w1_gpio_device);
526 }
527 
528 /**
529  * Framebuffer device
530  */
531 
532 /* PWM controlled backlight */
533 static struct platform_pwm_backlight_data raumfeld_pwm_backlight_data = {
534 	.pwm_id		= 0,
535 	.max_brightness	= 100,
536 	.dft_brightness	= 100,
537 	/* 10000 ns = 10 ms ^= 100 kHz */
538 	.pwm_period_ns	= 10000,
539 };
540 
541 static struct platform_device raumfeld_pwm_backlight_device = {
542 	.name	= "pwm-backlight",
543 	.dev	= {
544 		.parent		= &pxa27x_device_pwm0.dev,
545 		.platform_data	= &raumfeld_pwm_backlight_data,
546 	}
547 };
548 
549 /* LT3593 controlled backlight */
550 static struct gpio_led raumfeld_lt3593_led = {
551 	.name		= "backlight",
552 	.gpio		= mfp_to_gpio(MFP_PIN_GPIO17),
553 	.default_state	= LEDS_GPIO_DEFSTATE_ON,
554 };
555 
556 static struct gpio_led_platform_data raumfeld_lt3593_platform_data = {
557 	.leds		= &raumfeld_lt3593_led,
558 	.num_leds	= 1,
559 };
560 
561 static struct platform_device raumfeld_lt3593_device = {
562 	.name	= "leds-lt3593",
563 	.id	= -1,
564 	.dev	= {
565 		.platform_data = &raumfeld_lt3593_platform_data,
566 	},
567 };
568 
569 static struct pxafb_mode_info sharp_lq043t3dx02_mode = {
570 	.pixclock	= 111000,
571 	.xres		= 480,
572 	.yres		= 272,
573 	.bpp		= 16,
574 	.hsync_len	= 41,
575 	.left_margin	= 2,
576 	.right_margin	= 1,
577 	.vsync_len	= 10,
578 	.upper_margin	= 3,
579 	.lower_margin	= 1,
580 	.sync		= 0,
581 };
582 
583 static struct pxafb_mach_info raumfeld_sharp_lcd_info = {
584 	.modes		= &sharp_lq043t3dx02_mode,
585 	.num_modes	= 1,
586 	.video_mem_size = 0x400000,
587 	.lcd_conn	= LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
588 #ifdef CONFIG_PXA3XX_GCU
589 	.acceleration_enabled = 1,
590 #endif
591 };
592 
raumfeld_lcd_init(void)593 static void __init raumfeld_lcd_init(void)
594 {
595 	int ret;
596 
597 	ret = gpio_request(GPIO_TFT_VA_EN, "display VA enable");
598 	if (ret < 0)
599 		pr_warning("Unable to request GPIO_TFT_VA_EN\n");
600 	else
601 		gpio_direction_output(GPIO_TFT_VA_EN, 1);
602 
603 	msleep(100);
604 
605 	ret = gpio_request(GPIO_DISPLAY_ENABLE, "display enable");
606 	if (ret < 0)
607 		pr_warning("Unable to request GPIO_DISPLAY_ENABLE\n");
608 	else
609 		gpio_direction_output(GPIO_DISPLAY_ENABLE, 1);
610 
611 	/* Hardware revision 2 has the backlight regulator controlled
612 	 * by an LT3593, earlier and later devices use PWM for that. */
613 	if ((system_rev & 0xff) == 2) {
614 		platform_device_register(&raumfeld_lt3593_device);
615 	} else {
616 		mfp_cfg_t raumfeld_pwm_pin_config = GPIO17_PWM0_OUT;
617 		pxa3xx_mfp_config(&raumfeld_pwm_pin_config, 1);
618 		platform_device_register(&raumfeld_pwm_backlight_device);
619 	}
620 
621 	pxa_set_fb_info(NULL, &raumfeld_sharp_lcd_info);
622 	platform_device_register(&pxa3xx_device_gcu);
623 }
624 
625 /**
626  * SPI devices
627  */
628 
629 struct spi_gpio_platform_data raumfeld_spi_platform_data = {
630 	.sck		= GPIO_SPI_CLK,
631 	.mosi		= GPIO_SPI_MOSI,
632 	.miso		= GPIO_SPI_MISO,
633 	.num_chipselect	= 3,
634 };
635 
636 static struct platform_device raumfeld_spi_device = {
637 	.name	= "spi_gpio",
638 	.id	= 0,
639 	.dev 	= {
640 		.platform_data	= &raumfeld_spi_platform_data,
641 	}
642 };
643 
644 static struct lis3lv02d_platform_data lis3_pdata = {
645 	.click_flags 	= LIS3_CLICK_SINGLE_X |
646 			  LIS3_CLICK_SINGLE_Y |
647 			  LIS3_CLICK_SINGLE_Z,
648 	.irq_cfg	= LIS3_IRQ1_CLICK | LIS3_IRQ2_CLICK,
649 	.wakeup_flags	= LIS3_WAKEUP_X_LO | LIS3_WAKEUP_X_HI |
650 			  LIS3_WAKEUP_Y_LO | LIS3_WAKEUP_Y_HI |
651 			  LIS3_WAKEUP_Z_LO | LIS3_WAKEUP_Z_HI,
652 	.wakeup_thresh	= 10,
653 	.click_thresh_x = 10,
654 	.click_thresh_y = 10,
655 	.click_thresh_z = 10,
656 };
657 
658 #define SPI_AK4104	\
659 {			\
660 	.modalias	= "ak4104-codec",	\
661 	.max_speed_hz	= 10000,		\
662 	.bus_num	= 0,			\
663 	.chip_select	= 0,			\
664 	.controller_data = (void *) GPIO_SPDIF_CS,	\
665 }
666 
667 #define SPI_LIS3	\
668 {			\
669 	.modalias	= "lis3lv02d_spi",	\
670 	.max_speed_hz	= 1000000,		\
671 	.bus_num	= 0,			\
672 	.chip_select	= 1,			\
673 	.controller_data = (void *) GPIO_ACCEL_CS,	\
674 	.platform_data	= &lis3_pdata,		\
675 	.irq		= PXA_GPIO_TO_IRQ(GPIO_ACCEL_IRQ),	\
676 }
677 
678 #define SPI_DAC7512	\
679 {	\
680 	.modalias	= "dac7512",		\
681 	.max_speed_hz	= 1000000,		\
682 	.bus_num	= 0,			\
683 	.chip_select	= 2,			\
684 	.controller_data = (void *) GPIO_MCLK_DAC_CS,	\
685 }
686 
687 static struct spi_board_info connector_spi_devices[] __initdata = {
688 	SPI_AK4104,
689 	SPI_DAC7512,
690 };
691 
692 static struct spi_board_info speaker_spi_devices[] __initdata = {
693 	SPI_DAC7512,
694 };
695 
696 static struct spi_board_info controller_spi_devices[] __initdata = {
697 	SPI_LIS3,
698 };
699 
700 /**
701  * MMC for Marvell Libertas 8688 via SDIO
702  */
703 
raumfeld_mci_init(struct device * dev,irq_handler_t isr,void * data)704 static int raumfeld_mci_init(struct device *dev, irq_handler_t isr, void *data)
705 {
706 	gpio_set_value(GPIO_W2W_RESET, 1);
707 	gpio_set_value(GPIO_W2W_PDN, 1);
708 
709 	return 0;
710 }
711 
raumfeld_mci_exit(struct device * dev,void * data)712 static void raumfeld_mci_exit(struct device *dev, void *data)
713 {
714 	gpio_set_value(GPIO_W2W_RESET, 0);
715 	gpio_set_value(GPIO_W2W_PDN, 0);
716 }
717 
718 static struct pxamci_platform_data raumfeld_mci_platform_data = {
719 	.init			= raumfeld_mci_init,
720 	.exit			= raumfeld_mci_exit,
721 	.detect_delay_ms	= 200,
722 	.gpio_card_detect	= -1,
723 	.gpio_card_ro		= -1,
724 	.gpio_power		= -1,
725 };
726 
727 /*
728  * External power / charge logic
729  */
730 
power_supply_init(struct device * dev)731 static int power_supply_init(struct device *dev)
732 {
733 	return 0;
734 }
735 
power_supply_exit(struct device * dev)736 static void power_supply_exit(struct device *dev)
737 {
738 }
739 
raumfeld_is_ac_online(void)740 static int raumfeld_is_ac_online(void)
741 {
742 	return !gpio_get_value(GPIO_CHARGE_DC_OK);
743 }
744 
raumfeld_is_usb_online(void)745 static int raumfeld_is_usb_online(void)
746 {
747 	return 0;
748 }
749 
750 static char *raumfeld_power_supplicants[] = { "ds2760-battery.0" };
751 
raumfeld_power_signal_charged(void)752 static void raumfeld_power_signal_charged(void)
753 {
754 	struct power_supply *psy =
755 		power_supply_get_by_name(raumfeld_power_supplicants[0]);
756 
757 	if (psy)
758 		power_supply_set_battery_charged(psy);
759 }
760 
raumfeld_power_resume(void)761 static int raumfeld_power_resume(void)
762 {
763 	/* check if GPIO_CHARGE_DONE went low while we were sleeping */
764 	if (!gpio_get_value(GPIO_CHARGE_DONE))
765 		raumfeld_power_signal_charged();
766 
767 	return 0;
768 }
769 
770 static struct pda_power_pdata power_supply_info = {
771 	.init			= power_supply_init,
772 	.is_ac_online		= raumfeld_is_ac_online,
773 	.is_usb_online		= raumfeld_is_usb_online,
774 	.exit			= power_supply_exit,
775 	.supplied_to		= raumfeld_power_supplicants,
776 	.num_supplicants	= ARRAY_SIZE(raumfeld_power_supplicants),
777 	.resume			= raumfeld_power_resume,
778 };
779 
780 static struct resource power_supply_resources[] = {
781 	{
782 		.name  = "ac",
783 		.flags = IORESOURCE_IRQ |
784 			 IORESOURCE_IRQ_HIGHEDGE | IORESOURCE_IRQ_LOWEDGE,
785 		.start = GPIO_CHARGE_DC_OK,
786 		.end   = GPIO_CHARGE_DC_OK,
787 	},
788 };
789 
charge_done_irq(int irq,void * dev_id)790 static irqreturn_t charge_done_irq(int irq, void *dev_id)
791 {
792 	raumfeld_power_signal_charged();
793 	return IRQ_HANDLED;
794 }
795 
796 static struct platform_device raumfeld_power_supply = {
797 	.name = "pda-power",
798 	.id   = -1,
799 	.dev  = {
800 		.platform_data = &power_supply_info,
801 	},
802 	.resource      = power_supply_resources,
803 	.num_resources = ARRAY_SIZE(power_supply_resources),
804 };
805 
raumfeld_power_init(void)806 static void __init raumfeld_power_init(void)
807 {
808 	int ret;
809 
810 	/* Set PEN2 high to enable maximum charge current */
811 	ret = gpio_request(GPIO_CHRG_PEN2, "CHRG_PEN2");
812 	if (ret < 0)
813 		pr_warning("Unable to request GPIO_CHRG_PEN2\n");
814 	else
815 		gpio_direction_output(GPIO_CHRG_PEN2, 1);
816 
817 	ret = gpio_request(GPIO_CHARGE_DC_OK, "CABLE_DC_OK");
818 	if (ret < 0)
819 		pr_warning("Unable to request GPIO_CHARGE_DC_OK\n");
820 
821 	ret = gpio_request(GPIO_CHARGE_USB_SUSP, "CHARGE_USB_SUSP");
822 	if (ret < 0)
823 		pr_warning("Unable to request GPIO_CHARGE_USB_SUSP\n");
824 	else
825 		gpio_direction_output(GPIO_CHARGE_USB_SUSP, 0);
826 
827 	power_supply_resources[0].start = gpio_to_irq(GPIO_CHARGE_DC_OK);
828 	power_supply_resources[0].end = gpio_to_irq(GPIO_CHARGE_DC_OK);
829 
830 	ret = request_irq(gpio_to_irq(GPIO_CHARGE_DONE),
831 			&charge_done_irq, IORESOURCE_IRQ_LOWEDGE,
832 			"charge_done", NULL);
833 
834 	if (ret < 0)
835 		printk(KERN_ERR "%s: unable to register irq %d\n", __func__,
836 			GPIO_CHARGE_DONE);
837 	else
838 		platform_device_register(&raumfeld_power_supply);
839 }
840 
841 /* Fixed regulator for AUDIO_VA, 0-0048 maps to the cs4270 codec device */
842 
843 static struct regulator_consumer_supply audio_va_consumer_supply =
844 	REGULATOR_SUPPLY("va", "0-0048");
845 
846 struct regulator_init_data audio_va_initdata = {
847 	.consumer_supplies = &audio_va_consumer_supply,
848 	.num_consumer_supplies = 1,
849 	.constraints = {
850 		.valid_ops_mask = REGULATOR_CHANGE_STATUS,
851 	},
852 };
853 
854 static struct fixed_voltage_config audio_va_config = {
855 	.supply_name		= "audio_va",
856 	.microvolts		= 5000000,
857 	.gpio			= GPIO_AUDIO_VA_ENABLE,
858 	.enable_high		= 1,
859 	.enabled_at_boot	= 0,
860 	.init_data		= &audio_va_initdata,
861 };
862 
863 static struct platform_device audio_va_device = {
864 	.name	= "reg-fixed-voltage",
865 	.id	= 0,
866 	.dev	= {
867 		.platform_data = &audio_va_config,
868 	},
869 };
870 
871 /* Dummy supplies for Codec's VD/VLC */
872 
873 static struct regulator_consumer_supply audio_dummy_supplies[] = {
874 	REGULATOR_SUPPLY("vd", "0-0048"),
875 	REGULATOR_SUPPLY("vlc", "0-0048"),
876 };
877 
878 struct regulator_init_data audio_dummy_initdata = {
879 	.consumer_supplies = audio_dummy_supplies,
880 	.num_consumer_supplies = ARRAY_SIZE(audio_dummy_supplies),
881 	.constraints = {
882 		.valid_ops_mask = REGULATOR_CHANGE_STATUS,
883 	},
884 };
885 
886 static struct fixed_voltage_config audio_dummy_config = {
887 	.supply_name		= "audio_vd",
888 	.microvolts		= 3300000,
889 	.gpio			= -1,
890 	.init_data		= &audio_dummy_initdata,
891 };
892 
893 static struct platform_device audio_supply_dummy_device = {
894 	.name	= "reg-fixed-voltage",
895 	.id	= 1,
896 	.dev	= {
897 		.platform_data = &audio_dummy_config,
898 	},
899 };
900 
901 static struct platform_device *audio_regulator_devices[] = {
902 	&audio_va_device,
903 	&audio_supply_dummy_device,
904 };
905 
906 /**
907  * Regulator support via MAX8660
908  */
909 
910 static struct regulator_consumer_supply vcc_mmc_supply =
911 	REGULATOR_SUPPLY("vmmc", "pxa2xx-mci.0");
912 
913 static struct regulator_init_data vcc_mmc_init_data = {
914 	.constraints = {
915 		.min_uV			= 3300000,
916 		.max_uV			= 3300000,
917 		.valid_modes_mask	= REGULATOR_MODE_NORMAL,
918 		.valid_ops_mask		= REGULATOR_CHANGE_STATUS |
919 					  REGULATOR_CHANGE_VOLTAGE |
920 					  REGULATOR_CHANGE_MODE,
921 	},
922 	.consumer_supplies = &vcc_mmc_supply,
923 	.num_consumer_supplies = 1,
924 };
925 
926 struct max8660_subdev_data max8660_v6_subdev_data = {
927 	.id		= MAX8660_V6,
928 	.name		= "vmmc",
929 	.platform_data	= &vcc_mmc_init_data,
930 };
931 
932 static struct max8660_platform_data max8660_pdata = {
933 	.subdevs = &max8660_v6_subdev_data,
934 	.num_subdevs = 1,
935 };
936 
937 /**
938  * I2C devices
939  */
940 
941 static struct i2c_board_info raumfeld_pwri2c_board_info = {
942 	.type		= "max8660",
943 	.addr		= 0x34,
944 	.platform_data	= &max8660_pdata,
945 };
946 
947 static struct i2c_board_info raumfeld_connector_i2c_board_info __initdata = {
948 	.type	= "cs4270",
949 	.addr	= 0x48,
950 };
951 
952 static struct eeti_ts_platform_data eeti_ts_pdata = {
953 	.irq_active_high = 1,
954 };
955 
956 static struct i2c_board_info raumfeld_controller_i2c_board_info __initdata = {
957 	.type	= "eeti_ts",
958 	.addr	= 0x0a,
959 	.irq	= PXA_GPIO_TO_IRQ(GPIO_TOUCH_IRQ),
960 	.platform_data = &eeti_ts_pdata,
961 };
962 
963 static struct platform_device *raumfeld_common_devices[] = {
964 	&raumfeld_gpio_keys_device,
965 	&raumfeld_led_device,
966 	&raumfeld_spi_device,
967 };
968 
raumfeld_audio_init(void)969 static void __init raumfeld_audio_init(void)
970 {
971 	int ret;
972 
973 	ret = gpio_request(GPIO_CODEC_RESET, "cs4270 reset");
974 	if (ret < 0)
975 		pr_warning("unable to request GPIO_CODEC_RESET\n");
976 	else
977 		gpio_direction_output(GPIO_CODEC_RESET, 1);
978 
979 	ret = gpio_request(GPIO_SPDIF_RESET, "ak4104 s/pdif reset");
980 	if (ret < 0)
981 		pr_warning("unable to request GPIO_SPDIF_RESET\n");
982 	else
983 		gpio_direction_output(GPIO_SPDIF_RESET, 1);
984 
985 	ret = gpio_request(GPIO_MCLK_RESET, "MCLK reset");
986 	if (ret < 0)
987 		pr_warning("unable to request GPIO_MCLK_RESET\n");
988 	else
989 		gpio_direction_output(GPIO_MCLK_RESET, 1);
990 
991 	platform_add_devices(ARRAY_AND_SIZE(audio_regulator_devices));
992 }
993 
raumfeld_common_init(void)994 static void __init raumfeld_common_init(void)
995 {
996 	int ret;
997 
998 	/* The on/off button polarity has changed after revision 1 */
999 	if ((system_rev & 0xff) > 1) {
1000 		int i;
1001 
1002 		for (i = 0; i < ARRAY_SIZE(gpio_keys_button); i++)
1003 			if (!strcmp(gpio_keys_button[i].desc, "on_off button"))
1004 				gpio_keys_button[i].active_low = 1;
1005 	}
1006 
1007 	enable_irq_wake(IRQ_WAKEUP0);
1008 
1009 	pxa3xx_set_nand_info(&raumfeld_nand_info);
1010 	pxa3xx_set_i2c_power_info(NULL);
1011 	pxa_set_ohci_info(&raumfeld_ohci_info);
1012 	pxa_set_mci_info(&raumfeld_mci_platform_data);
1013 	pxa_set_i2c_info(NULL);
1014 	pxa_set_ffuart_info(NULL);
1015 
1016 	ret = gpio_request(GPIO_W2W_RESET, "Wi2Wi reset");
1017 	if (ret < 0)
1018 		pr_warning("Unable to request GPIO_W2W_RESET\n");
1019 	else
1020 		gpio_direction_output(GPIO_W2W_RESET, 0);
1021 
1022 	ret = gpio_request(GPIO_W2W_PDN, "Wi2Wi powerup");
1023 	if (ret < 0)
1024 		pr_warning("Unable to request GPIO_W2W_PDN\n");
1025 	else
1026 		gpio_direction_output(GPIO_W2W_PDN, 0);
1027 
1028 	/* this can be used to switch off the device */
1029 	ret = gpio_request(GPIO_SHUTDOWN_SUPPLY, "supply shutdown");
1030 	if (ret < 0)
1031 		pr_warning("Unable to request GPIO_SHUTDOWN_SUPPLY\n");
1032 	else
1033 		gpio_direction_output(GPIO_SHUTDOWN_SUPPLY, 0);
1034 
1035 	platform_add_devices(ARRAY_AND_SIZE(raumfeld_common_devices));
1036 	i2c_register_board_info(1, &raumfeld_pwri2c_board_info, 1);
1037 }
1038 
raumfeld_controller_init(void)1039 static void __init raumfeld_controller_init(void)
1040 {
1041 	int ret;
1042 
1043 	pxa3xx_mfp_config(ARRAY_AND_SIZE(raumfeld_controller_pin_config));
1044 	platform_device_register(&rotary_encoder_device);
1045 	spi_register_board_info(ARRAY_AND_SIZE(controller_spi_devices));
1046 	i2c_register_board_info(0, &raumfeld_controller_i2c_board_info, 1);
1047 
1048 	ret = gpio_request(GPIO_SHUTDOWN_BATT, "battery shutdown");
1049 	if (ret < 0)
1050 		pr_warning("Unable to request GPIO_SHUTDOWN_BATT\n");
1051 	else
1052 		gpio_direction_output(GPIO_SHUTDOWN_BATT, 0);
1053 
1054 	raumfeld_common_init();
1055 	raumfeld_power_init();
1056 	raumfeld_lcd_init();
1057 	raumfeld_w1_init();
1058 }
1059 
raumfeld_connector_init(void)1060 static void __init raumfeld_connector_init(void)
1061 {
1062 	pxa3xx_mfp_config(ARRAY_AND_SIZE(raumfeld_connector_pin_config));
1063 	spi_register_board_info(ARRAY_AND_SIZE(connector_spi_devices));
1064 	i2c_register_board_info(0, &raumfeld_connector_i2c_board_info, 1);
1065 
1066 	platform_device_register(&smc91x_device);
1067 
1068 	raumfeld_audio_init();
1069 	raumfeld_common_init();
1070 }
1071 
raumfeld_speaker_init(void)1072 static void __init raumfeld_speaker_init(void)
1073 {
1074 	pxa3xx_mfp_config(ARRAY_AND_SIZE(raumfeld_speaker_pin_config));
1075 	spi_register_board_info(ARRAY_AND_SIZE(speaker_spi_devices));
1076 	i2c_register_board_info(0, &raumfeld_connector_i2c_board_info, 1);
1077 
1078 	platform_device_register(&smc91x_device);
1079 	platform_device_register(&rotary_encoder_device);
1080 
1081 	raumfeld_audio_init();
1082 	raumfeld_common_init();
1083 }
1084 
1085 /* physical memory regions */
1086 #define	RAUMFELD_SDRAM_BASE	0xa0000000	/* SDRAM region */
1087 
1088 #ifdef CONFIG_MACH_RAUMFELD_RC
1089 MACHINE_START(RAUMFELD_RC, "Raumfeld Controller")
1090 	.atag_offset	= 0x100,
1091 	.init_machine	= raumfeld_controller_init,
1092 	.map_io		= pxa3xx_map_io,
1093 	.init_irq	= pxa3xx_init_irq,
1094 	.handle_irq	= pxa3xx_handle_irq,
1095 	.timer		= &pxa_timer,
1096 	.restart	= pxa_restart,
1097 MACHINE_END
1098 #endif
1099 
1100 #ifdef CONFIG_MACH_RAUMFELD_CONNECTOR
1101 MACHINE_START(RAUMFELD_CONNECTOR, "Raumfeld Connector")
1102 	.atag_offset	= 0x100,
1103 	.init_machine	= raumfeld_connector_init,
1104 	.map_io		= pxa3xx_map_io,
1105 	.init_irq	= pxa3xx_init_irq,
1106 	.handle_irq	= pxa3xx_handle_irq,
1107 	.timer		= &pxa_timer,
1108 	.restart	= pxa_restart,
1109 MACHINE_END
1110 #endif
1111 
1112 #ifdef CONFIG_MACH_RAUMFELD_SPEAKER
1113 MACHINE_START(RAUMFELD_SPEAKER, "Raumfeld Speaker")
1114 	.atag_offset	= 0x100,
1115 	.init_machine	= raumfeld_speaker_init,
1116 	.map_io		= pxa3xx_map_io,
1117 	.init_irq	= pxa3xx_init_irq,
1118 	.handle_irq	= pxa3xx_handle_irq,
1119 	.timer		= &pxa_timer,
1120 	.restart	= pxa_restart,
1121 MACHINE_END
1122 #endif
1123