staging: r8712u: Merging Realtek's latest (v2.6.6). Rework efuse data handling.

Rework efuse data handling.

Signed-off-by: Ali Bahar <ali@internetDog.org>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Ali Bahar 2011-09-04 03:14:17 +08:00 committed by Greg Kroah-Hartman
parent 07a6b03707
commit 0aeb623d37
1 changed files with 41 additions and 34 deletions

View File

@ -307,21 +307,25 @@ static u8 fix_header(struct _adapter *padapter, u8 header, u16 header_addr)
continue; continue;
} }
for (i = 0; i < PGPKG_MAX_WORDS; i++) { for (i = 0; i < PGPKG_MAX_WORDS; i++) {
if (BIT(i) & word_en) if (BIT(i) & word_en) {
continue; if (BIT(i) & pkt.word_en) {
if (!(BIT(i) & pkt.word_en)) { if (efuse_one_byte_read(
if (efuse_one_byte_read(padapter, addr, padapter, addr,
&value) == true) &value) == true)
pkt.data[i*2] = value; pkt.data[i*2] = value;
else else
return false; return false;
if (efuse_one_byte_read(padapter, addr + 1, if (efuse_one_byte_read(
&value) == true) padapter,
pkt.data[i*2 + 1] = value; addr + 1,
else &value) == true)
return false; pkt.data[i*2 + 1] =
value;
else
return false;
}
addr += 2;
} }
addr += 2;
} }
} }
if (addr != header_addr) if (addr != header_addr)
@ -329,26 +333,29 @@ static u8 fix_header(struct _adapter *padapter, u8 header, u16 header_addr)
addr++; addr++;
/* fill original data */ /* fill original data */
for (i = 0; i < PGPKG_MAX_WORDS; i++) { for (i = 0; i < PGPKG_MAX_WORDS; i++) {
if (BIT(i) & pkt.word_en) if (BIT(i) & pkt.word_en) {
continue; efuse_one_byte_write(padapter, addr, pkt.data[i*2]);
efuse_one_byte_write(padapter, addr, pkt.data[i*2]); efuse_one_byte_write(padapter, addr+1,
efuse_one_byte_write(padapter, addr+1, pkt.data[i*2 + 1]); pkt.data[i*2 + 1]);
/* additional check */ /* additional check */
if (efuse_one_byte_read(padapter, addr, &value) == false) if (efuse_one_byte_read(padapter, addr, &value)
ret = false; == false)
else if (pkt.data[i*2] != value) { ret = false;
ret = false; else if (pkt.data[i*2] != value) {
if (0xFF == value) /* write again */ ret = false;
efuse_one_byte_write(padapter, addr, if (0xFF == value) /* write again */
pkt.data[i * 2]); efuse_one_byte_write(padapter, addr,
} pkt.data[i * 2]);
if (efuse_one_byte_read(padapter, addr+1, &value) == false) }
ret = false; if (efuse_one_byte_read(padapter, addr+1, &value) ==
else if (pkt.data[i*2 + 1] != value) { false)
ret = false; ret = false;
if (0xFF == value) /* write again */ else if (pkt.data[i*2 + 1] != value) {
efuse_one_byte_write(padapter, addr+1, ret = false;
pkt.data[i*2 + 1]); if (0xFF == value) /* write again */
efuse_one_byte_write(padapter, addr+1,
pkt.data[i*2 + 1]);
}
} }
addr += 2; addr += 2;
} }