I&#39;m busy adding support for slave deviced behind mpc52xx-psc-spi.<br>One complication I have is that my SPI slave device has an interrupt output to the CPU.<br>My idea is to add it as a gpios property in the slave device&#39;s configuration:<br>
<br><div style="margin-left: 40px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spi@2400 {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // PSC3 (SPI IF to the IO-controller )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; device_type = &quot;spi&quot;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #address-cells = &lt;1&gt;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #size-cells = &lt;0&gt;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; compatible = &quot;fsl,mpc5200-psc-spi&quot;,&quot;fsl,mpc5200b-psc-spi&quot;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cell-index = &lt;2&gt;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reg = &lt;0x2400 0x100&gt;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; interrupts = &lt;2 3 0&gt;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; interrupt-parent = &lt;&amp;mpc5200_pic&gt;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gpios = &lt;&amp;gpt4 0 0&gt;;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; io-controller@0 {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; compatible = &quot;microkey,smc4000io&quot;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spi-max-frequency = &lt;1000000&gt;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reg = &lt;0&gt;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // gpios: first is IRQ to cpu<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gpios = &lt;&amp;gpt6 0 0&gt;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br></div><br><br>Are there better/easier ways to do this?<br><br>How should I then register my spi slave driver? My smc4000io_probe function gets called correctly by of_spi support but when I register as follows:<br>
<br><div style="margin-left: 80px;">static struct spi_driver smc4000io_driver = {<br>&nbsp;&nbsp;&nbsp; .driver = {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .name&nbsp;&nbsp;&nbsp; = &quot;smc4000io&quot;,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .bus&nbsp;&nbsp;&nbsp; = &amp;spi_bus_type,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .owner&nbsp;&nbsp;&nbsp; = THIS_MODULE,<br>
&nbsp;&nbsp;&nbsp; },<br>&nbsp;&nbsp;&nbsp; .probe&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; = smc4000io_probe,<br>&nbsp;&nbsp;&nbsp; .remove&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; = __devexit_p(smc4000io_remove),<br>};<br><br>static int __init smc4000io_init(void)<br>{<br>&nbsp;&nbsp;&nbsp; return spi_register_driver(&amp;smc4000io_driver);<br>}<br>
<br>static void __exit smc4000io_exit(void)<br>{<br>&nbsp;&nbsp;&nbsp; spi_unregister_driver(&amp;smc4000io_driver);<br>}<br><br>module_init(smc4000io_init);<br></div><br>But when I do:<br><br><div style="margin-left: 80px;">static struct of_platform_driver smc4000_spi_of_driver = {<br>
&nbsp;&nbsp;&nbsp; .name = &quot;smc4000io&quot;,<br>&nbsp;&nbsp;&nbsp; .match_table = smc4000io_of_match,<br>&nbsp;&nbsp;&nbsp; .probe = smc4000io_of_probe,<br>&nbsp;&nbsp;&nbsp; .remove&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; = __devexit_p(smc4000io_of_remove),<br>};<br><br>static int __init smc4000io_init(void)<br>
{<br>&nbsp;&nbsp;&nbsp; return of_register_platform_driver(&amp;smc4000_spi_of_driver);<br>}<br>module_init(smc4000io_init);<br></div><br>Then my smc4000io_of_probe function never gets called.<br><br>Thanks in advance,<br><br>Henk.<br><br>
<br><br><br><br><br><div class="gmail_quote">On Wed, Oct 29, 2008 at 3:45 PM, Grant Likely <span dir="ltr">&lt;<a href="mailto:grant.likely@secretlab.ca">grant.likely@secretlab.ca</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div></div><div class="Wj3C7c">On Wed, Oct 29, 2008 at 7:43 AM, Henk Stegeman &lt;<a href="mailto:henk.stegeman@gmail.com">henk.stegeman@gmail.com</a>&gt; wrote:<br>
&gt; ..<br>
&gt; ..<br>
&gt; In my dts<br>
&gt;<br>
&gt; I have my chipselect defined as follows:<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; gpt4: timer@640 { &nbsp; &nbsp;// General Purpose Timer GPT4 in GPIO mode for<br>
&gt; SMC4000IO chip select.<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; compatible = &quot;fsl,mpc5200b-gpt-gpio&quot;,&quot;fsl,mpc5200-gpt-gpio&quot;;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cell-index = &lt;4&gt;;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reg = &lt;0x640 0x10&gt;;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; interrupts = &lt;1 13 0&gt;;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; interrupt-parent = &lt;&amp;mpc5200_pic&gt;;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gpio-controller;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #gpio-cells = &lt;2&gt;;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; };<br>
&gt;<br>
&gt; I found the gpio in<br>
&gt; # cat /sys/class/gpio/gpiochip215/label<br>
&gt; /soc5200@f0000000/timer@640<br>
&gt;<br>
&gt; The spi controller is defined like this:<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; spi@2400 {<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; device_type = &quot;spi&quot;;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #address-cells = &lt;1&gt;;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #size-cells = &lt;0&gt;;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; compatible = &quot;fsl,mpc5200-psc-spi&quot;,&quot;fsl,mpc5200b-psc-spi&quot;;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cell-index = &lt;2&gt;;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reg = &lt;2400 100&gt;;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; interrupts = &lt;2 3 0&gt;;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; interrupt-parent = &lt;&amp;mpc5200_pic&gt;;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gpios = &lt;&amp;gpt4 0 0&gt;;<br>
&gt;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; io-controller@0 {<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; compatible = &quot;microkey,smc4000io&quot;;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; spi-max-frequency = &lt;1000000&gt;;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; reg = &lt;0&gt;;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; };<br>
&gt;<br>
&gt; At bootup linux (2.6.27) reports:<br>
&gt;<br>
&gt; mpc52xx-psc-spi f0000960.spi: probe called without platform data, no<br>
&gt; (de)activate_cs function will be called.<br>
&gt;<br>
&gt; Is my assumption wrong that the gpios property is the way to map chipselects<br>
&gt; to the spi driver?<br>
<br>
</div></div>Yes, that is the way you should work specify the chip selects, but the<br>
driver hasn&#39;t been updated to support it yet.<br>
<br>
g.<br>
<font color="#888888"><br>
--<br>
Grant Likely, B.Sc., P.Eng.<br>
Secret Lab Technologies Ltd.<br>
</font></blockquote></div><br>