rk29 ddr3sdk update board file
authoreddie <cf@rock-chips.com>
Thu, 1 Sep 2011 03:55:40 +0000 (11:55 +0800)
committereddie <cf@rock-chips.com>
Thu, 1 Sep 2011 03:55:40 +0000 (11:55 +0800)
arch/arm/mach-rk29/board-rk29-ddr3sdk.c [changed mode: 0755->0644]

old mode 100755 (executable)
new mode 100644 (file)
index e0bed71..de48ad0
@@ -57,6 +57,9 @@
 #include "devices.h"
 #include "../../../drivers/input/touchscreen/xpt2046_cbn_ts.h"
 
+#ifdef CONFIG_BU92747GUW_CIR
+#include "../../../drivers/cir/bu92747guw_cir.h"
+#endif
 #ifdef CONFIG_VIDEO_RK29
 /*---------------- Camera Sensor Macro Define Begin  ------------------------*/
 /*---------------- Camera Sensor Configuration Macro Begin ------------------------*/
@@ -88,6 +91,7 @@
 #include "../../../drivers/media/video/rk29_camera.c"
 /*---------------- Camera Sensor Macro Define End  ------------------------*/
 
+
 /* Set memory size of pmem */
 #ifdef CONFIG_RK29_MEM_SIZE_M
 #define SDRAM_SIZE          (CONFIG_RK29_MEM_SIZE_M * SZ_1M)
@@ -310,6 +314,7 @@ static int rk29_fb_io_init(struct rk29_fb_setting_info *fb_setting)
     return ret;
 }
 
+
 static struct rk29fb_info rk29_fb_info = {
     .fb_id   = FB_ID,
     .mcu_fmk_pin = FB_MCU_FMK_PIN,
@@ -368,6 +373,344 @@ struct platform_device rk29_device_dma_cpy = {
 
 #endif
 
+#if defined(CONFIG_RK_IRDA) || defined(CONFIG_BU92747GUW_CIR)
+#define BU92747GUW_RESET_PIN         RK29_PIN3_PD4// INVALID_GPIO //
+#define BU92747GUW_RESET_MUX_NAME    GPIO3D4_HOSTWRN_NAME//NULL //
+#define BU92747GUW_RESET_MUX_MODE    GPIO3H_GPIO3D4//NULL //
+
+#define BU92747GUW_PWDN_PIN          RK29_PIN3_PD3//RK29_PIN5_PA7 //
+#define BU92747GUW_PWDN_MUX_NAME     GPIO3D3_HOSTRDN_NAME//GPIO5A7_HSADCDATA2_NAME //
+#define BU92747GUW_PWDN_MUX_MODE     GPIO3H_GPIO3D3//GPIO5L_GPIO5A7  //
+
+static int bu92747guw_io_init(void)
+{
+       int ret;
+       
+       //reset pin
+    if(BU92747GUW_RESET_MUX_NAME != NULL)
+    {
+        rk29_mux_api_set(BU92747GUW_RESET_MUX_NAME, BU92747GUW_RESET_MUX_MODE);
+    }
+       ret = gpio_request(BU92747GUW_RESET_PIN, NULL);
+       if(ret != 0)
+       {
+               gpio_free(BU92747GUW_RESET_PIN);
+               printk(">>>>>> BU92747GUW_RESET_PIN gpio_request err \n ");
+       }
+       gpio_direction_output(BU92747GUW_RESET_PIN, GPIO_HIGH);
+
+       //power down pin
+    if(BU92747GUW_PWDN_MUX_NAME != NULL)
+    {
+        rk29_mux_api_set(BU92747GUW_PWDN_MUX_NAME, BU92747GUW_PWDN_MUX_MODE);
+    }
+       ret = gpio_request(BU92747GUW_PWDN_PIN, NULL);
+       if(ret != 0)
+       {
+               gpio_free(BU92747GUW_PWDN_PIN);
+               printk(">>>>>> BU92747GUW_PWDN_PIN gpio_request err \n ");
+       }
+
+       //power down as default
+       gpio_direction_output(BU92747GUW_PWDN_PIN, GPIO_LOW);
+       
+       return 0;
+}
+
+
+static int bu92747guw_io_deinit(void)
+{
+       gpio_free(BU92747GUW_PWDN_PIN);
+       gpio_free(BU92747GUW_RESET_PIN);
+       return 0;
+}
+
+//power ctl func is share with irda and remote
+static int nPowerOnCount = 0;
+static DEFINE_MUTEX(bu92747_power_mutex);
+
+//1---power on;  0---power off
+static int bu92747guw_power_ctl(int enable)
+{
+    printk("%s \n",__FUNCTION__);
+
+       mutex_lock(&bu92747_power_mutex);
+       if (enable) {
+               nPowerOnCount++;
+               if (nPowerOnCount == 1) {//power on first       
+                       //smc0_init(NULL);
+                       gpio_set_value(BU92747GUW_PWDN_PIN, GPIO_HIGH);
+                       gpio_set_value(BU92747GUW_RESET_PIN, GPIO_LOW);
+                       mdelay(5);
+                       gpio_set_value(BU92747GUW_RESET_PIN, GPIO_HIGH);
+                       mdelay(5);
+               }
+       }
+       else {
+               nPowerOnCount--;
+               if (nPowerOnCount <= 0) {//power down final
+                       nPowerOnCount = 0;
+                       //smc0_exit();
+                       gpio_set_value(BU92747GUW_PWDN_PIN, GPIO_LOW);
+               }
+       }
+       mutex_unlock(&bu92747_power_mutex);
+       return 0;
+}
+#endif
+
+#ifdef CONFIG_RK_IRDA
+#define IRDA_IRQ_PIN           RK29_PIN5_PB2
+#define IRDA_IRQ_MUX_NAME      GPIO5B2_HSADCDATA5_NAME
+#define IRDA_IRQ_MUX_MODE      GPIO5L_GPIO5B2
+
+int irda_iomux_init(void)
+{
+    int ret = 0;
+
+       //irda irq pin
+    if(IRDA_IRQ_MUX_NAME != NULL)
+    {
+        rk29_mux_api_set(IRDA_IRQ_MUX_NAME, IRDA_IRQ_MUX_MODE);
+    }
+       ret = gpio_request(IRDA_IRQ_PIN, NULL);
+       if(ret != 0)
+       {
+               gpio_free(IRDA_IRQ_PIN);
+               printk(">>>>>> IRDA_IRQ_PIN gpio_request err \n ");
+       }
+       gpio_pull_updown(IRDA_IRQ_PIN, GPIO_HIGH);
+       gpio_direction_input(IRDA_IRQ_PIN);
+
+    return 0;
+}
+
+int irda_iomux_deinit(void)
+{
+       gpio_free(IRDA_IRQ_PIN);
+       return 0;
+}
+
+static struct irda_info rk29_irda_info = {
+    .intr_pin = IRDA_IRQ_PIN,
+    .iomux_init = irda_iomux_init,
+    .iomux_deinit = irda_iomux_deinit,
+       .irda_pwr_ctl = bu92747guw_power_ctl,
+};
+
+static struct platform_device irda_device = {
+#ifdef CONFIG_RK_IRDA_NET
+                       .name   = "rk_irda",
+#else
+                       .name = "bu92747_irda",
+#endif
+    .id                  = -1,
+       .dev            = {
+               .platform_data  = &rk29_irda_info,
+       }
+};
+#endif
+
+#ifdef CONFIG_BU92747GUW_CIR
+#define BU92747_CIR_IRQ_PIN RK29_PIN5_PB0
+#define CIR_IRQ_PIN_IOMUX_NAME GPIO5B0_HSADCDATA3_NAME
+#define CIR_IRQ_PIN_IOMUX_VALUE GPIO5L_GPIO5B0
+static int cir_iomux_init(void)
+{
+       if (CIR_IRQ_PIN_IOMUX_NAME)
+               rk29_mux_api_set(CIR_IRQ_PIN_IOMUX_NAME, CIR_IRQ_PIN_IOMUX_VALUE);
+       rk29_mux_api_set(GPIO5A7_HSADCDATA2_NAME, GPIO5L_GPIO5A7);
+       return 0;
+}
+
+static struct  bu92747guw_platform_data bu92747guw_pdata = {
+       .intr_pin = BU92747_CIR_IRQ_PIN,
+       .iomux_init = cir_iomux_init,
+       .iomux_deinit = NULL,
+       .cir_pwr_ctl = bu92747guw_power_ctl,
+};  
+#endif
+#ifdef CONFIG_RK29_NEWTON
+struct rk29_newton_data rk29_newton_info = {   
+};
+struct platform_device rk29_device_newton = {
+       .name          = "rk29_newton",
+       .id            = -1,            
+       .dev               = {
+       .platform_data = &rk29_newton_info,     
+               }           
+       };
+#endif
+#if defined (CONFIG_TOUCHSCREEN_FT5406)
+#define TOUCH_RESET_PIN RK29_PIN6_PC3
+#define TOUCH_INT_PIN   RK29_PIN0_PA2
+int ft5406_init_platform_hw(void)
+{
+       printk("ft5406_init_platform_hw\n");
+    if(gpio_request(TOUCH_RESET_PIN,NULL) != 0){
+      gpio_free(TOUCH_RESET_PIN);
+      printk("ft5406_init_platform_hw gpio_request error\n");
+      return -EIO;
+    }
+
+    if(gpio_request(TOUCH_INT_PIN,NULL) != 0){
+      gpio_free(TOUCH_INT_PIN);
+      printk("ift5406_init_platform_hw gpio_request error\n");
+      return -EIO;
+    }
+
+       gpio_direction_output(TOUCH_RESET_PIN, 0);
+       gpio_set_value(TOUCH_RESET_PIN,GPIO_LOW);
+       mdelay(10);
+       gpio_direction_input(TOUCH_INT_PIN);
+       mdelay(10);
+       gpio_set_value(TOUCH_RESET_PIN,GPIO_HIGH);
+       msleep(300);
+    return 0;
+}
+
+void ft5406_exit_platform_hw(void)
+{
+       printk("ft5406_exit_platform_hw\n");
+       gpio_free(TOUCH_RESET_PIN);
+       gpio_free(TOUCH_INT_PIN);
+}
+
+int ft5406_platform_sleep(void)
+{
+       printk("ft5406_platform_sleep\n");
+       gpio_set_value(TOUCH_RESET_PIN,GPIO_LOW);
+       return 0;
+}
+
+int ft5406_platform_wakeup(void)
+{
+       printk("ft5406_platform_wakeup\n");
+       gpio_set_value(TOUCH_RESET_PIN,GPIO_HIGH);
+       msleep(300);
+       return 0;
+}
+
+struct ft5406_platform_data ft5406_info = {
+
+  .init_platform_hw= ft5406_init_platform_hw,
+  .exit_platform_hw= ft5406_exit_platform_hw,
+  .platform_sleep  = ft5406_platform_sleep,
+  .platform_wakeup = ft5406_platform_wakeup,
+
+};
+#endif
+
+#if defined(CONFIG_TOUCHSCREEN_GT819)
+#define TOUCH_RESET_PIN RK29_PIN6_PC3
+#define TOUCH_INT_PIN   RK29_PIN0_PA2
+int gt819_init_platform_hw(void)
+{
+       printk("gt819_init_platform_hw\n");
+    if(gpio_request(TOUCH_RESET_PIN,NULL) != 0){
+      gpio_free(TOUCH_RESET_PIN);
+      printk("gt819_init_platform_hw gpio_request error\n");
+      return -EIO;
+    }
+
+    if(gpio_request(TOUCH_INT_PIN,NULL) != 0){
+      gpio_free(TOUCH_INT_PIN);
+      printk("gt819_init_platform_hw gpio_request error\n");
+      return -EIO;
+    }
+       gpio_direction_output(TOUCH_RESET_PIN, 0);
+       gpio_set_value(TOUCH_RESET_PIN,GPIO_LOW);
+       mdelay(10);
+//     gpio_set_value(TOUCH_RESET_PIN,GPIO_HIGH);
+//     mdelay(10);
+//     gpio_set_value(TOUCH_RESET_PIN,GPIO_LOW);
+       gpio_direction_input(TOUCH_INT_PIN);
+//     mdelay(10);
+       gpio_set_value(TOUCH_RESET_PIN,GPIO_HIGH);
+       msleep(300);
+    return 0;
+}
+
+
+void gt819_exit_platform_hw(void)
+{
+       printk("gt819_exit_platform_hw\n");
+       gpio_free(TOUCH_RESET_PIN);
+       gpio_free(TOUCH_INT_PIN);
+}
+
+int gt819_platform_sleep(void)
+{
+       printk("gt819_platform_sleep\n");
+       gpio_set_value(TOUCH_RESET_PIN,GPIO_LOW);
+       return 0;
+}
+
+int gt819_platform_wakeup(void)
+{
+       printk("gt819_platform_wakeup\n");
+       gpio_set_value(TOUCH_RESET_PIN,GPIO_HIGH);
+       //msleep(5);
+       //gpio_set_value(TOUCH_INT_PIN, GPIO_LOW); 
+       //msleep(20);
+       //gpio_set_value(TOUCH_INT_PIN, GPIO_HIGH);
+       return 0;
+}
+struct goodix_platform_data goodix_info = {
+
+  .init_platform_hw= gt819_init_platform_hw,
+  .exit_platform_hw= gt819_exit_platform_hw,
+  .platform_sleep  = gt819_platform_sleep,
+  .platform_wakeup = gt819_platform_wakeup,
+
+};
+#endif
+
+
+#if defined (CONFIG_SND_SOC_CS42L52)
+
+int cs42l52_init_platform_hw()
+{
+       printk("cs42l52_init_platform_hw\n");
+    if(gpio_request(RK29_PIN6_PB6,NULL) != 0){
+      gpio_free(RK29_PIN6_PB6);
+      printk("cs42l52_init_platform_hw gpio_request error\n");
+      return -EIO;
+    }
+    gpio_direction_output(RK29_PIN6_PB6, 0);
+       gpio_set_value(RK29_PIN6_PB6,GPIO_HIGH);
+       return 0;
+}
+struct cs42l52_platform_data cs42l52_info = {
+
+  .init_platform_hw= cs42l52_init_platform_hw,
+
+};
+#endif
+#if defined (CONFIG_BATTERY_BQ27541)
+#define        DC_CHECK_PIN    RK29_PIN4_PA1
+#define        LI_LION_BAT_NUM 1
+#define CHG_OK RK29_PIN4_PA3
+#define BAT_LOW        RK29_PIN4_PA2
+
+static int bq27541_init_dc_check_pin(void){    
+       if(gpio_request(DC_CHECK_PIN,"dc_check") != 0){      
+               gpio_free(DC_CHECK_PIN);      
+               printk("bq27541 init dc check pin request error\n");      
+               return -EIO;    
+       }       
+       gpio_direction_input(DC_CHECK_PIN);     
+       return 0;
+}
+
+struct bq27541_platform_data bq27541_info = {  
+       .init_dc_check_pin = bq27541_init_dc_check_pin, 
+       .dc_check_pin =  DC_CHECK_PIN,          
+       .bat_num = LI_LION_BAT_NUM,
+       .chgok_check_pin =  CHG_OK,
+       .bat_check_pin =  BAT_LOW,
+};
+#endif
 static struct android_pmem_platform_data android_pmem_pdata = {
        .name           = "pmem",
        .start          = PMEM_UI_BASE,
@@ -821,6 +1164,7 @@ static struct i2c_board_info __initdata board_i2c0_devices[] = {
                .irq                    = RK29_PIN0_PA4,
        },
 #endif
+/*mpu3050*/
 #if defined (CONFIG_MPU_SENSORS_MPU3050) 
        {
                .type                   = "mpu3050",
@@ -830,14 +1174,29 @@ static struct i2c_board_info __initdata board_i2c0_devices[] = {
                .platform_data  = &mpu3050_data,
        },
 #endif
+#if defined (CONFIG_SND_SOC_CS42L52)
+       {
+               .type                   = "cs42l52",
+               .addr           = 0x4A,
+               .flags                  = 0,
+               .platform_data  = &cs42l52_info,
+       },
+#endif
+#if defined (CONFIG_RTC_M41T66)
+       {
+               .type           = "rtc-M41T66",
+               .addr           = 0x68,
+               .flags          = 0,
+               .irq            = RK29_PIN0_PA1,
+       },
+#endif
 };
 #endif
 #if defined (CONFIG_ANX7150)
-struct hdmi_platform_data anx7150_data  = {
-       //.io_init = anx7150_io_init,
+struct hdmi_platform_data anx7150_data = {
+       //.io_init = anx7150_io_init,
 };
 #endif
-
 #ifdef CONFIG_I2C1_RK29
 static struct i2c_board_info __initdata board_i2c1_devices[] = {
 #if defined (CONFIG_RK1000_CONTROL1)
@@ -856,6 +1215,15 @@ static struct i2c_board_info __initdata board_i2c1_devices[] = {
                .platform_data  = &anx7150_data,
     },
 #endif
+#ifdef CONFIG_BU92747GUW_CIR
+    {
+       .type   ="bu92747_cir",
+       .addr   = 0x77,    
+       .flags      =0,
+       .irq            = BU92747_CIR_IRQ_PIN,
+       .platform_data = &bu92747guw_pdata,
+    },
+#endif
 
 };
 #endif
@@ -881,11 +1249,37 @@ static struct i2c_board_info __initdata board_i2c2_devices[] = {
       .platform_data  = &eeti_egalax_info,
     },
 #endif
+#if defined (CONFIG_TOUCHSCREEN_GT819)
+    {
+               .type   = "Goodix-TS",
+               .addr   = 0x55,
+               .flags      =0,
+               .irq            =RK29_PIN0_PA2,
+               .platform_data = &goodix_info,
+    },
+#endif
+#if defined (CONFIG_TOUCHSCREEN_FT5406)
+    {
+               .type   ="ft5x0x_ts",
+               .addr   = 0x38,    //0x70,
+               .flags      =0,
+               .irq            =RK29_PIN0_PA2, // support goodix tp detect, 20110706
+               .platform_data = &ft5406_info,
+    },
+#endif
 };
 #endif
 
 #ifdef CONFIG_I2C3_RK29
 static struct i2c_board_info __initdata board_i2c3_devices[] = {
+#if defined (CONFIG_BATTERY_BQ27541)
+       {
+               .type                   = "bq27541",
+               .addr           = 0x55,
+               .flags                  = 0,
+               .platform_data  = &bq27541_info,
+       },
+#endif
 };
 #endif
 
@@ -893,7 +1287,7 @@ static struct i2c_board_info __initdata board_i2c3_devices[] = {
  * camera  devices
  * author: ddl@rock-chips.com
  *****************************************************************************************/
-#ifdef CONFIG_VIDEO_RK29 
+#ifdef CONFIG_VIDEO_RK29
 #define CONFIG_SENSOR_POWER_IOCTL_USR      0
 #define CONFIG_SENSOR_RESET_IOCTL_USR      0
 #define CONFIG_SENSOR_POWERDOWN_IOCTL_USR      0
@@ -952,7 +1346,6 @@ static struct rk29camera_platform_ioctl_cb  sensor_ioctl_cb = {
     .sensor_flash_cb = NULL,
     #endif
 };
-
 #include "../../../drivers/media/video/rk29_camera.c"
 #endif
 /*****************************************************************************************
@@ -1010,6 +1403,7 @@ static int rk29_backlight_io_deinit(void)
     gpio_free(BL_EN_PIN);
     #endif
     rk29_mux_api_set(PWM_MUX_NAME, PWM_MUX_MODE_GPIO);
+    
     return ret;
 }
 
@@ -1411,156 +1805,87 @@ static struct platform_device rk29_device_gpu = {
 };
 #endif
 
-#if defined(CONFIG_RK_IRDA) || defined(CONFIG_BU92747GUW_CIR)
-#define BU92747GUW_RESET_PIN            RK29_PIN3_PD4// INVALID_GPIO //
-#define BU92747GUW_RESET_MUX_NAME       GPIO3D4_HOSTWRN_NAME//NULL //
-#define BU92747GUW_RESET_MUX_MODE       GPIO3H_GPIO3D4//NULL //
-
-#define BU92747GUW_PWDN_PIN             RK29_PIN3_PD3//RK29_PIN5_PA7 //
-#define BU92747GUW_PWDN_MUX_NAME        GPIO3D3_HOSTRDN_NAME//GPIO5A7_HSADCDATA2_NAME //
-#define BU92747GUW_PWDN_MUX_MODE        GPIO3H_GPIO3D3//GPIO5L_GPIO5A7  //
-
-static int bu92747guw_io_init(void)
-{
-       int ret;
-       
-       //reset pin
-       if(BU92747GUW_RESET_MUX_NAME != NULL)
-       {
-               rk29_mux_api_set(BU92747GUW_RESET_MUX_NAME, BU92747GUW_RESET_MUX_MODE);
-       }
-       ret = gpio_request(BU92747GUW_RESET_PIN, NULL);
-       if(ret != 0)
-       {
-               gpio_free(BU92747GUW_RESET_PIN);
-               printk(">>>>>> BU92747GUW_RESET_PIN gpio_request err \n ");
-       }
-       gpio_direction_output(BU92747GUW_RESET_PIN, GPIO_HIGH);
-
-       //power down pin
-       if(BU92747GUW_PWDN_MUX_NAME != NULL)
-       {
-               rk29_mux_api_set(BU92747GUW_PWDN_MUX_NAME, BU92747GUW_PWDN_MUX_MODE);
-       }
-       ret = gpio_request(BU92747GUW_PWDN_PIN, NULL);
-       if(ret != 0)
-       {
-               gpio_free(BU92747GUW_PWDN_PIN);
-               printk(">>>>>> BU92747GUW_PWDN_PIN gpio_request err \n ");
-       }
-
-       //power down as default
-       gpio_direction_output(BU92747GUW_PWDN_PIN, GPIO_LOW);
-       
-       return 0;
-}
-
-
-static int bu92747guw_io_deinit(void)
-{
-       gpio_free(BU92747GUW_PWDN_PIN);
-       gpio_free(BU92747GUW_RESET_PIN);
-       return 0;
-}
-
-//power ctl func is share with irda and remote
-static int nPowerOnCount = 0;
-static DEFINE_MUTEX(bu92747_power_mutex);
-
-//1---power on;  0---power off
-static int bu92747guw_power_ctl(int enable)
-{
-       printk("%s \n",__FUNCTION__);
-
-       mutex_lock(&bu92747_power_mutex);
-       if (enable) {
-               nPowerOnCount++;
-               if (nPowerOnCount == 1) {//power on first       
-                       //smc0_init(NULL);
-                       gpio_set_value(BU92747GUW_PWDN_PIN, GPIO_HIGH);
-                       gpio_set_value(BU92747GUW_RESET_PIN, GPIO_LOW);
-                       mdelay(5);
-                       gpio_set_value(BU92747GUW_RESET_PIN, GPIO_HIGH);
-                       mdelay(5);
-               }
-       }
-       else {
-               nPowerOnCount--;
-               if (nPowerOnCount <= 0) {//power down final
-                       nPowerOnCount = 0;
-                       //smc0_exit();
-                       gpio_set_value(BU92747GUW_PWDN_PIN, GPIO_LOW);
-               }
-       }
-       mutex_unlock(&bu92747_power_mutex);
-       return 0;
-}
+#ifdef CONFIG_KEYS_RK29
+extern struct rk29_keys_platform_data rk29_keys_pdata;
+static struct platform_device rk29_device_keys = {
+       .name           = "rk29-keypad",
+       .id             = -1,
+       .dev            = {
+               .platform_data  = &rk29_keys_pdata,
+       },
+};
 #endif
 
-#ifdef CONFIG_RK_IRDA
-#define IRDA_IRQ_PIN              RK29_PIN5_PB2
-#define IRDA_IRQ_MUX_NAME         GPIO5B2_HSADCDATA5_NAME
-#define IRDA_IRQ_MUX_MODE         GPIO5L_GPIO5B2
-
-int irda_iomux_init(void)
-{
-       int ret = 0;
-
-       //irda irq pin
-       if(IRDA_IRQ_MUX_NAME != NULL)
-       {
-               rk29_mux_api_set(IRDA_IRQ_MUX_NAME, IRDA_IRQ_MUX_MODE);
-       }
-       ret = gpio_request(IRDA_IRQ_PIN, NULL);
-       if(ret != 0)
-       {
-               gpio_free(IRDA_IRQ_PIN);
-               printk(">>>>>> IRDA_IRQ_PIN gpio_request err \n ");
-       }
-       gpio_pull_updown(IRDA_IRQ_PIN, GPIO_HIGH);
-       gpio_direction_input(IRDA_IRQ_PIN);
-
-       return 0;
-}
-
-int irda_iomux_deinit(void)
-{
-       gpio_free(IRDA_IRQ_PIN);
-       return 0;
-}
+#ifdef CONFIG_LEDS_GPIO_PLATFORM
+struct gpio_led rk29_leds[] = {
+               {
+                       .name = "rk29_red_led",
+                       .gpio = RK29_PIN4_PB2,
+                       .default_trigger = "timer",
+                       .active_low = 0,
+                       .retain_state_suspended = 1,
+                       .default_state = LEDS_GPIO_DEFSTATE_OFF,
+               },
+               {
+                       .name = "rk29_green_led",
+                       .gpio = RK29_PIN4_PB1,
+                       .default_trigger = "timer",
+                       .active_low = 0,
+                       .retain_state_suspended = 1,
+                       .default_state = LEDS_GPIO_DEFSTATE_OFF,
+               },
+               {
+                       .name = "rk29_blue_led",
+                       .gpio = RK29_PIN4_PB0,
+                       .default_trigger = "timer",
+                       .active_low = 0,
+                       .retain_state_suspended = 1,
+                       .default_state = LEDS_GPIO_DEFSTATE_OFF,
+               },
+};
 
-static struct irda_info rk29_irda_info = {
-       .intr_pin = IRDA_IRQ_PIN,
-       .iomux_init = irda_iomux_init,
-       .iomux_deinit = irda_iomux_deinit,
-       .irda_pwr_ctl = bu92747guw_power_ctl,
+struct gpio_led_platform_data rk29_leds_pdata = {
+       .leds = &rk29_leds,
+       .num_leds       = ARRAY_SIZE(rk29_leds),
 };
 
-static struct platform_device irda_device = {
-#ifdef CONFIG_RK_IRDA_NET
-                       .name   = "rk_irda",
-#else
-                       .name = "bu92747_irda",
-#endif
-       .id       = -1,
-       .dev                    = {
-               .platform_data  = &rk29_irda_info,
-       }
+struct platform_device rk29_device_gpio_leds = {
+       .name   = "leds-gpio",
+       .id     = -1,
+       .dev    = {
+          .platform_data  = &rk29_leds_pdata,
+       },
 };
 #endif
 
+#ifdef CONFIG_LEDS_NEWTON_PWM
+static struct led_newton_pwm rk29_pwm_leds[] = {
+               {
+                       .name = "power_led",
+                       .pwm_id = 1,
+                       .pwm_gpio = RK29_PIN5_PD2,
+                       .pwm_iomux_name = GPIO5D2_PWM1_UART1SIRIN_NAME,
+                       .pwm_iomux_pwm = GPIO5H_PWM1,
+                       .pwm_iomux_gpio = GPIO5H_GPIO5D2,
+                       .freq = 1000,
+                       .period = 255,
+               },
+};
 
-#ifdef CONFIG_KEYS_RK29
-extern struct rk29_keys_platform_data rk29_keys_pdata;
-static struct platform_device rk29_device_keys = {
-       .name           = "rk29-keypad",
-       .id             = -1,
-       .dev            = {
-               .platform_data  = &rk29_keys_pdata,
+static struct led_newton_pwm_platform_data rk29_pwm_leds_pdata = {
+       .leds = &rk29_pwm_leds,
+       .num_leds       = ARRAY_SIZE(rk29_pwm_leds),
+};
+
+static struct platform_device rk29_device_pwm_leds = {
+       .name   = "leds_newton_pwm",
+       .id     = -1,
+       .dev    = {
+          .platform_data  = &rk29_pwm_leds_pdata,
        },
 };
-#endif
 
+#endif
 static void __init rk29_board_iomux_init(void)
 {
        #ifdef CONFIG_RK29_PWM_REGULATOR
@@ -1622,6 +1947,9 @@ static struct platform_device *devices[] __initdata = {
 #ifdef CONFIG_KEYS_RK29
        &rk29_device_keys,
 #endif
+#ifdef CONFIG_KEYS_RK29_NEWTON
+       &rk29_device_keys,
+#endif
 #ifdef CONFIG_SDMMC0_RK29
        &rk29_device_sdmmc0,
 #endif
@@ -1652,6 +1980,9 @@ static struct platform_device *devices[] __initdata = {
 #ifdef CONFIG_BACKLIGHT_RK29_BL
        &rk29_device_backlight,
 #endif
+#ifdef CONFIG_BACKLIGHT_RK29_NEWTON_BL
+       &rk29_device_backlight,
+#endif
 #ifdef CONFIG_RK29_VMAC
        &rk29_device_vmac,
 #endif
@@ -1682,14 +2013,29 @@ static struct platform_device *devices[] __initdata = {
        &android_usb_device,
        &usb_mass_storage_device,
 #endif
+#ifdef CONFIG_USB_ANDROID_RNDIS
+    &rk29_device_rndis,
+#endif
 #ifdef CONFIG_RK29_IPP
        &rk29_device_ipp,
 #endif
 #ifdef CONFIG_VIDEO_RK29XX_VOUT
        &rk29_v4l2_output_devce,
 #endif
+#ifdef CONFIG_RK29_NEWTON
+       &rk29_device_newton,
+#endif
 #ifdef CONFIG_RK_IRDA
-       &irda_device,
+    &irda_device,
+#endif
+#ifdef CONFIG_LEDS_GPIO_PLATFORM
+       &rk29_device_gpio_leds,
+#endif
+#ifdef CONFIG_LEDS_NEWTON_PWM
+       &rk29_device_pwm_leds,
+#endif
+#ifdef CONFIG_SND_RK29_SOC_CS42L52
+       &rk29_cs42l52_device,
 #endif
 };