From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Cyrus-Session-Id: sloti22d1t05-1286548-1524492828-2-12447960924031091650 X-Sieve: CMU Sieve 3.0 X-Spam-known-sender: no ("Email failed DMARC policy for domain") X-Spam-score: 0.0 X-Spam-hits: BAYES_00 -1.9, FROM_WORDY 2.5, HEADER_FROM_DIFFERENT_DOMAINS 0.25, MAILING_LIST_MULTI -1, ME_NOAUTH 0.01, RCVD_IN_DNSWL_HI -5, LANGUAGES en, BAYES_USED global, SA_VERSION 3.4.0 X-Spam-source: IP='209.132.180.67', Host='vger.kernel.org', Country='US', FromHeader='com', MailFrom='org', XOriginatingCountry='GB' X-Spam-charsets: X-IgnoreVacation: yes ("Email failed DMARC policy for domain") X-Resolved-to: greg@kroah.com X-Delivered-to: greg@kroah.com X-Mail-from: linux-usb-owner@vger.kernel.org ARC-Seal: i=1; a=rsa-sha256; cv=none; d=messagingengine.com; s=fm2; t= 1524492827; b=LditkB1H7WWPy46K1RA7p+wWkip1eIghG0rj/8wfxPgcGCbiI0 jNsYgsWsyzqDezLtvW3/eN4nY0HVEo15cQrqDcAQB759basSYL2XSOfZ53KetFzI ewTyfuyVsjqqr1tGV2pfxtfbfT/G2aD7rAlLaxGdKEnHUlXh3DpEcRihYskvYSWj uT1hAKor5VIavKJRn9zM5MDRN6tY2z9ZNU7o/IRbST1PCzSxsLGrW3zsQ2NUcd1Q gx48EeBVHqLOYPVWvWIfK5wSY77lc23vwV9pN5PvVcyfe9YsWFVKzSMUSTsO32kZ UOQQg5WGuw7m9fqv334ze17Yv16oTCAMoxsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=message-id:in-reply-to:references:from :date:subject:to:cc:mime-version:content-type:sender:list-id; s= fm2; t=1524492827; bh=HyHAzWUtBI7L9mt9E9NKgIyq7W7VD852n0KaKCHN90 8=; b=mndq1Lr/R1a3Q8m4FkaVQtVmhz4KgY1bLc2nW7tg6rsaV1c0Vnj53t+zeF X7z6azaBA4w3xyH2o2W/ifoyIL2qHl/WdcyKmwKcLnXxlK10Qazrg/3rpuaBh1MI ywJcwxnmoMrXja38/87jC3Xw1w4REJq1k+7IRixFSAdg/xIobsKXsU30TvM5Y+Au ylvrnY09ceryrFaSt//zbSjTn6D/I5985ymWBnEpNTRmGNT8HrN508iYL3MGpWxX U4nAPUyrtsr2UMFRQHijzJlJBXuRKEG/C7GUdPRticpQ45jLtZFlqnwFZEbGJkJ8 xerXR8N1qUIKBZM5DssXjq8xce0A== ARC-Authentication-Results: i=1; mx6.messagingengine.com; arc=none (no signatures found); dkim=none (no signatures found); dmarc=fail (p=none,has-list-id=yes,d=none) header.from=diasemi.com; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=linux-usb-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-cm=none score=0; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=diasemi.com header.result=pass header_is_org_domain=yes; x-vs=clean score=-100 state=0 Authentication-Results: mx6.messagingengine.com; arc=none (no signatures found); dkim=none (no signatures found); dmarc=fail (p=none,has-list-id=yes,d=none) header.from=diasemi.com; iprev=pass policy.iprev=209.132.180.67 (vger.kernel.org); spf=none smtp.mailfrom=linux-usb-owner@vger.kernel.org smtp.helo=vger.kernel.org; x-aligned-from=fail; x-cm=none score=0; x-ptr=pass x-ptr-helo=vger.kernel.org x-ptr-lookup=vger.kernel.org; x-return-mx=pass smtp.domain=vger.kernel.org smtp.result=pass smtp_org.domain=kernel.org smtp_org.result=pass smtp_is_org_domain=no header.domain=diasemi.com header.result=pass header_is_org_domain=yes; x-vs=clean score=-100 state=0 X-ME-VSCategory: clean X-CM-Envelope: MS4wfOFjJdT3IMTIJQ3DP/b1vHPi3d3JLtHiK71DzlbIlbH3G24WPwW0elG9/K5KYZRNGuUTiikjR3UEr0PiADI5wUt9lSjjZoeUYnVPDFsSwCINnEikVcrM sXxLH/tJAqVT/E4cthBnss1GZ24IugyojUKUJCUOX3VJd4YvWnzVVOiKWdKvVp0ocVERcg7sbJOFBxwqq68rXetWZyuL/mnC9OK9l8zfdZ67IJVGjuachoTu X-CM-Analysis: v=2.3 cv=FKU1Odgs c=1 sm=1 tr=0 a=UK1r566ZdBxH71SXbqIOeA==:117 a=UK1r566ZdBxH71SXbqIOeA==:17 a=QRjQRLzp78EA:10 a=Kd1tUaAdevIA:10 a=X3a0BiUdAAAA:8 a=VwQbUJbxAAAA:8 a=6nszj3UVdbKDbLYIwuoA:9 a=25nMwCHBu10uLc_Z:21 a=FumoekXEIWpWUzgl:21 a=d24Ss_oZLtcA:10 a=x8gzFH9gYPwA:10 a=aWu3muFgq6otJbhCXpL5:22 a=AjGcO6oz07-iQ99wixmX:22 X-ME-CMScore: 0 X-ME-CMCategory: none Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755505AbeDWOLJ (ORCPT ); Mon, 23 Apr 2018 10:11:09 -0400 Received: from mail1.bemta26.messagelabs.com ([85.158.142.5]:8311 "EHLO mail1.bemta26.messagelabs.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754962AbeDWOLC (ORCPT ); Mon, 23 Apr 2018 10:11:02 -0400 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprMKsWRWlGSWpSXmKPExsUSt3OpsW7Jy7t RBg8+yFo0L17PZvHm+HQmi67VO1ksrh3rZbK4vGsOm8Xn3iOMFouWtTJbPFl4hsni9O4SB06P Tas62TzmnQz02D93DbvHxnc7mDze77vK5rHzewO7x+dNcgHsUayZeUn5FQmsGVc2zmMreGxe8 bd9H0sD41b9LkYuDiGB9YwSH/suMnUxcgI5FRKLjx0Esjk4eAUyJVYfqwAJcwq4S3RP+sgGUe ImcbntDSOIzSZgITH5xAOwOIuAqkTb67lgtrBAsMSLOacZQeaLCLxnlPj0+AMLSIJZoE6i9/d bMJtXQFDi5MwnUHEJiYMvXjBDLDCQOL2gESwuIWAvMf39VWaQeyQE9CUaj8VChA0lvs/6BlVi LnH/cBfbBEbBWUimzkIydQEj0ypG86SizPSMktzEzBxdQwMDXUNDY11jXQu9xCrdRL3UUt3k1 LySokSgnF5iebFecWVuck6KXl5qySZGYAQxAMEOxnVfEg8xSnIwKYnyWp6/GyXEl5SfUpmRWJ wRX1Sak1p8iFGGg0NJgnfTC6CcYFFqempFWmYOMJZh0hIcPEoivKLAeBbiLS5IzC3OTIdInWL U5fh3c38vsxBLXn5eqpQ47yeQGQIgRRmleXAjYGnlEqOslDAvI9BRQjwFqUW5mSWo8q8YxTkY lYR534JM4cnMK4Hb9AroCCagIzok74AcUZKIkJJqYAy6y/Dqko1hG8t9l9Sp/1+cWvEsm0lAX PVfTXglr9pU550cfefa1gfJP3N5tvLrxJkrb0X93nj91t30WS/5PASuznqdJ79H8UiFyavbbp Oljab2Sc06rV5+8s+3v8t2H1Y1eePWuTGEcWlJ98Q2p8rXRRv73ljMjjfnSV59z+DJodd/RPe 95t6lxFKckWioxVxUnAgA8cW8IyYDAAA= X-Env-Sender: Adam.Thomson.Opensource@diasemi.com X-Msg-Ref: server-31.tower-223.messagelabs.com!1524492659!751751!1 X-Originating-IP: [94.185.165.51] X-SYMC-ESS-Client-Auth: outbound-route-from=pass X-StarScan-Received: X-StarScan-Version: 9.9.15; banners=-,-,- X-VirusChecked: Checked Message-ID: <36488aeca4c870e24ddbcf8bc9d3064c9973413f.1524490253.git.Adam.Thomson.Opensource@diasemi.com> In-Reply-To: References: From: Adam Thomson Date: Mon, 23 Apr 2018 15:10:59 +0100 Subject: [PATCH v8 4/6] power: supply: Add 'usb_type' property and supporting code To: Heikki Krogerus , Guenter Roeck , Greg Kroah-Hartman , Sebastian Reichel , Hans de Goede , Jun Li CC: , , , MIME-Version: 1.0 Content-Type: text/plain X-KSE-AttachmentFiltering-Interceptor-Info: protection disabled X-KSE-ServerInfo: sw-ex-cashub01.diasemi.com, 9 X-KSE-Antivirus-Interceptor-Info: scan successful X-KSE-Antivirus-Info: Clean, bases: 23/04/2018 11:44:00 Sender: linux-usb-owner@vger.kernel.org X-Mailing-List: linux-usb@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-Mailing-List: linux-kernel@vger.kernel.org List-ID: This commit adds the 'usb_type' property to represent USB supplies which can report a number of different types based on a connection event. Examples of this already exist in drivers whereby the existing 'type' property is updated, based on an event, to represent what was connected (e.g. USB, USB_DCP, USB_ACA, ...). Current implementations however don't show all supported connectable types, so this knowledge has to be exlicitly known for each driver that supports this. The 'usb_type' property is intended to fill this void and show users all possible USB types supported by a driver. The property, when read, shows all available types for the driver, and the one currently chosen is highlighted/bracketed. It is expected that the 'type' property would then just show the top-level type 'USB', and this would be static. Currently the 'usb_type' enum contains all of the USB variant types that exist for the 'type' enum at this time, and in addition has SDP and PPS types. The mirroring is intentional so as to not impact existing usage of the 'type' property. Signed-off-by: Adam Thomson Reviewed-by: Heikki Krogerus Reviewed-by: Sebastian Reichel --- Documentation/ABI/testing/sysfs-class-power | 12 ++++++++ drivers/power/supply/power_supply_core.c | 8 ++++- drivers/power/supply/power_supply_sysfs.c | 45 +++++++++++++++++++++++++++++ include/linux/power_supply.h | 16 ++++++++++ 4 files changed, 80 insertions(+), 1 deletion(-) diff --git a/Documentation/ABI/testing/sysfs-class-power b/Documentation/ABI/testing/sysfs-class-power index e046566..5e23e22 100644 --- a/Documentation/ABI/testing/sysfs-class-power +++ b/Documentation/ABI/testing/sysfs-class-power @@ -409,6 +409,18 @@ Description: Access: Read Valid values: Represented in 1/10 Degrees Celsius +What: /sys/class/power_supply//usb_type +Date: March 2018 +Contact: linux-pm@vger.kernel.org +Description: + Reports what type of USB connection is currently active for + the supply, for example it can show if USB-PD capable source + is attached. + + Access: Read-Only + Valid values: "Unknown", "SDP", "DCP", "CDP", "ACA", "C", "PD", + "PD_DRP", "PD_PPS", "BrickID" + What: /sys/class/power_supply//voltage_max Date: January 2008 Contact: linux-pm@vger.kernel.org diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c index a7984af..ecd68c2 100644 --- a/drivers/power/supply/power_supply_core.c +++ b/drivers/power/supply/power_supply_core.c @@ -843,7 +843,7 @@ static void psy_unregister_cooler(struct power_supply *psy) { struct device *dev; struct power_supply *psy; - int rc; + int i, rc; if (!parent) pr_warn("%s: Expected proper parent device for '%s'\n", @@ -852,6 +852,12 @@ static void psy_unregister_cooler(struct power_supply *psy) if (!desc || !desc->name || !desc->properties || !desc->num_properties) return ERR_PTR(-EINVAL); + for (i = 0; i < desc->num_properties; ++i) { + if ((desc->properties[i] == POWER_SUPPLY_PROP_USB_TYPE) && + (!desc->usb_types || !desc->num_usb_types)) + return ERR_PTR(-EINVAL); + } + psy = kzalloc(sizeof(*psy), GFP_KERNEL); if (!psy) return ERR_PTR(-ENOMEM); diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c index 5204f11..1350068 100644 --- a/drivers/power/supply/power_supply_sysfs.c +++ b/drivers/power/supply/power_supply_sysfs.c @@ -46,6 +46,11 @@ "USB_PD", "USB_PD_DRP", "BrickID" }; +static const char * const power_supply_usb_type_text[] = { + "Unknown", "SDP", "DCP", "CDP", "ACA", "C", + "PD", "PD_DRP", "PD_PPS", "BrickID" +}; + static const char * const power_supply_status_text[] = { "Unknown", "Charging", "Discharging", "Not charging", "Full" }; @@ -73,6 +78,41 @@ "Unknown", "System", "Device" }; +static ssize_t power_supply_show_usb_type(struct device *dev, + enum power_supply_usb_type *usb_types, + ssize_t num_usb_types, + union power_supply_propval *value, + char *buf) +{ + enum power_supply_usb_type usb_type; + ssize_t count = 0; + bool match = false; + int i; + + for (i = 0; i < num_usb_types; ++i) { + usb_type = usb_types[i]; + + if (value->intval == usb_type) { + count += sprintf(buf + count, "[%s] ", + power_supply_usb_type_text[usb_type]); + match = true; + } else { + count += sprintf(buf + count, "%s ", + power_supply_usb_type_text[usb_type]); + } + } + + if (!match) { + dev_warn(dev, "driver reporting unsupported connected type\n"); + return -EINVAL; + } + + if (count) + buf[count - 1] = '\n'; + + return count; +} + static ssize_t power_supply_show_property(struct device *dev, struct device_attribute *attr, char *buf) { @@ -115,6 +155,10 @@ static ssize_t power_supply_show_property(struct device *dev, else if (off == POWER_SUPPLY_PROP_TYPE) return sprintf(buf, "%s\n", power_supply_type_text[value.intval]); + else if (off == POWER_SUPPLY_PROP_USB_TYPE) + return power_supply_show_usb_type(dev, psy->desc->usb_types, + psy->desc->num_usb_types, + &value, buf); else if (off == POWER_SUPPLY_PROP_SCOPE) return sprintf(buf, "%s\n", power_supply_scope_text[value.intval]); @@ -241,6 +285,7 @@ static ssize_t power_supply_store_property(struct device *dev, POWER_SUPPLY_ATTR(time_to_full_now), POWER_SUPPLY_ATTR(time_to_full_avg), POWER_SUPPLY_ATTR(type), + POWER_SUPPLY_ATTR(usb_type), POWER_SUPPLY_ATTR(scope), POWER_SUPPLY_ATTR(precharge_current), POWER_SUPPLY_ATTR(charge_term_current), diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h index f0139b4..0c9a572 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h @@ -145,6 +145,7 @@ enum power_supply_property { POWER_SUPPLY_PROP_TIME_TO_FULL_NOW, POWER_SUPPLY_PROP_TIME_TO_FULL_AVG, POWER_SUPPLY_PROP_TYPE, /* use power_supply.type instead */ + POWER_SUPPLY_PROP_USB_TYPE, POWER_SUPPLY_PROP_SCOPE, POWER_SUPPLY_PROP_PRECHARGE_CURRENT, POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT, @@ -170,6 +171,19 @@ enum power_supply_type { POWER_SUPPLY_TYPE_APPLE_BRICK_ID, /* Apple Charging Method */ }; +enum power_supply_usb_type { + POWER_SUPPLY_USB_TYPE_UNKNOWN = 0, + POWER_SUPPLY_USB_TYPE_SDP, /* Standard Downstream Port */ + POWER_SUPPLY_USB_TYPE_DCP, /* Dedicated Charging Port */ + POWER_SUPPLY_USB_TYPE_CDP, /* Charging Downstream Port */ + POWER_SUPPLY_USB_TYPE_ACA, /* Accessory Charger Adapters */ + POWER_SUPPLY_USB_TYPE_C, /* Type C Port */ + POWER_SUPPLY_USB_TYPE_PD, /* Power Delivery Port */ + POWER_SUPPLY_USB_TYPE_PD_DRP, /* PD Dual Role Port */ + POWER_SUPPLY_USB_TYPE_PD_PPS, /* PD Programmable Power Supply */ + POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID, /* Apple Charging Method */ +}; + enum power_supply_notifier_events { PSY_EVENT_PROP_CHANGED, }; @@ -196,6 +210,8 @@ struct power_supply_config { struct power_supply_desc { const char *name; enum power_supply_type type; + enum power_supply_usb_type *usb_types; + size_t num_usb_types; enum power_supply_property *properties; size_t num_properties; -- 1.9.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v8,4/6] power: supply: Add 'usb_type' property and supporting code From: "Opensource \[Adam Thomson\]" Message-Id: <36488aeca4c870e24ddbcf8bc9d3064c9973413f.1524490253.git.Adam.Thomson.Opensource@diasemi.com> Date: Mon, 23 Apr 2018 15:10:59 +0100 To: Heikki Krogerus , Guenter Roeck , Greg Kroah-Hartman , Sebastian Reichel , Hans de Goede , Jun Li Cc: linux-usb@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, support.opensource@diasemi.com List-ID: VGhpcyBjb21taXQgYWRkcyB0aGUgJ3VzYl90eXBlJyBwcm9wZXJ0eSB0byByZXByZXNlbnQgVVNC IHN1cHBsaWVzCndoaWNoIGNhbiByZXBvcnQgYSBudW1iZXIgb2YgZGlmZmVyZW50IHR5cGVzIGJh c2VkIG9uIGEgY29ubmVjdGlvbgpldmVudC4KCkV4YW1wbGVzIG9mIHRoaXMgYWxyZWFkeSBleGlz dCBpbiBkcml2ZXJzIHdoZXJlYnkgdGhlIGV4aXN0aW5nICd0eXBlJwpwcm9wZXJ0eSBpcyB1cGRh dGVkLCBiYXNlZCBvbiBhbiBldmVudCwgdG8gcmVwcmVzZW50IHdoYXQgd2FzCmNvbm5lY3RlZCAo ZS5nLiBVU0IsIFVTQl9EQ1AsIFVTQl9BQ0EsIC4uLikuIEN1cnJlbnQgaW1wbGVtZW50YXRpb25z Cmhvd2V2ZXIgZG9uJ3Qgc2hvdyBhbGwgc3VwcG9ydGVkIGNvbm5lY3RhYmxlIHR5cGVzLCBzbyB0 aGlzIGtub3dsZWRnZQpoYXMgdG8gYmUgZXhsaWNpdGx5IGtub3duIGZvciBlYWNoIGRyaXZlciB0 aGF0IHN1cHBvcnRzIHRoaXMuCgpUaGUgJ3VzYl90eXBlJyBwcm9wZXJ0eSBpcyBpbnRlbmRlZCB0 byBmaWxsIHRoaXMgdm9pZCBhbmQgc2hvdyB1c2VycwphbGwgcG9zc2libGUgVVNCIHR5cGVzIHN1 cHBvcnRlZCBieSBhIGRyaXZlci4gVGhlIHByb3BlcnR5LCB3aGVuIHJlYWQsCnNob3dzIGFsbCBh dmFpbGFibGUgdHlwZXMgZm9yIHRoZSBkcml2ZXIsIGFuZCB0aGUgb25lIGN1cnJlbnRseSBjaG9z ZW4KaXMgaGlnaGxpZ2h0ZWQvYnJhY2tldGVkLiBJdCBpcyBleHBlY3RlZCB0aGF0IHRoZSAndHlw ZScgcHJvcGVydHkKd291bGQgdGhlbiBqdXN0IHNob3cgdGhlIHRvcC1sZXZlbCB0eXBlICdVU0In LCBhbmQgdGhpcyB3b3VsZCBiZQpzdGF0aWMuCgpDdXJyZW50bHkgdGhlICd1c2JfdHlwZScgZW51 bSBjb250YWlucyBhbGwgb2YgdGhlIFVTQiB2YXJpYW50IHR5cGVzCnRoYXQgZXhpc3QgZm9yIHRo ZSAndHlwZScgZW51bSBhdCB0aGlzIHRpbWUsIGFuZCBpbiBhZGRpdGlvbiBoYXMKU0RQIGFuZCBQ UFMgdHlwZXMuIFRoZSBtaXJyb3JpbmcgaXMgaW50ZW50aW9uYWwgc28gYXMgdG8gbm90IGltcGFj dApleGlzdGluZyB1c2FnZSBvZiB0aGUgJ3R5cGUnIHByb3BlcnR5LgoKU2lnbmVkLW9mZi1ieTog QWRhbSBUaG9tc29uIDxBZGFtLlRob21zb24uT3BlbnNvdXJjZUBkaWFzZW1pLmNvbT4KLS0tCiBE b2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXBvd2VyIHwgMTIgKysrKysrKysK IGRyaXZlcnMvcG93ZXIvc3VwcGx5L3Bvd2VyX3N1cHBseV9jb3JlLmMgICAgfCAgOCArKysrLQog ZHJpdmVycy9wb3dlci9zdXBwbHkvcG93ZXJfc3VwcGx5X3N5c2ZzLmMgICB8IDQ1ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL2xpbnV4L3Bvd2VyX3N1cHBseS5oICAgICAg ICAgICAgICAgIHwgMTYgKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA4MCBpbnNlcnRpb25z KCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGlu Zy9zeXNmcy1jbGFzcy1wb3dlciBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xh c3MtcG93ZXIKaW5kZXggZTA0NjU2Ni4uNWUyM2UyMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlv bi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1wb3dlcgorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90 ZXN0aW5nL3N5c2ZzLWNsYXNzLXBvd2VyCkBAIC00MDksNiArNDA5LDE4IEBAIERlc2NyaXB0aW9u OgogCQlBY2Nlc3M6IFJlYWQKIAkJVmFsaWQgdmFsdWVzOiBSZXByZXNlbnRlZCBpbiAxLzEwIERl Z3JlZXMgQ2Vsc2l1cwogCitXaGF0OiAJCS9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5LzxzdXBwbHlf bmFtZT4vdXNiX3R5cGUKK0RhdGU6CQlNYXJjaCAyMDE4CitDb250YWN0OglsaW51eC1wbUB2Z2Vy Lmtlcm5lbC5vcmcKK0Rlc2NyaXB0aW9uOgorCQlSZXBvcnRzIHdoYXQgdHlwZSBvZiBVU0IgY29u bmVjdGlvbiBpcyBjdXJyZW50bHkgYWN0aXZlIGZvcgorCQl0aGUgc3VwcGx5LCBmb3IgZXhhbXBs ZSBpdCBjYW4gc2hvdyBpZiBVU0ItUEQgY2FwYWJsZSBzb3VyY2UKKwkJaXMgYXR0YWNoZWQuCisK KwkJQWNjZXNzOiBSZWFkLU9ubHkKKwkJVmFsaWQgdmFsdWVzOiAiVW5rbm93biIsICJTRFAiLCAi RENQIiwgIkNEUCIsICJBQ0EiLCAiQyIsICJQRCIsCisJCQkgICAgICAiUERfRFJQIiwgIlBEX1BQ UyIsICJCcmlja0lEIgorCiBXaGF0OiAJCS9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5LzxzdXBwbHlf bmFtZT4vdm9sdGFnZV9tYXgKIERhdGU6CQlKYW51YXJ5IDIwMDgKIENvbnRhY3Q6CWxpbnV4LXBt QHZnZXIua2VybmVsLm9yZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9zdXBwbHkvcG93ZXJf c3VwcGx5X2NvcmUuYyBiL2RyaXZlcnMvcG93ZXIvc3VwcGx5L3Bvd2VyX3N1cHBseV9jb3JlLmMK aW5kZXggYTc5ODRhZi4uZWNkNjhjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9zdXBwbHkv cG93ZXJfc3VwcGx5X2NvcmUuYworKysgYi9kcml2ZXJzL3Bvd2VyL3N1cHBseS9wb3dlcl9zdXBw bHlfY29yZS5jCkBAIC04NDMsNyArODQzLDcgQEAgc3RhdGljIHZvaWQgcHN5X3VucmVnaXN0ZXJf Y29vbGVyKHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7 CiAJc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5OwotCWludCByYzsKKwlpbnQgaSwgcmM7CiAKIAlp ZiAoIXBhcmVudCkKIAkJcHJfd2FybigiJXM6IEV4cGVjdGVkIHByb3BlciBwYXJlbnQgZGV2aWNl IGZvciAnJXMnXG4iLApAQCAtODUyLDYgKzg1MiwxMiBAQCBzdGF0aWMgdm9pZCBwc3lfdW5yZWdp c3Rlcl9jb29sZXIoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5KQogCWlmICghZGVzYyB8fCAhZGVz Yy0+bmFtZSB8fCAhZGVzYy0+cHJvcGVydGllcyB8fCAhZGVzYy0+bnVtX3Byb3BlcnRpZXMpCiAJ CXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCisJZm9yIChpID0gMDsgaSA8IGRlc2MtPm51bV9w cm9wZXJ0aWVzOyArK2kpIHsKKwkJaWYgKChkZXNjLT5wcm9wZXJ0aWVzW2ldID09IFBPV0VSX1NV UFBMWV9QUk9QX1VTQl9UWVBFKSAmJgorCQkgICAgKCFkZXNjLT51c2JfdHlwZXMgfHwgIWRlc2Mt Pm51bV91c2JfdHlwZXMpKQorCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCiAJcHN5 ID0ga3phbGxvYyhzaXplb2YoKnBzeSksIEdGUF9LRVJORUwpOwogCWlmICghcHN5KQogCQlyZXR1 cm4gRVJSX1BUUigtRU5PTUVNKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvc3VwcGx5L3Bv d2VyX3N1cHBseV9zeXNmcy5jIGIvZHJpdmVycy9wb3dlci9zdXBwbHkvcG93ZXJfc3VwcGx5X3N5 c2ZzLmMKaW5kZXggNTIwNGYxMS4uMTM1MDA2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9z dXBwbHkvcG93ZXJfc3VwcGx5X3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wb3dlci9zdXBwbHkvcG93 ZXJfc3VwcGx5X3N5c2ZzLmMKQEAgLTQ2LDYgKzQ2LDExIEBACiAJIlVTQl9QRCIsICJVU0JfUERf RFJQIiwgIkJyaWNrSUQiCiB9OwogCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBvd2VyX3N1 cHBseV91c2JfdHlwZV90ZXh0W10gPSB7CisJIlVua25vd24iLCAiU0RQIiwgIkRDUCIsICJDRFAi LCAiQUNBIiwgIkMiLAorCSJQRCIsICJQRF9EUlAiLCAiUERfUFBTIiwgIkJyaWNrSUQiCit9Owor CiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBvd2VyX3N1cHBseV9zdGF0dXNfdGV4dFtdID0g ewogCSJVbmtub3duIiwgIkNoYXJnaW5nIiwgIkRpc2NoYXJnaW5nIiwgIk5vdCBjaGFyZ2luZyIs ICJGdWxsIgogfTsKQEAgLTczLDYgKzc4LDQxIEBACiAJIlVua25vd24iLCAiU3lzdGVtIiwgIkRl dmljZSIKIH07CiAKK3N0YXRpYyBzc2l6ZV90IHBvd2VyX3N1cHBseV9zaG93X3VzYl90eXBlKHN0 cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICBlbnVtIHBvd2VyX3N1cHBseV91c2JfdHlwZSAqdXNi X3R5cGVzLAorCQkJCQkgIHNzaXplX3QgbnVtX3VzYl90eXBlcywKKwkJCQkJICB1bmlvbiBwb3dl cl9zdXBwbHlfcHJvcHZhbCAqdmFsdWUsCisJCQkJCSAgY2hhciAqYnVmKQoreworCWVudW0gcG93 ZXJfc3VwcGx5X3VzYl90eXBlIHVzYl90eXBlOworCXNzaXplX3QgY291bnQgPSAwOworCWJvb2wg bWF0Y2ggPSBmYWxzZTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fdXNiX3R5cGVz OyArK2kpIHsKKwkJdXNiX3R5cGUgPSB1c2JfdHlwZXNbaV07CisKKwkJaWYgKHZhbHVlLT5pbnR2 YWwgPT0gdXNiX3R5cGUpIHsKKwkJCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsICJbJXNd ICIsCisJCQkJCSBwb3dlcl9zdXBwbHlfdXNiX3R5cGVfdGV4dFt1c2JfdHlwZV0pOworCQkJbWF0 Y2ggPSB0cnVlOworCQl9IGVsc2UgeworCQkJY291bnQgKz0gc3ByaW50ZihidWYgKyBjb3VudCwg IiVzICIsCisJCQkJCSBwb3dlcl9zdXBwbHlfdXNiX3R5cGVfdGV4dFt1c2JfdHlwZV0pOworCQl9 CisJfQorCisJaWYgKCFtYXRjaCkgeworCQlkZXZfd2FybihkZXYsICJkcml2ZXIgcmVwb3J0aW5n IHVuc3VwcG9ydGVkIGNvbm5lY3RlZCB0eXBlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQor CisJaWYgKGNvdW50KQorCQlidWZbY291bnQgLSAxXSA9ICdcbic7CisKKwlyZXR1cm4gY291bnQ7 Cit9CisKIHN0YXRpYyBzc2l6ZV90IHBvd2VyX3N1cHBseV9zaG93X3Byb3BlcnR5KHN0cnVjdCBk ZXZpY2UgKmRldiwKIAkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJ ICBjaGFyICpidWYpIHsKQEAgLTExNSw2ICsxNTUsMTAgQEAgc3RhdGljIHNzaXplX3QgcG93ZXJf c3VwcGx5X3Nob3dfcHJvcGVydHkoc3RydWN0IGRldmljZSAqZGV2LAogCWVsc2UgaWYgKG9mZiA9 PSBQT1dFUl9TVVBQTFlfUFJPUF9UWVBFKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwK IAkJCSAgICAgICBwb3dlcl9zdXBwbHlfdHlwZV90ZXh0W3ZhbHVlLmludHZhbF0pOworCWVsc2Ug aWYgKG9mZiA9PSBQT1dFUl9TVVBQTFlfUFJPUF9VU0JfVFlQRSkKKwkJcmV0dXJuIHBvd2VyX3N1 cHBseV9zaG93X3VzYl90eXBlKGRldiwgcHN5LT5kZXNjLT51c2JfdHlwZXMsCisJCQkJCQkgIHBz eS0+ZGVzYy0+bnVtX3VzYl90eXBlcywKKwkJCQkJCSAgJnZhbHVlLCBidWYpOwogCWVsc2UgaWYg KG9mZiA9PSBQT1dFUl9TVVBQTFlfUFJPUF9TQ09QRSkKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAi JXNcbiIsCiAJCQkgICAgICAgcG93ZXJfc3VwcGx5X3Njb3BlX3RleHRbdmFsdWUuaW50dmFsXSk7 CkBAIC0yNDEsNiArMjg1LDcgQEAgc3RhdGljIHNzaXplX3QgcG93ZXJfc3VwcGx5X3N0b3JlX3By b3BlcnR5KHN0cnVjdCBkZXZpY2UgKmRldiwKIAlQT1dFUl9TVVBQTFlfQVRUUih0aW1lX3RvX2Z1 bGxfbm93KSwKIAlQT1dFUl9TVVBQTFlfQVRUUih0aW1lX3RvX2Z1bGxfYXZnKSwKIAlQT1dFUl9T VVBQTFlfQVRUUih0eXBlKSwKKwlQT1dFUl9TVVBQTFlfQVRUUih1c2JfdHlwZSksCiAJUE9XRVJf U1VQUExZX0FUVFIoc2NvcGUpLAogCVBPV0VSX1NVUFBMWV9BVFRSKHByZWNoYXJnZV9jdXJyZW50 KSwKIAlQT1dFUl9TVVBQTFlfQVRUUihjaGFyZ2VfdGVybV9jdXJyZW50KSwKZGlmZiAtLWdpdCBh L2luY2x1ZGUvbGludXgvcG93ZXJfc3VwcGx5LmggYi9pbmNsdWRlL2xpbnV4L3Bvd2VyX3N1cHBs eS5oCmluZGV4IGYwMTM5YjQuLjBjOWE1NzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG93 ZXJfc3VwcGx5LmgKKysrIGIvaW5jbHVkZS9saW51eC9wb3dlcl9zdXBwbHkuaApAQCAtMTQ1LDYg KzE0NSw3IEBAIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHsKIAlQT1dFUl9TVVBQTFlfUFJP UF9USU1FX1RPX0ZVTExfTk9XLAogCVBPV0VSX1NVUFBMWV9QUk9QX1RJTUVfVE9fRlVMTF9BVkcs CiAJUE9XRVJfU1VQUExZX1BST1BfVFlQRSwgLyogdXNlIHBvd2VyX3N1cHBseS50eXBlIGluc3Rl YWQgKi8KKwlQT1dFUl9TVVBQTFlfUFJPUF9VU0JfVFlQRSwKIAlQT1dFUl9TVVBQTFlfUFJPUF9T Q09QRSwKIAlQT1dFUl9TVVBQTFlfUFJPUF9QUkVDSEFSR0VfQ1VSUkVOVCwKIAlQT1dFUl9TVVBQ TFlfUFJPUF9DSEFSR0VfVEVSTV9DVVJSRU5ULApAQCAtMTcwLDYgKzE3MSwxOSBAQCBlbnVtIHBv d2VyX3N1cHBseV90eXBlIHsKIAlQT1dFUl9TVVBQTFlfVFlQRV9BUFBMRV9CUklDS19JRCwJLyog QXBwbGUgQ2hhcmdpbmcgTWV0aG9kICovCiB9OwogCitlbnVtIHBvd2VyX3N1cHBseV91c2JfdHlw ZSB7CisJUE9XRVJfU1VQUExZX1VTQl9UWVBFX1VOS05PV04gPSAwLAorCVBPV0VSX1NVUFBMWV9V U0JfVFlQRV9TRFAsCQkvKiBTdGFuZGFyZCBEb3duc3RyZWFtIFBvcnQgKi8KKwlQT1dFUl9TVVBQ TFlfVVNCX1RZUEVfRENQLAkJLyogRGVkaWNhdGVkIENoYXJnaW5nIFBvcnQgKi8KKwlQT1dFUl9T VVBQTFlfVVNCX1RZUEVfQ0RQLAkJLyogQ2hhcmdpbmcgRG93bnN0cmVhbSBQb3J0ICovCisJUE9X RVJfU1VQUExZX1VTQl9UWVBFX0FDQSwJCS8qIEFjY2Vzc29yeSBDaGFyZ2VyIEFkYXB0ZXJzICov CisJUE9XRVJfU1VQUExZX1VTQl9UWVBFX0MsCQkvKiBUeXBlIEMgUG9ydCAqLworCVBPV0VSX1NV UFBMWV9VU0JfVFlQRV9QRCwJCS8qIFBvd2VyIERlbGl2ZXJ5IFBvcnQgKi8KKwlQT1dFUl9TVVBQ TFlfVVNCX1RZUEVfUERfRFJQLAkJLyogUEQgRHVhbCBSb2xlIFBvcnQgKi8KKwlQT1dFUl9TVVBQ TFlfVVNCX1RZUEVfUERfUFBTLAkJLyogUEQgUHJvZ3JhbW1hYmxlIFBvd2VyIFN1cHBseSAqLwor CVBPV0VSX1NVUFBMWV9VU0JfVFlQRV9BUFBMRV9CUklDS19JRCwJLyogQXBwbGUgQ2hhcmdpbmcg TWV0aG9kICovCit9OworCiBlbnVtIHBvd2VyX3N1cHBseV9ub3RpZmllcl9ldmVudHMgewogCVBT WV9FVkVOVF9QUk9QX0NIQU5HRUQsCiB9OwpAQCAtMTk2LDYgKzIxMCw4IEBAIHN0cnVjdCBwb3dl cl9zdXBwbHlfY29uZmlnIHsKIHN0cnVjdCBwb3dlcl9zdXBwbHlfZGVzYyB7CiAJY29uc3QgY2hh ciAqbmFtZTsKIAllbnVtIHBvd2VyX3N1cHBseV90eXBlIHR5cGU7CisJZW51bSBwb3dlcl9zdXBw bHlfdXNiX3R5cGUgKnVzYl90eXBlczsKKwlzaXplX3QgbnVtX3VzYl90eXBlczsKIAllbnVtIHBv d2VyX3N1cHBseV9wcm9wZXJ0eSAqcHJvcGVydGllczsKIAlzaXplX3QgbnVtX3Byb3BlcnRpZXM7 CiAK From mboxrd@z Thu Jan 1 00:00:00 1970 From: Adam Thomson Subject: [PATCH v8 4/6] power: supply: Add 'usb_type' property and supporting code Date: Mon, 23 Apr 2018 15:10:59 +0100 Message-ID: <36488aeca4c870e24ddbcf8bc9d3064c9973413f.1524490253.git.Adam.Thomson.Opensource@diasemi.com> References: Mime-Version: 1.0 Content-Type: text/plain Return-path: In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org To: Heikki Krogerus , Guenter Roeck , Greg Kroah-Hartman , Sebastian Reichel , Hans de Goede , Jun Li Cc: linux-usb@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, support.opensource@diasemi.com List-Id: linux-pm@vger.kernel.org This commit adds the 'usb_type' property to represent USB supplies which can report a number of different types based on a connection event. Examples of this already exist in drivers whereby the existing 'type' property is updated, based on an event, to represent what was connected (e.g. USB, USB_DCP, USB_ACA, ...). Current implementations however don't show all supported connectable types, so this knowledge has to be exlicitly known for each driver that supports this. The 'usb_type' property is intended to fill this void and show users all possible USB types supported by a driver. The property, when read, shows all available types for the driver, and the one currently chosen is highlighted/bracketed. It is expected that the 'type' property would then just show the top-level type 'USB', and this would be static. Currently the 'usb_type' enum contains all of the USB variant types that exist for the 'type' enum at this time, and in addition has SDP and PPS types. The mirroring is intentional so as to not impact existing usage of the 'type' property. Signed-off-by: Adam Thomson --- Documentation/ABI/testing/sysfs-class-power | 12 ++++++++ drivers/power/supply/power_supply_core.c | 8 ++++- drivers/power/supply/power_supply_sysfs.c | 45 +++++++++++++++++++++++++++++ include/linux/power_supply.h | 16 ++++++++++ 4 files changed, 80 insertions(+), 1 deletion(-) diff --git a/Documentation/ABI/testing/sysfs-class-power b/Documentation/ABI/testing/sysfs-class-power index e046566..5e23e22 100644 --- a/Documentation/ABI/testing/sysfs-class-power +++ b/Documentation/ABI/testing/sysfs-class-power @@ -409,6 +409,18 @@ Description: Access: Read Valid values: Represented in 1/10 Degrees Celsius +What: /sys/class/power_supply//usb_type +Date: March 2018 +Contact: linux-pm@vger.kernel.org +Description: + Reports what type of USB connection is currently active for + the supply, for example it can show if USB-PD capable source + is attached. + + Access: Read-Only + Valid values: "Unknown", "SDP", "DCP", "CDP", "ACA", "C", "PD", + "PD_DRP", "PD_PPS", "BrickID" + What: /sys/class/power_supply//voltage_max Date: January 2008 Contact: linux-pm@vger.kernel.org diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c index a7984af..ecd68c2 100644 --- a/drivers/power/supply/power_supply_core.c +++ b/drivers/power/supply/power_supply_core.c @@ -843,7 +843,7 @@ static void psy_unregister_cooler(struct power_supply *psy) { struct device *dev; struct power_supply *psy; - int rc; + int i, rc; if (!parent) pr_warn("%s: Expected proper parent device for '%s'\n", @@ -852,6 +852,12 @@ static void psy_unregister_cooler(struct power_supply *psy) if (!desc || !desc->name || !desc->properties || !desc->num_properties) return ERR_PTR(-EINVAL); + for (i = 0; i < desc->num_properties; ++i) { + if ((desc->properties[i] == POWER_SUPPLY_PROP_USB_TYPE) && + (!desc->usb_types || !desc->num_usb_types)) + return ERR_PTR(-EINVAL); + } + psy = kzalloc(sizeof(*psy), GFP_KERNEL); if (!psy) return ERR_PTR(-ENOMEM); diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c index 5204f11..1350068 100644 --- a/drivers/power/supply/power_supply_sysfs.c +++ b/drivers/power/supply/power_supply_sysfs.c @@ -46,6 +46,11 @@ "USB_PD", "USB_PD_DRP", "BrickID" }; +static const char * const power_supply_usb_type_text[] = { + "Unknown", "SDP", "DCP", "CDP", "ACA", "C", + "PD", "PD_DRP", "PD_PPS", "BrickID" +}; + static const char * const power_supply_status_text[] = { "Unknown", "Charging", "Discharging", "Not charging", "Full" }; @@ -73,6 +78,41 @@ "Unknown", "System", "Device" }; +static ssize_t power_supply_show_usb_type(struct device *dev, + enum power_supply_usb_type *usb_types, + ssize_t num_usb_types, + union power_supply_propval *value, + char *buf) +{ + enum power_supply_usb_type usb_type; + ssize_t count = 0; + bool match = false; + int i; + + for (i = 0; i < num_usb_types; ++i) { + usb_type = usb_types[i]; + + if (value->intval == usb_type) { + count += sprintf(buf + count, "[%s] ", + power_supply_usb_type_text[usb_type]); + match = true; + } else { + count += sprintf(buf + count, "%s ", + power_supply_usb_type_text[usb_type]); + } + } + + if (!match) { + dev_warn(dev, "driver reporting unsupported connected type\n"); + return -EINVAL; + } + + if (count) + buf[count - 1] = '\n'; + + return count; +} + static ssize_t power_supply_show_property(struct device *dev, struct device_attribute *attr, char *buf) { @@ -115,6 +155,10 @@ static ssize_t power_supply_show_property(struct device *dev, else if (off == POWER_SUPPLY_PROP_TYPE) return sprintf(buf, "%s\n", power_supply_type_text[value.intval]); + else if (off == POWER_SUPPLY_PROP_USB_TYPE) + return power_supply_show_usb_type(dev, psy->desc->usb_types, + psy->desc->num_usb_types, + &value, buf); else if (off == POWER_SUPPLY_PROP_SCOPE) return sprintf(buf, "%s\n", power_supply_scope_text[value.intval]); @@ -241,6 +285,7 @@ static ssize_t power_supply_store_property(struct device *dev, POWER_SUPPLY_ATTR(time_to_full_now), POWER_SUPPLY_ATTR(time_to_full_avg), POWER_SUPPLY_ATTR(type), + POWER_SUPPLY_ATTR(usb_type), POWER_SUPPLY_ATTR(scope), POWER_SUPPLY_ATTR(precharge_current), POWER_SUPPLY_ATTR(charge_term_current), diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h index f0139b4..0c9a572 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h @@ -145,6 +145,7 @@ enum power_supply_property { POWER_SUPPLY_PROP_TIME_TO_FULL_NOW, POWER_SUPPLY_PROP_TIME_TO_FULL_AVG, POWER_SUPPLY_PROP_TYPE, /* use power_supply.type instead */ + POWER_SUPPLY_PROP_USB_TYPE, POWER_SUPPLY_PROP_SCOPE, POWER_SUPPLY_PROP_PRECHARGE_CURRENT, POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT, @@ -170,6 +171,19 @@ enum power_supply_type { POWER_SUPPLY_TYPE_APPLE_BRICK_ID, /* Apple Charging Method */ }; +enum power_supply_usb_type { + POWER_SUPPLY_USB_TYPE_UNKNOWN = 0, + POWER_SUPPLY_USB_TYPE_SDP, /* Standard Downstream Port */ + POWER_SUPPLY_USB_TYPE_DCP, /* Dedicated Charging Port */ + POWER_SUPPLY_USB_TYPE_CDP, /* Charging Downstream Port */ + POWER_SUPPLY_USB_TYPE_ACA, /* Accessory Charger Adapters */ + POWER_SUPPLY_USB_TYPE_C, /* Type C Port */ + POWER_SUPPLY_USB_TYPE_PD, /* Power Delivery Port */ + POWER_SUPPLY_USB_TYPE_PD_DRP, /* PD Dual Role Port */ + POWER_SUPPLY_USB_TYPE_PD_PPS, /* PD Programmable Power Supply */ + POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID, /* Apple Charging Method */ +}; + enum power_supply_notifier_events { PSY_EVENT_PROP_CHANGED, }; @@ -196,6 +210,8 @@ struct power_supply_config { struct power_supply_desc { const char *name; enum power_supply_type type; + enum power_supply_usb_type *usb_types; + size_t num_usb_types; enum power_supply_property *properties; size_t num_properties; -- 1.9.1