<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jun 12, 2014 at 8:13 PM, amit mehta <span dir="ltr">&lt;<a href="mailto:gmate.amit@gmail.com" target="_blank">gmate.amit@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Thu, Jun 12, 2014 at 4:52 PM, priyaranjan &lt;<a href="mailto:priyaranjan45678@gmail.com">priyaranjan45678@gmail.com</a>&gt; wrote:<br>

&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Thu, Jun 12, 2014 at 7:09 PM, amit mehta &lt;<a href="mailto:gmate.amit@gmail.com">gmate.amit@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; We are working on a school project in which we are trying to develop a<br>
&gt;&gt; audio mixer<br>
&gt;&gt; on Zedboard (Development board from Digilent). We have developed the IP<br>
&gt;&gt; and have<br>
&gt;&gt; integrated it with the overall hardware using Programmable logic. This<br>
&gt;&gt; board has ARM<br>
&gt;&gt; core. We have a Digilent pre-configured Linux source which we<br>
&gt;&gt; cross-compiled<br>
&gt;&gt; for ARM board, device tree blob and bootloader for Zync(BOOT.BIN). The<br>
&gt;&gt; system<br>
&gt;&gt; boots fine with Linux, but now to expose the recently added hardware<br>
&gt;&gt; implementation<br>
&gt;&gt; of audio mixer, we are trying to develop the driver using the platform<br>
&gt;&gt; driver API.<br>
&gt;&gt; Currently, In our reconfigurable hardware, we have 2 channels and a mixer<br>
&gt;&gt; and we<br>
&gt;&gt; want to access those individually as some file nodes under /proc FS. The<br>
&gt;&gt; sample<br>
&gt;&gt; code is shown below:<br>
&gt;&gt;<br>
&gt;&gt; &lt;snip from myiir.c&gt;<br>
&gt;&gt; /* device match table to match with device node in device tree<br>
&gt;&gt;  * These are the list of devices that we want to expose as platform device<br>
&gt;&gt;  */<br>
&gt;&gt; static const struct of_device_id myiir_of_match[] __devinitconst = {<br>
&gt;&gt;         {.compatible = &quot;dglnt,myiir-audio-ch0&quot;},<br>
&gt;&gt;         {.compatible = &quot;dglnt,myiir-audio-ch1&quot;},<br>
&gt;&gt;         {.compatible = &quot;dglnt,myiir-audio-mix0&quot;},<br>
&gt;&gt;         {},<br>
&gt;&gt; };<br>
&gt;&gt;<br>
&gt;&gt; MODULE_DEVICE_TABLE(of, myiir_of_match);<br>
&gt;&gt;<br>
&gt;&gt; /* platform driver structure for myiir driver */<br>
&gt;&gt; static struct platform_driver myiir_driver = {<br>
&gt;&gt;         .driver = {<br>
&gt;&gt;                 .name = DRIVER_NAME,<br>
&gt;&gt;                 .owner = THIS_MODULE,<br>
&gt;&gt;                 .of_match_table = myiir_of_match},<br>
&gt;&gt;         .probe = myiir_probe,<br>
&gt;&gt;         .remove = __devexit_p(myiir_remove),<br>
&gt;&gt;         .shutdown = __devexit_p(myiir_shutdown)<br>
&gt;&gt; };<br>
&gt;&gt;<br>
&gt;&gt; /* Register myiir platform driver */<br>
&gt;&gt; module_platform_driver(myiir_driver);<br>
&gt;&gt; &lt;myiir.c&gt;<br>
&gt;&gt;<br>
&gt;&gt; Now, inside the probe routine (myiir_probe), can we create proc<br>
&gt;&gt; entries by calling<br>
&gt;&gt; create_proc for each of these nodes and setting the appropriate read and<br>
&gt;&gt; write<br>
&gt;&gt; methods(file_operations) ?<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; Yes, I feel this is fine, the proc entries to be created in probe,<br>
&gt; Initialize all data structures as required in probe.<br>
&gt;<br>
</div></div>Thank you for this confirmation. I&#39;ve one more query regarding the<br>
IO addresses. The CAD tool from Xilinx shows the base addresses<br>
of our custom IP, which we have put into the device tree blob(also<br>
shown in the attached screeshot) and in our driver, we are requesting<br>
the memory region and after calling the ioremap, we access those<br>
IO addresses, but is there are need to write the register addresses<br>
in the device tree file in a particular order(asceding/descending) ?<br></blockquote><div><br></div><div style>I am not sure about ascending or descending order but yes, the register addresses should be in the device tree. You can check more examples on the same and follow.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="">&lt;snip from device tree file&gt;<br>
                myiir-aud-ch0 {<br>
                        compatible = &quot;dglnt,myiir-audio-ch0&quot;;<br>
                        reg = &lt;0x74200000 0x10000&gt;;<br>
                };<br>
                myiir-aud-ch1 {<br>
                        compatible = &quot;dglnt,myiir-audio-ch1&quot;;<br>
                        reg = &lt;0x74220000 0x10000&gt;;<br>
                };<br>
                myiir-aud-mix0 {<br>
                        compatible = &quot;dglnt,myiir-audio-mix0&quot;;<br>
                        reg = &lt;0x68600000 0x10000&gt;;<br>
                };<br>
&lt;snip from device tree file&gt;<br>
</div>The sequence of operation in probe routine is:<br>
<br>
platform_get_resource(pdev, IORESOURCE_MEM, 0);<br>
remap_size = res-&gt;end - res-&gt;start + 1;<br>
request_mem_region(res-&gt;start, remap_size, pdev-&gt;name);<br>
base_addr = ioremap(res-&gt;start, remap_size);<br>
<br>
Thanks,<br>
Kumar<br>
</blockquote></div><br></div></div>