USB: storage: ums-realtek: Whitelist auto-delink support [Linux 4.19.70]

This Linux kernel change "USB: storage: ums-realtek: Whitelist auto-delink support" is included in the Linux 4.19.70 release. This change is authored by Kai-Heng Feng <kai.heng.feng [at] canonical.com> on Wed Aug 28 01:34:50 2019 +0800. The commit for this change in Linux stable tree is 5ed3642 (patch) which is from upstream commit 1902a01. The same Linux upstream change may have been applied to various maintained Linux releases and you can find all Linux releases containing changes from upstream 1902a01.

USB: storage: ums-realtek: Whitelist auto-delink support

commit 1902a01e2bcc3abd7c9a18dc05e78c7ab4a53c54 upstream.

Auto-delink requires writing special registers to ums-realtek devices.
Unconditionally enable auto-delink may break newer devices.

So only enable auto-delink by default for the original three IDs,
0x0138, 0x0158 and 0x0159.

Realtek is working on a patch to properly support auto-delink for other
IDs.

BugLink: https://bugs.launchpad.net/bugs/1838886
Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Cc: stable <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20190827173450.13572-2-kai.heng.feng@canonical.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

There are 13 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 drivers/usb/storage/realtek_cr.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/usb/storage/realtek_cr.c b/drivers/usb/storage/realtek_cr.c
index beaffac..1d9ce9cb 100644
--- a/drivers/usb/storage/realtek_cr.c
+++ b/drivers/usb/storage/realtek_cr.c
@@ -996,12 +996,15 @@ static int init_realtek_cr(struct us_data *us)
            goto INIT_FAIL;
    }

-   if (CHECK_FW_VER(chip, 0x5888) || CHECK_FW_VER(chip, 0x5889) ||
-       CHECK_FW_VER(chip, 0x5901))
-       SET_AUTO_DELINK(chip);
-   if (STATUS_LEN(chip) == 16) {
-       if (SUPPORT_AUTO_DELINK(chip))
+   if (CHECK_PID(chip, 0x0138) || CHECK_PID(chip, 0x0158) ||
+       CHECK_PID(chip, 0x0159)) {
+       if (CHECK_FW_VER(chip, 0x5888) || CHECK_FW_VER(chip, 0x5889) ||
+               CHECK_FW_VER(chip, 0x5901))
            SET_AUTO_DELINK(chip);
+       if (STATUS_LEN(chip) == 16) {
+           if (SUPPORT_AUTO_DELINK(chip))
+               SET_AUTO_DELINK(chip);
+       }
    }
 #ifdef CONFIG_REALTEK_AUTOPM
    if (ss_en)

Leave a Reply

Your email address will not be published. Required fields are marked *