Hi Grant,<br>I am trying to convert i2c-omap driver to use device tree. Since omap i2c driver uses it's own mechanism to register as platform device, I have commented out i2c device registration part from board file and trying to use DT data in probe function of i2c driver.<br>
<br>I have i2c node declared under omap4-panda.dts as:<br><br>+       i2c@48072000 {<br>+               compatible = "ti,omap_i2c";<br>+               reg = <0x48072000 0x80>;<br>+               #address-cells = <1>;<br>
+               #size-cells = <0>;<br>+<br>+               twl@48 {<br>+                       compatible = "twl6030,4030-6030";<br>+                       reg = < 0x48 >;<br>+               };<br>+       };<br>
<br>and board file is changed as:<br><br>@@ -685,6 +686,10 @@ static void __init omap4_panda_init(void)<br> {<br>        int package = OMAP_PACKAGE_CBS;<br> <br>+#ifdef CONFIG_OF<br>+       of_platform_prepare(NULL, NULL);<br>
+#endif /* CONFIG_OF */<br>+<br>        if (omap_rev() == OMAP4430_REV_ES1_0)<br>                package = OMAP_PACKAGE_CBL;<br>        omap4_mux_init(board_mux, NULL, package);<br>@@ -700,6 +705,7 @@ static void __init omap4_panda_init(void)<br>
        omap4_ehci_init();<br>        usb_musb_init(&musb_board_data);<br>        omap4_panda_display_init();<br>+       of_platform_populate(NULL, NULL, NULL, NULL);<br> }<br><br>I have commented out device registration for I2C1 in board file:<br>
<br>diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c<br>index c9d1e13..0c31f35 100644<br>--- a/arch/arm/mach-omap2/board-omap4panda.c<br>+++ b/arch/arm/mach-omap2/board-omap4panda.c<br>
@@ -409,7 +410,7 @@ static struct i2c_board_info __initdata panda_i2c_eeprom[] = {<br> <br> static int __init omap4_panda_i2c_init(void)<br> {<br>-       omap4_pmic_init("twl6030", &omap4_panda_twldata);<br>
+       //omap4_pmic_init("twl6030", &omap4_panda_twldata);<br>@@ -685,6 +686,10 @@ static void __init omap4_panda_init(void)<br> {<br>        int package = OMAP_PACKAGE_CBS;<br> <br>+#ifdef CONFIG_OF<br>+       of_platform_prepare(NULL, NULL);<br>
+#endif /* CONFIG_OF */<br>+<br>        if (omap_rev() == OMAP4430_REV_ES1_0)<br>                package = OMAP_PACKAGE_CBL;<br>        omap4_mux_init(board_mux, NULL, package);<br>@@ -700,6 +705,7 @@ static void __init omap4_panda_init(void)<br>
        omap4_ehci_init();<br>        usb_musb_init(&musb_board_data);<br>        omap4_panda_display_init();<br>+       of_platform_populate(NULL, NULL, NULL, NULL);<br> }<br><br>and i2c-omap is modified as:<br><br>+static const struct of_device_id omap_i2c_of_match[];<br>
 static int __devinit<br> omap_i2c_probe(struct platform_device *pdev)<br> {<br>@@ -1162,6 +1169,12 @@ static int omap_i2c_resume(struct device *dev)<br>        return 0;<br> }<br> <br>+static const struct of_device_id omap_i2c_of_match[] = {<br>
+       {.compatible = "omap_i2c", },<br>+       {},<br>+}<br>+MODULE_DEVICE_TABLE(of, omap_i2c_of_match);<br><br>With the above changes, i was expecting probe function to be called since device gets binded to driver. But probe will never get called.<br>
<br>Did I miss anything with above procedure?<br>