cwz update FIH
[firefly-linux-kernel-4.4.55.git] / arch / arm / mach-rk29 / board-rk29-fih.c
1 /* arch/arm/mach-rk29/board-rk29.c
2  *
3  * Copyright (C) 2010 ROCKCHIP, Inc.
4  *
5  * This software is licensed under the terms of the GNU General Public
6  * License version 2, as published by the Free Software Foundation, and
7  * may be copied, distributed, and modified under those terms.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  */
15
16 #include <linux/kernel.h>
17 #include <linux/init.h>
18 #include <linux/platform_device.h>
19 #include <linux/input.h>
20 #include <linux/io.h>
21 #include <linux/delay.h>
22 #include <linux/i2c.h>
23 #include <linux/spi/spi.h>
24 #include <linux/mmc/host.h>
25 #include <linux/android_pmem.h>
26 #include <linux/usb/android_composite.h>
27 #include <linux/i2c/tps65910.h>
28
29 #include <mach/hardware.h>
30 #include <asm/setup.h>
31 #include <asm/mach-types.h>
32 #include <asm/mach/arch.h>
33 #include <asm/mach/map.h>
34 #include <asm/mach/flash.h>
35 #include <asm/hardware/gic.h>
36
37 #include <mach/iomux.h>
38 #include <mach/gpio.h>
39 #include <mach/irqs.h>
40 #include <mach/rk29_iomap.h>
41 #include <mach/board.h>
42 #include <mach/rk29_nand.h>
43 #include <mach/rk29_camera.h>                          /* ddl@rock-chips.com : camera support */
44 #include <media/soc_camera.h>                               /* ddl@rock-chips.com : camera support */
45 #include <mach/vpu_mem.h>
46 #include <mach/sram.h>
47
48 #include <linux/regulator/rk29-pwm-regulator.h>
49 #include <linux/regulator/machine.h>
50
51 #include <linux/mtd/nand.h>
52 #include <linux/mtd/partitions.h>
53
54 #include "devices.h"
55 #include "../../../drivers/input/touchscreen/xpt2046_cbn_ts.h"
56
57
58 /* Set memory size of pmem */
59 #ifdef CONFIG_RK29_MEM_SIZE_M
60 #define SDRAM_SIZE          (CONFIG_RK29_MEM_SIZE_M * SZ_1M)
61 #else
62 #define SDRAM_SIZE          SZ_512M
63 #endif
64 #define PMEM_GPU_SIZE       SZ_64M
65 #define PMEM_UI_SIZE        SZ_32M
66 #define PMEM_VPU_SIZE       SZ_64M
67 #define PMEM_CAM_SIZE       0x01300000
68 #ifdef CONFIG_VIDEO_RK29_WORK_IPP
69 #define MEM_CAMIPP_SIZE     SZ_4M
70 #else
71 #define MEM_CAMIPP_SIZE     0
72 #endif
73 #define MEM_FB_SIZE         (3*SZ_2M)
74
75 #define PMEM_GPU_BASE       ((u32)RK29_SDRAM_PHYS + SDRAM_SIZE - PMEM_GPU_SIZE)
76 #define PMEM_UI_BASE        (PMEM_GPU_BASE - PMEM_UI_SIZE)
77 #define PMEM_VPU_BASE       (PMEM_UI_BASE - PMEM_VPU_SIZE)
78 #define PMEM_CAM_BASE       (PMEM_VPU_BASE - PMEM_CAM_SIZE)
79 #define MEM_CAMIPP_BASE     (PMEM_CAM_BASE - MEM_CAMIPP_SIZE)
80 #define MEM_FB_BASE         (MEM_CAMIPP_BASE - MEM_FB_SIZE)
81 #define LINUX_SIZE          (MEM_FB_BASE - RK29_SDRAM_PHYS)
82
83 #define PREALLOC_WLAN_SEC_NUM           4
84 #define PREALLOC_WLAN_BUF_NUM           160
85 #define PREALLOC_WLAN_SECTION_HEADER    24
86
87 #define WLAN_SECTION_SIZE_0     (PREALLOC_WLAN_BUF_NUM * 128)
88 #define WLAN_SECTION_SIZE_1     (PREALLOC_WLAN_BUF_NUM * 128)
89 #define WLAN_SECTION_SIZE_2     (PREALLOC_WLAN_BUF_NUM * 512)
90 #define WLAN_SECTION_SIZE_3     (PREALLOC_WLAN_BUF_NUM * 1024)
91
92 #define WLAN_SKB_BUF_NUM        16
93
94 static struct sk_buff *wlan_static_skb[WLAN_SKB_BUF_NUM];
95
96 struct wifi_mem_prealloc {
97         void *mem_ptr;
98         unsigned long size;
99 };
100
101 extern struct sys_timer rk29_timer;
102
103 static int rk29_nand_io_init(void)
104 {
105     return 0;
106 }
107
108 struct rk29_nand_platform_data rk29_nand_data = {
109     .width      = 1,     /* data bus width in bytes */
110     .hw_ecc     = 1,     /* hw ecc 0: soft ecc */
111     .num_flash    = 1,
112     .io_init   = rk29_nand_io_init,
113 };
114
115 #ifdef CONFIG_FB_RK29
116 /*****************************************************************************************
117  * lcd  devices
118  * author: zyw@rock-chips.com
119  *****************************************************************************************/
120 //#ifdef  CONFIG_LCD_TD043MGEA1
121 #define LCD_TXD_PIN          INVALID_GPIO
122 #define LCD_CLK_PIN          INVALID_GPIO
123 #define LCD_CS_PIN           INVALID_GPIO
124 /*****************************************************************************************
125 * frame buffe  devices
126 * author: zyw@rock-chips.com
127 *****************************************************************************************/
128 #define FB_ID                       0
129 #define FB_DISPLAY_ON_PIN           RK29_PIN6_PD0
130 #define FB_LCD_STANDBY_PIN          RK29_PIN6_PD1
131 #define FB_LCD_CABC_EN_PIN          RK29_PIN6_PD2
132 #define FB_MCU_FMK_PIN              INVALID_GPIO
133
134 #define FB_DISPLAY_ON_VALUE         GPIO_HIGH
135 #define FB_LCD_STANDBY_VALUE        GPIO_HIGH
136
137 //#endif
138 static int rk29_lcd_io_init(void)
139 {
140     int ret = 0;
141     return ret;
142 }
143
144 static int rk29_lcd_io_deinit(void)
145 {
146     int ret = 0;
147     return ret;
148 }
149
150 static struct rk29lcd_info rk29_lcd_info = {
151     .txd_pin  = LCD_TXD_PIN,
152     .clk_pin = LCD_CLK_PIN,
153     .cs_pin = LCD_CS_PIN,
154     .io_init   = rk29_lcd_io_init,
155     .io_deinit = rk29_lcd_io_deinit,
156 };
157
158
159 static int rk29_fb_io_init(struct rk29_fb_setting_info *fb_setting)
160 {
161     int ret = 0;
162     if(fb_setting->mcu_fmk_en && (FB_MCU_FMK_PIN != INVALID_GPIO))
163     {
164         ret = gpio_request(FB_MCU_FMK_PIN, NULL);
165         if(ret != 0)
166         {
167             gpio_free(FB_MCU_FMK_PIN);
168             printk(">>>>>> FB_MCU_FMK_PIN gpio_request err \n ");
169         }
170         gpio_direction_input(FB_MCU_FMK_PIN);
171     }
172     if(fb_setting->disp_on_en && (FB_DISPLAY_ON_PIN != INVALID_GPIO))
173     {
174         ret = gpio_request(FB_DISPLAY_ON_PIN, NULL);
175         if(ret != 0)
176         {
177             gpio_free(FB_DISPLAY_ON_PIN);
178             printk(">>>>>> FB_DISPLAY_ON_PIN gpio_request err \n ");
179         }
180     }
181
182     if(fb_setting->disp_on_en && (FB_LCD_STANDBY_PIN != INVALID_GPIO))
183     {
184         ret = gpio_request(FB_LCD_STANDBY_PIN, NULL);
185         if(ret != 0)
186         {
187             gpio_free(FB_LCD_STANDBY_PIN);
188             printk(">>>>>> FB_LCD_STANDBY_PIN gpio_request err \n ");
189         }
190     }
191
192     if(FB_LCD_CABC_EN_PIN != INVALID_GPIO)
193     {
194         ret = gpio_request(FB_LCD_CABC_EN_PIN, NULL);
195         if(ret != 0)
196         {
197             gpio_free(FB_LCD_CABC_EN_PIN);
198             printk(">>>>>> FB_LCD_CABC_EN_PIN gpio_request err \n ");
199         }
200         gpio_direction_output(FB_LCD_CABC_EN_PIN, 0);
201         gpio_set_value(FB_LCD_CABC_EN_PIN, GPIO_LOW);
202     }
203
204     return ret;
205 }
206
207 static struct rk29fb_info rk29_fb_info = {
208     .fb_id   = FB_ID,
209     .disp_on_pin = FB_DISPLAY_ON_PIN,
210     .disp_on_value = FB_DISPLAY_ON_VALUE,
211     .standby_pin = FB_LCD_STANDBY_PIN,
212     .standby_value = FB_LCD_STANDBY_VALUE,
213     .mcu_fmk_pin = FB_MCU_FMK_PIN,
214     .lcd_info = &rk29_lcd_info,
215     .io_init   = rk29_fb_io_init,
216 };
217
218 /* rk29 fb resource */
219 static struct resource rk29_fb_resource[] = {
220         [0] = {
221         .name  = "lcdc reg",
222                 .start = RK29_LCDC_PHYS,
223                 .end   = RK29_LCDC_PHYS + RK29_LCDC_SIZE - 1,
224                 .flags = IORESOURCE_MEM,
225         },
226         [1] = {
227             .name  = "lcdc irq",
228                 .start = IRQ_LCDC,
229                 .end   = IRQ_LCDC,
230                 .flags = IORESOURCE_IRQ,
231         },
232         [2] = {
233             .name   = "win1 buf",
234         .start  = MEM_FB_BASE,
235         .end    = MEM_FB_BASE + MEM_FB_SIZE - 1,
236         .flags  = IORESOURCE_MEM,
237     },
238 };
239
240 /*platform_device*/
241 struct platform_device rk29_device_fb = {
242         .name             = "rk29-fb",
243         .id               = 4,
244         .num_resources    = ARRAY_SIZE(rk29_fb_resource),
245         .resource         = rk29_fb_resource,
246         .dev            = {
247                 .platform_data  = &rk29_fb_info,
248         }
249 };
250
251 struct platform_device rk29_device_dma_cpy = {
252         .name             = "dma_memcpy",
253         .id               = 4,
254
255 };
256
257 #endif
258
259 static struct android_pmem_platform_data android_pmem_pdata = {
260         .name           = "pmem",
261         .start          = PMEM_UI_BASE,
262         .size           = PMEM_UI_SIZE,
263         .no_allocator   = 0,
264         .cached         = 1,
265 };
266
267 static struct platform_device android_pmem_device = {
268         .name           = "android_pmem",
269         .id             = 0,
270         .dev            = {
271                 .platform_data = &android_pmem_pdata,
272         },
273 };
274
275
276 static struct android_pmem_platform_data android_pmem_cam_pdata = {
277         .name           = "pmem_cam",
278         .start          = PMEM_CAM_BASE,
279         .size           = PMEM_CAM_SIZE,
280         .no_allocator   = 1,
281         .cached         = 1,
282 };
283
284 static struct platform_device android_pmem_cam_device = {
285         .name           = "android_pmem",
286         .id             = 1,
287         .dev            = {
288                 .platform_data = &android_pmem_cam_pdata,
289         },
290 };
291
292
293 static struct vpu_mem_platform_data vpu_mem_pdata = {
294         .name           = "vpu_mem",
295         .start          = PMEM_VPU_BASE,
296         .size           = PMEM_VPU_SIZE,
297         .cached         = 1,
298 };
299
300 static struct platform_device rk29_vpu_mem_device = {
301         .name           = "vpu_mem",
302         .id                 = 2,
303         .dev            = {
304         .platform_data = &vpu_mem_pdata,
305         },
306 };
307
308 static struct platform_device rk29_v4l2_output_devce = {
309         .name           = "rk29_vout",
310 };
311
312 /*HANNSTAR_P1003 touch*/
313 #if defined (CONFIG_HANNSTAR_P1003)
314 #define TOUCH_RESET_PIN RK29_PIN6_PC3
315 #define TOUCH_INT_PIN   RK29_PIN0_PA2
316
317 int p1003_init_platform_hw(void)
318 {
319     if(gpio_request(TOUCH_RESET_PIN,NULL) != 0){
320       gpio_free(TOUCH_RESET_PIN);
321       printk("p1003_init_platform_hw gpio_request error\n");
322       return -EIO;
323     }
324
325     if(gpio_request(TOUCH_INT_PIN,NULL) != 0){
326       gpio_free(TOUCH_INT_PIN);
327       printk("p1003_init_platform_hw gpio_request error\n");
328       return -EIO;
329     }
330     gpio_pull_updown(TOUCH_INT_PIN, 1);
331     gpio_direction_output(TOUCH_RESET_PIN, 0);
332     msleep(500);
333     gpio_set_value(TOUCH_RESET_PIN,GPIO_LOW);
334     msleep(500);
335     gpio_set_value(TOUCH_RESET_PIN,GPIO_HIGH);
336
337     return 0;
338 }
339
340
341 struct p1003_platform_data p1003_info = {
342   .model= 1003,
343   .init_platform_hw= p1003_init_platform_hw,
344
345 };
346 #endif
347 #if defined (CONFIG_EETI_EGALAX)
348 #define TOUCH_RESET_PIN RK29_PIN6_PC3
349 #define TOUCH_INT_PIN   RK29_PIN0_PA2
350
351 static int EETI_EGALAX_init_platform_hw(void)
352 {
353     if(gpio_request(TOUCH_RESET_PIN,NULL) != 0){
354       gpio_free(TOUCH_RESET_PIN);
355       printk("p1003_init_platform_hw gpio_request error\n");
356       return -EIO;
357     }
358
359     if(gpio_request(TOUCH_INT_PIN,NULL) != 0){
360       gpio_free(TOUCH_INT_PIN);
361       printk("p1003_init_platform_hw gpio_request error\n");
362       return -EIO;
363     }
364     gpio_pull_updown(TOUCH_INT_PIN, 1);
365     gpio_direction_output(TOUCH_RESET_PIN, 0);
366     msleep(500);
367     gpio_set_value(TOUCH_RESET_PIN,GPIO_LOW);
368     msleep(500);
369     gpio_set_value(TOUCH_RESET_PIN,GPIO_HIGH);
370
371     return 0;
372 }
373
374
375 static struct eeti_egalax_platform_data eeti_egalax_info = {
376   .model= 1003,
377   .init_platform_hw= EETI_EGALAX_init_platform_hw,
378
379 };
380 #endif
381 /*MMA8452 gsensor*/
382 #if defined (CONFIG_GS_MMA8452)
383 #define MMA8452_INT_PIN   RK29_PIN0_PA3
384
385 static int mma8452_init_platform_hw(void)
386 {
387
388     if(gpio_request(MMA8452_INT_PIN,NULL) != 0){
389       gpio_free(MMA8452_INT_PIN);
390       printk("mma8452_init_platform_hw gpio_request error\n");
391       return -EIO;
392     }
393     gpio_pull_updown(MMA8452_INT_PIN, 1);
394     return 0;
395 }
396
397
398 static struct mma8452_platform_data mma8452_info = {
399   .model= 8452,
400   .swap_xy = 0,
401   .init_platform_hw= mma8452_init_platform_hw,
402
403 };
404 #endif
405
406
407 /*****************************************************************************************
408 * TI TPS65910 voltage regulator devices 
409 ******************************************************************************************/
410 #if defined (CONFIG_TPS65910_CORE)
411 /* VDD1 */
412 static struct regulator_consumer_supply rk29_vdd1_supplies[] = {
413         {
414                 .supply = "vcore",      //      set name vcore for all platform 
415         },
416 };
417
418 /* VDD1 DCDC */
419 static struct regulator_init_data rk29_regulator_vdd1 = {
420         .constraints = {
421                 .min_uV = 950000,
422                 .max_uV = 1400000,
423                 .valid_modes_mask = REGULATOR_MODE_NORMAL,
424                 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
425                 .always_on = true,
426                 .apply_uV = true,
427         },
428         .num_consumer_supplies = ARRAY_SIZE(rk29_vdd1_supplies),
429         .consumer_supplies = rk29_vdd1_supplies,
430 };
431
432 /* VDD2 */
433 static struct regulator_consumer_supply rk29_vdd2_supplies[] = {
434         {
435                 .supply = "vdd2",
436         },
437 };
438
439 /* VDD2 DCDC */
440 static struct regulator_init_data rk29_regulator_vdd2 = {
441         .constraints = {
442                 .min_uV = 1200000,
443                 .max_uV = 1200000,
444                 .valid_modes_mask = REGULATOR_MODE_NORMAL,
445                 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
446                 .always_on = true,
447                 .apply_uV = true,
448         },
449         .num_consumer_supplies = ARRAY_SIZE(rk29_vdd2_supplies),
450         .consumer_supplies = rk29_vdd2_supplies,
451 };
452
453 /* VIO */
454 static struct regulator_consumer_supply rk29_vio_supplies[] = {
455         {
456                 .supply = "vio",
457         },
458 };
459
460 /* VIO  LDO */
461 static struct regulator_init_data rk29_regulator_vio = {
462         .constraints = {
463                 .min_uV = 3300000,
464                 .max_uV = 3300000,
465                 .valid_modes_mask = REGULATOR_MODE_NORMAL,
466                 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
467                 .always_on = true,
468                 .apply_uV = true,
469         },
470         .num_consumer_supplies = ARRAY_SIZE(rk29_vio_supplies),
471         .consumer_supplies = rk29_vio_supplies,
472 };
473
474 /* VAUX1 */
475 static struct regulator_consumer_supply rk29_vaux1_supplies[] = {
476         {
477                 .supply = "vuax1",
478         },
479 };
480
481 /* VAUX1  LDO */
482 static struct regulator_init_data rk29_regulator_vaux1 = {
483         .constraints = {
484                 .min_uV = 2800000,
485                 .max_uV = 2800000,
486                 .valid_modes_mask = REGULATOR_MODE_STANDBY,
487                 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
488                 .apply_uV = true,
489         },
490         .num_consumer_supplies = ARRAY_SIZE(rk29_vaux1_supplies),
491         .consumer_supplies = rk29_vaux1_supplies,
492 };
493
494 /* VAUX2 */
495 static struct regulator_consumer_supply rk29_vaux2_supplies[] = {
496         {
497                 .supply = "vuax2",
498         },
499 };
500
501 /* VAUX2  LDO */
502 static struct regulator_init_data rk29_regulator_vaux2 = {
503         .constraints = {
504                 .min_uV = 2900000,
505                 .max_uV = 2900000,
506                 .valid_modes_mask = REGULATOR_MODE_NORMAL,
507                 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
508                 .apply_uV = true,
509         },
510         .num_consumer_supplies = ARRAY_SIZE(rk29_vaux2_supplies),
511         .consumer_supplies = rk29_vaux2_supplies,
512 };
513
514 /* VDAC */
515 static struct regulator_consumer_supply rk29_vdac_supplies[] = {
516         {
517                 .supply = "vdac",
518         },
519 };
520
521 /* VDAC  LDO */
522 static struct regulator_init_data rk29_regulator_vdac = {
523         .constraints = {
524                 .min_uV = 1800000,
525                 .max_uV = 1800000,
526                 .valid_modes_mask = REGULATOR_MODE_NORMAL,
527                 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
528                 .apply_uV = true,
529         },
530         .num_consumer_supplies = ARRAY_SIZE(rk29_vdac_supplies),
531         .consumer_supplies = rk29_vdac_supplies,
532 };
533
534 /* VAUX33 */
535 static struct regulator_consumer_supply rk29_vaux33_supplies[] = {
536         {
537                 .supply = "vaux33",
538         },
539 };
540
541 /* VAUX33  LDO */
542 static struct regulator_init_data rk29_regulator_vaux33 = {
543         .constraints = {
544                 .min_uV = 3300000,
545                 .max_uV = 3300000,
546                 .valid_modes_mask = REGULATOR_MODE_NORMAL,
547                 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
548                 .apply_uV = true,
549         },
550         .num_consumer_supplies = ARRAY_SIZE(rk29_vaux33_supplies),
551         .consumer_supplies = rk29_vaux33_supplies,
552 };
553
554 /* VMMC */
555 static struct regulator_consumer_supply rk29_vmmc_supplies[] = {
556         {
557                 .supply = "vmmc",
558         },
559 };
560
561 /* VMMC  LDO */
562 static struct regulator_init_data rk29_regulator_vmmc = {
563         .constraints = {
564                 .min_uV = 3000000,
565                 .max_uV = 3000000,
566                 .valid_modes_mask = REGULATOR_MODE_STANDBY,
567                 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
568                 .apply_uV = true,
569         },
570         .num_consumer_supplies = ARRAY_SIZE(rk29_vmmc_supplies),
571         .consumer_supplies = rk29_vmmc_supplies,
572 };
573
574 /* VPLL */
575 static struct regulator_consumer_supply rk29_vpll_supplies[] = {
576         {
577                 .supply = "vpll",
578         },
579 };
580
581 /* VPLL  LDO */
582 static struct regulator_init_data rk29_regulator_vpll = {
583         .constraints = {
584                 .min_uV = 2500000,
585                 .max_uV = 2500000,
586                 .valid_modes_mask = REGULATOR_MODE_NORMAL,
587                 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
588                 .always_on = true,
589                 .apply_uV = true,
590         },
591         .num_consumer_supplies = ARRAY_SIZE(rk29_vpll_supplies),
592         .consumer_supplies = rk29_vpll_supplies,
593 };
594
595 /* VDIG1 */
596 static struct regulator_consumer_supply rk29_vdig1_supplies[] = {
597         {
598                 .supply = "vdig1",
599         },
600 };
601
602 /* VDIG1  LDO */
603 static struct regulator_init_data rk29_regulator_vdig1 = {
604         .constraints = {
605                 .min_uV = 2700000,
606                 .max_uV = 2700000,
607                 .valid_modes_mask = REGULATOR_MODE_STANDBY,
608                 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
609                 .apply_uV = true,
610         },
611         .num_consumer_supplies = ARRAY_SIZE(rk29_vdig1_supplies),
612         .consumer_supplies = rk29_vdig1_supplies,
613 };
614
615 /* VDIG2 */
616 static struct regulator_consumer_supply rk29_vdig2_supplies[] = {
617         {
618                 .supply = "vdig2",
619         },
620 };
621
622 /* VDIG2  LDO */
623 static struct regulator_init_data rk29_regulator_vdig2 = {
624         .constraints = {
625                 .min_uV = 1200000,
626                 .max_uV = 1200000,
627                 .valid_modes_mask = REGULATOR_MODE_NORMAL,
628                 .valid_ops_mask = REGULATOR_CHANGE_STATUS,
629                 .always_on = true,
630                 .apply_uV = true,
631         },
632         .num_consumer_supplies = ARRAY_SIZE(rk29_vdig2_supplies),
633         .consumer_supplies = rk29_vdig2_supplies,
634 };
635
636 static int rk29_tps65910_config(struct tps65910_platform_data *pdata)
637 {
638         u8 val  = 0;
639         int i   = 0;
640         int err = -1;
641
642
643         /* Configure TPS65910 for rk29 board needs */
644         printk("rk29_tps65910_config: tps65910 init config.\n");
645         
646         err = tps65910_i2c_read_u8(TPS65910_I2C_ID0, &val, TPS65910_REG_DEVCTRL2);
647         if (err) {
648                 printk(KERN_ERR "Unable to read TPS65910_REG_DEVCTRL2 reg\n");
649                 return -EIO;
650         }       
651         /* Set sleep state active high and allow device turn-off after PWRON long press */
652         val |= (TPS65910_DEV2_SLEEPSIG_POL | TPS65910_DEV2_PWON_LP_OFF);
653
654         err = tps65910_i2c_write_u8(TPS65910_I2C_ID0, val,
655                         TPS65910_REG_DEVCTRL2);
656         if (err) {
657                 printk(KERN_ERR "Unable to write TPS65910_REG_DEVCTRL2 reg\n");
658                 return -EIO;
659         }
660
661         /* Set the maxinum load current */
662         /* VDD1 */
663         err = tps65910_i2c_read_u8(TPS65910_I2C_ID0, &val, TPS65910_REG_VDD1);
664         if (err) {
665                 printk(KERN_ERR "Unable to read TPS65910_REG_VDD1 reg\n");
666                 return -EIO;
667         }
668
669         val |= (1<<5);
670         err = tps65910_i2c_write_u8(TPS65910_I2C_ID0, val, TPS65910_REG_VDD1);
671         if (err) {
672                 printk(KERN_ERR "Unable to write TPS65910_REG_VDD1 reg\n");
673                 return -EIO;
674         }
675
676         /* VDD2 */
677         err = tps65910_i2c_read_u8(TPS65910_I2C_ID0, &val, TPS65910_REG_VDD2);
678         if (err) {
679                 printk(KERN_ERR "Unable to read TPS65910_REG_VDD2 reg\n");
680                 return -EIO;
681         }
682
683         val |= (1<<5);
684         err = tps65910_i2c_write_u8(TPS65910_I2C_ID0, val, TPS65910_REG_VDD2);
685         if (err) {
686                 printk(KERN_ERR "Unable to write TPS65910_REG_VDD2 reg\n");
687                 return -EIO;
688         }
689
690         /* VIO */
691         err = tps65910_i2c_read_u8(TPS65910_I2C_ID0, &val, TPS65910_REG_VIO);
692         if (err) {
693                 printk(KERN_ERR "Unable to read TPS65910_REG_VIO reg\n");
694                 return -EIO;
695         }
696
697         val |= (1<<6);
698         err = tps65910_i2c_write_u8(TPS65910_I2C_ID0, val, TPS65910_REG_VIO);
699         if (err) {
700                 printk(KERN_ERR "Unable to write TPS65910_REG_VIO reg\n");
701                 return -EIO;
702         }
703
704         /* Mask ALL interrupts */
705         err = tps65910_i2c_write_u8(TPS65910_I2C_ID0, 0xFF,
706                         TPS65910_REG_INT_MSK);
707         if (err) {
708                 printk(KERN_ERR "Unable to write TPS65910_REG_INT_MSK reg\n");
709                 return -EIO;
710         }
711         err = tps65910_i2c_write_u8(TPS65910_I2C_ID0, 0x03,
712                         TPS65910_REG_INT_MSK2);
713         if (err) {
714                 printk(KERN_ERR "Unable to write TPS65910_REG_INT_MSK2 reg\n");
715                 return -EIO;
716         }
717         
718         /* Set RTC Power, disable Smart Reflex in DEVCTRL_REG */
719         val = 0;
720         val |= (TPS65910_SR_CTL_I2C_SEL);
721         err = tps65910_i2c_write_u8(TPS65910_I2C_ID0, val,
722                         TPS65910_REG_DEVCTRL);
723         if (err) {
724                 printk(KERN_ERR "Unable to write TPS65910_REG_DEVCTRL reg\n");
725                 return -EIO;
726         }
727
728         /* initilize all ISR work as NULL, specific driver will
729          * assign function(s) later.
730          */
731         for (i = 0; i < TPS65910_MAX_IRQS; i++)
732                 pdata->handlers[i] = NULL;
733
734         return 0;
735 }
736
737 struct tps65910_platform_data rk29_tps65910_data = {
738         .irq_num        = (unsigned)TPS65910_HOST_IRQ,
739         .gpio           = NULL,
740         .vio            = &rk29_regulator_vio,
741         .vdd1           = &rk29_regulator_vdd1,
742         .vdd2           = &rk29_regulator_vdd2,
743         .vdd3           = NULL,
744         .vdig1          = &rk29_regulator_vdig1,
745         .vdig2          = &rk29_regulator_vdig2,
746         .vaux33         = &rk29_regulator_vaux33,
747         .vmmc           = &rk29_regulator_vmmc,
748         .vaux1          = &rk29_regulator_vaux1,
749         .vaux2          = &rk29_regulator_vaux2,
750         .vdac           = &rk29_regulator_vdac,
751         .vpll           = &rk29_regulator_vpll,
752         .board_tps65910_config = rk29_tps65910_config,
753 };
754
755 #endif /* CONFIG_TPS65910_CORE */
756
757
758 /*****************************************************************************************
759  * i2c devices
760  * author: kfx@rock-chips.com
761 *****************************************************************************************/
762 static int rk29_i2c0_io_init(void)
763 {
764         rk29_mux_api_set(GPIO2B7_I2C0SCL_NAME, GPIO2L_I2C0_SCL);
765         rk29_mux_api_set(GPIO2B6_I2C0SDA_NAME, GPIO2L_I2C0_SDA);
766         return 0;
767 }
768
769 static int rk29_i2c1_io_init(void)
770 {
771         rk29_mux_api_set(GPIO1A7_I2C1SCL_NAME, GPIO1L_I2C1_SCL);
772         rk29_mux_api_set(GPIO1A6_I2C1SDA_NAME, GPIO1L_I2C1_SDA);
773         return 0;
774 }
775 static int rk29_i2c2_io_init(void)
776 {
777         rk29_mux_api_set(GPIO5D4_I2C2SCL_NAME, GPIO5H_I2C2_SCL);
778         rk29_mux_api_set(GPIO5D3_I2C2SDA_NAME, GPIO5H_I2C2_SDA);
779         return 0;
780 }
781
782 static int rk29_i2c3_io_init(void)
783 {
784         rk29_mux_api_set(GPIO2B5_UART3RTSN_I2C3SCL_NAME, GPIO2L_I2C3_SCL);
785         rk29_mux_api_set(GPIO2B4_UART3CTSN_I2C3SDA_NAME, GPIO2L_I2C3_SDA);
786         return 0;
787 }
788
789 struct rk29_i2c_platform_data default_i2c0_data = {
790         .bus_num    = 0,
791         .flags      = 0,
792         .slave_addr = 0xff,
793         .scl_rate  = 400*1000,
794         .mode           = I2C_MODE_IRQ,
795         .io_init = rk29_i2c0_io_init,
796 };
797
798 struct rk29_i2c_platform_data default_i2c1_data = {
799         .bus_num    = 1,
800         .flags      = 0,
801         .slave_addr = 0xff,
802         .scl_rate  = 400*1000,
803         .mode           = I2C_MODE_POLL,
804         .io_init = rk29_i2c1_io_init,
805 };
806
807 struct rk29_i2c_platform_data default_i2c2_data = {
808         .bus_num    = 2,
809         .flags      = 0,
810         .slave_addr = 0xff,
811         .scl_rate  = 400*1000,
812         .mode           = I2C_MODE_IRQ,
813         .io_init = rk29_i2c2_io_init,
814 };
815
816 struct rk29_i2c_platform_data default_i2c3_data = {
817         .bus_num    = 3,
818         .flags      = 0,
819         .slave_addr = 0xff,
820         .scl_rate  = 400*1000,
821         .mode           = I2C_MODE_POLL,
822         .io_init = rk29_i2c3_io_init,
823 };
824
825 #ifdef CONFIG_I2C0_RK29
826 static struct i2c_board_info __initdata board_i2c0_devices[] = {
827 #if defined (CONFIG_RK1000_CONTROL)
828         {
829                 .type                   = "rk1000_control",
830                 .addr           = 0x40,
831                 .flags                  = 0,
832         },
833 #endif
834 #if defined (CONFIG_SND_SOC_RK1000)
835         {
836                 .type                   = "rk1000_i2c_codec",
837                 .addr           = 0x60,
838                 .flags                  = 0,
839         },
840 #endif
841 #if defined (CONFIG_SND_SOC_WM8900)
842         {
843                 .type                   = "wm8900",
844                 .addr           = 0x1A,
845                 .flags                  = 0,
846         },
847 #endif
848 #if defined (CONFIG_BATTERY_STC3100)
849         {
850                 .type                   = "stc3100",
851                 .addr           = 0x70,
852                 .flags                  = 0,
853         },
854 #endif
855 #if defined (CONFIG_BATTERY_BQ27510)
856         {
857                 .type                   = "bq27510",
858                 .addr           = 0x55,
859                 .flags                  = 0,
860         },
861 #endif
862 #if defined (CONFIG_RTC_HYM8563)
863         {
864                 .type                   = "rtc_hym8563",
865                 .addr           = 0x51,
866                 .flags                  = 0,
867                 .irq            = RK29_PIN0_PA1,
868         },
869 #endif
870 #if defined (CONFIG_GS_MMA8452)
871     {
872       .type           = "gs_mma8452",
873       .addr           = 0x1c,
874       .flags          = 0,
875       .irq            = MMA8452_INT_PIN,
876       .platform_data  = &mma8452_info,
877     },
878 #endif
879 #if defined (CONFIG_SENSORS_AK8973)
880         {
881                 .type                   = "ak8973",
882                 .addr           = 0x1d,
883                 .flags                  = 0,
884                 .irq                    = RK29_PIN0_PA4,
885         },
886 #endif
887 #if defined (CONFIG_SENSORS_AK8975)
888         {
889                 .type                   = "ak8975",
890                 .addr           = 0x0d,
891                 .flags                  = 0,
892                 .irq                    = RK29_PIN0_PA4,
893         },
894 #endif
895 };
896 #endif
897
898 #ifdef CONFIG_I2C1_RK29
899 static struct i2c_board_info __initdata board_i2c1_devices[] = {
900 #if defined (CONFIG_RK1000_CONTROL1)
901         {
902                 .type                   = "rk1000_control",
903                 .addr                   = 0x40,
904                 .flags                  = 0,
905         },
906 #endif
907 #if defined (CONFIG_ANX7150)
908     {
909                 .type           = "anx7150",
910         .addr           = 0x39,             //0x39, 0x3d
911         .flags          = 0,
912         .irq            = RK29_PIN1_PD7,
913     },
914 #endif
915
916 };
917 #endif
918
919 #ifdef CONFIG_I2C2_RK29
920 static struct i2c_board_info __initdata board_i2c2_devices[] = {
921 #if defined (CONFIG_HANNSTAR_P1003)
922     {
923         .type           = "p1003_touch",
924         .addr           = 0x04,
925         .flags          = 0,
926         .irq            = RK29_PIN0_PA2,
927         .platform_data  = &p1003_info,
928     },
929 #endif
930 #if defined (CONFIG_EETI_EGALAX)
931     {
932         .type           = "egalax_i2c",
933         .addr           = 0x04,
934         .flags          = 0,
935         .irq            = RK29_PIN0_PA2,
936         .platform_data  = &eeti_egalax_info,
937     },
938 #endif
939 #if defined (CONFIG_TPS65910_CORE)
940         {
941         .type           = "tps65910",
942         .addr           = TPS65910_I2C_ID0,
943         .flags          = 0,
944         .irq            = TPS65910_HOST_IRQ,
945         .platform_data  = &rk29_tps65910_data,
946         },
947 #endif
948 };
949 #endif
950
951 #ifdef CONFIG_I2C3_RK29
952 static struct i2c_board_info __initdata board_i2c3_devices[] = {
953 };
954 #endif
955
956 /*****************************************************************************************
957  * camera  devices
958  * author: ddl@rock-chips.com
959  *****************************************************************************************/
960 #ifdef CONFIG_VIDEO_RK29
961 #define SENSOR_NAME_0 RK29_CAM_SENSOR_NAME_OV5642                       /* back camera sensor */
962 #define SENSOR_IIC_ADDR_0           0x78
963 #define SENSOR_IIC_ADAPTER_ID_0    1
964 #define SENSOR_POWER_PIN_0         INVALID_GPIO
965 #define SENSOR_RESET_PIN_0         INVALID_GPIO
966 #define SENSOR_POWERDN_PIN_0       RK29_PIN6_PB7
967 #define SENSOR_FALSH_PIN_0         INVALID_GPIO
968 #define SENSOR_POWERACTIVE_LEVEL_0 RK29_CAM_POWERACTIVE_L
969 #define SENSOR_RESETACTIVE_LEVEL_0 RK29_CAM_RESETACTIVE_L
970 #define SENSOR_POWERDNACTIVE_LEVEL_0 RK29_CAM_POWERDNACTIVE_H
971 #define SENSOR_FLASHACTIVE_LEVEL_0 RK29_CAM_FLASHACTIVE_L
972
973 #define SENSOR_NAME_1 RK29_CAM_SENSOR_NAME_OV2659                       /* front camera sensor */
974 #define SENSOR_IIC_ADDR_1           0x60
975 #define SENSOR_IIC_ADAPTER_ID_1    1
976 #define SENSOR_POWER_PIN_1         INVALID_GPIO
977 #define SENSOR_RESET_PIN_1         INVALID_GPIO
978 #define SENSOR_POWERDN_PIN_1       RK29_PIN5_PD7
979 #define SENSOR_FALSH_PIN_1         INVALID_GPIO
980 #define SENSOR_POWERACTIVE_LEVEL_1 RK29_CAM_POWERACTIVE_L
981 #define SENSOR_RESETACTIVE_LEVEL_1 RK29_CAM_RESETACTIVE_L
982 #define SENSOR_POWERDNACTIVE_LEVEL_1 RK29_CAM_POWERDNACTIVE_H
983 #define SENSOR_FLASHACTIVE_LEVEL_1 RK29_CAM_FLASHACTIVE_L
984
985 static int rk29_sensor_io_init(void);
986 static int rk29_sensor_io_deinit(int sensor);
987 static int rk29_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd,int on);
988
989 static struct rk29camera_platform_data rk29_camera_platform_data = {
990     .io_init = rk29_sensor_io_init,
991     .io_deinit = rk29_sensor_io_deinit,
992     .sensor_ioctrl = rk29_sensor_ioctrl,
993     .gpio_res = {
994         {
995             .gpio_reset = SENSOR_RESET_PIN_0,
996             .gpio_power = SENSOR_POWER_PIN_0,
997             .gpio_powerdown = SENSOR_POWERDN_PIN_0,
998             .gpio_flash = SENSOR_FALSH_PIN_0,
999             .gpio_flag = (SENSOR_POWERACTIVE_LEVEL_0|SENSOR_RESETACTIVE_LEVEL_0|SENSOR_POWERDNACTIVE_LEVEL_0|SENSOR_FLASHACTIVE_LEVEL_0),
1000             .gpio_init = 0,
1001             .dev_name = SENSOR_NAME_0,
1002         }, {
1003             .gpio_reset = SENSOR_RESET_PIN_1,
1004             .gpio_power = SENSOR_POWER_PIN_1,
1005             .gpio_powerdown = SENSOR_POWERDN_PIN_1,
1006             .gpio_flash = SENSOR_FALSH_PIN_1,
1007             .gpio_flag = (SENSOR_POWERACTIVE_LEVEL_1|SENSOR_RESETACTIVE_LEVEL_1|SENSOR_POWERDNACTIVE_LEVEL_1|SENSOR_FLASHACTIVE_LEVEL_1),
1008             .gpio_init = 0,
1009             .dev_name = SENSOR_NAME_1,
1010         }
1011     },
1012         #ifdef CONFIG_VIDEO_RK29_WORK_IPP
1013         .meminfo = {
1014             .name  = "camera_ipp_mem",
1015                 .start = MEM_CAMIPP_BASE,
1016                 .size   = MEM_CAMIPP_SIZE,
1017         }
1018         #endif
1019 };
1020
1021 static int rk29_sensor_io_init(void)
1022 {
1023     int ret = 0, i;
1024     unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;
1025         unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO;
1026         unsigned int camera_ioflag;
1027
1028     for (i=0; i<2; i++) {
1029         camera_reset = rk29_camera_platform_data.gpio_res[i].gpio_reset;
1030         camera_power = rk29_camera_platform_data.gpio_res[i].gpio_power;
1031                 camera_powerdown = rk29_camera_platform_data.gpio_res[i].gpio_powerdown;
1032         camera_flash = rk29_camera_platform_data.gpio_res[i].gpio_flash;
1033                 camera_ioflag = rk29_camera_platform_data.gpio_res[i].gpio_flag;
1034                 rk29_camera_platform_data.gpio_res[i].gpio_init = 0;
1035
1036         if (camera_power != INVALID_GPIO) {
1037             ret = gpio_request(camera_power, "camera power");
1038             if (ret)
1039                                 goto sensor_io_int_loop_end;
1040                         rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_POWERACTIVE_MASK;
1041             gpio_set_value(camera_reset, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
1042             gpio_direction_output(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
1043
1044                         //printk("\n%s....power pin(%d) init success(0x%x)  \n",__FUNCTION__,camera_power,(((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
1045
1046         }
1047
1048         if (camera_reset != INVALID_GPIO) {
1049             ret = gpio_request(camera_reset, "camera reset");
1050             if (ret)
1051                                 goto sensor_io_int_loop_end;
1052                         rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_RESETACTIVE_MASK;
1053             gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
1054             gpio_direction_output(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
1055
1056                         //printk("\n%s....reset pin(%d) init success(0x%x)\n",__FUNCTION__,camera_reset,((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
1057
1058         }
1059
1060                 if (camera_powerdown != INVALID_GPIO) {
1061             ret = gpio_request(camera_powerdown, "camera powerdown");
1062             if (ret)
1063                                 goto sensor_io_int_loop_end;
1064                         rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_POWERDNACTIVE_MASK;
1065             gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
1066             gpio_direction_output(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
1067
1068                         //printk("\n%s....powerdown pin(%d) init success(0x%x) \n",__FUNCTION__,camera_powerdown,((camera_ioflag&RK29_CAM_POWERDNACTIVE_BITPOS)>>RK29_CAM_POWERDNACTIVE_BITPOS));
1069
1070         }
1071
1072                 if (camera_flash != INVALID_GPIO) {
1073             ret = gpio_request(camera_flash, "camera flash");
1074             if (ret)
1075                                 goto sensor_io_int_loop_end;
1076                         rk29_camera_platform_data.gpio_res[i].gpio_init |= RK29_CAM_FLASHACTIVE_MASK;
1077             gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
1078             gpio_direction_output(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
1079
1080                         //printk("\n%s....flash pin(%d) init success(0x%x) \n",__FUNCTION__,camera_flash,((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
1081
1082         }
1083                 continue;
1084 sensor_io_int_loop_end:
1085                 rk29_sensor_io_deinit(i);
1086                 continue;
1087     }
1088
1089     return 0;
1090 }
1091
1092 static int rk29_sensor_io_deinit(int sensor)
1093 {
1094     unsigned int camera_reset = INVALID_GPIO, camera_power = INVALID_GPIO;
1095         unsigned int camera_powerdown = INVALID_GPIO, camera_flash = INVALID_GPIO;
1096
1097     camera_reset = rk29_camera_platform_data.gpio_res[sensor].gpio_reset;
1098     camera_power = rk29_camera_platform_data.gpio_res[sensor].gpio_power;
1099         camera_powerdown = rk29_camera_platform_data.gpio_res[sensor].gpio_powerdown;
1100     camera_flash = rk29_camera_platform_data.gpio_res[sensor].gpio_flash;
1101
1102         if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_POWERACTIVE_MASK) {
1103             if (camera_power != INVALID_GPIO) {
1104                 gpio_direction_input(camera_power);
1105                 gpio_free(camera_power);
1106             }
1107         }
1108
1109         if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_RESETACTIVE_MASK) {
1110             if (camera_reset != INVALID_GPIO)  {
1111                 gpio_direction_input(camera_reset);
1112                 gpio_free(camera_reset);
1113             }
1114         }
1115
1116         if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_POWERDNACTIVE_MASK) {
1117             if (camera_powerdown != INVALID_GPIO)  {
1118                 gpio_direction_input(camera_powerdown);
1119                 gpio_free(camera_powerdown);
1120             }
1121         }
1122
1123         if (rk29_camera_platform_data.gpio_res[sensor].gpio_init & RK29_CAM_FLASHACTIVE_MASK) {
1124             if (camera_flash != INVALID_GPIO)  {
1125                 gpio_direction_input(camera_flash);
1126                 gpio_free(camera_flash);
1127             }
1128         }
1129
1130         rk29_camera_platform_data.gpio_res[sensor].gpio_init = 0;
1131     return 0;
1132 }
1133 static int rk29_sensor_ioctrl(struct device *dev,enum rk29camera_ioctrl_cmd cmd, int on)
1134 {
1135     unsigned int camera_power=INVALID_GPIO,camera_reset=INVALID_GPIO, camera_powerdown=INVALID_GPIO,camera_flash = INVALID_GPIO;
1136         unsigned int camera_ioflag,camera_io_init;
1137         int ret = RK29_CAM_IO_SUCCESS;
1138
1139     if(rk29_camera_platform_data.gpio_res[0].dev_name &&  (strcmp(rk29_camera_platform_data.gpio_res[0].dev_name, dev_name(dev)) == 0)) {
1140                 camera_power = rk29_camera_platform_data.gpio_res[0].gpio_power;
1141                 camera_reset = rk29_camera_platform_data.gpio_res[0].gpio_reset;
1142         camera_powerdown = rk29_camera_platform_data.gpio_res[0].gpio_powerdown;
1143                 camera_flash = rk29_camera_platform_data.gpio_res[0].gpio_flash;
1144                 camera_ioflag = rk29_camera_platform_data.gpio_res[0].gpio_flag;
1145                 camera_io_init = rk29_camera_platform_data.gpio_res[0].gpio_init;
1146     } else if (rk29_camera_platform_data.gpio_res[1].dev_name && (strcmp(rk29_camera_platform_data.gpio_res[1].dev_name, dev_name(dev)) == 0)) {
1147         camera_power = rk29_camera_platform_data.gpio_res[1].gpio_power;
1148         camera_reset = rk29_camera_platform_data.gpio_res[1].gpio_reset;
1149         camera_powerdown = rk29_camera_platform_data.gpio_res[1].gpio_powerdown;
1150                 camera_flash = rk29_camera_platform_data.gpio_res[1].gpio_flash;
1151                 camera_ioflag = rk29_camera_platform_data.gpio_res[1].gpio_flag;
1152                 camera_io_init = rk29_camera_platform_data.gpio_res[1].gpio_init;
1153     }
1154
1155         switch (cmd)
1156         {
1157                 case Cam_Power:
1158                 {
1159                         if (camera_power != INVALID_GPIO)  {
1160                                 if (camera_io_init & RK29_CAM_POWERACTIVE_MASK) {
1161                                 if (on) {
1162                                         gpio_set_value(camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
1163                                                 //printk("\n%s..%s..PowerPin=%d ..PinLevel = %x   \n",__FUNCTION__,dev_name(dev), camera_power, ((camera_ioflag&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
1164                                                 msleep(10);
1165                                         } else {
1166                                                 gpio_set_value(camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
1167                                                 //printk("\n%s..%s..PowerPin=%d ..PinLevel = %x   \n",__FUNCTION__,dev_name(dev), camera_power, (((~camera_ioflag)&RK29_CAM_POWERACTIVE_MASK)>>RK29_CAM_POWERACTIVE_BITPOS));
1168                                         }
1169                                 } else {
1170                                         ret = RK29_CAM_EIO_REQUESTFAIL;
1171                                         printk("\n%s..%s..ResetPin=%d request failed!\n",__FUNCTION__,dev_name(dev),camera_reset);
1172                                 }
1173                     } else {
1174                                 ret = RK29_CAM_EIO_INVALID;
1175                     }
1176                         break;
1177                 }
1178                 case Cam_Reset:
1179                 {
1180                         if (camera_reset != INVALID_GPIO) {
1181                                 if (camera_io_init & RK29_CAM_RESETACTIVE_MASK) {
1182                                         if (on) {
1183                                         gpio_set_value(camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
1184                                         //printk("\n%s..%s..ResetPin=%d ..PinLevel = %x \n",__FUNCTION__,dev_name(dev),camera_reset, ((camera_ioflag&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
1185                                         } else {
1186                                                 gpio_set_value(camera_reset,(((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
1187                                         //printk("\n%s..%s..ResetPin= %d..PinLevel = %x   \n",__FUNCTION__,dev_name(dev), camera_reset, (((~camera_ioflag)&RK29_CAM_RESETACTIVE_MASK)>>RK29_CAM_RESETACTIVE_BITPOS));
1188                                 }
1189                                 } else {
1190                                         ret = RK29_CAM_EIO_REQUESTFAIL;
1191                                         printk("\n%s..%s..ResetPin=%d request failed!\n",__FUNCTION__,dev_name(dev),camera_reset);
1192                                 }
1193                     } else {
1194                                 ret = RK29_CAM_EIO_INVALID;
1195                     }
1196                         break;
1197                 }
1198
1199                 case Cam_PowerDown:
1200                 {
1201                         if (camera_powerdown != INVALID_GPIO) {
1202                                 if (camera_io_init & RK29_CAM_POWERDNACTIVE_MASK) {
1203                                         if (on) {
1204                                         gpio_set_value(camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
1205                                         //printk("\n%s..%s..PowerDownPin=%d ..PinLevel = %x \n",__FUNCTION__,dev_name(dev),camera_powerdown, ((camera_ioflag&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
1206                                         } else {
1207                                                 gpio_set_value(camera_powerdown,(((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
1208                                         //printk("\n%s..%s..PowerDownPin= %d..PinLevel = %x   \n",__FUNCTION__,dev_name(dev), camera_powerdown, (((~camera_ioflag)&RK29_CAM_POWERDNACTIVE_MASK)>>RK29_CAM_POWERDNACTIVE_BITPOS));
1209                                 }
1210                                 } else {
1211                                         ret = RK29_CAM_EIO_REQUESTFAIL;
1212                                         printk("\n%s..%s..PowerDownPin=%d request failed!\n",__FUNCTION__,dev_name(dev),camera_powerdown);
1213                                 }
1214                     } else {
1215                                 ret = RK29_CAM_EIO_INVALID;
1216                     }
1217                         break;
1218                 }
1219
1220                 case Cam_Flash:
1221                 {
1222                         if (camera_flash != INVALID_GPIO) {
1223                                 if (camera_io_init & RK29_CAM_FLASHACTIVE_MASK) {
1224                                         if (on) {
1225                                         gpio_set_value(camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
1226                                         //printk("\n%s..%s..FlashPin=%d ..PinLevel = %x \n",__FUNCTION__,dev_name(dev),camera_flash, ((camera_ioflag&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
1227                                         } else {
1228                                                 gpio_set_value(camera_flash,(((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
1229                                         //printk("\n%s..%s..FlashPin= %d..PinLevel = %x   \n",__FUNCTION__,dev_name(dev), camera_flash, (((~camera_ioflag)&RK29_CAM_FLASHACTIVE_MASK)>>RK29_CAM_FLASHACTIVE_BITPOS));
1230                                 }
1231                                 } else {
1232                                         ret = RK29_CAM_EIO_REQUESTFAIL;
1233                                         printk("\n%s..%s..FlashPin=%d request failed!\n",__FUNCTION__,dev_name(dev),camera_flash);
1234                                 }
1235                     } else {
1236                                 ret = RK29_CAM_EIO_INVALID;
1237                     }
1238                         break;
1239                 }
1240
1241                 default:
1242                 {
1243                         printk("%s cmd(0x%x) is unknown!\n",__FUNCTION__, cmd);
1244                         break;
1245                 }
1246         }
1247     return ret;
1248 }
1249 static int rk29_sensor_power(struct device *dev, int on)
1250 {
1251         rk29_sensor_ioctrl(dev,Cam_Power,on);
1252     return 0;
1253 }
1254 static int rk29_sensor_reset(struct device *dev)
1255 {
1256         rk29_sensor_ioctrl(dev,Cam_Reset,1);
1257         msleep(2);
1258         rk29_sensor_ioctrl(dev,Cam_Reset,0);
1259         return 0;
1260 }
1261 static int rk29_sensor_powerdown(struct device *dev, int on)
1262 {
1263         return rk29_sensor_ioctrl(dev,Cam_PowerDown,on);
1264 }
1265 #if (SENSOR_IIC_ADDR_0 != 0x00)
1266 static struct i2c_board_info rk29_i2c_cam_info_0[] = {
1267         {
1268                 I2C_BOARD_INFO(SENSOR_NAME_0, SENSOR_IIC_ADDR_0>>1)
1269         },
1270 };
1271
1272 static struct soc_camera_link rk29_iclink_0 = {
1273         .bus_id         = RK29_CAM_PLATFORM_DEV_ID,
1274         .power          = rk29_sensor_power,
1275         .powerdown  = rk29_sensor_powerdown,
1276         .board_info     = &rk29_i2c_cam_info_0[0],
1277         .i2c_adapter_id = SENSOR_IIC_ADAPTER_ID_0,
1278         .module_name    = SENSOR_NAME_0,
1279 };
1280
1281 /*platform_device : soc-camera need  */
1282 static struct platform_device rk29_soc_camera_pdrv_0 = {
1283         .name   = "soc-camera-pdrv",
1284         .id     = 0,
1285         .dev    = {
1286                 .init_name = SENSOR_NAME_0,
1287                 .platform_data = &rk29_iclink_0,
1288         },
1289 };
1290 #endif
1291 static struct i2c_board_info rk29_i2c_cam_info_1[] = {
1292         {
1293                 I2C_BOARD_INFO(SENSOR_NAME_1, SENSOR_IIC_ADDR_1>>1)
1294         },
1295 };
1296
1297 static struct soc_camera_link rk29_iclink_1 = {
1298         .bus_id         = RK29_CAM_PLATFORM_DEV_ID,
1299         .power          = rk29_sensor_power,
1300         .powerdown  = rk29_sensor_powerdown,
1301         .board_info     = &rk29_i2c_cam_info_1[0],
1302         .i2c_adapter_id = SENSOR_IIC_ADAPTER_ID_1,
1303         .module_name    = SENSOR_NAME_1,
1304 };
1305
1306 /*platform_device : soc-camera need  */
1307 static struct platform_device rk29_soc_camera_pdrv_1 = {
1308         .name   = "soc-camera-pdrv",
1309         .id     = 1,
1310         .dev    = {
1311                 .init_name = SENSOR_NAME_1,
1312                 .platform_data = &rk29_iclink_1,
1313         },
1314 };
1315
1316
1317 static u64 rockchip_device_camera_dmamask = 0xffffffffUL;
1318 static struct resource rk29_camera_resource[] = {
1319         [0] = {
1320                 .start = RK29_VIP_PHYS,
1321                 .end   = RK29_VIP_PHYS + RK29_VIP_SIZE - 1,
1322                 .flags = IORESOURCE_MEM,
1323         },
1324         [1] = {
1325                 .start = IRQ_VIP,
1326                 .end   = IRQ_VIP,
1327                 .flags = IORESOURCE_IRQ,
1328         }
1329 };
1330
1331 /*platform_device : */
1332 static struct platform_device rk29_device_camera = {
1333         .name             = RK29_CAM_DRV_NAME,
1334         .id               = RK29_CAM_PLATFORM_DEV_ID,               /* This is used to put cameras on this interface */
1335         .num_resources    = ARRAY_SIZE(rk29_camera_resource),
1336         .resource         = rk29_camera_resource,
1337         .dev            = {
1338                 .dma_mask = &rockchip_device_camera_dmamask,
1339                 .coherent_dma_mask = 0xffffffffUL,
1340                 .platform_data  = &rk29_camera_platform_data,
1341         }
1342 };
1343 #endif
1344 /*****************************************************************************************
1345  * backlight  devices
1346  * author: nzy@rock-chips.com
1347  *****************************************************************************************/
1348 #ifdef CONFIG_BACKLIGHT_RK29_BL
1349  /*
1350  GPIO1B5_PWM0_NAME,       GPIO1L_PWM0
1351  GPIO5D2_PWM1_UART1SIRIN_NAME,  GPIO5H_PWM1
1352  GPIO2A3_SDMMC0WRITEPRT_PWM2_NAME,   GPIO2L_PWM2
1353  GPIO1A5_EMMCPWREN_PWM3_NAME,     GPIO1L_PWM3
1354  */
1355
1356 #define PWM_ID            0
1357 #define PWM_MUX_NAME      GPIO1B5_PWM0_NAME
1358 #define PWM_MUX_MODE      GPIO1L_PWM0
1359 #define PWM_MUX_MODE_GPIO GPIO1L_GPIO1B5
1360 #define PWM_EFFECT_VALUE  1
1361
1362 //#define LCD_DISP_ON_PIN
1363
1364 #ifdef  LCD_DISP_ON_PIN
1365 #define BL_EN_MUX_NAME    GPIOF34_UART3_SEL_NAME
1366 #define BL_EN_MUX_MODE    IOMUXB_GPIO1_B34
1367
1368 #define BL_EN_PIN         GPIO0L_GPIO0A5
1369 #define BL_EN_VALUE       GPIO_HIGH
1370 #endif
1371 static int rk29_backlight_io_init(void)
1372 {
1373     int ret = 0;
1374
1375     rk29_mux_api_set(PWM_MUX_NAME, PWM_MUX_MODE);
1376         #ifdef  LCD_DISP_ON_PIN
1377     rk29_mux_api_set(BL_EN_MUX_NAME, BL_EN_MUX_MODE);
1378
1379     ret = gpio_request(BL_EN_PIN, NULL);
1380     if(ret != 0)
1381     {
1382         gpio_free(BL_EN_PIN);
1383     }
1384
1385     gpio_direction_output(BL_EN_PIN, 0);
1386     gpio_set_value(BL_EN_PIN, BL_EN_VALUE);
1387         #endif
1388     return ret;
1389 }
1390
1391 static int rk29_backlight_io_deinit(void)
1392 {
1393     int ret = 0;
1394     #ifdef  LCD_DISP_ON_PIN
1395     gpio_free(BL_EN_PIN);
1396     #endif
1397     rk29_mux_api_set(PWM_MUX_NAME, PWM_MUX_MODE_GPIO);
1398     return ret;
1399 }
1400 struct rk29_bl_info rk29_bl_info = {
1401     .pwm_id   = PWM_ID,
1402     .bl_ref   = PWM_EFFECT_VALUE,
1403     .io_init   = rk29_backlight_io_init,
1404     .io_deinit = rk29_backlight_io_deinit,
1405 };
1406 #endif
1407 /*****************************************************************************************
1408 * pwm voltage regulator devices
1409 ******************************************************************************************/
1410 #if defined (CONFIG_RK29_PWM_REGULATOR)
1411
1412 #define REGULATOR_PWM_ID                                        2
1413 #define REGULATOR_PWM_MUX_NAME                  GPIO2A3_SDMMC0WRITEPRT_PWM2_NAME
1414 #define REGULATOR_PWM_MUX_MODE                                          GPIO2L_PWM2
1415 #define REGULATOR_PWM_MUX_MODE_GPIO                             GPIO2L_GPIO2A3
1416 #define REGULATOR_PWM_GPIO                              RK29_PIN2_PA3
1417
1418 static struct regulator_consumer_supply pwm_consumers[] = {
1419         {
1420                 .supply = "vcore",
1421         }
1422 };
1423
1424 static struct regulator_init_data rk29_pwm_regulator_data = {
1425         .constraints = {
1426                 .name = "PWM2",
1427                 .min_uV =  950000,
1428                 .max_uV = 1400000,
1429                 .apply_uV = 1,
1430                 .valid_ops_mask = REGULATOR_CHANGE_STATUS | REGULATOR_CHANGE_VOLTAGE,
1431         },
1432         .num_consumer_supplies = ARRAY_SIZE(pwm_consumers),
1433         .consumer_supplies = pwm_consumers,
1434 };
1435
1436 static struct pwm_platform_data rk29_regulator_pwm_platform_data = {
1437         .pwm_id = REGULATOR_PWM_ID,
1438         .pwm_gpio = REGULATOR_PWM_GPIO,
1439         //.pwm_iomux_name[] = REGULATOR_PWM_MUX_NAME;
1440         .pwm_iomux_name = REGULATOR_PWM_MUX_NAME,
1441         .pwm_iomux_pwm = REGULATOR_PWM_MUX_MODE,
1442         .pwm_iomux_gpio = REGULATOR_PWM_MUX_MODE_GPIO,
1443         .init_data  = &rk29_pwm_regulator_data,
1444 };
1445
1446 static struct platform_device rk29_device_pwm_regulator = {
1447         .name = "pwm-voltage-regulator",
1448         .id   = -1,
1449         .dev  = {
1450                 .platform_data = &rk29_regulator_pwm_platform_data,
1451         },
1452 };
1453
1454 #endif
1455
1456
1457 /*****************************************************************************************
1458  * SDMMC devices
1459 *****************************************************************************************/
1460 #ifdef CONFIG_SDMMC0_RK29
1461 static int rk29_sdmmc0_cfg_gpio(void)
1462 {
1463         rk29_mux_api_set(GPIO1D1_SDMMC0CMD_NAME, GPIO1H_SDMMC0_CMD);
1464         rk29_mux_api_set(GPIO1D0_SDMMC0CLKOUT_NAME, GPIO1H_SDMMC0_CLKOUT);
1465         rk29_mux_api_set(GPIO1D2_SDMMC0DATA0_NAME, GPIO1H_SDMMC0_DATA0);
1466         rk29_mux_api_set(GPIO1D3_SDMMC0DATA1_NAME, GPIO1H_SDMMC0_DATA1);
1467         rk29_mux_api_set(GPIO1D4_SDMMC0DATA2_NAME, GPIO1H_SDMMC0_DATA2);
1468         rk29_mux_api_set(GPIO1D5_SDMMC0DATA3_NAME, GPIO1H_SDMMC0_DATA3);
1469         rk29_mux_api_set(GPIO2A2_SDMMC0DETECTN_NAME, GPIO2L_SDMMC0_DETECT_N);
1470         rk29_mux_api_set(GPIO5D5_SDMMC0PWREN_NAME, GPIO5H_GPIO5D5);   ///GPIO5H_SDMMC0_PWR_EN);  ///GPIO5H_GPIO5D5);
1471         gpio_request(RK29_PIN5_PD5,"sdmmc");
1472         gpio_set_value(RK29_PIN5_PD5,GPIO_HIGH);
1473         mdelay(100);
1474         gpio_set_value(RK29_PIN5_PD5,GPIO_LOW);
1475         return 0;
1476 }
1477
1478 #define CONFIG_SDMMC0_USE_DMA
1479 struct rk29_sdmmc_platform_data default_sdmmc0_data = {
1480         .host_ocr_avail = (MMC_VDD_25_26|MMC_VDD_26_27|MMC_VDD_27_28|MMC_VDD_28_29|MMC_VDD_29_30|
1481                                            MMC_VDD_30_31|MMC_VDD_31_32|MMC_VDD_32_33|
1482                                            MMC_VDD_33_34|MMC_VDD_34_35| MMC_VDD_35_36),
1483         .host_caps      = (MMC_CAP_4_BIT_DATA|MMC_CAP_MMC_HIGHSPEED|MMC_CAP_SD_HIGHSPEED),
1484         .io_init = rk29_sdmmc0_cfg_gpio,
1485         .dma_name = "sd_mmc",
1486 #ifdef CONFIG_SDMMC0_USE_DMA
1487         .use_dma  = 1,
1488 #else
1489         .use_dma = 0,
1490 #endif
1491 };
1492 #endif
1493 #ifdef CONFIG_SDMMC1_RK29
1494 #define CONFIG_SDMMC1_USE_DMA
1495 static int rk29_sdmmc1_cfg_gpio(void)
1496 {
1497         rk29_mux_api_set(GPIO1C2_SDMMC1CMD_NAME, GPIO1H_SDMMC1_CMD);
1498         rk29_mux_api_set(GPIO1C7_SDMMC1CLKOUT_NAME, GPIO1H_SDMMC1_CLKOUT);
1499         rk29_mux_api_set(GPIO1C3_SDMMC1DATA0_NAME, GPIO1H_SDMMC1_DATA0);
1500         rk29_mux_api_set(GPIO1C4_SDMMC1DATA1_NAME, GPIO1H_SDMMC1_DATA1);
1501         rk29_mux_api_set(GPIO1C5_SDMMC1DATA2_NAME, GPIO1H_SDMMC1_DATA2);
1502         rk29_mux_api_set(GPIO1C6_SDMMC1DATA3_NAME, GPIO1H_SDMMC1_DATA3);
1503         //rk29_mux_api_set(GPIO1C0_UART0CTSN_SDMMC1DETECTN_NAME, GPIO1H_SDMMC1_DETECT_N);
1504         return 0;
1505 }
1506
1507 #ifdef CONFIG_WIFI_CONTROL_FUNC
1508 static int rk29sdk_wifi_status(struct device *dev);
1509 static int rk29sdk_wifi_status_register(void (*callback)(int card_presend, void *dev_id), void *dev_id);
1510 #endif
1511
1512 #define RK29SDK_WIFI_SDIO_CARD_DETECT_N    RK29_PIN1_PD6
1513
1514 struct rk29_sdmmc_platform_data default_sdmmc1_data = {
1515         .host_ocr_avail = (MMC_VDD_25_26|MMC_VDD_26_27|MMC_VDD_27_28|MMC_VDD_28_29|
1516                                            MMC_VDD_29_30|MMC_VDD_30_31|MMC_VDD_31_32|
1517                                            MMC_VDD_32_33|MMC_VDD_33_34),
1518         .host_caps      = (MMC_CAP_4_BIT_DATA|MMC_CAP_SDIO_IRQ|
1519                                    MMC_CAP_MMC_HIGHSPEED|MMC_CAP_SD_HIGHSPEED),
1520         .io_init = rk29_sdmmc1_cfg_gpio,
1521         .dma_name = "sdio",
1522 #ifdef CONFIG_SDMMC1_USE_DMA
1523         .use_dma  = 1,
1524 #else
1525         .use_dma = 0,
1526 #endif
1527 #ifdef CONFIG_WIFI_CONTROL_FUNC
1528         .status = rk29sdk_wifi_status,
1529         .register_status_notify = rk29sdk_wifi_status_register,
1530 #endif
1531 #if 0
1532         .detect_irq = RK29SDK_WIFI_SDIO_CARD_DETECT_N,
1533 #endif
1534 };
1535 #endif
1536
1537 #ifdef CONFIG_WIFI_CONTROL_FUNC
1538 #define RK29SDK_WIFI_BT_GPIO_POWER_N       RK29_PIN5_PD6
1539 #define RK29SDK_WIFI_GPIO_RESET_N          RK29_PIN6_PC0
1540 #define RK29SDK_BT_GPIO_RESET_N            RK29_PIN6_PC4
1541
1542 static int rk29sdk_wifi_cd = 0;   /* wifi virtual 'card detect' status */
1543 static void (*wifi_status_cb)(int card_present, void *dev_id);
1544 static void *wifi_status_cb_devid;
1545 int rk29sdk_wifi_power_state = 0;
1546 int rk29sdk_bt_power_state = 0;
1547
1548 static int rk29sdk_wifi_status(struct device *dev)
1549 {
1550         return rk29sdk_wifi_cd;
1551 }
1552
1553 static int rk29sdk_wifi_status_register(void (*callback)(int card_present, void *dev_id), void *dev_id)
1554 {
1555         if(wifi_status_cb)
1556                 return -EAGAIN;
1557         wifi_status_cb = callback;
1558         wifi_status_cb_devid = dev_id;
1559         return 0;
1560 }
1561
1562 static int rk29sdk_wifi_bt_gpio_control_init(void)
1563 {
1564     if (gpio_request(RK29SDK_WIFI_BT_GPIO_POWER_N, "wifi_bt_power")) {
1565            pr_info("%s: request wifi_bt power gpio failed\n", __func__);
1566            return -1;
1567     }
1568
1569     if (gpio_request(RK29SDK_WIFI_GPIO_RESET_N, "wifi reset")) {
1570            pr_info("%s: request wifi reset gpio failed\n", __func__);
1571            gpio_free(RK29SDK_WIFI_BT_GPIO_POWER_N);
1572            return -1;
1573     }
1574
1575     if (gpio_request(RK29SDK_BT_GPIO_RESET_N, "bt reset")) {
1576           pr_info("%s: request bt reset gpio failed\n", __func__);
1577           gpio_free(RK29SDK_WIFI_GPIO_RESET_N);
1578           return -1;
1579     }
1580
1581     gpio_direction_output(RK29SDK_WIFI_BT_GPIO_POWER_N, GPIO_LOW);
1582     gpio_direction_output(RK29SDK_WIFI_GPIO_RESET_N,    GPIO_LOW);
1583     gpio_direction_output(RK29SDK_BT_GPIO_RESET_N,      GPIO_LOW);
1584
1585     pr_info("%s: init finished\n",__func__);
1586
1587     return 0;
1588 }
1589
1590 static int rk29sdk_wifi_power(int on)
1591 {
1592         pr_info("%s: %d\n", __func__, on);
1593         if (on){
1594                 gpio_set_value(RK29SDK_WIFI_BT_GPIO_POWER_N, on);
1595                 mdelay(100);
1596                 pr_info("wifi turn on power\n");
1597         }else{
1598                 if (!rk29sdk_bt_power_state){
1599                         gpio_set_value(RK29SDK_WIFI_BT_GPIO_POWER_N, on);
1600                         mdelay(100);
1601                         pr_info("wifi shut off power\n");
1602                 }else
1603                 {
1604                         pr_info("wifi shouldn't shut off power, bt is using it!\n");
1605                 }
1606
1607         }
1608
1609         rk29sdk_wifi_power_state = on;
1610         return 0;
1611 }
1612
1613 static int rk29sdk_wifi_reset_state;
1614 static int rk29sdk_wifi_reset(int on)
1615 {
1616         pr_info("%s: %d\n", __func__, on);
1617         gpio_set_value(RK29SDK_WIFI_GPIO_RESET_N, on);
1618         mdelay(100);
1619         rk29sdk_wifi_reset_state = on;
1620         return 0;
1621 }
1622
1623 int rk29sdk_wifi_set_carddetect(int val)
1624 {
1625         pr_info("%s:%d\n", __func__, val);
1626         rk29sdk_wifi_cd = val;
1627         if (wifi_status_cb){
1628                 wifi_status_cb(val, wifi_status_cb_devid);
1629         }else {
1630                 pr_warning("%s, nobody to notify\n", __func__);
1631         }
1632         return 0;
1633 }
1634 EXPORT_SYMBOL(rk29sdk_wifi_set_carddetect);
1635
1636 static struct wifi_mem_prealloc wifi_mem_array[PREALLOC_WLAN_SEC_NUM] = {
1637         {NULL, (WLAN_SECTION_SIZE_0 + PREALLOC_WLAN_SECTION_HEADER)},
1638         {NULL, (WLAN_SECTION_SIZE_1 + PREALLOC_WLAN_SECTION_HEADER)},
1639         {NULL, (WLAN_SECTION_SIZE_2 + PREALLOC_WLAN_SECTION_HEADER)},
1640         {NULL, (WLAN_SECTION_SIZE_3 + PREALLOC_WLAN_SECTION_HEADER)}
1641 };
1642
1643 static void *rk29sdk_mem_prealloc(int section, unsigned long size)
1644 {
1645         if (section == PREALLOC_WLAN_SEC_NUM)
1646                 return wlan_static_skb;
1647
1648         if ((section < 0) || (section > PREALLOC_WLAN_SEC_NUM))
1649                 return NULL;
1650
1651         if (wifi_mem_array[section].size < size)
1652                 return NULL;
1653
1654         return wifi_mem_array[section].mem_ptr;
1655 }
1656
1657 int __init rk29sdk_init_wifi_mem(void)
1658 {
1659         int i;
1660         int j;
1661
1662         for (i = 0 ; i < WLAN_SKB_BUF_NUM ; i++) {
1663                 wlan_static_skb[i] = dev_alloc_skb(
1664                                 ((i < (WLAN_SKB_BUF_NUM / 2)) ? 4096 : 8192));
1665
1666                 if (!wlan_static_skb[i])
1667                         goto err_skb_alloc;
1668         }
1669
1670         for (i = 0 ; i < PREALLOC_WLAN_SEC_NUM ; i++) {
1671                 wifi_mem_array[i].mem_ptr =
1672                                 kmalloc(wifi_mem_array[i].size, GFP_KERNEL);
1673
1674                 if (!wifi_mem_array[i].mem_ptr)
1675                         goto err_mem_alloc;
1676         }
1677         return 0;
1678
1679 err_mem_alloc:
1680         pr_err("Failed to mem_alloc for WLAN\n");
1681         for (j = 0 ; j < i ; j++)
1682                kfree(wifi_mem_array[j].mem_ptr);
1683
1684         i = WLAN_SKB_BUF_NUM;
1685
1686 err_skb_alloc:
1687         pr_err("Failed to skb_alloc for WLAN\n");
1688         for (j = 0 ; j < i ; j++)
1689                 dev_kfree_skb(wlan_static_skb[j]);
1690
1691         return -ENOMEM;
1692 }
1693
1694 static struct wifi_platform_data rk29sdk_wifi_control = {
1695         .set_power = rk29sdk_wifi_power,
1696         .set_reset = rk29sdk_wifi_reset,
1697         .set_carddetect = rk29sdk_wifi_set_carddetect,
1698         .mem_prealloc   = rk29sdk_mem_prealloc,
1699 };
1700 static struct platform_device rk29sdk_wifi_device = {
1701         .name = "bcm4329_wlan",
1702         .id = 1,
1703         .dev = {
1704                 .platform_data = &rk29sdk_wifi_control,
1705          },
1706 };
1707 #endif
1708
1709
1710 /* bluetooth rfkill device */
1711 static struct platform_device rk29sdk_rfkill = {
1712         .name = "rk29sdk_rfkill",
1713         .id = -1,
1714 };
1715
1716
1717 #ifdef CONFIG_VIVANTE
1718 static struct resource resources_gpu[] = {
1719     [0] = {
1720                 .name   = "gpu_irq",
1721         .start  = IRQ_GPU,
1722         .end    = IRQ_GPU,
1723         .flags  = IORESOURCE_IRQ,
1724     },
1725     [1] = {
1726                 .name = "gpu_base",
1727         .start  = RK29_GPU_PHYS,
1728         .end    = RK29_GPU_PHYS + RK29_GPU_PHYS_SIZE,
1729         .flags  = IORESOURCE_MEM,
1730     },
1731     [2] = {
1732                 .name = "gpu_mem",
1733         .start  = PMEM_GPU_BASE,
1734         .end    = PMEM_GPU_BASE + PMEM_GPU_SIZE,
1735         .flags  = IORESOURCE_MEM,
1736     },
1737 };
1738 static struct platform_device rk29_device_gpu = {
1739     .name             = "galcore",
1740     .id               = 0,
1741     .num_resources    = ARRAY_SIZE(resources_gpu),
1742     .resource         = resources_gpu,
1743 };
1744 #endif
1745 #ifdef CONFIG_KEYS_RK29
1746 extern struct rk29_keys_platform_data rk29_keys_pdata;
1747 static struct platform_device rk29_device_keys = {
1748         .name           = "rk29-keypad",
1749         .id             = -1,
1750         .dev            = {
1751                 .platform_data  = &rk29_keys_pdata,
1752         },
1753 };
1754 #endif
1755
1756 static void __init rk29_board_iomux_init(void)
1757 {
1758         #ifdef CONFIG_UART0_RK29
1759         rk29_mux_api_set(GPIO1B7_UART0SOUT_NAME, GPIO1L_UART0_SOUT);
1760         rk29_mux_api_set(GPIO1B6_UART0SIN_NAME, GPIO1L_UART0_SIN);
1761         #ifdef CONFIG_UART0_CTS_RTS_RK29
1762         rk29_mux_api_set(GPIO1C1_UART0RTSN_SDMMC1WRITEPRT_NAME, GPIO1H_UART0_RTS_N);
1763         rk29_mux_api_set(GPIO1C0_UART0CTSN_SDMMC1DETECTN_NAME, GPIO1H_UART0_CTS_N);
1764         #endif
1765         #endif
1766         #ifdef CONFIG_UART1_RK29
1767         rk29_mux_api_set(GPIO2A5_UART1SOUT_NAME, GPIO2L_UART1_SOUT);
1768         rk29_mux_api_set(GPIO2A4_UART1SIN_NAME, GPIO2L_UART1_SIN);
1769         #endif
1770         #ifdef CONFIG_UART2_RK29
1771         rk29_mux_api_set(GPIO2B1_UART2SOUT_NAME, GPIO2L_UART2_SOUT);
1772         rk29_mux_api_set(GPIO2B0_UART2SIN_NAME, GPIO2L_UART2_SIN);
1773         #ifdef CONFIG_UART2_CTS_RTS_RK29
1774         rk29_mux_api_set(GPIO2A7_UART2RTSN_NAME, GPIO2L_UART2_RTS_N);
1775         rk29_mux_api_set(GPIO2A6_UART2CTSN_NAME, GPIO2L_UART2_CTS_N);
1776         #endif
1777         #endif
1778         #ifdef CONFIG_UART3_RK29
1779         rk29_mux_api_set(GPIO2B3_UART3SOUT_NAME, GPIO2L_UART3_SOUT);
1780         rk29_mux_api_set(GPIO2B2_UART3SIN_NAME, GPIO2L_UART3_SIN);
1781         #ifdef CONFIG_UART3_CTS_RTS_RK29
1782         rk29_mux_api_set(GPIO2B5_UART3RTSN_I2C3SCL_NAME, GPIO2L_UART3_RTS_N);
1783         rk29_mux_api_set(GPIO2B4_UART3CTSN_I2C3SDA_NAME, GPIO2L_UART3_CTS_N);
1784         #endif
1785         #endif
1786         #ifdef CONFIG_SPIM0_RK29
1787     rk29_mux_api_set(GPIO2C0_SPI0CLK_NAME, GPIO2H_SPI0_CLK);
1788         rk29_mux_api_set(GPIO2C1_SPI0CSN0_NAME, GPIO2H_SPI0_CSN0);
1789         rk29_mux_api_set(GPIO2C2_SPI0TXD_NAME, GPIO2H_SPI0_TXD);
1790         rk29_mux_api_set(GPIO2C3_SPI0RXD_NAME, GPIO2H_SPI0_RXD);
1791     #endif
1792     #ifdef CONFIG_SPIM1_RK29
1793     rk29_mux_api_set(GPIO2C4_SPI1CLK_NAME, GPIO2H_SPI1_CLK);
1794         rk29_mux_api_set(GPIO2C5_SPI1CSN0_NAME, GPIO2H_SPI1_CSN0);
1795         rk29_mux_api_set(GPIO2C6_SPI1TXD_NAME, GPIO2H_SPI1_TXD);
1796         rk29_mux_api_set(GPIO2C7_SPI1RXD_NAME, GPIO2H_SPI1_RXD);
1797     #endif
1798         #ifdef CONFIG_RK29_VMAC
1799     rk29_mux_api_set(GPIO4C0_RMIICLKOUT_RMIICLKIN_NAME, GPIO4H_RMII_CLKOUT);
1800     rk29_mux_api_set(GPIO4C1_RMIITXEN_MIITXEN_NAME, GPIO4H_RMII_TX_EN);
1801     rk29_mux_api_set(GPIO4C2_RMIITXD1_MIITXD1_NAME, GPIO4H_RMII_TXD1);
1802     rk29_mux_api_set(GPIO4C3_RMIITXD0_MIITXD0_NAME, GPIO4H_RMII_TXD0);
1803     rk29_mux_api_set(GPIO4C4_RMIIRXERR_MIIRXERR_NAME, GPIO4H_RMII_RX_ERR);
1804     rk29_mux_api_set(GPIO4C5_RMIICSRDVALID_MIIRXDVALID_NAME, GPIO4H_RMII_CSR_DVALID);
1805     rk29_mux_api_set(GPIO4C6_RMIIRXD1_MIIRXD1_NAME, GPIO4H_RMII_RXD1);
1806     rk29_mux_api_set(GPIO4C7_RMIIRXD0_MIIRXD0_NAME, GPIO4H_RMII_RXD0);
1807
1808         rk29_mux_api_set(GPIO0A7_MIIMDCLK_NAME, GPIO0L_MII_MDCLK);
1809         rk29_mux_api_set(GPIO0A6_MIIMD_NAME, GPIO0L_MII_MD);
1810         #endif
1811         #ifdef CONFIG_RK29_PWM_REGULATOR
1812         rk29_mux_api_set(REGULATOR_PWM_MUX_NAME,REGULATOR_PWM_MUX_MODE);
1813         #endif
1814 }
1815
1816 static struct platform_device *devices[] __initdata = {
1817 #ifdef CONFIG_UART1_RK29
1818         &rk29_device_uart1,
1819 #endif
1820 #ifdef CONFIG_UART0_RK29
1821         &rk29_device_uart0,
1822 #endif
1823 #ifdef CONFIG_UART2_RK29
1824         &rk29_device_uart2,
1825 #endif
1826
1827 #ifdef CONFIG_RK29_PWM_REGULATOR
1828         &rk29_device_pwm_regulator,
1829 #endif
1830 #ifdef CONFIG_SPIM0_RK29
1831     &rk29xx_device_spi0m,
1832 #endif
1833 #ifdef CONFIG_SPIM1_RK29
1834     &rk29xx_device_spi1m,
1835 #endif
1836 #ifdef CONFIG_ADC_RK29
1837         &rk29_device_adc,
1838 #endif
1839 #ifdef CONFIG_I2C0_RK29
1840         &rk29_device_i2c0,
1841 #endif
1842 #ifdef CONFIG_I2C1_RK29
1843         &rk29_device_i2c1,
1844 #endif
1845 #ifdef CONFIG_I2C2_RK29
1846         &rk29_device_i2c2,
1847 #endif
1848 #ifdef CONFIG_I2C3_RK29
1849         &rk29_device_i2c3,
1850 #endif
1851
1852 #ifdef CONFIG_SND_RK29_SOC_I2S_2CH
1853         &rk29_device_iis_2ch,
1854 #endif
1855 #ifdef CONFIG_SND_RK29_SOC_I2S_8CH
1856         &rk29_device_iis_8ch,
1857 #endif
1858
1859 #ifdef CONFIG_KEYS_RK29
1860         &rk29_device_keys,
1861 #endif
1862 #ifdef CONFIG_SDMMC0_RK29
1863         &rk29_device_sdmmc0,
1864 #endif
1865 #ifdef CONFIG_SDMMC1_RK29
1866         &rk29_device_sdmmc1,
1867 #endif
1868
1869 #ifdef CONFIG_MTD_NAND_RK29XX
1870         &rk29xx_device_nand,
1871 #endif
1872
1873 #ifdef CONFIG_WIFI_CONTROL_FUNC
1874         &rk29sdk_wifi_device,
1875 #endif
1876
1877 #ifdef CONFIG_BT
1878         &rk29sdk_rfkill,
1879 #endif
1880
1881 #ifdef CONFIG_MTD_NAND_RK29
1882         &rk29_device_nand,
1883 #endif
1884
1885 #ifdef CONFIG_FB_RK29
1886         &rk29_device_fb,
1887         &rk29_device_dma_cpy,
1888 #endif
1889 #ifdef CONFIG_BACKLIGHT_RK29_BL
1890         &rk29_device_backlight,
1891 #endif
1892 #ifdef CONFIG_RK29_VMAC
1893         &rk29_device_vmac,
1894 #endif
1895 #ifdef CONFIG_VIVANTE
1896         &rk29_device_gpu,
1897 #endif
1898 #ifdef CONFIG_VIDEO_RK29
1899         &rk29_device_camera,      /* ddl@rock-chips.com : camera support  */
1900         #if (SENSOR_IIC_ADDR_0 != 0x00)
1901         &rk29_soc_camera_pdrv_0,
1902         #endif
1903         &rk29_soc_camera_pdrv_1,
1904         &android_pmem_cam_device,
1905 #endif
1906         &android_pmem_device,
1907         &rk29_vpu_mem_device,
1908 #ifdef CONFIG_USB20_OTG
1909         &rk29_device_usb20_otg,
1910 #endif
1911 #ifdef CONFIG_USB20_HOST
1912         &rk29_device_usb20_host,
1913 #endif
1914 #ifdef CONFIG_USB11_HOST
1915         &rk29_device_usb11_host,
1916 #endif
1917 #ifdef CONFIG_USB_ANDROID
1918         &android_usb_device,
1919         &usb_mass_storage_device,
1920 #endif
1921 #ifdef CONFIG_RK29_IPP
1922         &rk29_device_ipp,
1923 #endif
1924 #ifdef CONFIG_VIDEO_RK29XX_VOUT
1925         &rk29_v4l2_output_devce,
1926 #endif
1927 };
1928
1929 /*****************************************************************************************
1930  * spi devices
1931  * author: cmc@rock-chips.com
1932  *****************************************************************************************/
1933 static int rk29_vmac_register_set(void)
1934 {
1935         //config rk29 vmac as rmii, 100MHz
1936         u32 value= readl(RK29_GRF_BASE + 0xbc);
1937         value = (value & 0xfff7ff) | (0x400);
1938         writel(value, RK29_GRF_BASE + 0xbc);
1939         return 0;
1940 }
1941
1942 static int rk29_rmii_io_init(void)
1943 {
1944         int err;
1945
1946         //phy power gpio
1947         err = gpio_request(RK29_PIN6_PB0, "phy_power_en");
1948         if (err) {
1949                 gpio_free(RK29_PIN6_PB0);
1950                 printk("-------request RK29_PIN6_PB0 fail--------\n");
1951                 return -1;
1952         }
1953         //phy power down
1954         gpio_direction_output(RK29_PIN6_PB0, GPIO_LOW);
1955         gpio_set_value(RK29_PIN6_PB0, GPIO_LOW);
1956
1957         return 0;
1958 }
1959
1960 static int rk29_rmii_io_deinit(void)
1961 {
1962         //phy power down
1963         gpio_direction_output(RK29_PIN6_PB0, GPIO_LOW);
1964         gpio_set_value(RK29_PIN6_PB0, GPIO_LOW);
1965         //free
1966         gpio_free(RK29_PIN6_PB0);
1967         return 0;
1968 }
1969
1970 static int rk29_rmii_power_control(int enable)
1971 {
1972         if (enable) {
1973                 //enable phy power
1974                 gpio_direction_output(RK29_PIN6_PB0, GPIO_HIGH);
1975                 gpio_set_value(RK29_PIN6_PB0, GPIO_HIGH);
1976         }
1977         else {
1978                 gpio_direction_output(RK29_PIN6_PB0, GPIO_LOW);
1979                 gpio_set_value(RK29_PIN6_PB0, GPIO_LOW);
1980         }
1981         return 0;
1982 }
1983
1984 struct rk29_vmac_platform_data rk29_vmac_pdata = {
1985         .vmac_register_set = rk29_vmac_register_set,
1986         .rmii_io_init = rk29_rmii_io_init,
1987         .rmii_io_deinit = rk29_rmii_io_deinit,
1988         .rmii_power_control = rk29_rmii_power_control,
1989 };
1990
1991 /*****************************************************************************************
1992  * spi devices
1993  * author: cmc@rock-chips.com
1994  *****************************************************************************************/
1995 #define SPI_CHIPSELECT_NUM 2
1996 static struct spi_cs_gpio rk29xx_spi0_cs_gpios[SPI_CHIPSELECT_NUM] = {
1997     {
1998                 .name = "spi0 cs0",
1999                 .cs_gpio = RK29_PIN2_PC1,
2000                 .cs_iomux_name = NULL,
2001         },
2002         {
2003                 .name = "spi0 cs1",
2004                 .cs_gpio = RK29_PIN1_PA4,
2005                 .cs_iomux_name = GPIO1A4_EMMCWRITEPRT_SPI0CS1_NAME,//if no iomux,set it NULL
2006                 .cs_iomux_mode = GPIO1L_SPI0_CSN1,
2007         }
2008 };
2009
2010 static struct spi_cs_gpio rk29xx_spi1_cs_gpios[SPI_CHIPSELECT_NUM] = {
2011     {
2012                 .name = "spi1 cs0",
2013                 .cs_gpio = RK29_PIN2_PC5,
2014                 .cs_iomux_name = NULL,
2015         },
2016         {
2017                 .name = "spi1 cs1",
2018                 .cs_gpio = RK29_PIN1_PA3,
2019                 .cs_iomux_name = GPIO1A3_EMMCDETECTN_SPI1CS1_NAME,//if no iomux,set it NULL
2020                 .cs_iomux_mode = GPIO1L_SPI1_CSN1,
2021         }
2022 };
2023
2024 static int spi_io_init(struct spi_cs_gpio *cs_gpios, int cs_num)
2025 {
2026 #if 1
2027         int i,j,ret;
2028
2029         //cs
2030         if (cs_gpios) {
2031                 for (i=0; i<cs_num; i++) {
2032                         rk29_mux_api_set(cs_gpios[i].cs_iomux_name, cs_gpios[i].cs_iomux_mode);
2033                         ret = gpio_request(cs_gpios[i].cs_gpio, cs_gpios[i].name);
2034                         if (ret) {
2035                                 for (j=0;j<i;j++) {
2036                                         gpio_free(cs_gpios[j].cs_gpio);
2037                                         //rk29_mux_api_mode_resume(cs_gpios[j].cs_iomux_name);
2038                                 }
2039                                 printk("[fun:%s, line:%d], gpio request err\n", __func__, __LINE__);
2040                                 return -1;
2041                         }
2042                         gpio_direction_output(cs_gpios[i].cs_gpio, GPIO_HIGH);
2043                 }
2044         }
2045 #endif
2046         return 0;
2047 }
2048
2049 static int spi_io_deinit(struct spi_cs_gpio *cs_gpios, int cs_num)
2050 {
2051 #if 1
2052         int i;
2053
2054         if (cs_gpios) {
2055                 for (i=0; i<cs_num; i++) {
2056                         gpio_free(cs_gpios[i].cs_gpio);
2057                         //rk29_mux_api_mode_resume(cs_gpios[i].cs_iomux_name);
2058                 }
2059         }
2060 #endif
2061         return 0;
2062 }
2063
2064 static int spi_io_fix_leakage_bug(void)
2065 {
2066 #if 0
2067         gpio_direction_output(RK29_PIN2_PC1, GPIO_LOW);
2068 #endif
2069         return 0;
2070 }
2071
2072 static int spi_io_resume_leakage_bug(void)
2073 {
2074 #if 0
2075         gpio_direction_output(RK29_PIN2_PC1, GPIO_HIGH);
2076 #endif
2077         return 0;
2078 }
2079
2080 struct rk29xx_spi_platform_data rk29xx_spi0_platdata = {
2081         .num_chipselect = SPI_CHIPSELECT_NUM,
2082         .chipselect_gpios = rk29xx_spi0_cs_gpios,
2083         .io_init = spi_io_init,
2084         .io_deinit = spi_io_deinit,
2085         .io_fix_leakage_bug = spi_io_fix_leakage_bug,
2086         .io_resume_leakage_bug = spi_io_resume_leakage_bug,
2087 };
2088
2089 struct rk29xx_spi_platform_data rk29xx_spi1_platdata = {
2090         .num_chipselect = SPI_CHIPSELECT_NUM,
2091         .chipselect_gpios = rk29xx_spi1_cs_gpios,
2092         .io_init = spi_io_init,
2093         .io_deinit = spi_io_deinit,
2094         .io_fix_leakage_bug = spi_io_fix_leakage_bug,
2095         .io_resume_leakage_bug = spi_io_resume_leakage_bug,
2096 };
2097
2098 /*****************************************************************************************
2099  * xpt2046 touch panel
2100  * author: cmc@rock-chips.com
2101  *****************************************************************************************/
2102 #define XPT2046_GPIO_INT           RK29_PIN0_PA3
2103 #define DEBOUNCE_REPTIME  3
2104
2105 #if defined(CONFIG_TOUCHSCREEN_XPT2046_320X480_SPI)
2106 static struct xpt2046_platform_data xpt2046_info = {
2107         .model                  = 2046,
2108         .keep_vref_on   = 1,
2109         .swap_xy                = 0,
2110         .x_min                  = 0,
2111         .x_max                  = 320,
2112         .y_min                  = 0,
2113         .y_max                  = 480,
2114         .debounce_max           = 7,
2115         .debounce_rep           = DEBOUNCE_REPTIME,
2116         .debounce_tol           = 20,
2117         .gpio_pendown           = XPT2046_GPIO_INT,
2118         .penirq_recheck_delay_usecs = 1,
2119 };
2120 #elif defined(CONFIG_TOUCHSCREEN_XPT2046_320X480_CBN_SPI)
2121 static struct xpt2046_platform_data xpt2046_info = {
2122         .model                  = 2046,
2123         .keep_vref_on   = 1,
2124         .swap_xy                = 0,
2125         .x_min                  = 0,
2126         .x_max                  = 320,
2127         .y_min                  = 0,
2128         .y_max                  = 480,
2129         .debounce_max           = 7,
2130         .debounce_rep           = DEBOUNCE_REPTIME,
2131         .debounce_tol           = 20,
2132         .gpio_pendown           = XPT2046_GPIO_INT,
2133         .penirq_recheck_delay_usecs = 1,
2134 };
2135 #elif defined(CONFIG_TOUCHSCREEN_XPT2046_SPI)
2136 static struct xpt2046_platform_data xpt2046_info = {
2137         .model                  = 2046,
2138         .keep_vref_on   = 1,
2139         .swap_xy                = 1,
2140         .x_min                  = 0,
2141         .x_max                  = 800,
2142         .y_min                  = 0,
2143         .y_max                  = 480,
2144         .debounce_max           = 7,
2145         .debounce_rep           = DEBOUNCE_REPTIME,
2146         .debounce_tol           = 20,
2147         .gpio_pendown           = XPT2046_GPIO_INT,
2148
2149         .penirq_recheck_delay_usecs = 1,
2150 };
2151 #elif defined(CONFIG_TOUCHSCREEN_XPT2046_CBN_SPI)
2152 static struct xpt2046_platform_data xpt2046_info = {
2153         .model                  = 2046,
2154         .keep_vref_on   = 1,
2155         .swap_xy                = 1,
2156         .x_min                  = 0,
2157         .x_max                  = 800,
2158         .y_min                  = 0,
2159         .y_max                  = 480,
2160         .debounce_max           = 7,
2161         .debounce_rep           = DEBOUNCE_REPTIME,
2162         .debounce_tol           = 20,
2163         .gpio_pendown           = XPT2046_GPIO_INT,
2164
2165         .penirq_recheck_delay_usecs = 1,
2166 };
2167 #endif
2168
2169 static struct spi_board_info board_spi_devices[] = {
2170 #if defined(CONFIG_TOUCHSCREEN_XPT2046_320X480_SPI) || defined(CONFIG_TOUCHSCREEN_XPT2046_320X480_CBN_SPI)\
2171     ||defined(CONFIG_TOUCHSCREEN_XPT2046_SPI) || defined(CONFIG_TOUCHSCREEN_XPT2046_CBN_SPI)
2172         {
2173                 .modalias       = "xpt2046_ts",
2174                 .chip_select    = 0,
2175                 .max_speed_hz   = 125 * 1000 * 26,/* (max sample rate @ 3V) * (cmd + data + overhead) */
2176                 .bus_num        = 0,
2177                 .irq = XPT2046_GPIO_INT,
2178                 .platform_data = &xpt2046_info,
2179         },
2180 #endif
2181 };
2182
2183
2184 static void __init rk29_gic_init_irq(void)
2185 {
2186         gic_dist_init(0, (void __iomem *)RK29_GICPERI_BASE, 32);
2187         gic_cpu_init(0, (void __iomem *)RK29_GICCPU_BASE);
2188 }
2189
2190 static void __init machine_rk29_init_irq(void)
2191 {
2192         rk29_gic_init_irq();
2193         rk29_gpio_init();
2194 }
2195
2196 #define POWER_ON_PIN RK29_PIN4_PA4
2197 static void rk29_pm_power_off(void)
2198 {
2199         printk(KERN_ERR "rk29_pm_power_off start...\n");
2200         gpio_direction_output(POWER_ON_PIN, GPIO_LOW);
2201         while (1);
2202 }
2203
2204 static void __init machine_rk29_board_init(void)
2205 {
2206         rk29_board_iomux_init();
2207
2208         gpio_request(POWER_ON_PIN,"poweronpin");
2209         gpio_set_value(POWER_ON_PIN, GPIO_HIGH);
2210         gpio_direction_output(POWER_ON_PIN, GPIO_HIGH);
2211         pm_power_off = rk29_pm_power_off;
2212
2213 #ifdef CONFIG_WIFI_CONTROL_FUNC
2214                 rk29sdk_wifi_bt_gpio_control_init();
2215 #endif
2216
2217                 platform_add_devices(devices, ARRAY_SIZE(devices));
2218 #ifdef CONFIG_I2C0_RK29
2219         i2c_register_board_info(default_i2c0_data.bus_num, board_i2c0_devices,
2220                         ARRAY_SIZE(board_i2c0_devices));
2221 #endif
2222 #ifdef CONFIG_I2C1_RK29
2223         i2c_register_board_info(default_i2c1_data.bus_num, board_i2c1_devices,
2224                         ARRAY_SIZE(board_i2c1_devices));
2225 #endif
2226 #ifdef CONFIG_I2C2_RK29
2227         i2c_register_board_info(default_i2c2_data.bus_num, board_i2c2_devices,
2228                         ARRAY_SIZE(board_i2c2_devices));
2229 #endif
2230 #ifdef CONFIG_I2C3_RK29
2231         i2c_register_board_info(default_i2c3_data.bus_num, board_i2c3_devices,
2232                         ARRAY_SIZE(board_i2c3_devices));
2233 #endif
2234
2235         spi_register_board_info(board_spi_devices, ARRAY_SIZE(board_spi_devices));
2236         
2237         rk29sdk_init_wifi_mem();
2238 }
2239
2240 static void __init machine_rk29_fixup(struct machine_desc *desc, struct tag *tags,
2241                                         char **cmdline, struct meminfo *mi)
2242 {
2243         mi->nr_banks = 1;
2244         mi->bank[0].start = RK29_SDRAM_PHYS;
2245         mi->bank[0].node = PHYS_TO_NID(RK29_SDRAM_PHYS);
2246         mi->bank[0].size = LINUX_SIZE;
2247 }
2248
2249 static void __init machine_rk29_mapio(void)
2250 {
2251         rk29_map_common_io();
2252         rk29_sram_init();
2253         rk29_clock_init();
2254         rk29_iomux_init();
2255 }
2256
2257 MACHINE_START(RK29, "RK29board")
2258         /* UART for LL DEBUG */
2259         .phys_io        = RK29_UART1_PHYS,
2260         .io_pg_offst    = ((RK29_UART1_BASE) >> 18) & 0xfffc,
2261         .boot_params    = RK29_SDRAM_PHYS + 0x88000,
2262         .fixup          = machine_rk29_fixup,
2263         .map_io         = machine_rk29_mapio,
2264         .init_irq       = machine_rk29_init_irq,
2265         .init_machine   = machine_rk29_board_init,
2266         .timer          = &rk29_timer,
2267 MACHINE_END