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