1 /* arch/arm/mach-rk30/board-rk30-sdk.c
3 * Copyright (C) 2012 ROCKCHIP, Inc.
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.
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.
16 #include <linux/kernel.h>
17 #include <linux/init.h>
18 #include <linux/platform_device.h>
19 #include <linux/input.h>
21 #include <linux/delay.h>
22 #include <linux/i2c.h>
23 #include <linux/skbuff.h>
24 #include <linux/spi/spi.h>
25 #include <linux/mmc/host.h>
26 #include <linux/ion.h>
28 #include <asm/setup.h>
29 #include <asm/mach-types.h>
30 #include <asm/mach/arch.h>
31 #include <asm/mach/map.h>
32 #include <asm/mach/flash.h>
33 #include <asm/hardware/gic.h>
35 #include <mach/board.h>
36 #include <mach/hardware.h>
38 #include <mach/gpio.h>
39 #include <mach/iomux.h>
40 /*set touchscreen different type header*/
41 #if defined(CONFIG_TOUCHSCREEN_XPT2046_NORMAL_SPI)
42 #include "../../../drivers/input/touchscreen/xpt2046_ts.h"
43 #elif defined(CONFIG_TOUCHSCREEN_XPT2046_TSLIB_SPI)
44 #include "../../../drivers/input/touchscreen/xpt2046_tslib_ts.h"
45 #elif defined(CONFIG_TOUCHSCREEN_XPT2046_CBN_SPI)
46 #include "../../../drivers/input/touchscreen/xpt2046_cbn_ts.h"
48 #if defined(CONFIG_SPIM_RK29)
49 #include "../../../drivers/spi/rk29_spim.h"
51 #if defined(CONFIG_ANDROID_TIMED_GPIO)
52 #include "../../../drivers/staging/android/timed_gpio.h"
55 #define RK30_FB0_MEM_SIZE 8*SZ_1M
57 #ifdef CONFIG_VIDEO_RK
58 /*---------------- Camera Sensor Macro Define Begin ------------------------*/
59 /*---------------- Camera Sensor Configuration Macro Begin ------------------------*/
60 #define CONFIG_SENSOR_0 RK_CAM_SENSOR_OV2659//RK_CAM_SENSOR_OV5642 /* back camera sensor */
61 #define CONFIG_SENSOR_IIC_ADDR_0 0x60//0x78
62 #define CONFIG_SENSOR_IIC_ADAPTER_ID_0 1
63 #define CONFIG_SENSOR_CIF_INDEX_0 0
64 #define CONFIG_SENSOR_ORIENTATION_0 90
65 #define CONFIG_SENSOR_POWER_PIN_0 INVALID_GPIO
66 #define CONFIG_SENSOR_RESET_PIN_0 INVALID_GPIO
67 #define CONFIG_SENSOR_POWERDN_PIN_0 INVALID_GPIO
68 #define CONFIG_SENSOR_FALSH_PIN_0 INVALID_GPIO
69 #define CONFIG_SENSOR_POWERACTIVE_LEVEL_0 RK_CAM_POWERACTIVE_L
70 #define CONFIG_SENSOR_RESETACTIVE_LEVEL_0 RK_CAM_RESETACTIVE_L
71 #define CONFIG_SENSOR_POWERDNACTIVE_LEVEL_0 RK_CAM_POWERDNACTIVE_H
72 #define CONFIG_SENSOR_FLASHACTIVE_LEVEL_0 RK_CAM_FLASHACTIVE_L
74 #define CONFIG_SENSOR_QCIF_FPS_FIXED_0 15000
75 #define CONFIG_SENSOR_QVGA_FPS_FIXED_0 15000
76 #define CONFIG_SENSOR_CIF_FPS_FIXED_0 15000
77 #define CONFIG_SENSOR_VGA_FPS_FIXED_0 15000
78 #define CONFIG_SENSOR_480P_FPS_FIXED_0 15000
79 #define CONFIG_SENSOR_SVGA_FPS_FIXED_0 15000
80 #define CONFIG_SENSOR_720P_FPS_FIXED_0 30000
82 #define CONFIG_SENSOR_1 RK_CAM_SENSOR_OV2659 /* front camera sensor */
83 #define CONFIG_SENSOR_IIC_ADDR_1 0x60
84 #define CONFIG_SENSOR_IIC_ADAPTER_ID_1 1
85 #define CONFIG_SENSOR_CIF_INDEX_1 1
86 #define CONFIG_SENSOR_ORIENTATION_1 270
87 #define CONFIG_SENSOR_POWER_PIN_1 INVALID_GPIO
88 #define CONFIG_SENSOR_RESET_PIN_1 INVALID_GPIO
89 #define CONFIG_SENSOR_POWERDN_PIN_1 INVALID_GPIO
90 #define CONFIG_SENSOR_FALSH_PIN_1 INVALID_GPIO
91 #define CONFIG_SENSOR_POWERACTIVE_LEVEL_1 RK_CAM_POWERACTIVE_L
92 #define CONFIG_SENSOR_RESETACTIVE_LEVEL_1 RK_CAM_RESETACTIVE_L
93 #define CONFIG_SENSOR_POWERDNACTIVE_LEVEL_1 RK_CAM_POWERDNACTIVE_H
94 #define CONFIG_SENSOR_FLASHACTIVE_LEVEL_1 RK_CAM_FLASHACTIVE_L
96 #define CONFIG_SENSOR_QCIF_FPS_FIXED_1 15000
97 #define CONFIG_SENSOR_QVGA_FPS_FIXED_1 15000
98 #define CONFIG_SENSOR_CIF_FPS_FIXED_1 15000
99 #define CONFIG_SENSOR_VGA_FPS_FIXED_1 15000
100 #define CONFIG_SENSOR_480P_FPS_FIXED_1 15000
101 #define CONFIG_SENSOR_SVGA_FPS_FIXED_1 15000
102 #define CONFIG_SENSOR_720P_FPS_FIXED_1 30000
104 #define CONFIG_USE_CIF_0 1
105 #define CONFIG_USE_CIF_1 0
106 #endif //#ifdef CONFIG_VIDEO_RK29
107 /*---------------- Camera Sensor Configuration Macro End------------------------*/
108 #include "../../../drivers/media/video/rk_camera.c"
109 /*---------------- Camera Sensor Macro Define End ---------*/
111 #define PMEM_CAM_SIZE PMEM_CAM_NECESSARY
112 #ifdef CONFIG_VIDEO_RK_WORK_IPP
113 #define MEM_CAMIPP_SIZE PMEM_CAMIPP_NECESSARY
115 #define MEM_CAMIPP_SIZE 0
117 /*****************************************************************************************
119 * author: ddl@rock-chips.com
120 *****************************************************************************************/
121 #ifdef CONFIG_VIDEO_RK
122 #define CONFIG_SENSOR_POWER_IOCTL_USR 0
123 #define CONFIG_SENSOR_RESET_IOCTL_USR 0
124 #define CONFIG_SENSOR_POWERDOWN_IOCTL_USR 0
125 #define CONFIG_SENSOR_FLASH_IOCTL_USR 0
127 #if CONFIG_SENSOR_POWER_IOCTL_USR
128 static int sensor_power_usr_cb (struct rkcamera_gpio_res *res,int on)
130 #error "CONFIG_SENSOR_POWER_IOCTL_USR is 1, sensor_power_usr_cb function must be writed!!";
134 #if CONFIG_SENSOR_RESET_IOCTL_USR
135 static int sensor_reset_usr_cb (struct rkcamera_gpio_res *res,int on)
137 #error "CONFIG_SENSOR_RESET_IOCTL_USR is 1, sensor_reset_usr_cb function must be writed!!";
141 #if CONFIG_SENSOR_POWERDOWN_IOCTL_USR
142 static int sensor_powerdown_usr_cb (struct rkcamera_gpio_res *res,int on)
144 #error "CONFIG_SENSOR_POWERDOWN_IOCTL_USR is 1, sensor_powerdown_usr_cb function must be writed!!";
148 #if CONFIG_SENSOR_FLASH_IOCTL_USR
149 static int sensor_flash_usr_cb (struct rkcamera_gpio_res *res,int on)
151 #error "CONFIG_SENSOR_FLASH_IOCTL_USR is 1, sensor_flash_usr_cb function must be writed!!";
155 static struct rkcamera_platform_ioctl_cb sensor_ioctl_cb = {
156 #if CONFIG_SENSOR_POWER_IOCTL_USR
157 .sensor_power_cb = sensor_power_usr_cb,
159 .sensor_power_cb = NULL,
162 #if CONFIG_SENSOR_RESET_IOCTL_USR
163 .sensor_reset_cb = sensor_reset_usr_cb,
165 .sensor_reset_cb = NULL,
168 #if CONFIG_SENSOR_POWERDOWN_IOCTL_USR
169 .sensor_powerdown_cb = sensor_powerdown_usr_cb,
171 .sensor_powerdown_cb = NULL,
174 #if CONFIG_SENSOR_FLASH_IOCTL_USR
175 .sensor_flash_cb = sensor_flash_usr_cb,
177 .sensor_flash_cb = NULL,
180 static struct reginfo_t rk_init_data_sensor_reg_0[] =
185 //{0x0100, 0x01}, //software sleep : Sensor vsync singal may not output if haven't sleep the sensor when transfer the array
349 static struct reginfo_t rk_init_data_sensor_winseqreg_0[] ={
352 static rk_sensor_user_init_data_s rk_init_data_sensor_0 =
354 .rk_sensor_init_width = INVALID_VALUE,
355 .rk_sensor_init_height = INVALID_VALUE,
356 .rk_sensor_init_bus_param = INVALID_VALUE,
357 .rk_sensor_init_pixelcode = INVALID_VALUE,
358 .rk_sensor_init_data = rk_init_data_sensor_reg_0,
359 .rk_sensor_init_winseq = NULL,//rk_init_data_sensor_winseqreg_0,
360 .rk_sensor_winseq_size = sizeof(rk_init_data_sensor_winseqreg_0) / sizeof(struct reginfo_t),
363 static rk_sensor_user_init_data_s* rk_init_data_sensor_0_p = &rk_init_data_sensor_0;
364 static rk_sensor_user_init_data_s* rk_init_data_sensor_1_p = NULL;
365 #include "../../../drivers/media/video/rk_camera.c"
369 #if defined(CONFIG_TOUCHSCREEN_GT8XX)
370 #define TOUCH_RESET_PIN RK30_PIN4_PD0
371 #define TOUCH_PWR_PIN INVALID_GPIO
372 int goodix_init_platform_hw(void)
375 printk("goodix_init_platform_hw\n");
376 if(TOUCH_PWR_PIN != INVALID_GPIO)
378 ret = gpio_request(TOUCH_PWR_PIN, "goodix power pin");
380 gpio_free(TOUCH_PWR_PIN);
381 printk("goodix power error\n");
384 gpio_direction_output(TOUCH_PWR_PIN, 0);
385 gpio_set_value(TOUCH_PWR_PIN,GPIO_LOW);
389 if(TOUCH_RESET_PIN != INVALID_GPIO)
391 ret = gpio_request(TOUCH_RESET_PIN, "goodix reset pin");
393 gpio_free(TOUCH_RESET_PIN);
394 printk("goodix gpio_request error\n");
397 gpio_direction_output(TOUCH_RESET_PIN, 0);
398 gpio_set_value(TOUCH_RESET_PIN,GPIO_LOW);
400 gpio_set_value(TOUCH_RESET_PIN,GPIO_HIGH);
406 struct goodix_platform_data goodix_info = {
408 .irq_pin = RK30_PIN4_PC2,
409 .rest_pin = TOUCH_RESET_PIN,
410 .init_platform_hw = goodix_init_platform_hw,
415 /*****************************************************************************************
416 * xpt2046 touch panel
417 * author: hhb@rock-chips.com
418 *****************************************************************************************/
419 #if defined(CONFIG_TOUCHSCREEN_XPT2046_NORMAL_SPI) || defined(CONFIG_TOUCHSCREEN_XPT2046_TSLIB_SPI)
420 #define XPT2046_GPIO_INT RK30_PIN4_PC2
421 #define DEBOUNCE_REPTIME 3
424 static struct xpt2046_platform_data xpt2046_info = {
429 .debounce_rep = DEBOUNCE_REPTIME,
431 .gpio_pendown = XPT2046_GPIO_INT,
432 .pendown_iomux_name = GPIO4C2_SMCDATA2_TRACEDATA2_NAME,
433 .pendown_iomux_mode = GPIO4C_GPIO4C2,
434 .touch_virtualkey_length = 60,
435 .penirq_recheck_delay_usecs = 1,
436 #if defined(CONFIG_TOUCHSCREEN_480X800)
441 .touch_ad_top = 3940,
442 .touch_ad_bottom = 310,
443 .touch_ad_left = 3772,
444 .touch_ad_right = 340,
445 #elif defined(CONFIG_TOUCHSCREEN_800X480)
450 .touch_ad_top = 2447,
451 .touch_ad_bottom = 207,
452 .touch_ad_left = 5938,
453 .touch_ad_right = 153,
454 #elif defined(CONFIG_TOUCHSCREEN_320X480)
459 .touch_ad_top = 3166,
460 .touch_ad_bottom = 256,
461 .touch_ad_left = 3658,
462 .touch_ad_right = 380,
465 #elif defined(CONFIG_TOUCHSCREEN_XPT2046_CBN_SPI)
466 static struct xpt2046_platform_data xpt2046_info = {
471 .debounce_rep = DEBOUNCE_REPTIME,
473 .gpio_pendown = XPT2046_GPIO_INT,
474 .pendown_iomux_name = GPIO4C2_SMCDATA2_TRACEDATA2_NAME,
475 .pendown_iomux_mode = GPIO4C_GPIO4C2,
476 .touch_virtualkey_length = 60,
477 .penirq_recheck_delay_usecs = 1,
479 #if defined(CONFIG_TOUCHSCREEN_480X800)
484 .screen_x = { 70, 410, 70, 410, 240},
485 .screen_y = { 50, 50, 740, 740, 400},
486 .uncali_x_default = { 3267, 831, 3139, 715, 1845 },
487 .uncali_y_default = { 3638, 3664, 564, 591, 2087 },
488 #elif defined(CONFIG_TOUCHSCREEN_800X480)
493 .screen_x[5] = { 50, 750, 50, 750, 400};
494 .screen_y[5] = { 40, 40, 440, 440, 240};
495 .uncali_x_default[5] = { 438, 565, 3507, 3631, 2105 };
496 .uncali_y_default[5] = { 3756, 489, 3792, 534, 2159 };
497 #elif defined(CONFIG_TOUCHSCREEN_320X480)
502 .screen_x[5] = { 50, 270, 50, 270, 160};
503 .screen_y[5] = { 40, 40, 440, 440, 240};
504 .uncali_x_default[5] = { 812, 3341, 851, 3371, 2183 };
505 .uncali_y_default[5] = { 442, 435, 3193, 3195, 2004 };
509 #if defined(CONFIG_TOUCHSCREEN_XPT2046_SPI)
510 static struct rk29xx_spi_chip xpt2046_chip = {
515 static struct spi_board_info board_spi_devices[] = {
516 #if defined(CONFIG_TOUCHSCREEN_XPT2046_SPI)
518 .modalias = "xpt2046_ts",
519 .chip_select = 1,// 2,
520 .max_speed_hz = 1 * 1000 * 800,/* (max sample rate @ 3V) * (cmd + data + overhead) */
522 .irq = XPT2046_GPIO_INT,
523 .platform_data = &xpt2046_info,
524 .controller_data = &xpt2046_chip,
531 /***********************************************************
533 ************************************************************/
534 #ifdef CONFIG_BACKLIGHT_RK29_BL
536 #define PWM_MUX_NAME GPIO0A3_PWM0_NAME
537 #define PWM_MUX_MODE GPIO0A_PWM0
538 #define PWM_MUX_MODE_GPIO GPIO0A_GPIO0A3
539 #define PWM_GPIO RK30_PIN0_PA3
540 #define PWM_EFFECT_VALUE 1
542 #define LCD_DISP_ON_PIN
544 #ifdef LCD_DISP_ON_PIN
545 //#define BL_EN_MUX_NAME GPIOF34_UART3_SEL_NAME
546 //#define BL_EN_MUX_MODE IOMUXB_GPIO1_B34
548 #define BL_EN_PIN RK30_PIN6_PB3
549 #define BL_EN_VALUE GPIO_HIGH
551 static int rk29_backlight_io_init(void)
554 rk30_mux_api_set(PWM_MUX_NAME, PWM_MUX_MODE);
555 #ifdef LCD_DISP_ON_PIN
556 // rk30_mux_api_set(BL_EN_MUX_NAME, BL_EN_MUX_MODE);
558 ret = gpio_request(BL_EN_PIN, NULL);
561 gpio_free(BL_EN_PIN);
564 gpio_direction_output(BL_EN_PIN, 0);
565 gpio_set_value(BL_EN_PIN, BL_EN_VALUE);
570 static int rk29_backlight_io_deinit(void)
573 #ifdef LCD_DISP_ON_PIN
574 gpio_free(BL_EN_PIN);
576 rk30_mux_api_set(PWM_MUX_NAME, PWM_MUX_MODE_GPIO);
580 static int rk29_backlight_pwm_suspend(void)
583 rk30_mux_api_set(PWM_MUX_NAME, PWM_MUX_MODE_GPIO);
584 if (gpio_request(PWM_GPIO, NULL)) {
585 printk("func %s, line %d: request gpio fail\n", __FUNCTION__, __LINE__);
588 gpio_direction_output(PWM_GPIO, GPIO_LOW);
589 #ifdef LCD_DISP_ON_PIN
590 gpio_direction_output(BL_EN_PIN, 0);
591 gpio_set_value(BL_EN_PIN, !BL_EN_VALUE);
596 static int rk29_backlight_pwm_resume(void)
599 rk30_mux_api_set(PWM_MUX_NAME, PWM_MUX_MODE);
600 #ifdef LCD_DISP_ON_PIN
602 gpio_direction_output(BL_EN_PIN, 1);
603 gpio_set_value(BL_EN_PIN, BL_EN_VALUE);
608 static struct rk29_bl_info rk29_bl_info = {
610 .bl_ref = PWM_EFFECT_VALUE,
611 .io_init = rk29_backlight_io_init,
612 .io_deinit = rk29_backlight_io_deinit,
613 .pwm_suspend = rk29_backlight_pwm_suspend,
614 .pwm_resume = rk29_backlight_pwm_resume,
618 static struct platform_device rk29_device_backlight = {
619 .name = "rk29_backlight",
622 .platform_data = &rk29_bl_info,
629 #if defined (CONFIG_GS_MMA8452)
630 #define MMA8452_INT_PIN RK30_PIN4_PC0
632 static int mma8452_init_platform_hw(void)
634 rk30_mux_api_set(GPIO4C0_SMCDATA0_TRACEDATA0_NAME, GPIO4C_GPIO4C0);
636 if(gpio_request(MMA8452_INT_PIN,NULL) != 0){
637 gpio_free(MMA8452_INT_PIN);
638 printk("mma8452_init_platform_hw gpio_request error\n");
641 gpio_pull_updown(MMA8452_INT_PIN, 1);
646 static struct mma8452_platform_data mma8452_info = {
650 .init_platform_hw= mma8452_init_platform_hw,
651 .orientation = { -1, 0, 0, 0, 0, 1, 0, -1, 0},
654 #if defined (CONFIG_COMPASS_AK8975)
655 static struct akm8975_platform_data akm8975_info =
688 #if defined(CONFIG_GYRO_L3G4200D)
690 #include <linux/l3g4200d.h>
691 #define L3G4200D_INT_PIN RK30_PIN4_PC3
693 static int l3g4200d_init_platform_hw(void)
695 if (gpio_request(L3G4200D_INT_PIN, NULL) != 0) {
696 gpio_free(L3G4200D_INT_PIN);
697 printk("%s: request l3g4200d int pin error\n", __func__);
700 gpio_pull_updown(L3G4200D_INT_PIN, 1);
704 static struct l3g4200d_platform_data l3g4200d_info = {
715 .init = l3g4200d_init_platform_hw,
720 #ifdef CONFIG_LS_CM3217
722 #define CM3217_POWER_PIN INVALID_GPIO
723 #define CM3217_IRQ_PIN INVALID_GPIO
724 static int cm3217_init_hw(void)
727 if (gpio_request(CM3217_POWER_PIN, NULL) != 0) {
728 gpio_free(CM3217_POWER_PIN);
729 printk("%s: request cm3217 power pin error\n", __func__);
732 gpio_pull_updown(CM3217_POWER_PIN, PullDisable);
734 if (gpio_request(CM3217_IRQ_PIN, NULL) != 0) {
735 gpio_free(CM3217_IRQ_PIN);
736 printk("%s: request cm3217 int pin error\n", __func__);
739 gpio_pull_updown(CM3217_IRQ_PIN, PullDisable);
744 static void cm3217_exit_hw(void)
747 gpio_free(CM3217_POWER_PIN);
748 gpio_free(CM3217_IRQ_PIN);
753 struct cm3217_platform_data cm3217_info = {
754 .irq_pin = CM3217_IRQ_PIN,
755 .power_pin = CM3217_POWER_PIN,
756 .init_platform_hw = cm3217_init_hw,
757 .exit_platform_hw = cm3217_exit_hw,
763 #ifdef CONFIG_FB_ROCKCHIP
764 static struct resource resource_fb[] = {
768 .end = 0,//RK30_FB0_MEM_SIZE - 1,
769 .flags = IORESOURCE_MEM,
772 .name = "ipp buf", //for rotate
774 .end = 0,//RK30_FB0_MEM_SIZE - 1,
775 .flags = IORESOURCE_MEM,
780 .end = 0,//RK30_FB0_MEM_SIZE - 1,
781 .flags = IORESOURCE_MEM,
785 static struct platform_device device_fb = {
788 .num_resources = ARRAY_SIZE(resource_fb),
789 .resource = resource_fb,
793 #ifdef CONFIG_ANDROID_TIMED_GPIO
794 static struct timed_gpio timed_gpios[] = {
797 .gpio = RK30_PIN0_PA4,
800 .adjust_time =20, //adjust for diff product
804 struct timed_gpio_platform_data rk29_vibrator_info = {
806 .gpios = timed_gpios,
809 struct platform_device rk29_device_vibrator ={
810 .name = "timed-gpio",
813 .platform_data = &rk29_vibrator_info,
819 #ifdef CONFIG_LEDS_GPIO_PLATFORM
820 struct gpio_led rk29_leds[] = {
822 .name = "button-backlight",
823 .gpio = RK30_PIN4_PD7,
824 .default_trigger = "timer",
826 .retain_state_suspended = 0,
827 .default_state = LEDS_GPIO_DEFSTATE_OFF,
831 struct gpio_led_platform_data rk29_leds_pdata = {
833 .num_leds = ARRAY_SIZE(rk29_leds),
836 struct platform_device rk29_device_gpio_leds = {
840 .platform_data = &rk29_leds_pdata,
845 #ifdef CONFIG_RK_IRDA
846 #define IRDA_IRQ_PIN RK30_PIN6_PA1
848 int irda_iomux_init(void)
853 ret = gpio_request(IRDA_IRQ_PIN, NULL);
856 gpio_free(IRDA_IRQ_PIN);
857 printk(">>>>>> IRDA_IRQ_PIN gpio_request err \n ");
859 gpio_pull_updown(IRDA_IRQ_PIN, PullDisable);
860 gpio_direction_input(IRDA_IRQ_PIN);
865 int irda_iomux_deinit(void)
867 gpio_free(IRDA_IRQ_PIN);
871 static struct irda_info rk29_irda_info = {
872 .intr_pin = IRDA_IRQ_PIN,
873 .iomux_init = irda_iomux_init,
874 .iomux_deinit = irda_iomux_deinit,
875 //.irda_pwr_ctl = bu92747guw_power_ctl,
878 static struct platform_device irda_device = {
879 #ifdef CONFIG_RK_IRDA_NET
882 .name = "bu92747_irda",
886 .platform_data = &rk29_irda_info,
894 static struct platform_device *devices[] __initdata = {
895 #ifdef CONFIG_BACKLIGHT_RK29_BL
896 &rk29_device_backlight,
898 #ifdef CONFIG_FB_ROCKCHIP
901 #ifdef CONFIG_ANDROID_TIMED_GPIO
902 &rk29_device_vibrator,
904 #ifdef CONFIG_LEDS_GPIO_PLATFORM
905 &rk29_device_gpio_leds,
907 #ifdef CONFIG_RK_IRDA
915 #ifdef CONFIG_I2C0_RK30
916 static struct i2c_board_info __initdata i2c0_info[] = {
917 #if defined (CONFIG_GS_MMA8452)
919 .type = "gs_mma8452",
922 .irq = MMA8452_INT_PIN,
923 .platform_data = &mma8452_info,
926 #if defined (CONFIG_COMPASS_AK8975)
931 .irq = RK30_PIN4_PC1,
932 .platform_data = &akm8975_info,
935 #if defined (CONFIG_GYRO_L3G4200D)
937 .type = "l3g4200d_gryo",
940 .irq = L3G4200D_INT_PIN,
941 .platform_data = &l3g4200d_info,
945 #if defined (CONFIG_SND_SOC_RK1000)
947 .type = "rk1000_i2c_codec",
952 .type = "rk1000_control",
960 #ifdef CONFIG_I2C1_RK30
961 static struct i2c_board_info __initdata i2c1_info[] = {
965 #ifdef CONFIG_I2C2_RK30
966 static struct i2c_board_info __initdata i2c2_info[] = {
967 #if defined (CONFIG_TOUCHSCREEN_GT8XX)
973 .platform_data = &goodix_info,
976 #if defined (CONFIG_LS_CM3217)
978 .type = "lightsensor",
981 .irq = CM3217_IRQ_PIN,
982 .platform_data = &cm3217_info,
989 #ifdef CONFIG_I2C3_RK30
990 static struct i2c_board_info __initdata i2c3_info[] = {
994 #ifdef CONFIG_I2C4_RK30
995 static struct i2c_board_info __initdata i2c4_info[] = {
999 static void __init rk30_i2c_register_board_info(void)
1001 #ifdef CONFIG_I2C0_RK30
1002 i2c_register_board_info(0, i2c0_info, ARRAY_SIZE(i2c0_info));
1004 #ifdef CONFIG_I2C1_RK30
1005 i2c_register_board_info(1, i2c1_info, ARRAY_SIZE(i2c1_info));
1007 #ifdef CONFIG_I2C2_RK30
1008 i2c_register_board_info(2, i2c2_info, ARRAY_SIZE(i2c2_info));
1010 #ifdef CONFIG_I2C3_RK30
1011 i2c_register_board_info(3, i2c3_info, ARRAY_SIZE(i2c3_info));
1013 #ifdef CONFIG_I2C4_RK30
1014 i2c_register_board_info(4, i2c4_info, ARRAY_SIZE(i2c4_info));
1019 static void __init machine_rk30_board_init(void)
1021 rk30_i2c_register_board_info();
1022 spi_register_board_info(board_spi_devices, ARRAY_SIZE(board_spi_devices));
1023 platform_add_devices(devices, ARRAY_SIZE(devices));
1026 static void __init rk30_reserve(void)
1028 #ifdef CONFIG_FB_ROCKCHIP
1029 resource_fb[0].start = board_mem_reserve_add("fb0",RK30_FB0_MEM_SIZE);
1030 resource_fb[0].end = resource_fb[0].start + RK30_FB0_MEM_SIZE - 1;
1031 resource_fb[1].start = board_mem_reserve_add("ipp buf",RK30_FB0_MEM_SIZE);
1032 resource_fb[1].end = resource_fb[1].start + RK30_FB0_MEM_SIZE - 1;
1033 resource_fb[2].start = board_mem_reserve_add("fb2",RK30_FB0_MEM_SIZE);
1034 resource_fb[2].end = resource_fb[2].start + RK30_FB0_MEM_SIZE - 1;
1037 #if (MEM_CAMIPP_SIZE != 0)
1038 #if CONFIG_USE_CIF_0
1039 rk_camera_platform_data_host_0.meminfo.name = "camera_ipp_mem_0";
1040 rk_camera_platform_data_host_0.meminfo.start = board_mem_reserve_add("camera_ipp_mem_0",MEM_CAMIPP_SIZE);
1041 rk_camera_platform_data_host_0.meminfo.size= MEM_CAMIPP_SIZE;
1043 #if CONFIG_USE_CIF_1
1044 rk_camera_platform_data_host_1.meminfo.name = "camera_ipp_mem_1";
1045 rk_camera_platform_data_host_1.meminfo.start =board_mem_reserve_add("camera_ipp_mem_1",MEM_CAMIPP_SIZE);
1046 rk_camera_platform_data_host_1.meminfo.size= MEM_CAMIPP_SIZE;
1050 #if (PMEM_CAM_SIZE != 0)
1051 android_pmem_cam_pdata.start = board_mem_reserve_add("camera_pmem",PMEM_CAM_SIZE);
1052 android_pmem_cam_pdata.size = PMEM_CAM_SIZE;
1055 board_mem_reserved();
1058 MACHINE_START(RK30, "RK30board")
1059 .boot_params = PLAT_PHYS_OFFSET + 0x800,
1060 .fixup = rk30_fixup,
1061 .reserve = &rk30_reserve,
1062 .map_io = rk30_map_io,
1063 .init_irq = rk30_init_irq,
1064 .timer = &rk30_timer,
1065 .init_machine = machine_rk30_board_init,