diff options
Diffstat (limited to 'kernel/drivers/staging/rtl8723au/core/rtw_efuse.c')
-rw-r--r-- | kernel/drivers/staging/rtl8723au/core/rtw_efuse.c | 320 |
1 files changed, 92 insertions, 228 deletions
diff --git a/kernel/drivers/staging/rtl8723au/core/rtw_efuse.c b/kernel/drivers/staging/rtl8723au/core/rtw_efuse.c index 92a34db3b..906b5782d 100644 --- a/kernel/drivers/staging/rtl8723au/core/rtw_efuse.c +++ b/kernel/drivers/staging/rtl8723au/core/rtw_efuse.c @@ -21,34 +21,17 @@ #include <rtl8723a_hal.h> #include <usb_ops_linux.h> -/*------------------------Define local variable------------------------------*/ - -/* */ #define REG_EFUSE_CTRL 0x0030 -#define EFUSE_CTRL REG_EFUSE_CTRL /* E-Fuse Control. */ -/* */ +#define EFUSE_CTRL REG_EFUSE_CTRL /* E-Fuse Control */ #define VOLTAGE_V25 0x03 #define LDOE25_SHIFT 28 -/*----------------------------------------------------------------------------- - * Function: Efuse_PowerSwitch - * - * Overview: When we want to enable write operation, we should change to - * pwr on state. When we stop write, we should switch to 500k mode - * and disable LDO 2.5V. - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 11/17/2008 MHC Create Version 0. - * - *---------------------------------------------------------------------------*/ +/* + * When we want to enable write operation, we should change to + * pwr on state. When we stop write, we should switch to 500k mode + * and disable LDO 2.5V. + */ static void Efuse_PowerSwitch(struct rtw_adapter *padapter, u8 bWrite, u8 PwrState) { @@ -58,22 +41,26 @@ static void Efuse_PowerSwitch(struct rtw_adapter *padapter, if (PwrState == true) { rtl8723au_write8(padapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_ON); - /* 1.2V Power: From VDDON with Power - Cut(0x0000h[15]), default valid */ + /* + * 1.2V Power: From VDDON with Power + * Cut(0x0000h[15]), default valid + */ tmpV16 = rtl8723au_read16(padapter, REG_SYS_ISO_CTRL); if (!(tmpV16 & PWC_EV12V)) { tmpV16 |= PWC_EV12V; rtl8723au_write16(padapter, REG_SYS_ISO_CTRL, tmpV16); } - /* Reset: 0x0000h[28], default valid */ + /* Reset: 0x0000h[28], default valid */ tmpV16 = rtl8723au_read16(padapter, REG_SYS_FUNC_EN); if (!(tmpV16 & FEN_ELDR)) { tmpV16 |= FEN_ELDR; rtl8723au_write16(padapter, REG_SYS_FUNC_EN, tmpV16); } - /* Clock: Gated(0x0008h[5]) 8M(0x0008h[1]) clock - from ANA, default valid */ + /* + * Clock: Gated(0x0008h[5]) 8M(0x0008h[1]) + * clock from ANA, default valid + */ tmpV16 = rtl8723au_read16(padapter, REG_SYS_CLKR); if ((!(tmpV16 & LOADER_CLK_EN)) || (!(tmpV16 & ANA8M))) { tmpV16 |= (LOADER_CLK_EN | ANA8M); @@ -100,8 +87,7 @@ static void Efuse_PowerSwitch(struct rtw_adapter *padapter, } } -u16 -Efuse_GetCurrentSize23a(struct rtw_adapter *pAdapter, u8 efuseType) +u16 Efuse_GetCurrentSize23a(struct rtw_adapter *pAdapter, u8 efuseType) { u16 ret = 0; @@ -113,26 +99,19 @@ Efuse_GetCurrentSize23a(struct rtw_adapter *pAdapter, u8 efuseType) return ret; } -/* 11/16/2008 MH Add description. Get current efuse area enabled word!!. */ -u8 -Efuse_CalculateWordCnts23a(u8 word_en) +/* Get current efuse area enabled word */ +u8 Efuse_CalculateWordCnts23a(u8 word_en) { return hweight8((~word_en) & 0xf); } -/* */ -/* Description: */ -/* Execute E-Fuse read byte operation. */ -/* Referred from SD1 Richard. */ -/* */ -/* Assumption: */ -/* 1. Boot from E-Fuse and successfully auto-load. */ -/* 2. PASSIVE_LEVEL (USB interface) */ -/* */ -/* Created by Roger, 2008.10.21. */ -/* */ -void -ReadEFuseByte23a(struct rtw_adapter *Adapter, u16 _offset, u8 *pbuf) +/* + * Description: Execute E-Fuse read byte operation. + * + * Assumptions: 1. Boot from E-Fuse and successfully auto-load. + * 2. PASSIVE_LEVEL (USB interface) + */ +void ReadEFuseByte23a(struct rtw_adapter *Adapter, u16 _offset, u8 *pbuf) { u32 value32; u8 readbyte; @@ -156,19 +135,21 @@ ReadEFuseByte23a(struct rtw_adapter *Adapter, u16 _offset, u8 *pbuf) retry++; } - /* 20100205 Joseph: Add delay suggested by SD1 Victor. */ - /* This fix the problem that Efuse read error in high temperature condition. */ - /* Designer says that there shall be some delay after ready bit is set, or the */ - /* result will always stay on last data we read. */ + /* + * Added suggested delay. This fixes the problem that + * Efuse read error in high temperature condition. + * Designer says that there shall be some delay after + * ready bit is set, or the result will always stay + * on last data we read. + */ udelay(50); value32 = rtl8723au_read32(Adapter, EFUSE_CTRL); *pbuf = (u8)(value32 & 0xff); } -void -EFUSE_GetEfuseDefinition23a(struct rtw_adapter *pAdapter, u8 efuseType, - u8 type, void *pOut) +void EFUSE_GetEfuseDefinition23a(struct rtw_adapter *pAdapter, u8 efuseType, + u8 type, void *pOut) { u8 *pu1Tmp; u16 *pu2Tmp; @@ -249,24 +230,8 @@ EFUSE_GetEfuseDefinition23a(struct rtw_adapter *pAdapter, u8 efuseType, } } -/*----------------------------------------------------------------------------- - * Function: EFUSE_Read1Byte23a - * - * Overview: Copy from WMAC fot EFUSE read 1 byte. - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 09/23/2008 MHC Copy from WMAC. - * - *---------------------------------------------------------------------------*/ -u8 -EFUSE_Read1Byte23a(struct rtw_adapter *Adapter, u16 Address) +/* Copy from WMAC for EFUSE read 1 byte. */ +u8 EFUSE_Read1Byte23a(struct rtw_adapter *Adapter, u16 Address) { u8 data; u8 Bytetemp = {0x00}; @@ -306,29 +271,10 @@ EFUSE_Read1Byte23a(struct rtw_adapter *Adapter, u16 Address) return data; } else return 0xFF; -}/* EFUSE_Read1Byte23a */ - -/*----------------------------------------------------------------------------- - * Function: EFUSE_Write1Byte - * - * Overview: Copy from WMAC fot EFUSE write 1 byte. - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 09/23/2008 MHC Copy from WMAC. - * - *---------------------------------------------------------------------------*/ +} -void -EFUSE_Write1Byte(struct rtw_adapter *Adapter, u16 Address, u8 Value); -void -EFUSE_Write1Byte(struct rtw_adapter *Adapter, u16 Address, u8 Value) +/* Copy from WMAC fot EFUSE write 1 byte. */ +void EFUSE_Write1Byte(struct rtw_adapter *Adapter, u16 Address, u8 Value) { u8 Bytetemp = {0x00}; u8 temp = {0x00}; @@ -367,24 +313,25 @@ EFUSE_Write1Byte(struct rtw_adapter *Adapter, u16 Address, u8 Value) } } } -}/* EFUSE_Write1Byte */ +} -/* 11/16/2008 MH Read one byte from real Efuse. */ -int -efuse_OneByteRead23a(struct rtw_adapter *pAdapter, u16 addr, u8 *data) +/* Read one byte from real Efuse. */ +int efuse_OneByteRead23a(struct rtw_adapter *pAdapter, u16 addr, u8 *data) { u8 tmpidx = 0; int bResult; - /* -----------------e-fuse reg ctrl --------------------------------- */ + /* -----------------e-fuse reg ctrl ---------------------------- */ /* address */ - rtl8723au_write8(pAdapter, EFUSE_CTRL+1, (u8)(addr&0xff)); - rtl8723au_write8(pAdapter, EFUSE_CTRL+2, ((u8)((addr>>8) &0x03)) | - (rtl8723au_read8(pAdapter, EFUSE_CTRL+2)&0xFC)); + rtl8723au_write8(pAdapter, EFUSE_CTRL + 1, (u8)(addr & 0xff)); + rtl8723au_write8(pAdapter, EFUSE_CTRL + 2, + ((u8)((addr >> 8) & 0x03)) | + (rtl8723au_read8(pAdapter, EFUSE_CTRL + 2) & 0xFC)); - rtl8723au_write8(pAdapter, EFUSE_CTRL+3, 0x72);/* read cmd */ + rtl8723au_write8(pAdapter, EFUSE_CTRL + 3, 0x72); /* read cmd */ - while(!(0x80 &rtl8723au_read8(pAdapter, EFUSE_CTRL+3)) && (tmpidx<100)) + while (!(0x80 & rtl8723au_read8(pAdapter, EFUSE_CTRL + 3)) && + (tmpidx < 100)) tmpidx++; if (tmpidx < 100) { *data = rtl8723au_read8(pAdapter, EFUSE_CTRL); @@ -396,26 +343,26 @@ efuse_OneByteRead23a(struct rtw_adapter *pAdapter, u16 addr, u8 *data) return bResult; } -/* 11/16/2008 MH Write one byte to reald Efuse. */ -int -efuse_OneByteWrite23a(struct rtw_adapter *pAdapter, u16 addr, u8 data) +/* Write one byte to reald Efuse. */ +int efuse_OneByteWrite23a(struct rtw_adapter *pAdapter, u16 addr, u8 data) { u8 tmpidx = 0; int bResult; /* return 0; */ - /* -----------------e-fuse reg ctrl --------------------------------- */ + /* -----------------e-fuse reg ctrl ------------------------- */ /* address */ - rtl8723au_write8(pAdapter, EFUSE_CTRL+1, (u8)(addr&0xff)); - rtl8723au_write8(pAdapter, EFUSE_CTRL+2, - (rtl8723au_read8(pAdapter, EFUSE_CTRL+2)&0xFC)|(u8)((addr>>8)&0x03)); - rtl8723au_write8(pAdapter, EFUSE_CTRL, data);/* data */ + rtl8723au_write8(pAdapter, EFUSE_CTRL + 1, (u8)(addr & 0xff)); + rtl8723au_write8(pAdapter, EFUSE_CTRL + 2, + (rtl8723au_read8(pAdapter, EFUSE_CTRL + 2) & 0xFC) | + (u8)((addr >> 8) & 0x03)); + rtl8723au_write8(pAdapter, EFUSE_CTRL, data); /* data */ - rtl8723au_write8(pAdapter, EFUSE_CTRL+3, 0xF2);/* write cmd */ + rtl8723au_write8(pAdapter, EFUSE_CTRL + 3, 0xF2); /* write cmd */ - while((0x80 & rtl8723au_read8(pAdapter, EFUSE_CTRL+3)) && - (tmpidx<100)) { + while ((0x80 & rtl8723au_read8(pAdapter, EFUSE_CTRL + 3)) && + (tmpidx < 100)) { tmpidx++; } @@ -427,27 +374,8 @@ efuse_OneByteWrite23a(struct rtw_adapter *pAdapter, u16 addr, u8 data) return bResult; } -/*----------------------------------------------------------------------------- - * Function: efuse_WordEnableDataRead23a - * - * Overview: Read allowed word in current efuse section data. - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 11/16/2008 MHC Create Version 0. - * 11/21/2008 MHC Fix Write bug when we only enable late word. - * - *---------------------------------------------------------------------------*/ -void -efuse_WordEnableDataRead23a(u8 word_en, - u8 *sourdata, - u8 *targetdata) +/* Read allowed word in current efuse section data. */ +void efuse_WordEnableDataRead23a(u8 word_en, u8 *sourdata, u8 *targetdata) { if (!(word_en&BIT(0))) { targetdata[0] = sourdata[0]; @@ -477,15 +405,13 @@ static int efuse_write8(struct rtw_adapter *padapter, u16 address, u8 *value) return efuse_OneByteWrite23a(padapter, address, *value); } -/* - * read/write raw efuse data - */ +/* read/write raw efuse data */ int rtw_efuse_access23a(struct rtw_adapter *padapter, u8 bWrite, u16 start_addr, u16 cnts, u8 *data) { int i = 0; u16 real_content_len = 0, max_available_size = 0; - int res = _FAIL ; + int res = _FAIL; int (*rw8)(struct rtw_adapter *, u16, u8*); EFUSE_GetEfuseDefinition23a(padapter, EFUSE_WIFI, @@ -507,7 +433,7 @@ int rtw_efuse_access23a(struct rtw_adapter *padapter, u8 bWrite, u16 start_addr, Efuse_PowerSwitch(padapter, bWrite, true); - /* e-fuse one byte read / write */ + /* e-fuse one byte read/write */ for (i = 0; i < cnts; i++) { if (start_addr >= real_content_len) { res = _FAIL; @@ -523,16 +449,17 @@ int rtw_efuse_access23a(struct rtw_adapter *padapter, u8 bWrite, u16 start_addr, return res; } -/* */ + u16 efuse_GetMaxSize23a(struct rtw_adapter *padapter) { u16 max_size; + EFUSE_GetEfuseDefinition23a(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_size); return max_size; } -/* */ + int rtw_efuse_map_read23a(struct rtw_adapter *padapter, u16 addr, u16 cnts, u8 *data) { @@ -573,26 +500,8 @@ int rtw_BT_efuse_map_read23a(struct rtw_adapter *padapter, return _SUCCESS; } -/*----------------------------------------------------------------------------- - * Function: Efuse_ReadAllMap - * - * Overview: Read All Efuse content - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 11/11/2008 MHC Create Version 0. - * - *---------------------------------------------------------------------------*/ -void -Efuse_ReadAllMap(struct rtw_adapter *pAdapter, u8 efuseType, u8 *Efuse); -void -Efuse_ReadAllMap(struct rtw_adapter *pAdapter, u8 efuseType, u8 *Efuse) +/* Read All Efuse content */ +void Efuse_ReadAllMap(struct rtw_adapter *pAdapter, u8 efuseType, u8 *Efuse) { u16 mapLen = 0; @@ -606,45 +515,32 @@ Efuse_ReadAllMap(struct rtw_adapter *pAdapter, u8 efuseType, u8 *Efuse) Efuse_PowerSwitch(pAdapter, false, false); } -/*----------------------------------------------------------------------------- - * Function: efuse_ShadowRead1Byte - * efuse_ShadowRead2Byte - * efuse_ShadowRead4Byte - * - * Overview: Read from efuse init map by one/two/four bytes !!!!! - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 11/12/2008 MHC Create Version 0. +/* + * Functions: efuse_ShadowRead1Byte + * efuse_ShadowRead2Byte + * efuse_ShadowRead4Byte * - *---------------------------------------------------------------------------*/ -static void -efuse_ShadowRead1Byte(struct rtw_adapter *pAdapter, u16 Offset, u8 *Value) + * Read from efuse init map by one/two/four bytes + */ +static void efuse_ShadowRead1Byte(struct rtw_adapter *pAdapter, u16 Offset, + u8 *Value) { struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter); *Value = pEEPROM->efuse_eeprom_data[Offset]; -} /* EFUSE_ShadowRead23a1Byte */ +} -/* Read Two Bytes */ -static void -efuse_ShadowRead2Byte(struct rtw_adapter *pAdapter, u16 Offset, u16 *Value) +static void efuse_ShadowRead2Byte(struct rtw_adapter *pAdapter, u16 Offset, + u16 *Value) { struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter); *Value = pEEPROM->efuse_eeprom_data[Offset]; *Value |= pEEPROM->efuse_eeprom_data[Offset+1]<<8; -} /* EFUSE_ShadowRead23a2Byte */ +} -/* Read Four Bytes */ -static void -efuse_ShadowRead4Byte(struct rtw_adapter *pAdapter, u16 Offset, u32 *Value) +static void efuse_ShadowRead4Byte(struct rtw_adapter *pAdapter, u16 Offset, + u32 *Value) { struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter); @@ -652,24 +548,9 @@ efuse_ShadowRead4Byte(struct rtw_adapter *pAdapter, u16 Offset, u32 *Value) *Value |= pEEPROM->efuse_eeprom_data[Offset+1]<<8; *Value |= pEEPROM->efuse_eeprom_data[Offset+2]<<16; *Value |= pEEPROM->efuse_eeprom_data[Offset+3]<<24; -} /* efuse_ShadowRead4Byte */ +} -/*----------------------------------------------------------------------------- - * Function: EFUSE_ShadowMapUpdate23a - * - * Overview: Transfer current EFUSE content to shadow init and modify map. - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 11/13/2008 MHC Create Version 0. - * - *---------------------------------------------------------------------------*/ +/* Transfer current EFUSE content to shadow init and modify map. */ void EFUSE_ShadowMapUpdate23a(struct rtw_adapter *pAdapter, u8 efuseType) { struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter); @@ -683,28 +564,11 @@ void EFUSE_ShadowMapUpdate23a(struct rtw_adapter *pAdapter, u8 efuseType) else Efuse_ReadAllMap(pAdapter, efuseType, pEEPROM->efuse_eeprom_data); +} -}/* EFUSE_ShadowMapUpdate23a */ - -/*----------------------------------------------------------------------------- - * Function: EFUSE_ShadowRead23a - * - * Overview: Read from efuse init map !!!!! - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 11/12/2008 MHC Create Version 0. - * - *---------------------------------------------------------------------------*/ -void -EFUSE_ShadowRead23a(struct rtw_adapter *pAdapter, - u8 Type, u16 Offset, u32 *Value) +/* Read from efuse init map */ +void EFUSE_ShadowRead23a(struct rtw_adapter *pAdapter, u8 Type, + u16 Offset, u32 *Value) { if (Type == 1) efuse_ShadowRead1Byte(pAdapter, Offset, (u8 *)Value); @@ -712,4 +576,4 @@ EFUSE_ShadowRead23a(struct rtw_adapter *pAdapter, efuse_ShadowRead2Byte(pAdapter, Offset, (u16 *)Value); else if (Type == 4) efuse_ShadowRead4Byte(pAdapter, Offset, (u32 *)Value); -} /* EFUSE_ShadowRead23a */ +} |