Hi Anish,<br><br><div class="gmail_quote">On Sat, Oct 20, 2012 at 9:38 AM, anish kumar <span dir="ltr">&lt;<a href="mailto:anish198519851985@gmail.com" target="_blank">anish198519851985@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 Fri, 2012-10-19 at 10:34 +0530, Arun KS wrote:<br>
&gt; Hi Anish,<br>
&gt;<br>
&gt; On Mon, May 28, 2012 at 9:16 AM, anish singh<br>
&gt; &lt;<a href="mailto:anish198519851985@gmail.com">anish198519851985@gmail.com</a>&gt; wrote:<br>
&gt;         On Mon, May 28, 2012 at 2:57 AM, richard -rw- weinberger<br>
&gt;         &lt;<a href="mailto:richard.weinberger@gmail.com">richard.weinberger@gmail.com</a>&gt; wrote:<br>
&gt;         &gt; On Sun, May 27, 2012 at 2:02 AM, Mark Farnell<br>
&gt;         &lt;<a href="mailto:mark.farnell@gmail.com">mark.farnell@gmail.com</a>&gt; wrote:<br>
&gt;         &gt;&gt; In the kernel, how can I find out the interrupt vector<br>
&gt;         number of a<br>
&gt;         &gt;&gt; given IRQ (for example, IRQ7)?<br>
&gt;         &gt;&gt;<br>
&gt;         &gt;&gt; Within the kernel module, I would like to manually set the<br>
&gt;         IRQ using<br>
&gt;         &gt;&gt; the assembly code:<br>
&gt;         &gt;&gt;<br>
&gt;         &gt;&gt; asm(&quot;int $&lt;irq vector&gt;&quot;);<br>
&gt;         &gt;&gt;<br>
&gt;         &gt;&gt; and let the IRQ handler installed by a different module<br>
&gt;         catch that interrupt.<br>
&gt;         &gt;&gt;<br>
&gt;         &gt;&gt; Is this possible?<br>
&gt;         &gt;<br>
&gt;         &gt; No really because not all IRQ have an interrupt line to the<br>
&gt;         CPU.<br>
&gt;         &gt; Linux can multiplex and emulate them. Think of GPIO drivers<br>
&gt;         with<br>
&gt;         &gt; interrupt support.<br>
&gt;<br>
&gt;         Can you please describe this in detail?It would really help a<br>
&gt;         lot of<br>
&gt;         people like me.Does multiplex mean that all numbers starting<br>
&gt;         from<br>
&gt;         0,1,2,3,...... TOTAL-interrupt will have interrupt lines<br>
&gt;         associated with it<br>
&gt;         eventhough all interrupt numbers are not linear?<br>
&gt;<br>
&gt; GPIOs are grouped as banks. Let’s say 32 gpios are in a bank.<br>
&gt; There will be only single interrupt line to interrupt controller for a<br>
&gt; bank.<br>
&gt;<br>
&gt;<br>
&gt; Consider that you have configured gpio1 and gpio16 as interrupts.<br>
&gt; Even if interrupt happens on gpio 1 or gpio 16, the same interrupt<br>
&gt; line will be triggered to<br>
&gt;<br>
&gt; Interrupt controller.<br>
&gt;<br>
&gt;<br>
&gt; Now the gpio driver has to figure out reading the Interrupt status<br>
&gt;<br>
&gt; Register of GPIO to find which interrupt (gpio1 or gpio16) has really<br>
&gt; fired.<br>
</div></div>And this is done by this way:<br>
Suppose we have a chip(mfd-multi-funcion-driver) driver which is<br>
connected to processor using a gpio - this gpio line acts as interrupt<br>
line from the processor<br></blockquote><div> </div><div>Interrupt lines are to the interrupt controllor(IC) and only two interrupts lines fom IC(irq and fiq in case of ARM) goes to processor.<br></div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">


<br>
++++++++++++              ++++++++++<br>
+ Processor+              + Chip   +----&gt;USB  interrupt handler<br>
+          +gpio---------&gt;+ MFD    +----&gt;dock interrupt handler<br>
++++++++++++              +        +----&gt;UART interrupt handler<br>
                          ++++++++++----&gt;Factory cable interrupt handler<br>
<br>
So the code will be as follows:<br>
<br>
handler_function()<br>
{<br>
        /* find out which interrupt is triggered */<br>
        /* it can be usb,dock,uart or factory cable */<br>
        ret_irq = read_mfd_register();<br>
        /*<br>
        * ok we found out the interrupt line, get a corresponding<br>
        * software linux irq number by calling<br>
        * irq_domain_add_linear<br>
        * irq_create_mapping<br>
        * you would have made this calls in the probe probably<br>
        */<br>
        handle_nested_irq(ret_irq);<br>
}<br>
<br>
handle_nested_irq inturn will call all the irq_handlers in the system<br>
for your UART,usb and dock driver.<br>
<br>
mfd_driver()<br>
{<br>
        request_irq(gpio_to_irq(gpio), handler_function);<br>
}<br>
<br></blockquote><div>Yes. This is another example of interrupt multipexing...<br>Here you have two levels of multiplexing. One for the mfd devices functions and other for gpio.<br><br>Thanks,<br>Arun <br></div><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">


Hope I have not missed anything.<br>
<div class="HOEnZb"><div class="h5">&gt;<br>
&gt; So in this case a single interrupt line is multiplex for 32 gpio<br>
&gt; interrupts.<br>
&gt;<br>
&gt;<br>
&gt; HTH.<br>
&gt;<br>
&gt; Thanks,<br>
&gt; Arun<br>
&gt;<br>
&gt;         &gt; Anyway, why to you think you need to trigger the raw IRQ<br>
&gt;         manually?<br>
&gt;         &gt; This sounds really odd...<br>
&gt;         &gt;<br>
&gt;         &gt;<br>
&gt;         &gt; --<br>
&gt;         &gt; Thanks,<br>
&gt;         &gt; //richard<br>
&gt;         &gt;<br>
&gt;         &gt; _______________________________________________<br>
&gt;         &gt; Kernelnewbies mailing list<br>
&gt;         &gt; <a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
&gt;         &gt;<br>
&gt;         <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
&gt;<br>
&gt;         _______________________________________________<br>
&gt;         Kernelnewbies mailing list<br>
&gt;         <a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
&gt;         <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
&gt;<br>
&gt;<br>
<br>
<br>
</div></div></blockquote></div><br>