[PATCH 3/5] gpio/omap: Add DT support to GPIO driver
From: Jon Hunter <hidden>
Date: 2013-02-26 22:40:26
Also in:
linux-devicetree, linux-omap
On 02/26/2013 04:01 AM, Javier Martinez Canillas wrote: [snip]
I was wondering if the level/edge settings for gpios is working on OMAP.
I'm adding DT support for an SMSC911x ethernet chip connected to the
GPMC for an OMAP3 SoC based board.
In the smsc911x driver probe function (smsc911x_drv_probe() in
drivers/net/ethernet/smsc/smsc911x.c), a call to request_irq() with
the flag IRQF_TRIGGER_LOW is needed because of the wiring on my board.
Reading the gpio-omap.txt documentation it says that #interrupt-cells
should be <2> and that a value of 8 is "active low level-sensitive".
So I tried this:
&gpmc {
ethernet at 5,0 {
pinctrl-names = "default";
pinctrl-0 = <&smsc911x_pins>;
compatible = "smsc,lan9221", "smsc,lan9115";
reg = <5 0 0xff>; /* CS5 */
interrupt-parent = <&gpio6>;
interrupts = <16 8>; /* gpio line 176 */
interrupt-names = "smsc911x irq";
vmmc-supply = <&vddvario>;
vmmc_aux-supply = <&vdd33a>;
reg-io-width = <4>;
smsc,save-mac-address;
};
};Are you requesting the gpio anywhere? If not then this is not going to work as-is. This was discussed fairly recently [1] and the conclusion was that the gpio needs to be requested before we can use as an interrupt. I have not seen your latest smsc code for omap, but when you are requesting the gpmc chip-select you should also request the gpio.
But in the smsc911x probe function:
irq_res->flags & IRQF_TRIGGER_MASK;
returns 0 which means that no trigger flags where set.
I took a look to the GPIOs device node definition on omap{3,4,5}.dtsi
and all look like this:
e.g from omap3.dtsi:
gpio6: gpio at 49058000 {
compatible = "ti,omap3-gpio";
ti,hwmods = "gpio6";
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupt-cells = <1>;
};
So, even when the documentation says that all the GPIO device nodes in
OMAP2+ should use a #interrupt-cells property value of <2>, they are
only using <1>. Changing that value to 2 makes hangs the kernel and it
does not boot.I will need to take a look at that. Is your code available anywhere so I can test? Cheers Jon [1] http://permalink.gmane.org/gmane.linux.ports.arm.omap/92192