From: Johan Hovold <johan@kernel.org>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Razvan Heghedus <heghedus.razvan@gmail.com>,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
Johan Hovold <johan@kernel.org>
Subject: [PATCH] Revert "usb: misc: ehset: Workaround for "special" hubs"
Date: Thu, 7 Oct 2021 11:06:01 +0200 [thread overview]
Message-ID: <20211007090601.19156-1-johan@kernel.org> (raw)
This reverts commit ce3e90d5a0cdbcb2ddebbf9e4363e59fa779ad3a.
The commit in question added list of quirky hubs, but the match
implementation clearly hasn't been tested at all.
First, hub_udev->dev.parent does not represent a USB interface so using
to_usb_interface() makes no sense and we'd be passing a random pointer
to usb_match_id().
Second, if hub_udev is a root hub it doesn't even even represent a USB
device.
Signed-off-by: Johan Hovold <johan@kernel.org>
---
drivers/usb/misc/ehset.c | 81 ++++++++--------------------------------
1 file changed, 16 insertions(+), 65 deletions(-)
diff --git a/drivers/usb/misc/ehset.c b/drivers/usb/misc/ehset.c
index b848bbdee802..f87890f9cd26 100644
--- a/drivers/usb/misc/ehset.c
+++ b/drivers/usb/misc/ehset.c
@@ -18,47 +18,6 @@
#define TEST_SINGLE_STEP_GET_DEV_DESC 0x0107
#define TEST_SINGLE_STEP_SET_FEATURE 0x0108
-/*
- * A list of USB hubs which requires to disable the power
- * to the port before starting the testing procedures.
- */
-static const struct usb_device_id ehset_hub_list[] = {
- {USB_DEVICE(0x0424, 0x4502)},
- {USB_DEVICE(0x0424, 0x4913)},
- {USB_DEVICE(0x0451, 0x8027)},
- {}
-};
-
-static int ehset_prepare_port_for_testing(struct usb_device *hub_udev, u16 portnum)
-{
- int ret = 0;
-
- /*
- * The USB2.0 spec chapter 11.24.2.13 says that the USB port which is
- * going under test needs to be put in suspend before sending the
- * test command. Most hubs don't enforce this precondition, but there
- * are some hubs which needs to disable the power to the port before
- * starting the test.
- */
- if (usb_match_id(to_usb_interface(hub_udev->dev.parent), ehset_hub_list)) {
- ret = usb_control_msg_send(hub_udev, 0, USB_REQ_CLEAR_FEATURE,
- USB_RT_PORT, USB_PORT_FEAT_ENABLE,
- portnum, NULL, 0, 1000, GFP_KERNEL);
- /* Wait for the port to be disabled. It's an arbitrary value
- * which worked every time.
- */
- msleep(100);
- } else {
- /* For the hubs which are compliant with the spec,
- * put the port in SUSPEND.
- */
- ret = usb_control_msg_send(hub_udev, 0, USB_REQ_SET_FEATURE,
- USB_RT_PORT, USB_PORT_FEAT_SUSPEND,
- portnum, NULL, 0, 1000, GFP_KERNEL);
- }
- return ret;
-}
-
static int ehset_probe(struct usb_interface *intf,
const struct usb_device_id *id)
{
@@ -71,36 +30,28 @@ static int ehset_probe(struct usb_interface *intf,
switch (test_pid) {
case TEST_SE0_NAK_PID:
- ret = ehset_prepare_port_for_testing(hub_udev, portnum);
- if (!ret)
- ret = usb_control_msg_send(hub_udev, 0, USB_REQ_SET_FEATURE,
- USB_RT_PORT, USB_PORT_FEAT_TEST,
- (USB_TEST_SE0_NAK << 8) | portnum,
- NULL, 0, 1000, GFP_KERNEL);
+ ret = usb_control_msg_send(hub_udev, 0, USB_REQ_SET_FEATURE,
+ USB_RT_PORT, USB_PORT_FEAT_TEST,
+ (USB_TEST_SE0_NAK << 8) | portnum,
+ NULL, 0, 1000, GFP_KERNEL);
break;
case TEST_J_PID:
- ret = ehset_prepare_port_for_testing(hub_udev, portnum);
- if (!ret)
- ret = usb_control_msg_send(hub_udev, 0, USB_REQ_SET_FEATURE,
- USB_RT_PORT, USB_PORT_FEAT_TEST,
- (USB_TEST_J << 8) | portnum, NULL, 0,
- 1000, GFP_KERNEL);
+ ret = usb_control_msg_send(hub_udev, 0, USB_REQ_SET_FEATURE,
+ USB_RT_PORT, USB_PORT_FEAT_TEST,
+ (USB_TEST_J << 8) | portnum, NULL, 0,
+ 1000, GFP_KERNEL);
break;
case TEST_K_PID:
- ret = ehset_prepare_port_for_testing(hub_udev, portnum);
- if (!ret)
- ret = usb_control_msg_send(hub_udev, 0, USB_REQ_SET_FEATURE,
- USB_RT_PORT, USB_PORT_FEAT_TEST,
- (USB_TEST_K << 8) | portnum, NULL, 0,
- 1000, GFP_KERNEL);
+ ret = usb_control_msg_send(hub_udev, 0, USB_REQ_SET_FEATURE,
+ USB_RT_PORT, USB_PORT_FEAT_TEST,
+ (USB_TEST_K << 8) | portnum, NULL, 0,
+ 1000, GFP_KERNEL);
break;
case TEST_PACKET_PID:
- ret = ehset_prepare_port_for_testing(hub_udev, portnum);
- if (!ret)
- ret = usb_control_msg_send(hub_udev, 0, USB_REQ_SET_FEATURE,
- USB_RT_PORT, USB_PORT_FEAT_TEST,
- (USB_TEST_PACKET << 8) | portnum,
- NULL, 0, 1000, GFP_KERNEL);
+ ret = usb_control_msg_send(hub_udev, 0, USB_REQ_SET_FEATURE,
+ USB_RT_PORT, USB_PORT_FEAT_TEST,
+ (USB_TEST_PACKET << 8) | portnum,
+ NULL, 0, 1000, GFP_KERNEL);
break;
case TEST_HS_HOST_PORT_SUSPEND_RESUME:
/* Test: wait for 15secs -> suspend -> 15secs delay -> resume */
--
2.32.0
reply other threads:[~2021-10-07 9:06 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211007090601.19156-1-johan@kernel.org \
--to=johan@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=heghedus.razvan@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.