usb: typec: ucsi: Workaround for missed op_mode change
authorK V, Abhilash <abhilash.k.v@intel.com>
Thu, 23 Apr 2020 13:20:54 +0000 (16:20 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 23 Apr 2020 13:33:33 +0000 (15:33 +0200)
EC firmware on Dell XPS & Latitude series does not set "Power Operation
Mode Change" bit in "Connector Status change" field of MESSAGE IN Data
while transitioning from type-C current to PD mode.

Instead the "Negotiated Power Level Change" bit is set when the "Power
Operation Mode" field shows the correct mode (i.e. PD).

This patch adds a check for this bit also, to trigger an update of
power operation mode in class driver, while handling GET_CONNECTOR_STATUS
command.

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-3-heikki.krogerus@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/typec/ucsi/ucsi.c

index e9baa9a..0c7c3f9 100644 (file)
@@ -613,7 +613,8 @@ static void ucsi_handle_connector_change(struct work_struct *work)
 
        role = !!(con->status.flags & UCSI_CONSTAT_PWR_DIR);
 
-       if (con->status.change & UCSI_CONSTAT_POWER_OPMODE_CHANGE)
+       if (con->status.change & UCSI_CONSTAT_POWER_OPMODE_CHANGE ||
+           con->status.change & UCSI_CONSTAT_POWER_LEVEL_CHANGE)
                ucsi_pwr_opmode_change(con);
 
        if (con->status.change & UCSI_CONSTAT_POWER_DIR_CHANGE) {