⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 omap730_gspx.c

📁 marvell8385 GSPI开发驱动
💻 C
📖 第 1 页 / 共 2 页
字号:

    if(pDevice->pSPIRegs) 
		MmUnmapIoSpace((PVOID)pDevice->pSPIRegs, sizeof(OMAP730_SPI_REGS));

    if(pDevice->pConfigRegs) 
		MmUnmapIoSpace((PVOID)pDevice->pConfigRegs, sizeof(OMAP730_CONFIG_REGS));

    if(pDevice->hGPIO) 
		GPIOClose(pDevice->hGPIO);

    pDevice->IntsInfo.bDriverShutdown = TRUE;
	
    ClearInterrupt(&pDevice->IntsInfo);
    pHC = NULL;
}

/*-----------------------------------------------------------
 *
 *  Name: Omap_gspx_read_reg16()
 *
 *  Description: Omap730 SPI read 16reg
 *  
 *  Arguments: PVOID pHC, USHORT reg, USHORT *data 
 *    
 *  Return Value: int
 *           
 *
 *  Notes: 
--------------------------------------------------------------*/
int Omap_gspx_read_reg16(PVOID pHC, USHORT reg, USHORT *data)
{
    GSPI_HW_INFO *pDevice = (GSPI_HW_INFO*) pHC;
    int i = 0;

	NdisAcquireSpinLock(&SpiLock);
    OmapSpiOpen( (PVOID)(pDevice->pSPIRegs) );// open spi
    OmapSpiWrite16( (PVOID)(pDevice->pSPIRegs),reg );// write reg address

    //a delay period required for the WLAN module to prepare the data
    for( i=0;i<dummy_clk_reg;i++ )
          OmapSpiWrite16( (PVOID)(pDevice->pSPIRegs), 0x0);
 
    *data = OmapSpiRead16( (PVOID)(pDevice->pSPIRegs) );// read data
    OmapSpiClose((PVOID)(pDevice->pSPIRegs));// close spi

   //RETAILMSG(1, (TEXT("*** Omap_gspx_read_reg16:[%x]:[%x]  ***\r\n"),reg,*data));
    NdisReleaseSpinLock(&SpiLock);
    return 0; //true
}

/*-----------------------------------------------------------
 *
 *  Name: Omap_gspx_write_reg16()
 *
 *  Description: Omap730 SPI write 16reg
 *  
 *  Arguments: PVOID pHC, USHORT reg, USHORT data
 *    
 *  Return Value: int
 *           
 *
 *  Notes: 
--------------------------------------------------------------*/
int Omap_gspx_write_reg16(PVOID pHC, USHORT reg, USHORT data)
{
    GSPI_HW_INFO *pDevice = (GSPI_HW_INFO*) pHC;

   NdisAcquireSpinLock(&SpiLock);
    OmapSpiOpen( (PVOID)(pDevice->pSPIRegs) );// open spi
    OmapSpiWrite16( (PVOID)(pDevice->pSPIRegs),(reg | 0x8000));// write address
    OmapSpiWrite16( (PVOID)(pDevice->pSPIRegs),data ); // write data
    OmapSpiClose((PVOID)(pDevice->pSPIRegs)); // close spi

    //RETAILMSG(1, (TEXT("*** Omap_gspx_write_reg16:[%x]:[%x]  ***\r\n"),reg,data));
     NdisReleaseSpinLock(&SpiLock);
    return 0;
}

/*-----------------------------------------------------------
 *
 *  Name: Omap_gspx_read_reg32()
 *
 *  Description: Omap730 SPI write 32reg
 *  
 *  Arguments:PVOID pHC, USHORT reg, ULONG *data
 *    
 *  Return Value: int
 *           
 *
 *  Notes: 
--------------------------------------------------------------*/
int Omap_gspx_read_reg32(PVOID pHC, USHORT reg, ULONG *data)
{
    GSPI_HW_INFO *pDevice = (GSPI_HW_INFO*) pHC;
    int i;
    USHORT rdata;

    NdisAcquireSpinLock(&SpiLock);
    OmapSpiOpen( (PVOID)(pDevice->pSPIRegs) );// open spi
    OmapSpiWrite16( (PVOID)(pDevice->pSPIRegs),reg); // write reg address

    //a delay period required for the WLAN module to prepare the data
    for(i=0; i<dummy_clk_reg; i++)
          OmapSpiWrite16( (PVOID)(pDevice->pSPIRegs),0x0 ); // write dumy data
 
    // read data
    rdata = OmapSpiRead16( (PVOID)(pDevice->pSPIRegs) );
    *data = rdata;
    rdata = OmapSpiRead16( (PVOID)(pDevice->pSPIRegs) );
    *data = ((((ULONG)rdata)<<16) & 0xffff0000) | *data;
    
    OmapSpiClose((PVOID)(pDevice->pSPIRegs));// close spi
    
   // RETAILMSG(1, (TEXT("*** Omap_gspx_read_reg32:[%x]:[%x]  ***\r\n"),reg,*data));
     NdisReleaseSpinLock(&SpiLock);
    return 0;//TRUE;
}

/*-----------------------------------------------------------
 *
 *  Name: Omap_gspx_write_reg32()
 *
 *  Description: Omap730 SPI write 32reg
 *  
 *  Arguments:PVOID pHC, USHORT reg, ULONG data
 *    
 *  Return Value: int
 *           
 *
 *  Notes: 
--------------------------------------------------------------*/
int Omap_gspx_write_reg32(PVOID pHC, USHORT reg, ULONG data)
{
    GSPI_HW_INFO *pDevice = (GSPI_HW_INFO*) pHC;
    USHORT tdata;

    NdisAcquireSpinLock(&SpiLock);
    OmapSpiOpen( (PVOID)(pDevice->pSPIRegs) ); // open spi
    OmapSpiWrite16( (PVOID)(pDevice->pSPIRegs),(reg | 0x8000));// write address

    // write data
    tdata = (USHORT)((data & 0xffff0000)>>16);
    OmapSpiWrite16( (PVOID)(pDevice->pSPIRegs),tdata );

    // write data
    tdata = (USHORT)(data&0xffff);
    OmapSpiWrite16( (PVOID)(pDevice->pSPIRegs),tdata );
    OmapSpiClose((PVOID)(pDevice->pSPIRegs));// close spi

    //RETAILMSG(1, (TEXT("*** Omap_gspx_write_reg32:[%x]:[%x]  ***\r\n"),reg,data));
     NdisReleaseSpinLock(&SpiLock);
    return 0;//TRUE;
}

/*-----------------------------------------------------------
 *
 *  Name: Omap_gspx_read_mem()
 *
 *  Description: Omap730 SPI read memory
 *  
 *  Arguments:PVOID pHC, USHORT reg, USHORT size, UCHAR *data
 *    
 *  Return Value: void
 *           
 *
 *  Notes: 
--------------------------------------------------------------*/
void Omap_gspx_read_mem(PVOID pHC, USHORT reg, USHORT size, UCHAR *data)
{
    GSPI_HW_INFO *pDevice = (GSPI_HW_INFO*) pHC;
    int i;
    USHORT rdata;

    NdisAcquireSpinLock(&SpiLock);
    OmapSpiOpen( (PVOID)(pDevice->pSPIRegs) );// open spi 
    OmapSpiWrite16( (PVOID)(pDevice->pSPIRegs),reg );// write reg address

    //a delay period required for the WLAN module to prepare the data
    for( i=0;i<dummy_clk_data;i++ )
        OmapSpiWrite16( (PVOID)(pDevice->pSPIRegs),0x0 );  // dumy write data

    // read data
    for( i=0;i<size;i++ )
    {
        rdata = OmapSpiRead16( (PVOID)(pDevice->pSPIRegs) );
        *((USHORT*)data) = rdata;
        data += 2; 
    }
    OmapSpiClose((PVOID)(pDevice->pSPIRegs));// close spi

    //RETAILMSG(1, (TEXT("*** Omap_gspx_read_mem:[%x]:[%x]  ***\r\n"),reg,size));
     NdisReleaseSpinLock(&SpiLock);
    return ;//true ->0
}


/*-----------------------------------------------------------
 *
 *  Name: Omap_gspx_write_mem()
 *
 *  Description: Omap730 SPI write memory
 *  
 *  Arguments:PVOID pHC, USHORT reg, USHORT size, UCHAR *data
 *    
 *  Return Value: void
 *           
 *
 *  Notes: 
--------------------------------------------------------------*/
void Omap_gspx_write_mem(PVOID pHC, USHORT reg, USHORT size, UCHAR *data)
{
    GSPI_HW_INFO *pDevice = (GSPI_HW_INFO*) pHC;
    USHORT tdata;
    int i;

    NdisAcquireSpinLock(&SpiLock);
    OmapSpiOpen( (PVOID)(pDevice->pSPIRegs) );// open spi
    OmapSpiWrite16( (PVOID)(pDevice->pSPIRegs),(reg | 0x8000) ); // write address

    for( i=0;i<size;i++ )
    {
        // write data
        tdata = *((USHORT*)data);
        OmapSpiWrite16( (PVOID)(pDevice->pSPIRegs),tdata );
        data += 2;
    }

    OmapSpiClose((PVOID)(pDevice->pSPIRegs));// close spi

   // RETAILMSG(1, (TEXT("*** Omap_gspx_write_mem:[%x]:[%x]  ***\r\n"),reg,size));
     NdisReleaseSpinLock(&SpiLock);
     return ;//true ->0
}

/*-----------------------------------------------------------
 *
 *  Name: Omap_gspx_get_sysintr()
 *
 *  Description: Get   sysintr
 *  
 *  Arguments:void
 *    
 *  Return Value: ULONG
 *           
 *
 *  Notes: 
--------------------------------------------------------------*/
ULONG Omap_gspx_get_sysintr(void)
{
    return  pHwInfo->SysIntr;
}


/*-----------------------------------------------------------
 *
 *  Name: Omap_gspi_register_isr()
 *
 *  Description: register ISR
 *  
 *  Arguments:PGSPI_HW_INFO pGspiHwInfo, void* Adapter, ISRFUNC isrFunc
 *    
 *  Return Value: DWORD
 *           
 *
 *  Notes: 
--------------------------------------------------------------*/
DWORD Omap_gspi_register_isr(PGSPI_HW_INFO pGspiHwInfo, void* Adapter, ISRFUNC isrFunc)
{
	PGSPI_HW_INFO pHC = pGspiHwInfo;

	if((pHC == NULL) || (Adapter == NULL) || (isrFunc == NULL))
		return -1;

	pHC->hIsrParam = (HANDLE) Adapter;
	pHC->isrFunc = isrFunc;

	return 0;
}
void Omap730_PowerDownWlan(void)
{
     //disable interrupt
	pHwInfo->IntsInfo.bDriverShutdown = TRUE;
	// power on wlan
    GPIOClrBit(pHwInfo->hGPIO, BSP_GPIO_WlanPower);
    GPIOClrBit(pHwInfo->hGPIO, BSP_GPIO_WlanPowerDown);
}
	
void Omap730_PowerOnWlan(void)
{
    // power on wlan       
    GPIOSetBit(pHwInfo->hGPIO, BSP_GPIO_WlanPower);
    GPIOSetBit(pHwInfo->hGPIO, BSP_GPIO_WlanPowerDown);
    Sleep(20);
   //disable interrupt
    pHwInfo->IntsInfo.bDriverShutdown = FALSE;

}
    // reset wlan spi

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -