From patchwork Fri Aug 10 13:13:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabien Parent X-Patchwork-Id: 10562681 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 096CB1515 for ; Fri, 10 Aug 2018 13:17:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EDD252B9B7 for ; Fri, 10 Aug 2018 13:17:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E1E762B9E1; Fri, 10 Aug 2018 13:17:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 831412B9B7 for ; Fri, 10 Aug 2018 13:17:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728306AbeHJPrM (ORCPT ); Fri, 10 Aug 2018 11:47:12 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:52510 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727771AbeHJPrM (ORCPT ); Fri, 10 Aug 2018 11:47:12 -0400 Received: by mail-wm0-f68.google.com with SMTP id o11-v6so1853270wmh.2 for ; Fri, 10 Aug 2018 06:17:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=EKERvPyccN5L6jSux9V7ILEhqtIjCsSZuoPK0qXWjtQ=; b=FlWt0QWQkvC2jCEGddZZXlWvOtTIqPrS7CDfGSQlO2pWIwqxoGMx2LcsyV+45S40ng 61Ev0E6Vwl+a3BykxHy65WOTDZMPveZ35Xts0aRCTZyRt15pY5uIbg8B2RsqYXXJ1I2W wz3YkhyIwVjODK5aBCF/y4PPVx5trIAyerNtr1CFducwBVJjpRzCoIx8pxjz7AKqEo+H 30AaZMivqxGiwGhUlfm7dVm3Koop4+Hgahh8s5DmU1CqbMtnazRM1yQXg6hs+geEagi6 sA/ImXOtBXoOiWVvJ/l3AQGAJH46Skjm6OaFSd2zUDZZ6lMeWGwXvSnCZ8LZzfaYERI8 gSCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=EKERvPyccN5L6jSux9V7ILEhqtIjCsSZuoPK0qXWjtQ=; b=JHAJLbsGr3mTycndbTp/UFJBmY98aDpK4regJP96XkTz6Zl4T/wNupSFLbBG8KZtub egbDamHXBZh7jJkLxwUkBcJHg38T/gX1aOQ/Pnd7Ov3DBGMZ6Mff7blcY6IxZrf68o1x 3EUMgR41+sEHX9KP8zeb3z6NfDnStrZno+wPyUKiDZSilL2Ym4P7Jis+cQOtQbHB3w9V wxbUvPINXKVsRMIjHK3IamSopGJ3MUSQqxIpVCA6wntM+Se5kxxJ2hG4YG6av3ziCbvO lcLjfmSlJ/ND/OobTqrnyUKwmi3Rh2ItEAYueoO5H1aHDhJcfwXlbZ3Iu1zMsM0pBZ4h wepQ== X-Gm-Message-State: AOUpUlGeT1J+lPFHavufx/fPnrn1kr3IWOif1dx8ro04e94G0fPS30cj jTgD5UFLeJ6pbgR5nT8UvcjrCA== X-Google-Smtp-Source: AA+uWPwZMBbBYV9iQpzCSTR+viV+cpv+hcJT13Eunir9doqtLsTkcGhw8Dznxne+PMdiBDMcIKnGWA== X-Received: by 2002:a1c:b213:: with SMTP id b19-v6mr1443257wmf.141.1533907037844; Fri, 10 Aug 2018 06:17:17 -0700 (PDT) Received: from radium.baylibre.local (AStLambert-681-1-8-155.w90-86.abo.wanadoo.fr. [90.86.13.155]) by smtp.gmail.com with ESMTPSA id i205-v6sm2069523wmf.30.2018.08.10.06.17.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 10 Aug 2018 06:17:17 -0700 (PDT) From: Fabien Parent To: Sebastian Reichel , Lee Jones Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, gpain@baylibre.com, Fabien Parent Subject: [PATCH v2 1/3] mfd: cros: add charger port count command definition Date: Fri, 10 Aug 2018 15:13:47 +0200 Message-Id: <20180810131349.3883-2-fparent@baylibre.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180810131349.3883-1-fparent@baylibre.com> References: <20180810131349.3883-1-fparent@baylibre.com> Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP A new more command has been added to the ChromeOS embedded controller that allows to get the number of charger port count. Unlike EC_CMD_USB_PD_PORTS, this new command also includes the dedicated port if present. This command will be used to expose the dedicated charger port in the ChromeOS charger driver. Signed-off-by: Fabien Parent Acked-for-MFD-by: Lee Jones Reviewed-by: Enric Balletbo i Serra --- V1 -> V2: * No change --- include/linux/mfd/cros_ec_commands.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/include/linux/mfd/cros_ec_commands.h b/include/linux/mfd/cros_ec_commands.h index 0d926492ac3a..e3187f8bdb7e 100644 --- a/include/linux/mfd/cros_ec_commands.h +++ b/include/linux/mfd/cros_ec_commands.h @@ -3005,6 +3005,16 @@ struct ec_params_usb_pd_info_request { uint8_t port; } __packed; +/* + * This command will return the number of USB PD charge port + the number + * of dedicated port present. + * EC_CMD_USB_PD_PORTS does NOT include the dedicated ports + */ +#define EC_CMD_CHARGE_PORT_COUNT 0x0105 +struct ec_response_charge_port_count { + uint8_t port_count; +} __packed; + /* Read USB-PD Device discovery info */ #define EC_CMD_USB_PD_DISCOVERY 0x0113 struct ec_params_usb_pd_discovery_entry { From patchwork Fri Aug 10 13:13:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabien Parent X-Patchwork-Id: 10562689 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BE3C613B4 for ; Fri, 10 Aug 2018 13:17:32 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AB2202B9B7 for ; Fri, 10 Aug 2018 13:17:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9F8CF2B9E1; Fri, 10 Aug 2018 13:17:32 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 046A72B9B7 for ; Fri, 10 Aug 2018 13:17:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727704AbeHJPrW (ORCPT ); Fri, 10 Aug 2018 11:47:22 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:38231 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727534AbeHJPrN (ORCPT ); Fri, 10 Aug 2018 11:47:13 -0400 Received: by mail-wm0-f67.google.com with SMTP id t25-v6so1870938wmi.3 for ; Fri, 10 Aug 2018 06:17:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=g7DsJGBEEB/Beb5kYu8dgD1IWPiGck1texLkmOUNaYg=; b=Gcf8YA17QiBVYn8JFkfBZA5Zz5qxF+iI8sAiJ+nNkTYJJrXk3+9eSMGSztPrz+zMCt ux8nixnmSuoQQM7qDQWaA0woEsCXIXCPovctz6+fFuVFBNzO8iNWhUY96U/XhJdyNk7v XgZQRElZ5cPMIIBsNL5pQPbRRxhTwD7W8FP/76sknVnVSNN0D/V0IvHGGwX/RHLFi6rI SRjcbgeIthY/zNYrK1tu+YZ4Vc9Ihxru782vDH0U923pPX8haCJqzBrw17rYHmoB95Vg xiIPd4+JGEtDD+HtsTdJPE3/ikteO2eGdWqLY/q1kKoi2Ynti7iXtBIAVUrcpGp638m5 lNDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=g7DsJGBEEB/Beb5kYu8dgD1IWPiGck1texLkmOUNaYg=; b=mQd7LNt5G7IFRbnKntfZ34vpWlN7TDANpLSvd2VXx/JHoiP70g8HRI300LJritoixJ uMqHCp3JLOPoGEAgOaJXLeAIQUZjgLxdjAOKwCl+AHAftCkp8AB23MreeGltTgN6O08w 4Sy6kE/+lVha9O5n4re+CRnsKW1QYSmt2xh0k8cOICDQpTRVwiai1dCyJJp2ruQJH/4z 2OJCuOJK4vCQkRrjqDtOMoF08aOUfogY0NMx0VWlRysjjs3OaKlBqpr1P7g4zOfw4Qf/ ANmojnmZoQKtQK8/xapNdF5JMbgOXYTQr7LF356iUviVxpocLzJ8rPkwyOjX9j483LvK W5fw== X-Gm-Message-State: AOUpUlGR9CdhCQT20zNMOYSWx41Mn975yvxK3A3z3LaeRCskJQwNLIRn 0S36cG41UN5DxoDfVw/yifxFxA== X-Google-Smtp-Source: AA+uWPzxSBI1QJ/hl/W7x8xQJ8eyruFgGcJ0bJSX9oi0yWsjSXVwaWfb0EquiFdMM6zo8yIuFaQyGw== X-Received: by 2002:a1c:888e:: with SMTP id k136-v6mr1572065wmd.6.1533907038940; Fri, 10 Aug 2018 06:17:18 -0700 (PDT) Received: from radium.baylibre.local (AStLambert-681-1-8-155.w90-86.abo.wanadoo.fr. [90.86.13.155]) by smtp.gmail.com with ESMTPSA id i205-v6sm2069523wmf.30.2018.08.10.06.17.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 10 Aug 2018 06:17:18 -0700 (PDT) From: Fabien Parent To: Sebastian Reichel , Lee Jones Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, gpain@baylibre.com, Fabien Parent Subject: [PATCH v2 2/3] power: supply: cros: add support for dedicated port Date: Fri, 10 Aug 2018 15:13:48 +0200 Message-Id: <20180810131349.3883-3-fparent@baylibre.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180810131349.3883-1-fparent@baylibre.com> References: <20180810131349.3883-1-fparent@baylibre.com> Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP ChromeOS devices can have one optional dedicated port. The Dedicated port is unique and similar to the USB PD ports except that it doesn't support as many properties. The presence of a dedicated port is determined from whether the EC's charger port count is equal to 'number of USB PD port' + 1. The dedicated port ID is always the last valid port ID. This commit keeps compatibility with Embedded Controllers that do not support the new EC_CMD_CHARGE_PORT_COUNT command by setting the number of charger port to be equal to the number of USB PD port when this command fails. Signed-off-by: Fabien Parent --- V1 -> V2: * Rebased --- drivers/power/supply/cros_usbpd-charger.c | 115 +++++++++++++++++++--- 1 file changed, 101 insertions(+), 14 deletions(-) diff --git a/drivers/power/supply/cros_usbpd-charger.c b/drivers/power/supply/cros_usbpd-charger.c index 688a16bacfbb..fe1502715e46 100644 --- a/drivers/power/supply/cros_usbpd-charger.c +++ b/drivers/power/supply/cros_usbpd-charger.c @@ -12,8 +12,12 @@ #include #include -#define CHARGER_DIR_NAME "CROS_USBPD_CHARGER%d" -#define CHARGER_DIR_NAME_LENGTH sizeof(CHARGER_DIR_NAME) +#define CHARGER_USBPD_DIR_NAME "CROS_USBPD_CHARGER%d" +#define CHARGER_DEDICATED_DIR_NAME "CROS_DEDICATED_CHARGER" +#define CHARGER_DIR_NAME_LENGTH (sizeof(CHARGER_USBPD_DIR_NAME) >= \ + sizeof(CHARGER_DEDICATED_DIR_NAME) ? \ + sizeof(CHARGER_USBPD_DIR_NAME) : \ + sizeof(CHARGER_DEDICATED_DIR_NAME)) #define CHARGER_CACHE_UPDATE_DELAY msecs_to_jiffies(500) #define CHARGER_MANUFACTURER_MODEL_LENGTH 32 @@ -42,6 +46,7 @@ struct charger_data { struct cros_ec_dev *ec_dev; struct cros_ec_device *ec_device; int num_charger_ports; + int num_usbpd_ports; int num_registered_psy; struct port_data *ports[EC_USB_PD_MAX_PORTS]; struct notifier_block notifier; @@ -58,6 +63,12 @@ static enum power_supply_property cros_usbpd_charger_props[] = { POWER_SUPPLY_PROP_USB_TYPE }; +static enum power_supply_property cros_usbpd_dedicated_charger_props[] = { + POWER_SUPPLY_PROP_ONLINE, + POWER_SUPPLY_PROP_STATUS, + POWER_SUPPLY_PROP_VOLTAGE_NOW, +}; + static enum power_supply_usb_type cros_usbpd_charger_usb_types[] = { POWER_SUPPLY_USB_TYPE_UNKNOWN, POWER_SUPPLY_USB_TYPE_SDP, @@ -69,6 +80,11 @@ static enum power_supply_usb_type cros_usbpd_charger_usb_types[] = { POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID }; +static bool cros_usbpd_charger_port_is_dedicated(struct port_data *port) +{ + return port->port_number >= port->charger->num_usbpd_ports; +} + static int cros_usbpd_charger_ec_command(struct charger_data *charger, unsigned int version, unsigned int command, @@ -102,6 +118,23 @@ static int cros_usbpd_charger_ec_command(struct charger_data *charger, } static int cros_usbpd_charger_get_num_ports(struct charger_data *charger) +{ + struct ec_response_charge_port_count resp; + int ret; + + ret = cros_usbpd_charger_ec_command(charger, 0, + EC_CMD_CHARGE_PORT_COUNT, + NULL, 0, &resp, sizeof(resp)); + if (ret < 0) { + dev_err(charger->dev, + "Unable to get the number of ports (err:0x%x)\n", ret); + return ret; + } + + return resp.port_count; +} + +static int cros_usbpd_charger_get_usbpd_num_ports(struct charger_data *charger) { struct ec_response_usb_pd_ports resp; int ret; @@ -246,7 +279,10 @@ static int cros_usbpd_charger_get_power_info(struct port_data *port) port->psy_usb_type = POWER_SUPPLY_USB_TYPE_SDP; } - port->psy_desc.type = POWER_SUPPLY_TYPE_USB; + if (cros_usbpd_charger_port_is_dedicated(port)) + port->psy_desc.type = POWER_SUPPLY_TYPE_MAINS; + else + port->psy_desc.type = POWER_SUPPLY_TYPE_USB; dev_dbg(dev, "Port %d: type=%d vmax=%d vnow=%d cmax=%d clim=%d pmax=%d\n", @@ -281,7 +317,8 @@ static int cros_usbpd_charger_get_port_status(struct port_data *port, if (ret < 0) return ret; - ret = cros_usbpd_charger_get_discovery_info(port); + if (!cros_usbpd_charger_port_is_dedicated(port)) + ret = cros_usbpd_charger_get_discovery_info(port); port->last_update = jiffies; return ret; @@ -426,17 +463,56 @@ static int cros_usbpd_charger_probe(struct platform_device *pd) platform_set_drvdata(pd, charger); + /* + * We need to know the number of USB PD ports in order to know whether + * there is a dedicated port. The dedicated port will always be + * after the USB PD ports, and there should be only one. + */ + charger->num_usbpd_ports = + cros_usbpd_charger_get_usbpd_num_ports(charger); + if (charger->num_usbpd_ports <= 0) { + /* + * This can happen on a system that doesn't support USB PD. + * Log a message, but no need to warn. + */ + dev_info(dev, "No USB PD charging ports found\n"); + } + charger->num_charger_ports = cros_usbpd_charger_get_num_ports(charger); - if (charger->num_charger_ports <= 0) { + if (charger->num_charger_ports < 0) { /* * This can happen on a system that doesn't support USB PD. * Log a message, but no need to warn. + * Older ECs do not support the above command, in that case + * let's set up the number of charger ports equal to the number + * of USB PD ports + */ + dev_info(dev, "Could not get charger port count\n"); + charger->num_charger_ports = charger->num_usbpd_ports; + } + + if (charger->num_charger_ports <= 0) { + /* + * This can happen on a system that doesn't support USB PD and + * doesn't have a dedicated port. + * Log a message, but no need to warn. */ dev_info(dev, "No charging ports found\n"); ret = -ENODEV; goto fail_nowarn; } + /* + * Sanity checks on the number of ports: + * there should be at most 1 dedicated port + */ + if (charger->num_charger_ports < charger->num_usbpd_ports || + charger->num_charger_ports > (charger->num_usbpd_ports + 1)) { + dev_err(dev, "Unexpected number of charge port count\n"); + ret = -EPROTO; + goto fail_nowarn; + } + for (i = 0; i < charger->num_charger_ports; i++) { struct power_supply_config psy_cfg = {}; @@ -448,22 +524,33 @@ static int cros_usbpd_charger_probe(struct platform_device *pd) port->charger = charger; port->port_number = i; - sprintf(port->name, CHARGER_DIR_NAME, i); psy_desc = &port->psy_desc; - psy_desc->name = port->name; - psy_desc->type = POWER_SUPPLY_TYPE_USB; psy_desc->get_property = cros_usbpd_charger_get_prop; psy_desc->external_power_changed = cros_usbpd_charger_power_changed; - psy_desc->properties = cros_usbpd_charger_props; - psy_desc->num_properties = - ARRAY_SIZE(cros_usbpd_charger_props); - psy_desc->usb_types = cros_usbpd_charger_usb_types; - psy_desc->num_usb_types = - ARRAY_SIZE(cros_usbpd_charger_usb_types); psy_cfg.drv_data = port; + if (cros_usbpd_charger_port_is_dedicated(port)) { + sprintf(port->name, CHARGER_DEDICATED_DIR_NAME); + psy_desc->type = POWER_SUPPLY_TYPE_MAINS; + psy_desc->properties = + cros_usbpd_dedicated_charger_props; + psy_desc->num_properties = + ARRAY_SIZE(cros_usbpd_dedicated_charger_props); + } else { + sprintf(port->name, CHARGER_USBPD_DIR_NAME, i); + psy_desc->type = POWER_SUPPLY_TYPE_USB; + psy_desc->properties = cros_usbpd_charger_props; + psy_desc->num_properties = + ARRAY_SIZE(cros_usbpd_charger_props); + psy_desc->usb_types = cros_usbpd_charger_usb_types; + psy_desc->num_usb_types = + ARRAY_SIZE(cros_usbpd_charger_usb_types); + } + + psy_desc->name = port->name; + psy = devm_power_supply_register_no_ws(dev, psy_desc, &psy_cfg); if (IS_ERR(psy)) { From patchwork Fri Aug 10 13:13:49 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabien Parent X-Patchwork-Id: 10562683 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 75DD61515 for ; Fri, 10 Aug 2018 13:17:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 671962B9B7 for ; Fri, 10 Aug 2018 13:17:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5AE6E2B9E1; Fri, 10 Aug 2018 13:17:23 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EF5E22B9B7 for ; Fri, 10 Aug 2018 13:17:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728335AbeHJPrO (ORCPT ); Fri, 10 Aug 2018 11:47:14 -0400 Received: from mail-wm0-f65.google.com ([74.125.82.65]:38233 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727704AbeHJPrN (ORCPT ); Fri, 10 Aug 2018 11:47:13 -0400 Received: by mail-wm0-f65.google.com with SMTP id t25-v6so1871005wmi.3 for ; Fri, 10 Aug 2018 06:17:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ODfbYiBimtCudMwySoSntsM6ZvN5scsZHFcuMUJGLzU=; b=UnNvFeiL+T3lFcA9NnkL9jmAEtCyDqz2HJoasgZkV0RRkpVclTt32PN72z4CmGWbST ZAgDdGhTjt+Iss6nEirsdRUuQlW+MOf22ZK8WVvDIhZY7yblqhUOwGoZMQsie+VkwRJv Ekq0QB9MgIV1dV82crwcWrZgTl2iN/wlP02ryrWULnLDPqdb6ECIhGEioHIiHMs4aN3X HTHg/jgdIe2Lbd5pbtceE/9JaxkENo6vElreHYlrxXLGK4OZR+gMWTJKDfhzuNdbXZi7 O1lMyoDVg6mDDt0Oocty2abubf+oof+ST/hm7nreXDCfz3dHa0FgJlvTFvvc7FKkZQQP TJgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ODfbYiBimtCudMwySoSntsM6ZvN5scsZHFcuMUJGLzU=; b=JEBUG0QOtg7R8F3/ZnlrA9M4DJWi5F+jCsYYOiGAKaE1m8FVTM9xUMGls9XknYiYCh p/FKdq7GQY0Z4xHv9iBDKk+vF0fXW5wKNBY6oj8GTSXnEOndSbpnQELfJ2V+DD2afRFI mRBi2pOc8+ndEWNEnz5YdaVRTPbtUG7g0Fmzu46wnNn85PeTPaRKCjffS/01L1GZSfz6 A8dvRUJcTi9vCbpt40MoBThvd4eJYBcYnEOzoMtw6n9es6UyhE0LelNpq73/2J/HnCfx 6TjgAABJVBux21MDg2pOr0yjlgasCBhP0caTnr3tVScqaeLz3RiqD+v6KPL8C6dg9tlr CXmA== X-Gm-Message-State: AOUpUlFdF1k9inqgKiAoqJiBYG2rOsUH7d5PFJsaEqGqoQiNiB0n73lL No2J2GpmPKQV8KPSQ7ouDVE8jg== X-Google-Smtp-Source: AA+uWPzn68Y3B8xyBWg+dE6ICZ/2z3Lb+T9lBhm69iaB6xT5hMPftIMPBK0GbWG+VTcFfbNnMUUzgw== X-Received: by 2002:a1c:ea9b:: with SMTP id g27-v6mr1434389wmi.152.1533907040084; Fri, 10 Aug 2018 06:17:20 -0700 (PDT) Received: from radium.baylibre.local (AStLambert-681-1-8-155.w90-86.abo.wanadoo.fr. [90.86.13.155]) by smtp.gmail.com with ESMTPSA id i205-v6sm2069523wmf.30.2018.08.10.06.17.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 10 Aug 2018 06:17:19 -0700 (PDT) From: Fabien Parent To: Sebastian Reichel , Lee Jones Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, gpain@baylibre.com, Fabien Parent Subject: [PATCH v2 3/3] power: supply: cros: add property to detect connected ports Date: Fri, 10 Aug 2018 15:13:49 +0200 Message-Id: <20180810131349.3883-4-fparent@baylibre.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180810131349.3883-1-fparent@baylibre.com> References: <20180810131349.3883-1-fparent@baylibre.com> Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP When a port is connected but acting as a source, its 'online' and 'status' properties are identical to a port that is not connected. This makes it tedious for userspace to know for sure whether a port is connected or not. This commit adds a new property 'present' to reflect whether a port is connected or not. Signed-off-by: Fabien Parent --- V1 -> V2: * No change --- drivers/power/supply/cros_usbpd-charger.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/power/supply/cros_usbpd-charger.c b/drivers/power/supply/cros_usbpd-charger.c index fe1502715e46..6307424f36ec 100644 --- a/drivers/power/supply/cros_usbpd-charger.c +++ b/drivers/power/supply/cros_usbpd-charger.c @@ -32,6 +32,7 @@ struct port_data { struct power_supply_desc psy_desc; int psy_usb_type; int psy_online; + int psy_present; int psy_status; int psy_current_max; int psy_voltage_max_design; @@ -54,6 +55,7 @@ struct charger_data { static enum power_supply_property cros_usbpd_charger_props[] = { POWER_SUPPLY_PROP_ONLINE, + POWER_SUPPLY_PROP_PRESENT, POWER_SUPPLY_PROP_STATUS, POWER_SUPPLY_PROP_CURRENT_MAX, POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, @@ -65,6 +67,7 @@ static enum power_supply_property cros_usbpd_charger_props[] = { static enum power_supply_property cros_usbpd_dedicated_charger_props[] = { POWER_SUPPLY_PROP_ONLINE, + POWER_SUPPLY_PROP_PRESENT, POWER_SUPPLY_PROP_STATUS, POWER_SUPPLY_PROP_VOLTAGE_NOW, }; @@ -205,18 +208,22 @@ static int cros_usbpd_charger_get_power_info(struct port_data *port) case USB_PD_PORT_POWER_DISCONNECTED: port->psy_status = POWER_SUPPLY_STATUS_NOT_CHARGING; port->psy_online = 0; + port->psy_present = 0; break; case USB_PD_PORT_POWER_SOURCE: port->psy_status = POWER_SUPPLY_STATUS_NOT_CHARGING; port->psy_online = 0; + port->psy_present = 1; break; case USB_PD_PORT_POWER_SINK: port->psy_status = POWER_SUPPLY_STATUS_CHARGING; port->psy_online = 1; + port->psy_present = 1; break; case USB_PD_PORT_POWER_SINK_NOT_CHARGING: port->psy_status = POWER_SUPPLY_STATUS_NOT_CHARGING; port->psy_online = 1; + port->psy_present = 1; break; default: dev_err(dev, "Unknown role %d\n", resp.role); @@ -363,6 +370,7 @@ static int cros_usbpd_charger_get_prop(struct power_supply *psy, if (ec_device->mkbp_event_supported || port->psy_online) break; /* fall through */ + case POWER_SUPPLY_PROP_PRESENT: case POWER_SUPPLY_PROP_CURRENT_MAX: case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: case POWER_SUPPLY_PROP_VOLTAGE_NOW: @@ -381,6 +389,9 @@ static int cros_usbpd_charger_get_prop(struct power_supply *psy, case POWER_SUPPLY_PROP_ONLINE: val->intval = port->psy_online; break; + case POWER_SUPPLY_PROP_PRESENT: + val->intval = port->psy_present; + break; case POWER_SUPPLY_PROP_STATUS: val->intval = port->psy_status; break;