mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 00:53:34 +02:00
usb: typec: ucsi: Add DATA_RESET option of Connector Reset command
Modify CONNECTOR_RESET command implementation to accommodate DATA_RESET reset type as defined in UCSI spec v2.0 and later. Hard Reset bit field was defined with value 1 in UCSI spec version 1.0. Starting with spec version 1.1, Hard Reset bit field was removed from the CONNECTOR_RESET command, until spec 2.0 reintroduced it with value 0, so, the value to pass in to the command for a Hard Reset is different depending on the UCSI version supported by the LPM. Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> Signed-off-by: Venkat Jayaraman <venkat.jayaraman@intel.com> Link: https://lore.kernel.org/r/20240813231828.1192338-1-pooja.katiyar@intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
7393bf343a
commit
e8778a2505
|
|
@ -1340,12 +1340,26 @@ EXPORT_SYMBOL_GPL(ucsi_connector_change);
|
|||
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
* Hard Reset bit field was defined with value 1 in UCSI spec version 1.0.
|
||||
* Starting with spec version 1.1, Hard Reset bit field was removed from the
|
||||
* CONNECTOR_RESET command, until spec 2.0 reintroduced it with value 0, so, in effect,
|
||||
* the value to pass in to the command for a Hard Reset is different depending
|
||||
* on the supported UCSI version by the LPM.
|
||||
*
|
||||
* For performing a Data Reset on LPMs supporting version 2.0 and greater,
|
||||
* this function needs to be called with the second argument set to 0.
|
||||
*/
|
||||
static int ucsi_reset_connector(struct ucsi_connector *con, bool hard)
|
||||
{
|
||||
u64 command;
|
||||
|
||||
command = UCSI_CONNECTOR_RESET | UCSI_CONNECTOR_NUMBER(con->num);
|
||||
command |= hard ? UCSI_CONNECTOR_RESET_HARD : 0;
|
||||
|
||||
if (con->ucsi->version < UCSI_VERSION_1_1)
|
||||
command |= hard ? UCSI_CONNECTOR_RESET_HARD_VER_1_0 : 0;
|
||||
else if (con->ucsi->version >= UCSI_VERSION_2_0)
|
||||
command |= hard ? 0 : UCSI_CONNECTOR_RESET_DATA_VER_2_0;
|
||||
|
||||
return ucsi_send_command(con->ucsi, command, NULL, 0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ struct dentry;
|
|||
#define UCSIv2_MESSAGE_OUT 272
|
||||
|
||||
/* UCSI versions */
|
||||
#define UCSI_VERSION_1_1 0x0110
|
||||
#define UCSI_VERSION_1_2 0x0120
|
||||
#define UCSI_VERSION_2_0 0x0200
|
||||
#define UCSI_VERSION_2_1 0x0210
|
||||
|
|
@ -122,7 +123,9 @@ void ucsi_connector_change(struct ucsi *ucsi, u8 num);
|
|||
#define UCSI_DEFAULT_GET_CONNECTOR_NUMBER(_cmd_) (((_cmd_) >> 16) & GENMASK(6, 0))
|
||||
|
||||
/* CONNECTOR_RESET command bits */
|
||||
#define UCSI_CONNECTOR_RESET_HARD BIT(23) /* Deprecated in v1.1 */
|
||||
#define UCSI_CONNECTOR_RESET_HARD_VER_1_0 BIT(23) /* Deprecated in v1.1 */
|
||||
#define UCSI_CONNECTOR_RESET_DATA_VER_2_0 BIT(23) /* Redefined in v2.0 */
|
||||
|
||||
|
||||
/* ACK_CC_CI bits */
|
||||
#define UCSI_ACK_CONNECTOR_CHANGE BIT(16)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user