2012-08-31 17:22:20

by Gertjan van Wingerde

[permalink] [raw]
Subject: [PATCH v2 0/6] GPIO related fixes and clean ups.

This patch series mostly consists of GPIO related fixes and clean ups.
The patch series contains:
1. Moving the ASUS USB-N53 device ID from the set of unknown devices to the
set of RT3572 devices.
2. A fix for rt2500usb to match the coded register width of the GPIO register
with the actual register width.
3. A fix for the all rt2x00 drivers to correctly read the value of the rfkill
switch at device startup. Previously we only could read that value properly
after interface initialization time, which was too late, as the rfkill
status would then prevent users to create an interface on the device.
Special thanks go to Andreas Messer for reporting the issue and finding the
root cause of the issue.
4. A patch aligning the GPIO register definitions with the various Ralink
datasheets.
5. A patch cleaning up naming of GPIO register fields.
6. A clean-up of the rt2800 drivers, in which now more code is shared
between rt2800pci and rt2800usb.

John, the first three patches are marked to be included in stable, so the
logical tree for them would be wireless. The last three patches are cleanups,
so they would be targetted at the wireless-next tree. Unfortunately, these
latter 3 patches depend on the first 3 in the series.
I'll leave it up to you to decide how that handle the series.

---
v1->v2:
- Refactored the patch series to ensure only the minimal fixes are targeted
at the stable tree.
- Combined patches that logically belonged together in a single patch changing
all rt2x00 drivers instead of having a separate patch for each rt2x00 driver.
- As a result of the above, the patch series now only consists of 6 patches
instead of the previous 14.

---
Gertjan.

Gertjan van Wingerde (6):
rt2x00: Identify ASUS USB-N53 device.
rt2x00: Fix word size of rt2500usb MAC_CSR19 register.
rt2x00: Fix rfkill polling prior to interface start.
rt2x00: Align GPIO register definitions with the datasheets.
rt2x00: Unify GPIO register field namings
rt2x00: rt2800 - Make probe_hw function common between PCI and USB.

drivers/net/wireless/rt2x00/rt2400pci.c | 11 ++-
drivers/net/wireless/rt2x00/rt2400pci.h | 26 +++++--
drivers/net/wireless/rt2x00/rt2500pci.c | 11 ++-
drivers/net/wireless/rt2x00/rt2500pci.h | 18 +++--
drivers/net/wireless/rt2x00/rt2500usb.c | 11 ++-
drivers/net/wireless/rt2x00/rt2500usb.h | 26 +++++--
drivers/net/wireless/rt2x00/rt2800.h | 47 +++++++-----
drivers/net/wireless/rt2x00/rt2800lib.c | 125 +++++++++++++++++++++++++-------
drivers/net/wireless/rt2x00/rt2800lib.h | 14 +++-
drivers/net/wireless/rt2x00/rt2800pci.c | 74 +------------------
drivers/net/wireless/rt2x00/rt2800usb.c | 56 ++------------
drivers/net/wireless/rt2x00/rt61pci.c | 19 +++--
drivers/net/wireless/rt2x00/rt61pci.h | 27 +++----
drivers/net/wireless/rt2x00/rt73usb.c | 11 ++-
drivers/net/wireless/rt2x00/rt73usb.h | 31 ++++----
15 files changed, 280 insertions(+), 227 deletions(-)

--
1.7.11.1



2012-08-31 17:22:20

by Gertjan van Wingerde

[permalink] [raw]
Subject: [PATCH v2 4/6] rt2x00: Align GPIO register definitions with the datasheets.

Ensure that all active GPIO pins are included in the GPIO register
definitions, nothing more and nothing less.

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

diff --git a/drivers/net/wireless/rt2x00/rt2400pci.h b/drivers/net/wireless/rt2x00/rt2400pci.h
index 7564ae9..9d78a53 100644
--- a/drivers/net/wireless/rt2x00/rt2400pci.h
+++ b/drivers/net/wireless/rt2x00/rt2400pci.h
@@ -671,6 +671,13 @@
#define GPIOCSR_BIT6 FIELD32(0x00000040)
#define GPIOCSR_BIT7 FIELD32(0x00000080)
#define GPIOCSR_BIT8 FIELD32(0x00000100)
+#define GPIOCSR_BIT9 FIELD32(0x00000200)
+#define GPIOCSR_BIT10 FIELD32(0x00000400)
+#define GPIOCSR_BIT11 FIELD32(0x00000800)
+#define GPIOCSR_BIT12 FIELD32(0x00001000)
+#define GPIOCSR_BIT13 FIELD32(0x00002000)
+#define GPIOCSR_BIT14 FIELD32(0x00004000)
+#define GPIOCSR_BIT15 FIELD32(0x00008000)

/*
* BBPPCSR: BBP Pin control register.
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.h b/drivers/net/wireless/rt2x00/rt2500usb.h
index 196bd51..9652300 100644
--- a/drivers/net/wireless/rt2x00/rt2500usb.h
+++ b/drivers/net/wireless/rt2x00/rt2500usb.h
@@ -198,6 +198,13 @@
#define MAC_CSR19_BIT6 FIELD16(0x0040)
#define MAC_CSR19_BIT7 FIELD16(0x0080)
#define MAC_CSR19_BIT8 FIELD16(0x0100)
+#define MAC_CSR19_BIT9 FIELD16(0x0200)
+#define MAC_CSR19_BIT10 FIELD16(0x0400)
+#define MAC_CSR19_BIT11 FIELD16(0x0800)
+#define MAC_CSR19_BIT12 FIELD16(0x1000)
+#define MAC_CSR19_BIT13 FIELD16(0x2000)
+#define MAC_CSR19_BIT14 FIELD16(0x4000)
+#define MAC_CSR19_BIT15 FIELD16(0x8000)

/*
* MAC_CSR20: LED control register.
diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
index e252e9b..a838e17 100644
--- a/drivers/net/wireless/rt2x00/rt2800.h
+++ b/drivers/net/wireless/rt2x00/rt2800.h
@@ -459,6 +459,12 @@
#define GPIO_CTRL_CFG_GPIOD_BIT5 FIELD32(0x00002000)
#define GPIO_CTRL_CFG_GPIOD_BIT6 FIELD32(0x00004000)
#define GPIO_CTRL_CFG_GPIOD_BIT7 FIELD32(0x00008000)
+#define GPIO_CTRL_CFG_BIT8 FIELD32(0x00010000)
+#define GPIO_CTRL_CFG_BIT9 FIELD32(0x00020000)
+#define GPIO_CTRL_CFG_BIT10 FIELD32(0x00040000)
+#define GPIO_CTRL_CFG_GPIOD_BIT8 FIELD32(0x01000000)
+#define GPIO_CTRL_CFG_GPIOD_BIT9 FIELD32(0x02000000)
+#define GPIO_CTRL_CFG_GPIOD_BIT10 FIELD32(0x04000000)

/*
* MCU_CMD_CFG
diff --git a/drivers/net/wireless/rt2x00/rt61pci.h b/drivers/net/wireless/rt2x00/rt61pci.h
index 8f3da5a..9ee0c33 100644
--- a/drivers/net/wireless/rt2x00/rt61pci.h
+++ b/drivers/net/wireless/rt2x00/rt61pci.h
@@ -365,8 +365,6 @@ struct hw_pairwise_ta_entry {
#define MAC_CSR13_BIT3 FIELD32(0x00000008)
#define MAC_CSR13_BIT4 FIELD32(0x00000010)
#define MAC_CSR13_BIT5 FIELD32(0x00000020)
-#define MAC_CSR13_BIT6 FIELD32(0x00000040)
-#define MAC_CSR13_BIT7 FIELD32(0x00000080)
#define MAC_CSR13_BIT8 FIELD32(0x00000100)
#define MAC_CSR13_BIT9 FIELD32(0x00000200)
#define MAC_CSR13_BIT10 FIELD32(0x00000400)
--
1.7.11.1


2012-08-31 17:22:20

by Gertjan van Wingerde

[permalink] [raw]
Subject: [PATCH v2 3/6] rt2x00: Fix rfkill polling prior to interface start.

We need to program the rfkill switch GPIO pin direction to input at
device initialization time, not only when the interface is brought up.
Doing this only when the interface is brought up could lead to rfkill
detecting the switch is turned on erroneously and inability to create
the interface and bringing it up.

Reported-and-tested-by: Andreas Messer <[email protected]>
Signed-off-by: Gertjan van Wingerde <[email protected]>
Cc: <[email protected]>

diff --git a/drivers/net/wireless/rt2x00/rt2400pci.c b/drivers/net/wireless/rt2x00/rt2400pci.c
index 8b9dbd7..64328af 100644
--- a/drivers/net/wireless/rt2x00/rt2400pci.c
+++ b/drivers/net/wireless/rt2x00/rt2400pci.c
@@ -1611,6 +1611,7 @@ static int rt2400pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
static int rt2400pci_probe_hw(struct rt2x00_dev *rt2x00dev)
{
int retval;
+ u32 reg;

/*
* Allocate eeprom data.
@@ -1624,6 +1625,14 @@ static int rt2400pci_probe_hw(struct rt2x00_dev *rt2x00dev)
return retval;

/*
+ * Enable rfkill polling by setting GPIO direction of the
+ * rfkill switch GPIO pin correctly.
+ */
+ rt2x00pci_register_read(rt2x00dev, GPIOCSR, &reg);
+ rt2x00_set_field32(&reg, GPIOCSR_BIT8, 1);
+ rt2x00pci_register_write(rt2x00dev, GPIOCSR, reg);
+
+ /*
* Initialize hw specifications.
*/
retval = rt2400pci_probe_hw_mode(rt2x00dev);
diff --git a/drivers/net/wireless/rt2x00/rt2400pci.h b/drivers/net/wireless/rt2x00/rt2400pci.h
index d3a4a68..7564ae9 100644
--- a/drivers/net/wireless/rt2x00/rt2400pci.h
+++ b/drivers/net/wireless/rt2x00/rt2400pci.h
@@ -670,6 +670,7 @@
#define GPIOCSR_BIT5 FIELD32(0x00000020)
#define GPIOCSR_BIT6 FIELD32(0x00000040)
#define GPIOCSR_BIT7 FIELD32(0x00000080)
+#define GPIOCSR_BIT8 FIELD32(0x00000100)

/*
* BBPPCSR: BBP Pin control register.
diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c
index d2cf8a4..3de0406 100644
--- a/drivers/net/wireless/rt2x00/rt2500pci.c
+++ b/drivers/net/wireless/rt2x00/rt2500pci.c
@@ -1929,6 +1929,7 @@ static int rt2500pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
static int rt2500pci_probe_hw(struct rt2x00_dev *rt2x00dev)
{
int retval;
+ u32 reg;

/*
* Allocate eeprom data.
@@ -1942,6 +1943,14 @@ static int rt2500pci_probe_hw(struct rt2x00_dev *rt2x00dev)
return retval;

/*
+ * Enable rfkill polling by setting GPIO direction of the
+ * rfkill switch GPIO pin correctly.
+ */
+ rt2x00pci_register_read(rt2x00dev, GPIOCSR, &reg);
+ rt2x00_set_field32(&reg, GPIOCSR_DIR0, 1);
+ rt2x00pci_register_write(rt2x00dev, GPIOCSR, reg);
+
+ /*
* Initialize hw specifications.
*/
retval = rt2500pci_probe_hw_mode(rt2x00dev);
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
index b3a1d73..89fee31 100644
--- a/drivers/net/wireless/rt2x00/rt2500usb.c
+++ b/drivers/net/wireless/rt2x00/rt2500usb.c
@@ -1768,6 +1768,7 @@ static int rt2500usb_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
static int rt2500usb_probe_hw(struct rt2x00_dev *rt2x00dev)
{
int retval;
+ u16 reg;

/*
* Allocate eeprom data.
@@ -1781,6 +1782,14 @@ static int rt2500usb_probe_hw(struct rt2x00_dev *rt2x00dev)
return retval;

/*
+ * Enable rfkill polling by setting GPIO direction of the
+ * rfkill switch GPIO pin correctly.
+ */
+ rt2500usb_register_read(rt2x00dev, MAC_CSR19, &reg);
+ rt2x00_set_field16(&reg, MAC_CSR19_BIT8, 0);
+ rt2500usb_register_write(rt2x00dev, MAC_CSR19, reg);
+
+ /*
* Initialize hw specifications.
*/
retval = rt2500usb_probe_hw_mode(rt2x00dev);
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.h b/drivers/net/wireless/rt2x00/rt2500usb.h
index 192531d..196bd51 100644
--- a/drivers/net/wireless/rt2x00/rt2500usb.h
+++ b/drivers/net/wireless/rt2x00/rt2500usb.h
@@ -197,6 +197,7 @@
#define MAC_CSR19_BIT5 FIELD16(0x0020)
#define MAC_CSR19_BIT6 FIELD16(0x0040)
#define MAC_CSR19_BIT7 FIELD16(0x0080)
+#define MAC_CSR19_BIT8 FIELD16(0x0100)

/*
* MAC_CSR20: LED control register.
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
index 98aa426..4765bbd 100644
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
@@ -983,6 +983,7 @@ static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
static int rt2800pci_probe_hw(struct rt2x00_dev *rt2x00dev)
{
int retval;
+ u32 reg;

/*
* Allocate eeprom data.
@@ -996,6 +997,14 @@ static int rt2800pci_probe_hw(struct rt2x00_dev *rt2x00dev)
return retval;

/*
+ * Enable rfkill polling by setting GPIO direction of the
+ * rfkill switch GPIO pin correctly.
+ */
+ rt2x00pci_register_read(rt2x00dev, GPIO_CTRL_CFG, &reg);
+ rt2x00_set_field32(&reg, GPIO_CTRL_CFG_GPIOD_BIT2, 1);
+ rt2x00pci_register_write(rt2x00dev, GPIO_CTRL_CFG, reg);
+
+ /*
* Initialize hw specifications.
*/
retval = rt2800_probe_hw_mode(rt2x00dev);
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
index 6681bfc..52a32b5 100644
--- a/drivers/net/wireless/rt2x00/rt2800usb.c
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
@@ -736,6 +736,7 @@ static int rt2800usb_validate_eeprom(struct rt2x00_dev *rt2x00dev)
static int rt2800usb_probe_hw(struct rt2x00_dev *rt2x00dev)
{
int retval;
+ u32 reg;

/*
* Allocate eeprom data.
@@ -749,6 +750,14 @@ static int rt2800usb_probe_hw(struct rt2x00_dev *rt2x00dev)
return retval;

/*
+ * Enable rfkill polling by setting GPIO direction of the
+ * rfkill switch GPIO pin correctly.
+ */
+ rt2x00usb_register_read(rt2x00dev, GPIO_CTRL_CFG, &reg);
+ rt2x00_set_field32(&reg, GPIO_CTRL_CFG_GPIOD_BIT2, 1);
+ rt2x00usb_register_write(rt2x00dev, GPIO_CTRL_CFG, reg);
+
+ /*
* Initialize hw specifications.
*/
retval = rt2800_probe_hw_mode(rt2x00dev);
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
index 3f7bc5c..b8ec961 100644
--- a/drivers/net/wireless/rt2x00/rt61pci.c
+++ b/drivers/net/wireless/rt2x00/rt61pci.c
@@ -2832,6 +2832,7 @@ static int rt61pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
static int rt61pci_probe_hw(struct rt2x00_dev *rt2x00dev)
{
int retval;
+ u32 reg;

/*
* Disable power saving.
@@ -2850,6 +2851,14 @@ static int rt61pci_probe_hw(struct rt2x00_dev *rt2x00dev)
return retval;

/*
+ * Enable rfkill polling by setting GPIO direction of the
+ * rfkill switch GPIO pin correctly.
+ */
+ rt2x00pci_register_read(rt2x00dev, MAC_CSR13, &reg);
+ rt2x00_set_field32(&reg, MAC_CSR13_BIT13, 1);
+ rt2x00pci_register_write(rt2x00dev, MAC_CSR13, reg);
+
+ /*
* Initialize hw specifications.
*/
retval = rt61pci_probe_hw_mode(rt2x00dev);
diff --git a/drivers/net/wireless/rt2x00/rt61pci.h b/drivers/net/wireless/rt2x00/rt61pci.h
index e3cd6db..8f3da5a 100644
--- a/drivers/net/wireless/rt2x00/rt61pci.h
+++ b/drivers/net/wireless/rt2x00/rt61pci.h
@@ -372,6 +372,7 @@ struct hw_pairwise_ta_entry {
#define MAC_CSR13_BIT10 FIELD32(0x00000400)
#define MAC_CSR13_BIT11 FIELD32(0x00000800)
#define MAC_CSR13_BIT12 FIELD32(0x00001000)
+#define MAC_CSR13_BIT13 FIELD32(0x00002000)

/*
* MAC_CSR14: LED control register.
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
index ba6e434..248436c 100644
--- a/drivers/net/wireless/rt2x00/rt73usb.c
+++ b/drivers/net/wireless/rt2x00/rt73usb.c
@@ -2177,6 +2177,7 @@ static int rt73usb_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
static int rt73usb_probe_hw(struct rt2x00_dev *rt2x00dev)
{
int retval;
+ u32 reg;

/*
* Allocate eeprom data.
@@ -2190,6 +2191,14 @@ static int rt73usb_probe_hw(struct rt2x00_dev *rt2x00dev)
return retval;

/*
+ * Enable rfkill polling by setting GPIO direction of the
+ * rfkill switch GPIO pin correctly.
+ */
+ rt2x00usb_register_read(rt2x00dev, MAC_CSR13, &reg);
+ rt2x00_set_field32(&reg, MAC_CSR13_BIT15, 0);
+ rt2x00usb_register_write(rt2x00dev, MAC_CSR13, reg);
+
+ /*
* Initialize hw specifications.
*/
retval = rt73usb_probe_hw_mode(rt2x00dev);
diff --git a/drivers/net/wireless/rt2x00/rt73usb.h b/drivers/net/wireless/rt2x00/rt73usb.h
index 9f6b470..df1cc11 100644
--- a/drivers/net/wireless/rt2x00/rt73usb.h
+++ b/drivers/net/wireless/rt2x00/rt73usb.h
@@ -282,6 +282,9 @@ struct hw_pairwise_ta_entry {
#define MAC_CSR13_BIT10 FIELD32(0x00000400)
#define MAC_CSR13_BIT11 FIELD32(0x00000800)
#define MAC_CSR13_BIT12 FIELD32(0x00001000)
+#define MAC_CSR13_BIT13 FIELD32(0x00002000)
+#define MAC_CSR13_BIT14 FIELD32(0x00004000)
+#define MAC_CSR13_BIT15 FIELD32(0x00008000)

/*
* MAC_CSR14: LED control register.
--
1.7.11.1


2012-08-31 17:22:22

by Gertjan van Wingerde

[permalink] [raw]
Subject: [PATCH v2 5/6] rt2x00: Unify GPIO register field namings

The various rt2x00 drivers use different methods to name the different
GPIO register fields indicating the GPIO pin value and the fields
indicating the direction.
Start using a unified naming scheme for the GPIO register fields:
- <csr>_VAL<x> for fields indicating the GPIO pin value.
- <csr>_DIR<x> for fields indicating the GPIO pin direction.

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

diff --git a/drivers/net/wireless/rt2x00/rt2400pci.c b/drivers/net/wireless/rt2x00/rt2400pci.c
index 64328af..6458ab8 100644
--- a/drivers/net/wireless/rt2x00/rt2400pci.c
+++ b/drivers/net/wireless/rt2x00/rt2400pci.c
@@ -205,7 +205,7 @@ static int rt2400pci_rfkill_poll(struct rt2x00_dev *rt2x00dev)
u32 reg;

rt2x00pci_register_read(rt2x00dev, GPIOCSR, &reg);
- return rt2x00_get_field32(reg, GPIOCSR_BIT0);
+ return rt2x00_get_field32(reg, GPIOCSR_VAL0);
}

#ifdef CONFIG_RT2X00_LIB_LEDS
@@ -1629,7 +1629,7 @@ static int rt2400pci_probe_hw(struct rt2x00_dev *rt2x00dev)
* rfkill switch GPIO pin correctly.
*/
rt2x00pci_register_read(rt2x00dev, GPIOCSR, &reg);
- rt2x00_set_field32(&reg, GPIOCSR_BIT8, 1);
+ rt2x00_set_field32(&reg, GPIOCSR_DIR0, 1);
rt2x00pci_register_write(rt2x00dev, GPIOCSR, reg);

/*
diff --git a/drivers/net/wireless/rt2x00/rt2400pci.h b/drivers/net/wireless/rt2x00/rt2400pci.h
index 9d78a53..e4b07f0 100644
--- a/drivers/net/wireless/rt2x00/rt2400pci.h
+++ b/drivers/net/wireless/rt2x00/rt2400pci.h
@@ -660,24 +660,26 @@

/*
* GPIOCSR: GPIO control register.
+ * GPIOCSR_VALx: Actual GPIO pin x value
+ * GPIOCSR_DIRx: GPIO direction: 0 = output; 1 = input
*/
#define GPIOCSR 0x0120
-#define GPIOCSR_BIT0 FIELD32(0x00000001)
-#define GPIOCSR_BIT1 FIELD32(0x00000002)
-#define GPIOCSR_BIT2 FIELD32(0x00000004)
-#define GPIOCSR_BIT3 FIELD32(0x00000008)
-#define GPIOCSR_BIT4 FIELD32(0x00000010)
-#define GPIOCSR_BIT5 FIELD32(0x00000020)
-#define GPIOCSR_BIT6 FIELD32(0x00000040)
-#define GPIOCSR_BIT7 FIELD32(0x00000080)
-#define GPIOCSR_BIT8 FIELD32(0x00000100)
-#define GPIOCSR_BIT9 FIELD32(0x00000200)
-#define GPIOCSR_BIT10 FIELD32(0x00000400)
-#define GPIOCSR_BIT11 FIELD32(0x00000800)
-#define GPIOCSR_BIT12 FIELD32(0x00001000)
-#define GPIOCSR_BIT13 FIELD32(0x00002000)
-#define GPIOCSR_BIT14 FIELD32(0x00004000)
-#define GPIOCSR_BIT15 FIELD32(0x00008000)
+#define GPIOCSR_VAL0 FIELD32(0x00000001)
+#define GPIOCSR_VAL1 FIELD32(0x00000002)
+#define GPIOCSR_VAL2 FIELD32(0x00000004)
+#define GPIOCSR_VAL3 FIELD32(0x00000008)
+#define GPIOCSR_VAL4 FIELD32(0x00000010)
+#define GPIOCSR_VAL5 FIELD32(0x00000020)
+#define GPIOCSR_VAL6 FIELD32(0x00000040)
+#define GPIOCSR_VAL7 FIELD32(0x00000080)
+#define GPIOCSR_DIR0 FIELD32(0x00000100)
+#define GPIOCSR_DIR1 FIELD32(0x00000200)
+#define GPIOCSR_DIR2 FIELD32(0x00000400)
+#define GPIOCSR_DIR3 FIELD32(0x00000800)
+#define GPIOCSR_DIR4 FIELD32(0x00001000)
+#define GPIOCSR_DIR5 FIELD32(0x00002000)
+#define GPIOCSR_DIR6 FIELD32(0x00004000)
+#define GPIOCSR_DIR7 FIELD32(0x00008000)

/*
* BBPPCSR: BBP Pin control register.
diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c
index 3de0406..68bca14 100644
--- a/drivers/net/wireless/rt2x00/rt2500pci.c
+++ b/drivers/net/wireless/rt2x00/rt2500pci.c
@@ -205,7 +205,7 @@ static int rt2500pci_rfkill_poll(struct rt2x00_dev *rt2x00dev)
u32 reg;

rt2x00pci_register_read(rt2x00dev, GPIOCSR, &reg);
- return rt2x00_get_field32(reg, GPIOCSR_BIT0);
+ return rt2x00_get_field32(reg, GPIOCSR_VAL0);
}

#ifdef CONFIG_RT2X00_LIB_LEDS
diff --git a/drivers/net/wireless/rt2x00/rt2500pci.h b/drivers/net/wireless/rt2x00/rt2500pci.h
index 2aad7ba..9c10068 100644
--- a/drivers/net/wireless/rt2x00/rt2500pci.h
+++ b/drivers/net/wireless/rt2x00/rt2500pci.h
@@ -789,16 +789,18 @@

/*
* GPIOCSR: GPIO control register.
+ * GPIOCSR_VALx: GPIO value
+ * GPIOCSR_DIRx: GPIO direction: 0 = output; 1 = input
*/
#define GPIOCSR 0x0120
-#define GPIOCSR_BIT0 FIELD32(0x00000001)
-#define GPIOCSR_BIT1 FIELD32(0x00000002)
-#define GPIOCSR_BIT2 FIELD32(0x00000004)
-#define GPIOCSR_BIT3 FIELD32(0x00000008)
-#define GPIOCSR_BIT4 FIELD32(0x00000010)
-#define GPIOCSR_BIT5 FIELD32(0x00000020)
-#define GPIOCSR_BIT6 FIELD32(0x00000040)
-#define GPIOCSR_BIT7 FIELD32(0x00000080)
+#define GPIOCSR_VAL0 FIELD32(0x00000001)
+#define GPIOCSR_VAL1 FIELD32(0x00000002)
+#define GPIOCSR_VAL2 FIELD32(0x00000004)
+#define GPIOCSR_VAL3 FIELD32(0x00000008)
+#define GPIOCSR_VAL4 FIELD32(0x00000010)
+#define GPIOCSR_VAL5 FIELD32(0x00000020)
+#define GPIOCSR_VAL6 FIELD32(0x00000040)
+#define GPIOCSR_VAL7 FIELD32(0x00000080)
#define GPIOCSR_DIR0 FIELD32(0x00000100)
#define GPIOCSR_DIR1 FIELD32(0x00000200)
#define GPIOCSR_DIR2 FIELD32(0x00000400)
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
index 89fee31..f95b551 100644
--- a/drivers/net/wireless/rt2x00/rt2500usb.c
+++ b/drivers/net/wireless/rt2x00/rt2500usb.c
@@ -283,7 +283,7 @@ static int rt2500usb_rfkill_poll(struct rt2x00_dev *rt2x00dev)
u16 reg;

rt2500usb_register_read(rt2x00dev, MAC_CSR19, &reg);
- return rt2x00_get_field16(reg, MAC_CSR19_BIT7);
+ return rt2x00_get_field16(reg, MAC_CSR19_VAL7);
}

#ifdef CONFIG_RT2X00_LIB_LEDS
@@ -1786,7 +1786,7 @@ static int rt2500usb_probe_hw(struct rt2x00_dev *rt2x00dev)
* rfkill switch GPIO pin correctly.
*/
rt2500usb_register_read(rt2x00dev, MAC_CSR19, &reg);
- rt2x00_set_field16(&reg, MAC_CSR19_BIT8, 0);
+ rt2x00_set_field16(&reg, MAC_CSR19_DIR0, 0);
rt2500usb_register_write(rt2x00dev, MAC_CSR19, reg);

/*
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.h b/drivers/net/wireless/rt2x00/rt2500usb.h
index 9652300..1b91a4c 100644
--- a/drivers/net/wireless/rt2x00/rt2500usb.h
+++ b/drivers/net/wireless/rt2x00/rt2500usb.h
@@ -187,24 +187,26 @@

/*
* MAC_CSR19: GPIO control register.
+ * MAC_CSR19_VALx: GPIO value
+ * MAC_CSR19_DIRx: GPIO direction: 0 = input; 1 = output
*/
#define MAC_CSR19 0x0426
-#define MAC_CSR19_BIT0 FIELD16(0x0001)
-#define MAC_CSR19_BIT1 FIELD16(0x0002)
-#define MAC_CSR19_BIT2 FIELD16(0x0004)
-#define MAC_CSR19_BIT3 FIELD16(0x0008)
-#define MAC_CSR19_BIT4 FIELD16(0x0010)
-#define MAC_CSR19_BIT5 FIELD16(0x0020)
-#define MAC_CSR19_BIT6 FIELD16(0x0040)
-#define MAC_CSR19_BIT7 FIELD16(0x0080)
-#define MAC_CSR19_BIT8 FIELD16(0x0100)
-#define MAC_CSR19_BIT9 FIELD16(0x0200)
-#define MAC_CSR19_BIT10 FIELD16(0x0400)
-#define MAC_CSR19_BIT11 FIELD16(0x0800)
-#define MAC_CSR19_BIT12 FIELD16(0x1000)
-#define MAC_CSR19_BIT13 FIELD16(0x2000)
-#define MAC_CSR19_BIT14 FIELD16(0x4000)
-#define MAC_CSR19_BIT15 FIELD16(0x8000)
+#define MAC_CSR19_VAL0 FIELD16(0x0001)
+#define MAC_CSR19_VAL1 FIELD16(0x0002)
+#define MAC_CSR19_VAL2 FIELD16(0x0004)
+#define MAC_CSR19_VAL3 FIELD16(0x0008)
+#define MAC_CSR19_VAL4 FIELD16(0x0010)
+#define MAC_CSR19_VAL5 FIELD16(0x0020)
+#define MAC_CSR19_VAL6 FIELD16(0x0040)
+#define MAC_CSR19_VAL7 FIELD16(0x0080)
+#define MAC_CSR19_DIR0 FIELD16(0x0100)
+#define MAC_CSR19_DIR1 FIELD16(0x0200)
+#define MAC_CSR19_DIR2 FIELD16(0x0400)
+#define MAC_CSR19_DIR3 FIELD16(0x0800)
+#define MAC_CSR19_DIR4 FIELD16(0x1000)
+#define MAC_CSR19_DIR5 FIELD16(0x2000)
+#define MAC_CSR19_DIR6 FIELD16(0x4000)
+#define MAC_CSR19_DIR7 FIELD16(0x8000)

/*
* MAC_CSR20: LED control register.
diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
index a838e17..e13916f 100644
--- a/drivers/net/wireless/rt2x00/rt2800.h
+++ b/drivers/net/wireless/rt2x00/rt2800.h
@@ -439,32 +439,33 @@
#define WMM_TXOP1_CFG_AC3TXOP FIELD32(0xffff0000)

/*
- * GPIO_CTRL_CFG:
- * GPIOD: GPIO direction, 0: Output, 1: Input
- */
-#define GPIO_CTRL_CFG 0x0228
-#define GPIO_CTRL_CFG_BIT0 FIELD32(0x00000001)
-#define GPIO_CTRL_CFG_BIT1 FIELD32(0x00000002)
-#define GPIO_CTRL_CFG_BIT2 FIELD32(0x00000004)
-#define GPIO_CTRL_CFG_BIT3 FIELD32(0x00000008)
-#define GPIO_CTRL_CFG_BIT4 FIELD32(0x00000010)
-#define GPIO_CTRL_CFG_BIT5 FIELD32(0x00000020)
-#define GPIO_CTRL_CFG_BIT6 FIELD32(0x00000040)
-#define GPIO_CTRL_CFG_BIT7 FIELD32(0x00000080)
-#define GPIO_CTRL_CFG_GPIOD_BIT0 FIELD32(0x00000100)
-#define GPIO_CTRL_CFG_GPIOD_BIT1 FIELD32(0x00000200)
-#define GPIO_CTRL_CFG_GPIOD_BIT2 FIELD32(0x00000400)
-#define GPIO_CTRL_CFG_GPIOD_BIT3 FIELD32(0x00000800)
-#define GPIO_CTRL_CFG_GPIOD_BIT4 FIELD32(0x00001000)
-#define GPIO_CTRL_CFG_GPIOD_BIT5 FIELD32(0x00002000)
-#define GPIO_CTRL_CFG_GPIOD_BIT6 FIELD32(0x00004000)
-#define GPIO_CTRL_CFG_GPIOD_BIT7 FIELD32(0x00008000)
-#define GPIO_CTRL_CFG_BIT8 FIELD32(0x00010000)
-#define GPIO_CTRL_CFG_BIT9 FIELD32(0x00020000)
-#define GPIO_CTRL_CFG_BIT10 FIELD32(0x00040000)
-#define GPIO_CTRL_CFG_GPIOD_BIT8 FIELD32(0x01000000)
-#define GPIO_CTRL_CFG_GPIOD_BIT9 FIELD32(0x02000000)
-#define GPIO_CTRL_CFG_GPIOD_BIT10 FIELD32(0x04000000)
+ * GPIO_CTRL:
+ * GPIO_CTRL_VALx: GPIO value
+ * GPIO_CTRL_DIRx: GPIO direction: 0 = output; 1 = input
+ */
+#define GPIO_CTRL 0x0228
+#define GPIO_CTRL_VAL0 FIELD32(0x00000001)
+#define GPIO_CTRL_VAL1 FIELD32(0x00000002)
+#define GPIO_CTRL_VAL2 FIELD32(0x00000004)
+#define GPIO_CTRL_VAL3 FIELD32(0x00000008)
+#define GPIO_CTRL_VAL4 FIELD32(0x00000010)
+#define GPIO_CTRL_VAL5 FIELD32(0x00000020)
+#define GPIO_CTRL_VAL6 FIELD32(0x00000040)
+#define GPIO_CTRL_VAL7 FIELD32(0x00000080)
+#define GPIO_CTRL_DIR0 FIELD32(0x00000100)
+#define GPIO_CTRL_DIR1 FIELD32(0x00000200)
+#define GPIO_CTRL_DIR2 FIELD32(0x00000400)
+#define GPIO_CTRL_DIR3 FIELD32(0x00000800)
+#define GPIO_CTRL_DIR4 FIELD32(0x00001000)
+#define GPIO_CTRL_DIR5 FIELD32(0x00002000)
+#define GPIO_CTRL_DIR6 FIELD32(0x00004000)
+#define GPIO_CTRL_DIR7 FIELD32(0x00008000)
+#define GPIO_CTRL_VAL8 FIELD32(0x00010000)
+#define GPIO_CTRL_VAL9 FIELD32(0x00020000)
+#define GPIO_CTRL_VAL10 FIELD32(0x00040000)
+#define GPIO_CTRL_DIR8 FIELD32(0x01000000)
+#define GPIO_CTRL_DIR9 FIELD32(0x02000000)
+#define GPIO_CTRL_DIR10 FIELD32(0x04000000)

/*
* MCU_CMD_CFG
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index cb8c2ac..c3cae1d 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -923,8 +923,8 @@ int rt2800_rfkill_poll(struct rt2x00_dev *rt2x00dev)
rt2800_register_read(rt2x00dev, WLAN_FUN_CTRL, &reg);
return rt2x00_get_field32(reg, WLAN_GPIO_IN_BIT0);
} else {
- rt2800_register_read(rt2x00dev, GPIO_CTRL_CFG, &reg);
- return rt2x00_get_field32(reg, GPIO_CTRL_CFG_BIT2);
+ rt2800_register_read(rt2x00dev, GPIO_CTRL, &reg);
+ return rt2x00_get_field32(reg, GPIO_CTRL_VAL2);
}
}
EXPORT_SYMBOL_GPL(rt2800_rfkill_poll);
@@ -1570,10 +1570,10 @@ static void rt2800_set_ant_diversity(struct rt2x00_dev *rt2x00dev,
rt2800_mcu_request(rt2x00dev, MCU_ANT_SELECT, 0xff,
eesk_pin, 0);

- rt2800_register_read(rt2x00dev, GPIO_CTRL_CFG, &reg);
- rt2x00_set_field32(&reg, GPIO_CTRL_CFG_GPIOD_BIT3, 0);
- rt2x00_set_field32(&reg, GPIO_CTRL_CFG_BIT3, gpio_bit3);
- rt2800_register_write(rt2x00dev, GPIO_CTRL_CFG, reg);
+ rt2800_register_read(rt2x00dev, GPIO_CTRL, &reg);
+ rt2x00_set_field32(&reg, GPIO_CTRL_DIR3, 0);
+ rt2x00_set_field32(&reg, GPIO_CTRL_VAL3, gpio_bit3);
+ rt2800_register_write(rt2x00dev, GPIO_CTRL, reg);
}

void rt2800_config_ant(struct rt2x00_dev *rt2x00dev, struct antenna_setup *ant)
@@ -1995,13 +1995,13 @@ static void rt2800_config_channel_rf3052(struct rt2x00_dev *rt2x00dev,
rt2800_rfcsr_write(rt2x00dev, 29, 0x9f);
}

- rt2800_register_read(rt2x00dev, GPIO_CTRL_CFG, &reg);
- rt2x00_set_field32(&reg, GPIO_CTRL_CFG_GPIOD_BIT7, 0);
+ rt2800_register_read(rt2x00dev, GPIO_CTRL, &reg);
+ rt2x00_set_field32(&reg, GPIO_CTRL_DIR7, 0);
if (rf->channel <= 14)
- rt2x00_set_field32(&reg, GPIO_CTRL_CFG_BIT7, 1);
+ rt2x00_set_field32(&reg, GPIO_CTRL_VAL7, 1);
else
- rt2x00_set_field32(&reg, GPIO_CTRL_CFG_BIT7, 0);
- rt2800_register_write(rt2x00dev, GPIO_CTRL_CFG, reg);
+ rt2x00_set_field32(&reg, GPIO_CTRL_VAL7, 0);
+ rt2800_register_write(rt2x00dev, GPIO_CTRL, reg);

rt2800_rfcsr_read(rt2x00dev, 7, &rfcsr);
rt2x00_set_field8(&rfcsr, RFCSR7_RF_TUNING, 1);
@@ -3587,16 +3587,16 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
if (test_bit(CAPABILITY_BT_COEXIST, &rt2x00dev->cap_flags)) {
u32 reg;

- rt2800_register_read(rt2x00dev, GPIO_CTRL_CFG, &reg);
- rt2x00_set_field32(&reg, GPIO_CTRL_CFG_GPIOD_BIT3, 0);
- rt2x00_set_field32(&reg, GPIO_CTRL_CFG_GPIOD_BIT6, 0);
- rt2x00_set_field32(&reg, GPIO_CTRL_CFG_BIT3, 0);
- rt2x00_set_field32(&reg, GPIO_CTRL_CFG_BIT6, 0);
+ rt2800_register_read(rt2x00dev, GPIO_CTRL, &reg);
+ rt2x00_set_field32(&reg, GPIO_CTRL_DIR3, 0);
+ rt2x00_set_field32(&reg, GPIO_CTRL_DIR6, 0);
+ rt2x00_set_field32(&reg, GPIO_CTRL_VAL3, 0);
+ rt2x00_set_field32(&reg, GPIO_CTRL_VAL6, 0);
if (ant == 0)
- rt2x00_set_field32(&reg, GPIO_CTRL_CFG_BIT3, 1);
+ rt2x00_set_field32(&reg, GPIO_CTRL_VAL3, 1);
else if (ant == 1)
- rt2x00_set_field32(&reg, GPIO_CTRL_CFG_BIT6, 1);
- rt2800_register_write(rt2x00dev, GPIO_CTRL_CFG, reg);
+ rt2x00_set_field32(&reg, GPIO_CTRL_VAL6, 1);
+ rt2800_register_write(rt2x00dev, GPIO_CTRL, reg);
}

/* This chip has hardware antenna diversity*/
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
index 4765bbd..0965540 100644
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
@@ -1000,9 +1000,9 @@ static int rt2800pci_probe_hw(struct rt2x00_dev *rt2x00dev)
* Enable rfkill polling by setting GPIO direction of the
* rfkill switch GPIO pin correctly.
*/
- rt2x00pci_register_read(rt2x00dev, GPIO_CTRL_CFG, &reg);
- rt2x00_set_field32(&reg, GPIO_CTRL_CFG_GPIOD_BIT2, 1);
- rt2x00pci_register_write(rt2x00dev, GPIO_CTRL_CFG, reg);
+ rt2x00pci_register_read(rt2x00dev, GPIO_CTRL, &reg);
+ rt2x00_set_field32(&reg, GPIO_CTRL_DIR2, 1);
+ rt2x00pci_register_write(rt2x00dev, GPIO_CTRL, reg);

/*
* Initialize hw specifications.
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
index 52a32b5..5390632 100644
--- a/drivers/net/wireless/rt2x00/rt2800usb.c
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
@@ -753,9 +753,9 @@ static int rt2800usb_probe_hw(struct rt2x00_dev *rt2x00dev)
* Enable rfkill polling by setting GPIO direction of the
* rfkill switch GPIO pin correctly.
*/
- rt2x00usb_register_read(rt2x00dev, GPIO_CTRL_CFG, &reg);
- rt2x00_set_field32(&reg, GPIO_CTRL_CFG_GPIOD_BIT2, 1);
- rt2x00usb_register_write(rt2x00dev, GPIO_CTRL_CFG, reg);
+ rt2x00usb_register_read(rt2x00dev, GPIO_CTRL, &reg);
+ rt2x00_set_field32(&reg, GPIO_CTRL_DIR2, 1);
+ rt2x00usb_register_write(rt2x00dev, GPIO_CTRL, reg);

/*
* Initialize hw specifications.
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
index b8ec961..2673e05 100644
--- a/drivers/net/wireless/rt2x00/rt61pci.c
+++ b/drivers/net/wireless/rt2x00/rt61pci.c
@@ -243,7 +243,7 @@ static int rt61pci_rfkill_poll(struct rt2x00_dev *rt2x00dev)
u32 reg;

rt2x00pci_register_read(rt2x00dev, MAC_CSR13, &reg);
- return rt2x00_get_field32(reg, MAC_CSR13_BIT5);
+ return rt2x00_get_field32(reg, MAC_CSR13_VAL5);
}

#ifdef CONFIG_RT2X00_LIB_LEDS
@@ -715,11 +715,11 @@ static void rt61pci_config_antenna_2529_rx(struct rt2x00_dev *rt2x00dev,

rt2x00pci_register_read(rt2x00dev, MAC_CSR13, &reg);

- rt2x00_set_field32(&reg, MAC_CSR13_BIT4, p1);
- rt2x00_set_field32(&reg, MAC_CSR13_BIT12, 0);
+ rt2x00_set_field32(&reg, MAC_CSR13_DIR4, 0);
+ rt2x00_set_field32(&reg, MAC_CSR13_VAL4, p1);

- rt2x00_set_field32(&reg, MAC_CSR13_BIT3, !p2);
- rt2x00_set_field32(&reg, MAC_CSR13_BIT11, 0);
+ rt2x00_set_field32(&reg, MAC_CSR13_DIR3, 0);
+ rt2x00_set_field32(&reg, MAC_CSR13_VAL3, !p2);

rt2x00pci_register_write(rt2x00dev, MAC_CSR13, reg);
}
@@ -2855,7 +2855,7 @@ static int rt61pci_probe_hw(struct rt2x00_dev *rt2x00dev)
* rfkill switch GPIO pin correctly.
*/
rt2x00pci_register_read(rt2x00dev, MAC_CSR13, &reg);
- rt2x00_set_field32(&reg, MAC_CSR13_BIT13, 1);
+ rt2x00_set_field32(&reg, MAC_CSR13_DIR5, 1);
rt2x00pci_register_write(rt2x00dev, MAC_CSR13, reg);

/*
diff --git a/drivers/net/wireless/rt2x00/rt61pci.h b/drivers/net/wireless/rt2x00/rt61pci.h
index 9ee0c33..9bc6b60 100644
--- a/drivers/net/wireless/rt2x00/rt61pci.h
+++ b/drivers/net/wireless/rt2x00/rt61pci.h
@@ -357,20 +357,22 @@ struct hw_pairwise_ta_entry {

/*
* MAC_CSR13: GPIO.
+ * MAC_CSR13_VALx: GPIO value
+ * MAC_CSR13_DIRx: GPIO direction: 0 = output; 1 = input
*/
#define MAC_CSR13 0x3034
-#define MAC_CSR13_BIT0 FIELD32(0x00000001)
-#define MAC_CSR13_BIT1 FIELD32(0x00000002)
-#define MAC_CSR13_BIT2 FIELD32(0x00000004)
-#define MAC_CSR13_BIT3 FIELD32(0x00000008)
-#define MAC_CSR13_BIT4 FIELD32(0x00000010)
-#define MAC_CSR13_BIT5 FIELD32(0x00000020)
-#define MAC_CSR13_BIT8 FIELD32(0x00000100)
-#define MAC_CSR13_BIT9 FIELD32(0x00000200)
-#define MAC_CSR13_BIT10 FIELD32(0x00000400)
-#define MAC_CSR13_BIT11 FIELD32(0x00000800)
-#define MAC_CSR13_BIT12 FIELD32(0x00001000)
-#define MAC_CSR13_BIT13 FIELD32(0x00002000)
+#define MAC_CSR13_VAL0 FIELD32(0x00000001)
+#define MAC_CSR13_VAL1 FIELD32(0x00000002)
+#define MAC_CSR13_VAL2 FIELD32(0x00000004)
+#define MAC_CSR13_VAL3 FIELD32(0x00000008)
+#define MAC_CSR13_VAL4 FIELD32(0x00000010)
+#define MAC_CSR13_VAL5 FIELD32(0x00000020)
+#define MAC_CSR13_DIR0 FIELD32(0x00000100)
+#define MAC_CSR13_DIR1 FIELD32(0x00000200)
+#define MAC_CSR13_DIR2 FIELD32(0x00000400)
+#define MAC_CSR13_DIR3 FIELD32(0x00000800)
+#define MAC_CSR13_DIR4 FIELD32(0x00001000)
+#define MAC_CSR13_DIR5 FIELD32(0x00002000)

/*
* MAC_CSR14: LED control register.
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
index 248436c..cfa9f37 100644
--- a/drivers/net/wireless/rt2x00/rt73usb.c
+++ b/drivers/net/wireless/rt2x00/rt73usb.c
@@ -189,7 +189,7 @@ static int rt73usb_rfkill_poll(struct rt2x00_dev *rt2x00dev)
u32 reg;

rt2x00usb_register_read(rt2x00dev, MAC_CSR13, &reg);
- return rt2x00_get_field32(reg, MAC_CSR13_BIT7);
+ return rt2x00_get_field32(reg, MAC_CSR13_VAL7);
}

#ifdef CONFIG_RT2X00_LIB_LEDS
@@ -2195,7 +2195,7 @@ static int rt73usb_probe_hw(struct rt2x00_dev *rt2x00dev)
* rfkill switch GPIO pin correctly.
*/
rt2x00usb_register_read(rt2x00dev, MAC_CSR13, &reg);
- rt2x00_set_field32(&reg, MAC_CSR13_BIT15, 0);
+ rt2x00_set_field32(&reg, MAC_CSR13_DIR7, 0);
rt2x00usb_register_write(rt2x00dev, MAC_CSR13, reg);

/*
diff --git a/drivers/net/wireless/rt2x00/rt73usb.h b/drivers/net/wireless/rt2x00/rt73usb.h
index df1cc11..7577e0b 100644
--- a/drivers/net/wireless/rt2x00/rt73usb.h
+++ b/drivers/net/wireless/rt2x00/rt73usb.h
@@ -267,24 +267,26 @@ struct hw_pairwise_ta_entry {

/*
* MAC_CSR13: GPIO.
+ * MAC_CSR13_VALx: GPIO value
+ * MAC_CSR13_DIRx: GPIO direction: 0 = input; 1 = output
*/
#define MAC_CSR13 0x3034
-#define MAC_CSR13_BIT0 FIELD32(0x00000001)
-#define MAC_CSR13_BIT1 FIELD32(0x00000002)
-#define MAC_CSR13_BIT2 FIELD32(0x00000004)
-#define MAC_CSR13_BIT3 FIELD32(0x00000008)
-#define MAC_CSR13_BIT4 FIELD32(0x00000010)
-#define MAC_CSR13_BIT5 FIELD32(0x00000020)
-#define MAC_CSR13_BIT6 FIELD32(0x00000040)
-#define MAC_CSR13_BIT7 FIELD32(0x00000080)
-#define MAC_CSR13_BIT8 FIELD32(0x00000100)
-#define MAC_CSR13_BIT9 FIELD32(0x00000200)
-#define MAC_CSR13_BIT10 FIELD32(0x00000400)
-#define MAC_CSR13_BIT11 FIELD32(0x00000800)
-#define MAC_CSR13_BIT12 FIELD32(0x00001000)
-#define MAC_CSR13_BIT13 FIELD32(0x00002000)
-#define MAC_CSR13_BIT14 FIELD32(0x00004000)
-#define MAC_CSR13_BIT15 FIELD32(0x00008000)
+#define MAC_CSR13_VAL0 FIELD32(0x00000001)
+#define MAC_CSR13_VAL1 FIELD32(0x00000002)
+#define MAC_CSR13_VAL2 FIELD32(0x00000004)
+#define MAC_CSR13_VAL3 FIELD32(0x00000008)
+#define MAC_CSR13_VAL4 FIELD32(0x00000010)
+#define MAC_CSR13_VAL5 FIELD32(0x00000020)
+#define MAC_CSR13_VAL6 FIELD32(0x00000040)
+#define MAC_CSR13_VAL7 FIELD32(0x00000080)
+#define MAC_CSR13_DIR0 FIELD32(0x00000100)
+#define MAC_CSR13_DIR1 FIELD32(0x00000200)
+#define MAC_CSR13_DIR2 FIELD32(0x00000400)
+#define MAC_CSR13_DIR3 FIELD32(0x00000800)
+#define MAC_CSR13_DIR4 FIELD32(0x00001000)
+#define MAC_CSR13_DIR5 FIELD32(0x00002000)
+#define MAC_CSR13_DIR6 FIELD32(0x00004000)
+#define MAC_CSR13_DIR7 FIELD32(0x00008000)

/*
* MAC_CSR14: LED control register.
--
1.7.11.1


2012-08-31 17:22:20

by Gertjan van Wingerde

[permalink] [raw]
Subject: [PATCH v2 6/6] rt2x00: rt2800 - Make probe_hw function common between PCI and USB.

Refactor the probe_hw code so that more code can be shared between
rt2800pci and rt2800usb.

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

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index c3cae1d..2ad3b7a 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -44,6 +44,13 @@
#include "rt2800.h"

/*
+ * Allow hardware encryption to be disabled.
+ */
+static bool modparam_nohwcrypt = false;
+module_param_named(nohwcrypt, modparam_nohwcrypt, bool, S_IRUGO);
+MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption.");
+
+/*
* Register access.
* All access to the CSR registers will go through the methods
* rt2800_register_read and rt2800_register_write.
@@ -4391,7 +4398,7 @@ void rt2800_read_eeprom_efuse(struct rt2x00_dev *rt2x00dev)
}
EXPORT_SYMBOL_GPL(rt2800_read_eeprom_efuse);

-int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
+static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
{
struct rt2800_drv_data *drv_data = rt2x00dev->drv_data;
u16 word;
@@ -4399,6 +4406,11 @@ int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
u8 default_lna_gain;

/*
+ * Read the EEPROM.
+ */
+ rt2800_read_eeprom(rt2x00dev);
+
+ /*
* Start validation of the data that has been read.
*/
mac = rt2x00_eeprom_addr(rt2x00dev, EEPROM_MAC_ADDR_0);
@@ -4520,9 +4532,8 @@ int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)

return 0;
}
-EXPORT_SYMBOL_GPL(rt2800_validate_eeprom);

-int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
+static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
{
u32 reg;
u16 value;
@@ -4680,7 +4691,6 @@ int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)

return 0;
}
-EXPORT_SYMBOL_GPL(rt2800_init_eeprom);

/*
* RF value list for rt28xx
@@ -4823,7 +4833,7 @@ static const struct rf_channel rf_vals_3x[] = {
{173, 0x61, 0, 9},
};

-int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
+static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
{
struct hw_mode_spec *spec = &rt2x00dev->spec;
struct channel_info *info;
@@ -4999,7 +5009,72 @@ int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)

return 0;
}
-EXPORT_SYMBOL_GPL(rt2800_probe_hw_mode);
+
+int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev)
+{
+ int retval;
+ u32 reg;
+
+ /*
+ * Allocate eeprom data.
+ */
+ retval = rt2800_validate_eeprom(rt2x00dev);
+ if (retval)
+ return retval;
+
+ retval = rt2800_init_eeprom(rt2x00dev);
+ if (retval)
+ return retval;
+
+ /*
+ * Enable rfkill polling by setting GPIO direction of the
+ * rfkill switch GPIO pin correctly.
+ */
+ rt2800_register_read(rt2x00dev, GPIO_CTRL, &reg);
+ rt2x00_set_field32(&reg, GPIO_CTRL_DIR2, 1);
+ rt2800_register_write(rt2x00dev, GPIO_CTRL, reg);
+
+ /*
+ * Initialize hw specifications.
+ */
+ retval = rt2800_probe_hw_mode(rt2x00dev);
+ if (retval)
+ return retval;
+
+ /*
+ * Set device capabilities.
+ */
+ __set_bit(CAPABILITY_CONTROL_FILTERS, &rt2x00dev->cap_flags);
+ __set_bit(CAPABILITY_CONTROL_FILTER_PSPOLL, &rt2x00dev->cap_flags);
+ if (!rt2x00_is_usb(rt2x00dev))
+ __set_bit(CAPABILITY_PRE_TBTT_INTERRUPT, &rt2x00dev->cap_flags);
+
+ /*
+ * Set device requirements.
+ */
+ if (!rt2x00_is_soc(rt2x00dev))
+ __set_bit(REQUIRE_FIRMWARE, &rt2x00dev->cap_flags);
+ __set_bit(REQUIRE_L2PAD, &rt2x00dev->cap_flags);
+ __set_bit(REQUIRE_TXSTATUS_FIFO, &rt2x00dev->cap_flags);
+ if (!modparam_nohwcrypt)
+ __set_bit(CAPABILITY_HW_CRYPTO, &rt2x00dev->cap_flags);
+ __set_bit(CAPABILITY_LINK_TUNING, &rt2x00dev->cap_flags);
+ __set_bit(REQUIRE_HT_TX_DESC, &rt2x00dev->cap_flags);
+ if (rt2x00_is_usb(rt2x00dev))
+ __set_bit(REQUIRE_PS_AUTOWAKE, &rt2x00dev->cap_flags);
+ else {
+ __set_bit(REQUIRE_DMA, &rt2x00dev->cap_flags);
+ __set_bit(REQUIRE_TASKLET_CONTEXT, &rt2x00dev->cap_flags);
+ }
+
+ /*
+ * Set the rssi offset.
+ */
+ rt2x00dev->rssi_offset = DEFAULT_RSSI_OFFSET;
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(rt2800_probe_hw);

/*
* IEEE80211 stack callback functions.
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.h b/drivers/net/wireless/rt2x00/rt2800lib.h
index 18a0b67..303e177 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.h
+++ b/drivers/net/wireless/rt2x00/rt2800lib.h
@@ -43,6 +43,8 @@ struct rt2800_ops {
const unsigned int offset,
const struct rt2x00_field32 field, u32 *reg);

+ void (*read_eeprom)(struct rt2x00_dev *rt2x00dev);
+
int (*drv_write_firmware)(struct rt2x00_dev *rt2x00dev,
const u8 *data, const size_t len);
int (*drv_init_registers)(struct rt2x00_dev *rt2x00dev);
@@ -114,6 +116,13 @@ static inline int rt2800_regbusy_read(struct rt2x00_dev *rt2x00dev,
return rt2800ops->regbusy_read(rt2x00dev, offset, field, reg);
}

+static inline void rt2800_read_eeprom(struct rt2x00_dev *rt2x00dev)
+{
+ const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
+
+ rt2800ops->read_eeprom(rt2x00dev);
+}
+
static inline int rt2800_drv_write_firmware(struct rt2x00_dev *rt2x00dev,
const u8 *data, const size_t len)
{
@@ -191,9 +200,8 @@ void rt2800_disable_radio(struct rt2x00_dev *rt2x00dev);

int rt2800_efuse_detect(struct rt2x00_dev *rt2x00dev);
void rt2800_read_eeprom_efuse(struct rt2x00_dev *rt2x00dev);
-int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev);
-int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev);
-int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev);
+
+int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev);

void rt2800_get_tkip_seq(struct ieee80211_hw *hw, u8 hw_key_idx, u32 *iv32,
u16 *iv16);
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
index 0965540..abfc876 100644
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
@@ -47,13 +47,6 @@
#include "rt2800.h"
#include "rt2800pci.h"

-/*
- * Allow hardware encryption to be disabled.
- */
-static bool modparam_nohwcrypt = false;
-module_param_named(nohwcrypt, modparam_nohwcrypt, bool, S_IRUGO);
-MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption.");
-
static void rt2800pci_mcu_status(struct rt2x00_dev *rt2x00dev, const u8 token)
{
unsigned int i;
@@ -965,85 +958,14 @@ static irqreturn_t rt2800pci_interrupt(int irq, void *dev_instance)
/*
* Device probe functions.
*/
-static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
+static void rt2800pci_read_eeprom(struct rt2x00_dev *rt2x00dev)
{
- /*
- * Read EEPROM into buffer
- */
if (rt2x00_is_soc(rt2x00dev))
rt2800pci_read_eeprom_soc(rt2x00dev);
else if (rt2800pci_efuse_detect(rt2x00dev))
rt2800pci_read_eeprom_efuse(rt2x00dev);
else
rt2800pci_read_eeprom_pci(rt2x00dev);
-
- return rt2800_validate_eeprom(rt2x00dev);
-}
-
-static int rt2800pci_probe_hw(struct rt2x00_dev *rt2x00dev)
-{
- int retval;
- u32 reg;
-
- /*
- * Allocate eeprom data.
- */
- retval = rt2800pci_validate_eeprom(rt2x00dev);
- if (retval)
- return retval;
-
- retval = rt2800_init_eeprom(rt2x00dev);
- if (retval)
- return retval;
-
- /*
- * Enable rfkill polling by setting GPIO direction of the
- * rfkill switch GPIO pin correctly.
- */
- rt2x00pci_register_read(rt2x00dev, GPIO_CTRL, &reg);
- rt2x00_set_field32(&reg, GPIO_CTRL_DIR2, 1);
- rt2x00pci_register_write(rt2x00dev, GPIO_CTRL, reg);
-
- /*
- * Initialize hw specifications.
- */
- retval = rt2800_probe_hw_mode(rt2x00dev);
- if (retval)
- return retval;
-
- /*
- * This device has multiple filters for control frames
- * and has a separate filter for PS Poll frames.
- */
- __set_bit(CAPABILITY_CONTROL_FILTERS, &rt2x00dev->cap_flags);
- __set_bit(CAPABILITY_CONTROL_FILTER_PSPOLL, &rt2x00dev->cap_flags);
-
- /*
- * This device has a pre tbtt interrupt and thus fetches
- * a new beacon directly prior to transmission.
- */
- __set_bit(CAPABILITY_PRE_TBTT_INTERRUPT, &rt2x00dev->cap_flags);
-
- /*
- * This device requires firmware.
- */
- if (!rt2x00_is_soc(rt2x00dev))
- __set_bit(REQUIRE_FIRMWARE, &rt2x00dev->cap_flags);
- __set_bit(REQUIRE_DMA, &rt2x00dev->cap_flags);
- __set_bit(REQUIRE_L2PAD, &rt2x00dev->cap_flags);
- __set_bit(REQUIRE_TXSTATUS_FIFO, &rt2x00dev->cap_flags);
- __set_bit(REQUIRE_TASKLET_CONTEXT, &rt2x00dev->cap_flags);
- if (!modparam_nohwcrypt)
- __set_bit(CAPABILITY_HW_CRYPTO, &rt2x00dev->cap_flags);
- __set_bit(CAPABILITY_LINK_TUNING, &rt2x00dev->cap_flags);
- __set_bit(REQUIRE_HT_TX_DESC, &rt2x00dev->cap_flags);
-
- /*
- * Set the rssi offset.
- */
- rt2x00dev->rssi_offset = DEFAULT_RSSI_OFFSET;
-
- return 0;
}

static const struct ieee80211_ops rt2800pci_mac80211_ops = {
@@ -1081,6 +1003,7 @@ static const struct rt2800_ops rt2800pci_rt2800_ops = {
.register_multiread = rt2x00pci_register_multiread,
.register_multiwrite = rt2x00pci_register_multiwrite,
.regbusy_read = rt2x00pci_regbusy_read,
+ .read_eeprom = rt2800pci_read_eeprom,
.drv_write_firmware = rt2800pci_write_firmware,
.drv_init_registers = rt2800pci_init_registers,
.drv_get_txwi = rt2800pci_get_txwi,
@@ -1093,7 +1016,7 @@ static const struct rt2x00lib_ops rt2800pci_rt2x00_ops = {
.tbtt_tasklet = rt2800pci_tbtt_tasklet,
.rxdone_tasklet = rt2800pci_rxdone_tasklet,
.autowake_tasklet = rt2800pci_autowake_tasklet,
- .probe_hw = rt2800pci_probe_hw,
+ .probe_hw = rt2800_probe_hw,
.get_firmware_name = rt2800pci_get_firmware_name,
.check_firmware = rt2800_check_firmware,
.load_firmware = rt2800_load_firmware,
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
index 5390632..dd0a41c 100644
--- a/drivers/net/wireless/rt2x00/rt2800usb.c
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
@@ -43,13 +43,6 @@
#include "rt2800usb.h"

/*
- * Allow hardware encryption to be disabled.
- */
-static bool modparam_nohwcrypt;
-module_param_named(nohwcrypt, modparam_nohwcrypt, bool, S_IRUGO);
-MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption.");
-
-/*
* Queue handlers.
*/
static void rt2800usb_start_queue(struct data_queue *queue)
@@ -722,73 +715,27 @@ static void rt2800usb_fill_rxdone(struct queue_entry *entry,
/*
* Device probe functions.
*/
-static int rt2800usb_validate_eeprom(struct rt2x00_dev *rt2x00dev)
+static void rt2800usb_read_eeprom(struct rt2x00_dev *rt2x00dev)
{
if (rt2800_efuse_detect(rt2x00dev))
rt2800_read_eeprom_efuse(rt2x00dev);
else
rt2x00usb_eeprom_read(rt2x00dev, rt2x00dev->eeprom,
EEPROM_SIZE);
-
- return rt2800_validate_eeprom(rt2x00dev);
}

static int rt2800usb_probe_hw(struct rt2x00_dev *rt2x00dev)
{
int retval;
- u32 reg;

- /*
- * Allocate eeprom data.
- */
- retval = rt2800usb_validate_eeprom(rt2x00dev);
+ retval = rt2800_probe_hw(rt2x00dev);
if (retval)
return retval;

- retval = rt2800_init_eeprom(rt2x00dev);
- if (retval)
- return retval;
-
- /*
- * Enable rfkill polling by setting GPIO direction of the
- * rfkill switch GPIO pin correctly.
- */
- rt2x00usb_register_read(rt2x00dev, GPIO_CTRL, &reg);
- rt2x00_set_field32(&reg, GPIO_CTRL_DIR2, 1);
- rt2x00usb_register_write(rt2x00dev, GPIO_CTRL, reg);
-
- /*
- * Initialize hw specifications.
- */
- retval = rt2800_probe_hw_mode(rt2x00dev);
- if (retval)
- return retval;
-
- /*
- * This device has multiple filters for control frames
- * and has a separate filter for PS Poll frames.
- */
- __set_bit(CAPABILITY_CONTROL_FILTERS, &rt2x00dev->cap_flags);
- __set_bit(CAPABILITY_CONTROL_FILTER_PSPOLL, &rt2x00dev->cap_flags);
-
- /*
- * This device requires firmware.
- */
- __set_bit(REQUIRE_FIRMWARE, &rt2x00dev->cap_flags);
- __set_bit(REQUIRE_L2PAD, &rt2x00dev->cap_flags);
- if (!modparam_nohwcrypt)
- __set_bit(CAPABILITY_HW_CRYPTO, &rt2x00dev->cap_flags);
- __set_bit(CAPABILITY_LINK_TUNING, &rt2x00dev->cap_flags);
- __set_bit(REQUIRE_HT_TX_DESC, &rt2x00dev->cap_flags);
- __set_bit(REQUIRE_TXSTATUS_FIFO, &rt2x00dev->cap_flags);
- __set_bit(REQUIRE_PS_AUTOWAKE, &rt2x00dev->cap_flags);
-
- rt2x00dev->txstatus_timer.function = rt2800usb_tx_sta_fifo_timeout,
-
/*
- * Set the rssi offset.
+ * Set txstatus timer function.
*/
- rt2x00dev->rssi_offset = DEFAULT_RSSI_OFFSET;
+ rt2x00dev->txstatus_timer.function = rt2800usb_tx_sta_fifo_timeout;

/*
* Overwrite TX done handler
@@ -834,6 +781,7 @@ static const struct rt2800_ops rt2800usb_rt2800_ops = {
.register_multiread = rt2x00usb_register_multiread,
.register_multiwrite = rt2x00usb_register_multiwrite,
.regbusy_read = rt2x00usb_regbusy_read,
+ .read_eeprom = rt2800usb_read_eeprom,
.drv_write_firmware = rt2800usb_write_firmware,
.drv_init_registers = rt2800usb_init_registers,
.drv_get_txwi = rt2800usb_get_txwi,
--
1.7.11.1


2012-08-31 17:22:20

by Gertjan van Wingerde

[permalink] [raw]
Subject: [PATCH v2 2/6] rt2x00: Fix word size of rt2500usb MAC_CSR19 register.

The register is 16 bits wide, not 32.

Signed-off-by: Gertjan van Wingerde <[email protected]>
Cc: <[email protected]>

diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
index 3aae36b..b3a1d73 100644
--- a/drivers/net/wireless/rt2x00/rt2500usb.c
+++ b/drivers/net/wireless/rt2x00/rt2500usb.c
@@ -283,7 +283,7 @@ static int rt2500usb_rfkill_poll(struct rt2x00_dev *rt2x00dev)
u16 reg;

rt2500usb_register_read(rt2x00dev, MAC_CSR19, &reg);
- return rt2x00_get_field32(reg, MAC_CSR19_BIT7);
+ return rt2x00_get_field16(reg, MAC_CSR19_BIT7);
}

#ifdef CONFIG_RT2X00_LIB_LEDS
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.h b/drivers/net/wireless/rt2x00/rt2500usb.h
index b493306..192531d 100644
--- a/drivers/net/wireless/rt2x00/rt2500usb.h
+++ b/drivers/net/wireless/rt2x00/rt2500usb.h
@@ -189,14 +189,14 @@
* MAC_CSR19: GPIO control register.
*/
#define MAC_CSR19 0x0426
-#define MAC_CSR19_BIT0 FIELD32(0x0001)
-#define MAC_CSR19_BIT1 FIELD32(0x0002)
-#define MAC_CSR19_BIT2 FIELD32(0x0004)
-#define MAC_CSR19_BIT3 FIELD32(0x0008)
-#define MAC_CSR19_BIT4 FIELD32(0x0010)
-#define MAC_CSR19_BIT5 FIELD32(0x0020)
-#define MAC_CSR19_BIT6 FIELD32(0x0040)
-#define MAC_CSR19_BIT7 FIELD32(0x0080)
+#define MAC_CSR19_BIT0 FIELD16(0x0001)
+#define MAC_CSR19_BIT1 FIELD16(0x0002)
+#define MAC_CSR19_BIT2 FIELD16(0x0004)
+#define MAC_CSR19_BIT3 FIELD16(0x0008)
+#define MAC_CSR19_BIT4 FIELD16(0x0010)
+#define MAC_CSR19_BIT5 FIELD16(0x0020)
+#define MAC_CSR19_BIT6 FIELD16(0x0040)
+#define MAC_CSR19_BIT7 FIELD16(0x0080)

/*
* MAC_CSR20: LED control register.
--
1.7.11.1


2012-08-31 17:22:20

by Gertjan van Wingerde

[permalink] [raw]
Subject: [PATCH v2 1/6] rt2x00: Identify ASUS USB-N53 device.

This is an RT3572 based device.

Signed-off-by: Maximilian Engelhardt <[email protected]>
Signed-off-by: Gertjan van Wingerde <[email protected]>
Cc: <[email protected]>

diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
index 6cf3365..6681bfc 100644
--- a/drivers/net/wireless/rt2x00/rt2800usb.c
+++ b/drivers/net/wireless/rt2x00/rt2800usb.c
@@ -1157,6 +1157,8 @@ static struct usb_device_id rt2800usb_device_table[] = {
{ USB_DEVICE(0x1690, 0x0744) },
{ USB_DEVICE(0x1690, 0x0761) },
{ USB_DEVICE(0x1690, 0x0764) },
+ /* ASUS */
+ { USB_DEVICE(0x0b05, 0x179d) },
/* Cisco */
{ USB_DEVICE(0x167b, 0x4001) },
/* EnGenius */
@@ -1222,7 +1224,6 @@ static struct usb_device_id rt2800usb_device_table[] = {
{ USB_DEVICE(0x0b05, 0x1760) },
{ USB_DEVICE(0x0b05, 0x1761) },
{ USB_DEVICE(0x0b05, 0x1790) },
- { USB_DEVICE(0x0b05, 0x179d) },
/* AzureWave */
{ USB_DEVICE(0x13d3, 0x3262) },
{ USB_DEVICE(0x13d3, 0x3284) },
--
1.7.11.1


2012-09-02 20:39:45

by Ivo Van Doorn

[permalink] [raw]
Subject: Re: [PATCH v2 4/6] rt2x00: Align GPIO register definitions with the datasheets.

On Fri, Aug 31, 2012 at 7:22 PM, Gertjan van Wingerde
<[email protected]> wrote:
> Ensure that all active GPIO pins are included in the GPIO register
> definitions, nothing more and nothing less.
>
> Signed-off-by: Gertjan van Wingerde <[email protected]>

Acked-by: Ivo van [email protected]>

> diff --git a/drivers/net/wireless/rt2x00/rt2400pci.h b/drivers/net/wireless/rt2x00/rt2400pci.h
> index 7564ae9..9d78a53 100644
> --- a/drivers/net/wireless/rt2x00/rt2400pci.h
> +++ b/drivers/net/wireless/rt2x00/rt2400pci.h
> @@ -671,6 +671,13 @@
> #define GPIOCSR_BIT6 FIELD32(0x00000040)
> #define GPIOCSR_BIT7 FIELD32(0x00000080)
> #define GPIOCSR_BIT8 FIELD32(0x00000100)
> +#define GPIOCSR_BIT9 FIELD32(0x00000200)
> +#define GPIOCSR_BIT10 FIELD32(0x00000400)
> +#define GPIOCSR_BIT11 FIELD32(0x00000800)
> +#define GPIOCSR_BIT12 FIELD32(0x00001000)
> +#define GPIOCSR_BIT13 FIELD32(0x00002000)
> +#define GPIOCSR_BIT14 FIELD32(0x00004000)
> +#define GPIOCSR_BIT15 FIELD32(0x00008000)
>
> /*
> * BBPPCSR: BBP Pin control register.
> diff --git a/drivers/net/wireless/rt2x00/rt2500usb.h b/drivers/net/wireless/rt2x00/rt2500usb.h
> index 196bd51..9652300 100644
> --- a/drivers/net/wireless/rt2x00/rt2500usb.h
> +++ b/drivers/net/wireless/rt2x00/rt2500usb.h
> @@ -198,6 +198,13 @@
> #define MAC_CSR19_BIT6 FIELD16(0x0040)
> #define MAC_CSR19_BIT7 FIELD16(0x0080)
> #define MAC_CSR19_BIT8 FIELD16(0x0100)
> +#define MAC_CSR19_BIT9 FIELD16(0x0200)
> +#define MAC_CSR19_BIT10 FIELD16(0x0400)
> +#define MAC_CSR19_BIT11 FIELD16(0x0800)
> +#define MAC_CSR19_BIT12 FIELD16(0x1000)
> +#define MAC_CSR19_BIT13 FIELD16(0x2000)
> +#define MAC_CSR19_BIT14 FIELD16(0x4000)
> +#define MAC_CSR19_BIT15 FIELD16(0x8000)
>
> /*
> * MAC_CSR20: LED control register.
> diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
> index e252e9b..a838e17 100644
> --- a/drivers/net/wireless/rt2x00/rt2800.h
> +++ b/drivers/net/wireless/rt2x00/rt2800.h
> @@ -459,6 +459,12 @@
> #define GPIO_CTRL_CFG_GPIOD_BIT5 FIELD32(0x00002000)
> #define GPIO_CTRL_CFG_GPIOD_BIT6 FIELD32(0x00004000)
> #define GPIO_CTRL_CFG_GPIOD_BIT7 FIELD32(0x00008000)
> +#define GPIO_CTRL_CFG_BIT8 FIELD32(0x00010000)
> +#define GPIO_CTRL_CFG_BIT9 FIELD32(0x00020000)
> +#define GPIO_CTRL_CFG_BIT10 FIELD32(0x00040000)
> +#define GPIO_CTRL_CFG_GPIOD_BIT8 FIELD32(0x01000000)
> +#define GPIO_CTRL_CFG_GPIOD_BIT9 FIELD32(0x02000000)
> +#define GPIO_CTRL_CFG_GPIOD_BIT10 FIELD32(0x04000000)
>
> /*
> * MCU_CMD_CFG
> diff --git a/drivers/net/wireless/rt2x00/rt61pci.h b/drivers/net/wireless/rt2x00/rt61pci.h
> index 8f3da5a..9ee0c33 100644
> --- a/drivers/net/wireless/rt2x00/rt61pci.h
> +++ b/drivers/net/wireless/rt2x00/rt61pci.h
> @@ -365,8 +365,6 @@ struct hw_pairwise_ta_entry {
> #define MAC_CSR13_BIT3 FIELD32(0x00000008)
> #define MAC_CSR13_BIT4 FIELD32(0x00000010)
> #define MAC_CSR13_BIT5 FIELD32(0x00000020)
> -#define MAC_CSR13_BIT6 FIELD32(0x00000040)
> -#define MAC_CSR13_BIT7 FIELD32(0x00000080)
> #define MAC_CSR13_BIT8 FIELD32(0x00000100)
> #define MAC_CSR13_BIT9 FIELD32(0x00000200)
> #define MAC_CSR13_BIT10 FIELD32(0x00000400)
> --
> 1.7.11.1
>

2012-09-02 20:37:53

by Ivo Van Doorn

[permalink] [raw]
Subject: Re: [PATCH v2 2/6] rt2x00: Fix word size of rt2500usb MAC_CSR19 register.

On Fri, Aug 31, 2012 at 7:22 PM, Gertjan van Wingerde
<[email protected]> wrote:
> The register is 16 bits wide, not 32.
>
> Signed-off-by: Gertjan van Wingerde <[email protected]>
> Cc: <[email protected]>

Acked-by: Ivo van [email protected]>

> diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
> index 3aae36b..b3a1d73 100644
> --- a/drivers/net/wireless/rt2x00/rt2500usb.c
> +++ b/drivers/net/wireless/rt2x00/rt2500usb.c
> @@ -283,7 +283,7 @@ static int rt2500usb_rfkill_poll(struct rt2x00_dev *rt2x00dev)
> u16 reg;
>
> rt2500usb_register_read(rt2x00dev, MAC_CSR19, &reg);
> - return rt2x00_get_field32(reg, MAC_CSR19_BIT7);
> + return rt2x00_get_field16(reg, MAC_CSR19_BIT7);
> }
>
> #ifdef CONFIG_RT2X00_LIB_LEDS
> diff --git a/drivers/net/wireless/rt2x00/rt2500usb.h b/drivers/net/wireless/rt2x00/rt2500usb.h
> index b493306..192531d 100644
> --- a/drivers/net/wireless/rt2x00/rt2500usb.h
> +++ b/drivers/net/wireless/rt2x00/rt2500usb.h
> @@ -189,14 +189,14 @@
> * MAC_CSR19: GPIO control register.
> */
> #define MAC_CSR19 0x0426
> -#define MAC_CSR19_BIT0 FIELD32(0x0001)
> -#define MAC_CSR19_BIT1 FIELD32(0x0002)
> -#define MAC_CSR19_BIT2 FIELD32(0x0004)
> -#define MAC_CSR19_BIT3 FIELD32(0x0008)
> -#define MAC_CSR19_BIT4 FIELD32(0x0010)
> -#define MAC_CSR19_BIT5 FIELD32(0x0020)
> -#define MAC_CSR19_BIT6 FIELD32(0x0040)
> -#define MAC_CSR19_BIT7 FIELD32(0x0080)
> +#define MAC_CSR19_BIT0 FIELD16(0x0001)
> +#define MAC_CSR19_BIT1 FIELD16(0x0002)
> +#define MAC_CSR19_BIT2 FIELD16(0x0004)
> +#define MAC_CSR19_BIT3 FIELD16(0x0008)
> +#define MAC_CSR19_BIT4 FIELD16(0x0010)
> +#define MAC_CSR19_BIT5 FIELD16(0x0020)
> +#define MAC_CSR19_BIT6 FIELD16(0x0040)
> +#define MAC_CSR19_BIT7 FIELD16(0x0080)
>
> /*
> * MAC_CSR20: LED control register.
> --
> 1.7.11.1
>

2012-09-02 20:44:07

by Ivo Van Doorn

[permalink] [raw]
Subject: Re: [PATCH v2 6/6] rt2x00: rt2800 - Make probe_hw function common between PCI and USB.

Hi,

> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index c3cae1d..2ad3b7a 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -44,6 +44,13 @@
> #include "rt2800.h"
>
> /*
> + * Allow hardware encryption to be disabled.
> + */
> +static bool modparam_nohwcrypt = false;
> +module_param_named(nohwcrypt, modparam_nohwcrypt, bool, S_IRUGO);
> +MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption.");

I am not particularly fond of this change, I would like to have the
module parameters inside the actual drivers instead of inside one of
the
library modules. I don't know if there is a policy for modules which
says something about these situations, but my preference would be
that the module parameters are inside rt2800pci and rt2800usb, and
that the value would be passed to rt2800lib.

If there is isn't a simple and clean way to do that, then we can take
this patch though...

Ivo

2012-09-02 20:39:15

by Ivo Van Doorn

[permalink] [raw]
Subject: Re: [PATCH v2 3/6] rt2x00: Fix rfkill polling prior to interface start.

On Fri, Aug 31, 2012 at 7:22 PM, Gertjan van Wingerde
<[email protected]> wrote:
> We need to program the rfkill switch GPIO pin direction to input at
> device initialization time, not only when the interface is brought up.
> Doing this only when the interface is brought up could lead to rfkill
> detecting the switch is turned on erroneously and inability to create
> the interface and bringing it up.
>
> Reported-and-tested-by: Andreas Messer <[email protected]>
> Signed-off-by: Gertjan van Wingerde <[email protected]>
> Cc: <[email protected]>

Acked-by: Ivo van [email protected]>

> diff --git a/drivers/net/wireless/rt2x00/rt2400pci.c b/drivers/net/wireless/rt2x00/rt2400pci.c
> index 8b9dbd7..64328af 100644
> --- a/drivers/net/wireless/rt2x00/rt2400pci.c
> +++ b/drivers/net/wireless/rt2x00/rt2400pci.c
> @@ -1611,6 +1611,7 @@ static int rt2400pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
> static int rt2400pci_probe_hw(struct rt2x00_dev *rt2x00dev)
> {
> int retval;
> + u32 reg;
>
> /*
> * Allocate eeprom data.
> @@ -1624,6 +1625,14 @@ static int rt2400pci_probe_hw(struct rt2x00_dev *rt2x00dev)
> return retval;
>
> /*
> + * Enable rfkill polling by setting GPIO direction of the
> + * rfkill switch GPIO pin correctly.
> + */
> + rt2x00pci_register_read(rt2x00dev, GPIOCSR, &reg);
> + rt2x00_set_field32(&reg, GPIOCSR_BIT8, 1);
> + rt2x00pci_register_write(rt2x00dev, GPIOCSR, reg);
> +
> + /*
> * Initialize hw specifications.
> */
> retval = rt2400pci_probe_hw_mode(rt2x00dev);
> diff --git a/drivers/net/wireless/rt2x00/rt2400pci.h b/drivers/net/wireless/rt2x00/rt2400pci.h
> index d3a4a68..7564ae9 100644
> --- a/drivers/net/wireless/rt2x00/rt2400pci.h
> +++ b/drivers/net/wireless/rt2x00/rt2400pci.h
> @@ -670,6 +670,7 @@
> #define GPIOCSR_BIT5 FIELD32(0x00000020)
> #define GPIOCSR_BIT6 FIELD32(0x00000040)
> #define GPIOCSR_BIT7 FIELD32(0x00000080)
> +#define GPIOCSR_BIT8 FIELD32(0x00000100)
>
> /*
> * BBPPCSR: BBP Pin control register.
> diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c
> index d2cf8a4..3de0406 100644
> --- a/drivers/net/wireless/rt2x00/rt2500pci.c
> +++ b/drivers/net/wireless/rt2x00/rt2500pci.c
> @@ -1929,6 +1929,7 @@ static int rt2500pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
> static int rt2500pci_probe_hw(struct rt2x00_dev *rt2x00dev)
> {
> int retval;
> + u32 reg;
>
> /*
> * Allocate eeprom data.
> @@ -1942,6 +1943,14 @@ static int rt2500pci_probe_hw(struct rt2x00_dev *rt2x00dev)
> return retval;
>
> /*
> + * Enable rfkill polling by setting GPIO direction of the
> + * rfkill switch GPIO pin correctly.
> + */
> + rt2x00pci_register_read(rt2x00dev, GPIOCSR, &reg);
> + rt2x00_set_field32(&reg, GPIOCSR_DIR0, 1);
> + rt2x00pci_register_write(rt2x00dev, GPIOCSR, reg);
> +
> + /*
> * Initialize hw specifications.
> */
> retval = rt2500pci_probe_hw_mode(rt2x00dev);
> diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
> index b3a1d73..89fee31 100644
> --- a/drivers/net/wireless/rt2x00/rt2500usb.c
> +++ b/drivers/net/wireless/rt2x00/rt2500usb.c
> @@ -1768,6 +1768,7 @@ static int rt2500usb_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
> static int rt2500usb_probe_hw(struct rt2x00_dev *rt2x00dev)
> {
> int retval;
> + u16 reg;
>
> /*
> * Allocate eeprom data.
> @@ -1781,6 +1782,14 @@ static int rt2500usb_probe_hw(struct rt2x00_dev *rt2x00dev)
> return retval;
>
> /*
> + * Enable rfkill polling by setting GPIO direction of the
> + * rfkill switch GPIO pin correctly.
> + */
> + rt2500usb_register_read(rt2x00dev, MAC_CSR19, &reg);
> + rt2x00_set_field16(&reg, MAC_CSR19_BIT8, 0);
> + rt2500usb_register_write(rt2x00dev, MAC_CSR19, reg);
> +
> + /*
> * Initialize hw specifications.
> */
> retval = rt2500usb_probe_hw_mode(rt2x00dev);
> diff --git a/drivers/net/wireless/rt2x00/rt2500usb.h b/drivers/net/wireless/rt2x00/rt2500usb.h
> index 192531d..196bd51 100644
> --- a/drivers/net/wireless/rt2x00/rt2500usb.h
> +++ b/drivers/net/wireless/rt2x00/rt2500usb.h
> @@ -197,6 +197,7 @@
> #define MAC_CSR19_BIT5 FIELD16(0x0020)
> #define MAC_CSR19_BIT6 FIELD16(0x0040)
> #define MAC_CSR19_BIT7 FIELD16(0x0080)
> +#define MAC_CSR19_BIT8 FIELD16(0x0100)
>
> /*
> * MAC_CSR20: LED control register.
> diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
> index 98aa426..4765bbd 100644
> --- a/drivers/net/wireless/rt2x00/rt2800pci.c
> +++ b/drivers/net/wireless/rt2x00/rt2800pci.c
> @@ -983,6 +983,7 @@ static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
> static int rt2800pci_probe_hw(struct rt2x00_dev *rt2x00dev)
> {
> int retval;
> + u32 reg;
>
> /*
> * Allocate eeprom data.
> @@ -996,6 +997,14 @@ static int rt2800pci_probe_hw(struct rt2x00_dev *rt2x00dev)
> return retval;
>
> /*
> + * Enable rfkill polling by setting GPIO direction of the
> + * rfkill switch GPIO pin correctly.
> + */
> + rt2x00pci_register_read(rt2x00dev, GPIO_CTRL_CFG, &reg);
> + rt2x00_set_field32(&reg, GPIO_CTRL_CFG_GPIOD_BIT2, 1);
> + rt2x00pci_register_write(rt2x00dev, GPIO_CTRL_CFG, reg);
> +
> + /*
> * Initialize hw specifications.
> */
> retval = rt2800_probe_hw_mode(rt2x00dev);
> diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
> index 6681bfc..52a32b5 100644
> --- a/drivers/net/wireless/rt2x00/rt2800usb.c
> +++ b/drivers/net/wireless/rt2x00/rt2800usb.c
> @@ -736,6 +736,7 @@ static int rt2800usb_validate_eeprom(struct rt2x00_dev *rt2x00dev)
> static int rt2800usb_probe_hw(struct rt2x00_dev *rt2x00dev)
> {
> int retval;
> + u32 reg;
>
> /*
> * Allocate eeprom data.
> @@ -749,6 +750,14 @@ static int rt2800usb_probe_hw(struct rt2x00_dev *rt2x00dev)
> return retval;
>
> /*
> + * Enable rfkill polling by setting GPIO direction of the
> + * rfkill switch GPIO pin correctly.
> + */
> + rt2x00usb_register_read(rt2x00dev, GPIO_CTRL_CFG, &reg);
> + rt2x00_set_field32(&reg, GPIO_CTRL_CFG_GPIOD_BIT2, 1);
> + rt2x00usb_register_write(rt2x00dev, GPIO_CTRL_CFG, reg);
> +
> + /*
> * Initialize hw specifications.
> */
> retval = rt2800_probe_hw_mode(rt2x00dev);
> diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
> index 3f7bc5c..b8ec961 100644
> --- a/drivers/net/wireless/rt2x00/rt61pci.c
> +++ b/drivers/net/wireless/rt2x00/rt61pci.c
> @@ -2832,6 +2832,7 @@ static int rt61pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
> static int rt61pci_probe_hw(struct rt2x00_dev *rt2x00dev)
> {
> int retval;
> + u32 reg;
>
> /*
> * Disable power saving.
> @@ -2850,6 +2851,14 @@ static int rt61pci_probe_hw(struct rt2x00_dev *rt2x00dev)
> return retval;
>
> /*
> + * Enable rfkill polling by setting GPIO direction of the
> + * rfkill switch GPIO pin correctly.
> + */
> + rt2x00pci_register_read(rt2x00dev, MAC_CSR13, &reg);
> + rt2x00_set_field32(&reg, MAC_CSR13_BIT13, 1);
> + rt2x00pci_register_write(rt2x00dev, MAC_CSR13, reg);
> +
> + /*
> * Initialize hw specifications.
> */
> retval = rt61pci_probe_hw_mode(rt2x00dev);
> diff --git a/drivers/net/wireless/rt2x00/rt61pci.h b/drivers/net/wireless/rt2x00/rt61pci.h
> index e3cd6db..8f3da5a 100644
> --- a/drivers/net/wireless/rt2x00/rt61pci.h
> +++ b/drivers/net/wireless/rt2x00/rt61pci.h
> @@ -372,6 +372,7 @@ struct hw_pairwise_ta_entry {
> #define MAC_CSR13_BIT10 FIELD32(0x00000400)
> #define MAC_CSR13_BIT11 FIELD32(0x00000800)
> #define MAC_CSR13_BIT12 FIELD32(0x00001000)
> +#define MAC_CSR13_BIT13 FIELD32(0x00002000)
>
> /*
> * MAC_CSR14: LED control register.
> diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
> index ba6e434..248436c 100644
> --- a/drivers/net/wireless/rt2x00/rt73usb.c
> +++ b/drivers/net/wireless/rt2x00/rt73usb.c
> @@ -2177,6 +2177,7 @@ static int rt73usb_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
> static int rt73usb_probe_hw(struct rt2x00_dev *rt2x00dev)
> {
> int retval;
> + u32 reg;
>
> /*
> * Allocate eeprom data.
> @@ -2190,6 +2191,14 @@ static int rt73usb_probe_hw(struct rt2x00_dev *rt2x00dev)
> return retval;
>
> /*
> + * Enable rfkill polling by setting GPIO direction of the
> + * rfkill switch GPIO pin correctly.
> + */
> + rt2x00usb_register_read(rt2x00dev, MAC_CSR13, &reg);
> + rt2x00_set_field32(&reg, MAC_CSR13_BIT15, 0);
> + rt2x00usb_register_write(rt2x00dev, MAC_CSR13, reg);
> +
> + /*
> * Initialize hw specifications.
> */
> retval = rt73usb_probe_hw_mode(rt2x00dev);
> diff --git a/drivers/net/wireless/rt2x00/rt73usb.h b/drivers/net/wireless/rt2x00/rt73usb.h
> index 9f6b470..df1cc11 100644
> --- a/drivers/net/wireless/rt2x00/rt73usb.h
> +++ b/drivers/net/wireless/rt2x00/rt73usb.h
> @@ -282,6 +282,9 @@ struct hw_pairwise_ta_entry {
> #define MAC_CSR13_BIT10 FIELD32(0x00000400)
> #define MAC_CSR13_BIT11 FIELD32(0x00000800)
> #define MAC_CSR13_BIT12 FIELD32(0x00001000)
> +#define MAC_CSR13_BIT13 FIELD32(0x00002000)
> +#define MAC_CSR13_BIT14 FIELD32(0x00004000)
> +#define MAC_CSR13_BIT15 FIELD32(0x00008000)
>
> /*
> * MAC_CSR14: LED control register.
> --
> 1.7.11.1
>

2012-09-02 20:37:30

by Ivo Van Doorn

[permalink] [raw]
Subject: Re: [PATCH v2 1/6] rt2x00: Identify ASUS USB-N53 device.

On Fri, Aug 31, 2012 at 7:22 PM, Gertjan van Wingerde
<[email protected]> wrote:
> This is an RT3572 based device.
>
> Signed-off-by: Maximilian Engelhardt <[email protected]>
> Signed-off-by: Gertjan van Wingerde <[email protected]>
> Cc: <[email protected]>

Acked-by: Ivo van [email protected]>


> diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
> index 6cf3365..6681bfc 100644
> --- a/drivers/net/wireless/rt2x00/rt2800usb.c
> +++ b/drivers/net/wireless/rt2x00/rt2800usb.c
> @@ -1157,6 +1157,8 @@ static struct usb_device_id rt2800usb_device_table[] = {
> { USB_DEVICE(0x1690, 0x0744) },
> { USB_DEVICE(0x1690, 0x0761) },
> { USB_DEVICE(0x1690, 0x0764) },
> + /* ASUS */
> + { USB_DEVICE(0x0b05, 0x179d) },
> /* Cisco */
> { USB_DEVICE(0x167b, 0x4001) },
> /* EnGenius */
> @@ -1222,7 +1224,6 @@ static struct usb_device_id rt2800usb_device_table[] = {
> { USB_DEVICE(0x0b05, 0x1760) },
> { USB_DEVICE(0x0b05, 0x1761) },
> { USB_DEVICE(0x0b05, 0x1790) },
> - { USB_DEVICE(0x0b05, 0x179d) },
> /* AzureWave */
> { USB_DEVICE(0x13d3, 0x3262) },
> { USB_DEVICE(0x13d3, 0x3284) },
> --
> 1.7.11.1
>

2012-09-02 20:40:23

by Ivo Van Doorn

[permalink] [raw]
Subject: Re: [PATCH v2 5/6] rt2x00: Unify GPIO register field namings

On Fri, Aug 31, 2012 at 7:22 PM, Gertjan van Wingerde
<[email protected]> wrote:
> The various rt2x00 drivers use different methods to name the different
> GPIO register fields indicating the GPIO pin value and the fields
> indicating the direction.
> Start using a unified naming scheme for the GPIO register fields:
> - <csr>_VAL<x> for fields indicating the GPIO pin value.
> - <csr>_DIR<x> for fields indicating the GPIO pin direction.
>
> Signed-off-by: Gertjan van Wingerde <[email protected]>

Acked-by: Ivo van [email protected]>

> diff --git a/drivers/net/wireless/rt2x00/rt2400pci.c b/drivers/net/wireless/rt2x00/rt2400pci.c
> index 64328af..6458ab8 100644
> --- a/drivers/net/wireless/rt2x00/rt2400pci.c
> +++ b/drivers/net/wireless/rt2x00/rt2400pci.c
> @@ -205,7 +205,7 @@ static int rt2400pci_rfkill_poll(struct rt2x00_dev *rt2x00dev)
> u32 reg;
>
> rt2x00pci_register_read(rt2x00dev, GPIOCSR, &reg);
> - return rt2x00_get_field32(reg, GPIOCSR_BIT0);
> + return rt2x00_get_field32(reg, GPIOCSR_VAL0);
> }
>
> #ifdef CONFIG_RT2X00_LIB_LEDS
> @@ -1629,7 +1629,7 @@ static int rt2400pci_probe_hw(struct rt2x00_dev *rt2x00dev)
> * rfkill switch GPIO pin correctly.
> */
> rt2x00pci_register_read(rt2x00dev, GPIOCSR, &reg);
> - rt2x00_set_field32(&reg, GPIOCSR_BIT8, 1);
> + rt2x00_set_field32(&reg, GPIOCSR_DIR0, 1);
> rt2x00pci_register_write(rt2x00dev, GPIOCSR, reg);
>
> /*
> diff --git a/drivers/net/wireless/rt2x00/rt2400pci.h b/drivers/net/wireless/rt2x00/rt2400pci.h
> index 9d78a53..e4b07f0 100644
> --- a/drivers/net/wireless/rt2x00/rt2400pci.h
> +++ b/drivers/net/wireless/rt2x00/rt2400pci.h
> @@ -660,24 +660,26 @@
>
> /*
> * GPIOCSR: GPIO control register.
> + * GPIOCSR_VALx: Actual GPIO pin x value
> + * GPIOCSR_DIRx: GPIO direction: 0 = output; 1 = input
> */
> #define GPIOCSR 0x0120
> -#define GPIOCSR_BIT0 FIELD32(0x00000001)
> -#define GPIOCSR_BIT1 FIELD32(0x00000002)
> -#define GPIOCSR_BIT2 FIELD32(0x00000004)
> -#define GPIOCSR_BIT3 FIELD32(0x00000008)
> -#define GPIOCSR_BIT4 FIELD32(0x00000010)
> -#define GPIOCSR_BIT5 FIELD32(0x00000020)
> -#define GPIOCSR_BIT6 FIELD32(0x00000040)
> -#define GPIOCSR_BIT7 FIELD32(0x00000080)
> -#define GPIOCSR_BIT8 FIELD32(0x00000100)
> -#define GPIOCSR_BIT9 FIELD32(0x00000200)
> -#define GPIOCSR_BIT10 FIELD32(0x00000400)
> -#define GPIOCSR_BIT11 FIELD32(0x00000800)
> -#define GPIOCSR_BIT12 FIELD32(0x00001000)
> -#define GPIOCSR_BIT13 FIELD32(0x00002000)
> -#define GPIOCSR_BIT14 FIELD32(0x00004000)
> -#define GPIOCSR_BIT15 FIELD32(0x00008000)
> +#define GPIOCSR_VAL0 FIELD32(0x00000001)
> +#define GPIOCSR_VAL1 FIELD32(0x00000002)
> +#define GPIOCSR_VAL2 FIELD32(0x00000004)
> +#define GPIOCSR_VAL3 FIELD32(0x00000008)
> +#define GPIOCSR_VAL4 FIELD32(0x00000010)
> +#define GPIOCSR_VAL5 FIELD32(0x00000020)
> +#define GPIOCSR_VAL6 FIELD32(0x00000040)
> +#define GPIOCSR_VAL7 FIELD32(0x00000080)
> +#define GPIOCSR_DIR0 FIELD32(0x00000100)
> +#define GPIOCSR_DIR1 FIELD32(0x00000200)
> +#define GPIOCSR_DIR2 FIELD32(0x00000400)
> +#define GPIOCSR_DIR3 FIELD32(0x00000800)
> +#define GPIOCSR_DIR4 FIELD32(0x00001000)
> +#define GPIOCSR_DIR5 FIELD32(0x00002000)
> +#define GPIOCSR_DIR6 FIELD32(0x00004000)
> +#define GPIOCSR_DIR7 FIELD32(0x00008000)
>
> /*
> * BBPPCSR: BBP Pin control register.
> diff --git a/drivers/net/wireless/rt2x00/rt2500pci.c b/drivers/net/wireless/rt2x00/rt2500pci.c
> index 3de0406..68bca14 100644
> --- a/drivers/net/wireless/rt2x00/rt2500pci.c
> +++ b/drivers/net/wireless/rt2x00/rt2500pci.c
> @@ -205,7 +205,7 @@ static int rt2500pci_rfkill_poll(struct rt2x00_dev *rt2x00dev)
> u32 reg;
>
> rt2x00pci_register_read(rt2x00dev, GPIOCSR, &reg);
> - return rt2x00_get_field32(reg, GPIOCSR_BIT0);
> + return rt2x00_get_field32(reg, GPIOCSR_VAL0);
> }
>
> #ifdef CONFIG_RT2X00_LIB_LEDS
> diff --git a/drivers/net/wireless/rt2x00/rt2500pci.h b/drivers/net/wireless/rt2x00/rt2500pci.h
> index 2aad7ba..9c10068 100644
> --- a/drivers/net/wireless/rt2x00/rt2500pci.h
> +++ b/drivers/net/wireless/rt2x00/rt2500pci.h
> @@ -789,16 +789,18 @@
>
> /*
> * GPIOCSR: GPIO control register.
> + * GPIOCSR_VALx: GPIO value
> + * GPIOCSR_DIRx: GPIO direction: 0 = output; 1 = input
> */
> #define GPIOCSR 0x0120
> -#define GPIOCSR_BIT0 FIELD32(0x00000001)
> -#define GPIOCSR_BIT1 FIELD32(0x00000002)
> -#define GPIOCSR_BIT2 FIELD32(0x00000004)
> -#define GPIOCSR_BIT3 FIELD32(0x00000008)
> -#define GPIOCSR_BIT4 FIELD32(0x00000010)
> -#define GPIOCSR_BIT5 FIELD32(0x00000020)
> -#define GPIOCSR_BIT6 FIELD32(0x00000040)
> -#define GPIOCSR_BIT7 FIELD32(0x00000080)
> +#define GPIOCSR_VAL0 FIELD32(0x00000001)
> +#define GPIOCSR_VAL1 FIELD32(0x00000002)
> +#define GPIOCSR_VAL2 FIELD32(0x00000004)
> +#define GPIOCSR_VAL3 FIELD32(0x00000008)
> +#define GPIOCSR_VAL4 FIELD32(0x00000010)
> +#define GPIOCSR_VAL5 FIELD32(0x00000020)
> +#define GPIOCSR_VAL6 FIELD32(0x00000040)
> +#define GPIOCSR_VAL7 FIELD32(0x00000080)
> #define GPIOCSR_DIR0 FIELD32(0x00000100)
> #define GPIOCSR_DIR1 FIELD32(0x00000200)
> #define GPIOCSR_DIR2 FIELD32(0x00000400)
> diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
> index 89fee31..f95b551 100644
> --- a/drivers/net/wireless/rt2x00/rt2500usb.c
> +++ b/drivers/net/wireless/rt2x00/rt2500usb.c
> @@ -283,7 +283,7 @@ static int rt2500usb_rfkill_poll(struct rt2x00_dev *rt2x00dev)
> u16 reg;
>
> rt2500usb_register_read(rt2x00dev, MAC_CSR19, &reg);
> - return rt2x00_get_field16(reg, MAC_CSR19_BIT7);
> + return rt2x00_get_field16(reg, MAC_CSR19_VAL7);
> }
>
> #ifdef CONFIG_RT2X00_LIB_LEDS
> @@ -1786,7 +1786,7 @@ static int rt2500usb_probe_hw(struct rt2x00_dev *rt2x00dev)
> * rfkill switch GPIO pin correctly.
> */
> rt2500usb_register_read(rt2x00dev, MAC_CSR19, &reg);
> - rt2x00_set_field16(&reg, MAC_CSR19_BIT8, 0);
> + rt2x00_set_field16(&reg, MAC_CSR19_DIR0, 0);
> rt2500usb_register_write(rt2x00dev, MAC_CSR19, reg);
>
> /*
> diff --git a/drivers/net/wireless/rt2x00/rt2500usb.h b/drivers/net/wireless/rt2x00/rt2500usb.h
> index 9652300..1b91a4c 100644
> --- a/drivers/net/wireless/rt2x00/rt2500usb.h
> +++ b/drivers/net/wireless/rt2x00/rt2500usb.h
> @@ -187,24 +187,26 @@
>
> /*
> * MAC_CSR19: GPIO control register.
> + * MAC_CSR19_VALx: GPIO value
> + * MAC_CSR19_DIRx: GPIO direction: 0 = input; 1 = output
> */
> #define MAC_CSR19 0x0426
> -#define MAC_CSR19_BIT0 FIELD16(0x0001)
> -#define MAC_CSR19_BIT1 FIELD16(0x0002)
> -#define MAC_CSR19_BIT2 FIELD16(0x0004)
> -#define MAC_CSR19_BIT3 FIELD16(0x0008)
> -#define MAC_CSR19_BIT4 FIELD16(0x0010)
> -#define MAC_CSR19_BIT5 FIELD16(0x0020)
> -#define MAC_CSR19_BIT6 FIELD16(0x0040)
> -#define MAC_CSR19_BIT7 FIELD16(0x0080)
> -#define MAC_CSR19_BIT8 FIELD16(0x0100)
> -#define MAC_CSR19_BIT9 FIELD16(0x0200)
> -#define MAC_CSR19_BIT10 FIELD16(0x0400)
> -#define MAC_CSR19_BIT11 FIELD16(0x0800)
> -#define MAC_CSR19_BIT12 FIELD16(0x1000)
> -#define MAC_CSR19_BIT13 FIELD16(0x2000)
> -#define MAC_CSR19_BIT14 FIELD16(0x4000)
> -#define MAC_CSR19_BIT15 FIELD16(0x8000)
> +#define MAC_CSR19_VAL0 FIELD16(0x0001)
> +#define MAC_CSR19_VAL1 FIELD16(0x0002)
> +#define MAC_CSR19_VAL2 FIELD16(0x0004)
> +#define MAC_CSR19_VAL3 FIELD16(0x0008)
> +#define MAC_CSR19_VAL4 FIELD16(0x0010)
> +#define MAC_CSR19_VAL5 FIELD16(0x0020)
> +#define MAC_CSR19_VAL6 FIELD16(0x0040)
> +#define MAC_CSR19_VAL7 FIELD16(0x0080)
> +#define MAC_CSR19_DIR0 FIELD16(0x0100)
> +#define MAC_CSR19_DIR1 FIELD16(0x0200)
> +#define MAC_CSR19_DIR2 FIELD16(0x0400)
> +#define MAC_CSR19_DIR3 FIELD16(0x0800)
> +#define MAC_CSR19_DIR4 FIELD16(0x1000)
> +#define MAC_CSR19_DIR5 FIELD16(0x2000)
> +#define MAC_CSR19_DIR6 FIELD16(0x4000)
> +#define MAC_CSR19_DIR7 FIELD16(0x8000)
>
> /*
> * MAC_CSR20: LED control register.
> diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
> index a838e17..e13916f 100644
> --- a/drivers/net/wireless/rt2x00/rt2800.h
> +++ b/drivers/net/wireless/rt2x00/rt2800.h
> @@ -439,32 +439,33 @@
> #define WMM_TXOP1_CFG_AC3TXOP FIELD32(0xffff0000)
>
> /*
> - * GPIO_CTRL_CFG:
> - * GPIOD: GPIO direction, 0: Output, 1: Input
> - */
> -#define GPIO_CTRL_CFG 0x0228
> -#define GPIO_CTRL_CFG_BIT0 FIELD32(0x00000001)
> -#define GPIO_CTRL_CFG_BIT1 FIELD32(0x00000002)
> -#define GPIO_CTRL_CFG_BIT2 FIELD32(0x00000004)
> -#define GPIO_CTRL_CFG_BIT3 FIELD32(0x00000008)
> -#define GPIO_CTRL_CFG_BIT4 FIELD32(0x00000010)
> -#define GPIO_CTRL_CFG_BIT5 FIELD32(0x00000020)
> -#define GPIO_CTRL_CFG_BIT6 FIELD32(0x00000040)
> -#define GPIO_CTRL_CFG_BIT7 FIELD32(0x00000080)
> -#define GPIO_CTRL_CFG_GPIOD_BIT0 FIELD32(0x00000100)
> -#define GPIO_CTRL_CFG_GPIOD_BIT1 FIELD32(0x00000200)
> -#define GPIO_CTRL_CFG_GPIOD_BIT2 FIELD32(0x00000400)
> -#define GPIO_CTRL_CFG_GPIOD_BIT3 FIELD32(0x00000800)
> -#define GPIO_CTRL_CFG_GPIOD_BIT4 FIELD32(0x00001000)
> -#define GPIO_CTRL_CFG_GPIOD_BIT5 FIELD32(0x00002000)
> -#define GPIO_CTRL_CFG_GPIOD_BIT6 FIELD32(0x00004000)
> -#define GPIO_CTRL_CFG_GPIOD_BIT7 FIELD32(0x00008000)
> -#define GPIO_CTRL_CFG_BIT8 FIELD32(0x00010000)
> -#define GPIO_CTRL_CFG_BIT9 FIELD32(0x00020000)
> -#define GPIO_CTRL_CFG_BIT10 FIELD32(0x00040000)
> -#define GPIO_CTRL_CFG_GPIOD_BIT8 FIELD32(0x01000000)
> -#define GPIO_CTRL_CFG_GPIOD_BIT9 FIELD32(0x02000000)
> -#define GPIO_CTRL_CFG_GPIOD_BIT10 FIELD32(0x04000000)
> + * GPIO_CTRL:
> + * GPIO_CTRL_VALx: GPIO value
> + * GPIO_CTRL_DIRx: GPIO direction: 0 = output; 1 = input
> + */
> +#define GPIO_CTRL 0x0228
> +#define GPIO_CTRL_VAL0 FIELD32(0x00000001)
> +#define GPIO_CTRL_VAL1 FIELD32(0x00000002)
> +#define GPIO_CTRL_VAL2 FIELD32(0x00000004)
> +#define GPIO_CTRL_VAL3 FIELD32(0x00000008)
> +#define GPIO_CTRL_VAL4 FIELD32(0x00000010)
> +#define GPIO_CTRL_VAL5 FIELD32(0x00000020)
> +#define GPIO_CTRL_VAL6 FIELD32(0x00000040)
> +#define GPIO_CTRL_VAL7 FIELD32(0x00000080)
> +#define GPIO_CTRL_DIR0 FIELD32(0x00000100)
> +#define GPIO_CTRL_DIR1 FIELD32(0x00000200)
> +#define GPIO_CTRL_DIR2 FIELD32(0x00000400)
> +#define GPIO_CTRL_DIR3 FIELD32(0x00000800)
> +#define GPIO_CTRL_DIR4 FIELD32(0x00001000)
> +#define GPIO_CTRL_DIR5 FIELD32(0x00002000)
> +#define GPIO_CTRL_DIR6 FIELD32(0x00004000)
> +#define GPIO_CTRL_DIR7 FIELD32(0x00008000)
> +#define GPIO_CTRL_VAL8 FIELD32(0x00010000)
> +#define GPIO_CTRL_VAL9 FIELD32(0x00020000)
> +#define GPIO_CTRL_VAL10 FIELD32(0x00040000)
> +#define GPIO_CTRL_DIR8 FIELD32(0x01000000)
> +#define GPIO_CTRL_DIR9 FIELD32(0x02000000)
> +#define GPIO_CTRL_DIR10 FIELD32(0x04000000)
>
> /*
> * MCU_CMD_CFG
> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index cb8c2ac..c3cae1d 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -923,8 +923,8 @@ int rt2800_rfkill_poll(struct rt2x00_dev *rt2x00dev)
> rt2800_register_read(rt2x00dev, WLAN_FUN_CTRL, &reg);
> return rt2x00_get_field32(reg, WLAN_GPIO_IN_BIT0);
> } else {
> - rt2800_register_read(rt2x00dev, GPIO_CTRL_CFG, &reg);
> - return rt2x00_get_field32(reg, GPIO_CTRL_CFG_BIT2);
> + rt2800_register_read(rt2x00dev, GPIO_CTRL, &reg);
> + return rt2x00_get_field32(reg, GPIO_CTRL_VAL2);
> }
> }
> EXPORT_SYMBOL_GPL(rt2800_rfkill_poll);
> @@ -1570,10 +1570,10 @@ static void rt2800_set_ant_diversity(struct rt2x00_dev *rt2x00dev,
> rt2800_mcu_request(rt2x00dev, MCU_ANT_SELECT, 0xff,
> eesk_pin, 0);
>
> - rt2800_register_read(rt2x00dev, GPIO_CTRL_CFG, &reg);
> - rt2x00_set_field32(&reg, GPIO_CTRL_CFG_GPIOD_BIT3, 0);
> - rt2x00_set_field32(&reg, GPIO_CTRL_CFG_BIT3, gpio_bit3);
> - rt2800_register_write(rt2x00dev, GPIO_CTRL_CFG, reg);
> + rt2800_register_read(rt2x00dev, GPIO_CTRL, &reg);
> + rt2x00_set_field32(&reg, GPIO_CTRL_DIR3, 0);
> + rt2x00_set_field32(&reg, GPIO_CTRL_VAL3, gpio_bit3);
> + rt2800_register_write(rt2x00dev, GPIO_CTRL, reg);
> }
>
> void rt2800_config_ant(struct rt2x00_dev *rt2x00dev, struct antenna_setup *ant)
> @@ -1995,13 +1995,13 @@ static void rt2800_config_channel_rf3052(struct rt2x00_dev *rt2x00dev,
> rt2800_rfcsr_write(rt2x00dev, 29, 0x9f);
> }
>
> - rt2800_register_read(rt2x00dev, GPIO_CTRL_CFG, &reg);
> - rt2x00_set_field32(&reg, GPIO_CTRL_CFG_GPIOD_BIT7, 0);
> + rt2800_register_read(rt2x00dev, GPIO_CTRL, &reg);
> + rt2x00_set_field32(&reg, GPIO_CTRL_DIR7, 0);
> if (rf->channel <= 14)
> - rt2x00_set_field32(&reg, GPIO_CTRL_CFG_BIT7, 1);
> + rt2x00_set_field32(&reg, GPIO_CTRL_VAL7, 1);
> else
> - rt2x00_set_field32(&reg, GPIO_CTRL_CFG_BIT7, 0);
> - rt2800_register_write(rt2x00dev, GPIO_CTRL_CFG, reg);
> + rt2x00_set_field32(&reg, GPIO_CTRL_VAL7, 0);
> + rt2800_register_write(rt2x00dev, GPIO_CTRL, reg);
>
> rt2800_rfcsr_read(rt2x00dev, 7, &rfcsr);
> rt2x00_set_field8(&rfcsr, RFCSR7_RF_TUNING, 1);
> @@ -3587,16 +3587,16 @@ static int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
> if (test_bit(CAPABILITY_BT_COEXIST, &rt2x00dev->cap_flags)) {
> u32 reg;
>
> - rt2800_register_read(rt2x00dev, GPIO_CTRL_CFG, &reg);
> - rt2x00_set_field32(&reg, GPIO_CTRL_CFG_GPIOD_BIT3, 0);
> - rt2x00_set_field32(&reg, GPIO_CTRL_CFG_GPIOD_BIT6, 0);
> - rt2x00_set_field32(&reg, GPIO_CTRL_CFG_BIT3, 0);
> - rt2x00_set_field32(&reg, GPIO_CTRL_CFG_BIT6, 0);
> + rt2800_register_read(rt2x00dev, GPIO_CTRL, &reg);
> + rt2x00_set_field32(&reg, GPIO_CTRL_DIR3, 0);
> + rt2x00_set_field32(&reg, GPIO_CTRL_DIR6, 0);
> + rt2x00_set_field32(&reg, GPIO_CTRL_VAL3, 0);
> + rt2x00_set_field32(&reg, GPIO_CTRL_VAL6, 0);
> if (ant == 0)
> - rt2x00_set_field32(&reg, GPIO_CTRL_CFG_BIT3, 1);
> + rt2x00_set_field32(&reg, GPIO_CTRL_VAL3, 1);
> else if (ant == 1)
> - rt2x00_set_field32(&reg, GPIO_CTRL_CFG_BIT6, 1);
> - rt2800_register_write(rt2x00dev, GPIO_CTRL_CFG, reg);
> + rt2x00_set_field32(&reg, GPIO_CTRL_VAL6, 1);
> + rt2800_register_write(rt2x00dev, GPIO_CTRL, reg);
> }
>
> /* This chip has hardware antenna diversity*/
> diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
> index 4765bbd..0965540 100644
> --- a/drivers/net/wireless/rt2x00/rt2800pci.c
> +++ b/drivers/net/wireless/rt2x00/rt2800pci.c
> @@ -1000,9 +1000,9 @@ static int rt2800pci_probe_hw(struct rt2x00_dev *rt2x00dev)
> * Enable rfkill polling by setting GPIO direction of the
> * rfkill switch GPIO pin correctly.
> */
> - rt2x00pci_register_read(rt2x00dev, GPIO_CTRL_CFG, &reg);
> - rt2x00_set_field32(&reg, GPIO_CTRL_CFG_GPIOD_BIT2, 1);
> - rt2x00pci_register_write(rt2x00dev, GPIO_CTRL_CFG, reg);
> + rt2x00pci_register_read(rt2x00dev, GPIO_CTRL, &reg);
> + rt2x00_set_field32(&reg, GPIO_CTRL_DIR2, 1);
> + rt2x00pci_register_write(rt2x00dev, GPIO_CTRL, reg);
>
> /*
> * Initialize hw specifications.
> diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c
> index 52a32b5..5390632 100644
> --- a/drivers/net/wireless/rt2x00/rt2800usb.c
> +++ b/drivers/net/wireless/rt2x00/rt2800usb.c
> @@ -753,9 +753,9 @@ static int rt2800usb_probe_hw(struct rt2x00_dev *rt2x00dev)
> * Enable rfkill polling by setting GPIO direction of the
> * rfkill switch GPIO pin correctly.
> */
> - rt2x00usb_register_read(rt2x00dev, GPIO_CTRL_CFG, &reg);
> - rt2x00_set_field32(&reg, GPIO_CTRL_CFG_GPIOD_BIT2, 1);
> - rt2x00usb_register_write(rt2x00dev, GPIO_CTRL_CFG, reg);
> + rt2x00usb_register_read(rt2x00dev, GPIO_CTRL, &reg);
> + rt2x00_set_field32(&reg, GPIO_CTRL_DIR2, 1);
> + rt2x00usb_register_write(rt2x00dev, GPIO_CTRL, reg);
>
> /*
> * Initialize hw specifications.
> diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
> index b8ec961..2673e05 100644
> --- a/drivers/net/wireless/rt2x00/rt61pci.c
> +++ b/drivers/net/wireless/rt2x00/rt61pci.c
> @@ -243,7 +243,7 @@ static int rt61pci_rfkill_poll(struct rt2x00_dev *rt2x00dev)
> u32 reg;
>
> rt2x00pci_register_read(rt2x00dev, MAC_CSR13, &reg);
> - return rt2x00_get_field32(reg, MAC_CSR13_BIT5);
> + return rt2x00_get_field32(reg, MAC_CSR13_VAL5);
> }
>
> #ifdef CONFIG_RT2X00_LIB_LEDS
> @@ -715,11 +715,11 @@ static void rt61pci_config_antenna_2529_rx(struct rt2x00_dev *rt2x00dev,
>
> rt2x00pci_register_read(rt2x00dev, MAC_CSR13, &reg);
>
> - rt2x00_set_field32(&reg, MAC_CSR13_BIT4, p1);
> - rt2x00_set_field32(&reg, MAC_CSR13_BIT12, 0);
> + rt2x00_set_field32(&reg, MAC_CSR13_DIR4, 0);
> + rt2x00_set_field32(&reg, MAC_CSR13_VAL4, p1);
>
> - rt2x00_set_field32(&reg, MAC_CSR13_BIT3, !p2);
> - rt2x00_set_field32(&reg, MAC_CSR13_BIT11, 0);
> + rt2x00_set_field32(&reg, MAC_CSR13_DIR3, 0);
> + rt2x00_set_field32(&reg, MAC_CSR13_VAL3, !p2);
>
> rt2x00pci_register_write(rt2x00dev, MAC_CSR13, reg);
> }
> @@ -2855,7 +2855,7 @@ static int rt61pci_probe_hw(struct rt2x00_dev *rt2x00dev)
> * rfkill switch GPIO pin correctly.
> */
> rt2x00pci_register_read(rt2x00dev, MAC_CSR13, &reg);
> - rt2x00_set_field32(&reg, MAC_CSR13_BIT13, 1);
> + rt2x00_set_field32(&reg, MAC_CSR13_DIR5, 1);
> rt2x00pci_register_write(rt2x00dev, MAC_CSR13, reg);
>
> /*
> diff --git a/drivers/net/wireless/rt2x00/rt61pci.h b/drivers/net/wireless/rt2x00/rt61pci.h
> index 9ee0c33..9bc6b60 100644
> --- a/drivers/net/wireless/rt2x00/rt61pci.h
> +++ b/drivers/net/wireless/rt2x00/rt61pci.h
> @@ -357,20 +357,22 @@ struct hw_pairwise_ta_entry {
>
> /*
> * MAC_CSR13: GPIO.
> + * MAC_CSR13_VALx: GPIO value
> + * MAC_CSR13_DIRx: GPIO direction: 0 = output; 1 = input
> */
> #define MAC_CSR13 0x3034
> -#define MAC_CSR13_BIT0 FIELD32(0x00000001)
> -#define MAC_CSR13_BIT1 FIELD32(0x00000002)
> -#define MAC_CSR13_BIT2 FIELD32(0x00000004)
> -#define MAC_CSR13_BIT3 FIELD32(0x00000008)
> -#define MAC_CSR13_BIT4 FIELD32(0x00000010)
> -#define MAC_CSR13_BIT5 FIELD32(0x00000020)
> -#define MAC_CSR13_BIT8 FIELD32(0x00000100)
> -#define MAC_CSR13_BIT9 FIELD32(0x00000200)
> -#define MAC_CSR13_BIT10 FIELD32(0x00000400)
> -#define MAC_CSR13_BIT11 FIELD32(0x00000800)
> -#define MAC_CSR13_BIT12 FIELD32(0x00001000)
> -#define MAC_CSR13_BIT13 FIELD32(0x00002000)
> +#define MAC_CSR13_VAL0 FIELD32(0x00000001)
> +#define MAC_CSR13_VAL1 FIELD32(0x00000002)
> +#define MAC_CSR13_VAL2 FIELD32(0x00000004)
> +#define MAC_CSR13_VAL3 FIELD32(0x00000008)
> +#define MAC_CSR13_VAL4 FIELD32(0x00000010)
> +#define MAC_CSR13_VAL5 FIELD32(0x00000020)
> +#define MAC_CSR13_DIR0 FIELD32(0x00000100)
> +#define MAC_CSR13_DIR1 FIELD32(0x00000200)
> +#define MAC_CSR13_DIR2 FIELD32(0x00000400)
> +#define MAC_CSR13_DIR3 FIELD32(0x00000800)
> +#define MAC_CSR13_DIR4 FIELD32(0x00001000)
> +#define MAC_CSR13_DIR5 FIELD32(0x00002000)
>
> /*
> * MAC_CSR14: LED control register.
> diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c
> index 248436c..cfa9f37 100644
> --- a/drivers/net/wireless/rt2x00/rt73usb.c
> +++ b/drivers/net/wireless/rt2x00/rt73usb.c
> @@ -189,7 +189,7 @@ static int rt73usb_rfkill_poll(struct rt2x00_dev *rt2x00dev)
> u32 reg;
>
> rt2x00usb_register_read(rt2x00dev, MAC_CSR13, &reg);
> - return rt2x00_get_field32(reg, MAC_CSR13_BIT7);
> + return rt2x00_get_field32(reg, MAC_CSR13_VAL7);
> }
>
> #ifdef CONFIG_RT2X00_LIB_LEDS
> @@ -2195,7 +2195,7 @@ static int rt73usb_probe_hw(struct rt2x00_dev *rt2x00dev)
> * rfkill switch GPIO pin correctly.
> */
> rt2x00usb_register_read(rt2x00dev, MAC_CSR13, &reg);
> - rt2x00_set_field32(&reg, MAC_CSR13_BIT15, 0);
> + rt2x00_set_field32(&reg, MAC_CSR13_DIR7, 0);
> rt2x00usb_register_write(rt2x00dev, MAC_CSR13, reg);
>
> /*
> diff --git a/drivers/net/wireless/rt2x00/rt73usb.h b/drivers/net/wireless/rt2x00/rt73usb.h
> index df1cc11..7577e0b 100644
> --- a/drivers/net/wireless/rt2x00/rt73usb.h
> +++ b/drivers/net/wireless/rt2x00/rt73usb.h
> @@ -267,24 +267,26 @@ struct hw_pairwise_ta_entry {
>
> /*
> * MAC_CSR13: GPIO.
> + * MAC_CSR13_VALx: GPIO value
> + * MAC_CSR13_DIRx: GPIO direction: 0 = input; 1 = output
> */
> #define MAC_CSR13 0x3034
> -#define MAC_CSR13_BIT0 FIELD32(0x00000001)
> -#define MAC_CSR13_BIT1 FIELD32(0x00000002)
> -#define MAC_CSR13_BIT2 FIELD32(0x00000004)
> -#define MAC_CSR13_BIT3 FIELD32(0x00000008)
> -#define MAC_CSR13_BIT4 FIELD32(0x00000010)
> -#define MAC_CSR13_BIT5 FIELD32(0x00000020)
> -#define MAC_CSR13_BIT6 FIELD32(0x00000040)
> -#define MAC_CSR13_BIT7 FIELD32(0x00000080)
> -#define MAC_CSR13_BIT8 FIELD32(0x00000100)
> -#define MAC_CSR13_BIT9 FIELD32(0x00000200)
> -#define MAC_CSR13_BIT10 FIELD32(0x00000400)
> -#define MAC_CSR13_BIT11 FIELD32(0x00000800)
> -#define MAC_CSR13_BIT12 FIELD32(0x00001000)
> -#define MAC_CSR13_BIT13 FIELD32(0x00002000)
> -#define MAC_CSR13_BIT14 FIELD32(0x00004000)
> -#define MAC_CSR13_BIT15 FIELD32(0x00008000)
> +#define MAC_CSR13_VAL0 FIELD32(0x00000001)
> +#define MAC_CSR13_VAL1 FIELD32(0x00000002)
> +#define MAC_CSR13_VAL2 FIELD32(0x00000004)
> +#define MAC_CSR13_VAL3 FIELD32(0x00000008)
> +#define MAC_CSR13_VAL4 FIELD32(0x00000010)
> +#define MAC_CSR13_VAL5 FIELD32(0x00000020)
> +#define MAC_CSR13_VAL6 FIELD32(0x00000040)
> +#define MAC_CSR13_VAL7 FIELD32(0x00000080)
> +#define MAC_CSR13_DIR0 FIELD32(0x00000100)
> +#define MAC_CSR13_DIR1 FIELD32(0x00000200)
> +#define MAC_CSR13_DIR2 FIELD32(0x00000400)
> +#define MAC_CSR13_DIR3 FIELD32(0x00000800)
> +#define MAC_CSR13_DIR4 FIELD32(0x00001000)
> +#define MAC_CSR13_DIR5 FIELD32(0x00002000)
> +#define MAC_CSR13_DIR6 FIELD32(0x00004000)
> +#define MAC_CSR13_DIR7 FIELD32(0x00008000)
>
> /*
> * MAC_CSR14: LED control register.
> --
> 1.7.11.1
>

2012-09-03 01:23:51

by Gertjan van Wingerde

[permalink] [raw]
Subject: Re: [PATCH v2 6/6] rt2x00: rt2800 - Make probe_hw function common between PCI and USB.

On 09/02/12 22:44, Ivo Van Doorn wrote:
> Hi,
>
>> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
>> index c3cae1d..2ad3b7a 100644
>> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
>> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
>> @@ -44,6 +44,13 @@
>> #include "rt2800.h"
>>
>> /*
>> + * Allow hardware encryption to be disabled.
>> + */
>> +static bool modparam_nohwcrypt = false;
>> +module_param_named(nohwcrypt, modparam_nohwcrypt, bool, S_IRUGO);
>> +MODULE_PARM_DESC(nohwcrypt, "Disable hardware encryption.");
>
> I am not particularly fond of this change, I would like to have the
> module parameters inside the actual drivers instead of inside one of
> the
> library modules. I don't know if there is a policy for modules which
> says something about these situations, but my preference would be
> that the module parameters are inside rt2800pci and rt2800usb, and
> that the value would be passed to rt2800lib.
>
> If there is isn't a simple and clean way to do that, then we can take
> this patch though...
>

Yeah, I wasn't a big fan of that part as well, but at the time couldn't
find a better solution. I do have a better solution now, though.
v3 of this patch will be posted soon.

---
Gertjan