All of lore.kernel.org
 help / color / mirror / Atom feed
* [rt2x00-users][PATCH] rt2x00 : fix rt3290 resuming failed.
@ 2012-07-18  8:40 Chen, Chien-Chia
  2012-07-18 11:21 ` [rt2x00-users] [PATCH] " Henning Heinold
  0 siblings, 1 reply; 17+ messages in thread
From: Chen, Chien-Chia @ 2012-07-18  8:40 UTC (permalink / raw)
  To: users; +Cc: linux-wireless, kevin.chou

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

Signed-off-by: Chen, Chien-Chia <machen@suse.com>

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..135c2a2 100644
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
@@ -980,6 +980,7 @@ static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
 	return rt2800_validate_eeprom(rt2x00dev);
 }
 
+#if 0
 static int rt2800_enable_wlan_rt3290(struct rt2x00_dev *rt2x00dev)
 {
 	u32 reg;
@@ -1040,6 +1041,8 @@ static int rt2800_enable_wlan_rt3290(struct rt2x00_dev *rt2x00dev)
 
 	return 0;
 }
+
+#endif
 static int rt2800pci_probe_hw(struct rt2x00_dev *rt2x00dev)
 {
 	int retval;

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.
  2012-07-18  8:40 [rt2x00-users][PATCH] rt2x00 : fix rt3290 resuming failed Chen, Chien-Chia
@ 2012-07-18 11:21 ` Henning Heinold
  2012-07-18 14:29   ` Matt Chen
  0 siblings, 1 reply; 17+ messages in thread
From: Henning Heinold @ 2012-07-18 11:21 UTC (permalink / raw)
  To: Chen, Chien-Chia; +Cc: users, kevin.chou, linux-wireless

On Wed, Jul 18, 2012 at 04:40:27PM +0800, Chen, Chien-Chia wrote:
> This patch is going to fix the resuming failed from S3/S4
> for rt3290 chip.
> 
> Signed-off-by: Chen, Chien-Chia <machen@suse.com>
> 
> 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..135c2a2 100644
> --- a/drivers/net/wireless/rt2x00/rt2800pci.c
> +++ b/drivers/net/wireless/rt2x00/rt2800pci.c
> @@ -980,6 +980,7 @@ static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
>  	return rt2800_validate_eeprom(rt2x00dev);
>  }
>  
> +#if 0
>  static int rt2800_enable_wlan_rt3290(struct rt2x00_dev *rt2x00dev)
>  {
>  	u32 reg;
> @@ -1040,6 +1041,8 @@ static int rt2800_enable_wlan_rt3290(struct rt2x00_dev *rt2x00dev)
>  
>  	return 0;
>  }
> +
> +#endif

Why do you need the #ifdefs here?

>  static int rt2800pci_probe_hw(struct rt2x00_dev *rt2x00dev)
>  {
>  	int retval;
> 

Bye Henning

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.
  2012-07-18 11:21 ` [rt2x00-users] [PATCH] " Henning Heinold
@ 2012-07-18 14:29   ` Matt Chen
  0 siblings, 0 replies; 17+ messages in thread
From: Matt Chen @ 2012-07-18 14:29 UTC (permalink / raw)
  To: Henning Heinold; +Cc: users, kevin.chou, linux-wireless

Hi all,

2012/7/18 Henning Heinold <heinold@inf.fu-berlin.de>:
> On Wed, Jul 18, 2012 at 04:40:27PM +0800, Chen, Chien-Chia wrote:
>> This patch is going to fix the resuming failed from S3/S4
>> for rt3290 chip.
>>
>> Signed-off-by: Chen, Chien-Chia <machen@suse.com>
>>
>> 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..135c2a2 100644
>> --- a/drivers/net/wireless/rt2x00/rt2800pci.c
>> +++ b/drivers/net/wireless/rt2x00/rt2800pci.c
>> @@ -980,6 +980,7 @@ static int rt2800pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
>>       return rt2800_validate_eeprom(rt2x00dev);
>>  }
>>
>> +#if 0
>>  static int rt2800_enable_wlan_rt3290(struct rt2x00_dev *rt2x00dev)
>>  {
>>       u32 reg;
>> @@ -1040,6 +1041,8 @@ static int rt2800_enable_wlan_rt3290(struct rt2x00_dev *rt2x00dev)
>>
>>       return 0;
>>  }
>> +
>> +#endif
>
> Why do you need the #ifdefs here?
If this is no need anymore here, then I will remove this and submit it again. :)
>>  static int rt2800pci_probe_hw(struct rt2x00_dev *rt2x00dev)
>>  {
>>       int retval;
>>
>
> Bye Henning
>



-- 
Thank you.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.
  2012-07-30  7:33     ` Stanislaw Gruszka
@ 2012-07-30  8:09       ` Matt Chen
  0 siblings, 0 replies; 17+ messages in thread
From: Matt Chen @ 2012-07-30  8:09 UTC (permalink / raw)
  To: Stanislaw Gruszka; +Cc: users, linux-wireless, kevin.chou, woody.hung

Hi

2012/7/30 Stanislaw Gruszka <sgruszka@redhat.com>:
> Hi
>
> On Fri, Jul 27, 2012 at 10:22:44PM +0800, Matt Chen wrote:
>> 2012/7/27 Stanislaw Gruszka <sgruszka@redhat.com>:
>> > On Fri, Jul 27, 2012 at 03:03:54PM +0800, Chen, Chien-Chia wrote:
>> >> This patch is going to fix the resuming failed from S3/S4
>> >> for rt3290 chip.
>> >>
>> >> Signed-off-by: Chen, Chien-Chia <machen@suse.com>
>> >> CC-by: Kevin Chou <kevin.chou@mediatek.com>
>> >
>> > Could you please post patches that compile? Also you did not set true
>> Compile ? you mean the *.o files and *.ko ?
>
> Patch does not compile:
>
> drivers/net/wireless/rt2x00/rt2800lib.c:5163: error: static declaration of ‘rt2800_enable_wlan_rt3290’ follows non-static declaration
> drivers/net/wireless/rt2x00/rt2800lib.h:212: note: previous declaration of ‘rt2800_enable_wlan_rt3290’ was here
> make[1]: *** [drivers/net/wireless/rt2x00/rt2800lib.o] Error 1
> make: *** [drivers/net/wireless/rt2x00/] Error 2
>
> How did you tested the patch ?
Ah......it must be my direct copy and past, I am working on V2 path, I
am working on building it now, make sure my v2 patch is fine to build.
>> > author of the patch. Additionally, since repost that patch with changes,
>> > you should mark version of the patch and provide information about
>> > changes, like for example here:
>> Hmm....I added the Author: Woody Hung <Woody.Hung@mediatek.com> but
>> don't know why it doesn't show here. :(
>
> So fix that. Post patch to yourself first to see if setting works.
I see. thanks.
> Stanislaw
>



-- 
Thank you.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.
  2012-07-27 14:22   ` Matt Chen
@ 2012-07-30  7:33     ` Stanislaw Gruszka
  2012-07-30  8:09       ` Matt Chen
  0 siblings, 1 reply; 17+ messages in thread
From: Stanislaw Gruszka @ 2012-07-30  7:33 UTC (permalink / raw)
  To: Matt Chen; +Cc: users, linux-wireless, kevin.chou, woody.hung

Hi

On Fri, Jul 27, 2012 at 10:22:44PM +0800, Matt Chen wrote:
> 2012/7/27 Stanislaw Gruszka <sgruszka@redhat.com>:
> > On Fri, Jul 27, 2012 at 03:03:54PM +0800, Chen, Chien-Chia wrote:
> >> This patch is going to fix the resuming failed from S3/S4
> >> for rt3290 chip.
> >>
> >> Signed-off-by: Chen, Chien-Chia <machen@suse.com>
> >> CC-by: Kevin Chou <kevin.chou@mediatek.com>
> >
> > Could you please post patches that compile? Also you did not set true
> Compile ? you mean the *.o files and *.ko ?

Patch does not compile:

drivers/net/wireless/rt2x00/rt2800lib.c:5163: error: static declaration of ‘rt2800_enable_wlan_rt3290’ follows non-static declaration
drivers/net/wireless/rt2x00/rt2800lib.h:212: note: previous declaration of ‘rt2800_enable_wlan_rt3290’ was here
make[1]: *** [drivers/net/wireless/rt2x00/rt2800lib.o] Error 1
make: *** [drivers/net/wireless/rt2x00/] Error 2

How did you tested the patch ?

> > author of the patch. Additionally, since repost that patch with changes,
> > you should mark version of the patch and provide information about
> > changes, like for example here:
> Hmm....I added the Author: Woody Hung <Woody.Hung@mediatek.com> but
> don't know why it doesn't show here. :(

So fix that. Post patch to yourself first to see if setting works.

Stanislaw

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.
  2012-07-27 10:18 ` Stanislaw Gruszka
@ 2012-07-27 14:22   ` Matt Chen
  2012-07-30  7:33     ` Stanislaw Gruszka
  0 siblings, 1 reply; 17+ messages in thread
From: Matt Chen @ 2012-07-27 14:22 UTC (permalink / raw)
  To: Stanislaw Gruszka; +Cc: users, linux-wireless, kevin.chou, woody.hung

Hi Stanislaw,

2012/7/27 Stanislaw Gruszka <sgruszka@redhat.com>:
> On Fri, Jul 27, 2012 at 03:03:54PM +0800, Chen, Chien-Chia wrote:
>> This patch is going to fix the resuming failed from S3/S4
>> for rt3290 chip.
>>
>> Signed-off-by: Chen, Chien-Chia <machen@suse.com>
>> CC-by: Kevin Chou <kevin.chou@mediatek.com>
>
> Could you please post patches that compile? Also you did not set true
Compile ? you mean the *.o files and *.ko ?
> author of the patch. Additionally, since repost that patch with changes,
> you should mark version of the patch and provide information about
> changes, like for example here:
Hmm....I added the Author: Woody Hung <Woody.Hung@mediatek.com> but
don't know why it doesn't show here. :(

> http://marc.info/?l=linux-wireless&m=134338186523059&w=2
It makes sense to me. I will repost it and mark version of the patch.
> Still patch does not include registers/values names, but if providing
> such information is not possible, we will accept that.
Thanks, Ralink doesn't intend to give me the registers/values names.
> Thanks
> Stanislaw
>
>



-- 
Thank you.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.
  2012-07-27  7:03 Chen, Chien-Chia
@ 2012-07-27 10:18 ` Stanislaw Gruszka
  2012-07-27 14:22   ` Matt Chen
  0 siblings, 1 reply; 17+ messages in thread
From: Stanislaw Gruszka @ 2012-07-27 10:18 UTC (permalink / raw)
  To: Chen, Chien-Chia; +Cc: users, linux-wireless, kevin.chou, woody.hung

On Fri, Jul 27, 2012 at 03:03:54PM +0800, Chen, Chien-Chia wrote:
> This patch is going to fix the resuming failed from S3/S4
> for rt3290 chip.
> 
> Signed-off-by: Chen, Chien-Chia <machen@suse.com>
> CC-by: Kevin Chou <kevin.chou@mediatek.com>

Could you please post patches that compile? Also you did not set true
author of the patch. Additionally, since repost that patch with changes,
you should mark version of the patch and provide information about
changes, like for example here:
http://marc.info/?l=linux-wireless&m=134338186523059&w=2

Still patch does not include registers/values names, but if providing
such information is not possible, we will accept that.

Thanks
Stanislaw


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.
@ 2012-07-27  7:03 Chen, Chien-Chia
  2012-07-27 10:18 ` Stanislaw Gruszka
  0 siblings, 1 reply; 17+ messages in thread
From: Chen, Chien-Chia @ 2012-07-27  7:03 UTC (permalink / raw)
  To: users; +Cc: linux-wireless, kevin.chou, woody.hung

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

Signed-off-by: Chen, Chien-Chia <machen@suse.com>
CC-by: Kevin Chou <kevin.chou@mediatek.com>
----
diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index e76f03c..ed756f4 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);
 
+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;
+}
+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..0321fd8 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.h
+++ b/drivers/net/wireless/rt2x00/rt2800lib.h
@@ -209,5 +209,6 @@ 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;

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* RE: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.
  2012-07-24  6:24       ` Matt Chen
@ 2012-07-24  7:21         ` Kevin Chou (周庭昱)
  0 siblings, 0 replies; 17+ messages in thread
From: Kevin Chou (周庭昱) @ 2012-07-24  7:21 UTC (permalink / raw)
  To: Matt Chen, Woody Hung (洪秋竹)
  Cc: Stanislaw Gruszka, linux-wireless, users

RGVhciBXb29keSwNCg0KQ291bGQgeW91IGhlbHAgdG8gYW5zd2VyIFN0YW5pc2xhdydzIHF1ZXN0
aW9ucz8NClRoYW5rIHlvdS4NCg0KQmVzdCBXaXNoZXMNCg0KS2V2aW4gQ2hvdQ0KTWVkaWFUZWsg
SW5jLg0KVEVMOiA4ODYtMy01NjAwODY4IGV4dDozMTU1NQ0KDQotLS0tLU9yaWdpbmFsIE1lc3Nh
Z2UtLS0tLQ0KRnJvbTogTWF0dCBDaGVuIFttYWlsdG86bWFjaGVuQHN1c2UuY29tXSANClNlbnQ6
IFR1ZXNkYXksIEp1bHkgMjQsIDIwMTIgMjoyNSBQTQ0KVG86IEtldmluIENob3UgKKlQrnisUikN
CkNjOiBTdGFuaXNsYXcgR3J1c3prYTsgbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnOyB1
c2Vyc0BydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbQ0KU3ViamVjdDogUmU6IFtydDJ4MDAtdXNlcnNd
IFtQQVRDSF0gcnQyeDAwIDogZml4IHJ0MzI5MCByZXN1bWluZyBmYWlsZWQuDQoNCkhpIEtldmlu
LA0KDQoyMDEyLzcvMjMgU3RhbmlzbGF3IEdydXN6a2EgPHNncnVzemthQHJlZGhhdC5jb20+Og0K
PiBIaQ0KPg0KPiBPbiBNb24sIEp1bCAyMywgMjAxMiBhdCAwMzowMTowOFBNICswODAwLCBNYXR0
IENoZW4gd3JvdGU6DQo+PiA+PiArDQo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgcnQyODAw
X3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgMHg1OCwgMHgwMTgpOw0KPj4gPj4gKyAgICAgICAg
ICAgICAgICAgICAgIHVkZWxheShSRUdJU1RFUl9CVVNZX0RFTEFZKTsNCj4+ID4+ICsgICAgICAg
ICAgICAgICAgICAgICBydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCAweDU4LCAweDQx
OCk7DQo+PiA+PiArICAgICAgICAgICAgICAgICAgICAgdWRlbGF5KFJFR0lTVEVSX0JVU1lfREVM
QVkpOw0KPj4gPj4gKyAgICAgICAgICAgICAgICAgICAgIHJ0MjgwMF9yZWdpc3Rlcl93cml0ZShy
dDJ4MDBkZXYsIDB4NTgsIA0KPj4gPj4gKyAweDYxOCk7DQo+PiA+IFdlIHJlYWxseSBsaWtlIHRv
IGtub3cgd2hhdCB0aG9zZSBibGFjayBtYWdpYyBudW1iZXJzIG1lYW4uDQo+PiBJIGhhdmUgbm8g
aWRlYSwgUmFsaW5rIGdhdmUgaXQgdG8gbWUgZm9yIHRoZSBmaXhpbmcuDQpUaGlzIHVwcGVyIG1l
YW5uaW5nIG9mIHJlZ2lzdGVyIHZhbHVlIHBhcnQgd291bGQgbmVlZCB5b3VyIGhlbHAgZm9yIGV4
cGxhbmF0aW9uLg0KPiBTbyBwZXJoYXBzIHBhdGNoIHNob3VsZCBiZSBwb3N0ZWQgYnkgUmFsaW5r
IGRldmVsb3Blciwgd2hvIGNhbiBmaXggDQo+IHRoYXQgYWNjb3JkaW5nbHk/DQo+DQo+IEFsc28g
aXQncyBjbGVhciBub3cgdGhhdCB5b3UgYXJlIG5vdCB0aGUgYXV0aG9yIG9mIHRoZSBwYXRjaC4g
V291bGQgYmUgDQo+IGdvb2QgdG8gaW5kaWNhdGUgdHJ1ZSBhdXRob3Igb2YgdGhlIHBhdGNoIGJ5
IGFkZGluZyAiRnJvbToiIGFuZCANCj4gIlNpZ25lZC1vZmYtYnk6IiBsaW5lcy4NCj4NCj4gVGhh
bmtzDQo+IFN0YW5pc2xhdw0KPg0KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXw0KPiB1c2VycyBtYWlsaW5nIGxpc3QNCj4gdXNlcnNAcnQyeDAwLnNlcmlh
bG1vbmtleS5jb20NCj4gaHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tL21haWxtYW4vbGlz
dGluZm8vdXNlcnNfcnQyeDAwLnNlcmlhbG1vbg0KPiBrZXkuY29tDQo+DQoNCg0KDQotLQ0KVGhh
bmsgeW91Lg0KCioqKioqKioqKioqKiogRW1haWwgQ29uZmlkZW50aWFsaXR5IE5vdGljZSAqKioq
KioqKioqKioqKioqKioqKg0KVGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGlzIGUtbWFp
bCBtZXNzYWdlIChpbmNsdWRpbmcgYW55IA0KYXR0YWNobWVudHMpIG1heSBiZSBjb25maWRlbnRp
YWwsIHByb3ByaWV0YXJ5LCBwcml2aWxlZ2VkLCBvciBvdGhlcndpc2UNCmV4ZW1wdCBmcm9tIGRp
c2Nsb3N1cmUgdW5kZXIgYXBwbGljYWJsZSBsYXdzLiBJdCBpcyBpbnRlbmRlZCB0byBiZSANCmNv
bnZleWVkIG9ubHkgdG8gdGhlIGRlc2lnbmF0ZWQgcmVjaXBpZW50KHMpLiBBbnkgdXNlLCBkaXNz
ZW1pbmF0aW9uLCANCmRpc3RyaWJ1dGlvbiwgcHJpbnRpbmcsIHJldGFpbmluZyBvciBjb3B5aW5n
IG9mIHRoaXMgZS1tYWlsIChpbmNsdWRpbmcgaXRzIA0KYXR0YWNobWVudHMpIGJ5IHVuaW50ZW5k
ZWQgcmVjaXBpZW50KHMpIGlzIHN0cmljdGx5IHByb2hpYml0ZWQgYW5kIG1heSANCmJlIHVubGF3
ZnVsLiBJZiB5b3UgYXJlIG5vdCBhbiBpbnRlbmRlZCByZWNpcGllbnQgb2YgdGhpcyBlLW1haWws
IG9yIGJlbGlldmUgDQp0aGF0IHlvdSBoYXZlIHJlY2VpdmVkIHRoaXMgZS1tYWlsIGluIGVycm9y
LCBwbGVhc2Ugbm90aWZ5IHRoZSBzZW5kZXIgDQppbW1lZGlhdGVseSAoYnkgcmVwbHlpbmcgdG8g
dGhpcyBlLW1haWwpLCBkZWxldGUgYW55IGFuZCBhbGwgY29waWVzIG9mIA0KdGhpcyBlLW1haWwg
KGluY2x1ZGluZyBhbnkgYXR0YWNobWVudHMpIGZyb20geW91ciBzeXN0ZW0sIGFuZCBkbyBub3QN
CmRpc2Nsb3NlIHRoZSBjb250ZW50IG9mIHRoaXMgZS1tYWlsIHRvIGFueSBvdGhlciBwZXJzb24u
IFRoYW5rIHlvdSE=


^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.
  2012-07-23 11:24     ` Stanislaw Gruszka
  2012-07-23 12:35       ` Matt Chen
@ 2012-07-24  6:24       ` Matt Chen
  2012-07-24  7:21         ` Kevin Chou (周庭昱)
  1 sibling, 1 reply; 17+ messages in thread
From: Matt Chen @ 2012-07-24  6:24 UTC (permalink / raw)
  To: kevin.chou; +Cc: Stanislaw Gruszka, linux-wireless, users

Hi Kevin,

2012/7/23 Stanislaw Gruszka <sgruszka@redhat.com>:
> 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.
This upper meanning of register value part would need your help for
explanation.
> 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
>
> _______________________________________________
> users mailing list
> users@rt2x00.serialmonkey.com
> http://rt2x00.serialmonkey.com/mailman/listinfo/users_rt2x00.serialmonkey.com
>



-- 
Thank you.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.
  2012-07-23 11:24     ` Stanislaw Gruszka
@ 2012-07-23 12:35       ` Matt Chen
  2012-07-24  6:24       ` Matt Chen
  1 sibling, 0 replies; 17+ messages in thread
From: Matt Chen @ 2012-07-23 12:35 UTC (permalink / raw)
  To: Stanislaw Gruszka; +Cc: kevin.chou, linux-wireless, users

Hi

2012/7/23 Stanislaw Gruszka <sgruszka@redhat.com>:
> 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.
No, I am not, just help the Ralink RD to submit this patch. I've
already asked them who is the author of this and will add him/her for
the "From:" and "Signed-off-by" for  next submit. :)
> Thanks
> Stanislaw
>
> _______________________________________________
> users mailing list
> users@rt2x00.serialmonkey.com
> http://rt2x00.serialmonkey.com/mailman/listinfo/users_rt2x00.serialmonkey.com
>



-- 
Thank you.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.
  2012-07-23  7:01   ` Matt Chen
@ 2012-07-23 11:24     ` Stanislaw Gruszka
  2012-07-23 12:35       ` Matt Chen
  2012-07-24  6:24       ` Matt Chen
  0 siblings, 2 replies; 17+ messages in thread
From: Stanislaw Gruszka @ 2012-07-23 11:24 UTC (permalink / raw)
  To: Matt Chen; +Cc: kevin.chou, linux-wireless, users

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.
  2012-07-19 14:54 ` Stanislaw Gruszka
@ 2012-07-23  7:01   ` Matt Chen
  2012-07-23 11:24     ` Stanislaw Gruszka
  0 siblings, 1 reply; 17+ messages in thread
From: Matt Chen @ 2012-07-23  7:01 UTC (permalink / raw)
  To: Stanislaw Gruszka; +Cc: users, kevin.chou, linux-wireless

Hi Stanislaw,

2012/7/19 Stanislaw Gruszka <sgruszka@redhat.com>:
> 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.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [rt2x00-users]  [PATCH] rt2x00 : fix rt3290 resuming failed.
  2012-07-19  3:18 Chen, Chien-Chia
  2012-07-19 11:51 ` Helmut Schaa
  2012-07-19 11:57 ` Ivo Van Doorn
@ 2012-07-19 14:54 ` Stanislaw Gruszka
  2012-07-23  7:01   ` Matt Chen
  2 siblings, 1 reply; 17+ messages in thread
From: Stanislaw Gruszka @ 2012-07-19 14:54 UTC (permalink / raw)
  To: Chen, Chien-Chia; +Cc: users, kevin.chou, linux-wireless

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

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.
  2012-07-19  3:18 Chen, Chien-Chia
  2012-07-19 11:51 ` Helmut Schaa
@ 2012-07-19 11:57 ` Ivo Van Doorn
  2012-07-19 14:54 ` Stanislaw Gruszka
  2 siblings, 0 replies; 17+ messages in thread
From: Ivo Van Doorn @ 2012-07-19 11:57 UTC (permalink / raw)
  To: Chen, Chien-Chia; +Cc: users, linux-wireless, kevin.chou

On Thu, Jul 19, 2012 at 5:18 AM, Chen, Chien-Chia <machen@suse.com> wrote:
> This patch is going to fix the resuming failed from S3/S4
> for rt3290 chip.
>
> Signed-off-by: Chen, Chien-Chia <machen@suse.com>
> CC-by: Kevin Chou <kevin.chou@mediatek.com>

Acked-by: Ivo van Doorn <IvDoorn@gmail.com>

> ---
> 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 majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.
  2012-07-19  3:18 Chen, Chien-Chia
@ 2012-07-19 11:51 ` Helmut Schaa
  2012-07-19 11:57 ` Ivo Van Doorn
  2012-07-19 14:54 ` Stanislaw Gruszka
  2 siblings, 0 replies; 17+ messages in thread
From: Helmut Schaa @ 2012-07-19 11:51 UTC (permalink / raw)
  To: Chen, Chien-Chia; +Cc: users, linux-wireless, kevin.chou

On Thu, Jul 19, 2012 at 5:18 AM, Chen, Chien-Chia <machen@suse.com> wrote:
> This patch is going to fix the resuming failed from S3/S4
> for rt3290 chip.
>
> Signed-off-by: Chen, Chien-Chia <machen@suse.com>
> CC-by: Kevin Chou <kevin.chou@mediatek.com>

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 majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [rt2x00-users] [PATCH] rt2x00 : fix rt3290 resuming failed.
@ 2012-07-19  3:18 Chen, Chien-Chia
  2012-07-19 11:51 ` Helmut Schaa
                   ` (2 more replies)
  0 siblings, 3 replies; 17+ messages in thread
From: Chen, Chien-Chia @ 2012-07-19  3:18 UTC (permalink / raw)
  To: users; +Cc: linux-wireless, kevin.chou

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

Signed-off-by: Chen, Chien-Chia <machen@suse.com>
CC-by: Kevin Chou <kevin.chou@mediatek.com>
---
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;

^ permalink raw reply related	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2012-07-30  8:09 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-18  8:40 [rt2x00-users][PATCH] rt2x00 : fix rt3290 resuming failed Chen, Chien-Chia
2012-07-18 11:21 ` [rt2x00-users] [PATCH] " Henning Heinold
2012-07-18 14:29   ` Matt Chen
2012-07-19  3:18 Chen, Chien-Chia
2012-07-19 11:51 ` Helmut Schaa
2012-07-19 11:57 ` Ivo Van Doorn
2012-07-19 14:54 ` Stanislaw Gruszka
2012-07-23  7:01   ` Matt Chen
2012-07-23 11:24     ` Stanislaw Gruszka
2012-07-23 12:35       ` Matt Chen
2012-07-24  6:24       ` Matt Chen
2012-07-24  7:21         ` Kevin Chou (周庭昱)
2012-07-27  7:03 Chen, Chien-Chia
2012-07-27 10:18 ` Stanislaw Gruszka
2012-07-27 14:22   ` Matt Chen
2012-07-30  7:33     ` Stanislaw Gruszka
2012-07-30  8:09       ` Matt Chen

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.