2011-06-30 21:29:07

by Larry Finger

[permalink] [raw]
Subject: [PATCH] rtlwifi: rtl8192de/phy.c: fix udelay() usage

Subject: drivers/net/wireless/rtlwifi/rtl8192de/phy.c: fix udelay() usage
From: Andrew Morton <[email protected]>

ERROR: "__bad_udelay" [drivers/net/wireless/rtlwifi/rtl8192de/rtl8192de.ko] undefined!

Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Larry Finger <[email protected]>
---

drivers/net/wireless/rtlwifi/rtl8192de/phy.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)

Index: wireless-testing-new/drivers/net/wireless/rtlwifi/rtl8192de/phy.c
===================================================================
--- wireless-testing-new.orig/drivers/net/wireless/rtlwifi/rtl8192de/phy.c
+++ wireless-testing-new/drivers/net/wireless/rtlwifi/rtl8192de/phy.c
@@ -1684,7 +1684,7 @@ static u8 _rtl92d_phy_patha_iqk(struct i
RTPRINT(rtlpriv, FINIT, INIT_IQK,
("Delay %d ms for One shot, path A LOK & IQK.\n",
IQK_DELAY_TIME));
- udelay(IQK_DELAY_TIME * 1000);
+ mdelay(IQK_DELAY_TIME);
/* Check failed */
regeac = rtl_get_bbreg(hw, 0xeac, BMASKDWORD);
RTPRINT(rtlpriv, FINIT, INIT_IQK, ("0xeac = 0x%x\n", regeac));
@@ -1755,7 +1755,7 @@ static u8 _rtl92d_phy_patha_iqk_5g_norma
RTPRINT(rtlpriv, FINIT, INIT_IQK,
("Delay %d ms for One shot, path A LOK & IQK.\n",
IQK_DELAY_TIME));
- udelay(IQK_DELAY_TIME * 1000 * 10);
+ mdelay(IQK_DELAY_TIME * 10);
/* Check failed */
regeac = rtl_get_bbreg(hw, 0xeac, BMASKDWORD);
RTPRINT(rtlpriv, FINIT, INIT_IQK, ("0xeac = 0x%x\n", regeac));
@@ -1808,7 +1808,7 @@ static u8 _rtl92d_phy_pathb_iqk(struct i
RTPRINT(rtlpriv, FINIT, INIT_IQK,
("Delay %d ms for One shot, path B LOK & IQK.\n",
IQK_DELAY_TIME));
- udelay(IQK_DELAY_TIME * 1000);
+ mdelay(IQK_DELAY_TIME);
/* Check failed */
regeac = rtl_get_bbreg(hw, 0xeac, BMASKDWORD);
RTPRINT(rtlpriv, FINIT, INIT_IQK, ("0xeac = 0x%x\n", regeac));
@@ -1875,7 +1875,7 @@ static u8 _rtl92d_phy_pathb_iqk_5g_norma
/* delay x ms */
RTPRINT(rtlpriv, FINIT, INIT_IQK,
("Delay %d ms for One shot, path B LOK & IQK.\n", 10));
- udelay(IQK_DELAY_TIME * 1000 * 10);
+ mdelay(IQK_DELAY_TIME * 10);

/* Check failed */
regeac = rtl_get_bbreg(hw, 0xeac, BMASKDWORD);
@@ -2206,7 +2206,7 @@ static void _rtl92d_phy_iq_calibrate_5g_
* PHY_REG.txt , and radio_a, radio_b.txt */

RTPRINT(rtlpriv, FINIT, INIT_IQK, ("IQK for 5G NORMAL:Start!!!\n"));
- udelay(IQK_DELAY_TIME * 1000 * 20);
+ mdelay(IQK_DELAY_TIME * 20);
if (t == 0) {
bbvalue = rtl_get_bbreg(hw, RFPGA0_RFMOD, BMASKDWORD);
RTPRINT(rtlpriv, FINIT, INIT_IQK, ("==>0x%08x\n", bbvalue));


2011-06-30 21:34:11

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH] rtlwifi: rtl8192de/phy.c: fix udelay() usage

Also, there are eleventy billion instances of

for (j = 0; j < N; j++)
udelay(MAX_STALL_TIME);

which seem rather unnecessary.

static inline void rtl8192c_udelay(unsigned n)
{
if (n < 1000)
udelay(n);
else
mdelay(n / 1000);
}

or something.

2011-06-30 22:03:24

by Larry Finger

[permalink] [raw]
Subject: Re: [PATCH] rtlwifi: rtl8192de/phy.c: fix udelay() usage

On 06/30/2011 04:33 PM, Andrew Morton wrote:
> Also, there are eleventy billion instances of
>
> for (j = 0; j< N; j++)
> udelay(MAX_STALL_TIME);
>
> which seem rather unnecessary.
>
> static inline void rtl8192c_udelay(unsigned n)
> {
> if (n< 1000)
> udelay(n);
> else
> mdelay(n / 1000);
> }
>
> or something.

As MAX_STALL_TIME is 50, I have done the math for (N * 50) / 1000 and changed
the loop to the equivalent mdelay call.

Larry