Re: [PATCH] RFC: interrupt consistency check for OF GPIO IRQs

From: Alexander Holler
Date: Wed Sep 11 2013 - 03:17:22 EST


Am 11.09.2013 09:05, schrieb Alexander Holler:
Am 10.09.2013 17:00, schrieb Joel Fernandes:

I think your initial patch is much better than fixing up DT but then I
may be
missing other problems with your patch that Linus's patch addresses.

The initial patch had the problem that it not only did introduce
irq-mappings for only those gpios which are marked as IRQs, but it
requested those gpios too and preconfigured them

And that breaks every driver which uses gpios for IRQs.

To summarize what happens if a driver uses a gpio as irq:

gpio_request() // This works only if the gpio was not requested before
gpio_direction_input()
gpio_to_irq() // This needs an irq-mapping
request_threaded_irq()

So I would suggest multiple steps to change that:

1. Create a mapping for every gpio found in DT (or all gpios if no DT is
used). I think that is what Linus patch does (sorry, I haven't really
followed this thread and didn't look in deep at the patch).

2. Implement gpio_request_for_irq()
This would just be a small macro for gpio_request(); gpio_direction_input()

3. Change all drivers which do use gpio_to_irq() to use
gpio_request_for_irq() instead of gpio_request() and
gpio_direction_input(). This will end up with a big series of more or
less trivial patches (I count 677 occurences of gpio_to_irq) and might
be splitted.

4. request gpios and set them to input when a gpio is marked as an IRQ
in the DT and DT is used. Change gpio_rquest_for_irq() to a NOP if DT is
used or leave it as it is for the none-dt case.

But I still see a possible problem with requesting a gpio (centralized) if it is marked as IRQ in DT: it does this always.

I'm not sure, but there might be cases where this isn't wanted. Just that a GPIO is marked as IRQ in the DT for one driver, doesn't mean that this driver will be really used (and something else might use the GPIO instead).

Regards,

Alexander Holler

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/