?? omap730_gspx.c
字號:
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 + -