omap_board_config = ams_delta_config;
        omap_board_config_size = ARRAY_SIZE(ams_delta_config);
        omap_serial_init();
+       omap_register_i2c_bus(1, 100, NULL, 0);
 
        /* Clear latch2 (NAND, LCD, modem enable) */
        ams_delta_latch2_write(~0, 0);
 
        omap_board_config = fsample_config;
        omap_board_config_size = ARRAY_SIZE(fsample_config);
        omap_serial_init();
+       omap_register_i2c_bus(1, 100, NULL, 0);
 }
 
 static void __init fsample_init_smc91x(void)
 
        omap_board_config = generic_config;
        omap_board_config_size = ARRAY_SIZE(generic_config);
        omap_serial_init();
+       omap_register_i2c_bus(1, 100, NULL, 0);
 }
 
 static void __init omap_generic_map_io(void)
 
        omap_board_config = h2_config;
        omap_board_config_size = ARRAY_SIZE(h2_config);
        omap_serial_init();
+       omap_register_i2c_bus(1, 100, NULL, 0);
 }
 
 static void __init h2_map_io(void)
 
        omap_board_config = h3_config;
        omap_board_config_size = ARRAY_SIZE(h3_config);
        omap_serial_init();
+       omap_register_i2c_bus(1, 100, NULL, 0);
 }
 
 static void __init h3_init_smc91x(void)
 
        omap_board_config = innovator_config;
        omap_board_config_size = ARRAY_SIZE(innovator_config);
        omap_serial_init();
+       omap_register_i2c_bus(1, 100, NULL, 0);
 }
 
 static void __init innovator_map_io(void)
 
        omap_board_config_size = ARRAY_SIZE(nokia770_config);
        omap_gpio_init();
        omap_serial_init();
+       omap_register_i2c_bus(1, 100, NULL, 0);
        omap_dsp_init();
        hwa742_dev_init();
        ads7846_dev_init();
 
        if (gpio_request(OMAP_MPUIO(1), "tps65010") == 0)
                gpio_direction_input(OMAP_MPUIO(1));
 
-       i2c_register_board_info(1, osk_i2c_board_info,
-                       ARRAY_SIZE(osk_i2c_board_info));
-
        omap_serial_init();
+       omap_register_i2c_bus(1, 400, osk_i2c_board_info,
+                             ARRAY_SIZE(osk_i2c_board_info));
        osk_mistral_init();
 }
 
 
 
        palmte_misc_gpio_setup();
        omap_serial_init();
+       omap_register_i2c_bus(1, 100, NULL, 0);
 }
 
 static void __init omap_palmte_map_io(void)
 
 
        spi_register_board_info(palmtt_boardinfo,ARRAY_SIZE(palmtt_boardinfo));
        omap_serial_init();
+       omap_register_i2c_bus(1, 100, NULL, 0);
 }
 
 static void __init omap_palmtt_map_io(void)
 
        spi_register_board_info(palmz71_boardinfo,
                                ARRAY_SIZE(palmz71_boardinfo));
        omap_serial_init();
+       omap_register_i2c_bus(1, 100, NULL, 0);
        palmz71_gpio_setup(0);
 }
 
 
        omap_board_config = perseus2_config;
        omap_board_config_size = ARRAY_SIZE(perseus2_config);
        omap_serial_init();
+       omap_register_i2c_bus(1, 100, NULL, 0);
 }
 
 static void __init perseus2_init_smc91x(void)
 
        omap_board_config = sx1_config;
        omap_board_config_size = ARRAY_SIZE(sx1_config);
        omap_serial_init();
+       omap_register_i2c_bus(1, 100, NULL, 0);
 
        /* turn on USB power */
        /* sx1_setusbpower(1); cant do it here because i2c is not ready */
 
        omap_board_config = voiceblue_config;
        omap_board_config_size = ARRAY_SIZE(voiceblue_config);
        omap_serial_init();
+       omap_register_i2c_bus(1, 100, NULL, 0);
 
        /* There is a good chance board is going up, so enable power LED
         * (it is connected through invertor) */
 
        {OMAP_TAG_SERIAL_CONSOLE, &sdp2430_serial_console_config},
 };
 
-#if    defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE)
-
-#define OMAP2_I2C_BASE1                0x48070000
-#define OMAP2_I2C_BASE2                0x48072000
-#define OMAP2_I2C_INT1         56
-#define OMAP2_I2C_INT2         57
-
-static u32 omap2_i2c1_clkrate  = 400;
-static u32 omap2_i2c2_clkrate  = 2600;
-
-static struct resource i2c_resources1[] = {
-       {
-               .start  = OMAP2_I2C_BASE1,
-               .end    = OMAP2_I2C_BASE1 + 0x3f,
-               .flags  = IORESOURCE_MEM,
-       },
-       {
-               .start  = OMAP2_I2C_INT1,
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct resource i2c_resources2[] = {
-       {
-               .start  = OMAP2_I2C_BASE2,
-               .end    = OMAP2_I2C_BASE2 + 0x3f,
-               .flags  = IORESOURCE_MEM,
-       },
-       {
-               .start  = OMAP2_I2C_INT2,
-               .flags  = IORESOURCE_IRQ,
-       },
-};
-
-static struct platform_device omap_i2c_device1 = {
-       .name           = "i2c_omap",
-       .id             = 1,
-       .num_resources  = ARRAY_SIZE(i2c_resources1),
-       .resource       = i2c_resources1,
-       .dev            = {
-               .platform_data  = &omap2_i2c1_clkrate,
-       },
-};
-
-static struct platform_device omap_i2c_device2 = {
-       .name           = "i2c_omap",
-       .id             = 2,
-       .num_resources  = ARRAY_SIZE(i2c_resources2),
-       .resource       = i2c_resources2,
-       .dev            = {
-               .platform_data  = &omap2_i2c2_clkrate,
-       },
-};
-
-static void omap_init_i2c(void)
-{
-       (void) platform_device_register(&omap_i2c_device2);
-       (void) platform_device_register(&omap_i2c_device1);
-}
-
-#else
-
-static void omap_init_i2c(void) {}
-
-#endif
-
 static int __init omap2430_i2c_init(void)
 {
-       omap_init_i2c();
+       omap_register_i2c_bus(1, 400, NULL, 0);
+       omap_register_i2c_bus(2, 2600, NULL, 0);
        return 0;
 }
 
 
        omap_board_config = apollon_config;
        omap_board_config_size = ARRAY_SIZE(apollon_config);
        omap_serial_init();
+       omap_register_i2c_bus(1, 100, NULL, 0);
+       omap_register_i2c_bus(2, 100, NULL, 0);
 
        spi_register_board_info(apollon_spi_board_info,
                                ARRAY_SIZE(apollon_spi_board_info));
 
        omap_board_config = generic_config;
        omap_board_config_size = ARRAY_SIZE(generic_config);
        omap_serial_init();
+       omap_register_i2c_bus(1, 100, NULL, 0);
+       omap_register_i2c_bus(2, 100, NULL, 0);
 }
 
 static void __init omap_generic_map_io(void)
 
        /* Menelaus interrupt */
        omap_cfg_reg(W19_24XX_SYS_NIRQ);
 
-       i2c_register_board_info(1, h4_i2c_board_info,
-                       ARRAY_SIZE(h4_i2c_board_info));
-
        platform_add_devices(h4_devices, ARRAY_SIZE(h4_devices));
        omap_board_config = h4_config;
        omap_board_config_size = ARRAY_SIZE(h4_config);
        omap_serial_init();
+       omap_register_i2c_bus(1, 100, h4_i2c_board_info,
+                             ARRAY_SIZE(h4_i2c_board_info));
 
        /* smc91x, debug leds, ps/2, extra uarts */
        h4_init_debug();
 
 }
 #endif
 
-#if    !defined(CONFIG_ARCH_OMAP243X)
-#if    defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE)
-
-#define OMAP2_I2C_BASE2                0x48072000
-#define OMAP2_I2C_INT2         57
-
-static u32 omap2_i2c2_clkrate  = 100;
-static struct resource i2c_resources2[] = {
-       {
-               .start          = OMAP2_I2C_BASE2,
-               .end            = OMAP2_I2C_BASE2 + 0x3f,
-               .flags          = IORESOURCE_MEM,
-       },
-       {
-               .start          = OMAP2_I2C_INT2,
-               .flags          = IORESOURCE_IRQ,
-       },
-};
-
-static struct platform_device omap_i2c_device2 = {
-       .name           = "i2c_omap",
-       .id             = 2,
-       .num_resources  = ARRAY_SIZE(i2c_resources2),
-       .resource       = i2c_resources2,
-       .dev            = {
-               .platform_data  = &omap2_i2c2_clkrate,
-       },
-};
-
-/* See also arch/arm/plat-omap/devices.c for first I2C on 24xx */
-static void omap_init_i2c(void)
-{
-       /* REVISIT: Second I2C not in use on H4? */
-       if (machine_is_omap_h4())
-               return;
-
-       omap_cfg_reg(J15_24XX_I2C2_SCL);
-       omap_cfg_reg(H19_24XX_I2C2_SDA);
-
-       (void) platform_device_register(&omap_i2c_device2);
-}
-
-#else
-
-static void omap_init_i2c(void) {}
-
-#endif
-#endif
-
 #if defined(CONFIG_OMAP_DSP) || defined(CONFIG_OMAP_DSP_MODULE)
 #define OMAP2_MBOX_BASE                IO_ADDRESS(OMAP24XX_MAILBOX_BASE)
 
         * in alphabetical order so they're easier to sort through.
         */
        omap_init_camera();
-       if (!cpu_is_omap2430()) {
-               omap_init_i2c();
-       }
        omap_init_mbox();
        omap_init_mcspi();
        omap_init_sti();
 
 static inline void omap_init_dsp(void) { }
 #endif /* CONFIG_OMAP_DSP */
 
-/*-------------------------------------------------------------------------*/
-#if    !defined(CONFIG_ARCH_OMAP243X)
-#if    defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE)
-
-#define        OMAP1_I2C_BASE          0xfffb3800
-#define OMAP2_I2C_BASE1                0x48070000
-#define OMAP_I2C_SIZE          0x3f
-#define OMAP1_I2C_INT          INT_I2C
-#define OMAP2_I2C_INT1         56
-
-static u32 omap2_i2c1_clkrate  = 100;
-
-static struct resource i2c_resources1[] = {
-       {
-               .start          = 0,
-               .end            = 0,
-               .flags          = IORESOURCE_MEM,
-       },
-       {
-               .start          = 0,
-               .flags          = IORESOURCE_IRQ,
-       },
-};
-
-/* DMA not used; works around erratum writing to non-empty i2c fifo */
-
-static struct platform_device omap_i2c_device1 = {
-       .name           = "i2c_omap",
-       .id             = 1,
-       .num_resources  = ARRAY_SIZE(i2c_resources1),
-       .resource       = i2c_resources1,
-       .dev            = {
-               .platform_data  = &omap2_i2c1_clkrate,
-       },
-};
-
-/* See also arch/arm/mach-omap2/devices.c for second I2C on 24xx */
-static void omap_init_i2c(void)
-{
-       if (cpu_is_omap242x()) {
-               i2c_resources1[0].start = OMAP2_I2C_BASE1;
-               i2c_resources1[0].end = OMAP2_I2C_BASE1 + OMAP_I2C_SIZE;
-               i2c_resources1[1].start = OMAP2_I2C_INT1;
-       } else {
-               i2c_resources1[0].start = OMAP1_I2C_BASE;
-               i2c_resources1[0].end = OMAP1_I2C_BASE + OMAP_I2C_SIZE;
-               i2c_resources1[1].start = OMAP1_I2C_INT;
-       }
-
-       /* FIXME define and use a boot tag, in case of boards that
-        * either don't wire up I2C, or chips that mux it differently...
-        * it can include clocking and address info, maybe more.
-        */
-       if (cpu_class_is_omap2()) {
-               if (machine_is_omap_h4()) {
-                       omap_cfg_reg(M19_24XX_I2C1_SCL);
-                       omap_cfg_reg(L15_24XX_I2C1_SDA);
-               }
-       } else {
-               omap_cfg_reg(I2C_SCL);
-               omap_cfg_reg(I2C_SDA);
-       }
-
-       (void) platform_device_register(&omap_i2c_device1);
-}
-
-#else
-static inline void omap_init_i2c(void) {}
-#endif
-#endif
 /*-------------------------------------------------------------------------*/
 #if    defined(CONFIG_KEYBOARD_OMAP) || defined(CONFIG_KEYBOARD_OMAP_MODULE)
 
        omap_init_uwire();
        omap_init_wdt();
        omap_init_rng();
-       if (!cpu_is_omap2430() && !cpu_is_omap34xx()) {
-               omap_init_i2c();
-       }
        return 0;
 }
 arch_initcall(omap_init_devices);