2012-07-19 03:17:22

by Matt Chen

[permalink] [raw]
Subject: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.

This patch is going to fix the resuming failed from S3/S4
for rt3290 chip.

Signed-off-by: Chen, Chien-Chia <[email protected]>
CC-by: Kevin Chou <[email protected]>
---
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index e76f03c..1715776 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -400,6 +400,13 @@ 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,
@@ -5152,6 +5159,65 @@ 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, &reg);
+ if ((rt2x00_get_field32(reg, WLAN_EN) == 1))
+ return 0;
+
+ rt2x00_set_field32(&reg, WLAN_GPIO_OUT_OE_BIT_ALL, 0xff);
+ rt2x00_set_field32(&reg, FRC_WL_ANT_SET, 1);
+ rt2x00_set_field32(&reg, WLAN_CLK_EN, 0);
+ rt2x00_set_field32(&reg, 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, &reg);
+ if ((rt2x00_get_field32(reg, PLL_LD) == 1) &&
+ (rt2x00_get_field32(reg, XTAL_RDY) == 1))
+ 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, &reg);
+ rt2x00_set_field32(&reg, PCIE_APP0_CLK_REQ, 0);
+ rt2x00_set_field32(&reg, WLAN_CLK_EN, 1);
+ rt2x00_set_field32(&reg, WLAN_RESET, 1);
+ rt2800_register_write(rt2x00dev, WLAN_FUN_CTRL, reg);
+ udelay(10);
+ rt2x00_set_field32(&reg, 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..12d6eeb 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.h
+++ b/drivers/net/wireless/rt2x00/rt2800lib.h
@@ -209,5 +209,5 @@ int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
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..b7a02bf 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, &reg);
- if (rt2x00_get_field32(reg, WLAN_EN))
- return 0;
-
- rt2x00_set_field32(&reg, WLAN_GPIO_OUT_OE_BIT_ALL, 0xff);
- rt2x00_set_field32(&reg, FRC_WL_ANT_SET, 1);
- rt2x00_set_field32(&reg, WLAN_CLK_EN, 0);
- rt2x00_set_field32(&reg, 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, &reg);
- 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, &reg);
- rt2x00_set_field32(&reg, PCIE_APP0_CLK_REQ, 0);
- rt2x00_set_field32(&reg, WLAN_CLK_EN, 1);
- rt2x00_set_field32(&reg, WLAN_RESET, 1);
- rt2800_register_write(rt2x00dev, WLAN_FUN_CTRL, reg);
- udelay(10);
- rt2x00_set_field32(&reg, 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;


2012-07-19 11:51:42

by Helmut Schaa

[permalink] [raw]
Subject: Re: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.

On Thu, Jul 19, 2012 at 5:18 AM, Chen, Chien-Chia <[email protected]> wrote:
> This patch is going to fix the resuming failed from S3/S4
> for rt3290 chip.
>
> Signed-off-by: Chen, Chien-Chia <[email protected]>
> CC-by: Kevin Chou <[email protected]>

Looks good to me,
Helmut

> ---
> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index e76f03c..1715776 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -400,6 +400,13 @@ 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,
> @@ -5152,6 +5159,65 @@ 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, &reg);
> + if ((rt2x00_get_field32(reg, WLAN_EN) == 1))
> + return 0;
> +
> + rt2x00_set_field32(&reg, WLAN_GPIO_OUT_OE_BIT_ALL, 0xff);
> + rt2x00_set_field32(&reg, FRC_WL_ANT_SET, 1);
> + rt2x00_set_field32(&reg, WLAN_CLK_EN, 0);
> + rt2x00_set_field32(&reg, 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, &reg);
> + if ((rt2x00_get_field32(reg, PLL_LD) == 1) &&
> + (rt2x00_get_field32(reg, XTAL_RDY) == 1))
> + 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, &reg);
> + rt2x00_set_field32(&reg, PCIE_APP0_CLK_REQ, 0);
> + rt2x00_set_field32(&reg, WLAN_CLK_EN, 1);
> + rt2x00_set_field32(&reg, WLAN_RESET, 1);
> + rt2800_register_write(rt2x00dev, WLAN_FUN_CTRL, reg);
> + udelay(10);
> + rt2x00_set_field32(&reg, 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..12d6eeb 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.h
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.h
> @@ -209,5 +209,5 @@ int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
> 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..b7a02bf 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, &reg);
> - if (rt2x00_get_field32(reg, WLAN_EN))
> - return 0;
> -
> - rt2x00_set_field32(&reg, WLAN_GPIO_OUT_OE_BIT_ALL, 0xff);
> - rt2x00_set_field32(&reg, FRC_WL_ANT_SET, 1);
> - rt2x00_set_field32(&reg, WLAN_CLK_EN, 0);
> - rt2x00_set_field32(&reg, 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, &reg);
> - 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, &reg);
> - rt2x00_set_field32(&reg, PCIE_APP0_CLK_REQ, 0);
> - rt2x00_set_field32(&reg, WLAN_CLK_EN, 1);
> - rt2x00_set_field32(&reg, WLAN_RESET, 1);
> - rt2800_register_write(rt2x00dev, WLAN_FUN_CTRL, reg);
> - udelay(10);
> - rt2x00_set_field32(&reg, 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;
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html

2012-07-19 14:54:44

by Stanislaw Gruszka

[permalink] [raw]
Subject: Re: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.

On Thu, Jul 19, 2012 at 11:18:23AM +0800, Chen, Chien-Chia wrote:
> + if (rt2x00_rt(rt2x00dev,RT3290)){
Please add space after a comma.

> + retval = rt2800_enable_wlan_rt3290(rt2x00dev);
> + if (retval)
> + return -EBUSY;
> + }
Since we enabling device here, it's probably not needed to do this on
rt2800pci_probe_hw, or I'm wrong?

> + if ((rt2x00_get_field32(reg, PLL_LD) == 1) &&
> + (rt2x00_get_field32(reg, XTAL_RDY) == 1))
> + break;
Use proper coding style here (see below). Seems you did not copy this
function from rt2800pci.c, but take it form other source, so it could
miss some other changes as well.

> +
> + 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);
We really like to know what those black magic numbers mean.

> - if (rt2x00_get_field32(reg, PLL_LD) &&
> - rt2x00_get_field32(reg, XTAL_RDY))
> - break;
Here is how above part should look like.

Stanislaw

2012-07-19 11:57:58

by Ivo Van Doorn

[permalink] [raw]
Subject: Re: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.

On Thu, Jul 19, 2012 at 5:18 AM, Chen, Chien-Chia <[email protected]> wrote:
> This patch is going to fix the resuming failed from S3/S4
> for rt3290 chip.
>
> Signed-off-by: Chen, Chien-Chia <[email protected]>
> CC-by: Kevin Chou <[email protected]>

Acked-by: Ivo van Doorn <[email protected]>

> ---
> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
> index e76f03c..1715776 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
> @@ -400,6 +400,13 @@ 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,
> @@ -5152,6 +5159,65 @@ 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, &reg);
> + if ((rt2x00_get_field32(reg, WLAN_EN) == 1))
> + return 0;
> +
> + rt2x00_set_field32(&reg, WLAN_GPIO_OUT_OE_BIT_ALL, 0xff);
> + rt2x00_set_field32(&reg, FRC_WL_ANT_SET, 1);
> + rt2x00_set_field32(&reg, WLAN_CLK_EN, 0);
> + rt2x00_set_field32(&reg, 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, &reg);
> + if ((rt2x00_get_field32(reg, PLL_LD) == 1) &&
> + (rt2x00_get_field32(reg, XTAL_RDY) == 1))
> + 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, &reg);
> + rt2x00_set_field32(&reg, PCIE_APP0_CLK_REQ, 0);
> + rt2x00_set_field32(&reg, WLAN_CLK_EN, 1);
> + rt2x00_set_field32(&reg, WLAN_RESET, 1);
> + rt2800_register_write(rt2x00dev, WLAN_FUN_CTRL, reg);
> + udelay(10);
> + rt2x00_set_field32(&reg, 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..12d6eeb 100644
> --- a/drivers/net/wireless/rt2x00/rt2800lib.h
> +++ b/drivers/net/wireless/rt2x00/rt2800lib.h
> @@ -209,5 +209,5 @@ int rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
> 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..b7a02bf 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, &reg);
> - if (rt2x00_get_field32(reg, WLAN_EN))
> - return 0;
> -
> - rt2x00_set_field32(&reg, WLAN_GPIO_OUT_OE_BIT_ALL, 0xff);
> - rt2x00_set_field32(&reg, FRC_WL_ANT_SET, 1);
> - rt2x00_set_field32(&reg, WLAN_CLK_EN, 0);
> - rt2x00_set_field32(&reg, 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, &reg);
> - 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, &reg);
> - rt2x00_set_field32(&reg, PCIE_APP0_CLK_REQ, 0);
> - rt2x00_set_field32(&reg, WLAN_CLK_EN, 1);
> - rt2x00_set_field32(&reg, WLAN_RESET, 1);
> - rt2800_register_write(rt2x00dev, WLAN_FUN_CTRL, reg);
> - udelay(10);
> - rt2x00_set_field32(&reg, 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;
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html

2012-07-23 07:01:14

by Matt Chen

[permalink] [raw]
Subject: Re: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.

Hi Stanislaw,

2012/7/19 Stanislaw Gruszka <[email protected]>:
> On Thu, Jul 19, 2012 at 11:18:23AM +0800, Chen, Chien-Chia wrote:
>> + if (rt2x00_rt(rt2x00dev,RT3290)){
> Please add space after a comma.
>
>> + retval = rt2800_enable_wlan_rt3290(rt2x00dev);
>> + if (retval)
>> + return -EBUSY;
>> + }
> Since we enabling device here, it's probably not needed to do this on
> rt2800pci_probe_hw, or I'm wrong?
>
>> + if ((rt2x00_get_field32(reg, PLL_LD) == 1) &&
>> + (rt2x00_get_field32(reg, XTAL_RDY) == 1))
>> + break;
> Use proper coding style here (see below). Seems you did not copy this
> function from rt2800pci.c, but take it form other source, so it could
> miss some other changes as well.
will fix it.
>> +
>> + 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);
> We really like to know what those black magic numbers mean.
I have no idea, Ralink gave it to me for the fixing.
>> - if (rt2x00_get_field32(reg, PLL_LD) &&
>> - rt2x00_get_field32(reg, XTAL_RDY))
>> - break;
> Here is how above part should look like.
Sounds good to me. :)
> Stanislaw
>



--
Thank you.

2012-07-23 11:24:45

by Stanislaw Gruszka

[permalink] [raw]
Subject: Re: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.

Hi

On Mon, Jul 23, 2012 at 03:01:08PM +0800, Matt Chen wrote:
> >> +
> >> + 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);
> > We really like to know what those black magic numbers mean.
> I have no idea, Ralink gave it to me for the fixing.

So perhaps patch should be posted by Ralink developer, who can fix that
accordingly?

Also it's clear now that you are not the author of the patch. Would be
good to indicate true author of the patch by adding "From:" and
"Signed-off-by:" lines.

Thanks
Stanislaw