struct platform_device realview_i2c_device = {
        .name           = "versatile-i2c",
-       .id             = -1,
+       .id             = 0,
        .num_resources  = 1,
        .resource       = &realview_i2c_resource,
 };
 
+static struct i2c_board_info realview_i2c_board_info[] = {
+       {
+               I2C_BOARD_INFO("rtc-ds1307", 0xd0 >> 1),
+               .type = "ds1338",
+       },
+};
+
+static int __init realview_i2c_init(void)
+{
+       return i2c_register_board_info(0, realview_i2c_board_info,
+                                      ARRAY_SIZE(realview_i2c_board_info));
+}
+arch_initcall(realview_i2c_init);
+
 #define REALVIEW_SYSMCI        (__io_address(REALVIEW_SYS_BASE) + REALVIEW_SYS_MCI_OFFSET)
 
 static unsigned int realview_mmc_status(struct device *dev)
 
 
        realview_flash_register(&realview_pb1176_flash_resource, 1);
        realview_eth_register(NULL, realview_pb1176_smsc911x_resources);
+       platform_device_register(&realview_i2c_device);
 
        for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
                struct amba_device *d = amba_devs[i];
 
 
 static struct platform_device versatile_i2c_device = {
        .name                   = "versatile-i2c",
-       .id                     = -1,
+       .id                     = 0,
        .num_resources          = 1,
        .resource               = &versatile_i2c_resource,
 };
 
+static struct i2c_board_info versatile_i2c_board_info[] = {
+       {
+               I2C_BOARD_INFO("rtc-ds1307", 0xd0 >> 1),
+               .type = "ds1338",
+       },
+};
+
+static int __init versatile_i2c_init(void)
+{
+       return i2c_register_board_info(0, versatile_i2c_board_info,
+                                      ARRAY_SIZE(versatile_i2c_board_info));
+}
+arch_initcall(versatile_i2c_init);
+
 #define VERSATILE_SYSMCI       (__io_address(VERSATILE_SYS_BASE) + VERSATILE_SYS_MCI_OFFSET)
 
 unsigned int mmc_status(struct device *dev)