Commit 13e04fbf authored by Hayes Wang's avatar Hayes Wang Committed by David S. Miller

r8152: fix the setting of detecting the linking change for runtime suspend

1. Rename r8153b_queue_wake() to r8153_queue_wake().

2. Correct the setting. The enable bit should be 0xd38c bit 0. Besides,
   the 0xd38a bit 0 and 0xd398 bit 8 have to be cleared for both enabled
   and disabled.
Signed-off-by: default avatarHayes Wang <hayeswang@realtek.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent acd3e96d
...@@ -53,6 +53,9 @@ ...@@ -53,6 +53,9 @@
#define PAL_BDC_CR 0xd1a0 #define PAL_BDC_CR 0xd1a0
#define PLA_TEREDO_TIMER 0xd2cc #define PLA_TEREDO_TIMER 0xd2cc
#define PLA_REALWOW_TIMER 0xd2e8 #define PLA_REALWOW_TIMER 0xd2e8
#define PLA_SUSPEND_FLAG 0xd38a
#define PLA_INDICATE_FALG 0xd38c
#define PLA_EXTRA_STATUS 0xd398
#define PLA_EFUSE_DATA 0xdd00 #define PLA_EFUSE_DATA 0xdd00
#define PLA_EFUSE_CMD 0xdd02 #define PLA_EFUSE_CMD 0xdd02
#define PLA_LEDSEL 0xdd90 #define PLA_LEDSEL 0xdd90
...@@ -336,6 +339,15 @@ ...@@ -336,6 +339,15 @@
/* PLA_BOOT_CTRL */ /* PLA_BOOT_CTRL */
#define AUTOLOAD_DONE 0x0002 #define AUTOLOAD_DONE 0x0002
/* PLA_SUSPEND_FLAG */
#define LINK_CHG_EVENT BIT(0)
/* PLA_INDICATE_FALG */
#define UPCOMING_RUNTIME_D3 BIT(0)
/* PLA_EXTRA_STATUS */
#define LINK_CHANGE_FLAG BIT(8)
/* USB_USB2PHY */ /* USB_USB2PHY */
#define USB2PHY_SUSPEND 0x0001 #define USB2PHY_SUSPEND 0x0001
#define USB2PHY_L1 0x0002 #define USB2PHY_L1 0x0002
...@@ -2806,20 +2818,24 @@ static void r8153b_power_cut_en(struct r8152 *tp, bool enable) ...@@ -2806,20 +2818,24 @@ static void r8153b_power_cut_en(struct r8152 *tp, bool enable)
ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data); ocp_write_word(tp, MCU_TYPE_USB, USB_MISC_0, ocp_data);
} }
static void r8153b_queue_wake(struct r8152 *tp, bool enable) static void r8153_queue_wake(struct r8152 *tp, bool enable)
{ {
u32 ocp_data; u32 ocp_data;
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, 0xd38a); ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_INDICATE_FALG);
if (enable) if (enable)
ocp_data |= BIT(0); ocp_data |= UPCOMING_RUNTIME_D3;
else else
ocp_data &= ~BIT(0); ocp_data &= ~UPCOMING_RUNTIME_D3;
ocp_write_byte(tp, MCU_TYPE_PLA, 0xd38a, ocp_data); ocp_write_byte(tp, MCU_TYPE_PLA, PLA_INDICATE_FALG, ocp_data);
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, PLA_SUSPEND_FLAG);
ocp_data &= ~LINK_CHG_EVENT;
ocp_write_byte(tp, MCU_TYPE_PLA, PLA_SUSPEND_FLAG, ocp_data);
ocp_data = ocp_read_byte(tp, MCU_TYPE_PLA, 0xd38c); ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS);
ocp_data &= ~BIT(0); ocp_data &= ~LINK_CHANGE_FLAG;
ocp_write_byte(tp, MCU_TYPE_PLA, 0xd38c, ocp_data); ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data);
} }
static bool rtl_can_wakeup(struct r8152 *tp) static bool rtl_can_wakeup(struct r8152 *tp)
...@@ -2887,14 +2903,14 @@ static void rtl8153_runtime_enable(struct r8152 *tp, bool enable) ...@@ -2887,14 +2903,14 @@ static void rtl8153_runtime_enable(struct r8152 *tp, bool enable)
static void rtl8153b_runtime_enable(struct r8152 *tp, bool enable) static void rtl8153b_runtime_enable(struct r8152 *tp, bool enable)
{ {
if (enable) { if (enable) {
r8153b_queue_wake(tp, true); r8153_queue_wake(tp, true);
r8153b_u1u2en(tp, false); r8153b_u1u2en(tp, false);
r8153_u2p3en(tp, false); r8153_u2p3en(tp, false);
rtl_runtime_suspend_enable(tp, true); rtl_runtime_suspend_enable(tp, true);
r8153b_ups_en(tp, true); r8153b_ups_en(tp, true);
} else { } else {
r8153b_ups_en(tp, false); r8153b_ups_en(tp, false);
r8153b_queue_wake(tp, false); r8153_queue_wake(tp, false);
rtl_runtime_suspend_enable(tp, false); rtl_runtime_suspend_enable(tp, false);
r8153_u2p3en(tp, true); r8153_u2p3en(tp, true);
r8153b_u1u2en(tp, true); r8153b_u1u2en(tp, true);
...@@ -4221,7 +4237,7 @@ static void r8153b_init(struct r8152 *tp) ...@@ -4221,7 +4237,7 @@ static void r8153b_init(struct r8152 *tp)
r8153b_power_cut_en(tp, false); r8153b_power_cut_en(tp, false);
r8153b_ups_en(tp, false); r8153b_ups_en(tp, false);
r8153b_queue_wake(tp, false); r8153_queue_wake(tp, false);
rtl_runtime_suspend_enable(tp, false); rtl_runtime_suspend_enable(tp, false);
r8153b_u1u2en(tp, true); r8153b_u1u2en(tp, true);
usb_enable_lpm(tp->udev); usb_enable_lpm(tp->udev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment