Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[sfrench/cifs-2.6.git] / arch / arm / mach-pxa / imote2.c
1 /*
2  * linux/arch/arm/mach-pxa/imote2.c
3  *
4  * Author:      Ed C. Epp
5  * Created:     Nov 05, 2002
6  * Copyright:   Intel Corp.
7  *
8  * Modified 2008:  Jonathan Cameron
9  *
10  * The Imote2 is a wireless sensor node platform sold
11  * by Crossbow (www.xbow.com).
12  */
13
14 #include <linux/init.h>
15 #include <linux/device.h>
16 #include <linux/mtd/mtd.h>
17 #include <linux/mtd/partitions.h>
18 #include <linux/platform_device.h>
19 #include <linux/regulator/machine.h>
20 #include <linux/gpio.h>
21 #include <linux/leds.h>
22 #include <linux/spi/spi.h>
23 #include <linux/i2c.h>
24 #include <linux/mfd/da903x.h>
25 #include <linux/sht15.h>
26
27 #include <asm/mach-types.h>
28 #include <asm/mach/arch.h>
29 #include <asm/mach/map.h>
30 #include <asm/mach/flash.h>
31
32 #include <mach/pxa27x.h>
33 #include <plat/i2c.h>
34 #include <mach/udc.h>
35 #include <mach/mmc.h>
36 #include <mach/pxa2xx_spi.h>
37 #include <mach/pxa27x-udc.h>
38
39 #include "devices.h"
40 #include "generic.h"
41
42 static unsigned long imote2_pin_config[] __initdata = {
43
44         /* Device Identification for wakeup*/
45         GPIO102_GPIO,
46
47         /* Button */
48         GPIO91_GPIO,
49
50         /* DA9030 */
51         GPIO1_GPIO,
52
53         /* MMC */
54         GPIO32_MMC_CLK,
55         GPIO112_MMC_CMD,
56         GPIO92_MMC_DAT_0,
57         GPIO109_MMC_DAT_1,
58         GPIO110_MMC_DAT_2,
59         GPIO111_MMC_DAT_3,
60
61         /* 802.15.4 radio - driver out of mainline */
62         GPIO22_GPIO,                    /* CC_RSTN */
63         GPIO114_GPIO,                   /* CC_FIFO */
64         GPIO116_GPIO,                   /* CC_CCA */
65         GPIO0_GPIO,                     /* CC_FIFOP */
66         GPIO16_GPIO,                    /* CCSFD */
67         GPIO115_GPIO,                   /* Power enable */
68
69         /* I2C */
70         GPIO117_I2C_SCL,
71         GPIO118_I2C_SDA,
72
73         /* SSP 3 - 802.15.4 radio */
74         GPIO39_GPIO,                    /* Chip Select */
75         GPIO34_SSP3_SCLK,
76         GPIO35_SSP3_TXD,
77         GPIO41_SSP3_RXD,
78
79         /* SSP 2 - to daughter boards */
80         GPIO37_GPIO,                    /* Chip Select */
81         GPIO36_SSP2_SCLK,
82         GPIO38_SSP2_TXD,
83         GPIO11_SSP2_RXD,
84
85         /* SSP 1 - to daughter boards */
86         GPIO24_GPIO,                    /* Chip Select */
87         GPIO23_SSP1_SCLK,
88         GPIO25_SSP1_TXD,
89         GPIO26_SSP1_RXD,
90
91         /* BTUART Basic Connector*/
92         GPIO42_BTUART_RXD,
93         GPIO43_BTUART_TXD,
94         GPIO44_BTUART_CTS,
95         GPIO45_BTUART_RTS,
96
97         /* STUART Serial console via debug board*/
98         GPIO46_STUART_RXD,
99         GPIO47_STUART_TXD,
100
101         /* Basic sensor board */
102         GPIO96_GPIO,    /* accelerometer interrupt */
103         GPIO99_GPIO,    /* ADC interrupt */
104
105         /* SHT15 */
106         GPIO100_GPIO,
107         GPIO98_GPIO,
108
109         /* Connector pins specified as gpios */
110         GPIO94_GPIO, /* large basic connector pin 14 */
111         GPIO10_GPIO, /* large basic connector pin 23 */
112
113         /* LEDS */
114         GPIO103_GPIO, /* red led */
115         GPIO104_GPIO, /* green led */
116         GPIO105_GPIO, /* blue led */
117 };
118
119 static struct sht15_platform_data platform_data_sht15 = {
120         .gpio_data =  100,
121         .gpio_sck  =  98,
122 };
123
124 static struct platform_device sht15 = {
125         .name = "sht15",
126         .id = -1,
127         .dev = {
128                 .platform_data = &platform_data_sht15,
129         },
130 };
131
132 static struct regulator_consumer_supply imote2_sensor_3_con[] = {
133         {
134                 .dev = &sht15.dev,
135                 .supply = "vcc",
136         },
137 };
138
139 static struct gpio_led imote2_led_pins[] = {
140         {
141                 .name       =  "imote2:red",
142                 .gpio       = 103,
143                 .active_low = 1,
144         }, {
145                 .name       = "imote2:green",
146                 .gpio       = 104,
147                 .active_low = 1,
148         }, {
149                 .name       = "imote2:blue",
150                 .gpio       = 105,
151                 .active_low = 1,
152         },
153 };
154
155 static struct gpio_led_platform_data imote2_led_data = {
156         .num_leds = ARRAY_SIZE(imote2_led_pins),
157         .leds     = imote2_led_pins,
158 };
159
160 static struct platform_device imote2_leds = {
161         .name = "leds-gpio",
162         .id   = -1,
163         .dev = {
164                 .platform_data = &imote2_led_data,
165         },
166 };
167
168 /* Reverse engineered partly from Platformx drivers */
169 enum imote2_ldos{
170         vcc_vref,
171         vcc_cc2420,
172         vcc_mica,
173         vcc_bt,
174         /* The two voltages available to sensor boards */
175         vcc_sensor_1_8,
176         vcc_sensor_3,
177
178         vcc_sram_ext, /* directly connected to the pxa271 */
179         vcc_pxa_pll,
180         vcc_pxa_usim, /* Reference voltage for certain gpios */
181         vcc_pxa_mem,
182         vcc_pxa_flash,
183         vcc_pxa_core, /*Dc-Dc buck not yet supported */
184         vcc_lcd,
185         vcc_bb,
186         vcc_bbio,
187         vcc_io, /* cc2420 802.15.4 radio and pxa vcc_io ?*/
188 };
189
190 /* The values of the various regulator constraints are obviously dependent
191  * on exactly what is wired to each ldo.  Unfortunately this information is
192  * not generally available.  More information has been requested from Xbow
193  * but as of yet they haven't been forthcoming.
194  *
195  * Some of these are clearly Stargate 2 related (no way of plugging
196  * in an lcd on the IM2 for example!).
197  */
198 static struct regulator_init_data imote2_ldo_init_data[] = {
199         [vcc_bbio] = {
200                 .constraints = { /* board default 1.8V */
201                         .name = "vcc_bbio",
202                         .min_uV = 1800000,
203                         .max_uV = 1800000,
204                 },
205         },
206         [vcc_bb] = {
207                 .constraints = { /* board default 2.8V */
208                         .name = "vcc_bb",
209                         .min_uV = 2700000,
210                         .max_uV = 3000000,
211                 },
212         },
213         [vcc_pxa_flash] = {
214                 .constraints = {/* default is 1.8V */
215                         .name = "vcc_pxa_flash",
216                         .min_uV = 1800000,
217                         .max_uV = 1800000,
218                 },
219         },
220         [vcc_cc2420] = { /* also vcc_io */
221                 .constraints = {
222                         /* board default is 2.8V */
223                         .name = "vcc_cc2420",
224                         .min_uV = 2700000,
225                         .max_uV = 3300000,
226                 },
227         },
228         [vcc_vref] = { /* Reference for what? */
229                 .constraints = { /* default 1.8V */
230                         .name = "vcc_vref",
231                         .min_uV = 1800000,
232                         .max_uV = 1800000,
233                 },
234         },
235         [vcc_sram_ext] = {
236                 .constraints = { /* default 2.8V */
237                         .name = "vcc_sram_ext",
238                         .min_uV = 2800000,
239                         .max_uV = 2800000,
240                 },
241         },
242         [vcc_mica] = {
243                 .constraints = { /* default 2.8V */
244                         .name = "vcc_mica",
245                         .min_uV = 2800000,
246                         .max_uV = 2800000,
247                 },
248         },
249         [vcc_bt] = {
250                 .constraints = { /* default 2.8V */
251                         .name = "vcc_bt",
252                         .min_uV = 2800000,
253                         .max_uV = 2800000,
254                 },
255         },
256         [vcc_lcd] = {
257                 .constraints = { /* default 2.8V */
258                         .name = "vcc_lcd",
259                         .min_uV = 2700000,
260                         .max_uV = 3300000,
261                 },
262         },
263         [vcc_io] = { /* Same or higher than everything
264                           * bar vccbat and vccusb */
265                 .constraints = { /* default 2.8V */
266                         .name = "vcc_io",
267                         .min_uV = 2692000,
268                         .max_uV = 3300000,
269                 },
270         },
271         [vcc_sensor_1_8] = {
272                 .constraints = { /* default 1.8V */
273                         .name = "vcc_sensor_1_8",
274                         .min_uV = 1800000,
275                         .max_uV = 1800000,
276                 },
277         },
278         [vcc_sensor_3] = { /* curiously default 2.8V */
279                 .constraints = {
280                         .name = "vcc_sensor_3",
281                         .min_uV = 2800000,
282                         .max_uV = 3000000,
283                 },
284                 .num_consumer_supplies = ARRAY_SIZE(imote2_sensor_3_con),
285                 .consumer_supplies = imote2_sensor_3_con,
286         },
287         [vcc_pxa_pll] = { /* 1.17V - 1.43V, default 1.3V*/
288                 .constraints = {
289                         .name = "vcc_pxa_pll",
290                         .min_uV = 1170000,
291                         .max_uV = 1430000,
292                 },
293         },
294         [vcc_pxa_usim] = {
295                 .constraints = { /* default 1.8V */
296                         .name = "vcc_pxa_usim",
297                         .min_uV = 1710000,
298                         .max_uV = 2160000,
299                 },
300         },
301         [vcc_pxa_mem] = {
302                 .constraints = { /* default 1.8V */
303                         .name = "vcc_pxa_mem",
304                         .min_uV = 1800000,
305                         .max_uV = 1800000,
306                 },
307         },
308 };
309
310 static struct da903x_subdev_info imote2_da9030_subdevs[] = {
311         {
312                 .name = "da903x-regulator",
313                 .id = DA9030_ID_LDO2,
314                 .platform_data = &imote2_ldo_init_data[vcc_bbio],
315         }, {
316                 .name = "da903x-regulator",
317                 .id = DA9030_ID_LDO3,
318                 .platform_data = &imote2_ldo_init_data[vcc_bb],
319         }, {
320                 .name = "da903x-regulator",
321                 .id = DA9030_ID_LDO4,
322                 .platform_data = &imote2_ldo_init_data[vcc_pxa_flash],
323         }, {
324                 .name = "da903x-regulator",
325                 .id = DA9030_ID_LDO5,
326                 .platform_data = &imote2_ldo_init_data[vcc_cc2420],
327         }, {
328                 .name = "da903x-regulator",
329                 .id = DA9030_ID_LDO6,
330                 .platform_data = &imote2_ldo_init_data[vcc_vref],
331         }, {
332                 .name = "da903x-regulator",
333                 .id = DA9030_ID_LDO7,
334                 .platform_data = &imote2_ldo_init_data[vcc_sram_ext],
335         }, {
336                 .name = "da903x-regulator",
337                 .id = DA9030_ID_LDO8,
338                 .platform_data = &imote2_ldo_init_data[vcc_mica],
339         }, {
340                 .name = "da903x-regulator",
341                 .id = DA9030_ID_LDO9,
342                 .platform_data = &imote2_ldo_init_data[vcc_bt],
343         }, {
344                 .name = "da903x-regulator",
345                 .id = DA9030_ID_LDO10,
346                 .platform_data = &imote2_ldo_init_data[vcc_sensor_1_8],
347         }, {
348                 .name = "da903x-regulator",
349                 .id = DA9030_ID_LDO11,
350                 .platform_data = &imote2_ldo_init_data[vcc_sensor_3],
351         }, {
352                 .name = "da903x-regulator",
353                 .id = DA9030_ID_LDO12,
354                 .platform_data = &imote2_ldo_init_data[vcc_lcd],
355         }, {
356                 .name = "da903x-regulator",
357                 .id = DA9030_ID_LDO15,
358                 .platform_data = &imote2_ldo_init_data[vcc_pxa_pll],
359         }, {
360                 .name = "da903x-regulator",
361                 .id = DA9030_ID_LDO17,
362                 .platform_data = &imote2_ldo_init_data[vcc_pxa_usim],
363         }, {
364                 .name = "da903x-regulator",
365                 .id = DA9030_ID_LDO18,
366                 .platform_data = &imote2_ldo_init_data[vcc_io],
367         }, {
368                 .name = "da903x-regulator",
369                 .id = DA9030_ID_LDO19,
370                 .platform_data = &imote2_ldo_init_data[vcc_pxa_mem],
371         },
372 };
373
374 static struct da903x_platform_data imote2_da9030_pdata = {
375         .num_subdevs = ARRAY_SIZE(imote2_da9030_subdevs),
376         .subdevs = imote2_da9030_subdevs,
377 };
378
379 /* As the the imote2 doesn't currently have a conventional SD slot
380  * there is no option to hotplug cards, making all this rather simple
381  */
382 static int imote2_mci_get_ro(struct device *dev)
383 {
384         return 0;
385 }
386
387 /* Rather simple case as hotplugging not possible */
388 static struct pxamci_platform_data imote2_mci_platform_data = {
389         .ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, /* default anyway */
390         .get_ro = imote2_mci_get_ro,
391         .gpio_card_detect = -1,
392         .gpio_card_ro   = -1,
393         .gpio_power = -1,
394 };
395
396 static struct mtd_partition imote2flash_partitions[] = {
397         {
398                 .name = "Bootloader",
399                 .size = 0x00040000,
400                 .offset = 0,
401                 .mask_flags = MTD_WRITEABLE,
402         }, {
403                 .name = "Kernel",
404                 .size = 0x00200000,
405                 .offset = 0x00040000,
406                 .mask_flags = 0,
407         }, {
408                 .name = "Filesystem",
409                 .size = 0x01DC0000,
410                 .offset = 0x00240000,
411                 .mask_flags = 0,
412         },
413 };
414
415 static struct resource flash_resources = {
416         .start = PXA_CS0_PHYS,
417         .end = PXA_CS0_PHYS + SZ_32M - 1,
418         .flags = IORESOURCE_MEM,
419 };
420
421 static struct flash_platform_data imote2_flash_data = {
422         .map_name = "cfi_probe",
423         .parts = imote2flash_partitions,
424         .nr_parts = ARRAY_SIZE(imote2flash_partitions),
425         .name = "PXA27xOnChipROM",
426         .width = 2,
427 };
428
429 static struct platform_device imote2_flash_device = {
430         .name = "pxa2xx-flash",
431         .id = 0,
432         .dev = {
433                 .platform_data = &imote2_flash_data,
434         },
435         .resource = &flash_resources,
436         .num_resources = 1,
437 };
438
439 /* Some of the drivers here are out of kernel at the moment (parts of IIO)
440  * and it may be a while before they are in the mainline.
441  */
442 static struct i2c_board_info __initdata imote2_i2c_board_info[] = {
443         { /* UCAM sensor board */
444                 .type = "max1239",
445                 .addr = 0x35,
446         }, { /* ITS400 Sensor board only */
447                 .type = "max1363",
448                 .addr = 0x34,
449                 /* Through a nand gate - Also beware, on V2 sensor board the
450                  * pull up resistors are missing.
451                  */
452                 .irq = IRQ_GPIO(99),
453         }, { /* ITS400 Sensor board only */
454                 .type = "tsl2561",
455                 .addr = 0x49,
456                 /* Through a nand gate - Also beware, on V2 sensor board the
457                  * pull up resistors are missing.
458                  */
459                 .irq = IRQ_GPIO(99),
460         }, { /* ITS400 Sensor board only */
461                 .type = "tmp175",
462                 .addr = 0x4A,
463                 .irq = IRQ_GPIO(96),
464         }, { /* IMB400 Multimedia board */
465                 .type = "wm8940",
466                 .addr = 0x1A,
467         },
468 };
469
470 static struct i2c_board_info __initdata imote2_pwr_i2c_board_info[] = {
471         {
472                 .type = "da9030",
473                 .addr = 0x49,
474                 .platform_data = &imote2_da9030_pdata,
475                 .irq = gpio_to_irq(1),
476         },
477 };
478
479 static struct pxa2xx_spi_master pxa_ssp_master_0_info = {
480         .num_chipselect = 1,
481 };
482
483 static struct pxa2xx_spi_master pxa_ssp_master_1_info = {
484         .num_chipselect = 1,
485 };
486
487 static struct pxa2xx_spi_master pxa_ssp_master_2_info = {
488         .num_chipselect = 1,
489 };
490
491 static struct pxa2xx_spi_chip staccel_chip_info = {
492         .tx_threshold = 8,
493         .rx_threshold = 8,
494         .dma_burst_size = 8,
495         .timeout = 235,
496         .gpio_cs = 24,
497 };
498
499 static struct pxa2xx_spi_chip cc2420_info = {
500         .tx_threshold = 8,
501         .rx_threshold = 8,
502         .dma_burst_size = 8,
503         .timeout = 235,
504         .gpio_cs = 39,
505 };
506
507 static struct spi_board_info spi_board_info[] __initdata = {
508         { /* Driver in IIO */
509                 .modalias = "lis3l02dq",
510                 .max_speed_hz = 8000000,/* 8MHz max spi frequency at 3V */
511                 .bus_num = 1,
512                 .chip_select = 0,
513                 .controller_data = &staccel_chip_info,
514                 .irq = IRQ_GPIO(96),
515         }, { /* Driver out of kernel as it needs considerable rewriting */
516                 .modalias = "cc2420",
517                 .max_speed_hz = 6500000,
518                 .bus_num = 3,
519                 .chip_select = 0,
520                 .controller_data = &cc2420_info,
521         },
522 };
523
524 static void im2_udc_command(int cmd)
525 {
526         switch (cmd) {
527         case PXA2XX_UDC_CMD_CONNECT:
528                 UP2OCR |=  UP2OCR_HXOE | UP2OCR_DPPUE | UP2OCR_DPPUBE;
529                 break;
530         case PXA2XX_UDC_CMD_DISCONNECT:
531                 UP2OCR &= ~(UP2OCR_HXOE | UP2OCR_DPPUE | UP2OCR_DPPUBE);
532                 break;
533         }
534 }
535
536 static struct pxa2xx_udc_mach_info imote2_udc_info __initdata = {
537         .udc_command            = im2_udc_command,
538 };
539
540 static struct platform_device *imote2_devices[] = {
541         &imote2_flash_device,
542         &imote2_leds,
543         &sht15,
544 };
545
546 static struct i2c_pxa_platform_data i2c_pwr_pdata = {
547         .fast_mode = 1,
548 };
549
550 static struct i2c_pxa_platform_data i2c_pdata = {
551         .fast_mode = 1,
552 };
553
554 static void __init imote2_init(void)
555 {
556         pxa2xx_mfp_config(ARRAY_AND_SIZE(imote2_pin_config));
557
558         pxa_set_ffuart_info(NULL);
559         pxa_set_btuart_info(NULL);
560         pxa_set_stuart_info(NULL);
561
562         /* SPI chip select directions - all other directions should
563          * be handled by drivers.*/
564         gpio_direction_output(37, 0);
565
566         platform_add_devices(imote2_devices, ARRAY_SIZE(imote2_devices));
567
568         pxa2xx_set_spi_info(1, &pxa_ssp_master_0_info);
569         pxa2xx_set_spi_info(2, &pxa_ssp_master_1_info);
570         pxa2xx_set_spi_info(3, &pxa_ssp_master_2_info);
571
572         spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
573
574         i2c_register_board_info(0, imote2_i2c_board_info,
575                                 ARRAY_SIZE(imote2_i2c_board_info));
576         i2c_register_board_info(1, imote2_pwr_i2c_board_info,
577                                 ARRAY_SIZE(imote2_pwr_i2c_board_info));
578
579         pxa27x_set_i2c_power_info(&i2c_pwr_pdata);
580         pxa_set_i2c_info(&i2c_pdata);
581
582         pxa_set_mci_info(&imote2_mci_platform_data);
583         pxa_set_udc_info(&imote2_udc_info);
584 }
585
586 MACHINE_START(INTELMOTE2, "IMOTE 2")
587         .phys_io        = 0x40000000,
588         .io_pg_offst    = (io_p2v(0x40000000) >> 18) & 0xfffc,
589         .map_io         = pxa_map_io,
590         .init_irq       = pxa27x_init_irq,
591         .timer          = &pxa_timer,
592         .init_machine   = imote2_init,
593         .boot_params    = 0xA0000100,
594 MACHINE_END