Hi, all
I'm working on tegra wlan upstream issue.
The tegra board use the Broadcom 4329 as wlan device, and the driver is
the brcmfmac.
This wlan driver support out-band-interrupt (OOB), I want to add DT
support to use this OOB.
I can add following lines in the dts file to create platform device and
pass the interrupt resource to the driver.
wlan {
compatible = "broadcome, brcmf_sdio_pd";
interrupt-parten = <&gpio>;
interrupts = <144, 0x04>; /* IRQF_TRIGGER_HIGH */
};
In the wlan driver, it will use platform_get_resource() to get the
res->irq, res->flags, the irq number is right, but the flags will be
IORESOURCE_IRQ, not the 0x04 (IRQF_TRIGGER_HIGH).
The wlan driver wish this flags include the IRQF_TRGGER_* information,
and it will use this flags to configure other hw settings. If it is
wrong, the wlan can't work.
I checked drivers/of/irq.c, in function of_irq_to_resource(), it will
set r->flags = IORESOURCE_IRQ directly, not read the flags from the dtb
file. And I didn't find any of_xx api to get this flags.
How can I get this flags, does anyone has suggestion?
Thanks.
Wei.
On Thursday 09 August 2012, Wei Ni wrote:
> In the wlan driver, it will use platform_get_resource() to get the
> res->irq, res->flags, the irq number is right, but the flags will be
> IORESOURCE_IRQ, not the 0x04 (IRQF_TRIGGER_HIGH).
> The wlan driver wish this flags include the IRQF_TRGGER_* information,
> and it will use this flags to configure other hw settings. If it is
> wrong, the wlan can't work.
>
> I checked drivers/of/irq.c, in function of_irq_to_resource(), it will
> set r->flags = IORESOURCE_IRQ directly, not read the flags from the dtb
> file. And I didn't find any of_xx api to get this flags.
>
> How can I get this flags, does anyone has suggestion?
The driver should not need to know about thie flag. It gets read
by irq_create_of_mapping when calling teh xlate function and
gets set using irq_set_irq_type from there too.
Arnd
On Thu, Aug 09, 2012 at 11:48:42AM +0000, Arnd Bergmann wrote:
> On Thursday 09 August 2012, Wei Ni wrote:
> > The wlan driver wish this flags include the IRQF_TRGGER_* information,
> > and it will use this flags to configure other hw settings. If it is
> > wrong, the wlan can't work.
You can read the configuration with irqd_get_trigger_type() - see the OF
code in sound/soc/codecs/wm8903.c for an example.
> The driver should not need to know about thie flag. It gets read
> by irq_create_of_mapping when calling teh xlate function and
> gets set using irq_set_irq_type from there too.
That only helps the interrupt controller, it doesn't help the interrupt
source. A good proportion of embedded devices have a great deal of
flexibility in how they signal interrupts so they need to know what mode
to pick.
On 08/09/2012 12:43 PM, Wei Ni wrote:
> Hi, all
> I'm working on tegra wlan upstream issue.
> The tegra board use the Broadcom 4329 as wlan device, and the driver is
> the brcmfmac.
>
> This wlan driver support out-band-interrupt (OOB), I want to add DT
> support to use this OOB.
> I can add following lines in the dts file to create platform device and
> pass the interrupt resource to the driver.
>
> wlan {
> compatible = "broadcome, brcmf_sdio_pd";
I don't know the DT syntax, but I assume broadcome should be broadcom,
right? ;-)
> interrupt-parten = <&gpio>;
> interrupts = <144, 0x04>; /* IRQF_TRIGGER_HIGH */
> };
>
> In the wlan driver, it will use platform_get_resource() to get the
> res->irq, res->flags, the irq number is right, but the flags will be
> IORESOURCE_IRQ, not the 0x04 (IRQF_TRIGGER_HIGH).
> The wlan driver wish this flags include the IRQF_TRGGER_* information,
> and it will use this flags to configure other hw settings. If it is
> wrong, the wlan can't work.
>
> I checked drivers/of/irq.c, in function of_irq_to_resource(), it will
> set r->flags = IORESOURCE_IRQ directly, not read the flags from the dtb
> file. And I didn't find any of_xx api to get this flags.
>
> How can I get this flags, does anyone has suggestion?
I did a quick search in the kernel and there are a number of platform
drivers that seem to expect the IRQF_TRIGGER_* info by using (res->flags
& IRQF_TRIGGER_MASK) and to determine IRQF_SHARED as well.
Gr. AvS
On Thu, 2012-08-09 at 20:05 +0800, Mark Brown wrote:
> On Thu, Aug 09, 2012 at 11:48:42AM +0000, Arnd Bergmann wrote:
> > On Thursday 09 August 2012, Wei Ni wrote:
>
> > > The wlan driver wish this flags include the IRQF_TRGGER_* information,
> > > and it will use this flags to configure other hw settings. If it is
> > > wrong, the wlan can't work.
>
> You can read the configuration with irqd_get_trigger_type() - see the OF
> code in sound/soc/codecs/wm8903.c for an example.
I tried it, it worked fine. thanks for your help.
>
> > The driver should not need to know about thie flag. It gets read
> > by irq_create_of_mapping when calling teh xlate function and
> > gets set using irq_set_irq_type from there too.
>
> That only helps the interrupt controller, it doesn't help the interrupt
> source. A good proportion of embedded devices have a great deal of
> flexibility in how they signal interrupts so they need to know what mode
> to pick.
> --
> To unsubscribe from this list: send the line "unsubscribe linux-tegra" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, 2012-08-09 at 20:09 +0800, Arend van Spriel wrote:
> On 08/09/2012 12:43 PM, Wei Ni wrote:
> > Hi, all
> > I'm working on tegra wlan upstream issue.
> > The tegra board use the Broadcom 4329 as wlan device, and the driver is
> > the brcmfmac.
> >
> > This wlan driver support out-band-interrupt (OOB), I want to add DT
> > support to use this OOB.
> > I can add following lines in the dts file to create platform device and
> > pass the interrupt resource to the driver.
> >
> > wlan {
> > compatible = "broadcome, brcmf_sdio_pd";
>
> I don't know the DT syntax, but I assume broadcome should be broadcom,
> right? ;-)
Sorry, it's my typo, it should be broadcom.
>
> > interrupt-parten = <&gpio>;
> > interrupts = <144, 0x04>; /* IRQF_TRIGGER_HIGH */
> > };
> >
> > In the wlan driver, it will use platform_get_resource() to get the
> > res->irq, res->flags, the irq number is right, but the flags will be
> > IORESOURCE_IRQ, not the 0x04 (IRQF_TRIGGER_HIGH).
> > The wlan driver wish this flags include the IRQF_TRGGER_* information,
> > and it will use this flags to configure other hw settings. If it is
> > wrong, the wlan can't work.
> >
> > I checked drivers/of/irq.c, in function of_irq_to_resource(), it will
> > set r->flags = IORESOURCE_IRQ directly, not read the flags from the dtb
> > file. And I didn't find any of_xx api to get this flags.
> >
> > How can I get this flags, does anyone has suggestion?
>
> I did a quick search in the kernel and there are a number of platform
> drivers that seem to expect the IRQF_TRIGGER_* info by using (res->flags
> & IRQF_TRIGGER_MASK) and to determine IRQF_SHARED as well.
>
> Gr. AvS
>