From: Sebastian Reichel <sre@kernel.org> To: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>, Guenter Roeck <linux@roeck-us.net>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Hans de Goede <hdegoede@redhat.com>, Yueyao Zhu <yueyao.zhu@gmail.com>, Rui Miguel Silva <rmfrfs@gmail.com>, linux-usb@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, support.opensource@diasemi.com Subject: Re: [PATCH v4 5/7] power: supply: Add 'connected_type' property and supporting code Date: Thu, 8 Feb 2018 22:30:54 +0100 [thread overview] Message-ID: <20180208213054.oqgoktru3lzjiyyn@earth.universe> (raw) In-Reply-To: <3af7db87e0e6bdfa46ef3c1c9053297f711aee5a.1514904983.git.Adam.Thomson.Opensource@diasemi.com> [-- Attachment #1: Type: text/plain, Size: 6352 bytes --] Hi, On Tue, Jan 02, 2018 at 03:50:53PM +0000, Adam Thomson wrote: > This commit adds the 'connected_type' property to represent supplies > which can report a number of different types of supply 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_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 'connected_type' property is intended to fill this void and show > users all possible 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, such as 'USB', and > this would be static. > > Currently the 'conn_type' enum contains all of the USB variant types > that exist for the 'type' enum at this time, and in addition has > the PPS type. In the future this can be extended further for other > types which have multiple connected types supported. The mirroring > is intentional so as to not impact existing usage of the 'type' > property. > > Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> Thanks for the patch. I think, that it's a good idea to provide the subtype in its own property and just set the type property to "USB". I would prefer to name this "usb_type". Otherwise Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk> -- Sebastian > --- > drivers/power/supply/power_supply_sysfs.c | 50 +++++++++++++++++++++++++++++++ > include/linux/power_supply.h | 15 ++++++++++ > 2 files changed, 65 insertions(+) > > diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c > index 5204f11..1b3b202 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_conn_type_text[] = { > + "Unknown", "USB_DCP", "USB_CDP", "USB_ACA", "USB_C", > + "USB_PD", "USB_PD_DRP", "USB_PD_PPS", "BrickID" > +}; > + > static const char * const power_supply_status_text[] = { > "Unknown", "Charging", "Discharging", "Not charging", "Full" > }; > @@ -73,6 +78,46 @@ > "Unknown", "System", "Device" > }; > > +static ssize_t power_supply_show_conn_type(struct device *dev, > + enum power_supply_conn_type *conn_types, > + ssize_t num_conn_types, > + union power_supply_propval *value, > + char *buf) > +{ > + enum power_supply_conn_type conn_type; > + ssize_t count = 0; > + bool match = false; > + int i; > + > + if ((!conn_types) || (num_conn_types <= 0)) { > + dev_warn(dev, "driver has no valid connected types\n"); > + return -ENODATA; > + } > + > + for (i = 0; i < num_conn_types; ++i) { > + conn_type = conn_types[i]; > + > + if (value->intval == conn_type) { > + count += sprintf(buf + count, "[%s] ", > + power_supply_conn_type_text[conn_type]); > + match = true; > + } else { > + count += sprintf(buf + count, "%s ", > + power_supply_conn_type_text[conn_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 +160,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_CONNECTED_TYPE) > + return power_supply_show_conn_type(dev, psy->desc->conn_types, > + psy->desc->num_conn_types, > + &value, buf); > else if (off == POWER_SUPPLY_PROP_SCOPE) > return sprintf(buf, "%s\n", > power_supply_scope_text[value.intval]); > @@ -241,6 +290,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(connected_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 79e90b3..e15a629 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_CONNECTED_TYPE, > POWER_SUPPLY_PROP_SCOPE, > POWER_SUPPLY_PROP_PRECHARGE_CURRENT, > POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT, > @@ -170,6 +171,18 @@ enum power_supply_type { > POWER_SUPPLY_TYPE_APPLE_BRICK_ID, /* Apple Charging Method */ > }; > > +enum power_supply_conn_type { > + POWER_SUPPLY_CONN_TYPE_UNKNOWN = 0, > + POWER_SUPPLY_CONN_TYPE_USB_DCP, /* Dedicated Charging Port */ > + POWER_SUPPLY_CONN_TYPE_USB_CDP, /* Charging Downstream Port */ > + POWER_SUPPLY_CONN_TYPE_USB_ACA, /* Accessory Charger Adapters */ > + POWER_SUPPLY_CONN_TYPE_USB_TYPE_C, /* Type C Port */ > + POWER_SUPPLY_CONN_TYPE_USB_PD, /* Power Delivery Port */ > + POWER_SUPPLY_CONN_TYPE_USB_PD_DRP, /* PD Dual Role Port */ > + POWER_SUPPLY_CONN_TYPE_USB_PD_PPS, /* PD Programmable Power Supply */ > + POWER_SUPPLY_CONN_TYPE_APPLE_BRICK_ID, /* Apple Charging Method */ > +}; > + > enum power_supply_notifier_events { > PSY_EVENT_PROP_CHANGED, > }; > @@ -196,6 +209,8 @@ struct power_supply_config { > struct power_supply_desc { > const char *name; > enum power_supply_type type; > + enum power_supply_conn_type *conn_types; > + size_t num_conn_types; > enum power_supply_property *properties; > size_t num_properties; > > -- > 1.9.1 > [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Sebastian Reichel <sre@kernel.org> To: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>, Guenter Roeck <linux@roeck-us.net>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Hans de Goede <hdegoede@redhat.com>, Yueyao Zhu <yueyao.zhu@gmail.com>, Rui Miguel Silva <rmfrfs@gmail.com>, linux-usb@vger.kernel.org, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, support.opensource@diasemi.com Subject: [v4,5/7] power: supply: Add 'connected_type' property and supporting code Date: Thu, 8 Feb 2018 22:30:54 +0100 [thread overview] Message-ID: <20180208213054.oqgoktru3lzjiyyn@earth.universe> (raw) Hi, On Tue, Jan 02, 2018 at 03:50:53PM +0000, Adam Thomson wrote: > This commit adds the 'connected_type' property to represent supplies > which can report a number of different types of supply 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_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 'connected_type' property is intended to fill this void and show > users all possible 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, such as 'USB', and > this would be static. > > Currently the 'conn_type' enum contains all of the USB variant types > that exist for the 'type' enum at this time, and in addition has > the PPS type. In the future this can be extended further for other > types which have multiple connected types supported. The mirroring > is intentional so as to not impact existing usage of the 'type' > property. > > Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> Thanks for the patch. I think, that it's a good idea to provide the subtype in its own property and just set the type property to "USB". I would prefer to name this "usb_type". Otherwise Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk> -- Sebastian > --- > drivers/power/supply/power_supply_sysfs.c | 50 +++++++++++++++++++++++++++++++ > include/linux/power_supply.h | 15 ++++++++++ > 2 files changed, 65 insertions(+) > > diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c > index 5204f11..1b3b202 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_conn_type_text[] = { > + "Unknown", "USB_DCP", "USB_CDP", "USB_ACA", "USB_C", > + "USB_PD", "USB_PD_DRP", "USB_PD_PPS", "BrickID" > +}; > + > static const char * const power_supply_status_text[] = { > "Unknown", "Charging", "Discharging", "Not charging", "Full" > }; > @@ -73,6 +78,46 @@ > "Unknown", "System", "Device" > }; > > +static ssize_t power_supply_show_conn_type(struct device *dev, > + enum power_supply_conn_type *conn_types, > + ssize_t num_conn_types, > + union power_supply_propval *value, > + char *buf) > +{ > + enum power_supply_conn_type conn_type; > + ssize_t count = 0; > + bool match = false; > + int i; > + > + if ((!conn_types) || (num_conn_types <= 0)) { > + dev_warn(dev, "driver has no valid connected types\n"); > + return -ENODATA; > + } > + > + for (i = 0; i < num_conn_types; ++i) { > + conn_type = conn_types[i]; > + > + if (value->intval == conn_type) { > + count += sprintf(buf + count, "[%s] ", > + power_supply_conn_type_text[conn_type]); > + match = true; > + } else { > + count += sprintf(buf + count, "%s ", > + power_supply_conn_type_text[conn_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 +160,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_CONNECTED_TYPE) > + return power_supply_show_conn_type(dev, psy->desc->conn_types, > + psy->desc->num_conn_types, > + &value, buf); > else if (off == POWER_SUPPLY_PROP_SCOPE) > return sprintf(buf, "%s\n", > power_supply_scope_text[value.intval]); > @@ -241,6 +290,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(connected_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 79e90b3..e15a629 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_CONNECTED_TYPE, > POWER_SUPPLY_PROP_SCOPE, > POWER_SUPPLY_PROP_PRECHARGE_CURRENT, > POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT, > @@ -170,6 +171,18 @@ enum power_supply_type { > POWER_SUPPLY_TYPE_APPLE_BRICK_ID, /* Apple Charging Method */ > }; > > +enum power_supply_conn_type { > + POWER_SUPPLY_CONN_TYPE_UNKNOWN = 0, > + POWER_SUPPLY_CONN_TYPE_USB_DCP, /* Dedicated Charging Port */ > + POWER_SUPPLY_CONN_TYPE_USB_CDP, /* Charging Downstream Port */ > + POWER_SUPPLY_CONN_TYPE_USB_ACA, /* Accessory Charger Adapters */ > + POWER_SUPPLY_CONN_TYPE_USB_TYPE_C, /* Type C Port */ > + POWER_SUPPLY_CONN_TYPE_USB_PD, /* Power Delivery Port */ > + POWER_SUPPLY_CONN_TYPE_USB_PD_DRP, /* PD Dual Role Port */ > + POWER_SUPPLY_CONN_TYPE_USB_PD_PPS, /* PD Programmable Power Supply */ > + POWER_SUPPLY_CONN_TYPE_APPLE_BRICK_ID, /* Apple Charging Method */ > +}; > + > enum power_supply_notifier_events { > PSY_EVENT_PROP_CHANGED, > }; > @@ -196,6 +209,8 @@ struct power_supply_config { > struct power_supply_desc { > const char *name; > enum power_supply_type type; > + enum power_supply_conn_type *conn_types; > + size_t num_conn_types; > enum power_supply_property *properties; > size_t num_properties; > > -- > 1.9.1 >
next prev parent reply other threads:[~2018-02-08 21:30 UTC|newest] Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-01-02 15:50 [PATCH v4 0/7] typec: tcpm: Add sink side support for PPS Adam Thomson 2018-01-02 15:50 ` Adam Thomson 2018-01-02 15:50 ` [PATCH v4 1/7] typec: tcpm: Add PD Rev 3.0 definitions to PD header Adam Thomson 2018-01-02 15:50 ` Adam Thomson 2018-01-02 15:50 ` [v4,1/7] " Opensource [Adam Thomson] 2018-01-30 12:21 ` [PATCH v4 1/7] " Heikki Krogerus 2018-01-30 12:21 ` [v4,1/7] " Heikki Krogerus 2018-02-06 14:14 ` [PATCH v4 1/7] " Adam Thomson 2018-02-06 14:14 ` [v4,1/7] " Opensource [Adam Thomson] 2018-01-02 15:50 ` [PATCH v4 2/7] typec: tcpm: Add ADO header for Alert message handling Adam Thomson 2018-01-02 15:50 ` Adam Thomson 2018-01-02 15:50 ` [v4,2/7] " Opensource [Adam Thomson] 2018-01-30 12:22 ` [PATCH v4 2/7] " Heikki Krogerus 2018-01-30 12:22 ` [v4,2/7] " Heikki Krogerus 2018-01-02 15:50 ` [PATCH v4 3/7] typec: tcpm: Add SDB header for Status " Adam Thomson 2018-01-02 15:50 ` Adam Thomson 2018-01-02 15:50 ` [v4,3/7] " Opensource [Adam Thomson] 2018-01-30 12:22 ` [PATCH v4 3/7] " Heikki Krogerus 2018-01-30 12:22 ` Heikki Krogerus 2018-01-30 12:22 ` [v4,3/7] " Heikki Krogerus 2018-01-02 15:50 ` [PATCH v4 4/7] typec: tcpm: Add core support for sink side PPS Adam Thomson 2018-01-02 15:50 ` Adam Thomson 2018-01-02 15:50 ` [v4,4/7] " Opensource [Adam Thomson] 2018-01-30 12:46 ` [PATCH v4 4/7] " Heikki Krogerus 2018-01-30 12:46 ` [v4,4/7] " Heikki Krogerus 2018-02-06 14:33 ` [PATCH v4 4/7] " Adam Thomson 2018-02-06 14:33 ` [v4,4/7] " Opensource [Adam Thomson] 2018-02-06 14:53 ` [PATCH v4 4/7] " Heikki Krogerus 2018-02-06 14:53 ` [v4,4/7] " Heikki Krogerus 2018-01-02 15:50 ` [PATCH v4 5/7] power: supply: Add 'connected_type' property and supporting code Adam Thomson 2018-01-02 15:50 ` Adam Thomson 2018-01-02 15:50 ` [v4,5/7] " Opensource [Adam Thomson] 2018-01-30 12:54 ` [PATCH v4 5/7] " Heikki Krogerus 2018-01-30 12:54 ` [v4,5/7] " Heikki Krogerus 2018-02-08 21:30 ` Sebastian Reichel [this message] 2018-02-08 21:30 ` Sebastian Reichel 2018-02-09 11:28 ` [PATCH v4 5/7] " Adam Thomson 2018-02-09 11:28 ` [v4,5/7] " Opensource [Adam Thomson] 2018-02-09 15:01 ` [PATCH v4 5/7] " Sebastian Reichel 2018-02-09 15:01 ` [v4,5/7] " Sebastian Reichel 2018-02-09 15:43 ` [PATCH v4 5/7] " Adam Thomson 2018-02-09 15:43 ` [v4,5/7] " Opensource [Adam Thomson] 2018-01-02 15:50 ` [PATCH v4 6/7] typec: tcpm: Represent source supply through power_supply class Adam Thomson 2018-01-02 15:50 ` Adam Thomson 2018-01-02 15:50 ` [v4,6/7] " Opensource [Adam Thomson] 2018-01-30 13:11 ` [PATCH v4 6/7] " Heikki Krogerus 2018-01-30 13:11 ` [v4,6/7] " Heikki Krogerus 2018-02-06 15:51 ` [PATCH v4 6/7] " Adam Thomson 2018-02-06 15:51 ` [v4,6/7] " Opensource [Adam Thomson] 2018-02-08 10:45 ` [PATCH v4 6/7] " Heikki Krogerus 2018-02-08 10:45 ` [v4,6/7] " Heikki Krogerus 2018-02-09 16:06 ` [PATCH v4 6/7] " Adam Thomson 2018-02-09 16:06 ` [v4,6/7] " Opensource [Adam Thomson] 2018-01-02 15:50 ` [PATCH v4 7/7] typec: tcpm: Add support for sink PPS related messages Adam Thomson 2018-01-02 15:50 ` Adam Thomson 2018-01-02 15:50 ` [v4,7/7] " Opensource [Adam Thomson] 2018-01-30 13:18 ` [PATCH v4 7/7] " Heikki Krogerus 2018-01-30 13:18 ` [v4,7/7] " Heikki Krogerus 2018-01-22 14:31 ` [PATCH v4 0/7] typec: tcpm: Add sink side support for PPS Greg Kroah-Hartman 2018-01-22 14:31 ` Greg Kroah-Hartman 2018-01-22 15:57 ` Guenter Roeck 2018-01-30 13:25 ` Heikki Krogerus 2018-01-30 14:27 ` Guenter Roeck 2018-02-05 10:30 ` Adam Thomson 2018-03-09 17:33 ` Greg Kroah-Hartman 2018-03-12 8:32 ` Adam Thomson 2018-03-19 10:39 ` Adam Thomson
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=20180208213054.oqgoktru3lzjiyyn@earth.universe \ --to=sre@kernel.org \ --cc=Adam.Thomson.Opensource@diasemi.com \ --cc=gregkh@linuxfoundation.org \ --cc=hdegoede@redhat.com \ --cc=heikki.krogerus@linux.intel.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-pm@vger.kernel.org \ --cc=linux-usb@vger.kernel.org \ --cc=linux@roeck-us.net \ --cc=rmfrfs@gmail.com \ --cc=support.opensource@diasemi.com \ --cc=yueyao.zhu@gmail.com \ /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: linkBe 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.