Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp2080057pxb; Sat, 23 Jan 2021 16:26:25 -0800 (PST) X-Google-Smtp-Source: ABdhPJxZyN2BqdvjDa7uLTmXJFdr+OoZI7RuGG03WTN3+K5Ir+Sg51TGNACRWLXmh5ZSztl3M2fW X-Received: by 2002:aa7:c884:: with SMTP id p4mr451241eds.212.1611447985222; Sat, 23 Jan 2021 16:26:25 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1611447985; cv=pass; d=google.com; s=arc-20160816; b=wHQs+hdNmOnD7TmC9rYHVLw07aswgcEixweZdbe4mRdEaAhFCiXsA3qAn8qoyIux9L 5F9e7al23u+23rzQB7DOqFHMslpZe28POFtjgC6oBsZyCqk7bG3it/WBUIZdUg/hdmPj Wn1+kw/eY3+DVHrt+OmRxzB81OjOtCBnR6G3cYRGNBHaTSHJDUw91zP7+VBfF8sU+lh3 yf7bbGmLoggzh/ty3l8sT4DyfIxQdU2yOD5ZEIPmTwDDYal9D3kgU8d09ukc4PZgP2xp cFcKdi83vmWXm5uEsn5lwnGIpPkkHFGfVLI1F1vfWsRkrEPyRshLjFi9rAxeIcXrkfqo gOtA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-disposition:mime-version:message-id :subject:to:from:date:dkim-signature; bh=XcMH2Ny66m7Kbn41p5/5n9zui7vrj7HcB4U6PlXOG2o=; b=Ybcrsc/qiOCilS6MTfPmGNCVOY/wBb4RzT+0H4iHGS5khZBWYgWHYOXakbM+1/7q/4 iTd125UoGyipARvGK8j/TiXb5emj2FfG6Kh0k+kUY96f2ZHJbFbZ0fOHN3192Z/oTwHy EURNnKE8P1Tm5hqwIjIw1YpeuT0ZHeOyHJFCPN1Q33E1qQsGoZ9tfZ+Wki6/UQUfkwUJ oJsU9SZANXjAk5w3JoXwLGEzotFYEA1tfrgnS6eJI01FM8XMqa2bjcdieMesNH/NLe3b Q9vVLNvTBn+ytEJEaZ/gDgjFGEsf+gifrxhn3Nyz4m/tl7wAdCEvayzTBZUs6Z3hBXEm qt/g== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@jeremyfiggins.com header.s=zoho header.b=VZrGqO7G; arc=pass (i=1 spf=pass spfdomain=jeremyfiggins.com dkim=pass dkdomain=jeremyfiggins.com dmarc=pass fromdomain=jeremyfiggins.com>); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g26si2595935edv.452.2021.01.23.16.26.01; Sat, 23 Jan 2021 16:26:25 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@jeremyfiggins.com header.s=zoho header.b=VZrGqO7G; arc=pass (i=1 spf=pass spfdomain=jeremyfiggins.com dkim=pass dkdomain=jeremyfiggins.com dmarc=pass fromdomain=jeremyfiggins.com>); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726443AbhAXAW3 (ORCPT + 99 others); Sat, 23 Jan 2021 19:22:29 -0500 Received: from sender4-of-o53.zoho.com ([136.143.188.53]:21354 "EHLO sender4-of-o53.zoho.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726433AbhAXAW2 (ORCPT ); Sat, 23 Jan 2021 19:22:28 -0500 ARC-Seal: i=1; a=rsa-sha256; t=1611447700; cv=none; d=zohomail.com; s=zohoarc; b=a1lEF8i8arpFPvQ/zu5SqUeLfiKMfwTJT+PJbQLnD0NjsfcY0F2AS3FlV4C5wZKgdyOsBKZv1HNf7DrhaN7e3u/uT13yJrOSC0eAJv0WAokfQI5mMhsmn1MBEBXQOIYBVvT2T3thnhLXRHJgodpFvTurPfL2CXNBYuAP/RsSNgc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1611447700; h=Content-Type:Date:From:MIME-Version:Message-ID:Subject:To; bh=XcMH2Ny66m7Kbn41p5/5n9zui7vrj7HcB4U6PlXOG2o=; b=QMnzIg0CUl0B6jlMHBTezQF4fa2V7zbbVPh2P+ydpwP9RDso5oaAmj3SUTro8yVZ0urwIiR7NVdNzIYA7YaFGzRvXA0zhziOEtAlGg1kjBsk+coE8V1ChT4lOESx1zgn15JO7cVKIcJQyscdy5MMo7KamTnsQQkSv7eSLKuSowU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=jeremyfiggins.com; spf=pass smtp.mailfrom=jeremy@jeremyfiggins.com; dmarc=pass header.from= header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1611447700; s=zoho; d=jeremyfiggins.com; i=kernel@jeremyfiggins.com; h=Date:From:To:Subject:Message-ID:MIME-Version:Content-Type; bh=XcMH2Ny66m7Kbn41p5/5n9zui7vrj7HcB4U6PlXOG2o=; b=VZrGqO7GE6P9CpzY6M0lXmueaiHCtTxuh0OANq63ixQdzM5asdxR+rZBn9QE3KTM uubRVx0b7Xz625hSEge9aT36XIK1DKVlaM3KdLlVudTRjYcLLoSOoW2qwaxkw8xygLF KFDVvypS2rBlKyS5qdWxVZVItciUBEDLjbLvhIgQ= Received: from watson (cpe-173-174-84-94.austin.res.rr.com [173.174.84.94]) by mx.zohomail.com with SMTPS id 1611447699061331.70404183235314; Sat, 23 Jan 2021 16:21:39 -0800 (PST) Date: Sat, 23 Jan 2021 18:21:36 -0600 From: Jeremy Figgins To: zaitcev@redhat.com, gregkh@linuxfoundation.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, stern@rowland.harvard.edu Subject: [PATCH] USB: usblp: don't call usb_set_interface if there's a single alt Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-ZohoMailClient: External Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Some devices, such as the Winbond Electronics Corp. Virtual Com Port (Vendor=0416, ProdId=5011), lockup when usb_set_interface() or usb_clear_halt() are called. This device has only a single altsetting, so it should not be necessary to call usb_set_interface(). Signed-off-by: Jeremy Figgins --- An alternative fix was submitted previously as: USB: usblp: add USBLP_QUIRK_NO_SETF_INTF flag and this superscedes that patch. This is a different approach, so I submitted it as a new patch, rather than adding a v2 to the first one; I hope that was the correct thing to do in this case. drivers/usb/class/usblp.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c index 134dc2005ce9..c9f6e9758288 100644 --- a/drivers/usb/class/usblp.c +++ b/drivers/usb/class/usblp.c @@ -1329,14 +1329,17 @@ static int usblp_set_protocol(struct usblp *usblp, int protocol) if (protocol < USBLP_FIRST_PROTOCOL || protocol > USBLP_LAST_PROTOCOL) return -EINVAL; - alts = usblp->protocol[protocol].alt_setting; - if (alts < 0) - return -EINVAL; - r = usb_set_interface(usblp->dev, usblp->ifnum, alts); - if (r < 0) { - printk(KERN_ERR "usblp: can't set desired altsetting %d on interface %d\n", - alts, usblp->ifnum); - return r; + /* Don't unnecessarily set the interface if there's a single alt. */ + if (usblp->intf->num_altsetting > 1) { + alts = usblp->protocol[protocol].alt_setting; + if (alts < 0) + return -EINVAL; + r = usb_set_interface(usblp->dev, usblp->ifnum, alts); + if (r < 0) { + printk(KERN_ERR "usblp: can't set desired altsetting %d on interface %d\n", + alts, usblp->ifnum); + return r; + } } usblp->bidir = (usblp->protocol[protocol].epread != NULL); -- 2.29.0