On Tue, Aug 21, 2012 at 09:56:19AM +0100, Lee Jones wrote: > Wherever we do this from to be able to obtain the IRQ domain pointer, > which is where I'm currently struggling. Our options are: > - If we're only talking MFD here, we can handle this stuff in the MFD > core, but we need more information. The IRQ domain subsystem only allows > domain look-up via a Device Tree node, so we need to get our hands on What makes you say this? This is just a convenience for finding a domain, irqdomains are *completely* indepentant of device tree. > the domain another way in the case of non-DT enabled devices. Either we > add another parameter to mfd_add_device(irq_domain, ...), or we > standardise the 'irq_domain' variable name and use: > irq_domain = container_of(parent, struct irq_domain, irq_domain); Passing the domain into mfd seems like the obvious solution here - it's exactly what we currently do for legacy stuff (where we pass in the irq base), ideally what we'd end up with over time is that we could just remove the irq_base parameter entirely as everything would in time be moved over to using irqdomains. > - I know that you have interest in pushing the functionality into the > IRQ domain subsystem, but I'm struggling to see how. It's calling into > the IRQ domain where we're seeing issues in the first place, specifically > irq_create_mapping(). How about if we passed 'irq_domain' as a parameter > when requesting the IRQ? That way we can pass the correct IRQ without > worry of conversion. If 'irq_domain' is !NULL the IRQ management subsystem > can do the necessary conversions. If 'irq_domain' is NULL it continues to > use the requested IRQ as a virq. This is totally orthogonal to doing the mapping in the MFD subsystem which is the issue here.