mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-15 15:15:47 +00:00
14dbcfc4c9
Merge the EFUSE_ShadowMapUpdate function into ReadAdapterInfo8188EU, which is the only caller. Merging the two functions makes it clearer that eeprom->efuse_eeprom_data is in fact a temporary buffer that stores info read from efuses. Signed-off-by: Martin Kaiser <martin@kaiser.cx> Link: https://lore.kernel.org/r/20220709171000.180481-5-martin@kaiser.cx Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
74 lines
1.7 KiB
C
74 lines
1.7 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/* Copyright(c) 2007 - 2011 Realtek Corporation. */
|
|
|
|
#define _RTW_EFUSE_C_
|
|
|
|
#include "../include/osdep_service.h"
|
|
#include "../include/drv_types.h"
|
|
#include "../include/rtw_efuse.h"
|
|
#include "../include/rtl8188e_hal.h"
|
|
|
|
/* */
|
|
/* 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
|
|
ReadEFuseByte(
|
|
struct adapter *Adapter,
|
|
u16 _offset,
|
|
u8 *pbuf)
|
|
{
|
|
u32 value32;
|
|
u8 readbyte;
|
|
u16 retry;
|
|
int res;
|
|
|
|
/* Write Address */
|
|
rtw_write8(Adapter, EFUSE_CTRL + 1, (_offset & 0xff));
|
|
res = rtw_read8(Adapter, EFUSE_CTRL + 2, &readbyte);
|
|
if (res)
|
|
return;
|
|
|
|
rtw_write8(Adapter, EFUSE_CTRL + 2, ((_offset >> 8) & 0x03) | (readbyte & 0xfc));
|
|
|
|
/* Write bit 32 0 */
|
|
res = rtw_read8(Adapter, EFUSE_CTRL + 3, &readbyte);
|
|
if (res)
|
|
return;
|
|
|
|
rtw_write8(Adapter, EFUSE_CTRL + 3, (readbyte & 0x7f));
|
|
|
|
/* Check bit 32 read-ready */
|
|
res = rtw_read32(Adapter, EFUSE_CTRL, &value32);
|
|
if (res)
|
|
return;
|
|
|
|
for (retry = 0; retry < 10000; retry++) {
|
|
res = rtw_read32(Adapter, EFUSE_CTRL, &value32);
|
|
if (res)
|
|
continue;
|
|
|
|
if (((value32 >> 24) & 0xff) & 0x80)
|
|
break;
|
|
}
|
|
|
|
/* 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. */
|
|
udelay(50);
|
|
res = rtw_read32(Adapter, EFUSE_CTRL, &value32);
|
|
if (res)
|
|
return;
|
|
|
|
*pbuf = (u8)(value32 & 0xff);
|
|
|
|
/* FIXME: return an error to caller */
|
|
}
|