[PATCH 3/5] gpio/omap: Add DT support to GPIO driver
Jon Hunter
jon-hunter at ti.com
Wed Feb 27 09:40:26 EST 2013
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
More information about the devicetree-discuss
mailing list