2013-07-08 09:26:00

by Gabor Juhos

[permalink] [raw]
Subject: [PATCH v2 0/5] rt2800lib: add support for extended EEPROM of three-cain devices

Gabor Juhos (5):
rt2x00: rt2800lib: introduce rt2800_eeprom_word enum
rt2x00: rt2800lib: introduce local EEPROM access functions
rt2x00: rt2800lib: introduce rt2800_eeprom_read_from_array helper
rt2x00: rt2800lib: introduce rt2800_eeprom_word_index helper
rt2x00: rt2800lib: add EEPROM map for the RT3593 chipset

drivers/net/wireless/rt2x00/rt2800.h | 87 +++++----
drivers/net/wireless/rt2x00/rt2800lib.c | 305 +++++++++++++++++++++++--------
2 files changed, 279 insertions(+), 113 deletions(-)

--
1.7.10



2013-07-08 09:26:04

by Gabor Juhos

[permalink] [raw]
Subject: [PATCH v2 5/5] rt2x00: rt2800lib: add EEPROM map for the RT3593 chipset

Three-chain devices are using a different
EEPROM layout than the rest of the chipsets.
Add a new map which describes the new layout
and use that for the RT3593 chipset.

The index values has been computed from the
EEPROM_EXT_* defines, which can be found in
the 'include/chip/rt3593.h' file in the
Ralink DPO_RT5572_LinuxSTA_2.6.0.1_20120629
driver.

Signed-off-by: Gabor Juhos <[email protected]>
Acked-by: Stanislaw Gruszka <[email protected]>
---
Changes since v1: ---
---
drivers/net/wireless/rt2x00/rt2800.h | 6 ++++
drivers/net/wireless/rt2x00/rt2800lib.c | 48 ++++++++++++++++++++++++++++++-
2 files changed, 53 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
index bc5c695..9216834 100644
--- a/drivers/net/wireless/rt2x00/rt2800.h
+++ b/drivers/net/wireless/rt2x00/rt2800.h
@@ -2244,6 +2244,12 @@ enum rt2800_eeprom_word {
EEPROM_TSSI_BOUND_A5,
EEPROM_TXPOWER_BYRATE,
EEPROM_BBP_START,
+
+ /* IDs for extended EEPROM format used by three-chain devices */
+ EEPROM_EXT_LNA2,
+ EEPROM_EXT_TXPOWER_BG3,
+ EEPROM_EXT_TXPOWER_A3,
+
/* New values must be added before this */
EEPROM_WORD_COUNT
};
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 41a34de4a..d325ca2 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -261,6 +261,48 @@ static const unsigned int rt2800_eeprom_map[EEPROM_WORD_COUNT] = {
[EEPROM_BBP_START] = 0x0078,
};

+static const unsigned int rt2800_eeprom_map_ext[EEPROM_WORD_COUNT] = {
+ [EEPROM_CHIP_ID] = 0x0000,
+ [EEPROM_VERSION] = 0x0001,
+ [EEPROM_MAC_ADDR_0] = 0x0002,
+ [EEPROM_MAC_ADDR_1] = 0x0003,
+ [EEPROM_MAC_ADDR_2] = 0x0004,
+ [EEPROM_NIC_CONF0] = 0x001a,
+ [EEPROM_NIC_CONF1] = 0x001b,
+ [EEPROM_NIC_CONF2] = 0x001c,
+ [EEPROM_EIRP_MAX_TX_POWER] = 0x0020,
+ [EEPROM_FREQ] = 0x0022,
+ [EEPROM_LED_AG_CONF] = 0x0023,
+ [EEPROM_LED_ACT_CONF] = 0x0024,
+ [EEPROM_LED_POLARITY] = 0x0025,
+ [EEPROM_LNA] = 0x0026,
+ [EEPROM_EXT_LNA2] = 0x0027,
+ [EEPROM_RSSI_BG] = 0x0028,
+ [EEPROM_TXPOWER_DELTA] = 0x0028, /* Overlaps with RSSI_BG */
+ [EEPROM_RSSI_BG2] = 0x0029,
+ [EEPROM_TXMIXER_GAIN_BG] = 0x0029, /* Overlaps with RSSI_BG2 */
+ [EEPROM_RSSI_A] = 0x002a,
+ [EEPROM_RSSI_A2] = 0x002b,
+ [EEPROM_TXMIXER_GAIN_A] = 0x002b, /* Overlaps with RSSI_A2 */
+ [EEPROM_TXPOWER_BG1] = 0x0030,
+ [EEPROM_TXPOWER_BG2] = 0x0037,
+ [EEPROM_EXT_TXPOWER_BG3] = 0x003e,
+ [EEPROM_TSSI_BOUND_BG1] = 0x0045,
+ [EEPROM_TSSI_BOUND_BG2] = 0x0046,
+ [EEPROM_TSSI_BOUND_BG3] = 0x0047,
+ [EEPROM_TSSI_BOUND_BG4] = 0x0048,
+ [EEPROM_TSSI_BOUND_BG5] = 0x0049,
+ [EEPROM_TXPOWER_A1] = 0x004b,
+ [EEPROM_TXPOWER_A2] = 0x0065,
+ [EEPROM_EXT_TXPOWER_A3] = 0x007f,
+ [EEPROM_TSSI_BOUND_A1] = 0x009a,
+ [EEPROM_TSSI_BOUND_A2] = 0x009b,
+ [EEPROM_TSSI_BOUND_A3] = 0x009c,
+ [EEPROM_TSSI_BOUND_A4] = 0x009d,
+ [EEPROM_TSSI_BOUND_A5] = 0x009e,
+ [EEPROM_TXPOWER_BYRATE] = 0x00a0,
+};
+
static unsigned int rt2800_eeprom_word_index(struct rt2x00_dev *rt2x00dev,
const enum rt2800_eeprom_word word)
{
@@ -272,7 +314,11 @@ static unsigned int rt2800_eeprom_word_index(struct rt2x00_dev *rt2x00dev,
wiphy_name(rt2x00dev->hw->wiphy), word))
return 0;

- map = rt2800_eeprom_map;
+ if (rt2x00_rt(rt2x00dev, RT3593))
+ map = rt2800_eeprom_map_ext;
+ else
+ map = rt2800_eeprom_map;
+
index = map[word];

/* Index 0 is valid only for EEPROM_CHIP_ID.
--
1.7.10


2013-07-08 09:59:50

by Gertjan van Wingerde

[permalink] [raw]
Subject: Re: [PATCH v2 1/5] rt2x00: rt2800lib: introduce rt2800_eeprom_word enum

On Mon, Jul 8, 2013 at 11:25 AM, Gabor Juhos <[email protected]> wrote:
> The patch converts the EEPROM_* word address defines
> into new enum values. The new enum type will be used
> by new functions which will be introduced in subsequent
> changes.
>
> The patch contains no functional changes.
>
> Signed-off-by: Gabor Juhos <[email protected]>
> Acked-by: Stanislaw Gruszka <[email protected]>

Acked-by: Gertjan van Wingerde <[email protected]>

> ---
> Changes since v1: ---
> ---
> drivers/net/wireless/rt2x00/rt2800.h | 79 +++++++++++++++++-----------------
> 1 file changed, 39 insertions(+), 40 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
> index d78c495..0647039 100644
> --- a/drivers/net/wireless/rt2x00/rt2800.h
> +++ b/drivers/net/wireless/rt2x00/rt2800.h
> @@ -2206,28 +2206,59 @@ struct mac_iveiv_entry {
> * The wordsize of the EEPROM is 16 bits.
> */
>
> -/*
> - * Chip ID
> - */
> -#define EEPROM_CHIP_ID 0x0000
> +enum rt2800_eeprom_word {
> + EEPROM_CHIP_ID = 0x0000,
> + EEPROM_VERSION = 0x0001,
> + EEPROM_MAC_ADDR_0 = 0x0002,
> + EEPROM_MAC_ADDR_1 = 0x0003,
> + EEPROM_MAC_ADDR_2 = 0x0004,
> + EEPROM_NIC_CONF0 = 0x001a,
> + EEPROM_NIC_CONF1 = 0x001b,
> + EEPROM_FREQ = 0x001d,
> + EEPROM_LED_AG_CONF = 0x001e,
> + EEPROM_LED_ACT_CONF = 0x001f,
> + EEPROM_LED_POLARITY = 0x0020,
> + EEPROM_NIC_CONF2 = 0x0021,
> + EEPROM_LNA = 0x0022,
> + EEPROM_RSSI_BG = 0x0023,
> + EEPROM_RSSI_BG2 = 0x0024,
> + EEPROM_TXMIXER_GAIN_BG = 0x0024, /* overlaps with RSSI_BG2 */
> + EEPROM_RSSI_A = 0x0025,
> + EEPROM_RSSI_A2 = 0x0026,
> + EEPROM_TXMIXER_GAIN_A = 0x0026, /* overlaps with RSSI_A2 */
> + EEPROM_EIRP_MAX_TX_POWER = 0x0027,
> + EEPROM_TXPOWER_DELTA = 0x0028,
> + EEPROM_TXPOWER_BG1 = 0x0029,
> + EEPROM_TXPOWER_BG2 = 0x0030,
> + EEPROM_TSSI_BOUND_BG1 = 0x0037,
> + EEPROM_TSSI_BOUND_BG2 = 0x0038,
> + EEPROM_TSSI_BOUND_BG3 = 0x0039,
> + EEPROM_TSSI_BOUND_BG4 = 0x003a,
> + EEPROM_TSSI_BOUND_BG5 = 0x003b,
> + EEPROM_TXPOWER_A1 = 0x003c,
> + EEPROM_TXPOWER_A2 = 0x0053,
> + EEPROM_TSSI_BOUND_A1 = 0x006a,
> + EEPROM_TSSI_BOUND_A2 = 0x006b,
> + EEPROM_TSSI_BOUND_A3 = 0x006c,
> + EEPROM_TSSI_BOUND_A4 = 0x006d,
> + EEPROM_TSSI_BOUND_A5 = 0x006e,
> + EEPROM_TXPOWER_BYRATE = 0x006f,
> + EEPROM_BBP_START = 0x0078,
> +};
>
> /*
> * EEPROM Version
> */
> -#define EEPROM_VERSION 0x0001
> #define EEPROM_VERSION_FAE FIELD16(0x00ff)
> #define EEPROM_VERSION_VERSION FIELD16(0xff00)
>
> /*
> * HW MAC address.
> */
> -#define EEPROM_MAC_ADDR_0 0x0002
> #define EEPROM_MAC_ADDR_BYTE0 FIELD16(0x00ff)
> #define EEPROM_MAC_ADDR_BYTE1 FIELD16(0xff00)
> -#define EEPROM_MAC_ADDR_1 0x0003
> #define EEPROM_MAC_ADDR_BYTE2 FIELD16(0x00ff)
> #define EEPROM_MAC_ADDR_BYTE3 FIELD16(0xff00)
> -#define EEPROM_MAC_ADDR_2 0x0004
> #define EEPROM_MAC_ADDR_BYTE4 FIELD16(0x00ff)
> #define EEPROM_MAC_ADDR_BYTE5 FIELD16(0xff00)
>
> @@ -2237,7 +2268,6 @@ struct mac_iveiv_entry {
> * TXPATH: 1: 1T, 2: 2T, 3: 3T
> * RF_TYPE: RFIC type
> */
> -#define EEPROM_NIC_CONF0 0x001a
> #define EEPROM_NIC_CONF0_RXPATH FIELD16(0x000f)
> #define EEPROM_NIC_CONF0_TXPATH FIELD16(0x00f0)
> #define EEPROM_NIC_CONF0_RF_TYPE FIELD16(0x0f00)
> @@ -2261,7 +2291,6 @@ struct mac_iveiv_entry {
> * BT_COEXIST: 0: disable, 1: enable
> * DAC_TEST: 0: disable, 1: enable
> */
> -#define EEPROM_NIC_CONF1 0x001b
> #define EEPROM_NIC_CONF1_HW_RADIO FIELD16(0x0001)
> #define EEPROM_NIC_CONF1_EXTERNAL_TX_ALC FIELD16(0x0002)
> #define EEPROM_NIC_CONF1_EXTERNAL_LNA_2G FIELD16(0x0004)
> @@ -2281,7 +2310,6 @@ struct mac_iveiv_entry {
> /*
> * EEPROM frequency
> */
> -#define EEPROM_FREQ 0x001d
> #define EEPROM_FREQ_OFFSET FIELD16(0x00ff)
> #define EEPROM_FREQ_LED_MODE FIELD16(0x7f00)
> #define EEPROM_FREQ_LED_POLARITY FIELD16(0x1000)
> @@ -2298,9 +2326,6 @@ struct mac_iveiv_entry {
> * POLARITY_GPIO_4: Polarity GPIO4 setting.
> * LED_MODE: Led mode.
> */
> -#define EEPROM_LED_AG_CONF 0x001e
> -#define EEPROM_LED_ACT_CONF 0x001f
> -#define EEPROM_LED_POLARITY 0x0020
> #define EEPROM_LED_POLARITY_RDY_BG FIELD16(0x0001)
> #define EEPROM_LED_POLARITY_RDY_A FIELD16(0x0002)
> #define EEPROM_LED_POLARITY_ACT FIELD16(0x0004)
> @@ -2317,7 +2342,6 @@ struct mac_iveiv_entry {
> * TX_STREAM: 0: Reserved, 1: 1 Stream, 2: 2 Stream
> * CRYSTAL: 00: Reserved, 01: One crystal, 10: Two crystal, 11: Reserved
> */
> -#define EEPROM_NIC_CONF2 0x0021
> #define EEPROM_NIC_CONF2_RX_STREAM FIELD16(0x000f)
> #define EEPROM_NIC_CONF2_TX_STREAM FIELD16(0x00f0)
> #define EEPROM_NIC_CONF2_CRYSTAL FIELD16(0x0600)
> @@ -2325,54 +2349,46 @@ struct mac_iveiv_entry {
> /*
> * EEPROM LNA
> */
> -#define EEPROM_LNA 0x0022
> #define EEPROM_LNA_BG FIELD16(0x00ff)
> #define EEPROM_LNA_A0 FIELD16(0xff00)
>
> /*
> * EEPROM RSSI BG offset
> */
> -#define EEPROM_RSSI_BG 0x0023
> #define EEPROM_RSSI_BG_OFFSET0 FIELD16(0x00ff)
> #define EEPROM_RSSI_BG_OFFSET1 FIELD16(0xff00)
>
> /*
> * EEPROM RSSI BG2 offset
> */
> -#define EEPROM_RSSI_BG2 0x0024
> #define EEPROM_RSSI_BG2_OFFSET2 FIELD16(0x00ff)
> #define EEPROM_RSSI_BG2_LNA_A1 FIELD16(0xff00)
>
> /*
> * EEPROM TXMIXER GAIN BG offset (note overlaps with EEPROM RSSI BG2).
> */
> -#define EEPROM_TXMIXER_GAIN_BG 0x0024
> #define EEPROM_TXMIXER_GAIN_BG_VAL FIELD16(0x0007)
>
> /*
> * EEPROM RSSI A offset
> */
> -#define EEPROM_RSSI_A 0x0025
> #define EEPROM_RSSI_A_OFFSET0 FIELD16(0x00ff)
> #define EEPROM_RSSI_A_OFFSET1 FIELD16(0xff00)
>
> /*
> * EEPROM RSSI A2 offset
> */
> -#define EEPROM_RSSI_A2 0x0026
> #define EEPROM_RSSI_A2_OFFSET2 FIELD16(0x00ff)
> #define EEPROM_RSSI_A2_LNA_A2 FIELD16(0xff00)
>
> /*
> * EEPROM TXMIXER GAIN A offset (note overlaps with EEPROM RSSI A2).
> */
> -#define EEPROM_TXMIXER_GAIN_A 0x0026
> #define EEPROM_TXMIXER_GAIN_A_VAL FIELD16(0x0007)
>
> /*
> * EEPROM EIRP Maximum TX power values(unit: dbm)
> */
> -#define EEPROM_EIRP_MAX_TX_POWER 0x0027
> #define EEPROM_EIRP_MAX_TX_POWER_2GHZ FIELD16(0x00ff)
> #define EEPROM_EIRP_MAX_TX_POWER_5GHZ FIELD16(0xff00)
>
> @@ -2383,7 +2399,6 @@ struct mac_iveiv_entry {
> * TYPE: 1: Plus the delta value, 0: minus the delta value
> * ENABLE: enable tx power compensation for 40BW
> */
> -#define EEPROM_TXPOWER_DELTA 0x0028
> #define EEPROM_TXPOWER_DELTA_VALUE_2G FIELD16(0x003f)
> #define EEPROM_TXPOWER_DELTA_TYPE_2G FIELD16(0x0040)
> #define EEPROM_TXPOWER_DELTA_ENABLE_2G FIELD16(0x0080)
> @@ -2394,8 +2409,6 @@ struct mac_iveiv_entry {
> /*
> * EEPROM TXPOWER 802.11BG
> */
> -#define EEPROM_TXPOWER_BG1 0x0029
> -#define EEPROM_TXPOWER_BG2 0x0030
> #define EEPROM_TXPOWER_BG_SIZE 7
> #define EEPROM_TXPOWER_BG_1 FIELD16(0x00ff)
> #define EEPROM_TXPOWER_BG_2 FIELD16(0xff00)
> @@ -2407,7 +2420,6 @@ struct mac_iveiv_entry {
> * MINUS3: If the actual TSSI is below this boundary, tx power needs to be
> * reduced by (agc_step * -3)
> */
> -#define EEPROM_TSSI_BOUND_BG1 0x0037
> #define EEPROM_TSSI_BOUND_BG1_MINUS4 FIELD16(0x00ff)
> #define EEPROM_TSSI_BOUND_BG1_MINUS3 FIELD16(0xff00)
>
> @@ -2418,7 +2430,6 @@ struct mac_iveiv_entry {
> * MINUS1: If the actual TSSI is below this boundary, tx power needs to be
> * reduced by (agc_step * -1)
> */
> -#define EEPROM_TSSI_BOUND_BG2 0x0038
> #define EEPROM_TSSI_BOUND_BG2_MINUS2 FIELD16(0x00ff)
> #define EEPROM_TSSI_BOUND_BG2_MINUS1 FIELD16(0xff00)
>
> @@ -2428,7 +2439,6 @@ struct mac_iveiv_entry {
> * PLUS1: If the actual TSSI is above this boundary, tx power needs to be
> * increased by (agc_step * 1)
> */
> -#define EEPROM_TSSI_BOUND_BG3 0x0039
> #define EEPROM_TSSI_BOUND_BG3_REF FIELD16(0x00ff)
> #define EEPROM_TSSI_BOUND_BG3_PLUS1 FIELD16(0xff00)
>
> @@ -2439,7 +2449,6 @@ struct mac_iveiv_entry {
> * PLUS3: If the actual TSSI is above this boundary, tx power needs to be
> * increased by (agc_step * 3)
> */
> -#define EEPROM_TSSI_BOUND_BG4 0x003a
> #define EEPROM_TSSI_BOUND_BG4_PLUS2 FIELD16(0x00ff)
> #define EEPROM_TSSI_BOUND_BG4_PLUS3 FIELD16(0xff00)
>
> @@ -2449,15 +2458,12 @@ struct mac_iveiv_entry {
> * increased by (agc_step * 4)
> * AGC_STEP: Temperature compensation step.
> */
> -#define EEPROM_TSSI_BOUND_BG5 0x003b
> #define EEPROM_TSSI_BOUND_BG5_PLUS4 FIELD16(0x00ff)
> #define EEPROM_TSSI_BOUND_BG5_AGC_STEP FIELD16(0xff00)
>
> /*
> * EEPROM TXPOWER 802.11A
> */
> -#define EEPROM_TXPOWER_A1 0x003c
> -#define EEPROM_TXPOWER_A2 0x0053
> #define EEPROM_TXPOWER_A_SIZE 6
> #define EEPROM_TXPOWER_A_1 FIELD16(0x00ff)
> #define EEPROM_TXPOWER_A_2 FIELD16(0xff00)
> @@ -2469,7 +2475,6 @@ struct mac_iveiv_entry {
> * MINUS3: If the actual TSSI is below this boundary, tx power needs to be
> * reduced by (agc_step * -3)
> */
> -#define EEPROM_TSSI_BOUND_A1 0x006a
> #define EEPROM_TSSI_BOUND_A1_MINUS4 FIELD16(0x00ff)
> #define EEPROM_TSSI_BOUND_A1_MINUS3 FIELD16(0xff00)
>
> @@ -2480,7 +2485,6 @@ struct mac_iveiv_entry {
> * MINUS1: If the actual TSSI is below this boundary, tx power needs to be
> * reduced by (agc_step * -1)
> */
> -#define EEPROM_TSSI_BOUND_A2 0x006b
> #define EEPROM_TSSI_BOUND_A2_MINUS2 FIELD16(0x00ff)
> #define EEPROM_TSSI_BOUND_A2_MINUS1 FIELD16(0xff00)
>
> @@ -2490,7 +2494,6 @@ struct mac_iveiv_entry {
> * PLUS1: If the actual TSSI is above this boundary, tx power needs to be
> * increased by (agc_step * 1)
> */
> -#define EEPROM_TSSI_BOUND_A3 0x006c
> #define EEPROM_TSSI_BOUND_A3_REF FIELD16(0x00ff)
> #define EEPROM_TSSI_BOUND_A3_PLUS1 FIELD16(0xff00)
>
> @@ -2501,7 +2504,6 @@ struct mac_iveiv_entry {
> * PLUS3: If the actual TSSI is above this boundary, tx power needs to be
> * increased by (agc_step * 3)
> */
> -#define EEPROM_TSSI_BOUND_A4 0x006d
> #define EEPROM_TSSI_BOUND_A4_PLUS2 FIELD16(0x00ff)
> #define EEPROM_TSSI_BOUND_A4_PLUS3 FIELD16(0xff00)
>
> @@ -2511,14 +2513,12 @@ struct mac_iveiv_entry {
> * increased by (agc_step * 4)
> * AGC_STEP: Temperature compensation step.
> */
> -#define EEPROM_TSSI_BOUND_A5 0x006e
> #define EEPROM_TSSI_BOUND_A5_PLUS4 FIELD16(0x00ff)
> #define EEPROM_TSSI_BOUND_A5_AGC_STEP FIELD16(0xff00)
>
> /*
> * EEPROM TXPOWER by rate: tx power per tx rate for HT20 mode
> */
> -#define EEPROM_TXPOWER_BYRATE 0x006f
> #define EEPROM_TXPOWER_BYRATE_SIZE 9
>
> #define EEPROM_TXPOWER_BYRATE_RATE0 FIELD16(0x000f)
> @@ -2529,7 +2529,6 @@ struct mac_iveiv_entry {
> /*
> * EEPROM BBP.
> */
> -#define EEPROM_BBP_START 0x0078
> #define EEPROM_BBP_SIZE 16
> #define EEPROM_BBP_VALUE FIELD16(0x00ff)
> #define EEPROM_BBP_REG_ID FIELD16(0xff00)
> --
> 1.7.10
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html



--
---
Gertjan

2013-07-08 09:26:01

by Gabor Juhos

[permalink] [raw]
Subject: [PATCH v2 1/5] rt2x00: rt2800lib: introduce rt2800_eeprom_word enum

The patch converts the EEPROM_* word address defines
into new enum values. The new enum type will be used
by new functions which will be introduced in subsequent
changes.

The patch contains no functional changes.

Signed-off-by: Gabor Juhos <[email protected]>
Acked-by: Stanislaw Gruszka <[email protected]>
---
Changes since v1: ---
---
drivers/net/wireless/rt2x00/rt2800.h | 79 +++++++++++++++++-----------------
1 file changed, 39 insertions(+), 40 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
index d78c495..0647039 100644
--- a/drivers/net/wireless/rt2x00/rt2800.h
+++ b/drivers/net/wireless/rt2x00/rt2800.h
@@ -2206,28 +2206,59 @@ struct mac_iveiv_entry {
* The wordsize of the EEPROM is 16 bits.
*/

-/*
- * Chip ID
- */
-#define EEPROM_CHIP_ID 0x0000
+enum rt2800_eeprom_word {
+ EEPROM_CHIP_ID = 0x0000,
+ EEPROM_VERSION = 0x0001,
+ EEPROM_MAC_ADDR_0 = 0x0002,
+ EEPROM_MAC_ADDR_1 = 0x0003,
+ EEPROM_MAC_ADDR_2 = 0x0004,
+ EEPROM_NIC_CONF0 = 0x001a,
+ EEPROM_NIC_CONF1 = 0x001b,
+ EEPROM_FREQ = 0x001d,
+ EEPROM_LED_AG_CONF = 0x001e,
+ EEPROM_LED_ACT_CONF = 0x001f,
+ EEPROM_LED_POLARITY = 0x0020,
+ EEPROM_NIC_CONF2 = 0x0021,
+ EEPROM_LNA = 0x0022,
+ EEPROM_RSSI_BG = 0x0023,
+ EEPROM_RSSI_BG2 = 0x0024,
+ EEPROM_TXMIXER_GAIN_BG = 0x0024, /* overlaps with RSSI_BG2 */
+ EEPROM_RSSI_A = 0x0025,
+ EEPROM_RSSI_A2 = 0x0026,
+ EEPROM_TXMIXER_GAIN_A = 0x0026, /* overlaps with RSSI_A2 */
+ EEPROM_EIRP_MAX_TX_POWER = 0x0027,
+ EEPROM_TXPOWER_DELTA = 0x0028,
+ EEPROM_TXPOWER_BG1 = 0x0029,
+ EEPROM_TXPOWER_BG2 = 0x0030,
+ EEPROM_TSSI_BOUND_BG1 = 0x0037,
+ EEPROM_TSSI_BOUND_BG2 = 0x0038,
+ EEPROM_TSSI_BOUND_BG3 = 0x0039,
+ EEPROM_TSSI_BOUND_BG4 = 0x003a,
+ EEPROM_TSSI_BOUND_BG5 = 0x003b,
+ EEPROM_TXPOWER_A1 = 0x003c,
+ EEPROM_TXPOWER_A2 = 0x0053,
+ EEPROM_TSSI_BOUND_A1 = 0x006a,
+ EEPROM_TSSI_BOUND_A2 = 0x006b,
+ EEPROM_TSSI_BOUND_A3 = 0x006c,
+ EEPROM_TSSI_BOUND_A4 = 0x006d,
+ EEPROM_TSSI_BOUND_A5 = 0x006e,
+ EEPROM_TXPOWER_BYRATE = 0x006f,
+ EEPROM_BBP_START = 0x0078,
+};

/*
* EEPROM Version
*/
-#define EEPROM_VERSION 0x0001
#define EEPROM_VERSION_FAE FIELD16(0x00ff)
#define EEPROM_VERSION_VERSION FIELD16(0xff00)

/*
* HW MAC address.
*/
-#define EEPROM_MAC_ADDR_0 0x0002
#define EEPROM_MAC_ADDR_BYTE0 FIELD16(0x00ff)
#define EEPROM_MAC_ADDR_BYTE1 FIELD16(0xff00)
-#define EEPROM_MAC_ADDR_1 0x0003
#define EEPROM_MAC_ADDR_BYTE2 FIELD16(0x00ff)
#define EEPROM_MAC_ADDR_BYTE3 FIELD16(0xff00)
-#define EEPROM_MAC_ADDR_2 0x0004
#define EEPROM_MAC_ADDR_BYTE4 FIELD16(0x00ff)
#define EEPROM_MAC_ADDR_BYTE5 FIELD16(0xff00)

@@ -2237,7 +2268,6 @@ struct mac_iveiv_entry {
* TXPATH: 1: 1T, 2: 2T, 3: 3T
* RF_TYPE: RFIC type
*/
-#define EEPROM_NIC_CONF0 0x001a
#define EEPROM_NIC_CONF0_RXPATH FIELD16(0x000f)
#define EEPROM_NIC_CONF0_TXPATH FIELD16(0x00f0)
#define EEPROM_NIC_CONF0_RF_TYPE FIELD16(0x0f00)
@@ -2261,7 +2291,6 @@ struct mac_iveiv_entry {
* BT_COEXIST: 0: disable, 1: enable
* DAC_TEST: 0: disable, 1: enable
*/
-#define EEPROM_NIC_CONF1 0x001b
#define EEPROM_NIC_CONF1_HW_RADIO FIELD16(0x0001)
#define EEPROM_NIC_CONF1_EXTERNAL_TX_ALC FIELD16(0x0002)
#define EEPROM_NIC_CONF1_EXTERNAL_LNA_2G FIELD16(0x0004)
@@ -2281,7 +2310,6 @@ struct mac_iveiv_entry {
/*
* EEPROM frequency
*/
-#define EEPROM_FREQ 0x001d
#define EEPROM_FREQ_OFFSET FIELD16(0x00ff)
#define EEPROM_FREQ_LED_MODE FIELD16(0x7f00)
#define EEPROM_FREQ_LED_POLARITY FIELD16(0x1000)
@@ -2298,9 +2326,6 @@ struct mac_iveiv_entry {
* POLARITY_GPIO_4: Polarity GPIO4 setting.
* LED_MODE: Led mode.
*/
-#define EEPROM_LED_AG_CONF 0x001e
-#define EEPROM_LED_ACT_CONF 0x001f
-#define EEPROM_LED_POLARITY 0x0020
#define EEPROM_LED_POLARITY_RDY_BG FIELD16(0x0001)
#define EEPROM_LED_POLARITY_RDY_A FIELD16(0x0002)
#define EEPROM_LED_POLARITY_ACT FIELD16(0x0004)
@@ -2317,7 +2342,6 @@ struct mac_iveiv_entry {
* TX_STREAM: 0: Reserved, 1: 1 Stream, 2: 2 Stream
* CRYSTAL: 00: Reserved, 01: One crystal, 10: Two crystal, 11: Reserved
*/
-#define EEPROM_NIC_CONF2 0x0021
#define EEPROM_NIC_CONF2_RX_STREAM FIELD16(0x000f)
#define EEPROM_NIC_CONF2_TX_STREAM FIELD16(0x00f0)
#define EEPROM_NIC_CONF2_CRYSTAL FIELD16(0x0600)
@@ -2325,54 +2349,46 @@ struct mac_iveiv_entry {
/*
* EEPROM LNA
*/
-#define EEPROM_LNA 0x0022
#define EEPROM_LNA_BG FIELD16(0x00ff)
#define EEPROM_LNA_A0 FIELD16(0xff00)

/*
* EEPROM RSSI BG offset
*/
-#define EEPROM_RSSI_BG 0x0023
#define EEPROM_RSSI_BG_OFFSET0 FIELD16(0x00ff)
#define EEPROM_RSSI_BG_OFFSET1 FIELD16(0xff00)

/*
* EEPROM RSSI BG2 offset
*/
-#define EEPROM_RSSI_BG2 0x0024
#define EEPROM_RSSI_BG2_OFFSET2 FIELD16(0x00ff)
#define EEPROM_RSSI_BG2_LNA_A1 FIELD16(0xff00)

/*
* EEPROM TXMIXER GAIN BG offset (note overlaps with EEPROM RSSI BG2).
*/
-#define EEPROM_TXMIXER_GAIN_BG 0x0024
#define EEPROM_TXMIXER_GAIN_BG_VAL FIELD16(0x0007)

/*
* EEPROM RSSI A offset
*/
-#define EEPROM_RSSI_A 0x0025
#define EEPROM_RSSI_A_OFFSET0 FIELD16(0x00ff)
#define EEPROM_RSSI_A_OFFSET1 FIELD16(0xff00)

/*
* EEPROM RSSI A2 offset
*/
-#define EEPROM_RSSI_A2 0x0026
#define EEPROM_RSSI_A2_OFFSET2 FIELD16(0x00ff)
#define EEPROM_RSSI_A2_LNA_A2 FIELD16(0xff00)

/*
* EEPROM TXMIXER GAIN A offset (note overlaps with EEPROM RSSI A2).
*/
-#define EEPROM_TXMIXER_GAIN_A 0x0026
#define EEPROM_TXMIXER_GAIN_A_VAL FIELD16(0x0007)

/*
* EEPROM EIRP Maximum TX power values(unit: dbm)
*/
-#define EEPROM_EIRP_MAX_TX_POWER 0x0027
#define EEPROM_EIRP_MAX_TX_POWER_2GHZ FIELD16(0x00ff)
#define EEPROM_EIRP_MAX_TX_POWER_5GHZ FIELD16(0xff00)

@@ -2383,7 +2399,6 @@ struct mac_iveiv_entry {
* TYPE: 1: Plus the delta value, 0: minus the delta value
* ENABLE: enable tx power compensation for 40BW
*/
-#define EEPROM_TXPOWER_DELTA 0x0028
#define EEPROM_TXPOWER_DELTA_VALUE_2G FIELD16(0x003f)
#define EEPROM_TXPOWER_DELTA_TYPE_2G FIELD16(0x0040)
#define EEPROM_TXPOWER_DELTA_ENABLE_2G FIELD16(0x0080)
@@ -2394,8 +2409,6 @@ struct mac_iveiv_entry {
/*
* EEPROM TXPOWER 802.11BG
*/
-#define EEPROM_TXPOWER_BG1 0x0029
-#define EEPROM_TXPOWER_BG2 0x0030
#define EEPROM_TXPOWER_BG_SIZE 7
#define EEPROM_TXPOWER_BG_1 FIELD16(0x00ff)
#define EEPROM_TXPOWER_BG_2 FIELD16(0xff00)
@@ -2407,7 +2420,6 @@ struct mac_iveiv_entry {
* MINUS3: If the actual TSSI is below this boundary, tx power needs to be
* reduced by (agc_step * -3)
*/
-#define EEPROM_TSSI_BOUND_BG1 0x0037
#define EEPROM_TSSI_BOUND_BG1_MINUS4 FIELD16(0x00ff)
#define EEPROM_TSSI_BOUND_BG1_MINUS3 FIELD16(0xff00)

@@ -2418,7 +2430,6 @@ struct mac_iveiv_entry {
* MINUS1: If the actual TSSI is below this boundary, tx power needs to be
* reduced by (agc_step * -1)
*/
-#define EEPROM_TSSI_BOUND_BG2 0x0038
#define EEPROM_TSSI_BOUND_BG2_MINUS2 FIELD16(0x00ff)
#define EEPROM_TSSI_BOUND_BG2_MINUS1 FIELD16(0xff00)

@@ -2428,7 +2439,6 @@ struct mac_iveiv_entry {
* PLUS1: If the actual TSSI is above this boundary, tx power needs to be
* increased by (agc_step * 1)
*/
-#define EEPROM_TSSI_BOUND_BG3 0x0039
#define EEPROM_TSSI_BOUND_BG3_REF FIELD16(0x00ff)
#define EEPROM_TSSI_BOUND_BG3_PLUS1 FIELD16(0xff00)

@@ -2439,7 +2449,6 @@ struct mac_iveiv_entry {
* PLUS3: If the actual TSSI is above this boundary, tx power needs to be
* increased by (agc_step * 3)
*/
-#define EEPROM_TSSI_BOUND_BG4 0x003a
#define EEPROM_TSSI_BOUND_BG4_PLUS2 FIELD16(0x00ff)
#define EEPROM_TSSI_BOUND_BG4_PLUS3 FIELD16(0xff00)

@@ -2449,15 +2458,12 @@ struct mac_iveiv_entry {
* increased by (agc_step * 4)
* AGC_STEP: Temperature compensation step.
*/
-#define EEPROM_TSSI_BOUND_BG5 0x003b
#define EEPROM_TSSI_BOUND_BG5_PLUS4 FIELD16(0x00ff)
#define EEPROM_TSSI_BOUND_BG5_AGC_STEP FIELD16(0xff00)

/*
* EEPROM TXPOWER 802.11A
*/
-#define EEPROM_TXPOWER_A1 0x003c
-#define EEPROM_TXPOWER_A2 0x0053
#define EEPROM_TXPOWER_A_SIZE 6
#define EEPROM_TXPOWER_A_1 FIELD16(0x00ff)
#define EEPROM_TXPOWER_A_2 FIELD16(0xff00)
@@ -2469,7 +2475,6 @@ struct mac_iveiv_entry {
* MINUS3: If the actual TSSI is below this boundary, tx power needs to be
* reduced by (agc_step * -3)
*/
-#define EEPROM_TSSI_BOUND_A1 0x006a
#define EEPROM_TSSI_BOUND_A1_MINUS4 FIELD16(0x00ff)
#define EEPROM_TSSI_BOUND_A1_MINUS3 FIELD16(0xff00)

@@ -2480,7 +2485,6 @@ struct mac_iveiv_entry {
* MINUS1: If the actual TSSI is below this boundary, tx power needs to be
* reduced by (agc_step * -1)
*/
-#define EEPROM_TSSI_BOUND_A2 0x006b
#define EEPROM_TSSI_BOUND_A2_MINUS2 FIELD16(0x00ff)
#define EEPROM_TSSI_BOUND_A2_MINUS1 FIELD16(0xff00)

@@ -2490,7 +2494,6 @@ struct mac_iveiv_entry {
* PLUS1: If the actual TSSI is above this boundary, tx power needs to be
* increased by (agc_step * 1)
*/
-#define EEPROM_TSSI_BOUND_A3 0x006c
#define EEPROM_TSSI_BOUND_A3_REF FIELD16(0x00ff)
#define EEPROM_TSSI_BOUND_A3_PLUS1 FIELD16(0xff00)

@@ -2501,7 +2504,6 @@ struct mac_iveiv_entry {
* PLUS3: If the actual TSSI is above this boundary, tx power needs to be
* increased by (agc_step * 3)
*/
-#define EEPROM_TSSI_BOUND_A4 0x006d
#define EEPROM_TSSI_BOUND_A4_PLUS2 FIELD16(0x00ff)
#define EEPROM_TSSI_BOUND_A4_PLUS3 FIELD16(0xff00)

@@ -2511,14 +2513,12 @@ struct mac_iveiv_entry {
* increased by (agc_step * 4)
* AGC_STEP: Temperature compensation step.
*/
-#define EEPROM_TSSI_BOUND_A5 0x006e
#define EEPROM_TSSI_BOUND_A5_PLUS4 FIELD16(0x00ff)
#define EEPROM_TSSI_BOUND_A5_AGC_STEP FIELD16(0xff00)

/*
* EEPROM TXPOWER by rate: tx power per tx rate for HT20 mode
*/
-#define EEPROM_TXPOWER_BYRATE 0x006f
#define EEPROM_TXPOWER_BYRATE_SIZE 9

#define EEPROM_TXPOWER_BYRATE_RATE0 FIELD16(0x000f)
@@ -2529,7 +2529,6 @@ struct mac_iveiv_entry {
/*
* EEPROM BBP.
*/
-#define EEPROM_BBP_START 0x0078
#define EEPROM_BBP_SIZE 16
#define EEPROM_BBP_VALUE FIELD16(0x00ff)
#define EEPROM_BBP_REG_ID FIELD16(0xff00)
--
1.7.10


2013-07-08 09:26:02

by Gabor Juhos

[permalink] [raw]
Subject: [PATCH v2 3/5] rt2x00: rt2800lib: introduce rt2800_eeprom_read_from_array helper

Add a new helper function and use that for reading
single elements of various arrays in the EEPROM.

The patch does not change the current behaviour,
but it allows to use sequential values for the
rt2800_eeprom_word enums. The conversion will be
implemented in a subsequent change.

Signed-off-by: Gabor Juhos <[email protected]>
Acked-by: Stanislaw Gruszka <[email protected]>
---
Changes since v1: ---
---
drivers/net/wireless/rt2x00/rt2800lib.c | 23 ++++++++++++++++-------
1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 522f0b1..b59772a 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -239,6 +239,14 @@ static void rt2800_eeprom_write(struct rt2x00_dev *rt2x00dev,
rt2x00_eeprom_write(rt2x00dev, word, data);
}

+static void rt2800_eeprom_read_from_array(struct rt2x00_dev *rt2x00dev,
+ const enum rt2800_eeprom_word array,
+ unsigned int offset,
+ u16 *data)
+{
+ rt2x00_eeprom_read(rt2x00dev, array + offset, data);
+}
+
static int rt2800_enable_wlan_rt3290(struct rt2x00_dev *rt2x00dev)
{
u32 reg;
@@ -2995,8 +3003,8 @@ static u8 rt2800_compensate_txpower(struct rt2x00_dev *rt2x00dev, int is_rate_b,
* .11b data rate need add additional 4dbm
* when calculating eirp txpower.
*/
- rt2800_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + 1,
- &eeprom);
+ rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_TXPOWER_BYRATE,
+ 1, &eeprom);
criterion = rt2x00_get_field16(eeprom,
EEPROM_TXPOWER_BYRATE_RATE0);

@@ -3101,8 +3109,8 @@ static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev,
rt2800_register_read(rt2x00dev, offset, &reg);

/* read the next four txpower values */
- rt2800_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + i,
- &eeprom);
+ rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_TXPOWER_BYRATE,
+ i, &eeprom);

is_rate_b = i ? 0 : 1;
/*
@@ -3150,8 +3158,8 @@ static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev,
rt2x00_set_field32(&reg, TX_PWR_CFG_RATE3, txpower);

/* read the next four txpower values */
- rt2800_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + i + 1,
- &eeprom);
+ rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_TXPOWER_BYRATE,
+ i + 1, &eeprom);

is_rate_b = 0;
/*
@@ -4579,7 +4587,8 @@ static void rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
}

for (i = 0; i < EEPROM_BBP_SIZE; i++) {
- rt2800_eeprom_read(rt2x00dev, EEPROM_BBP_START + i, &eeprom);
+ rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_BBP_START, i,
+ &eeprom);

if (eeprom != 0xffff && eeprom != 0x0000) {
reg_id = rt2x00_get_field16(eeprom, EEPROM_BBP_REG_ID);
--
1.7.10


2013-07-08 10:02:35

by Gertjan van Wingerde

[permalink] [raw]
Subject: Re: [PATCH v2 3/5] rt2x00: rt2800lib: introduce rt2800_eeprom_read_from_array helper

On Mon, Jul 8, 2013 at 11:25 AM, Gabor Juhos <[email protected]> wrote:
> Add a new helper function and use that for reading
> single elements of various arrays in the EEPROM.
>
> The patch does not change the current behaviour,
> but it allows to use sequential values for the
> rt2800_eeprom_word enums. The conversion will be
> implemented in a subsequent change.
>
> Signed-off-by: Gabor Juhos <[email protected]>
> Acked-by: Stanislaw Gruszka <[email protected]>

Acked-by: Gertjan van Wingerde <[email protected]>

> ---
> Changes since v1: ---
> ---
> drivers/net/wireless/rt2x00/rt2800lib.c | 23 ++++++++++++++++-------
> 1 file changed, 16 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index 522f0b1..b59772a 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -239,6 +239,14 @@ static void rt2800_eeprom_write(struct rt2x00_dev *rt2x00dev,
> rt2x00_eeprom_write(rt2x00dev, word, data);
> }
>
> +static void rt2800_eeprom_read_from_array(struct rt2x00_dev *rt2x00dev,
> + const enum rt2800_eeprom_word array,
> + unsigned int offset,
> + u16 *data)
> +{
> + rt2x00_eeprom_read(rt2x00dev, array + offset, data);
> +}
> +
> static int rt2800_enable_wlan_rt3290(struct rt2x00_dev *rt2x00dev)
> {
> u32 reg;
> @@ -2995,8 +3003,8 @@ static u8 rt2800_compensate_txpower(struct rt2x00_dev *rt2x00dev, int is_rate_b,
> * .11b data rate need add additional 4dbm
> * when calculating eirp txpower.
> */
> - rt2800_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + 1,
> - &eeprom);
> + rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_TXPOWER_BYRATE,
> + 1, &eeprom);
> criterion = rt2x00_get_field16(eeprom,
> EEPROM_TXPOWER_BYRATE_RATE0);
>
> @@ -3101,8 +3109,8 @@ static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev,
> rt2800_register_read(rt2x00dev, offset, &reg);
>
> /* read the next four txpower values */
> - rt2800_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + i,
> - &eeprom);
> + rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_TXPOWER_BYRATE,
> + i, &eeprom);
>
> is_rate_b = i ? 0 : 1;
> /*
> @@ -3150,8 +3158,8 @@ static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev,
> rt2x00_set_field32(&reg, TX_PWR_CFG_RATE3, txpower);
>
> /* read the next four txpower values */
> - rt2800_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + i + 1,
> - &eeprom);
> + rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_TXPOWER_BYRATE,
> + i + 1, &eeprom);
>
> is_rate_b = 0;
> /*
> @@ -4579,7 +4587,8 @@ static void rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
> }
>
> for (i = 0; i < EEPROM_BBP_SIZE; i++) {
> - rt2800_eeprom_read(rt2x00dev, EEPROM_BBP_START + i, &eeprom);
> + rt2800_eeprom_read_from_array(rt2x00dev, EEPROM_BBP_START, i,
> + &eeprom);
>
> if (eeprom != 0xffff && eeprom != 0x0000) {
> reg_id = rt2x00_get_field16(eeprom, EEPROM_BBP_REG_ID);
> --
> 1.7.10
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html



--
---
Gertjan

2013-07-08 09:26:04

by Gabor Juhos

[permalink] [raw]
Subject: [PATCH v2 4/5] rt2x00: rt2800lib: introduce rt2800_eeprom_word_index helper

Instead of assign the offset value to the
enum directly use a new helper function to
convert a rt2800_eeprom_word enum into an
index of the rt2x00_dev->eeprom array.

The patch does not change the existing
behaviour, but makes it possible to add
support for three-chain devices which are
using a different EEPROM layout.

Signed-off-by: Gabor Juhos <[email protected]>
---
Changes since v1:
- use WARN_ONCE and remove the rt2x00_warn calls
---
drivers/net/wireless/rt2x00/rt2800.h | 76 ++++++++++++++-------------
drivers/net/wireless/rt2x00/rt2800lib.c | 87 +++++++++++++++++++++++++++++--
2 files changed, 122 insertions(+), 41 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
index 0647039..bc5c695 100644
--- a/drivers/net/wireless/rt2x00/rt2800.h
+++ b/drivers/net/wireless/rt2x00/rt2800.h
@@ -2207,43 +2207,45 @@ struct mac_iveiv_entry {
*/

enum rt2800_eeprom_word {
- EEPROM_CHIP_ID = 0x0000,
- EEPROM_VERSION = 0x0001,
- EEPROM_MAC_ADDR_0 = 0x0002,
- EEPROM_MAC_ADDR_1 = 0x0003,
- EEPROM_MAC_ADDR_2 = 0x0004,
- EEPROM_NIC_CONF0 = 0x001a,
- EEPROM_NIC_CONF1 = 0x001b,
- EEPROM_FREQ = 0x001d,
- EEPROM_LED_AG_CONF = 0x001e,
- EEPROM_LED_ACT_CONF = 0x001f,
- EEPROM_LED_POLARITY = 0x0020,
- EEPROM_NIC_CONF2 = 0x0021,
- EEPROM_LNA = 0x0022,
- EEPROM_RSSI_BG = 0x0023,
- EEPROM_RSSI_BG2 = 0x0024,
- EEPROM_TXMIXER_GAIN_BG = 0x0024, /* overlaps with RSSI_BG2 */
- EEPROM_RSSI_A = 0x0025,
- EEPROM_RSSI_A2 = 0x0026,
- EEPROM_TXMIXER_GAIN_A = 0x0026, /* overlaps with RSSI_A2 */
- EEPROM_EIRP_MAX_TX_POWER = 0x0027,
- EEPROM_TXPOWER_DELTA = 0x0028,
- EEPROM_TXPOWER_BG1 = 0x0029,
- EEPROM_TXPOWER_BG2 = 0x0030,
- EEPROM_TSSI_BOUND_BG1 = 0x0037,
- EEPROM_TSSI_BOUND_BG2 = 0x0038,
- EEPROM_TSSI_BOUND_BG3 = 0x0039,
- EEPROM_TSSI_BOUND_BG4 = 0x003a,
- EEPROM_TSSI_BOUND_BG5 = 0x003b,
- EEPROM_TXPOWER_A1 = 0x003c,
- EEPROM_TXPOWER_A2 = 0x0053,
- EEPROM_TSSI_BOUND_A1 = 0x006a,
- EEPROM_TSSI_BOUND_A2 = 0x006b,
- EEPROM_TSSI_BOUND_A3 = 0x006c,
- EEPROM_TSSI_BOUND_A4 = 0x006d,
- EEPROM_TSSI_BOUND_A5 = 0x006e,
- EEPROM_TXPOWER_BYRATE = 0x006f,
- EEPROM_BBP_START = 0x0078,
+ EEPROM_CHIP_ID = 0,
+ EEPROM_VERSION,
+ EEPROM_MAC_ADDR_0,
+ EEPROM_MAC_ADDR_1,
+ EEPROM_MAC_ADDR_2,
+ EEPROM_NIC_CONF0,
+ EEPROM_NIC_CONF1,
+ EEPROM_FREQ,
+ EEPROM_LED_AG_CONF,
+ EEPROM_LED_ACT_CONF,
+ EEPROM_LED_POLARITY,
+ EEPROM_NIC_CONF2,
+ EEPROM_LNA,
+ EEPROM_RSSI_BG,
+ EEPROM_RSSI_BG2,
+ EEPROM_TXMIXER_GAIN_BG,
+ EEPROM_RSSI_A,
+ EEPROM_RSSI_A2,
+ EEPROM_TXMIXER_GAIN_A,
+ EEPROM_EIRP_MAX_TX_POWER,
+ EEPROM_TXPOWER_DELTA,
+ EEPROM_TXPOWER_BG1,
+ EEPROM_TXPOWER_BG2,
+ EEPROM_TSSI_BOUND_BG1,
+ EEPROM_TSSI_BOUND_BG2,
+ EEPROM_TSSI_BOUND_BG3,
+ EEPROM_TSSI_BOUND_BG4,
+ EEPROM_TSSI_BOUND_BG5,
+ EEPROM_TXPOWER_A1,
+ EEPROM_TXPOWER_A2,
+ EEPROM_TSSI_BOUND_A1,
+ EEPROM_TSSI_BOUND_A2,
+ EEPROM_TSSI_BOUND_A3,
+ EEPROM_TSSI_BOUND_A4,
+ EEPROM_TSSI_BOUND_A5,
+ EEPROM_TXPOWER_BYRATE,
+ EEPROM_BBP_START,
+ /* New values must be added before this */
+ EEPROM_WORD_COUNT
};

/*
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index b59772a..41a34de4a 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -221,22 +221,98 @@ static void rt2800_rf_write(struct rt2x00_dev *rt2x00dev,
mutex_unlock(&rt2x00dev->csr_mutex);
}

+static const unsigned int rt2800_eeprom_map[EEPROM_WORD_COUNT] = {
+ [EEPROM_CHIP_ID] = 0x0000,
+ [EEPROM_VERSION] = 0x0001,
+ [EEPROM_MAC_ADDR_0] = 0x0002,
+ [EEPROM_MAC_ADDR_1] = 0x0003,
+ [EEPROM_MAC_ADDR_2] = 0x0004,
+ [EEPROM_NIC_CONF0] = 0x001a,
+ [EEPROM_NIC_CONF1] = 0x001b,
+ [EEPROM_FREQ] = 0x001d,
+ [EEPROM_LED_AG_CONF] = 0x001e,
+ [EEPROM_LED_ACT_CONF] = 0x001f,
+ [EEPROM_LED_POLARITY] = 0x0020,
+ [EEPROM_NIC_CONF2] = 0x0021,
+ [EEPROM_LNA] = 0x0022,
+ [EEPROM_RSSI_BG] = 0x0023,
+ [EEPROM_RSSI_BG2] = 0x0024,
+ [EEPROM_TXMIXER_GAIN_BG] = 0x0024, /* overlaps with RSSI_BG2 */
+ [EEPROM_RSSI_A] = 0x0025,
+ [EEPROM_RSSI_A2] = 0x0026,
+ [EEPROM_TXMIXER_GAIN_A] = 0x0026, /* overlaps with RSSI_A2 */
+ [EEPROM_EIRP_MAX_TX_POWER] = 0x0027,
+ [EEPROM_TXPOWER_DELTA] = 0x0028,
+ [EEPROM_TXPOWER_BG1] = 0x0029,
+ [EEPROM_TXPOWER_BG2] = 0x0030,
+ [EEPROM_TSSI_BOUND_BG1] = 0x0037,
+ [EEPROM_TSSI_BOUND_BG2] = 0x0038,
+ [EEPROM_TSSI_BOUND_BG3] = 0x0039,
+ [EEPROM_TSSI_BOUND_BG4] = 0x003a,
+ [EEPROM_TSSI_BOUND_BG5] = 0x003b,
+ [EEPROM_TXPOWER_A1] = 0x003c,
+ [EEPROM_TXPOWER_A2] = 0x0053,
+ [EEPROM_TSSI_BOUND_A1] = 0x006a,
+ [EEPROM_TSSI_BOUND_A2] = 0x006b,
+ [EEPROM_TSSI_BOUND_A3] = 0x006c,
+ [EEPROM_TSSI_BOUND_A4] = 0x006d,
+ [EEPROM_TSSI_BOUND_A5] = 0x006e,
+ [EEPROM_TXPOWER_BYRATE] = 0x006f,
+ [EEPROM_BBP_START] = 0x0078,
+};
+
+static unsigned int rt2800_eeprom_word_index(struct rt2x00_dev *rt2x00dev,
+ const enum rt2800_eeprom_word word)
+{
+ const unsigned int *map;
+ unsigned int index;
+
+ if (WARN_ONCE(word >= EEPROM_WORD_COUNT,
+ "%s: invalid EEPROM word %d\n",
+ wiphy_name(rt2x00dev->hw->wiphy), word))
+ return 0;
+
+ map = rt2800_eeprom_map;
+ index = map[word];
+
+ /* Index 0 is valid only for EEPROM_CHIP_ID.
+ * Otherwise it means that the offset of the
+ * given word is not initialized in the map,
+ * or that the field is not usable on the
+ * actual chipset.
+ */
+ WARN_ONCE(word != EEPROM_CHIP_ID && index == 0,
+ "%s: invalid access of EEPROM word %d\n",
+ wiphy_name(rt2x00dev->hw->wiphy), word);
+
+ return index;
+}
+
static void *rt2800_eeprom_addr(struct rt2x00_dev *rt2x00dev,
const enum rt2800_eeprom_word word)
{
- return rt2x00_eeprom_addr(rt2x00dev, word);
+ unsigned int index;
+
+ index = rt2800_eeprom_word_index(rt2x00dev, word);
+ return rt2x00_eeprom_addr(rt2x00dev, index);
}

static void rt2800_eeprom_read(struct rt2x00_dev *rt2x00dev,
const enum rt2800_eeprom_word word, u16 *data)
{
- rt2x00_eeprom_read(rt2x00dev, word, data);
+ unsigned int index;
+
+ index = rt2800_eeprom_word_index(rt2x00dev, word);
+ rt2x00_eeprom_read(rt2x00dev, index, data);
}

static void rt2800_eeprom_write(struct rt2x00_dev *rt2x00dev,
const enum rt2800_eeprom_word word, u16 data)
{
- rt2x00_eeprom_write(rt2x00dev, word, data);
+ unsigned int index;
+
+ index = rt2800_eeprom_word_index(rt2x00dev, word);
+ rt2x00_eeprom_write(rt2x00dev, index, data);
}

static void rt2800_eeprom_read_from_array(struct rt2x00_dev *rt2x00dev,
@@ -244,7 +320,10 @@ static void rt2800_eeprom_read_from_array(struct rt2x00_dev *rt2x00dev,
unsigned int offset,
u16 *data)
{
- rt2x00_eeprom_read(rt2x00dev, array + offset, data);
+ unsigned int index;
+
+ index = rt2800_eeprom_word_index(rt2x00dev, array);
+ rt2x00_eeprom_read(rt2x00dev, index + offset, data);
}

static int rt2800_enable_wlan_rt3290(struct rt2x00_dev *rt2x00dev)
--
1.7.10


2013-07-08 10:00:58

by Gertjan van Wingerde

[permalink] [raw]
Subject: Re: [PATCH v2 2/5] rt2x00: rt2800lib: introduce local EEPROM access functions

On Mon, Jul 8, 2013 at 11:25 AM, Gabor Juhos <[email protected]> wrote:
> The patch adds rt2800 specific functions for
> EEPROM data access and changes the code to use
> these instead of the generic rt2x00_eeprom_*
> variants.
>
> To avoid functional changes, the new functions
> are wrappers around the corresponding generic
> rt2x00_eeprom_* routines for now. Functional
> changes will be implemented in additional patches.
>
> Signed-off-by: Gabor Juhos <[email protected]>
> Acked-by: Stanislaw Gruszka <[email protected]>

Acked-by: Gertjan van Wingerde <[email protected]>

> ---
> Changes since v1: ---
> ---
> drivers/net/wireless/rt2x00/rt2800lib.c | 165 ++++++++++++++++++-------------
> 1 file changed, 95 insertions(+), 70 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index 1f80ea5..522f0b1 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -221,6 +221,24 @@ static void rt2800_rf_write(struct rt2x00_dev *rt2x00dev,
> mutex_unlock(&rt2x00dev->csr_mutex);
> }
>
> +static void *rt2800_eeprom_addr(struct rt2x00_dev *rt2x00dev,
> + const enum rt2800_eeprom_word word)
> +{
> + return rt2x00_eeprom_addr(rt2x00dev, word);
> +}
> +
> +static void rt2800_eeprom_read(struct rt2x00_dev *rt2x00dev,
> + const enum rt2800_eeprom_word word, u16 *data)
> +{
> + rt2x00_eeprom_read(rt2x00dev, word, data);
> +}
> +
> +static void rt2800_eeprom_write(struct rt2x00_dev *rt2x00dev,
> + const enum rt2800_eeprom_word word, u16 data)
> +{
> + rt2x00_eeprom_write(rt2x00dev, word, data);
> +}
> +
> static int rt2800_enable_wlan_rt3290(struct rt2x00_dev *rt2x00dev)
> {
> u32 reg;
> @@ -609,16 +627,16 @@ static int rt2800_agc_to_rssi(struct rt2x00_dev *rt2x00dev, u32 rxwi_w2)
> u8 offset2;
>
> if (rt2x00dev->curr_band == IEEE80211_BAND_2GHZ) {
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG, &eeprom);
> offset0 = rt2x00_get_field16(eeprom, EEPROM_RSSI_BG_OFFSET0);
> offset1 = rt2x00_get_field16(eeprom, EEPROM_RSSI_BG_OFFSET1);
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &eeprom);
> offset2 = rt2x00_get_field16(eeprom, EEPROM_RSSI_BG2_OFFSET2);
> } else {
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A, &eeprom);
> offset0 = rt2x00_get_field16(eeprom, EEPROM_RSSI_A_OFFSET0);
> offset1 = rt2x00_get_field16(eeprom, EEPROM_RSSI_A_OFFSET1);
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &eeprom);
> offset2 = rt2x00_get_field16(eeprom, EEPROM_RSSI_A2_OFFSET2);
> }
>
> @@ -890,6 +908,9 @@ const struct rt2x00debug rt2800_rt2x00debug = {
> .word_count = CSR_REG_SIZE / sizeof(u32),
> },
> .eeprom = {
> + /* NOTE: The local EEPROM access functions can't
> + * be used here, use the generic versions instead.
> + */
> .read = rt2x00_eeprom_read,
> .write = rt2x00_eeprom_write,
> .word_base = EEPROM_BASE,
> @@ -1547,7 +1568,7 @@ static void rt2800_config_3572bt_ant(struct rt2x00_dev *rt2x00dev)
> led_r_mode = rt2x00_get_field32(reg, LED_CFG_LED_POLAR) ? 0 : 3;
> if (led_g_mode != rt2x00_get_field32(reg, LED_CFG_G_LED_MODE) ||
> led_r_mode != rt2x00_get_field32(reg, LED_CFG_R_LED_MODE)) {
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_FREQ, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_FREQ, &eeprom);
> led_ctrl = rt2x00_get_field16(eeprom, EEPROM_FREQ_LED_MODE);
> if (led_ctrl == 0 || led_ctrl > 0x40) {
> rt2x00_set_field32(&reg, LED_CFG_G_LED_MODE, led_g_mode);
> @@ -1622,7 +1643,7 @@ void rt2800_config_ant(struct rt2x00_dev *rt2x00dev, struct antenna_setup *ant)
> rt2x00_rt(rt2x00dev, RT3090) ||
> rt2x00_rt(rt2x00dev, RT3352) ||
> rt2x00_rt(rt2x00dev, RT3390)) {
> - rt2x00_eeprom_read(rt2x00dev,
> + rt2800_eeprom_read(rt2x00dev,
> EEPROM_NIC_CONF1, &eeprom);
> if (rt2x00_get_field16(eeprom,
> EEPROM_NIC_CONF1_ANT_DIVERSITY))
> @@ -1659,16 +1680,16 @@ static void rt2800_config_lna_gain(struct rt2x00_dev *rt2x00dev,
> short lna_gain;
>
> if (libconf->rf.channel <= 14) {
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_LNA, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_LNA, &eeprom);
> lna_gain = rt2x00_get_field16(eeprom, EEPROM_LNA_BG);
> } else if (libconf->rf.channel <= 64) {
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_LNA, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_LNA, &eeprom);
> lna_gain = rt2x00_get_field16(eeprom, EEPROM_LNA_A0);
> } else if (libconf->rf.channel <= 128) {
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &eeprom);
> lna_gain = rt2x00_get_field16(eeprom, EEPROM_RSSI_BG2_LNA_A1);
> } else {
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &eeprom);
> lna_gain = rt2x00_get_field16(eeprom, EEPROM_RSSI_A2_LNA_A2);
> }
>
> @@ -2798,62 +2819,62 @@ static int rt2800_get_gain_calibration_delta(struct rt2x00_dev *rt2x00dev)
> * Example TSSI bounds 0xF0 0xD0 0xB5 0xA0 0x88 0x45 0x25 0x15 0x00
> */
> if (rt2x00dev->curr_band == IEEE80211_BAND_2GHZ) {
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG1, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG1, &eeprom);
> tssi_bounds[0] = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_BG1_MINUS4);
> tssi_bounds[1] = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_BG1_MINUS3);
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG2, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG2, &eeprom);
> tssi_bounds[2] = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_BG2_MINUS2);
> tssi_bounds[3] = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_BG2_MINUS1);
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG3, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG3, &eeprom);
> tssi_bounds[4] = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_BG3_REF);
> tssi_bounds[5] = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_BG3_PLUS1);
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG4, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG4, &eeprom);
> tssi_bounds[6] = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_BG4_PLUS2);
> tssi_bounds[7] = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_BG4_PLUS3);
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG5, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG5, &eeprom);
> tssi_bounds[8] = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_BG5_PLUS4);
>
> step = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_BG5_AGC_STEP);
> } else {
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A1, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A1, &eeprom);
> tssi_bounds[0] = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_A1_MINUS4);
> tssi_bounds[1] = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_A1_MINUS3);
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A2, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A2, &eeprom);
> tssi_bounds[2] = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_A2_MINUS2);
> tssi_bounds[3] = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_A2_MINUS1);
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A3, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A3, &eeprom);
> tssi_bounds[4] = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_A3_REF);
> tssi_bounds[5] = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_A3_PLUS1);
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A4, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A4, &eeprom);
> tssi_bounds[6] = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_A4_PLUS2);
> tssi_bounds[7] = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_A4_PLUS3);
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A5, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A5, &eeprom);
> tssi_bounds[8] = rt2x00_get_field16(eeprom,
> EEPROM_TSSI_BOUND_A5_PLUS4);
>
> @@ -2899,7 +2920,7 @@ static int rt2800_get_txpower_bw_comp(struct rt2x00_dev *rt2x00dev,
> u8 comp_type;
> int comp_value = 0;
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_TXPOWER_DELTA, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_TXPOWER_DELTA, &eeprom);
>
> /*
> * HT40 compensation not required.
> @@ -2974,12 +2995,12 @@ static u8 rt2800_compensate_txpower(struct rt2x00_dev *rt2x00dev, int is_rate_b,
> * .11b data rate need add additional 4dbm
> * when calculating eirp txpower.
> */
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + 1,
> + rt2800_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + 1,
> &eeprom);
> criterion = rt2x00_get_field16(eeprom,
> EEPROM_TXPOWER_BYRATE_RATE0);
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_EIRP_MAX_TX_POWER,
> + rt2800_eeprom_read(rt2x00dev, EEPROM_EIRP_MAX_TX_POWER,
> &eeprom);
>
> if (band == IEEE80211_BAND_2GHZ)
> @@ -3080,7 +3101,7 @@ static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev,
> rt2800_register_read(rt2x00dev, offset, &reg);
>
> /* read the next four txpower values */
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + i,
> + rt2800_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + i,
> &eeprom);
>
> is_rate_b = i ? 0 : 1;
> @@ -3129,7 +3150,7 @@ static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev,
> rt2x00_set_field32(&reg, TX_PWR_CFG_RATE3, txpower);
>
> /* read the next four txpower values */
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + i + 1,
> + rt2800_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + i + 1,
> &eeprom);
>
> is_rate_b = 0;
> @@ -3528,7 +3549,8 @@ static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)
> if (rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E) ||
> rt2x00_rt_rev_lt(rt2x00dev, RT3090, REV_RT3090E) ||
> rt2x00_rt_rev_lt(rt2x00dev, RT3390, REV_RT3390E)) {
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1,
> + &eeprom);
> if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF1_DAC_TEST))
> rt2800_register_write(rt2x00dev, TX_SW_CFG2,
> 0x0000002c);
> @@ -3989,7 +4011,7 @@ static void rt2800_disable_unused_dac_adc(struct rt2x00_dev *rt2x00dev)
> u8 value;
>
> rt2800_bbp_read(rt2x00dev, 138, &value);
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);
> if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_TXPATH) == 1)
> value |= 0x20;
> if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RXPATH) == 1)
> @@ -4402,7 +4424,7 @@ static void rt2800_init_bbp_53xx(struct rt2x00_dev *rt2x00dev)
>
> rt2800_disable_unused_dac_adc(rt2x00dev);
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);
> div_mode = rt2x00_get_field16(eeprom,
> EEPROM_NIC_CONF1_ANT_DIVERSITY);
> ant = (div_mode == 3) ? 1 : 0;
> @@ -4488,7 +4510,7 @@ static void rt2800_init_bbp_5592(struct rt2x00_dev *rt2x00dev)
>
> rt2800_bbp4_mac_if_ctrl(rt2x00dev);
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);
> div_mode = rt2x00_get_field16(eeprom, EEPROM_NIC_CONF1_ANT_DIVERSITY);
> ant = (div_mode == 3) ? 1 : 0;
> rt2800_bbp_read(rt2x00dev, 152, &value);
> @@ -4557,7 +4579,7 @@ static void rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
> }
>
> for (i = 0; i < EEPROM_BBP_SIZE; i++) {
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_BBP_START + i, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_BBP_START + i, &eeprom);
>
> if (eeprom != 0xffff && eeprom != 0x0000) {
> reg_id = rt2x00_get_field16(eeprom, EEPROM_BBP_REG_ID);
> @@ -4728,7 +4750,7 @@ static void rt2800_normal_mode_setup_3xxx(struct rt2x00_dev *rt2x00dev)
> if (rt2x00_rt(rt2x00dev, RT3090)) {
> /* Turn off unused DAC1 and ADC1 to reduce power consumption */
> rt2800_bbp_read(rt2x00dev, 138, &bbp);
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);
> if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RXPATH) == 1)
> rt2x00_set_field8(&bbp, BBP138_RX_ADC1, 0);
> if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_TXPATH) == 1)
> @@ -4778,7 +4800,7 @@ static void rt2800_normal_mode_setup_5xxx(struct rt2x00_dev *rt2x00dev)
>
> /* Turn off unused DAC1 and ADC1 to reduce power consumption */
> rt2800_bbp_read(rt2x00dev, 138, &reg);
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);
> if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RXPATH) == 1)
> rt2x00_set_field8(&reg, BBP138_RX_ADC1, 0);
> if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_TXPATH) == 1)
> @@ -4884,7 +4906,8 @@ static void rt2800_init_rfcsr_30xx(struct rt2x00_dev *rt2x00dev)
> rt2x00_set_field32(&reg, LDO_CFG0_BGSEL, 1);
> if (rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E) ||
> rt2x00_rt_rev_lt(rt2x00dev, RT3090, REV_RT3090E)) {
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1,
> + &eeprom);
> if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF1_DAC_TEST))
> rt2x00_set_field32(&reg, LDO_CFG0_LDO_CORE_VLEVEL, 3);
> else
> @@ -5456,15 +5479,15 @@ int rt2800_enable_radio(struct rt2x00_dev *rt2x00dev)
> /*
> * Initialize LED control
> */
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_LED_AG_CONF, &word);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_LED_AG_CONF, &word);
> rt2800_mcu_request(rt2x00dev, MCU_LED_AG_CONF, 0xff,
> word & 0xff, (word >> 8) & 0xff);
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_LED_ACT_CONF, &word);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_LED_ACT_CONF, &word);
> rt2800_mcu_request(rt2x00dev, MCU_LED_ACT_CONF, 0xff,
> word & 0xff, (word >> 8) & 0xff);
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_LED_POLARITY, &word);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_LED_POLARITY, &word);
> rt2800_mcu_request(rt2x00dev, MCU_LED_LED_POLARITY, 0xff,
> word & 0xff, (word >> 8) & 0xff);
>
> @@ -5578,18 +5601,18 @@ static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
> /*
> * Start validation of the data that has been read.
> */
> - mac = rt2x00_eeprom_addr(rt2x00dev, EEPROM_MAC_ADDR_0);
> + mac = rt2800_eeprom_addr(rt2x00dev, EEPROM_MAC_ADDR_0);
> if (!is_valid_ether_addr(mac)) {
> eth_random_addr(mac);
> rt2x00_eeprom_dbg(rt2x00dev, "MAC: %pM\n", mac);
> }
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &word);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &word);
> if (word == 0xffff) {
> rt2x00_set_field16(&word, EEPROM_NIC_CONF0_RXPATH, 2);
> rt2x00_set_field16(&word, EEPROM_NIC_CONF0_TXPATH, 1);
> rt2x00_set_field16(&word, EEPROM_NIC_CONF0_RF_TYPE, RF2820);
> - rt2x00_eeprom_write(rt2x00dev, EEPROM_NIC_CONF0, word);
> + rt2800_eeprom_write(rt2x00dev, EEPROM_NIC_CONF0, word);
> rt2x00_eeprom_dbg(rt2x00dev, "Antenna: 0x%04x\n", word);
> } else if (rt2x00_rt(rt2x00dev, RT2860) ||
> rt2x00_rt(rt2x00dev, RT2872)) {
> @@ -5598,10 +5621,10 @@ static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
> */
> if (rt2x00_get_field16(word, EEPROM_NIC_CONF0_RXPATH) > 2)
> rt2x00_set_field16(&word, EEPROM_NIC_CONF0_RXPATH, 2);
> - rt2x00_eeprom_write(rt2x00dev, EEPROM_NIC_CONF0, word);
> + rt2800_eeprom_write(rt2x00dev, EEPROM_NIC_CONF0, word);
> }
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &word);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &word);
> if (word == 0xffff) {
> rt2x00_set_field16(&word, EEPROM_NIC_CONF1_HW_RADIO, 0);
> rt2x00_set_field16(&word, EEPROM_NIC_CONF1_EXTERNAL_TX_ALC, 0);
> @@ -5618,24 +5641,24 @@ static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
> rt2x00_set_field16(&word, EEPROM_NIC_CONF1_INTERNAL_TX_ALC, 0);
> rt2x00_set_field16(&word, EEPROM_NIC_CONF1_BT_COEXIST, 0);
> rt2x00_set_field16(&word, EEPROM_NIC_CONF1_DAC_TEST, 0);
> - rt2x00_eeprom_write(rt2x00dev, EEPROM_NIC_CONF1, word);
> + rt2800_eeprom_write(rt2x00dev, EEPROM_NIC_CONF1, word);
> rt2x00_eeprom_dbg(rt2x00dev, "NIC: 0x%04x\n", word);
> }
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_FREQ, &word);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_FREQ, &word);
> if ((word & 0x00ff) == 0x00ff) {
> rt2x00_set_field16(&word, EEPROM_FREQ_OFFSET, 0);
> - rt2x00_eeprom_write(rt2x00dev, EEPROM_FREQ, word);
> + rt2800_eeprom_write(rt2x00dev, EEPROM_FREQ, word);
> rt2x00_eeprom_dbg(rt2x00dev, "Freq: 0x%04x\n", word);
> }
> if ((word & 0xff00) == 0xff00) {
> rt2x00_set_field16(&word, EEPROM_FREQ_LED_MODE,
> LED_MODE_TXRX_ACTIVITY);
> rt2x00_set_field16(&word, EEPROM_FREQ_LED_POLARITY, 0);
> - rt2x00_eeprom_write(rt2x00dev, EEPROM_FREQ, word);
> - rt2x00_eeprom_write(rt2x00dev, EEPROM_LED_AG_CONF, 0x5555);
> - rt2x00_eeprom_write(rt2x00dev, EEPROM_LED_ACT_CONF, 0x2221);
> - rt2x00_eeprom_write(rt2x00dev, EEPROM_LED_POLARITY, 0xa9f8);
> + rt2800_eeprom_write(rt2x00dev, EEPROM_FREQ, word);
> + rt2800_eeprom_write(rt2x00dev, EEPROM_LED_AG_CONF, 0x5555);
> + rt2800_eeprom_write(rt2x00dev, EEPROM_LED_ACT_CONF, 0x2221);
> + rt2800_eeprom_write(rt2x00dev, EEPROM_LED_POLARITY, 0xa9f8);
> rt2x00_eeprom_dbg(rt2x00dev, "Led Mode: 0x%04x\n", word);
> }
>
> @@ -5644,17 +5667,17 @@ static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
> * lna0 as correct value. Note that EEPROM_LNA
> * is never validated.
> */
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_LNA, &word);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_LNA, &word);
> default_lna_gain = rt2x00_get_field16(word, EEPROM_LNA_A0);
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG, &word);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG, &word);
> if (abs(rt2x00_get_field16(word, EEPROM_RSSI_BG_OFFSET0)) > 10)
> rt2x00_set_field16(&word, EEPROM_RSSI_BG_OFFSET0, 0);
> if (abs(rt2x00_get_field16(word, EEPROM_RSSI_BG_OFFSET1)) > 10)
> rt2x00_set_field16(&word, EEPROM_RSSI_BG_OFFSET1, 0);
> - rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_BG, word);
> + rt2800_eeprom_write(rt2x00dev, EEPROM_RSSI_BG, word);
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_BG, &word);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_BG, &word);
> if ((word & 0x00ff) != 0x00ff) {
> drv_data->txmixer_gain_24g =
> rt2x00_get_field16(word, EEPROM_TXMIXER_GAIN_BG_VAL);
> @@ -5662,16 +5685,16 @@ static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
> drv_data->txmixer_gain_24g = 0;
> }
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &word);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &word);
> if (abs(rt2x00_get_field16(word, EEPROM_RSSI_BG2_OFFSET2)) > 10)
> rt2x00_set_field16(&word, EEPROM_RSSI_BG2_OFFSET2, 0);
> if (rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0x00 ||
> rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0xff)
> rt2x00_set_field16(&word, EEPROM_RSSI_BG2_LNA_A1,
> default_lna_gain);
> - rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_BG2, word);
> + rt2800_eeprom_write(rt2x00dev, EEPROM_RSSI_BG2, word);
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_A, &word);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_A, &word);
> if ((word & 0x00ff) != 0x00ff) {
> drv_data->txmixer_gain_5g =
> rt2x00_get_field16(word, EEPROM_TXMIXER_GAIN_A_VAL);
> @@ -5679,21 +5702,21 @@ static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
> drv_data->txmixer_gain_5g = 0;
> }
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A, &word);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A, &word);
> if (abs(rt2x00_get_field16(word, EEPROM_RSSI_A_OFFSET0)) > 10)
> rt2x00_set_field16(&word, EEPROM_RSSI_A_OFFSET0, 0);
> if (abs(rt2x00_get_field16(word, EEPROM_RSSI_A_OFFSET1)) > 10)
> rt2x00_set_field16(&word, EEPROM_RSSI_A_OFFSET1, 0);
> - rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_A, word);
> + rt2800_eeprom_write(rt2x00dev, EEPROM_RSSI_A, word);
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &word);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &word);
> if (abs(rt2x00_get_field16(word, EEPROM_RSSI_A2_OFFSET2)) > 10)
> rt2x00_set_field16(&word, EEPROM_RSSI_A2_OFFSET2, 0);
> if (rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0x00 ||
> rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0xff)
> rt2x00_set_field16(&word, EEPROM_RSSI_A2_LNA_A2,
> default_lna_gain);
> - rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_A2, word);
> + rt2800_eeprom_write(rt2x00dev, EEPROM_RSSI_A2, word);
>
> return 0;
> }
> @@ -5707,7 +5730,7 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
> /*
> * Read EEPROM word for configuration.
> */
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);
>
> /*
> * Identify RF chipset by EEPROM value
> @@ -5717,7 +5740,7 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
> if (rt2x00_rt(rt2x00dev, RT3290) ||
> rt2x00_rt(rt2x00dev, RT5390) ||
> rt2x00_rt(rt2x00dev, RT5392))
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf);
> else
> rf = rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RF_TYPE);
>
> @@ -5757,7 +5780,7 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
> rt2x00dev->default_ant.rx_chain_num =
> rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RXPATH);
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);
>
> if (rt2x00_rt(rt2x00dev, RT3070) ||
> rt2x00_rt(rt2x00dev, RT3090) ||
> @@ -5810,7 +5833,7 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
> /*
> * Read frequency offset and RF programming sequence.
> */
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_FREQ, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_FREQ, &eeprom);
> rt2x00dev->freq_offset = rt2x00_get_field16(eeprom, EEPROM_FREQ_OFFSET);
>
> /*
> @@ -5827,7 +5850,7 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
> /*
> * Check if support EIRP tx power limit feature.
> */
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_EIRP_MAX_TX_POWER, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_EIRP_MAX_TX_POWER, &eeprom);
>
> if (rt2x00_get_field16(eeprom, EEPROM_EIRP_MAX_TX_POWER_2GHZ) <
> EIRP_MAX_TX_POWER_LIMIT)
> @@ -6148,7 +6171,7 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
>
> SET_IEEE80211_DEV(rt2x00dev->hw, rt2x00dev->dev);
> SET_IEEE80211_PERM_ADDR(rt2x00dev->hw,
> - rt2x00_eeprom_addr(rt2x00dev,
> + rt2800_eeprom_addr(rt2x00dev,
> EEPROM_MAC_ADDR_0));
>
> /*
> @@ -6164,7 +6187,7 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
> rt2x00dev->hw->max_report_rates = 7;
> rt2x00dev->hw->max_rate_tries = 1;
>
> - rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);
> + rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);
>
> /*
> * Initialize hw_mode information.
> @@ -6264,8 +6287,8 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
>
> spec->channels_info = info;
>
> - default_power1 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG1);
> - default_power2 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG2);
> + default_power1 = rt2800_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG1);
> + default_power2 = rt2800_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG2);
>
> for (i = 0; i < 14; i++) {
> info[i].default_power1 = default_power1[i];
> @@ -6273,8 +6296,10 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
> }
>
> if (spec->num_channels > 14) {
> - default_power1 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A1);
> - default_power2 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A2);
> + default_power1 = rt2800_eeprom_addr(rt2x00dev,
> + EEPROM_TXPOWER_A1);
> + default_power2 = rt2800_eeprom_addr(rt2x00dev,
> + EEPROM_TXPOWER_A2);
>
> for (i = 14; i < spec->num_channels; i++) {
> info[i].default_power1 = default_power1[i - 14];
> --
> 1.7.10
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html



--
---
Gertjan

2013-07-08 09:26:02

by Gabor Juhos

[permalink] [raw]
Subject: [PATCH v2 2/5] rt2x00: rt2800lib: introduce local EEPROM access functions

The patch adds rt2800 specific functions for
EEPROM data access and changes the code to use
these instead of the generic rt2x00_eeprom_*
variants.

To avoid functional changes, the new functions
are wrappers around the corresponding generic
rt2x00_eeprom_* routines for now. Functional
changes will be implemented in additional patches.

Signed-off-by: Gabor Juhos <[email protected]>
Acked-by: Stanislaw Gruszka <[email protected]>
---
Changes since v1: ---
---
drivers/net/wireless/rt2x00/rt2800lib.c | 165 ++++++++++++++++++-------------
1 file changed, 95 insertions(+), 70 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index 1f80ea5..522f0b1 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -221,6 +221,24 @@ static void rt2800_rf_write(struct rt2x00_dev *rt2x00dev,
mutex_unlock(&rt2x00dev->csr_mutex);
}

+static void *rt2800_eeprom_addr(struct rt2x00_dev *rt2x00dev,
+ const enum rt2800_eeprom_word word)
+{
+ return rt2x00_eeprom_addr(rt2x00dev, word);
+}
+
+static void rt2800_eeprom_read(struct rt2x00_dev *rt2x00dev,
+ const enum rt2800_eeprom_word word, u16 *data)
+{
+ rt2x00_eeprom_read(rt2x00dev, word, data);
+}
+
+static void rt2800_eeprom_write(struct rt2x00_dev *rt2x00dev,
+ const enum rt2800_eeprom_word word, u16 data)
+{
+ rt2x00_eeprom_write(rt2x00dev, word, data);
+}
+
static int rt2800_enable_wlan_rt3290(struct rt2x00_dev *rt2x00dev)
{
u32 reg;
@@ -609,16 +627,16 @@ static int rt2800_agc_to_rssi(struct rt2x00_dev *rt2x00dev, u32 rxwi_w2)
u8 offset2;

if (rt2x00dev->curr_band == IEEE80211_BAND_2GHZ) {
- rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG, &eeprom);
offset0 = rt2x00_get_field16(eeprom, EEPROM_RSSI_BG_OFFSET0);
offset1 = rt2x00_get_field16(eeprom, EEPROM_RSSI_BG_OFFSET1);
- rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &eeprom);
offset2 = rt2x00_get_field16(eeprom, EEPROM_RSSI_BG2_OFFSET2);
} else {
- rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A, &eeprom);
offset0 = rt2x00_get_field16(eeprom, EEPROM_RSSI_A_OFFSET0);
offset1 = rt2x00_get_field16(eeprom, EEPROM_RSSI_A_OFFSET1);
- rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &eeprom);
offset2 = rt2x00_get_field16(eeprom, EEPROM_RSSI_A2_OFFSET2);
}

@@ -890,6 +908,9 @@ const struct rt2x00debug rt2800_rt2x00debug = {
.word_count = CSR_REG_SIZE / sizeof(u32),
},
.eeprom = {
+ /* NOTE: The local EEPROM access functions can't
+ * be used here, use the generic versions instead.
+ */
.read = rt2x00_eeprom_read,
.write = rt2x00_eeprom_write,
.word_base = EEPROM_BASE,
@@ -1547,7 +1568,7 @@ static void rt2800_config_3572bt_ant(struct rt2x00_dev *rt2x00dev)
led_r_mode = rt2x00_get_field32(reg, LED_CFG_LED_POLAR) ? 0 : 3;
if (led_g_mode != rt2x00_get_field32(reg, LED_CFG_G_LED_MODE) ||
led_r_mode != rt2x00_get_field32(reg, LED_CFG_R_LED_MODE)) {
- rt2x00_eeprom_read(rt2x00dev, EEPROM_FREQ, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_FREQ, &eeprom);
led_ctrl = rt2x00_get_field16(eeprom, EEPROM_FREQ_LED_MODE);
if (led_ctrl == 0 || led_ctrl > 0x40) {
rt2x00_set_field32(&reg, LED_CFG_G_LED_MODE, led_g_mode);
@@ -1622,7 +1643,7 @@ void rt2800_config_ant(struct rt2x00_dev *rt2x00dev, struct antenna_setup *ant)
rt2x00_rt(rt2x00dev, RT3090) ||
rt2x00_rt(rt2x00dev, RT3352) ||
rt2x00_rt(rt2x00dev, RT3390)) {
- rt2x00_eeprom_read(rt2x00dev,
+ rt2800_eeprom_read(rt2x00dev,
EEPROM_NIC_CONF1, &eeprom);
if (rt2x00_get_field16(eeprom,
EEPROM_NIC_CONF1_ANT_DIVERSITY))
@@ -1659,16 +1680,16 @@ static void rt2800_config_lna_gain(struct rt2x00_dev *rt2x00dev,
short lna_gain;

if (libconf->rf.channel <= 14) {
- rt2x00_eeprom_read(rt2x00dev, EEPROM_LNA, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_LNA, &eeprom);
lna_gain = rt2x00_get_field16(eeprom, EEPROM_LNA_BG);
} else if (libconf->rf.channel <= 64) {
- rt2x00_eeprom_read(rt2x00dev, EEPROM_LNA, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_LNA, &eeprom);
lna_gain = rt2x00_get_field16(eeprom, EEPROM_LNA_A0);
} else if (libconf->rf.channel <= 128) {
- rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &eeprom);
lna_gain = rt2x00_get_field16(eeprom, EEPROM_RSSI_BG2_LNA_A1);
} else {
- rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &eeprom);
lna_gain = rt2x00_get_field16(eeprom, EEPROM_RSSI_A2_LNA_A2);
}

@@ -2798,62 +2819,62 @@ static int rt2800_get_gain_calibration_delta(struct rt2x00_dev *rt2x00dev)
* Example TSSI bounds 0xF0 0xD0 0xB5 0xA0 0x88 0x45 0x25 0x15 0x00
*/
if (rt2x00dev->curr_band == IEEE80211_BAND_2GHZ) {
- rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG1, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG1, &eeprom);
tssi_bounds[0] = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_BG1_MINUS4);
tssi_bounds[1] = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_BG1_MINUS3);

- rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG2, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG2, &eeprom);
tssi_bounds[2] = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_BG2_MINUS2);
tssi_bounds[3] = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_BG2_MINUS1);

- rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG3, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG3, &eeprom);
tssi_bounds[4] = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_BG3_REF);
tssi_bounds[5] = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_BG3_PLUS1);

- rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG4, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG4, &eeprom);
tssi_bounds[6] = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_BG4_PLUS2);
tssi_bounds[7] = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_BG4_PLUS3);

- rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG5, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_BG5, &eeprom);
tssi_bounds[8] = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_BG5_PLUS4);

step = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_BG5_AGC_STEP);
} else {
- rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A1, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A1, &eeprom);
tssi_bounds[0] = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_A1_MINUS4);
tssi_bounds[1] = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_A1_MINUS3);

- rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A2, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A2, &eeprom);
tssi_bounds[2] = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_A2_MINUS2);
tssi_bounds[3] = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_A2_MINUS1);

- rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A3, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A3, &eeprom);
tssi_bounds[4] = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_A3_REF);
tssi_bounds[5] = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_A3_PLUS1);

- rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A4, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A4, &eeprom);
tssi_bounds[6] = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_A4_PLUS2);
tssi_bounds[7] = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_A4_PLUS3);

- rt2x00_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A5, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_TSSI_BOUND_A5, &eeprom);
tssi_bounds[8] = rt2x00_get_field16(eeprom,
EEPROM_TSSI_BOUND_A5_PLUS4);

@@ -2899,7 +2920,7 @@ static int rt2800_get_txpower_bw_comp(struct rt2x00_dev *rt2x00dev,
u8 comp_type;
int comp_value = 0;

- rt2x00_eeprom_read(rt2x00dev, EEPROM_TXPOWER_DELTA, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_TXPOWER_DELTA, &eeprom);

/*
* HT40 compensation not required.
@@ -2974,12 +2995,12 @@ static u8 rt2800_compensate_txpower(struct rt2x00_dev *rt2x00dev, int is_rate_b,
* .11b data rate need add additional 4dbm
* when calculating eirp txpower.
*/
- rt2x00_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + 1,
+ rt2800_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + 1,
&eeprom);
criterion = rt2x00_get_field16(eeprom,
EEPROM_TXPOWER_BYRATE_RATE0);

- rt2x00_eeprom_read(rt2x00dev, EEPROM_EIRP_MAX_TX_POWER,
+ rt2800_eeprom_read(rt2x00dev, EEPROM_EIRP_MAX_TX_POWER,
&eeprom);

if (band == IEEE80211_BAND_2GHZ)
@@ -3080,7 +3101,7 @@ static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev,
rt2800_register_read(rt2x00dev, offset, &reg);

/* read the next four txpower values */
- rt2x00_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + i,
+ rt2800_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + i,
&eeprom);

is_rate_b = i ? 0 : 1;
@@ -3129,7 +3150,7 @@ static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev,
rt2x00_set_field32(&reg, TX_PWR_CFG_RATE3, txpower);

/* read the next four txpower values */
- rt2x00_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + i + 1,
+ rt2800_eeprom_read(rt2x00dev, EEPROM_TXPOWER_BYRATE + i + 1,
&eeprom);

is_rate_b = 0;
@@ -3528,7 +3549,8 @@ static int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)
if (rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E) ||
rt2x00_rt_rev_lt(rt2x00dev, RT3090, REV_RT3090E) ||
rt2x00_rt_rev_lt(rt2x00dev, RT3390, REV_RT3390E)) {
- rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1,
+ &eeprom);
if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF1_DAC_TEST))
rt2800_register_write(rt2x00dev, TX_SW_CFG2,
0x0000002c);
@@ -3989,7 +4011,7 @@ static void rt2800_disable_unused_dac_adc(struct rt2x00_dev *rt2x00dev)
u8 value;

rt2800_bbp_read(rt2x00dev, 138, &value);
- rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);
if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_TXPATH) == 1)
value |= 0x20;
if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RXPATH) == 1)
@@ -4402,7 +4424,7 @@ static void rt2800_init_bbp_53xx(struct rt2x00_dev *rt2x00dev)

rt2800_disable_unused_dac_adc(rt2x00dev);

- rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);
div_mode = rt2x00_get_field16(eeprom,
EEPROM_NIC_CONF1_ANT_DIVERSITY);
ant = (div_mode == 3) ? 1 : 0;
@@ -4488,7 +4510,7 @@ static void rt2800_init_bbp_5592(struct rt2x00_dev *rt2x00dev)

rt2800_bbp4_mac_if_ctrl(rt2x00dev);

- rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);
div_mode = rt2x00_get_field16(eeprom, EEPROM_NIC_CONF1_ANT_DIVERSITY);
ant = (div_mode == 3) ? 1 : 0;
rt2800_bbp_read(rt2x00dev, 152, &value);
@@ -4557,7 +4579,7 @@ static void rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
}

for (i = 0; i < EEPROM_BBP_SIZE; i++) {
- rt2x00_eeprom_read(rt2x00dev, EEPROM_BBP_START + i, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_BBP_START + i, &eeprom);

if (eeprom != 0xffff && eeprom != 0x0000) {
reg_id = rt2x00_get_field16(eeprom, EEPROM_BBP_REG_ID);
@@ -4728,7 +4750,7 @@ static void rt2800_normal_mode_setup_3xxx(struct rt2x00_dev *rt2x00dev)
if (rt2x00_rt(rt2x00dev, RT3090)) {
/* Turn off unused DAC1 and ADC1 to reduce power consumption */
rt2800_bbp_read(rt2x00dev, 138, &bbp);
- rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);
if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RXPATH) == 1)
rt2x00_set_field8(&bbp, BBP138_RX_ADC1, 0);
if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_TXPATH) == 1)
@@ -4778,7 +4800,7 @@ static void rt2800_normal_mode_setup_5xxx(struct rt2x00_dev *rt2x00dev)

/* Turn off unused DAC1 and ADC1 to reduce power consumption */
rt2800_bbp_read(rt2x00dev, 138, &reg);
- rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);
if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RXPATH) == 1)
rt2x00_set_field8(&reg, BBP138_RX_ADC1, 0);
if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_TXPATH) == 1)
@@ -4884,7 +4906,8 @@ static void rt2800_init_rfcsr_30xx(struct rt2x00_dev *rt2x00dev)
rt2x00_set_field32(&reg, LDO_CFG0_BGSEL, 1);
if (rt2x00_rt_rev_lt(rt2x00dev, RT3071, REV_RT3071E) ||
rt2x00_rt_rev_lt(rt2x00dev, RT3090, REV_RT3090E)) {
- rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1,
+ &eeprom);
if (rt2x00_get_field16(eeprom, EEPROM_NIC_CONF1_DAC_TEST))
rt2x00_set_field32(&reg, LDO_CFG0_LDO_CORE_VLEVEL, 3);
else
@@ -5456,15 +5479,15 @@ int rt2800_enable_radio(struct rt2x00_dev *rt2x00dev)
/*
* Initialize LED control
*/
- rt2x00_eeprom_read(rt2x00dev, EEPROM_LED_AG_CONF, &word);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_LED_AG_CONF, &word);
rt2800_mcu_request(rt2x00dev, MCU_LED_AG_CONF, 0xff,
word & 0xff, (word >> 8) & 0xff);

- rt2x00_eeprom_read(rt2x00dev, EEPROM_LED_ACT_CONF, &word);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_LED_ACT_CONF, &word);
rt2800_mcu_request(rt2x00dev, MCU_LED_ACT_CONF, 0xff,
word & 0xff, (word >> 8) & 0xff);

- rt2x00_eeprom_read(rt2x00dev, EEPROM_LED_POLARITY, &word);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_LED_POLARITY, &word);
rt2800_mcu_request(rt2x00dev, MCU_LED_LED_POLARITY, 0xff,
word & 0xff, (word >> 8) & 0xff);

@@ -5578,18 +5601,18 @@ static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
/*
* Start validation of the data that has been read.
*/
- mac = rt2x00_eeprom_addr(rt2x00dev, EEPROM_MAC_ADDR_0);
+ mac = rt2800_eeprom_addr(rt2x00dev, EEPROM_MAC_ADDR_0);
if (!is_valid_ether_addr(mac)) {
eth_random_addr(mac);
rt2x00_eeprom_dbg(rt2x00dev, "MAC: %pM\n", mac);
}

- rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &word);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &word);
if (word == 0xffff) {
rt2x00_set_field16(&word, EEPROM_NIC_CONF0_RXPATH, 2);
rt2x00_set_field16(&word, EEPROM_NIC_CONF0_TXPATH, 1);
rt2x00_set_field16(&word, EEPROM_NIC_CONF0_RF_TYPE, RF2820);
- rt2x00_eeprom_write(rt2x00dev, EEPROM_NIC_CONF0, word);
+ rt2800_eeprom_write(rt2x00dev, EEPROM_NIC_CONF0, word);
rt2x00_eeprom_dbg(rt2x00dev, "Antenna: 0x%04x\n", word);
} else if (rt2x00_rt(rt2x00dev, RT2860) ||
rt2x00_rt(rt2x00dev, RT2872)) {
@@ -5598,10 +5621,10 @@ static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
*/
if (rt2x00_get_field16(word, EEPROM_NIC_CONF0_RXPATH) > 2)
rt2x00_set_field16(&word, EEPROM_NIC_CONF0_RXPATH, 2);
- rt2x00_eeprom_write(rt2x00dev, EEPROM_NIC_CONF0, word);
+ rt2800_eeprom_write(rt2x00dev, EEPROM_NIC_CONF0, word);
}

- rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &word);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &word);
if (word == 0xffff) {
rt2x00_set_field16(&word, EEPROM_NIC_CONF1_HW_RADIO, 0);
rt2x00_set_field16(&word, EEPROM_NIC_CONF1_EXTERNAL_TX_ALC, 0);
@@ -5618,24 +5641,24 @@ static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
rt2x00_set_field16(&word, EEPROM_NIC_CONF1_INTERNAL_TX_ALC, 0);
rt2x00_set_field16(&word, EEPROM_NIC_CONF1_BT_COEXIST, 0);
rt2x00_set_field16(&word, EEPROM_NIC_CONF1_DAC_TEST, 0);
- rt2x00_eeprom_write(rt2x00dev, EEPROM_NIC_CONF1, word);
+ rt2800_eeprom_write(rt2x00dev, EEPROM_NIC_CONF1, word);
rt2x00_eeprom_dbg(rt2x00dev, "NIC: 0x%04x\n", word);
}

- rt2x00_eeprom_read(rt2x00dev, EEPROM_FREQ, &word);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_FREQ, &word);
if ((word & 0x00ff) == 0x00ff) {
rt2x00_set_field16(&word, EEPROM_FREQ_OFFSET, 0);
- rt2x00_eeprom_write(rt2x00dev, EEPROM_FREQ, word);
+ rt2800_eeprom_write(rt2x00dev, EEPROM_FREQ, word);
rt2x00_eeprom_dbg(rt2x00dev, "Freq: 0x%04x\n", word);
}
if ((word & 0xff00) == 0xff00) {
rt2x00_set_field16(&word, EEPROM_FREQ_LED_MODE,
LED_MODE_TXRX_ACTIVITY);
rt2x00_set_field16(&word, EEPROM_FREQ_LED_POLARITY, 0);
- rt2x00_eeprom_write(rt2x00dev, EEPROM_FREQ, word);
- rt2x00_eeprom_write(rt2x00dev, EEPROM_LED_AG_CONF, 0x5555);
- rt2x00_eeprom_write(rt2x00dev, EEPROM_LED_ACT_CONF, 0x2221);
- rt2x00_eeprom_write(rt2x00dev, EEPROM_LED_POLARITY, 0xa9f8);
+ rt2800_eeprom_write(rt2x00dev, EEPROM_FREQ, word);
+ rt2800_eeprom_write(rt2x00dev, EEPROM_LED_AG_CONF, 0x5555);
+ rt2800_eeprom_write(rt2x00dev, EEPROM_LED_ACT_CONF, 0x2221);
+ rt2800_eeprom_write(rt2x00dev, EEPROM_LED_POLARITY, 0xa9f8);
rt2x00_eeprom_dbg(rt2x00dev, "Led Mode: 0x%04x\n", word);
}

@@ -5644,17 +5667,17 @@ static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
* lna0 as correct value. Note that EEPROM_LNA
* is never validated.
*/
- rt2x00_eeprom_read(rt2x00dev, EEPROM_LNA, &word);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_LNA, &word);
default_lna_gain = rt2x00_get_field16(word, EEPROM_LNA_A0);

- rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG, &word);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG, &word);
if (abs(rt2x00_get_field16(word, EEPROM_RSSI_BG_OFFSET0)) > 10)
rt2x00_set_field16(&word, EEPROM_RSSI_BG_OFFSET0, 0);
if (abs(rt2x00_get_field16(word, EEPROM_RSSI_BG_OFFSET1)) > 10)
rt2x00_set_field16(&word, EEPROM_RSSI_BG_OFFSET1, 0);
- rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_BG, word);
+ rt2800_eeprom_write(rt2x00dev, EEPROM_RSSI_BG, word);

- rt2x00_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_BG, &word);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_BG, &word);
if ((word & 0x00ff) != 0x00ff) {
drv_data->txmixer_gain_24g =
rt2x00_get_field16(word, EEPROM_TXMIXER_GAIN_BG_VAL);
@@ -5662,16 +5685,16 @@ static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
drv_data->txmixer_gain_24g = 0;
}

- rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &word);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_BG2, &word);
if (abs(rt2x00_get_field16(word, EEPROM_RSSI_BG2_OFFSET2)) > 10)
rt2x00_set_field16(&word, EEPROM_RSSI_BG2_OFFSET2, 0);
if (rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0x00 ||
rt2x00_get_field16(word, EEPROM_RSSI_BG2_LNA_A1) == 0xff)
rt2x00_set_field16(&word, EEPROM_RSSI_BG2_LNA_A1,
default_lna_gain);
- rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_BG2, word);
+ rt2800_eeprom_write(rt2x00dev, EEPROM_RSSI_BG2, word);

- rt2x00_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_A, &word);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_TXMIXER_GAIN_A, &word);
if ((word & 0x00ff) != 0x00ff) {
drv_data->txmixer_gain_5g =
rt2x00_get_field16(word, EEPROM_TXMIXER_GAIN_A_VAL);
@@ -5679,21 +5702,21 @@ static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
drv_data->txmixer_gain_5g = 0;
}

- rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A, &word);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A, &word);
if (abs(rt2x00_get_field16(word, EEPROM_RSSI_A_OFFSET0)) > 10)
rt2x00_set_field16(&word, EEPROM_RSSI_A_OFFSET0, 0);
if (abs(rt2x00_get_field16(word, EEPROM_RSSI_A_OFFSET1)) > 10)
rt2x00_set_field16(&word, EEPROM_RSSI_A_OFFSET1, 0);
- rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_A, word);
+ rt2800_eeprom_write(rt2x00dev, EEPROM_RSSI_A, word);

- rt2x00_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &word);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_RSSI_A2, &word);
if (abs(rt2x00_get_field16(word, EEPROM_RSSI_A2_OFFSET2)) > 10)
rt2x00_set_field16(&word, EEPROM_RSSI_A2_OFFSET2, 0);
if (rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0x00 ||
rt2x00_get_field16(word, EEPROM_RSSI_A2_LNA_A2) == 0xff)
rt2x00_set_field16(&word, EEPROM_RSSI_A2_LNA_A2,
default_lna_gain);
- rt2x00_eeprom_write(rt2x00dev, EEPROM_RSSI_A2, word);
+ rt2800_eeprom_write(rt2x00dev, EEPROM_RSSI_A2, word);

return 0;
}
@@ -5707,7 +5730,7 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
/*
* Read EEPROM word for configuration.
*/
- rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);

/*
* Identify RF chipset by EEPROM value
@@ -5717,7 +5740,7 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
if (rt2x00_rt(rt2x00dev, RT3290) ||
rt2x00_rt(rt2x00dev, RT5390) ||
rt2x00_rt(rt2x00dev, RT5392))
- rt2x00_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf);
else
rf = rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RF_TYPE);

@@ -5757,7 +5780,7 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
rt2x00dev->default_ant.rx_chain_num =
rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RXPATH);

- rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF1, &eeprom);

if (rt2x00_rt(rt2x00dev, RT3070) ||
rt2x00_rt(rt2x00dev, RT3090) ||
@@ -5810,7 +5833,7 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
/*
* Read frequency offset and RF programming sequence.
*/
- rt2x00_eeprom_read(rt2x00dev, EEPROM_FREQ, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_FREQ, &eeprom);
rt2x00dev->freq_offset = rt2x00_get_field16(eeprom, EEPROM_FREQ_OFFSET);

/*
@@ -5827,7 +5850,7 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
/*
* Check if support EIRP tx power limit feature.
*/
- rt2x00_eeprom_read(rt2x00dev, EEPROM_EIRP_MAX_TX_POWER, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_EIRP_MAX_TX_POWER, &eeprom);

if (rt2x00_get_field16(eeprom, EEPROM_EIRP_MAX_TX_POWER_2GHZ) <
EIRP_MAX_TX_POWER_LIMIT)
@@ -6148,7 +6171,7 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)

SET_IEEE80211_DEV(rt2x00dev->hw, rt2x00dev->dev);
SET_IEEE80211_PERM_ADDR(rt2x00dev->hw,
- rt2x00_eeprom_addr(rt2x00dev,
+ rt2800_eeprom_addr(rt2x00dev,
EEPROM_MAC_ADDR_0));

/*
@@ -6164,7 +6187,7 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
rt2x00dev->hw->max_report_rates = 7;
rt2x00dev->hw->max_rate_tries = 1;

- rt2x00_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);
+ rt2800_eeprom_read(rt2x00dev, EEPROM_NIC_CONF0, &eeprom);

/*
* Initialize hw_mode information.
@@ -6264,8 +6287,8 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)

spec->channels_info = info;

- default_power1 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG1);
- default_power2 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG2);
+ default_power1 = rt2800_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG1);
+ default_power2 = rt2800_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_BG2);

for (i = 0; i < 14; i++) {
info[i].default_power1 = default_power1[i];
@@ -6273,8 +6296,10 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
}

if (spec->num_channels > 14) {
- default_power1 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A1);
- default_power2 = rt2x00_eeprom_addr(rt2x00dev, EEPROM_TXPOWER_A2);
+ default_power1 = rt2800_eeprom_addr(rt2x00dev,
+ EEPROM_TXPOWER_A1);
+ default_power2 = rt2800_eeprom_addr(rt2x00dev,
+ EEPROM_TXPOWER_A2);

for (i = 14; i < spec->num_channels; i++) {
info[i].default_power1 = default_power1[i - 14];
--
1.7.10


2013-07-08 10:06:06

by Gertjan van Wingerde

[permalink] [raw]
Subject: Re: [PATCH v2 5/5] rt2x00: rt2800lib: add EEPROM map for the RT3593 chipset

On Mon, Jul 8, 2013 at 11:25 AM, Gabor Juhos <[email protected]> wrote:
> Three-chain devices are using a different
> EEPROM layout than the rest of the chipsets.
> Add a new map which describes the new layout
> and use that for the RT3593 chipset.
>
> The index values has been computed from the
> EEPROM_EXT_* defines, which can be found in
> the 'include/chip/rt3593.h' file in the
> Ralink DPO_RT5572_LinuxSTA_2.6.0.1_20120629
> driver.
>
> Signed-off-by: Gabor Juhos <[email protected]>
> Acked-by: Stanislaw Gruszka <[email protected]>

Acked-by: Gertjan van Wingerde <[email protected]>

> ---
> Changes since v1: ---
> ---
> drivers/net/wireless/rt2x00/rt2800.h | 6 ++++
> drivers/net/wireless/rt2x00/rt2800lib.c | 48 ++++++++++++++++++++++++++++++-
> 2 files changed, 53 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
> index bc5c695..9216834 100644
> --- a/drivers/net/wireless/rt2x00/rt2800.h
> +++ b/drivers/net/wireless/rt2x00/rt2800.h
> @@ -2244,6 +2244,12 @@ enum rt2800_eeprom_word {
> EEPROM_TSSI_BOUND_A5,
> EEPROM_TXPOWER_BYRATE,
> EEPROM_BBP_START,
> +
> + /* IDs for extended EEPROM format used by three-chain devices */
> + EEPROM_EXT_LNA2,
> + EEPROM_EXT_TXPOWER_BG3,
> + EEPROM_EXT_TXPOWER_A3,
> +
> /* New values must be added before this */
> EEPROM_WORD_COUNT
> };
> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index 41a34de4a..d325ca2 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -261,6 +261,48 @@ static const unsigned int rt2800_eeprom_map[EEPROM_WORD_COUNT] = {
> [EEPROM_BBP_START] = 0x0078,
> };
>
> +static const unsigned int rt2800_eeprom_map_ext[EEPROM_WORD_COUNT] = {
> + [EEPROM_CHIP_ID] = 0x0000,
> + [EEPROM_VERSION] = 0x0001,
> + [EEPROM_MAC_ADDR_0] = 0x0002,
> + [EEPROM_MAC_ADDR_1] = 0x0003,
> + [EEPROM_MAC_ADDR_2] = 0x0004,
> + [EEPROM_NIC_CONF0] = 0x001a,
> + [EEPROM_NIC_CONF1] = 0x001b,
> + [EEPROM_NIC_CONF2] = 0x001c,
> + [EEPROM_EIRP_MAX_TX_POWER] = 0x0020,
> + [EEPROM_FREQ] = 0x0022,
> + [EEPROM_LED_AG_CONF] = 0x0023,
> + [EEPROM_LED_ACT_CONF] = 0x0024,
> + [EEPROM_LED_POLARITY] = 0x0025,
> + [EEPROM_LNA] = 0x0026,
> + [EEPROM_EXT_LNA2] = 0x0027,
> + [EEPROM_RSSI_BG] = 0x0028,
> + [EEPROM_TXPOWER_DELTA] = 0x0028, /* Overlaps with RSSI_BG */
> + [EEPROM_RSSI_BG2] = 0x0029,
> + [EEPROM_TXMIXER_GAIN_BG] = 0x0029, /* Overlaps with RSSI_BG2 */
> + [EEPROM_RSSI_A] = 0x002a,
> + [EEPROM_RSSI_A2] = 0x002b,
> + [EEPROM_TXMIXER_GAIN_A] = 0x002b, /* Overlaps with RSSI_A2 */
> + [EEPROM_TXPOWER_BG1] = 0x0030,
> + [EEPROM_TXPOWER_BG2] = 0x0037,
> + [EEPROM_EXT_TXPOWER_BG3] = 0x003e,
> + [EEPROM_TSSI_BOUND_BG1] = 0x0045,
> + [EEPROM_TSSI_BOUND_BG2] = 0x0046,
> + [EEPROM_TSSI_BOUND_BG3] = 0x0047,
> + [EEPROM_TSSI_BOUND_BG4] = 0x0048,
> + [EEPROM_TSSI_BOUND_BG5] = 0x0049,
> + [EEPROM_TXPOWER_A1] = 0x004b,
> + [EEPROM_TXPOWER_A2] = 0x0065,
> + [EEPROM_EXT_TXPOWER_A3] = 0x007f,
> + [EEPROM_TSSI_BOUND_A1] = 0x009a,
> + [EEPROM_TSSI_BOUND_A2] = 0x009b,
> + [EEPROM_TSSI_BOUND_A3] = 0x009c,
> + [EEPROM_TSSI_BOUND_A4] = 0x009d,
> + [EEPROM_TSSI_BOUND_A5] = 0x009e,
> + [EEPROM_TXPOWER_BYRATE] = 0x00a0,
> +};
> +
> static unsigned int rt2800_eeprom_word_index(struct rt2x00_dev *rt2x00dev,
> const enum rt2800_eeprom_word word)
> {
> @@ -272,7 +314,11 @@ static unsigned int rt2800_eeprom_word_index(struct rt2x00_dev *rt2x00dev,
> wiphy_name(rt2x00dev->hw->wiphy), word))
> return 0;
>
> - map = rt2800_eeprom_map;
> + if (rt2x00_rt(rt2x00dev, RT3593))
> + map = rt2800_eeprom_map_ext;
> + else
> + map = rt2800_eeprom_map;
> +
> index = map[word];
>
> /* Index 0 is valid only for EEPROM_CHIP_ID.
> --
> 1.7.10
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html



--
---
Gertjan

2013-07-08 10:04:36

by Gertjan van Wingerde

[permalink] [raw]
Subject: Re: [PATCH v2 4/5] rt2x00: rt2800lib: introduce rt2800_eeprom_word_index helper

On Mon, Jul 8, 2013 at 11:25 AM, Gabor Juhos <[email protected]> wrote:
> Instead of assign the offset value to the
> enum directly use a new helper function to
> convert a rt2800_eeprom_word enum into an
> index of the rt2x00_dev->eeprom array.
>
> The patch does not change the existing
> behaviour, but makes it possible to add
> support for three-chain devices which are
> using a different EEPROM layout.
>
> Signed-off-by: Gabor Juhos <[email protected]>

Acked-by: Gertjan van Wingerde <[email protected]>

> ---
> Changes since v1:
> - use WARN_ONCE and remove the rt2x00_warn calls
> ---
> drivers/net/wireless/rt2x00/rt2800.h | 76 ++++++++++++++-------------
> drivers/net/wireless/rt2x00/rt2800lib.c | 87 +++++++++++++++++++++++++++++--
> 2 files changed, 122 insertions(+), 41 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
> index 0647039..bc5c695 100644
> --- a/drivers/net/wireless/rt2x00/rt2800.h
> +++ b/drivers/net/wireless/rt2x00/rt2800.h
> @@ -2207,43 +2207,45 @@ struct mac_iveiv_entry {
> */
>
> enum rt2800_eeprom_word {
> - EEPROM_CHIP_ID = 0x0000,
> - EEPROM_VERSION = 0x0001,
> - EEPROM_MAC_ADDR_0 = 0x0002,
> - EEPROM_MAC_ADDR_1 = 0x0003,
> - EEPROM_MAC_ADDR_2 = 0x0004,
> - EEPROM_NIC_CONF0 = 0x001a,
> - EEPROM_NIC_CONF1 = 0x001b,
> - EEPROM_FREQ = 0x001d,
> - EEPROM_LED_AG_CONF = 0x001e,
> - EEPROM_LED_ACT_CONF = 0x001f,
> - EEPROM_LED_POLARITY = 0x0020,
> - EEPROM_NIC_CONF2 = 0x0021,
> - EEPROM_LNA = 0x0022,
> - EEPROM_RSSI_BG = 0x0023,
> - EEPROM_RSSI_BG2 = 0x0024,
> - EEPROM_TXMIXER_GAIN_BG = 0x0024, /* overlaps with RSSI_BG2 */
> - EEPROM_RSSI_A = 0x0025,
> - EEPROM_RSSI_A2 = 0x0026,
> - EEPROM_TXMIXER_GAIN_A = 0x0026, /* overlaps with RSSI_A2 */
> - EEPROM_EIRP_MAX_TX_POWER = 0x0027,
> - EEPROM_TXPOWER_DELTA = 0x0028,
> - EEPROM_TXPOWER_BG1 = 0x0029,
> - EEPROM_TXPOWER_BG2 = 0x0030,
> - EEPROM_TSSI_BOUND_BG1 = 0x0037,
> - EEPROM_TSSI_BOUND_BG2 = 0x0038,
> - EEPROM_TSSI_BOUND_BG3 = 0x0039,
> - EEPROM_TSSI_BOUND_BG4 = 0x003a,
> - EEPROM_TSSI_BOUND_BG5 = 0x003b,
> - EEPROM_TXPOWER_A1 = 0x003c,
> - EEPROM_TXPOWER_A2 = 0x0053,
> - EEPROM_TSSI_BOUND_A1 = 0x006a,
> - EEPROM_TSSI_BOUND_A2 = 0x006b,
> - EEPROM_TSSI_BOUND_A3 = 0x006c,
> - EEPROM_TSSI_BOUND_A4 = 0x006d,
> - EEPROM_TSSI_BOUND_A5 = 0x006e,
> - EEPROM_TXPOWER_BYRATE = 0x006f,
> - EEPROM_BBP_START = 0x0078,
> + EEPROM_CHIP_ID = 0,
> + EEPROM_VERSION,
> + EEPROM_MAC_ADDR_0,
> + EEPROM_MAC_ADDR_1,
> + EEPROM_MAC_ADDR_2,
> + EEPROM_NIC_CONF0,
> + EEPROM_NIC_CONF1,
> + EEPROM_FREQ,
> + EEPROM_LED_AG_CONF,
> + EEPROM_LED_ACT_CONF,
> + EEPROM_LED_POLARITY,
> + EEPROM_NIC_CONF2,
> + EEPROM_LNA,
> + EEPROM_RSSI_BG,
> + EEPROM_RSSI_BG2,
> + EEPROM_TXMIXER_GAIN_BG,
> + EEPROM_RSSI_A,
> + EEPROM_RSSI_A2,
> + EEPROM_TXMIXER_GAIN_A,
> + EEPROM_EIRP_MAX_TX_POWER,
> + EEPROM_TXPOWER_DELTA,
> + EEPROM_TXPOWER_BG1,
> + EEPROM_TXPOWER_BG2,
> + EEPROM_TSSI_BOUND_BG1,
> + EEPROM_TSSI_BOUND_BG2,
> + EEPROM_TSSI_BOUND_BG3,
> + EEPROM_TSSI_BOUND_BG4,
> + EEPROM_TSSI_BOUND_BG5,
> + EEPROM_TXPOWER_A1,
> + EEPROM_TXPOWER_A2,
> + EEPROM_TSSI_BOUND_A1,
> + EEPROM_TSSI_BOUND_A2,
> + EEPROM_TSSI_BOUND_A3,
> + EEPROM_TSSI_BOUND_A4,
> + EEPROM_TSSI_BOUND_A5,
> + EEPROM_TXPOWER_BYRATE,
> + EEPROM_BBP_START,
> + /* New values must be added before this */
> + EEPROM_WORD_COUNT
> };
>
> /*
> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index b59772a..41a34de4a 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -221,22 +221,98 @@ static void rt2800_rf_write(struct rt2x00_dev *rt2x00dev,
> mutex_unlock(&rt2x00dev->csr_mutex);
> }
>
> +static const unsigned int rt2800_eeprom_map[EEPROM_WORD_COUNT] = {
> + [EEPROM_CHIP_ID] = 0x0000,
> + [EEPROM_VERSION] = 0x0001,
> + [EEPROM_MAC_ADDR_0] = 0x0002,
> + [EEPROM_MAC_ADDR_1] = 0x0003,
> + [EEPROM_MAC_ADDR_2] = 0x0004,
> + [EEPROM_NIC_CONF0] = 0x001a,
> + [EEPROM_NIC_CONF1] = 0x001b,
> + [EEPROM_FREQ] = 0x001d,
> + [EEPROM_LED_AG_CONF] = 0x001e,
> + [EEPROM_LED_ACT_CONF] = 0x001f,
> + [EEPROM_LED_POLARITY] = 0x0020,
> + [EEPROM_NIC_CONF2] = 0x0021,
> + [EEPROM_LNA] = 0x0022,
> + [EEPROM_RSSI_BG] = 0x0023,
> + [EEPROM_RSSI_BG2] = 0x0024,
> + [EEPROM_TXMIXER_GAIN_BG] = 0x0024, /* overlaps with RSSI_BG2 */
> + [EEPROM_RSSI_A] = 0x0025,
> + [EEPROM_RSSI_A2] = 0x0026,
> + [EEPROM_TXMIXER_GAIN_A] = 0x0026, /* overlaps with RSSI_A2 */
> + [EEPROM_EIRP_MAX_TX_POWER] = 0x0027,
> + [EEPROM_TXPOWER_DELTA] = 0x0028,
> + [EEPROM_TXPOWER_BG1] = 0x0029,
> + [EEPROM_TXPOWER_BG2] = 0x0030,
> + [EEPROM_TSSI_BOUND_BG1] = 0x0037,
> + [EEPROM_TSSI_BOUND_BG2] = 0x0038,
> + [EEPROM_TSSI_BOUND_BG3] = 0x0039,
> + [EEPROM_TSSI_BOUND_BG4] = 0x003a,
> + [EEPROM_TSSI_BOUND_BG5] = 0x003b,
> + [EEPROM_TXPOWER_A1] = 0x003c,
> + [EEPROM_TXPOWER_A2] = 0x0053,
> + [EEPROM_TSSI_BOUND_A1] = 0x006a,
> + [EEPROM_TSSI_BOUND_A2] = 0x006b,
> + [EEPROM_TSSI_BOUND_A3] = 0x006c,
> + [EEPROM_TSSI_BOUND_A4] = 0x006d,
> + [EEPROM_TSSI_BOUND_A5] = 0x006e,
> + [EEPROM_TXPOWER_BYRATE] = 0x006f,
> + [EEPROM_BBP_START] = 0x0078,
> +};
> +
> +static unsigned int rt2800_eeprom_word_index(struct rt2x00_dev *rt2x00dev,
> + const enum rt2800_eeprom_word word)
> +{
> + const unsigned int *map;
> + unsigned int index;
> +
> + if (WARN_ONCE(word >= EEPROM_WORD_COUNT,
> + "%s: invalid EEPROM word %d\n",
> + wiphy_name(rt2x00dev->hw->wiphy), word))
> + return 0;
> +
> + map = rt2800_eeprom_map;
> + index = map[word];
> +
> + /* Index 0 is valid only for EEPROM_CHIP_ID.
> + * Otherwise it means that the offset of the
> + * given word is not initialized in the map,
> + * or that the field is not usable on the
> + * actual chipset.
> + */
> + WARN_ONCE(word != EEPROM_CHIP_ID && index == 0,
> + "%s: invalid access of EEPROM word %d\n",
> + wiphy_name(rt2x00dev->hw->wiphy), word);
> +
> + return index;
> +}
> +
> static void *rt2800_eeprom_addr(struct rt2x00_dev *rt2x00dev,
> const enum rt2800_eeprom_word word)
> {
> - return rt2x00_eeprom_addr(rt2x00dev, word);
> + unsigned int index;
> +
> + index = rt2800_eeprom_word_index(rt2x00dev, word);
> + return rt2x00_eeprom_addr(rt2x00dev, index);
> }
>
> static void rt2800_eeprom_read(struct rt2x00_dev *rt2x00dev,
> const enum rt2800_eeprom_word word, u16 *data)
> {
> - rt2x00_eeprom_read(rt2x00dev, word, data);
> + unsigned int index;
> +
> + index = rt2800_eeprom_word_index(rt2x00dev, word);
> + rt2x00_eeprom_read(rt2x00dev, index, data);
> }
>
> static void rt2800_eeprom_write(struct rt2x00_dev *rt2x00dev,
> const enum rt2800_eeprom_word word, u16 data)
> {
> - rt2x00_eeprom_write(rt2x00dev, word, data);
> + unsigned int index;
> +
> + index = rt2800_eeprom_word_index(rt2x00dev, word);
> + rt2x00_eeprom_write(rt2x00dev, index, data);
> }
>
> static void rt2800_eeprom_read_from_array(struct rt2x00_dev *rt2x00dev,
> @@ -244,7 +320,10 @@ static void rt2800_eeprom_read_from_array(struct rt2x00_dev *rt2x00dev,
> unsigned int offset,
> u16 *data)
> {
> - rt2x00_eeprom_read(rt2x00dev, array + offset, data);
> + unsigned int index;
> +
> + index = rt2800_eeprom_word_index(rt2x00dev, array);
> + rt2x00_eeprom_read(rt2x00dev, index + offset, data);
> }
>
> static int rt2800_enable_wlan_rt3290(struct rt2x00_dev *rt2x00dev)
> --
> 1.7.10
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html



--
---
Gertjan