usb: typec: ucsi: Do not call ACPI _DSM method for UCSI read operations
authorSaranya Gopal <saranya.gopal@intel.com>
Fri, 30 Aug 2024 08:43:42 +0000 (14:13 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 16 Oct 2024 08:16:52 +0000 (10:16 +0200)
ACPI _DSM methods are needed only for UCSI write operations and for reading
CCI during RESET_PPM operation. So, remove _DSM calls from other places.
While there, remove the Zenbook quirk also since the default behavior
now aligns with the Zenbook quirk. With this change, GET_CONNECTOR_STATUS
returns at least 6 seconds faster than before in Arrowlake-S platforms.

Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Saranya Gopal <saranya.gopal@intel.com>
Reviewed-by: Christian A. Ehrhardt <lk@c--e.de>
Link: https://lore.kernel.org/r/20240830084342.460109-1-saranya.gopal@intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/typec/ucsi/ucsi_acpi.c

index 6d6120c8ab7c478e0b82ae7ed42d65fd78ab079b..789f67dd9f81cabee79349f5ca898c658157c0b7 100644 (file)
@@ -61,9 +61,11 @@ static int ucsi_acpi_read_cci(struct ucsi *ucsi, u32 *cci)
        struct ucsi_acpi *ua = ucsi_get_drvdata(ucsi);
        int ret;
 
-       ret = ucsi_acpi_dsm(ua, UCSI_DSM_FUNC_READ);
-       if (ret)
-               return ret;
+       if (UCSI_COMMAND(ua->cmd) == UCSI_PPM_RESET) {
+               ret = ucsi_acpi_dsm(ua, UCSI_DSM_FUNC_READ);
+               if (ret)
+                       return ret;
+       }
 
        memcpy(cci, ua->base + UCSI_CCI, sizeof(*cci));
 
@@ -73,11 +75,6 @@ static int ucsi_acpi_read_cci(struct ucsi *ucsi, u32 *cci)
 static int ucsi_acpi_read_message_in(struct ucsi *ucsi, void *val, size_t val_len)
 {
        struct ucsi_acpi *ua = ucsi_get_drvdata(ucsi);
-       int ret;
-
-       ret = ucsi_acpi_dsm(ua, UCSI_DSM_FUNC_READ);
-       if (ret)
-               return ret;
 
        memcpy(val, ua->base + UCSI_MESSAGE_IN, val_len);
 
@@ -102,42 +99,6 @@ static const struct ucsi_operations ucsi_acpi_ops = {
        .async_control = ucsi_acpi_async_control
 };
 
-static int
-ucsi_zenbook_read_cci(struct ucsi *ucsi, u32 *cci)
-{
-       struct ucsi_acpi *ua = ucsi_get_drvdata(ucsi);
-       int ret;
-
-       if (UCSI_COMMAND(ua->cmd) == UCSI_PPM_RESET) {
-               ret = ucsi_acpi_dsm(ua, UCSI_DSM_FUNC_READ);
-               if (ret)
-                       return ret;
-       }
-
-       memcpy(cci, ua->base + UCSI_CCI, sizeof(*cci));
-
-       return 0;
-}
-
-static int
-ucsi_zenbook_read_message_in(struct ucsi *ucsi, void *val, size_t val_len)
-{
-       struct ucsi_acpi *ua = ucsi_get_drvdata(ucsi);
-
-       /* UCSI_MESSAGE_IN is never read for PPM_RESET, return stored data */
-       memcpy(val, ua->base + UCSI_MESSAGE_IN, val_len);
-
-       return 0;
-}
-
-static const struct ucsi_operations ucsi_zenbook_ops = {
-       .read_version = ucsi_acpi_read_version,
-       .read_cci = ucsi_zenbook_read_cci,
-       .read_message_in = ucsi_zenbook_read_message_in,
-       .sync_control = ucsi_sync_control_common,
-       .async_control = ucsi_acpi_async_control
-};
-
 static int ucsi_gram_read_message_in(struct ucsi *ucsi, void *val, size_t val_len)
 {
        u16 bogus_change = UCSI_CONSTAT_POWER_LEVEL_CHANGE |
@@ -190,13 +151,6 @@ static const struct ucsi_operations ucsi_gram_ops = {
 };
 
 static const struct dmi_system_id ucsi_acpi_quirks[] = {
-       {
-               .matches = {
-                       DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
-                       DMI_MATCH(DMI_PRODUCT_NAME, "ZenBook UX325UA_UM325UA"),
-               },
-               .driver_data = (void *)&ucsi_zenbook_ops,
-       },
        {
                .matches = {
                        DMI_MATCH(DMI_SYS_VENDOR, "LG Electronics"),