Hi Ezequiel, On Thursday 30 October 2014 08:58:28 Ezequiel Garcia wrote: > On 10/25/2014 07:13 PM, Laurent Pinchart wrote: > > Hello, > > > > I recently ran into an issue with the OF IRQ parsing code in the I2C core > > (of_i2c_register_devices in drivers/i2c/i2c-core.c). > > > > My DT contains the following nodes. > > > > gpio1: gpio@e6051000 { > > ... > > #interrupt-cells = <2>; > > interrupt-controller; > > clocks = <&mstp9_clks R8A7790_CLK_GPIO1>; > > }; > > > > iic2: i2c@e6520000 { > > #address-cells = <1>; > > #size-cells = <0>; > > ... > > hdmi@39 { > > compatible = "adi,adv7511w"; > > reg = <0x39>; > > interrupt-parent = <&gpio1>; > > interrupts = <15 IRQ_TYPE_EDGE_FALLING>; > > ... > > }; > > }; > > > > mstp9_clks: mstp9_clks@e6150994 { > > ... > > }; > > > > The i2c@e6520000 node is probed before the gpio@e6051000 node. The > > of_i2c_register_devices() function tries to register all children, > > including hdmi@39. It tries to parse and map the I2C client IRQ by > > calling irq_of_parse_and_map(), which returns 0 as the interrupt > > controller isn't probed yet. The adv7511 driver later probes the hdmi@39 > > device and gets client->irq set to 0. > > > > We can't control the probe order. > > Maybe I'm missing something, but I think your i2c adapter is probed with > a subsys_initcall (as many other adapters). Otherwise, I can't see why > it would be probed before the the gpio controller. > > I think this initcall is your problem. Have you tried just using > platform_driver's probe? My I2C controller driver uses module_platform_driver(). The reason why the GPIO controller is probed later is because the GPIO requires a clock, and the clock device is probed after the I2C controller, resulting in a deferred probing the first time the GPIO controller is probed. In the general case probe ordering can't be controlled, especially with DT. I believe we thus need a generic solution. -- Regards, Laurent Pinchart -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html