diff options
author | K V, Abhilash <abhilash.k.v@intel.com> | 2020-04-23 16:20:58 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2020-04-23 15:33:34 +0200 |
commit | 992a60ed0d5e312ce9a485c9e12097ac82ae4b3e (patch) | |
tree | 6ae6067e0cf253d19bd95fb029b2d9a76a7a6395 /drivers/usb/typec/ucsi/ucsi.h | |
parent | 4dbc6a4ef06d6a79ff91be6fc2e90f8660031ce0 (diff) |
usb: typec: ucsi: register with power_supply class
With this change the UCSI device will show up in
/sys/class/power_supply/. The following values are exported:
- online
- usb_type
- voltage_min
- voltage_max
- voltage_now
- current_max
- current_now
Once a PD-capable type-C power source is connected to the system, GET_PDOS
UCSI command is used to query all source capabilities. Request data object
(RDO) is used to get current values.
Signed-off-by: K V, Abhilash <abhilash.k.v@intel.com>
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Link: https://lore.kernel.org/r/20200423132058.6972-7-heikki.krogerus@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/typec/ucsi/ucsi.h')
-rw-r--r-- | drivers/usb/typec/ucsi/ucsi.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/usb/typec/ucsi/ucsi.h b/drivers/usb/typec/ucsi/ucsi.h index 28e21a1e6b61..e52b5540b254 100644 --- a/drivers/usb/typec/ucsi/ucsi.h +++ b/drivers/usb/typec/ucsi/ucsi.h @@ -5,6 +5,7 @@ #include <linux/bitops.h> #include <linux/device.h> +#include <linux/power_supply.h> #include <linux/types.h> #include <linux/usb/typec.h> @@ -301,6 +302,10 @@ struct ucsi { #define UCSI_MAX_ALTMODES (UCSI_MAX_SVID * 6) #define UCSI_MAX_PDOS (4) +#define UCSI_TYPEC_VSAFE5V 5000 +#define UCSI_TYPEC_1_5_CURRENT 1500 +#define UCSI_TYPEC_3_0_CURRENT 3000 + struct ucsi_connector { int num; @@ -319,6 +324,8 @@ struct ucsi_connector { struct ucsi_connector_status status; struct ucsi_connector_capability cap; + struct power_supply *psy; + struct power_supply_desc psy_desc; u32 rdo; u32 src_pdos[UCSI_MAX_PDOS]; int num_pdos; @@ -330,6 +337,14 @@ int ucsi_send_command(struct ucsi *ucsi, u64 command, void ucsi_altmode_update_active(struct ucsi_connector *con); int ucsi_resume(struct ucsi *ucsi); +#if IS_ENABLED(CONFIG_POWER_SUPPLY) +int ucsi_register_port_psy(struct ucsi_connector *con); +void ucsi_unregister_port_psy(struct ucsi_connector *con); +#else +static inline int ucsi_register_port(struct ucsi_connector *con) { return 0; } +static inline void ucsi_unregister_port_psy(struct ucsi_connector *con) { } +#endif /* CONFIG_POWER_SUPPLY */ + #if IS_ENABLED(CONFIG_TYPEC_DP_ALTMODE) struct typec_altmode * ucsi_register_displayport(struct ucsi_connector *con, |