GPIO/IRQ expander cannot map interrupt

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

The following is an extract from a device tree of a Tegra2-based board I'm
working on:

	i2c@7000c000 {
		clock-frequency = <400000>;

		keypad1: sx8634@2b {
			compatible = "sx8634";
			reg = <0x2b>;
			interrupt-parent = <&gpioext>;
			interrupts = <2>;
		};

		gpioext: gpio-ad8p@41 {
			compatible = "gpio-ad8p";
			reg = <0x41>;
			interrupts = <320>; /* gpio PU0 */

			gpio-controller;
			#gpio-cells = <2>;

			interrupt-controller;
			#interrupt-cells = <1>;
		};
	};

	i2c@7000c400 {
		clock-frequency = <400000>;

		keypad2: sx8634@2b {
			compatible = "sx8634";
			reg = <0x2b>;
			interrupt-parent = <&gpioext>;
			interrupts = <3>;
		};
	};

So basically I have a GPIO/IRQ expander on the first I2C bus (gpioext) to
which the two keypad (sx8634) chips are connected. They use GPIOs 2 and 3 of
the expander as interrupts.

This all seems to work partially: the gpioext is properly detected as parent
for both keypad controllers during I2C device registration. Within the
gpio-ad8p driver I register an IRQ domain (using irq_domain_add_simple()) in
order to allow the OF code to properly map the IRQs for the controller's
children.

The problem, however, is that the keypad I2C devices are registered before the
gpioext device is probed, which results in a situation where the IRQs cannot
be mapped because the gpioext device hasn't had a chance to register the IRQ
domain yet.

Is there anything I can do to make this work? Perhaps the OF code needs to be
patched to ensure that devices which have the gpio-/interrupt-controller
properties are always probed before other devices are registered?

Thierry

Attachment: pgpmRppBmEZ4C.pgp
Description: PGP signature


[Index of Archives]     [ARM Kernel]     [Linux ARM]     [Linux ARM MSM]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux