Received: by 10.223.185.116 with SMTP id b49csp3808043wrg; Mon, 19 Feb 2018 06:23:15 -0800 (PST) X-Google-Smtp-Source: AH8x225eAXQ05QcwQgAXVUdo3+cLyVKSpYtgSUQsMptFWgA/HSR2P3qLv650k7vzquC1kz88B1sO X-Received: by 10.99.122.70 with SMTP id j6mr9403407pgn.17.1519050195400; Mon, 19 Feb 2018 06:23:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519050195; cv=none; d=google.com; s=arc-20160816; b=oVs+ZDrSKt/cT+Vak4rT9PV6oFWtwqGPTax9C70myBOQQLrDuT9RAw/4Mvkc+kMZDL Z8lRFpp5m8YsrtZsm3WOO+dCa8sQHUpx1KqsRZWCODo+jCNJ8DXzc0fNlw+6uVlvaIgW OAqnUlU94z7/jAFUTWnUcrMP4ShU0iqVBMD9K7M1+72L33gO62+hfdp3gXJdWhp7qjio Opy0n0mGiPHMYSVhDurxogU9ttPctB1zmG4sHTn9gEMzX4NMLlDaDynC3eF9B7kK3N0w FievegcWyfh8f1X0zIOqF+KYXAH3d6ulgbeL6aDwGoUrYOA+yq3dLAOS5fx9WF6T51vU smcw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:arc-authentication-results; bh=y+cS+poBQlj0zhmvOBp7dJiK8GcTDwGrdhaA5QS7FxE=; b=P083Asn+kyVHWIlKxxYr4QIt1FS8DX6B0VAoXVp6M1/0sUWEkzZQahzbz1OEvQ6Dj9 uSonhWDQRZOWwiEaUCMQqwTkdVXVwd9g8O5KJTvgHHtlNS5f2x+z754QXHQ7nnsD2X8F p5GtDjG2q1TOxHyiBPlrlQ+6gPny5C/Zp9s7HgMt4oG4cZ22/OH0CbtM60EtiqulzPrB xfagTjMWX51t24ApbmcWfbwNH8tPXFZejwc/sGYV7OkTSjD8QiO3ABCb5M3ZNcYt0EiW IRxXDPajdA2HtQ/gLOt8/ibXLbPHAIln1wO96aW+RRcTeZ8u43JbxRr6W0UXIRQFCIid aRNg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c17si5016845pgp.809.2018.02.19.06.22.50; Mon, 19 Feb 2018 06:23:15 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752654AbeBSOWJ (ORCPT + 99 others); Mon, 19 Feb 2018 09:22:09 -0500 Received: from mail2.skidata.com ([91.230.2.91]:8231 "EHLO mail2.skidata.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750998AbeBSOWG (ORCPT ); Mon, 19 Feb 2018 09:22:06 -0500 X-Greylist: delayed 588 seconds by postgrey-1.27 at vger.kernel.org; Mon, 19 Feb 2018 09:22:05 EST X-IronPort-AV: E=Sophos;i="5.46,535,1511823600"; d="scan'208";a="1283230" Subject: Re: [PATCH] usb: core: introduce per-port over-current counters To: Felipe Balbi , Richard Leitner , , CC: , , , , , , , , References: <20180219120107.20434-1-dev@g0hl1n.net> <874lmdgk5k.fsf@linux.intel.com> From: Richard Leitner Message-ID: <402e4e43-b422-c2c3-391f-4f0454da6e53@skidata.com> Date: Mon, 19 Feb 2018 15:12:16 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 In-Reply-To: <874lmdgk5k.fsf@linux.intel.com> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 8bit X-Originating-IP: [192.168.111.252] X-ClientProxiedBy: sdex3srv.skidata.net (192.168.111.81) To sdex5srv.skidata.net (192.168.111.83) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On 02/19/2018 02:53 PM, Felipe Balbi wrote: > > Hi, > > Richard Leitner writes: > >> From: Richard Leitner >> >> For some userspace applications information on the number of >> over-current conditions at specific USB hub ports is relevant. Therefore >> introduce a oc_counter in the usb port struct which is exported via >> sysfs. > > relevant how? What can the application do with that knowledge? In our case we have a series of USB hardware (using the cp210x driver) which communicates using a proprietary protocol. These devices sometimes trigger an over-current situation on some hubs. In case of such an over-current situation the USB devices offer an interface for reducing the max used power. As these conditions are quite rare and imply performance reductions of the device we don't want to use reduce the max power always. With this patch I want to give the user-space application the possibility to react adequately to such over-current situations. I hope this explains my motivation for this patch in a comprehensible way. > >> Signed-off-by: Richard Leitner >> --- >> Tested on an i.MX6DL based board. >> --- >> drivers/usb/core/hub.c | 4 +++- >> drivers/usb/core/hub.h | 1 + >> drivers/usb/core/port.c | 10 ++++++++++ >> 3 files changed, 14 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c >> index c5c1f6cf3228..448fba1e1827 100644 >> --- a/drivers/usb/core/hub.c >> +++ b/drivers/usb/core/hub.c >> @@ -5104,8 +5104,10 @@ static void port_event(struct usb_hub *hub, int port1) >> >> if (portchange & USB_PORT_STAT_C_OVERCURRENT) { >> u16 status = 0, unused; >> + port_dev->oc_count++; >> >> - dev_dbg(&port_dev->dev, "over-current change\n"); >> + dev_dbg(&port_dev->dev, "over-current change #%u\n", >> + port_dev->oc_count); >> usb_clear_port_feature(hdev, port1, >> USB_PORT_FEAT_C_OVER_CURRENT); >> msleep(100); /* Cool down */ >> diff --git a/drivers/usb/core/hub.h b/drivers/usb/core/hub.h >> index 2a700ccc868c..b5cf567bf9e2 100644 >> --- a/drivers/usb/core/hub.h >> +++ b/drivers/usb/core/hub.h >> @@ -100,6 +100,7 @@ struct usb_port { >> unsigned int is_superspeed:1; >> unsigned int usb3_lpm_u1_permit:1; >> unsigned int usb3_lpm_u2_permit:1; >> + unsigned int oc_count; >> }; >> >> #define to_usb_port(_dev) \ >> diff --git a/drivers/usb/core/port.c b/drivers/usb/core/port.c >> index 1a01e9ad3804..0bfe410eb8a7 100644 >> --- a/drivers/usb/core/port.c >> +++ b/drivers/usb/core/port.c >> @@ -41,6 +41,15 @@ static ssize_t connect_type_show(struct device *dev, >> } >> static DEVICE_ATTR_RO(connect_type); >> >> +static ssize_t oc_count_show(struct device *dev, struct device_attribute *attr, >> + char *buf) >> +{ >> + struct usb_port *port_dev = to_usb_port(dev); >> + >> + return sprintf(buf, "%u\n", port_dev->oc_count); >> +} >> +static DEVICE_ATTR_RO(oc_count); > > I would actually spell this out human readable: over_current_count > Would be fine for me. regards;Richard.L