Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0aeb623d authored by Ali Bahar's avatar Ali Bahar Committed by Greg Kroah-Hartman
Browse files

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



Rework efuse data handling.

Signed-off-by: default avatarAli Bahar <ali@internetDog.org>
Signed-off-by: default avatarLarry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 07a6b037
Loading
Loading
Loading
Loading
+41 −34
Original line number Diff line number Diff line
@@ -307,34 +307,39 @@ 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,
			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,
					if (efuse_one_byte_read(
							padapter,
							addr + 1,
							&value) == true)
					pkt.data[i*2 + 1] = value;
						pkt.data[i*2 + 1] =
							value;
					else
						return false;
				}
				addr += 2;
			}
		}
	}
	if (addr != header_addr)
		return false;
	addr++;
	/* fill original data */
	for (i = 0; i < PGPKG_MAX_WORDS; i++) {
		if (BIT(i) & pkt.word_en)
			continue;
		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]);
			efuse_one_byte_write(padapter, addr+1,
					pkt.data[i*2 + 1]);
			/* additional check */
		if (efuse_one_byte_read(padapter, addr, &value) == false)
			if (efuse_one_byte_read(padapter, addr, &value)
				== false)
				ret = false;
			else if (pkt.data[i*2] != value) {
				ret = false;
@@ -342,7 +347,8 @@ static u8 fix_header(struct _adapter *padapter, u8 header, u16 header_addr)
					efuse_one_byte_write(padapter, addr,
							pkt.data[i * 2]);
			}
		if (efuse_one_byte_read(padapter, addr+1, &value) == false)
			if (efuse_one_byte_read(padapter, addr+1, &value) ==
				false)
				ret = false;
			else if (pkt.data[i*2 + 1] != value) {
				ret = false;
@@ -350,6 +356,7 @@ static u8 fix_header(struct _adapter *padapter, u8 header, u16 header_addr)
					efuse_one_byte_write(padapter, addr+1,
							pkt.data[i*2 + 1]);
			}
		}
		addr += 2;
	}
	return ret;