mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-10 11:59:48 +00:00
usb: typec: ucsi: Do not call ACPI _DSM method for UCSI read operations
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>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
64f3b5a6bc
commit
fa48d7e816
@@ -61,9 +61,11 @@ static int ucsi_acpi_read_cci(struct ucsi *ucsi, u32 *cci)
|
|||||||
struct ucsi_acpi *ua = ucsi_get_drvdata(ucsi);
|
struct ucsi_acpi *ua = ucsi_get_drvdata(ucsi);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = ucsi_acpi_dsm(ua, UCSI_DSM_FUNC_READ);
|
if (UCSI_COMMAND(ua->cmd) == UCSI_PPM_RESET) {
|
||||||
if (ret)
|
ret = ucsi_acpi_dsm(ua, UCSI_DSM_FUNC_READ);
|
||||||
return ret;
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
memcpy(cci, ua->base + UCSI_CCI, sizeof(*cci));
|
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)
|
static int ucsi_acpi_read_message_in(struct ucsi *ucsi, void *val, size_t val_len)
|
||||||
{
|
{
|
||||||
struct ucsi_acpi *ua = ucsi_get_drvdata(ucsi);
|
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);
|
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
|
.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)
|
static int ucsi_gram_read_message_in(struct ucsi *ucsi, void *val, size_t val_len)
|
||||||
{
|
{
|
||||||
u16 bogus_change = UCSI_CONSTAT_POWER_LEVEL_CHANGE |
|
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[] = {
|
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 = {
|
.matches = {
|
||||||
DMI_MATCH(DMI_SYS_VENDOR, "LG Electronics"),
|
DMI_MATCH(DMI_SYS_VENDOR, "LG Electronics"),
|
||||||
|
|||||||
Reference in New Issue
Block a user