#include <asm/arch/keypad.h>
 #include <asm/arch/dma.h>
 #include <asm/arch/gpmc.h>
+#include <linux/i2c/twl4030-rtc.h>
 
 #include <asm/io.h>
 #include <asm/delay.h>
+#include <asm/arch/control.h>
 
 #include "sdram-qimonda-hyb18m512160af-6.h"
 
 #define ENABLE_VAUX3_DEV_GRP   0x20
 
 
+#define TWL4030_MSECURE_GPIO 22
+
 static struct resource sdp3430_smc91x_resources[] = {
        [0] = {
                .start  = OMAP34XX_ETHR_START,
 
 static int ts_gpio;
 
+#ifdef CONFIG_RTC_DRV_TWL4030
+static int twl4030_rtc_init(void)
+{
+       int ret = 0;
+
+       /* 3430ES2.0 doesn't have msecure/gpio-22 line connected to T2 */
+       if (is_device_type_gp() && is_sil_rev_less_than(OMAP3430_REV_ES2_0)) {
+               u32 msecure_pad_config_reg = omap_ctrl_base_get() + 0xA3C;
+               int mux_mask = 0x04;
+               u16 tmp;
+
+               ret = omap_request_gpio(TWL4030_MSECURE_GPIO);
+               if (ret < 0) {
+                       printk(KERN_ERR "twl4030_rtc_init: can't"
+                               "reserve GPIO:%d !\n", TWL4030_MSECURE_GPIO);
+                       goto out;
+               }
+               /*
+                * TWL4030 will be in secure mode if msecure line from OMAP
+                * is low. Make msecure line high in order to change the
+                * TWL4030 RTC time and calender registers.
+                */
+               omap_set_gpio_direction(TWL4030_MSECURE_GPIO, 0);
+
+               tmp = omap_readw(msecure_pad_config_reg);
+               tmp &= 0xF8; /* To enable mux mode 03/04 = GPIO_RTC */
+               tmp |= mux_mask;/* To enable mux mode 03/04 = GPIO_RTC */
+               omap_writew(tmp, msecure_pad_config_reg);
+
+               omap_set_gpio_dataout(TWL4030_MSECURE_GPIO, 1);
+       }
+out:
+       return ret;
+}
+
+static void twl4030_rtc_exit(void)
+{
+       if (is_device_type_gp() &&
+                       is_sil_rev_less_than(OMAP3430_REV_ES2_0)) {
+               omap_free_gpio(TWL4030_MSECURE_GPIO);
+       }
+}
+
+static struct twl4030rtc_platform_data sdp3430_twl4030rtc_data = {
+       .init = &twl4030_rtc_init,
+       .exit = &twl4030_rtc_exit,
+};
+
+static struct platform_device sdp3430_twl4030rtc_device = {
+       .name = "twl4030_rtc",
+       .id = -1,
+       .dev = {
+       .platform_data = &sdp3430_twl4030rtc_data,
+       },
+};
+#endif
+
 /**
  * @brief ads7846_dev_init : Requests & sets GPIO line for pen-irq
  *
        &sdp3430_smc91x_device,
        &sdp3430_kp_device,
        &sdp3430_lcd_device,
+#ifdef CONFIG_RTC_DRV_TWL4030
+       &sdp3430_twl4030rtc_device,
+#endif
 };
 
 static inline void __init sdp3430_init_smc91x(void)