* [rt2x00-users] [PATCH v3] rt2x00 : fix rt3290 resuming failed.
@ 2012-07-31 12:51 Chen, Chien-Chia
2012-07-31 13:04 ` Stanislaw Gruszka
2012-07-31 13:32 ` Stanislaw Gruszka
0 siblings, 2 replies; 4+ messages in thread
From: Chen, Chien-Chia @ 2012-07-31 12:51 UTC (permalink / raw)
To: users; +Cc: kevin.chou, woody.hung, linux-wireless, sgruszka
From: Woody Hung <Woody.Hung@mediatek.com>
Date: Mon, 30 Jul 2012 15:30:33 +0800
This patch is going to fix the resuming failed from S3/S4
for rt3290 chip.
Signed-off-by: Woody Hung <Woody.Hung@mediatek.com>
CC-by: Kevin Chou <kevin.chou@mediatek.com>
Signed-off-by: Chen, Chien-Chia <machen@suse.com>
---
drivers/net/wireless/rt2x00/rt2800lib.c | 70 ++++++++++++++++++++++++++++++
drivers/net/wireless/rt2x00/rt2800lib.h | 1 +
drivers/net/wireless/rt2x00/rt2800pci.c | 71 -------------------------------
3 files changed, 71 insertions(+), 71 deletions(-)
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index e76f03c..f24cabe 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -401,6 +401,14 @@ int rt2800_load_firmware(struct rt2x00_dev *rt2x00dev,
unsigned int i;
u32 reg;
+ int retval;
+
+ if (rt2x00_rt(rt2x00dev, RT3290)) {
+ retval = rt2800_enable_wlan_rt3290(rt2x00dev);
+ if (retval)
+ return -EBUSY;
+ }
+
/*
* If driver doesn't wake up firmware here,
* rt2800_load_firmware will hang forever when interface is up again.
@@ -5152,6 +5160,68 @@ int rt2800_get_survey(struct ieee80211_hw *hw, int idx,
}
EXPORT_SYMBOL_GPL(rt2800_get_survey);
+int rt2800_enable_wlan_rt3290(struct rt2x00_dev *rt2x00dev)
+{
+ u32 reg;
+ int i, count;
+
+ rt2800_register_read(rt2x00dev, WLAN_FUN_CTRL, ®);
+ if (rt2x00_get_field32(reg, WLAN_EN))
+ return 0;
+
+ rt2x00_set_field32(®, WLAN_GPIO_OUT_OE_BIT_ALL, 0xff);
+ rt2x00_set_field32(®, FRC_WL_ANT_SET, 1);
+ rt2x00_set_field32(®, WLAN_CLK_EN, 0);
+ rt2x00_set_field32(®, WLAN_EN, 1);
+ rt2800_register_write(rt2x00dev, WLAN_FUN_CTRL, reg);
+
+ udelay(REGISTER_BUSY_DELAY);
+
+ count = 0;
+ do {
+ /*
+ * Check PLL_LD & XTAL_RDY.
+ */
+ for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
+ rt2800_register_read(rt2x00dev, CMB_CTRL, ®);
+ if (rt2x00_get_field32(reg, PLL_LD) &&
+ rt2x00_get_field32(reg, XTAL_RDY))
+ break;
+ udelay(REGISTER_BUSY_DELAY);
+ }
+
+ if (i >= REGISTER_BUSY_COUNT) {
+
+ if (count >= 10)
+ return -EIO;
+
+ rt2800_register_write(rt2x00dev, 0x58, 0x018);
+ udelay(REGISTER_BUSY_DELAY);
+ rt2800_register_write(rt2x00dev, 0x58, 0x418);
+ udelay(REGISTER_BUSY_DELAY);
+ rt2800_register_write(rt2x00dev, 0x58, 0x618);
+ udelay(REGISTER_BUSY_DELAY);
+ count++;
+ } else {
+ count = 0;
+ }
+
+ rt2800_register_read(rt2x00dev, WLAN_FUN_CTRL, ®);
+ rt2x00_set_field32(®, PCIE_APP0_CLK_REQ, 0);
+ rt2x00_set_field32(®, WLAN_CLK_EN, 1);
+ rt2x00_set_field32(®, WLAN_RESET, 1);
+ rt2800_register_write(rt2x00dev, WLAN_FUN_CTRL, reg);
+ udelay(10);
+ rt2x00_set_field32(®, WLAN_RESET, 0);
+ rt2800_register_write(rt2x00dev, WLAN_FUN_CTRL, reg);
+ udelay(10);
+ rt2800_register_write(rt2x00dev, INT_SOURCE_CSR, 0x7fffffff);
+ } while (count != 0);
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(rt2800_enable_wlan_rt3290);
+
MODULE_AUTHOR(DRV_PROJECT ", Bartlomiej Zolnierkiewicz");
MODULE_VERSION(DRV_VERSION);
MODULE_DESCRIPTION("Ralink RT2800 library");
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.h b/drivers/net/wireless/rt2x00/rt2800lib.h
index 18a0b67..2899181 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.h
+++ b/drivers/net/wireless/rt2x00/rt2800lib.h
@@ -210,4 +210,5 @@ int rt2800_get_survey(struct ieee80211_hw *hw, int idx,
struct survey_info *survey);
void rt2800_disable_wpdma(struct rt2x00_dev *rt2x00dev);
+int rt2800_enable_wlan_rt3290(struct rt2x00_dev *rt2x00dev);
#endif /* RT2800LIB_H */
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
index 235376e..98aa426 100644
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
@@ -980,66 +980,6 @@ static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
return rt2800_validate_eeprom(rt2x00dev);
}
-static int rt2800_enable_wlan_rt3290(struct rt2x00_dev *rt2x00dev)
-{
- u32 reg;
- int i, count;
-
- rt2800_register_read(rt2x00dev, WLAN_FUN_CTRL, ®);
- if (rt2x00_get_field32(reg, WLAN_EN))
- return 0;
-
- rt2x00_set_field32(®, WLAN_GPIO_OUT_OE_BIT_ALL, 0xff);
- rt2x00_set_field32(®, FRC_WL_ANT_SET, 1);
- rt2x00_set_field32(®, WLAN_CLK_EN, 0);
- rt2x00_set_field32(®, WLAN_EN, 1);
- rt2800_register_write(rt2x00dev, WLAN_FUN_CTRL, reg);
-
- udelay(REGISTER_BUSY_DELAY);
-
- count = 0;
- do {
- /*
- * Check PLL_LD & XTAL_RDY.
- */
- for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
- rt2800_register_read(rt2x00dev, CMB_CTRL, ®);
- if (rt2x00_get_field32(reg, PLL_LD) &&
- rt2x00_get_field32(reg, XTAL_RDY))
- break;
- udelay(REGISTER_BUSY_DELAY);
- }
-
- if (i >= REGISTER_BUSY_COUNT) {
-
- if (count >= 10)
- return -EIO;
-
- rt2800_register_write(rt2x00dev, 0x58, 0x018);
- udelay(REGISTER_BUSY_DELAY);
- rt2800_register_write(rt2x00dev, 0x58, 0x418);
- udelay(REGISTER_BUSY_DELAY);
- rt2800_register_write(rt2x00dev, 0x58, 0x618);
- udelay(REGISTER_BUSY_DELAY);
- count++;
- } else {
- count = 0;
- }
-
- rt2800_register_read(rt2x00dev, WLAN_FUN_CTRL, ®);
- rt2x00_set_field32(®, PCIE_APP0_CLK_REQ, 0);
- rt2x00_set_field32(®, WLAN_CLK_EN, 1);
- rt2x00_set_field32(®, WLAN_RESET, 1);
- rt2800_register_write(rt2x00dev, WLAN_FUN_CTRL, reg);
- udelay(10);
- rt2x00_set_field32(®, WLAN_RESET, 0);
- rt2800_register_write(rt2x00dev, WLAN_FUN_CTRL, reg);
- udelay(10);
- rt2800_register_write(rt2x00dev, INT_SOURCE_CSR, 0x7fffffff);
- } while (count != 0);
-
- return 0;
-}
static int rt2800pci_probe_hw(struct rt2x00_dev *rt2x00dev)
{
int retval;
@@ -1063,17 +1003,6 @@ static int rt2800pci_probe_hw(struct rt2x00_dev *rt2x00dev)
return retval;
/*
- * In probe phase call rt2800_enable_wlan_rt3290 to enable wlan
- * clk for rt3290. That avoid the MCU fail in start phase.
- */
- if (rt2x00_rt(rt2x00dev, RT3290)) {
- retval = rt2800_enable_wlan_rt3290(rt2x00dev);
-
- if (retval)
- return retval;
- }
-
- /*
* This device has multiple filters for control frames
* and has a separate filter for PS Poll frames.
*/
--
1.7.7
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [rt2x00-users] [PATCH v3] rt2x00 : fix rt3290 resuming failed.
2012-07-31 12:51 [rt2x00-users] [PATCH v3] rt2x00 : fix rt3290 resuming failed Chen, Chien-Chia
@ 2012-07-31 13:04 ` Stanislaw Gruszka
2012-07-31 13:32 ` Stanislaw Gruszka
1 sibling, 0 replies; 4+ messages in thread
From: Stanislaw Gruszka @ 2012-07-31 13:04 UTC (permalink / raw)
To: Chen, Chien-Chia; +Cc: users, kevin.chou, woody.hung, linux-wireless
On Tue, Jul 31, 2012 at 08:51:45PM +0800, Chen, Chien-Chia wrote:
> +EXPORT_SYMBOL_GPL(rt2800_enable_wlan_rt3290);
Since you removed this function from rt2800pci_probe_hw(), there is no
need to export it. It even can be static now.
Stanislaw
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [rt2x00-users] [PATCH v3] rt2x00 : fix rt3290 resuming failed.
2012-07-31 12:51 [rt2x00-users] [PATCH v3] rt2x00 : fix rt3290 resuming failed Chen, Chien-Chia
2012-07-31 13:04 ` Stanislaw Gruszka
@ 2012-07-31 13:32 ` Stanislaw Gruszka
2012-07-31 13:33 ` Matt Chen
1 sibling, 1 reply; 4+ messages in thread
From: Stanislaw Gruszka @ 2012-07-31 13:32 UTC (permalink / raw)
To: Chen, Chien-Chia; +Cc: users, kevin.chou, woody.hung, linux-wireless
On Tue, Jul 31, 2012 at 08:51:45PM +0800, Chen, Chien-Chia wrote:
> u32 reg;
>
> + int retval;
Keep declarations together.
Stanislaw
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [rt2x00-users] [PATCH v3] rt2x00 : fix rt3290 resuming failed.
2012-07-31 13:32 ` Stanislaw Gruszka
@ 2012-07-31 13:33 ` Matt Chen
0 siblings, 0 replies; 4+ messages in thread
From: Matt Chen @ 2012-07-31 13:33 UTC (permalink / raw)
To: Stanislaw Gruszka; +Cc: users, kevin.chou, woody.hung, linux-wireless
2012/7/31 Stanislaw Gruszka <sgruszka@redhat.com>:
> On Tue, Jul 31, 2012 at 08:51:45PM +0800, Chen, Chien-Chia wrote:
>> u32 reg;
>>
>> + int retval;
> Keep declarations together.
OK, will do. :)
> Stanislaw
>
--
Thank you.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2012-07-31 13:33 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-31 12:51 [rt2x00-users] [PATCH v3] rt2x00 : fix rt3290 resuming failed Chen, Chien-Chia
2012-07-31 13:04 ` Stanislaw Gruszka
2012-07-31 13:32 ` Stanislaw Gruszka
2012-07-31 13:33 ` Matt Chen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).