From: eddie <cf@rock-chips.com>
Date: Thu, 1 Sep 2011 03:55:40 +0000 (+0800)
Subject: rk29 ddr3sdk update board file
X-Git-Tag: firefly_0821_release~9767^2~54
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=92d85473568ec3d1661a6bae63e005e73b77f1af;p=firefly-linux-kernel-4.4.55.git

rk29 ddr3sdk update board file
---

diff --git a/arch/arm/mach-rk29/board-rk29-ddr3sdk.c b/arch/arm/mach-rk29/board-rk29-ddr3sdk.c
old mode 100755
new mode 100644
index e0bed71904e0..de48ad040ab4
--- a/arch/arm/mach-rk29/board-rk29-ddr3sdk.c
+++ b/arch/arm/mach-rk29/board-rk29-ddr3sdk.c
@@ -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
 };