From mboxrd@z Thu Jan 1 00:00:00 1970 From: Arend van Spriel Subject: Re: [PATCH 09/11] brcmfmac: Fix OOB interrupt not working for BCM43362 Date: Mon, 26 May 2014 11:20:54 +0200 Message-ID: <53830776.1030308@broadcom.com> References: <1401090486-4414-1-git-send-email-hdegoede@redhat.com> <1401090486-4414-10-git-send-email-hdegoede@redhat.com> Reply-To: linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Return-path: In-Reply-To: <1401090486-4414-10-git-send-email-hdegoede-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Post: , List-Help: , List-Archive: Sender: linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org List-Subscribe: , List-Unsubscribe: , To: Hans de Goede Cc: Linus Walleij , Chris Ball , Ulf Hansson , "John W. Linville" , Maxime Ripard , Chen-Yu Tsai , linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, linux-mmc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, devicetree , linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org List-Id: linux-mmc@vger.kernel.org On 05/26/14 09:48, Hans de Goede wrote: > It has taken me a long long time to get the OOB interrupt working on the > AP6210 sdio wifi/bt module found on various Allwinner A20 boards. In the > end I found these magic register pokes in the cubietruck kernel tree: > https://github.com/cubieboard2/linux-sunxi/commit/7f08ba395617d17e7a711507503d89a50406fe7a > > I'm not entirely sure if this specific to the AP6210 module, or if this > should be done for all BCM43362 sdio devices. This magic is not in our host drivers so my guess is that it is board specific. This means the nvram file provided to the firmware should have this specified. Can you send me yours? Regards, Arend > Signed-off-by: Hans de Goede > --- > drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c > index 0fc707c..2369a0f 100644 > --- a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c > +++ b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c > @@ -39,7 +39,9 @@ > #include > #include > #include > +#include > #include > +#include "chip.h" > #include "dhd_bus.h" > #include "dhd_dbg.h" > #include "sdio_host.h" > @@ -119,6 +121,7 @@ int brcmf_sdiod_intr_register(struct brcmf_sdio_dev *sdiodev) > { > int ret = 0; > u8 data; > + u32 addr, gpiocontrol; > unsigned long flags; > > if ((sdiodev->pdata)&& (sdiodev->pdata->oob_irq_supported)) { > @@ -148,6 +151,21 @@ int brcmf_sdiod_intr_register(struct brcmf_sdio_dev *sdiodev) > > sdio_claim_host(sdiodev->func[1]); > > + if (sdiodev->bus_if->chip == BCM43362_CHIP_ID) { > + addr = CORE_CC_REG(SI_ENUM_BASE, gpiocontrol); > + gpiocontrol = brcmf_sdiod_regrl(sdiodev, addr,&ret); > + gpiocontrol |= 0x2; > + brcmf_sdiod_regwl(sdiodev, addr, gpiocontrol,&ret); > + > + /* SPROM_ADDR_HIGH ? perhaps the defines name is off */ > + brcmf_sdiod_regwb(sdiodev, SBSDIO_SPROM_ADDR_HIGH, 0xf, > + &ret); > + brcmf_sdiod_regwb(sdiodev, SBSDIO_CHIP_CTRL_DATA, 0, > + &ret); > + brcmf_sdiod_regwb(sdiodev, SBSDIO_CHIP_CTRL_EN, 0x2, > + &ret); > + } > + > /* must configure SDIO_CCCR_IENx to enable irq */ > data = brcmf_sdiod_regrb(sdiodev, SDIO_CCCR_IENx,&ret); > data |= 1<< SDIO_FUNC_1 | 1<< SDIO_FUNC_2 | 1;