Re: [PATCH v2] usb: pd: Exposing the Peak Current value of Fixed Supplies to user space

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Sep 28, 2023 at 01:59:44PM +0300, Heikki Krogerus wrote:
> Exposing the value of the field as is.
> 
> The Peak Current value has to be interpreted as described
> in Table 6-10 (Fixed Power Source Peak Current Capability)
> of the USB Power Delivery Specification, but that
> interpretation will be done in user space, not in kernel.
> 
> Suggested-by: Douglas Gilbert <dgilbert@xxxxxxxxxxxx>
> Signed-off-by: Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>

Reviewed-by: Guenter Roeck <linux@xxxxxxxxxxxx>

> ---
> v2: Include ABI documentation.
> 
> ---
>  .../testing/sysfs-class-usb_power_delivery    | 31 +++++++++++++++++++
>  drivers/usb/typec/pd.c                        | 10 +++---
>  include/linux/usb/pd.h                        |  1 +
>  3 files changed, 36 insertions(+), 6 deletions(-)
> 
> diff --git a/Documentation/ABI/testing/sysfs-class-usb_power_delivery b/Documentation/ABI/testing/sysfs-class-usb_power_delivery
> index 1bf9d1d7902c..4b0708af4a41 100644
> --- a/Documentation/ABI/testing/sysfs-class-usb_power_delivery
> +++ b/Documentation/ABI/testing/sysfs-class-usb_power_delivery
> @@ -124,6 +124,37 @@ Contact:	Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>
>  Description:
>  		The voltage the supply supports in millivolts.
>  
> +What:		/sys/class/usb_power_delivery/.../source-capabilities/<position>:fixed_supply/peak_current
> +Date:		October 2023
> +Contact:	Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>
> +Description:
> +		Fixed Power Source Peak Current Capability
> +		(IOC: Negotiated current as defined in IEC 63002):
> +		==  ===========================================================
> +		0   Peak current equals IOC (default)
> +		1   Overload Capabilities:
> +		    1. Peak current equals 150% IOC for 1ms @ 5% duty cycle
> +		       (low current equals 97% IOC for 19ms)
> +		    2. Peak current equals 125% IOC for 2ms @ 10% duty cycle
> +		       (low current equals 97% IOC for 18ms)
> +		    3. Peak current equals 110% IOC for 10ms @ 50% duty cycle
> +		       (low current equals 90% IOC for 10ms)
> +		2   Overload Capabilities:
> +		    1. Peak current equals 200% IOC for 1ms @ 5% duty cycle
> +		       (low current equals 95% IOC for 19ms)
> +		    2. Peak current equals 150% IOC for 2ms @ 10% duty cycle
> +		       (low current equals 94% IOC for 18ms)
> +		    3. Peak current equals 125% IOC for 10ms @ 50% duty cycle
> +		       (low current equals 75% IOC for 10ms)
> +		3   Overload Capabilities:
> +		    1. Peak current equals 200% IOC for 1ms @ 5% duty cycle
> +		       (low current equals 95% IOC for 19ms)
> +		    2. Peak current equals 175% IOC for 2ms @ 10% duty cycle
> +		       (low current equals 92% IOC for 18ms)
> +		    3. Peak current equals 150% IOC for 10ms @ 50% duty cycle
> +		       (low current equals 50% IOC for 10ms)
> +		==  ===========================================================
> +
>  What:		/sys/class/usb_power_delivery/.../source-capabilities/<position>:fixed_supply/maximum_current
>  Date:		May 2022
>  Contact:	Heikki Krogerus <heikki.krogerus@xxxxxxxxxxxxxxx>
> diff --git a/drivers/usb/typec/pd.c b/drivers/usb/typec/pd.c
> index 8cc66e4467c4..85d015cdbe1f 100644
> --- a/drivers/usb/typec/pd.c
> +++ b/drivers/usb/typec/pd.c
> @@ -83,14 +83,12 @@ unchunked_extended_messages_supported_show(struct device *dev,
>  }
>  static DEVICE_ATTR_RO(unchunked_extended_messages_supported);
>  
> -/*
> - * REVISIT: Peak Current requires access also to the RDO.
>  static ssize_t
>  peak_current_show(struct device *dev, struct device_attribute *attr, char *buf)
>  {
> -	...
> +	return sysfs_emit(buf, "%u\n", (to_pdo(dev)->pdo >> PDO_FIXED_PEAK_CURR_SHIFT) & 3);
>  }
> -*/
> +static DEVICE_ATTR_RO(peak_current);
>  
>  static ssize_t
>  fast_role_swap_current_show(struct device *dev, struct device_attribute *attr, char *buf)
> @@ -135,7 +133,7 @@ static struct attribute *source_fixed_supply_attrs[] = {
>  	&dev_attr_usb_communication_capable.attr,
>  	&dev_attr_dual_role_data.attr,
>  	&dev_attr_unchunked_extended_messages_supported.attr,
> -	/*&dev_attr_peak_current.attr,*/
> +	&dev_attr_peak_current.attr,
>  	&dev_attr_voltage.attr,
>  	&maximum_current_attr.attr,
>  	NULL
> @@ -144,7 +142,7 @@ static struct attribute *source_fixed_supply_attrs[] = {
>  static umode_t fixed_attr_is_visible(struct kobject *kobj, struct attribute *attr, int n)
>  {
>  	if (to_pdo(kobj_to_dev(kobj))->object_position &&
> -	    /*attr != &dev_attr_peak_current.attr &&*/
> +	    attr != &dev_attr_peak_current.attr &&
>  	    attr != &dev_attr_voltage.attr &&
>  	    attr != &maximum_current_attr.attr &&
>  	    attr != &operational_current_attr.attr)
> diff --git a/include/linux/usb/pd.h b/include/linux/usb/pd.h
> index c59fb79a42e8..eb626af0e4e7 100644
> --- a/include/linux/usb/pd.h
> +++ b/include/linux/usb/pd.h
> @@ -228,6 +228,7 @@ enum pd_pdo_type {
>  #define PDO_FIXED_UNCHUNK_EXT		BIT(24) /* Unchunked Extended Message supported (Source) */
>  #define PDO_FIXED_FRS_CURR_MASK		(BIT(24) | BIT(23)) /* FR_Swap Current (Sink) */
>  #define PDO_FIXED_FRS_CURR_SHIFT	23
> +#define PDO_FIXED_PEAK_CURR_SHIFT	20
>  #define PDO_FIXED_VOLT_SHIFT		10	/* 50mV units */
>  #define PDO_FIXED_CURR_SHIFT		0	/* 10mA units */
>  
> -- 
> 2.40.1
> 




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux