Hi Thomas,<br><br><div class="gmail_quote">On 24 June 2011 18:13, Thomas Abraham <span dir="ltr"><<a href="mailto:thomas.abraham@linaro.org">thomas.abraham@linaro.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi Manjunath,<br>
<br>
I will try to give some comments based on whatever little I know about<br>
DT. My comments maybe wrong too, I am still learning DT.<br>
<div class="im"><br>
On 23 June 2011 19:45, Manjunatha GK <<a href="mailto:manjugk@linaro.org">manjugk@linaro.org</a>> wrote:<br>
</div><div class="im">> Hi Grant,<br>
> I am trying to convert i2c-omap driver to use device tree. Since omap i2c<br>
> driver uses it's own mechanism to register as platform device, I have<br>
> commented out i2c device registration part from board file and trying to use<br>
> 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>
</div>Shouldn't size-cells = 1 ?<br>
<div class="im"><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>
</div>Is of_platform_prepare still required?<br></blockquote><div> </div><div>not required. removed now. <br><br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<div class="im"><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>
</div>Is it not required to provide the second parameter (matches) atleast?<br>
It depends on your dts file I guess. Maybe a proper matching is not<br>
happening.<br></blockquote><div>yes. updated with second parameter as per entry in dts file. <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<div><div></div><div class="h5"><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<br>
> 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<br>
> 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<br>
> device gets binded to driver. But probe will never get called.<br>
><br>
> Did I miss anything with above procedure?<br>
<br>
</div></div>What about platform_driver->driver.of_match_table? Is it populated<br>
(set to omap_i2c_of_match)?<br></blockquote><div> </div><div>Yes. This entry was missing with my changes. With of_match_table, probe is getting called.<br>Thanks for the pointer. <br>
</div></div><br>-Manjunath<br>