Greetings,
Well, I've gotten a better graps of the problem.
Here's how it should work : please note that Im not if demux runs before or after Int 78 (I presume before).
Card inserted -> Int 36 (HD64461) -> demux -> Int 78 -> demux -> Int 79 -> Interrupt -> disable IRQ
Int 78 is set using request_irq while Int 79 just sets irq_desc[79] = &hd64461_ss_type; to manage disable IRQ.
Now, I cannot register 79 as a proper IRQ, since the dev_id would be the same(?).
Best wishes
Kristoffer Ericson
On Fri, 5 Oct 2007 19:29:02 -0700
Kristoffer Ericson <Kri...@gm...> wrote:
> Greetings,
>
> Thoughts appreciated.
>
> IRQ 36 is main hd64461 IRQ (all IRQ between 64->80 ends up here)
> IRQ 78 is setup to be used as a pcmcia_bridge.
> IRQ 79 is aquired to handle PCMCIA events.
>
> A demux is put in place to take 78 IRQ's (since that is basicly the only thing that will happen) and transform them
> into 79 IF interrupt was generated by pcmcia change.
>
> extracts from code:
> note. irq = 78, io_irq = 79, irq_flags = IRQF_DISABLED
>
> request_irq(irq, hd64461_interrupt, irq_flags, "hd64461_ss-irq",sp))
> irq_desc[io_irq].chip = &hd64461_ss_irq_type;
> hd64461_register_irq_demux(sp->irq, hd64461_pcmcia_irq_demux, sp);
>
> Now whenever I insert a pcmcia card I get:
> 'unexpected IRQ trap at vector 4f'
> 'irq 79, desc:8d2b8a20, depth 1, count: 0, unhandled: 0'
> 'handle_irq(): 8d031180, handle_bad_irq+0x0/0x2d0'
> 'chip(): 9d2e2af8, 0x8d2e2af8'
> 'action() : 00000000'
> 'IRQ_DISABLED set'
>
> Due to printk's I can see that it did run through the hd64461_pcmcia_irq_demux and there quite correctly made 78 -> 79.
>
> /Kristoffer
>
>
|