ARM, SDIO over SPI & 88W8686 firmware loading issue

Arthur Mielimonka arthur.mielimonka at noit.de
Wed Mar 19 04:05:08 EDT 2008


Hi,

thank you for your answer. I tried another way (adapting the interface of the libertas driver to work on spi instead of sdio.
Actually the wlan adapter I use provides both a sdio and a spi interface (Embedded Works WM-G-MR-05).
But I also have the problem that I do not have the SPI firmware & specification from Marvell. 

> Hi Arthur,
> 
> Mielimonka Arthur a écrit :
> > I just wanted to do some similar work (I wanted to connect an ARM7TDMI
> > LPC2468 board with the Marvell 8686) when I read your post at this
> > mailing list. 
> >   
> I hope you will have more success than me...
> Do you already have Linux working for your platform ?

Yes I am working with an adapted version of uClinux 2.6.24.

> > Would you explain how you accessed the WLAN adapter? I assume you
> > exchanged the if_sdio interface by an if_spi interface and replaced the
> > sdio_readb and sido_writesb functions by similar spi_read & _write
> > functions?
> >
> >   
> In fact I'm using the Linux SDIO over SPI & Libertas drivers that were 
> recently included in 2.6.24 series.
> I didn't write any specific code.
> > Did you also plan to integrate an interrupt service? If yes, how?
> >   
> I might be wrong but in Linux SDIO stack they use a poller thread to 
> handle "interrupt" requests from SDIO devices.
> I didn't plan anything because I still didn't manage to successfully 
> download chip's firmware in SPI mode.

I also try to get this firmware.

> > If you don't mind it would be nice if you would send me your code?
> >   
> It's Linux code so...
>  http://lxr.linux.no/linux+v2.6.24.1/drivers/net/wireless/libertas/    
> for libertas part
> and
>  http://lxr.linux.no/linux+v2.6.24.1/drivers/mmc/host/mmc_spi.c   for 
> MMC/SDIO over SPI part
> Of course it assumes that you have a SPI generic driver for your platform:
>  http://lxr.linux.no/linux+v2.6.24.1/drivers/spi/   (mine is imx one)
> 
> Then in you platform specific initialisation file (in 
> arch/arm/mach-xxx/board.c for ex) you have to declare something like 
> that (I only put "big steps" here):
> 
> static struct spi_imx_chip libertas_hw = {
>         .cs_control             = libertas_cs,
> };
> ...
> static struct mmc_spi_platform_data libertas_mmc_pdata = {
>         .init           = mmc_slot_init,
>         .exit           = mmc_slot_exit,
>         .detect_delay   = 700,  /* msecs */
>        .ocr_mask       = MMC_VDD_32_33 | MMC_VDD_33_34,
> };
> ...
> static struct spi_board_info spi_board_info[] __initdata = {
> ...
>  {
>        .modalias = "mmc_spi",
>        .bus_num = 1,
>        .controller_data = &libertas_hw,
>        .chip_select = 0,
>        .mode = 0,
>        .max_speed_hz = 1000000,
>        .platform_data = &libertas_mmc_pdata,
>   }
> };
> ...
> and register all the stuff to the Linux SPI API:
> 
>   spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
> 
> and as soon as you plug your SDCard the chip is detected and Linux SDIO 
> layers are started, libertas stack is called, etc...
> 
> Let me know if you manage to go further than loading the first stage 
> firmware (helper) !!

I will

> 
> Regards,
> Julien
> http://www.armadeus.org
> 
> 


Regards,
Arthur



More information about the libertas-dev mailing list